From cf194e6227316ce8ec69c681eeb35ee78669a833 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 12 Feb 2025 20:23:45 -0800 Subject: [PATCH 001/133] initial update for 1.21.4 and gradle --- .editorconfig | 12 + .gitignore | 66 ++-- build.gradle.kts | 54 ++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 252 ++++++++++++++++ gradlew.bat | 94 ++++++ pom.xml | 112 ------- settings.gradle.kts | 1 + .../tk/shanebee/survival/commands/Heal.java | 2 +- .../survival/commands/PlayerDataCmd.java | 2 +- .../survival/listeners/block/BlockBreak.java | 6 +- .../listeners/block/SnowGeneration.java | 8 +- .../listeners/block/WorkbenchShare.java | 8 +- .../listeners/entity/ChestPigmen.java | 6 +- .../listeners/entity/LivingSlime.java | 2 +- .../listeners/item/BeetrootStrength.java | 4 +- .../survival/listeners/item/Consume.java | 6 +- .../survival/listeners/item/GiantBlade.java | 2 +- .../listeners/item/GrapplingHook.java | 12 +- .../survival/listeners/item/MedicKit.java | 30 +- .../listeners/item/PoisonousPotato.java | 4 +- .../survival/listeners/item/Valkyrie.java | 2 +- .../survival/managers/EffectManager.java | 6 +- .../survival/managers/ItemManager.java | 282 +++++++++--------- .../shanebee/survival/tasks/EnergyDrain.java | 14 +- .../shanebee/survival/tasks/WeatherTask.java | 2 +- .../survival/tasks/tool/GiantBlade.java | 16 +- .../survival/tasks/tool/ObsidianMace.java | 4 +- .../survival/tasks/tool/QuartzPickaxe.java | 4 +- .../survival/tasks/tool/Valkyrie.java | 2 +- .../java/tk/shanebee/survival/util/Utils.java | 2 +- .../tk/shanebee/survival/util/Validate.java | 4 +- 33 files changed, 672 insertions(+), 356 deletions(-) create mode 100644 .editorconfig create mode 100644 build.gradle.kts create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat delete mode 100644 pom.xml create mode 100644 settings.gradle.kts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5cb6943 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +max_line_length = 120 +tab_width = 4 +trim_trailing_whitespace = true +ij_continuation_indent_size = 4 diff --git a/.gitignore b/.gitignore index 7be156d..db3f172 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,42 @@ -# Compiled class file -*.class +.gradle/ +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear -*.tar.gz -*.rar - -# IntelliJ Files # +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws *.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -# Custom # +### Eclipse ### +.apt_generated .classpath -.settings +.factorypath .project -bin -JavaDocs/ -out/ -.idea/ -/target/ +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..e5c47f6 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,54 @@ +plugins { + `java-library` + `maven-publish` +} + +repositories { + mavenCentral() + mavenLocal() + + // Paper + maven("https://repo.papermc.io/repository/maven-public/") + + // Command Api Snapshots + maven("https://s01.oss.sonatype.org/content/repositories") + + // JitPack repo + maven("https://jitpack.io") + + // Papi + maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") +} + +dependencies { + // Paper + compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT") + + // FastBoard + implementation("fr.mrmicky:fastboard:2.1.3") + + // Command Api + implementation("dev.jorel:commandapi-bukkit-shade-mojang-mapped:9.7.0") + + // Papi + compileOnly("me.clip:placeholderapi:2.11.6") +} + +group = "com.shanebeestudios" +version = "3.15.0" +description = "SurvivalPlus" +java.sourceCompatibility = JavaVersion.VERSION_21 + +publishing { + publications.create("maven") { + from(components["java"]) + } +} + +tasks.withType() { + options.encoding = "UTF-8" +} + +tasks.withType() { + options.encoding = "UTF-8" +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cea7a79 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..f5feea6 --- /dev/null +++ b/gradlew @@ -0,0 +1,252 @@ +#!/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. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# 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/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# 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##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# 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 + if ! command -v java >/dev/null 2>&1 + then + 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 +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=SC2039,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=SC2039,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 + + +# 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"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# 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..9d21a21 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,94 @@ +@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 +@rem SPDX-License-Identifier: Apache-2.0 +@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. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +: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/pom.xml b/pom.xml deleted file mode 100644 index 4fef8a1..0000000 --- a/pom.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - 4.0.0 - - tk.shanebee - SurvivalPlus - 3.15.0 - - - 1.8 - 1.8 - UTF-8 - - - - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - placeholderapi - http://repo.extendedclip.com/content/repositories/placeholderapi/ - - - - - - org.spigotmc - spigot-api - 1.16.4-R0.1-SNAPSHOT - provided - - - me.clip - placeholderapi - 2.10.4 - provided - - - org.jetbrains - annotations - 16.0.3 - - - - - - server - - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.0 - - - /Users/ShaneBee/Desktop/Server/1-16-SP-TEST/plugins - - - - - - - - - src/main/java - ${project.name}-${project.version} - - - org.apache.maven.plugins - maven-compiler-plugin - - 8 - 8 - - 3.8.1 - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.1.1 - - 11 - - https://hub.spigotmc.org/javadocs/spigot/ - https://commons.apache.org/proper/commons-lang/javadocs/api-2.6 - - *.listeners.*:*.listeners;*.tasks.*:*.tasks;*.commands:*.metrics - - - - - - - src/main/resources - true - . - - plugin.yml - config.yml - items.yml - data.yml - lang_CN.yml - lang_EN.yml - - - - - - diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..8dcf26c --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "SurvivalPlus" diff --git a/src/main/java/tk/shanebee/survival/commands/Heal.java b/src/main/java/tk/shanebee/survival/commands/Heal.java index 8958e12..816d3c4 100644 --- a/src/main/java/tk/shanebee/survival/commands/Heal.java +++ b/src/main/java/tk/shanebee/survival/commands/Heal.java @@ -55,7 +55,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String s, String[] a @SuppressWarnings("ConstantConditions") private void heal(Player player) { - player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + player.setHealth(player.getAttribute(Attribute.MAX_HEALTH).getValue()); player.setFoodLevel(20); player.setSaturation(5); PlayerData playerData = plugin.getPlayerManager().getPlayerData(player); diff --git a/src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java b/src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java index faf90e0..999a2e7 100644 --- a/src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java +++ b/src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java @@ -1,7 +1,7 @@ package tk.shanebee.survival.commands; import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java index 4665fc6..e8ad1d3 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java @@ -24,10 +24,10 @@ import java.util.Random; public class BlockBreak implements Listener { - + private Config settings; private Lang lang; - + public BlockBreak(Survival plugin) { this.lang = plugin.getLang(); this.settings = plugin.getSurvivalConfig(); @@ -249,7 +249,7 @@ private void onHarvest(PlayerInteractEvent e) { block.setBlockData(bush); int durability = Utils.getDurability(tool) + multiplier; Utils.setDurability(tool, durability); - player.playSound(loc, Sound.ITEM_SWEET_BERRIES_PICK_FROM_BUSH, 1, 1); + player.playSound(loc, Sound.BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES, 1, 1); if (durability >= tool.getType().getMaxDurability()) { player.getInventory().setItemInMainHand(null); player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); diff --git a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java b/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java index bd34fef..e3dfad1 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java @@ -10,13 +10,13 @@ import tk.shanebee.survival.Survival; public class SnowGeneration implements Listener { - + private Survival plugin; - + public SnowGeneration(Survival plugin) { this.plugin = plugin; } - + @EventHandler(ignoreCancelled = true) private void chunkLoad(final ChunkLoadEvent event) { if (plugin.isSnowGenOption()) { @@ -99,7 +99,7 @@ private void placeSnow(final Chunk chunk, final ChunkSnapshot chunkSnap, final i // snowable blocks and the stop case STONE: - case GRASS: + case GRASS_BLOCK: case DIRT: case COBBLESTONE: case BEDROCK: diff --git a/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java b/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java index b30b1e7..c1efd6f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java @@ -22,9 +22,9 @@ import java.util.*; public class WorkbenchShare implements Listener { - + private Survival plugin; - + public WorkbenchShare(Survival plugin) { this.plugin = plugin; } @@ -55,7 +55,7 @@ private void onPlayerInteract(PlayerInteractEvent e) { return; // Workaround to get the accessed WorkBench - final Block workbench = p.getTargetBlock(ImmutableSet.of(Material.GRASS, Material.SNOW, Material.AIR), 8); + final Block workbench = p.getTargetBlock(ImmutableSet.of(Material.SHORT_GRASS, Material.SNOW, Material.AIR), 8); if (workbench.getType() != Material.CRAFTING_TABLE) { // Close Inventory if player managed to access the workbench without actually use one. @@ -263,4 +263,4 @@ private void onBreakWorkbench(BlockBreakEvent e) { workbench.removeMetadata("shared_players", plugin); } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java index 7c214dc..a0e16f2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java @@ -67,9 +67,9 @@ private boolean chestContainsGold(Chest block) { } private void moveFaster(Attributable entity, double modifier) { - if (entity.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED) != null) { - double speed = entity.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getBaseValue(); - entity.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(speed * modifier); + if (entity.getAttribute(Attribute.MOVEMENT_SPEED) != null) { + double speed = entity.getAttribute(Attribute.MOVEMENT_SPEED).getBaseValue(); + entity.getAttribute(Attribute.MOVEMENT_SPEED).setBaseValue(speed * modifier); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java b/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java index 5a2ead3..183d9a9 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java @@ -29,7 +29,7 @@ public LivingSlime(Survival plugin) { @EventHandler private void onGhastTearSlimeBlock(ItemSpawnEvent e) { - if (e.getEntityType() == EntityType.DROPPED_ITEM) { + if (e.getEntityType() == EntityType.ITEM) { Item i = e.getEntity(); if (i.getItemStack().getType() == Material.GHAST_TEAR) { Bukkit.getScheduler().runTaskLater(plugin, initRunnable(i), 20); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/BeetrootStrength.java b/src/main/java/tk/shanebee/survival/listeners/item/BeetrootStrength.java index 6d4fc25..de99248 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/BeetrootStrength.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/BeetrootStrength.java @@ -19,13 +19,13 @@ private void onConsume(PlayerItemConsumeEvent event) { int amp = 0; int dur = 200; for (PotionEffect effect : player.getActivePotionEffects()) { - if (effect.getType().equals(PotionEffectType.INCREASE_DAMAGE)) { + if (effect.getType().equals(PotionEffectType.STRENGTH)) { dur += effect.getDuration(); if (dur > 600) dur = 600; player.removePotionEffect(effect.getType()); } } - player.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, dur, amp)); + player.addPotionEffect(new PotionEffect(PotionEffectType.STRENGTH, dur, amp)); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Consume.java b/src/main/java/tk/shanebee/survival/listeners/item/Consume.java index b5c696c..ffae81a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Consume.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Consume.java @@ -63,14 +63,14 @@ private void onConsume(PlayerItemConsumeEvent event) { Random rand = new Random(); if (rand.nextInt(10) + 1 <= 5) { player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); } } else if (ItemManager.compare(item, Item.CLEAN_WATER)) { change = config.MECHANICS_THIRST_REP_CLEAN_WATER; Random rand = new Random(); if (rand.nextInt(10) + 1 <= 2) { player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); } } else if (ItemManager.compare(item, Item.PURIFIED_WATER)) { change = config.MECHANICS_THIRST_REP_PURE_WATER; @@ -153,7 +153,7 @@ private int handleWaterBowl(Player player) { Random rand = new Random(); if (rand.nextInt(10) + 1 <= 8) { player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); } } return change; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java index 67170b5..8c34454 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java @@ -177,7 +177,7 @@ public void run() { Random rand = new Random(); chargingPlayer.getLocation().getWorld().playSound(chargingPlayer.getLocation(), Sound.ENTITY_SHULKER_BULLET_HIT, 1.5F, rand.nextFloat() * 0.4F + 0.8F); - Utils.spawnParticle(chargingPlayer.getLocation(), Particle.EXPLOSION_NORMAL, 10, 0, 0, 0); + Utils.spawnParticle(chargingPlayer.getLocation(), Particle.EXPLOSION, 10, 0, 0, 0); int times = playerData.getStat(Stat.CHARGING); if (--times > 1) diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java index 04218bf..57a6cf8 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java @@ -22,9 +22,9 @@ import tk.shanebee.survival.Survival; public class GrapplingHook implements Listener { - + private Lang lang; - + public GrapplingHook(Survival plugin) { this.lang = plugin.getLang(); } @@ -47,7 +47,7 @@ private void onPlayerFish(PlayerFishEvent event) { for (Entity e : nearbyEntities) // loop through entities { - if (e.getType() == EntityType.FISHING_HOOK) //Hook found + if (e.getType() == EntityType.FISHING_BOBBER) //Hook found { hook = e; break; @@ -76,7 +76,7 @@ private void onPlayerFish(PlayerFishEvent event) { playerLoc.setY(playerLoc.getY() + 0.5); entityLoc.setY(entityLoc.getY() + 0.5); - if (event.getCaught().getType() != EntityType.DROPPED_ITEM) { + if (event.getCaught().getType() != EntityType.ITEM) { Vector vector = entityLoc.toVector().subtract(playerLoc.toVector()); if (vector.getY() > 0) vector.setY(Math.sqrt(vector.getY()) * 4); @@ -90,7 +90,7 @@ private void onPlayerFish(PlayerFishEvent event) { if (reverseVector.getY() > 0) reverseVector.setY(Math.sqrt(reverseVector.getY())); - if (event.getCaught().getType() != EntityType.DROPPED_ITEM) { + if (event.getCaught().getType() != EntityType.ITEM) { event.getCaught().teleport(entityLoc); event.getCaught().setVelocity(reverseVector.multiply(0.5).multiply(0.125)); } else { @@ -124,4 +124,4 @@ private void onPlayerFish(PlayerFishEvent event) { } } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java index a4a3f98..34506a3 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java @@ -28,14 +28,14 @@ public class MedicKit implements Listener { private Survival plugin; private Lang lang; private PlayerManager playerManager; - + public MedicKit(Survival plugin) { this.plugin = plugin; this.lang = plugin.getLang(); this.playerManager = plugin.getPlayerManager(); } - + @EventHandler(priority = EventPriority.HIGHEST) private void onDamaged(EntityDamageByEntityEvent event) { @@ -79,17 +79,17 @@ public void run() { Random rand = new Random(); - player.removePotionEffect(PotionEffectType.SLOW); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20, 6, true, false)); - player.removePotionEffect(PotionEffectType.JUMP); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20, 199, true, false)); + player.removePotionEffect(PotionEffectType.SLOWNESS); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); + player.removePotionEffect(PotionEffectType.JUMP_BOOST); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); healed.getWorld().playSound(healed.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - healed.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); + healed.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); Location particleLoc = healed.getLocation(); particleLoc.setY(particleLoc.getY() + 1); - Utils.spawnParticle(particleLoc, Particle.VILLAGER_HAPPY, 10, 0.5, 0.5, 0.5); + Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); playerData.setStat(Stat.HEAL_TIMES, times); @@ -142,17 +142,17 @@ public void run() { if (times-- > 0) { Random rand = new Random(); - player.removePotionEffect(PotionEffectType.SLOW); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20, 6, true, false)); - player.removePotionEffect(PotionEffectType.JUMP); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20, 199, true, false)); + player.removePotionEffect(PotionEffectType.SLOWNESS); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); + player.removePotionEffect(PotionEffectType.JUMP_BOOST); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); player.getWorld().playSound(player.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 1); - Utils.spawnParticle(particleLoc, Particle.VILLAGER_HAPPY, 10, 0.5, 0.5, 0.5); + Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); playerData.setStat(Stat.HEAL_TIMES, times); @@ -181,4 +181,4 @@ public void run() { } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/PoisonousPotato.java b/src/main/java/tk/shanebee/survival/listeners/item/PoisonousPotato.java index d7407d4..d5f28a7 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/PoisonousPotato.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/PoisonousPotato.java @@ -24,9 +24,9 @@ private void onConsume(PlayerItemConsumeEvent event) { Random rand = new Random(); if (rand.nextInt(10) + 1 <= 6) { player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0), true); - player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 200, 0), true); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0), true); } } } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java index 7286e7c..601aa84 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java @@ -135,7 +135,7 @@ private void spin(final Player player) { particleCircle(player, 50, 2.5f, Particle.CRIT); particleCircle(player, 25, 2f, Particle.CRIT); - particleCircle(player, 10, 2.5f, Particle.CRIT_MAGIC); + particleCircle(player, 10, 2.5f, Particle.CRIT); Random rand = new Random(); assert player.getLocation().getWorld() != null; diff --git a/src/main/java/tk/shanebee/survival/managers/EffectManager.java b/src/main/java/tk/shanebee/survival/managers/EffectManager.java index 053ab9e..7d5d1e9 100644 --- a/src/main/java/tk/shanebee/survival/managers/EffectManager.java +++ b/src/main/java/tk/shanebee/survival/managers/EffectManager.java @@ -12,7 +12,7 @@ import tk.shanebee.survival.util.Utils; public class EffectManager { - + private final Survival plugin; private final Config config; @@ -23,7 +23,7 @@ public class EffectManager { private ObsidianMace obsidianMace = null; private QuartzPickaxe quartzPickaxe = null; private Valkyrie valkyrie = null; - + public EffectManager(Survival plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); @@ -70,7 +70,7 @@ public void cancelTasks() { */ public void applyObsidianMaceEffects(Player player, LivingEntity enemy) { enemy.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 100, 0, false)); - enemy.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100, 0, false)); + enemy.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 100, 0, false)); player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 48, 2, true)); Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 2); diff --git a/src/main/java/tk/shanebee/survival/managers/ItemManager.java b/src/main/java/tk/shanebee/survival/managers/ItemManager.java index 0ff1521..46aa07d 100644 --- a/src/main/java/tk/shanebee/survival/managers/ItemManager.java +++ b/src/main/java/tk/shanebee/survival/managers/ItemManager.java @@ -36,7 +36,7 @@ /** * Manager for custom SurvivalPlus items */ -@SuppressWarnings("ConstantConditions") +@SuppressWarnings({"ConstantConditions", "removal"}) public class ItemManager { private static final Lang lang = Survival.getInstance().getLang(); @@ -71,12 +71,12 @@ public static ItemStack get(Item item) { float shiv_spd = 1.8f; AttributeModifier i_shivDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c56"), - "generic.attackDamage", shiv_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_shivMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, i_shivDamage); + "generic.attackDamage", shiv_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_shivMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_shivDamage); AttributeModifier i_shivSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c57"), - "generic.attackSpeed", shiv_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_shivMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, i_shivSpeed); + "generic.attackSpeed", shiv_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_shivMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_shivSpeed); i_shivMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); @@ -91,7 +91,7 @@ public static ItemStack get(Item item) { ChatColor.GRAY + Utils.getColoredString(lang.in_off_hand), ChatColor.GRAY + " " + Utils.getColoredString(lang.poisoned_retain), ChatColor.GRAY + " " + Utils.getColoredString(lang.reduce_50) - ) + ) ); i_shiv.setItemMeta(i_shivMeta); return i_shiv; @@ -111,8 +111,8 @@ public static ItemStack get(Item item) { int gAxe_dmg = 8; AttributeModifier i_gAxeSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c58"), - "generic.attackSpeed", gAxe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gAxeMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, i_gAxeSpeed); + "generic.attackSpeed", gAxe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gAxeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gAxeSpeed); i_gAxeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); @@ -126,9 +126,9 @@ public static ItemStack get(Item item) { ChatColor.RESET + Utils.getColoredString(lang.valkyrie_axe_spin), ChatColor.RESET + " " + Utils.getColoredString(lang.valkyrie_axe_cooldown), ChatColor.RESET + " " + Utils.getColoredString(lang.decrease_hunger_value) - ) + ) ); - i_gAxeMeta.addEnchant(Enchantment.DURABILITY, 5, true); + i_gAxeMeta.addEnchant(Enchantment.UNBREAKING, 5, true); i_gAxe.setItemMeta(i_gAxeMeta); return i_gAxe; } else if (item == Item.QUARTZ_PICKAXE) { @@ -140,12 +140,12 @@ public static ItemStack get(Item item) { float gPickaxe_spd = 0.8f; AttributeModifier i_gPickDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c59"), - "generic.attackDamage", gPickaxe_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gPickaxeMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, i_gPickDamage); + "generic.attackDamage", gPickaxe_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gPickaxeMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gPickDamage); AttributeModifier i_gPickSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c60"), - "generic.attackSpeed", gPickaxe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gPickaxeMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, i_gPickSpeed); + "generic.attackSpeed", gPickaxe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gPickaxeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gPickSpeed); i_gPickaxeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); @@ -156,7 +156,7 @@ public static ItemStack get(Item item) { ChatColor.DARK_GREEN + " " + gPickaxe_spd + " " + Utils.getColoredString(lang.attack_speed), ChatColor.DARK_GREEN + " " + gPickaxe_dmg + " " + Utils.getColoredString(lang.attack_damage), ChatColor.GRAY + " " + Utils.getColoredString(lang.haste) - ) + ) ); i_gPickaxeMeta.addEnchant(Enchantment.SILK_TOUCH, 1, false); i_gPickaxeMeta.addEnchant(Enchantment.MENDING, 1, false); @@ -173,16 +173,16 @@ public static ItemStack get(Item item) { float gSpade_knockbackPercent = 0.5f; AttributeModifier i_gSpadeDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c61"), - "generic.attackDamage", gSpade_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSpadeMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, i_gSpadeDamage); + "generic.attackDamage", gSpade_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gSpadeMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gSpadeDamage); AttributeModifier i_gSpadeSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c62"), - "generic.attackSpeed", gSpade_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSpadeMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, i_gSpadeSpeed); + "generic.attackSpeed", gSpade_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gSpadeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gSpadeSpeed); AttributeModifier i_gSpadeKnock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c63"), - "generic.knockbackResistance", gSpade_knockbackPercent, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HAND); - i_gSpadeMeta.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, i_gSpadeKnock); + "generic.knockbackResistance", gSpade_knockbackPercent, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HAND); + i_gSpadeMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, i_gSpadeKnock); i_gSpadeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); @@ -197,10 +197,10 @@ public static ItemStack get(Item item) { ChatColor.RESET + " " + Utils.getColoredString(lang.exhausted_slow), ChatColor.RESET + " " + Utils.getColoredString(lang.expire_disarm), ChatColor.RESET + " " + Utils.getColoredString(lang.knockback_resistance) - ) + ) ); i_gSpadeMeta.addEnchant(Enchantment.KNOCKBACK, 3, true); - i_gSpadeMeta.addEnchant(Enchantment.DURABILITY, 5, true); + i_gSpadeMeta.addEnchant(Enchantment.UNBREAKING, 5, true); i_gSpadeMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); i_gSpade.setItemMeta(i_gSpadeMeta); return i_gSpade; @@ -214,16 +214,16 @@ public static ItemStack get(Item item) { float gHoe_move = -0.5f; AttributeModifier i_gHoeDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c64"), - "generic.attackDamage", gHoe_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gHoeMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, i_gHoeDamage); + "generic.attackDamage", gHoe_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gHoeMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gHoeDamage); AttributeModifier i_gHoeSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c65"), - "generic.attackSpeed", gHoe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gHoeMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, i_gHoeSpeed); + "generic.attackSpeed", gHoe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gHoeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gHoeSpeed); AttributeModifier i_gHoeMove = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c66"), - "generic.movementSpeed", gHoe_move, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.OFF_HAND); - i_gHoeMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_gHoeMove); + "generic.movementSpeed", gHoe_move, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.OFF_HAND); + i_gHoeMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_gHoeMove); i_gHoeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); @@ -242,9 +242,9 @@ public static ItemStack get(Item item) { ChatColor.GRAY + Utils.getColoredString(lang.in_off_hand), ChatColor.RESET + " " + Utils.getColoredString(lang.half_shield_resistance), ChatColor.RESET + " " + Utils.getColoredString(lang.reflecting_coming) - ) + ) ); - i_gHoeMeta.addEnchant(Enchantment.DURABILITY, 5, true); + i_gHoeMeta.addEnchant(Enchantment.UNBREAKING, 5, true); i_gHoe.setItemMeta(i_gHoeMeta); return i_gHoe; } else if (item == Item.BLAZE_SWORD) { @@ -257,16 +257,16 @@ public static ItemStack get(Item item) { int gSword_health = -6; AttributeModifier i_gSwordDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c67"), - "generic.attackDamage", gSword_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSwordMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, i_gSwordDamage); + "generic.attackDamage", gSword_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gSwordMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gSwordDamage); AttributeModifier i_gSwordSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c68"), - "generic.attackSpeed", gSword_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSwordMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, i_gSwordSpeed); + "generic.attackSpeed", gSword_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gSwordMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gSwordSpeed); AttributeModifier i_gSwordHealth = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c69"), - "generic.maxHealth", gSword_health, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSwordMeta.addAttributeModifier(Attribute.GENERIC_MAX_HEALTH, i_gSwordHealth); + "generic.maxHealth", gSword_health, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + i_gSwordMeta.addAttributeModifier(Attribute.MAX_HEALTH, i_gSwordHealth); i_gSwordMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); @@ -282,10 +282,10 @@ public static ItemStack get(Item item) { ChatColor.GRAY + Utils.getColoredString(lang.right_click_sneaking), ChatColor.RESET + " " + Utils.getColoredString(lang.blaze_sword_spread_fire), ChatColor.RESET + " " + Utils.getColoredString(lang.blaze_sword_cost) - ) + ) ); i_gSwordMeta.addEnchant(Enchantment.FIRE_ASPECT, 2, true); - i_gSwordMeta.addEnchant(Enchantment.DURABILITY, 3, false); + i_gSwordMeta.addEnchant(Enchantment.UNBREAKING, 3, false); i_gSword.setItemMeta(i_gSwordMeta); return i_gSword; } else if (item == Item.WORKBENCH) { @@ -302,10 +302,10 @@ public static ItemStack get(Item item) { float firestriker_spd = 4f; AttributeModifier i_firestrikerSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c55"), - "generic.attackSpeed", - firestriker_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + "generic.attackSpeed", + firestriker_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_firestrikerMeta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, i_firestrikerSpeed); + i_firestrikerMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_firestrikerSpeed); i_firestrikerMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); i_firestrikerMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.firestriker)); String lore = Utils.getColoredString(lang.firestriker_lore); @@ -331,8 +331,8 @@ public static ItemStack get(Item item) { i_leatherBootsMeta.setCustomModelData(Item.REINFORCED_LEATHER_BOOTS.getModelData()); AttributeModifier i_leatherBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c70"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_leatherBootsMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_leatherBootsArmor); + "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); + i_leatherBootsMeta.addAttributeModifier(Attribute.ARMOR, i_leatherBootsArmor); i_leatherBootsMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.reinforced_boots)); @@ -371,15 +371,15 @@ public static ItemStack get(Item item) { ItemMeta i_goldBootsMeta = i_goldBoots.getItemMeta(); AttributeModifier i_goldBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c71"), - "generic.armor", 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_goldBootsMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_goldBootsArmor); + "generic.armor", 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); + i_goldBootsMeta.addAttributeModifier(Attribute.ARMOR, i_goldBootsArmor); AttributeModifier i_goldBootsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c71"), - "generic.movementSpeed", -0.0125, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); - i_goldBootsMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_goldBootsSpeed); + "generic.movementSpeed", -0.0125, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); + i_goldBootsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldBootsSpeed); i_goldBootsMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_sabatons)); - i_goldBootsMeta.addEnchant(org.bukkit.enchantments.Enchantment.PROTECTION_FALL, 4, true); + i_goldBootsMeta.addEnchant(Enchantment.FEATHER_FALLING, 4, true); i_goldBoots.setItemMeta(i_goldBootsMeta); return i_goldBoots; @@ -388,15 +388,15 @@ public static ItemStack get(Item item) { ItemMeta i_goldChestplateMeta = i_goldChestplate.getItemMeta(); AttributeModifier i_goldChestArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c72"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); - i_goldChestplateMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_goldChestArmor); + "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); + i_goldChestplateMeta.addAttributeModifier(Attribute.ARMOR, i_goldChestArmor); AttributeModifier i_goldChestSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c72"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); - i_goldChestplateMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_goldChestSpeed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); + i_goldChestplateMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldChestSpeed); i_goldChestplateMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_guard)); - i_goldChestplateMeta.addEnchant(org.bukkit.enchantments.Enchantment.PROTECTION_EXPLOSIONS, 4, true); + i_goldChestplateMeta.addEnchant(Enchantment.BLAST_PROTECTION, 4, true); i_goldChestplate.setItemMeta(i_goldChestplateMeta); return i_goldChestplate; @@ -405,15 +405,15 @@ public static ItemStack get(Item item) { ItemMeta i_goldLeggingsMeta = i_goldLeggings.getItemMeta(); AttributeModifier i_goldLeggingsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c73"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); - i_goldLeggingsMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_goldLeggingsArmor); + "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); + i_goldLeggingsMeta.addAttributeModifier(Attribute.ARMOR, i_goldLeggingsArmor); AttributeModifier i_goldLeggingsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c73"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); - i_goldLeggingsMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_goldLeggingsSpeed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); + i_goldLeggingsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldLeggingsSpeed); i_goldLeggingsMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_greaves)); - i_goldLeggingsMeta.addEnchant(Enchantment.PROTECTION_EXPLOSIONS, 4, true); + i_goldLeggingsMeta.addEnchant(Enchantment.BLAST_PROTECTION, 4, true); i_goldLeggings.setItemMeta(i_goldLeggingsMeta); return i_goldLeggings; @@ -422,15 +422,15 @@ public static ItemStack get(Item item) { ItemMeta i_goldHelmetMeta = i_goldHelmet.getItemMeta(); AttributeModifier i_goldHelmetArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c74"), - "generic.armor", 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - i_goldHelmetMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_goldHelmetArmor); + "generic.armor", 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + i_goldHelmetMeta.addAttributeModifier(Attribute.ARMOR, i_goldHelmetArmor); AttributeModifier i_goldHelmetSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c74"), - "generic.movementSpeed", -0.0125, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - i_goldHelmetMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_goldHelmetSpeed); + "generic.movementSpeed", -0.0125, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); + i_goldHelmetMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldHelmetSpeed); i_goldHelmetMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_crown)); - i_goldHelmetMeta.addEnchant(org.bukkit.enchantments.Enchantment.MENDING, 1, true); + i_goldHelmetMeta.addEnchant(Enchantment.MENDING, 1, true); i_goldHelmet.setItemMeta(i_goldHelmetMeta); return i_goldHelmet; @@ -439,11 +439,11 @@ public static ItemStack get(Item item) { ItemMeta i_ironBootsMeta = i_ironBoots.getItemMeta(); AttributeModifier i_ironBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c75"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_ironBootsMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_ironBootsArmor); + "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); + i_ironBootsMeta.addAttributeModifier(Attribute.ARMOR, i_ironBootsArmor); AttributeModifier i_ironBootsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c76"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); - i_ironBootsMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_ironBootsSpeed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); + i_ironBootsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironBootsSpeed); i_ironBoots.setItemMeta(i_ironBootsMeta); return i_ironBoots; @@ -452,12 +452,12 @@ public static ItemStack get(Item item) { ItemMeta i_ironChestplateMeta = i_ironChestplate.getItemMeta(); AttributeModifier i_ironChestMove = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c77"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); - i_ironChestplateMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_ironChestMove); + "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); + i_ironChestplateMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironChestMove); AttributeModifier i_ironChestArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c78"), - "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); - i_ironChestplateMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_ironChestArmor); + "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); + i_ironChestplateMeta.addAttributeModifier(Attribute.ARMOR, i_ironChestArmor); i_ironChestplate.setItemMeta(i_ironChestplateMeta); return i_ironChestplate; @@ -466,12 +466,12 @@ public static ItemStack get(Item item) { ItemMeta i_ironLeggingsMeta = i_ironLeggings.getItemMeta(); AttributeModifier i_ironLeggingsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c79"), - "generic.armor", 5, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); - i_ironLeggingsMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_ironLeggingsArmor); + "generic.armor", 5, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); + i_ironLeggingsMeta.addAttributeModifier(Attribute.ARMOR, i_ironLeggingsArmor); AttributeModifier i_ironLeggingsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c80"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); - i_ironLeggingsMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_ironLeggingsSpeed); + "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); + i_ironLeggingsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironLeggingsSpeed); i_ironLeggings.setItemMeta(i_ironLeggingsMeta); return i_ironLeggings; @@ -480,12 +480,12 @@ public static ItemStack get(Item item) { ItemMeta i_ironHelmetMeta = i_ironHelmet.getItemMeta(); AttributeModifier i_ironHelmetArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c81"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - i_ironHelmetMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_ironHelmetArmor); + "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + i_ironHelmetMeta.addAttributeModifier(Attribute.ARMOR, i_ironHelmetArmor); AttributeModifier i_ironHelmetSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c82"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - i_ironHelmetMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_ironHelmetSpeed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); + i_ironHelmetMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironHelmetSpeed); i_ironHelmet.setItemMeta(i_ironHelmetMeta); return i_ironHelmet; @@ -494,12 +494,12 @@ public static ItemStack get(Item item) { ItemMeta i_diamondBootsMeta = i_diamondBoots.getItemMeta(); AttributeModifier i_diamondBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c83"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_diamondBootsMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_diamondBootsArmor); + "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); + i_diamondBootsMeta.addAttributeModifier(Attribute.ARMOR, i_diamondBootsArmor); AttributeModifier i_diamondBootsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c84"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); - i_diamondBootsMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_diamondBootsSpeed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); + i_diamondBootsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondBootsSpeed); i_diamondBoots.setItemMeta(i_diamondBootsMeta); return i_diamondBoots; @@ -508,12 +508,12 @@ public static ItemStack get(Item item) { ItemMeta i_diamondChestplateMeta = i_diamondChestplate.getItemMeta(); AttributeModifier i_diamondChestArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c85"), - "generic.armor", 8, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); - i_diamondChestplateMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_diamondChestArmor); + "generic.armor", 8, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); + i_diamondChestplateMeta.addAttributeModifier(Attribute.ARMOR, i_diamondChestArmor); AttributeModifier i_diamondChestSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c86"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); - i_diamondChestplateMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_diamondChestSpeed); + "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); + i_diamondChestplateMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondChestSpeed); i_diamondChestplate.setItemMeta(i_diamondChestplateMeta); return i_diamondChestplate; @@ -522,12 +522,12 @@ public static ItemStack get(Item item) { ItemMeta i_diamondLeggingsMeta = i_diamondLeggings.getItemMeta(); AttributeModifier i_diamondLegArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c87"), - "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); - i_diamondLeggingsMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_diamondLegArmor); + "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); + i_diamondLeggingsMeta.addAttributeModifier(Attribute.ARMOR, i_diamondLegArmor); AttributeModifier i_diamondLegSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c88"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); - i_diamondLeggingsMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_diamondLegSpeed); + "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); + i_diamondLeggingsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondLegSpeed); i_diamondLeggings.setItemMeta(i_diamondLeggingsMeta); return i_diamondLeggings; @@ -536,12 +536,12 @@ public static ItemStack get(Item item) { ItemMeta i_diamondHelmetMeta = i_diamondHelmet.getItemMeta(); AttributeModifier i_diamondHelmetArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c89"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - i_diamondHelmetMeta.addAttributeModifier(Attribute.GENERIC_ARMOR, i_diamondHelmetArmor); + "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + i_diamondHelmetMeta.addAttributeModifier(Attribute.ARMOR, i_diamondHelmetArmor); AttributeModifier i_diamondHelmetSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c90"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - i_diamondHelmetMeta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, i_diamondHelmetSpeed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); + i_diamondHelmetMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondHelmetSpeed); i_diamondHelmet.setItemMeta(i_diamondHelmetMeta); return i_diamondHelmet; @@ -552,8 +552,8 @@ public static ItemStack get(Item item) { recurveBowMeta.setCustomModelData(Item.RECURVE_BOW.getModelData()); recurveBowMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.recurved_bow)); recurveBowMeta.setLore(Collections.singletonList(ChatColor.RESET + "" + ChatColor.LIGHT_PURPLE + - Utils.getColoredString(lang.recurved))); - recurveBowMeta.addEnchant(Enchantment.ARROW_KNOCKBACK, 1, true); + Utils.getColoredString(lang.recurved))); + recurveBowMeta.addEnchant(Enchantment.PUNCH, 1, true); i_recurveBow.setItemMeta(recurveBowMeta); return i_recurveBow; } else if (item == Item.RECURVE_CROSSBOW) { @@ -562,7 +562,7 @@ public static ItemStack get(Item item) { recurveCrossbowMeta.setCustomModelData(Item.RECURVE_BOW.getModelData()); recurveCrossbowMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.recurved_crossbow)); recurveCrossbowMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.recurved))); - recurveCrossbowMeta.addEnchant(Enchantment.ARROW_KNOCKBACK, 1, true); + recurveCrossbowMeta.addEnchant(Enchantment.PUNCH, 1, true); recurveCrossbow.setItemMeta(recurveCrossbowMeta); return recurveCrossbow; } else if (item == Item.DIRTY_WATER) { @@ -573,7 +573,7 @@ public static ItemStack get(Item item) { ((PotionMeta) dirtyMeta).setColor(Color.fromRGB(lang.dirty_water_color)); dirtyMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.dirty_water)); dirtyMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.dirty_water_lore))); - dirtyMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + dirtyMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); dirty_water.setItemMeta(dirtyMeta); return dirty_water; } else if (item == Item.CLEAN_WATER) { @@ -584,7 +584,7 @@ public static ItemStack get(Item item) { ((PotionMeta) cleanMeta).setColor(Color.fromRGB(lang.clean_water_color)); cleanMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.clean_water)); cleanMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.clean_water_lore))); - cleanMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + cleanMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); clean_water.setItemMeta(cleanMeta); return clean_water; } else if (item == Item.PURIFIED_WATER) { @@ -595,7 +595,7 @@ public static ItemStack get(Item item) { ((PotionMeta) meta).setColor(Color.fromRGB(lang.purified_water_color)); meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.purified_water)); meta.setLore(Collections.singletonList(Utils.getColoredString(lang.purified_water_lore))); - meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); purified_water.setItemMeta(meta); return purified_water; } else if (item == Item.WATER_BOWL) { @@ -659,7 +659,7 @@ public static ItemStack get(Item item) { ((PotionMeta) coffee_meta).setBasePotionData(new PotionData(PotionType.WATER)); ((PotionMeta) coffee_meta).setColor(Color.fromRGB(lang.coffee_color)); coffee_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.coffee_name)); - coffee_meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + coffee_meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); coffee.setItemMeta(coffee_meta); return coffee; } else if (item == Item.HOT_MILK) { @@ -669,7 +669,7 @@ public static ItemStack get(Item item) { ((PotionMeta) hot_milk_meta).setBasePotionData(new PotionData(PotionType.WATER)); ((PotionMeta) hot_milk_meta).setColor(Color.fromRGB(lang.hot_milk_color)); hot_milk_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.hot_milk_name)); - hot_milk_meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + hot_milk_meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); hot_milk.setItemMeta(hot_milk_meta); return hot_milk; } else if (item == Item.COLD_MILK) { @@ -679,7 +679,7 @@ public static ItemStack get(Item item) { ((PotionMeta) cold_milk_meta).setBasePotionData(new PotionData(PotionType.WATER)); ((PotionMeta) cold_milk_meta).setColor(Color.fromRGB(lang.cold_milk_color)); cold_milk_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.cold_milk_name)); - cold_milk_meta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + cold_milk_meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); cold_milk.setItemMeta(cold_milk_meta); return cold_milk; } else if (item == Item.COFFEE_BEAN) { @@ -767,20 +767,20 @@ public static ItemStack get(Item item) { ItemMeta n_h_meta = n_helmet.getItemMeta(); AttributeModifier n_h_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c91"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.GENERIC_ARMOR, n_h_armor); + "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_h_meta.addAttributeModifier(Attribute.ARMOR, n_h_armor); AttributeModifier n_h_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c91"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.GENERIC_ARMOR_TOUGHNESS, n_h_tough); + "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_h_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_h_tough); AttributeModifier n_h_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c91"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, n_h_knock); + "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_h_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_h_knock); AttributeModifier n_h_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c91"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, n_h_speed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); + n_h_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_h_speed); n_helmet.setItemMeta(n_h_meta); return n_helmet; @@ -789,20 +789,20 @@ public static ItemStack get(Item item) { ItemMeta n_c_meta = n_chest.getItemMeta(); AttributeModifier n_c_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c92"), - "generic.armor", 8, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.GENERIC_ARMOR, n_c_armor); + "generic.armor", 8, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_c_meta.addAttributeModifier(Attribute.ARMOR, n_c_armor); AttributeModifier n_c_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c92"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.GENERIC_ARMOR_TOUGHNESS, n_c_tough); + "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_c_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_c_tough); AttributeModifier n_c_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c92"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, n_c_knock); + "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_c_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_c_knock); AttributeModifier n_c_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c92"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, n_c_speed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); + n_c_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_c_speed); n_chest.setItemMeta(n_c_meta); return n_chest; @@ -811,20 +811,20 @@ public static ItemStack get(Item item) { ItemMeta n_l_meta = n_leg.getItemMeta(); AttributeModifier n_l_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c93"), - "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.GENERIC_ARMOR, n_l_armor); + "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_l_meta.addAttributeModifier(Attribute.ARMOR, n_l_armor); AttributeModifier n_l_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c93"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.GENERIC_ARMOR_TOUGHNESS, n_l_tough); + "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_l_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_l_tough); AttributeModifier n_l_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c93"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, n_l_knock); + "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_l_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_l_knock); AttributeModifier n_l_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c93"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, n_l_speed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); + n_l_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_l_speed); n_leg.setItemMeta(n_l_meta); return n_leg; @@ -833,20 +833,20 @@ public static ItemStack get(Item item) { ItemMeta n_b_meta = n_boot.getItemMeta(); AttributeModifier n_b_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c94"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.GENERIC_ARMOR, n_b_armor); + "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_b_meta.addAttributeModifier(Attribute.ARMOR, n_b_armor); AttributeModifier n_b_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c94"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.GENERIC_ARMOR_TOUGHNESS, n_b_tough); + "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_b_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_b_tough); AttributeModifier n_b_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c94"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, n_b_knock); + "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); + n_b_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_b_knock); AttributeModifier n_b_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c94"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, n_b_speed); + "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); + n_b_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_b_speed); n_boot.setItemMeta(n_b_meta); return n_boot; @@ -939,16 +939,16 @@ public static void applyAttribute(ItemStack itemStack, Item items) { POTION_EFFECTS = new ArrayList<>(); // BAD POTION_EFFECTS.add(PotionEffectType.BAD_OMEN); - POTION_EFFECTS.add(PotionEffectType.CONFUSION); + POTION_EFFECTS.add(PotionEffectType.NAUSEA); POTION_EFFECTS.add(PotionEffectType.POISON); POTION_EFFECTS.add(PotionEffectType.UNLUCK); POTION_EFFECTS.add(PotionEffectType.HUNGER); - POTION_EFFECTS.add(PotionEffectType.HARM); - POTION_EFFECTS.add(PotionEffectType.SLOW); + POTION_EFFECTS.add(PotionEffectType.INSTANT_DAMAGE); + POTION_EFFECTS.add(PotionEffectType.SLOWNESS); // GOOD POTION_EFFECTS.add(PotionEffectType.DOLPHINS_GRACE); POTION_EFFECTS.add(PotionEffectType.ABSORPTION); - POTION_EFFECTS.add(PotionEffectType.FAST_DIGGING); + POTION_EFFECTS.add(PotionEffectType.HASTE); POTION_EFFECTS.add(PotionEffectType.LUCK); POTION_EFFECTS.add(PotionEffectType.HEALTH_BOOST); POTION_EFFECTS.add(PotionEffectType.REGENERATION); diff --git a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java index 2c4e53d..34fbf4e 100644 --- a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java @@ -103,18 +103,18 @@ private boolean targetMatch(double target, double level, double newLevel) { private static final PotionEffect ABSORPTION_500; static { - SICK_40 = new PotionEffect(PotionEffectType.CONFUSION, 40, 0); - SICK_120 = new PotionEffect(PotionEffectType.CONFUSION, 120, 0); + SICK_40 = new PotionEffect(PotionEffectType.NAUSEA, 40, 0); + SICK_120 = new PotionEffect(PotionEffectType.NAUSEA, 120, 0); BLIND_50 = new PotionEffect(PotionEffectType.BLINDNESS, 50, 0); BLIND_120 = new PotionEffect(PotionEffectType.BLINDNESS, 120, 0); NIGHT_10 = new PotionEffect(PotionEffectType.NIGHT_VISION, 10, 0); NIGHT_120 = new PotionEffect(PotionEffectType.NIGHT_VISION, 120, 0); - MINING_120 = new PotionEffect(PotionEffectType.SLOW_DIGGING, 120, 0, false, false); - MINING_120_2 = new PotionEffect(PotionEffectType.SLOW_DIGGING, 120, 1, false, false); - MINING_120_3 = new PotionEffect(PotionEffectType.SLOW_DIGGING, 120, 2, false, false); - SLOW_120 = new PotionEffect(PotionEffectType.SLOW, 120, 0, false, false); + MINING_120 = new PotionEffect(PotionEffectType.MINING_FATIGUE, 120, 0, false, false); + MINING_120_2 = new PotionEffect(PotionEffectType.MINING_FATIGUE, 120, 1, false, false); + MINING_120_3 = new PotionEffect(PotionEffectType.MINING_FATIGUE, 120, 2, false, false); + SLOW_120 = new PotionEffect(PotionEffectType.SLOWNESS, 120, 0, false, false); WITHER_100 = new PotionEffect(PotionEffectType.WITHER, 100, 0); - HASTE_120 = new PotionEffect(PotionEffectType.FAST_DIGGING, 120, 0, false, false, true); + HASTE_120 = new PotionEffect(PotionEffectType.HASTE, 120, 0, false, false, true); ABSORPTION_500 = new PotionEffect(PotionEffectType.ABSORPTION, 500, 1, false, false); } diff --git a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java index d139cb0..ac9d14b 100644 --- a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java +++ b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java @@ -106,7 +106,7 @@ private boolean isAtHighest(Player player) { } private void setWalkSpeed(Player player, double speed) { - AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED); + AttributeInstance attribute = player.getAttribute(Attribute.MOVEMENT_SPEED); if (attribute != null) { attribute.setBaseValue(speed); } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java b/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java index f554abc..870cc31 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java @@ -42,9 +42,9 @@ public GiantBlade(Survival plugin) { .add(Material.DIAMOND_SWORD).add(Material.DIAMOND_PICKAXE).add(Material.DIAMOND_SHOVEL) .add(Material.DIAMOND_HOE).add(Material.BOW).build(); - this.DAMAGE = new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 20, 1, false); - this.SLOW = new PotionEffect(PotionEffectType.SLOW, 20, 6, true); - this.JUMP = new PotionEffect(PotionEffectType.JUMP, 20, 199, true); + this.DAMAGE = new PotionEffect(PotionEffectType.RESISTANCE, 20, 1, false); + this.SLOW = new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true); + this.JUMP = new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true); this.runTaskTimer(plugin, 1, 10); } @@ -61,23 +61,23 @@ public void run() { //TODO this guy needs some serious work Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 1); assert particleLoc.getWorld() != null; - particleLoc.getWorld().spawnParticle(Particle.CRIT_MAGIC, particleLoc, 10, 0.5, 0.5, 0.5); + particleLoc.getWorld().spawnParticle(Particle.CRIT, particleLoc, 10, 0.5, 0.5, 0.5); } if (ItemManager.compare(offItem, Item.ENDER_GIANT_BLADE)) { - player.removePotionEffect(PotionEffectType.DAMAGE_RESISTANCE); + player.removePotionEffect(PotionEffectType.RESISTANCE); player.addPotionEffect(this.DAMAGE); Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 1); assert particleLoc.getWorld() != null; - particleLoc.getWorld().spawnParticle(Particle.CRIT_MAGIC, particleLoc, 10, 0.5, 0.5, 0.5); + particleLoc.getWorld().spawnParticle(Particle.CRIT, particleLoc, 10, 0.5, 0.5, 0.5); } PlayerData playerData = playerManager.getPlayerData(player); if ((MAIN_SET.contains(mainType) && OFF_SET.contains(offType)) || (MAIN_SET.contains(offType) && OFF_SET.contains(mainType))) { - player.removePotionEffect(PotionEffectType.SLOW); + player.removePotionEffect(PotionEffectType.SLOWNESS); player.addPotionEffect(this.SLOW); - player.removePotionEffect(PotionEffectType.JUMP); + player.removePotionEffect(PotionEffectType.JUMP_BOOST); player.addPotionEffect(this.JUMP); playerData.setStat(Stat.DUAL_WIELD, 1); } else { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java b/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java index 9bc9bb9..5de4a5c 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java @@ -23,8 +23,8 @@ public ObsidianMace(Survival plugin) { public void run() { for (Player player : plugin.getServer().getOnlinePlayers()) { if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.OBSIDIAN_MACE)) { - player.removePotionEffect(PotionEffectType.SLOW); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100, 1, false)); + player.removePotionEffect(PotionEffectType.SLOWNESS); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 100, 1, false)); Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 1); assert particleLoc.getWorld() != null; diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java b/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java index 87cb99d..406ff12 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java @@ -21,8 +21,8 @@ public QuartzPickaxe(Survival plugin) { public void run() { for (Player player : plugin.getServer().getOnlinePlayers()) { if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.QUARTZ_PICKAXE)) { - player.removePotionEffect(PotionEffectType.FAST_DIGGING); - player.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, 20, 9, false)); + player.removePotionEffect(PotionEffectType.HASTE); + player.addPotionEffect(new PotionEffect(PotionEffectType.HASTE, 20, 9, false)); } } } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java index 1ca34d1..5c3ab55 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java @@ -24,7 +24,7 @@ public void run() { Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 1); assert particleLoc.getWorld() != null; - particleLoc.getWorld().spawnParticle(Particle.CRIT_MAGIC, particleLoc, 10, 0.5, 0.5, 0.5); + particleLoc.getWorld().spawnParticle(Particle.CRIT, particleLoc, 10, 0.5, 0.5, 0.5); } } } diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 0589310..f76c32b 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -246,7 +246,7 @@ public class Utils { .add(Material.DIRT) .add(Material.PODZOL) .add(Material.COARSE_DIRT) - .add(Material.GRASS_PATH) + .add(Material.DIRT_PATH) .add(Material.FARMLAND) .add(Material.SOUL_SAND) .add(Material.SAND) diff --git a/src/main/java/tk/shanebee/survival/util/Validate.java b/src/main/java/tk/shanebee/survival/util/Validate.java index 7487b35..95819b0 100644 --- a/src/main/java/tk/shanebee/survival/util/Validate.java +++ b/src/main/java/tk/shanebee/survival/util/Validate.java @@ -1,6 +1,6 @@ package tk.shanebee.survival.util; -public abstract class Validate extends org.apache.commons.lang.Validate { +public abstract class Validate { /** * Validate if a value is between a min and max value @@ -10,7 +10,7 @@ public abstract class Validate extends org.apache.commons.lang.Validate { * @param max Max value amount */ public static void isBetween(int value, int min, int max) { - isTrue(value >= min && value <= max, "Value must be between " + min + " and " + max); + // } } From 59943e2622483867cc956c273b9650783802b215 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 12 Feb 2025 20:27:05 -0800 Subject: [PATCH 002/133] new workflow --- .github/workflows/gradle.yml | 39 ++++++++++++++++++++++++++++++++++++ .github/workflows/maven.yml | 31 ---------------------------- 2 files changed, 39 insertions(+), 31 deletions(-) create mode 100644 .github/workflows/gradle.yml delete mode 100644 .github/workflows/maven.yml diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 0000000..6866a9d --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,39 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Java CI with Gradle + +on: + push: + branches: [ '**' ] + pull_request: + branches: [ '**' ] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v4.2.1 + with: + java-version: '21' + distribution: 'temurin' + - name: Build with Gradle + uses: gradle/actions/setup-gradle@v3 + with: + arguments: build + - name: Upload a Build Artifact + uses: actions/upload-artifact@master + with: + # Artifact name + name: SurvivalPlus-Artifact + # A file, directory or wildcard pattern that describes what to upload + path: build/libs/SurvivalPlus*.jar diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml deleted file mode 100644 index 70ea463..0000000 --- a/.github/workflows/maven.yml +++ /dev/null @@ -1,31 +0,0 @@ -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven - -name: Java CI with Maven - -on: - push: - branches: '**' - pull_request: - branches: '**' - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Build with Maven - run: mvn -B package --file pom.xml - - name: Upload a Build Artifact - uses: actions/upload-artifact@v2.1.4 - with: - # Artifact name - name: SurvivalPlus-Artifact - # A file, directory or wildcard pattern that describes what to upload - path: target/SurvivalPlus*.jar From 7c1f6ac4602ddcbf070f436570cdcd61b652787d Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 11:44:43 -0800 Subject: [PATCH 003/133] Item re-write --- .editorconfig | 2 + .../shanebee/survival/commands/GiveItem.java | 17 +- .../tk/shanebee/survival/config/Lang.java | 6 +- .../events/ShootRecurvedBowEvent.java | 3 +- .../java/tk/shanebee/survival/item/Item.java | 349 +------ .../tk/shanebee/survival/item/ItemConfig.java | 57 +- .../java/tk/shanebee/survival/item/Items.java | 224 +++++ .../tk/shanebee/survival/item/Nutrition.java | 2 +- ...ireStriker.java => FireStrikerListen.java} | 10 +- .../survival/item/items/armor/ArmorPiece.java | 116 +++ .../item/items/armor/BeekeeperPiece.java | 71 ++ .../survival/item/items/armor/RainBoots.java | 35 + .../item/items/armor/ReinforcedPiece.java | 86 ++ .../survival/item/items/armor/SnowBoots.java | 33 + .../survival/item/items/blocks/Campfire.java | 38 + .../survival/item/items/blocks/Workbench.java | 32 + .../survival/item/items/drinks/Coffee.java | 44 + .../survival/item/items/drinks/ColdMilk.java | 36 + .../survival/item/items/drinks/HotMilk.java | 33 + .../survival/item/items/drinks/Water.java | 26 + .../survival/item/items/drinks/WaterBowl.java | 20 + .../item/items/food/SuspiciousMeat.java | 60 ++ .../item/items/legendary/BlazeSword.java | 63 ++ .../item/items/legendary/EnderGiantBlade.java | 58 ++ .../item/items/legendary/ObsidianMace.java | 56 ++ .../item/items/legendary/QuartzPickaxe.java | 52 + .../item/items/legendary/ValkyriesAxe.java | 44 + .../survival/item/items/misc/BreedingEgg.java | 15 + .../survival/item/items/misc/CoffeeBean.java | 25 + .../item/items/misc/FermentedSkin.java | 29 + .../survival/item/items/tools/Compass.java | 27 + .../item/items/tools/FireStriker.java | 43 + .../item/items/tools/GrapplingHook.java | 29 + .../survival/item/items/tools/Hammer.java | 30 + .../survival/item/items/tools/Hatchet.java | 27 + .../survival/item/items/tools/Mattock.java | 31 + .../survival/item/items/tools/MedicKit.java | 31 + .../survival/item/items/tools/RecurveBow.java | 35 + .../item/items/tools/RecurveCrossbow.java | 35 + .../survival/item/items/tools/Shiv.java | 49 + .../survival/item/items/tools/Sickle.java | 34 + .../survival/listeners/EventManager.java | 2 +- .../survival/listeners/block/BlockBreak.java | 483 ++++----- .../survival/listeners/block/BlockPlace.java | 13 +- .../listeners/block/BurnoutTorches.java | 8 +- .../survival/listeners/block/Campfire.java | 5 +- .../survival/listeners/block/NoAnvil.java | 85 +- .../listeners/entity/BeeKeeperSuit.java | 24 +- .../listeners/entity/ChickenSpawn.java | 6 +- .../listeners/entity/EntityDeath.java | 4 +- .../listeners/entity/PiglinBarter.java | 43 +- .../survival/listeners/item/BlazeSword.java | 19 +- .../listeners/item/CauldronWaterBottle.java | 11 +- .../survival/listeners/item/Consume.java | 51 +- .../listeners/item/FirestrikerClick.java | 15 +- .../survival/listeners/item/GiantBlade.java | 8 +- .../listeners/item/GrapplingHook.java | 20 +- .../survival/listeners/item/MedicKit.java | 16 +- .../listeners/item/ObsidianMaceWeakness.java | 21 +- .../survival/listeners/item/RecurvedBow.java | 10 +- .../listeners/item/RepairCrafting.java | 233 ++--- .../survival/listeners/item/ShivPoison.java | 8 +- .../survival/listeners/item/Valkyrie.java | 6 +- .../listeners/item/WaterBottleCrafting.java | 12 +- .../survival/listeners/item/WaterBowl.java | 9 +- .../listeners/player/EnergyChange.java | 6 +- .../listeners/server/InventoryUpdate.java | 11 +- .../listeners/server/RecipeDiscovery.java | 6 +- .../survival/managers/ItemManager.java | 937 +----------------- .../survival/managers/MerchantManager.java | 41 +- .../survival/managers/RecipeManager.java | 527 ++-------- .../shanebee/survival/tasks/WeatherTask.java | 6 +- .../tasks/tool/BlazeSwordEffects.java | 4 +- .../survival/tasks/tool/BlazeSwordSound.java | 35 +- .../survival/tasks/tool/GiantBlade.java | 7 +- .../survival/tasks/tool/ObsidianMace.java | 5 +- .../survival/tasks/tool/QuartzPickaxe.java | 5 +- .../survival/tasks/tool/Valkyrie.java | 6 +- .../java/tk/shanebee/survival/util/Utils.java | 25 +- src/main/resources/items.yml | 242 ++++- 80 files changed, 2603 insertions(+), 2385 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/item/Items.java rename src/main/java/tk/shanebee/survival/item/items/{FireStriker.java => FireStrikerListen.java} (95%) create mode 100644 src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/drinks/Water.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/Compass.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java create mode 100644 src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java diff --git a/.editorconfig b/.editorconfig index 5cb6943..0882495 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,3 +10,5 @@ max_line_length = 120 tab_width = 4 trim_trailing_whitespace = true ij_continuation_indent_size = 4 +[*.yml] +indent_size = 2 diff --git a/src/main/java/tk/shanebee/survival/commands/GiveItem.java b/src/main/java/tk/shanebee/survival/commands/GiveItem.java index d5dcfbf..cd9c45b 100644 --- a/src/main/java/tk/shanebee/survival/commands/GiveItem.java +++ b/src/main/java/tk/shanebee/survival/commands/GiveItem.java @@ -11,9 +11,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.util.StringUtil; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; @@ -41,10 +41,11 @@ public boolean onCommand(CommandSender sender, Command command, String s, String if (args.length == 3) { amount = Integer.parseInt(args[2]); } - } catch (IllegalArgumentException ignore) {} + } catch (IllegalArgumentException ignore) { + } try { - item = Item.valueOf(args[1].toUpperCase()); - ItemStack itemStack = ItemManager.get(item); + item = Items.valueOf(args[1].toUpperCase()); + ItemStack itemStack = item.getItemStack(); itemStack.setAmount(amount); Location loc = player.getLocation(); @@ -54,7 +55,7 @@ public boolean onCommand(CommandSender sender, Command command, String s, String player.getWorld().dropItem(loc, itemStack); } if (item != null) { - String itemName = item.getKey().replace("_", " "); + String itemName = itemStack.getItemMeta().getDisplayName(); if (sender instanceof Player) { Utils.sendColoredMsg(sender, prefix + "&6You gave &b" + itemName + " &6to &b" + player.getName()); } else { @@ -78,8 +79,8 @@ public List onTabComplete(CommandSender sender, Command command, String if (args.length <= 1) return null; if (args.length == 2) { ArrayList matches = new ArrayList<>(); - for (Item item : Item.values()) { - String name = item.getKey().toUpperCase(); + for (Item item : Items.values()) { + String name = item.getKey().toString(); if (StringUtil.startsWithIgnoreCase(name, args[1])) { matches.add(name); } diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index 906a6c4..41939d3 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -18,6 +18,7 @@ public class Lang { private final Survival plugin; private final String lang_yml; + private FileConfiguration lang; public String prefix; public String no_perm; @@ -212,7 +213,6 @@ public Lang(Survival main, String language) { public void loadLangFile(CommandSender sender) { String loaded; - FileConfiguration lang; File lang_file = new File(plugin.getDataFolder(), lang_yml); if (!lang_file.exists()) { plugin.saveResource(lang_yml, true); @@ -429,4 +429,8 @@ private void saveLang(YamlConfiguration lang, File file) { } } + public String getItemName(String key) { + return this.lang.getString("item-name." + key); + } + } diff --git a/src/main/java/tk/shanebee/survival/events/ShootRecurvedBowEvent.java b/src/main/java/tk/shanebee/survival/events/ShootRecurvedBowEvent.java index b0248c9..cbcb680 100644 --- a/src/main/java/tk/shanebee/survival/events/ShootRecurvedBowEvent.java +++ b/src/main/java/tk/shanebee/survival/events/ShootRecurvedBowEvent.java @@ -6,6 +6,7 @@ import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; /** * Called when a player shoots a recurved bow/crossbow @@ -41,7 +42,7 @@ public ItemStack getItemStack() { } /** Get the custom Items type the player shoot - * @return The player's main hand {@link Item} type + * @return The player's main hand {@link Items} type */ public Item getItem() { return this.item; diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index 84f5b9b..c0543ea 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -1,323 +1,80 @@ package tk.shanebee.survival.item; -import com.google.common.base.Preconditions; -import org.bukkit.Material; +import io.papermc.paper.datacomponent.DataComponentTypes; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.managers.ItemManager; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +@SuppressWarnings("UnstableApiUsage") +public abstract class Item { -/** - * Custom SurvivalPlus items - */ -public class Item { + protected static final ItemConfig ITEM_CONFIG = new ItemConfig(); + private static final MiniMessage MINI = MiniMessage.miniMessage(); - static final ItemConfig ITEM_CONFIG = new ItemConfig(); - private static final Map ALL_ITEMS = new HashMap<>(); + // Minecraft default keys + protected static final NamespacedKey BASE_ATTACK_DAMAGE = NamespacedKey.minecraft("base_attack_damage"); + protected static final NamespacedKey BASE_ATTACK_SPEED = NamespacedKey.minecraft("base_attack_speed"); + protected static final NamespacedKey BASE_ATTACK_TOUGH = NamespacedKey.minecraft("base_attack_toughness"); + protected static final NamespacedKey BASE_ATTACK_KNOCKBACK = NamespacedKey.minecraft("base_attack_knockback"); + // Non-official keys + protected static final NamespacedKey BASE_MOVEMENT_SPEED = NamespacedKey.minecraft("base_movement_speed"); - // TOOLS - public static final Item HATCHET = get("hatchet", Material.WOODEN_AXE, 1, -1, 0.85); - public static final Item MATTOCK = get("mattock", Material.WOODEN_PICKAXE, 1, -1, 0.85); - public static final Item SHIV = get("shiv", Material.WOODEN_HOE, 1, -1, 0.85); - public static final Item HAMMER = get("hammer", Material.WOODEN_SWORD, 1, -1, 0.85); - public static final Item FIRESTRIKER = get("firestriker", Material.WOODEN_SHOVEL, 1, -1, 0.0); - public static final Item GRAPPLING_HOOK = get("grappling_hook", Material.FISHING_ROD, 1, -1, 0.95); - public static final Item COMPASS = get("compass", Material.COMPASS, 1, -1, 0.85); - public static final Item FLINT_SICKLE = get("flint_sickle", Material.WOODEN_HOE, 4, -1, 1.0); - public static final Item STONE_SICKLE = get("stone_sickle", Material.WOODEN_HOE, 2, -1, 1.0); - public static final Item IRON_SICKLE = get("iron_sickle", Material.IRON_HOE, 1, -1, 0.90); - public static final Item DIAMOND_SICKLE = get("diamond_sickle", Material.DIAMOND_HOE, 1, -1, 0.90); - public static final Item MEDIC_KIT = get("medic_kit", Material.CLOCK, 1, 0, 0); - public static final Item RECURVE_BOW = get("recurve_bow", Material.BOW, 1, 1.25, 0.9); - public static final Item RECURVE_CROSSBOW = get("recurve_crossbow", Material.CROSSBOW, 1, 1.75, 0.9); + private Key modelKey; + protected NamespacedKey recipeKey; + private ItemStack itemStack; + private double repairPercent; // TODO figure this out - // LEGENDARY TOOLS - public static final Item VALKYRIES_AXE = get("valkyries_axe", Material.DIAMOND_AXE, 1, 2.5, 0.95); - public static final Item QUARTZ_PICKAXE = get("quartz_pickaxe", Material.DIAMOND_PICKAXE, 1, 2.5, 0.95); - public static final Item OBSIDIAN_MACE = get("obsidian_mace", Material.DIAMOND_SHOVEL, 1, 2.5, 0.95); - public static final Item ENDER_GIANT_BLADE = get("ender_giant_blade", Material.DIAMOND_HOE, 2, 2.5, 0.95); - public static final Item BLAZE_SWORD = get("blaze_sword", Material.DIAMOND_SWORD, 1, 2.5, 0.95); - - // ARMOR - public static final Item REINFORCED_LEATHER_BOOTS = get("reinforced_leather_boots", Material.CHAINMAIL_BOOTS, 1, 2, 0.85); - public static final Item REINFORCED_LEATHER_TUNIC = get("reinforced_leather_tunic", Material.CHAINMAIL_CHESTPLATE, 1, 2, 0.85); - public static final Item REINFORCED_LEATHER_TROUSERS = get("reinforced_leather_trousers", Material.CHAINMAIL_LEGGINGS, 1, 2, 0.85); - public static final Item REINFORCED_LEATHER_HELMET = get("reinforced_leather_helmet", Material.CHAINMAIL_HELMET, 1, 2, 0.85); - public static final Item GOLDEN_SABATONS = get("golden_sabatons", Material.GOLDEN_BOOTS, 0, -1, 1.0); - public static final Item GOLDEN_GUARD = get("golden_guard", Material.GOLDEN_CHESTPLATE, 0, -1, 1.0); - public static final Item GOLDEN_GREAVES = get("golden_greaves", Material.GOLDEN_LEGGINGS, 0, -1, 1.0); - public static final Item GOLDEN_CROWN = get("golden_crown", Material.GOLDEN_HELMET, 0, -1, 1.0); - public static final Item IRON_BOOTS = get("iron_boots", Material.IRON_BOOTS, 0, -1, 1.0); - public static final Item IRON_CHESTPLATE = get("iron_chestplate", Material.IRON_CHESTPLATE, 0, -1, 1.0); - public static final Item IRON_LEGGINGS = get("iron_leggings", Material.IRON_LEGGINGS, 0, -1, 1.0); - public static final Item IRON_HELMET = get("iron_helmet", Material.IRON_HELMET, 0, -1, 1.0); - public static final Item DIAMOND_BOOTS = get("diamond_boots", Material.DIAMOND_BOOTS, 0, -1, 1.0); - public static final Item DIAMOND_CHESTPLATE = get("diamond_chestplate", Material.DIAMOND_CHESTPLATE, 0, -1, 1.0); - public static final Item DIAMOND_HELMET = get("diamond_helmet", Material.DIAMOND_HELMET, 0, -1, 1.0); - public static final Item DIAMOND_LEGGINGS = get("diamond_leggings", Material.DIAMOND_LEGGINGS, 0, -1, 1.0); - public static final Item NETHERITE_HELMET = get("netherite_helmet", Material.NETHERITE_HELMET, 0, -1, 1.0); - public static final Item NETHERITE_CHESTPLATE = get("netherite_chestplate", Material.NETHERITE_CHESTPLATE, 0, -1, 1.0); - public static final Item NETHERITE_LEGGINGS = get("netherite_leggings", Material.NETHERITE_LEGGINGS, 0, -1, 1.0); - public static final Item NETHERITE_BOOTS = get("netherite_boots", Material.NETHERITE_BOOTS, 0, -1, 1.0); - public static final Item BEEKEEPER_HELMET = get("beekeeper_helmet", Material.LEATHER_HELMET, 10881, 1.2, 1.0); - public static final Item BEEKEEPER_CHESTPLATE = get("beekeeper_chestplate", Material.LEATHER_CHESTPLATE, 10881, 1.2, 1.0); - public static final Item BEEKEEPER_LEGGINGS = get("beekeeper_leggings", Material.LEATHER_LEGGINGS, 10881, 1.2, 1.0); - public static final Item BEEKEEPER_BOOTS = get("beekeeper_boots", Material.LEATHER_BOOTS, 10881, 1.2, 1.0); - public static final Item SNOW_BOOTS = get("snow_boots", Material.LEATHER_BOOTS, 10882, 1.4, 0.97); - public static final Item RAIN_BOOTS = get("rain_boots", Material.LEATHER_BOOTS, 10883, 1.2, 0.97); - - // BLOCKS - public static final Item WORKBENCH = get("workbench", Material.CRAFTING_TABLE, 0); - public static final Item CAMPFIRE = get("campfire", Material.CAMPFIRE, 1); - - // MISC - public static final Item FERMENTED_SKIN = get("fermented_skin", Material.RABBIT_HIDE, 0); - public static final Item COFFEE_BEAN = get("coffee_bean", Material.COCOA_BEANS, 1); - public static final Item BREEDING_EGG = get("breeding_egg", Material.EGG, 10885); - - // FOOD - public static final Item SUSPICIOUS_MEAT = get("suspicious_meat", Material.SUSPICIOUS_STEW, 10881); - - // DRINKS - public static final Item DIRTY_WATER = get("dirty_water", Material.POTION, 1); - public static final Item CLEAN_WATER = get("clean_water", Material.POTION, 2); - public static final Item PURIFIED_WATER = get("purified_water", Material.POTION, 3); - public static final Item COFFEE = get("coffee", Material.POTION, 4); - public static final Item HOT_MILK = get("hot_milk", Material.POTION, 5); - public static final Item COLD_MILK = get("cold_milk", Material.POTION, 6); - - /** - * @deprecated Use {@link #WATER_BOWL} instead - */ - @SuppressWarnings("DeprecatedIsStillUsed") - @Deprecated // Removed in 3.11.0 - Will remove old water bowl in future - public static final Item WATER_BOWL_OLD = get("water_bowl_old", Material.BEETROOT_SOUP, 1); - public static final Item WATER_BOWL = get("water_bowl", Material.POTION, 10881); - - // TODO Experimental - public static final Item PERSISTENT_TORCH = get("persistent_torch", Material.TORCH, 1); - - private static Item get(String key, Material material, int model) { - String prefix = String.format("Registering Item (%s): ", key); - Preconditions.checkArgument(key != null, "%sKey must not be null", prefix); - - int data = ITEM_CONFIG.getModelData(key, model); - Preconditions.checkArgument(model >= 0 && model <= 99999999, "%sModel must be between 0 and 99999999, found %s", prefix, data); - - Item item = new Item(key, material, data); - ALL_ITEMS.put(key, item); - return item; + public ItemStack getItemStack() { + return this.itemStack.clone(); } - @SuppressWarnings("ConstantConditions") - private static Item get(@NotNull String key, @NotNull Material material, int model, double repairCost, double repairPercent) { - String prefix = String.format("Registering Item (%s): ", key); - Preconditions.checkArgument(key != null, "%sKey must not be null", prefix); - - int data = ITEM_CONFIG.getModelData(key, model); - Preconditions.checkArgument(model >= 0 && model <= 99999999, "%sModel must be between 0 and 99999999, found %s", prefix, data); - - double cost = ITEM_CONFIG.getRepairCost(key, repairCost); - Preconditions.checkArgument(cost >= -1, "%sCost must be >= -1, found %s", prefix, cost); - - double percent = ITEM_CONFIG.getRepairPercent(key, repairPercent); - Preconditions.checkArgument(percent >= 0.0f && percent <= 1.0f, "%sRepair percent must be between 0.0 and 1.0, found %s", prefix, percent); - - Item item = new Item(key, material, data, cost, percent); - ALL_ITEMS.put(key, item); - return item; - } - - /** - * Get an Item based on a key - * - * @param value Key for item - * @return Item based on key - */ - public static Item valueOf(String value) { - if (ALL_ITEMS.containsKey(value.toLowerCase())) { - return ALL_ITEMS.get(value.toLowerCase()); - } - return null; + public ItemStack getItemStack(int amount) { + ItemStack clone = this.itemStack.clone(); + clone.setAmount(amount); + return clone; } - /** - * Get a collection of all registered Items - * - * @return Collection of all registered Items - */ - public static Collection values() { - return ALL_ITEMS.values(); - } + protected void setupDefaults(String key, ItemStack itemStack) { + this.modelKey = Key.key("survival_plus", key); + this.recipeKey = NamespacedKey.fromString("survival_plus:" + key); + itemStack.setData(DataComponentTypes.ITEM_MODEL, this.modelKey); - // OBJECT - - private final String key; - private final Material materialType; - private final int modelData; - private final double repairCostMultiplier; - private final double repairPercent; - - Item(@NotNull String key, @NotNull Material mat, int customModelData) { - this.key = key; - this.modelData = customModelData; - this.materialType = mat; - this.repairCostMultiplier = -1; - this.repairPercent = 0; - } - - Item(@NotNull String key, @NotNull Material mat, int customModelData, double repairCost, double repairPercent) { - this.key = key; - this.modelData = customModelData; - this.materialType = mat; - this.repairCostMultiplier = repairCost; - this.repairPercent = repairPercent; - } + // Item Name + String itemName = ITEM_CONFIG.getName(key); + itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); - /** - * Get the key of this item - * - * @return Key of this item - */ - @SuppressWarnings("unused") - public String getKey() { - return key; - } - - /** - * Get the Material of this item - * - * @return Material of this item - */ - public Material getMaterialType() { - return materialType; - } - - /** - * Get the CustomModelData of this item - * - * @return CustomModelData of this item - */ - public int getModelData() { - return modelData; - } - - public double getRepairCostMultiplier() { - return repairCostMultiplier; - } + // Max Damage + int maxDamage = ITEM_CONFIG.getMaxDamage(key); + if (maxDamage > 0) { + itemStack.setData(DataComponentTypes.MAX_DAMAGE, maxDamage); + } - public double getRepairPercent() { - return repairPercent; - } + // Repair Cost + int repairCost = ITEM_CONFIG.getRepairCost(key); + if (repairCost > 0) { + itemStack.setData(DataComponentTypes.REPAIR_COST, repairCost); + } - /** - * Get a new ItemStack based on this item - * - * @return New ItemStack based on this item - */ - public ItemStack getItem() { - return ItemManager.get(this); + // Repair Percent + this.repairPercent = ITEM_CONFIG.getRepairPercent(key); + this.itemStack = itemStack; + Items.ALL_ITEMS.put(key, this); } - /** - * Get a new ItemStack based on this item - * - * @param amount Stack size - * @return New ItemStack based on this item - */ - public ItemStack getItem(int amount) { - ItemStack itemStack = getItem(); - itemStack.setAmount(amount); - return itemStack; + public void registerRecipe() { } - /** - * Compare this item with an ItemStack - * - * @param itemStack ItemStack to check - * @return True if matched - */ - public boolean compare(@NotNull ItemStack itemStack) { - if (itemStack.getType() == materialType) { - ItemMeta meta = itemStack.getItemMeta(); - if (meta != null && meta.hasCustomModelData()) { - return meta.getCustomModelData() == modelData; - } else { - return modelData == 0; - } + public boolean is(ItemStack itemStack) { + if (itemStack.hasData(DataComponentTypes.ITEM_MODEL)) { + Key data = itemStack.getData(DataComponentTypes.ITEM_MODEL); + return data != null && data.equals(this.modelKey); } return false; } - @Nullable - public static Item getFromStack(@NotNull ItemStack itemStack) { - for (Item value : ALL_ITEMS.values()) { - if (value.compare(itemStack)) { - return value; - } - } - return null; - } - - /** - * Tags for different {@link Item} groups - */ - @SuppressWarnings("unused") - public enum Tags { - /** - * Any sickle - */ - SICKLES(FLINT_SICKLE, STONE_SICKLE, IRON_SICKLE, DIAMOND_SICKLE), - /** - * Any reinforced leather armor - */ - REINFORCED_LEATHER_ARMOR(REINFORCED_LEATHER_BOOTS, REINFORCED_LEATHER_TROUSERS, - REINFORCED_LEATHER_TUNIC, REINFORCED_LEATHER_HELMET), - /** - * Any water bottle - */ - WATER_BOTTLE(DIRTY_WATER, CLEAN_WATER, PURIFIED_WATER), - /** - * Any drinkable item - */ - DRINKABLE(DIRTY_WATER, CLEAN_WATER, PURIFIED_WATER, WATER_BOWL, - COLD_MILK, HOT_MILK, COFFEE), - - /** - * Any legendary item - */ - LEGENDARY(BLAZE_SWORD, OBSIDIAN_MACE, VALKYRIES_AXE, ENDER_GIANT_BLADE, QUARTZ_PICKAXE); - - private final Item[] items; - - Tags(Item... items) { - this.items = items; - } - - /** - * Get all items tagged in this group - * - * @return All items tagged in this group - */ - public Item[] getItems() { - return items; - } - - /** - * Check if an ItemStack is tagged in a group of custom {@link Item} - * - * @param item ItemStack to check - * @return True if item matches tag - */ - public boolean isTagged(ItemStack item) { - return ItemManager.compare(item, items); - } - + public Key getKey() { + return this.modelKey; } } diff --git a/src/main/java/tk/shanebee/survival/item/ItemConfig.java b/src/main/java/tk/shanebee/survival/item/ItemConfig.java index 55b7a7e..799ff3b 100644 --- a/src/main/java/tk/shanebee/survival/item/ItemConfig.java +++ b/src/main/java/tk/shanebee/survival/item/ItemConfig.java @@ -8,7 +8,7 @@ import java.io.File; import java.io.IOException; -class ItemConfig { +public class ItemConfig { static ItemConfig INSTANCE; private final Survival plugin = Survival.getInstance(); @@ -37,19 +37,6 @@ private void loadDefaultSettings() { } } - int getModelData(String key, int defaultValue) { - int data; - String path = "items." + key + ".model_data"; - if (settings.contains(path)) { - data = settings.getInt(path); - } else { - data = defaultValue; - settings.set(path, data); - save(); - } - return data; - } - int[] getNutritionValues(String key, int carbs, int proteins, int vitamins) { String path = "nutritions." + key + "."; String[] paths = new String[]{path + "carbs", path + "proteins", path + "vitamins"}; @@ -72,24 +59,40 @@ int[] getNutritionValues(String key, int carbs, int proteins, int vitamins) { return nutritions; } - double getRepairCost(String key, double defaultValue) { - String path = "items." + key + ".repair_cost_multiplier"; - if (settings.contains(path)) { - return settings.getDouble(path); - } else { - settings.set(path, defaultValue); - return defaultValue; + String getName(String key) { + return this.settings.getString("items." + key + ".name"); + } + + int getMaxDamage(String key) { + String path = "items." + key + ".max_damage"; + if (this.settings.contains(path)) { + return this.settings.getInt(path); } + return 0; } - double getRepairPercent(String key, double defaultValue) { + int getRepairCost(String key) { + String path = "items." + key + ".repair_cost"; + if (this.settings.contains(path)) { + return this.settings.getInt(path); + } + return 0; + } + + double getRepairPercent(String key) { String path = "items." + key + ".repair_percent"; - if (settings.contains(path)) { - return settings.getDouble(path); - } else { - settings.set(path, defaultValue); - return defaultValue; + if (this.settings.contains(path)) { + return this.settings.getDouble(path); + } + return 0; + } + + public int getColor(String key) { + String path = "items." + key + ".color"; + if (this.settings.contains(path)) { + return this.settings.getInt(path); } + return 0; } void save() { diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/tk/shanebee/survival/item/Items.java new file mode 100644 index 0000000..5675140 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/Items.java @@ -0,0 +1,224 @@ +package tk.shanebee.survival.item; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import tk.shanebee.survival.item.items.armor.ArmorPiece; +import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorMaterial; +import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorType; +import tk.shanebee.survival.item.items.armor.BeekeeperPiece; +import tk.shanebee.survival.item.items.armor.RainBoots; +import tk.shanebee.survival.item.items.armor.ReinforcedPiece; +import tk.shanebee.survival.item.items.armor.SnowBoots; +import tk.shanebee.survival.item.items.blocks.Campfire; +import tk.shanebee.survival.item.items.blocks.Workbench; +import tk.shanebee.survival.item.items.drinks.Coffee; +import tk.shanebee.survival.item.items.drinks.ColdMilk; +import tk.shanebee.survival.item.items.drinks.HotMilk; +import tk.shanebee.survival.item.items.drinks.Water; +import tk.shanebee.survival.item.items.drinks.WaterBowl; +import tk.shanebee.survival.item.items.food.SuspiciousMeat; +import tk.shanebee.survival.item.items.legendary.BlazeSword; +import tk.shanebee.survival.item.items.legendary.EnderGiantBlade; +import tk.shanebee.survival.item.items.legendary.ObsidianMace; +import tk.shanebee.survival.item.items.legendary.QuartzPickaxe; +import tk.shanebee.survival.item.items.legendary.ValkyriesAxe; +import tk.shanebee.survival.item.items.misc.BreedingEgg; +import tk.shanebee.survival.item.items.misc.CoffeeBean; +import tk.shanebee.survival.item.items.misc.FermentedSkin; +import tk.shanebee.survival.item.items.tools.Compass; +import tk.shanebee.survival.item.items.tools.FireStriker; +import tk.shanebee.survival.item.items.tools.GrapplingHook; +import tk.shanebee.survival.item.items.tools.Hammer; +import tk.shanebee.survival.item.items.tools.Hatchet; +import tk.shanebee.survival.item.items.tools.Mattock; +import tk.shanebee.survival.item.items.tools.MedicKit; +import tk.shanebee.survival.item.items.tools.RecurveBow; +import tk.shanebee.survival.item.items.tools.RecurveCrossbow; +import tk.shanebee.survival.item.items.tools.Shiv; +import tk.shanebee.survival.item.items.tools.Sickle; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * Custom SurvivalPlus items + */ +public class Items { + + static final Map ALL_ITEMS = new HashMap<>(); + + // TOOLS + public static final Item HATCHET = new Hatchet(); + public static final Item MATTOCK = new Mattock(); + public static final Item SHIV = new Shiv(); + public static final Item HAMMER = new Hammer(); + public static final Item FIRESTRIKER = new FireStriker(); + public static final Item GRAPPLING_HOOK = new GrapplingHook(); + public static final Item COMPASS = new Compass(); + public static final Item FLINT_SICKLE = new Sickle("flint", Material.FLINT); + public static final Item STONE_SICKLE = new Sickle("stone", Material.STONE); + public static final Item IRON_SICKLE = new Sickle("iron", Material.IRON_INGOT); + public static final Item DIAMOND_SICKLE = new Sickle("diamond", Material.DIAMOND); + public static final Item MEDIC_KIT = new MedicKit(); + public static final Item RECURVE_BOW = new RecurveBow(); + public static final Item RECURVE_CROSSBOW = new RecurveCrossbow(); + + // LEGENDARY TOOLS + public static final Item VALKYRIES_AXE = new ValkyriesAxe(); + public static final Item QUARTZ_PICKAXE = new QuartzPickaxe(); + public static final Item OBSIDIAN_MACE = new ObsidianMace(); + public static final Item ENDER_GIANT_BLADE = new EnderGiantBlade(); + public static final Item BLAZE_SWORD = new BlazeSword(); + + // ARMOR + public static final Item REINFORCED_LEATHER_HELMET = new ReinforcedPiece(ArmorType.HELMET); + public static final Item REINFORCED_LEATHER_TUNIC = new ReinforcedPiece(ArmorType.CHESTPLATE); + public static final Item REINFORCED_LEATHER_TROUSERS = new ReinforcedPiece(ArmorType.LEGGINGS); + public static final Item REINFORCED_LEATHER_BOOTS = new ReinforcedPiece(ArmorType.BOOTS); + + public static final Item GOLDEN_CROWN = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.GOLDEN, 1.0, -0.0125); + public static final Item GOLDEN_GUARD = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.GOLDEN, 3.0, -0.02); + public static final Item GOLDEN_GREAVES = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.GOLDEN, 2.0, -0.02); + public static final Item GOLDEN_SABATONS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.GOLDEN, 1.0, -0.0125); + + public static final Item IRON_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.IRON, 2.0, -0.02); + public static final Item IRON_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.IRON, 6.0, -0.03); + public static final Item IRON_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.IRON, 5.0, -0.03); + public static final Item IRON_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.IRON, 2.0, -0.02); + + public static final Item DIAMOND_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.DIAMOND, 3, -0.02); + public static final Item DIAMOND_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.DIAMOND, 8, -0.03); + public static final Item DIAMOND_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.DIAMOND, 6, -0.03); + public static final Item DIAMOND_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.DIAMOND, 3, -0.02); + + public static final Item NETHERITE_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.NETHERITE, 3.0, -0.02, 3.0, 0.1); + public static final Item NETHERITE_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.NETHERITE, 8.0, -0.02, 3.0, 0.1); + public static final Item NETHERITE_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.NETHERITE, 6.0, -0.02, 3.0, 0.1); + public static final Item NETHERITE_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.NETHERITE, 3.0, -0.02, 3.0, 0.1); + + public static final Item BEEKEEPER_HELMET = new BeekeeperPiece(ArmorType.HELMET); + public static final Item BEEKEEPER_CHESTPLATE = new BeekeeperPiece(ArmorType.CHESTPLATE); + public static final Item BEEKEEPER_LEGGINGS = new BeekeeperPiece(ArmorType.LEGGINGS); + public static final Item BEEKEEPER_BOOTS = new BeekeeperPiece(ArmorType.BOOTS); + public static final Item SNOW_BOOTS = new SnowBoots(); + public static final Item RAIN_BOOTS = new RainBoots(); + + // BLOCKS + public static final Item WORKBENCH = new Workbench(); + public static final Item CAMPFIRE = new Campfire(); + + // MISC + public static final Item FERMENTED_SKIN = new FermentedSkin(); + public static final Item COFFEE_BEAN = new CoffeeBean(); + public static final Item BREEDING_EGG = new BreedingEgg(); + + // FOOD + public static final Item SUSPICIOUS_MEAT = new SuspiciousMeat(); + + // DRINKS + public static final Item DIRTY_WATER = new Water("dirty_water"); + public static final Item CLEAN_WATER = new Water("clean_water"); + public static final Item PURIFIED_WATER = new Water("purified_water"); + public static final Item COFFEE = new Coffee(); + public static final Item HOT_MILK = new HotMilk(); + public static final Item COLD_MILK = new ColdMilk(); + public static final Item WATER_BOWL = new WaterBowl(); + + // TODO Experimental + public static final Item PERSISTENT_TORCH = null; + + /** + * Get an {@link Item} based on a key + * + * @param value Key for item + * @return Item based on key + */ + public static Item valueOf(String value) { + if (ALL_ITEMS.containsKey(value.toLowerCase())) { + return ALL_ITEMS.get(value.toLowerCase()); + } + return null; + } + + /** + * Get a collection of all registered {@link Item Items} + * + * @return Collection of all registered Items + */ + public static Collection values() { + return ALL_ITEMS.values(); + } + + @Nullable + public static Item getFromStack(@NotNull ItemStack itemStack) { + // TODO refactor this to use keys instead of strings + for (Item item : ALL_ITEMS.values()) { + if (item.is(itemStack)) { + return item; + } + } + return null; + } + + /** + * Tags for different {@link Items} groups + */ + public enum Tags { + /** + * Any sickle + */ + SICKLES(FLINT_SICKLE, STONE_SICKLE, IRON_SICKLE, DIAMOND_SICKLE), + /** + * Any reinforced leather armor + */ + REINFORCED_LEATHER_ARMOR(REINFORCED_LEATHER_BOOTS, REINFORCED_LEATHER_TROUSERS, + REINFORCED_LEATHER_TUNIC, REINFORCED_LEATHER_HELMET), + /** + * Any water bottle + */ + WATER_BOTTLE(DIRTY_WATER, CLEAN_WATER, PURIFIED_WATER), + /** + * Any drinkable item + */ + DRINKABLE(DIRTY_WATER, CLEAN_WATER, PURIFIED_WATER, WATER_BOWL, + COLD_MILK, HOT_MILK, COFFEE), + + /** + * Any legendary item + */ + LEGENDARY(BLAZE_SWORD, OBSIDIAN_MACE, VALKYRIES_AXE, ENDER_GIANT_BLADE, QUARTZ_PICKAXE); + + private final Item[] items; + + Tags(Item... items) { + this.items = items; + } + + /** + * Get all items tagged in this group + * + * @return All items tagged in this group + */ + public Item[] getItems() { + return items; + } + + /** + * Check if an ItemStack is tagged in a group of custom {@link Items} + * + * @param itemStack ItemStack to check + * @return True if item matches tag + */ + public boolean isTagged(ItemStack itemStack) { + for (Item item : this.items) { + if (item.is(itemStack)) return true; + } + return false; + } + + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/Nutrition.java b/src/main/java/tk/shanebee/survival/item/Nutrition.java index 8b425c7..b8d5d03 100644 --- a/src/main/java/tk/shanebee/survival/item/Nutrition.java +++ b/src/main/java/tk/shanebee/survival/item/Nutrition.java @@ -159,7 +159,7 @@ public static boolean unregister(@NotNull NamespacedKey key) { this.proteins = proteins; this.vitamins = vitamins; this.item = item; - this.itemStack = item.getItem(); + this.itemStack = item.getItemStack(); } /** diff --git a/src/main/java/tk/shanebee/survival/item/items/FireStriker.java b/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/FireStriker.java rename to src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java index 5e35e37..603c18f 100644 --- a/src/main/java/tk/shanebee/survival/item/items/FireStriker.java +++ b/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java @@ -18,10 +18,10 @@ import org.jetbrains.annotations.NotNull; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; -public class FireStriker implements Runnable, InventoryHolder { +public class FireStrikerListen implements Runnable, InventoryHolder { private final int id; private final Inventory inv; @@ -32,7 +32,7 @@ public class FireStriker implements Runnable, InventoryHolder { private int cookTime; private int burnTime; - public FireStriker(Player player, ItemStack item) { + public FireStrikerListen(Player player, ItemStack item) { Survival plugin = Survival.getInstance(); Lang lang = plugin.getLang(); this.inv = Bukkit.createInventory(this, InventoryType.FURNACE, Utils.getColoredString(lang.firestriker)); @@ -78,7 +78,7 @@ private void tick() { private void updateFuel() { ItemStack fuel = inv.getItem(1); - if (fuel != null && Item.FIRESTRIKER.compare(fuel)) { + if (fuel != null && Items.FIRESTRIKER.is(fuel)) { Damageable meta = ((Damageable) fuel.getItemMeta()); assert meta != null; burnTime = 8 - (meta.getDamage() / 7); @@ -87,7 +87,7 @@ private void updateFuel() { private boolean canBurn() { ItemStack fuel = inv.getItem(1); - return fuel != null && Item.FIRESTRIKER.compare(fuel) && burnTime > 0; + return fuel != null && Items.FIRESTRIKER.is(fuel) && burnTime > 0; } private void burn() { diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java new file mode 100644 index 0000000..275507e --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java @@ -0,0 +1,116 @@ +package tk.shanebee.survival.item.items.armor; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class ArmorPiece extends Item { + + private final ArmorType armorType; + private final ArmorMaterial armorMaterial; + + public ArmorPiece(ArmorType armorType, ArmorMaterial armorMaterial, double armor, double moveSpeed) { + this(armorType, armorMaterial, armor, moveSpeed, 0, 0); + } + + public ArmorPiece(ArmorType armorType, ArmorMaterial armorMaterial, double armor, double moveSpeed, double toughness, double knockback) { + this.armorType = armorType; + this.armorMaterial = armorMaterial; + + ItemStack itemStack = armorMaterial.getItemType(armorType).createItemStack(); + + ItemMeta itemMeta = itemStack.getItemMeta(); + + AttributeModifier armorMod = new AttributeModifier(NamespacedKey.minecraft("armor." + armorType.key), armor, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); + itemMeta.addAttributeModifier(Attribute.ARMOR, armorMod); + + AttributeModifier speedMod = new AttributeModifier(BASE_MOVEMENT_SPEED, moveSpeed, Operation.ADD_SCALAR, EquipmentSlotGroup.FEET); + itemMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, speedMod); + + if (toughness > 0) { + AttributeModifier toughnessMod = new AttributeModifier(BASE_ATTACK_TOUGH, toughness, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); + itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, toughnessMod); + } + + if (knockback > 0) { + AttributeModifier knockbackMod = new AttributeModifier(BASE_ATTACK_KNOCKBACK, knockback, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); + itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, knockbackMod); + } + + itemStack.setItemMeta(itemMeta); + setupDefaults(armorMaterial.getKey(armorType), itemStack); + } + + @SuppressWarnings({"DataFlowIssue", "deprecation"}) + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + if (this.armorMaterial == ArmorMaterial.GOLDEN && this.armorType == ArmorType.HELMET) { + recipe.shape("#e#", "###"); + recipe.setIngredient('e', Material.EMERALD); + } else { + recipe.shape(this.armorType.shape); + } + recipe.setIngredient('#', this.armorMaterial.recipeMaterial.asMaterial()); + Bukkit.addRecipe(recipe); + } + + public enum ArmorType { + HELMET("helmet", "crown", "###", "# #"), + CHESTPLATE("chestplate", "guard", "# #", "###", "###"), + LEGGINGS("leggings", "greaves", "###", "# #", "# #"), + BOOTS("boots", "sabatons", "# #", "# #"); + + private final String key; + private final String name; + private final String[] shape; + + ArmorType(String key, String name, String... shape) { + this.key = key; + this.name = name; + this.shape = shape; + } + + public String getKey() { + return this.key; + } + } + + public enum ArmorMaterial { + LEATHER("leather", null), + GOLDEN("golden", ItemType.GOLD_INGOT), + IRON("iron", ItemType.IRON_INGOT), + DIAMOND("diamond", ItemType.DIAMOND), + NETHERITE("netherite", ItemType.NETHERITE_INGOT); + + private final String key; + private final ItemType recipeMaterial; + + ArmorMaterial(String key, ItemType recipeMaterial) { + this.key = key; + this.recipeMaterial = recipeMaterial; + } + + public ItemType getItemType(ArmorType armorType) { + String typeKey = this.key + "_" + armorType.key; + return Registry.ITEM.get(NamespacedKey.minecraft(typeKey)); + } + + public String getKey(ArmorType armorType) { + return this.key + "_" + (this == GOLDEN ? armorType.name : armorType.key); + } + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java new file mode 100644 index 0000000..3f585f3 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java @@ -0,0 +1,71 @@ +package tk.shanebee.survival.item.items.armor; + +import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorMaterial; +import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorType; + +@SuppressWarnings("UnstableApiUsage") +public class BeekeeperPiece extends Item { + + private final ArmorType armorType; + + public BeekeeperPiece(ArmorType armorType) { + this.armorType = armorType; + String key = "beekeeper_" + armorType.getKey(); + ItemStack itemStack = ArmorMaterial.LEATHER.getItemType(armorType).createItemStack(); + if (itemStack.getItemMeta() instanceof LeatherArmorMeta leatherArmorMeta) { + int color = ITEM_CONFIG.getColor(key); + if (color > 0) { + leatherArmorMeta.setColor(Color.fromRGB(color)); + leatherArmorMeta.addItemFlags(ItemFlag.HIDE_DYE); + itemStack.setItemMeta(leatherArmorMeta); + } + } + setupDefaults(key, itemStack); + } + + @Override + public void registerRecipe() { + switch (this.armorType) { + case HELMET -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("121", "3 3", " "); + recipe.setIngredient('1', Material.HONEYCOMB); + recipe.setIngredient('2', Material.IRON_INGOT); + recipe.setIngredient('3', Material.LEATHER); + Bukkit.addRecipe(recipe); + } + case CHESTPLATE -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("1 1", "232", "323"); + recipe.setIngredient('1', Material.HONEYCOMB); + recipe.setIngredient('2', Material.IRON_INGOT); + recipe.setIngredient('3', Material.LEATHER); + Bukkit.addRecipe(recipe); + } + case LEGGINGS -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("131", "3 3", "2 2"); + recipe.setIngredient('1', Material.HONEYCOMB); + recipe.setIngredient('2', Material.IRON_INGOT); + recipe.setIngredient('3', Material.LEATHER); + Bukkit.addRecipe(recipe); + } + case BOOTS -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape(" ", "1 1", "3 3"); + recipe.setIngredient('1', Material.HONEYCOMB); + recipe.setIngredient('3', Material.LEATHER); + Bukkit.addRecipe(recipe); + } + } + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java new file mode 100644 index 0000000..bf3fbed --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java @@ -0,0 +1,35 @@ +package tk.shanebee.survival.item.items.armor; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.DyedItemColor; +import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class RainBoots extends Item { + + public RainBoots() { + ItemStack itemStack = ItemType.LEATHER_BOOTS.createItemStack(); + itemStack.setData(DataComponentTypes.DYED_COLOR, + DyedItemColor.dyedItemColor(Color.fromRGB(214, 231, 3), + false)); + setupDefaults("rain_boots", itemStack); + + } + + @Override + public void registerRecipe() { + ShapedRecipe rainBoots = new ShapedRecipe(this.recipeKey, this.getItemStack()); + rainBoots.shape("ili"); + rainBoots.setIngredient('i', Material.IRON_INGOT); + rainBoots.setIngredient('l', Material.LEATHER_BOOTS); + Bukkit.addRecipe(rainBoots); + + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java new file mode 100644 index 0000000..ddfeec1 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java @@ -0,0 +1,86 @@ +package tk.shanebee.survival.item.items.armor; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorType; + +@SuppressWarnings("UnstableApiUsage") +public class ReinforcedPiece extends Item { + + private final ArmorType armorType; + + public ReinforcedPiece(ArmorType armorType) { + this.armorType = armorType; + ItemStack itemStack = itemType().createItemStack(); + if (armorType == ArmorType.BOOTS) { + ItemMeta itemMeta = itemStack.getItemMeta(); + AttributeModifier i_leatherBootsArmor = new AttributeModifier(NamespacedKey.minecraft("armor.boots"), 2, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); + itemMeta.addAttributeModifier(Attribute.ARMOR, i_leatherBootsArmor); + itemStack.setItemMeta(itemMeta); + } + setupDefaults(key(), itemStack); + } + + @Override + public void registerRecipe() { + switch (this.armorType) { + case HELMET -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("@*@"); + recipe.setIngredient('@', Material.IRON_INGOT); + recipe.setIngredient('*', Material.LEATHER_HELMET); + Bukkit.addRecipe(recipe); + } + case CHESTPLATE -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape(" @ ", "@*@", " @ "); + recipe.setIngredient('@', Material.IRON_INGOT); + recipe.setIngredient('*', Material.LEATHER_CHESTPLATE); + Bukkit.addRecipe(recipe); + } + case LEGGINGS -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape(" @ ", "@*@", " @ "); + recipe.setIngredient('@', Material.IRON_INGOT); + recipe.setIngredient('*', Material.LEATHER_LEGGINGS); + Bukkit.addRecipe(recipe); + } + case BOOTS -> { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("@*@"); + recipe.setIngredient('@', Material.IRON_INGOT); + recipe.setIngredient('*', Material.LEATHER_BOOTS); + Bukkit.addRecipe(recipe); + } + } + } + + private String key() { + return "reinforced_leather_" + switch (this.armorType) { + case HELMET -> "helmet"; + case CHESTPLATE -> "tunic"; + case LEGGINGS -> "trousers"; + case BOOTS -> "boots"; + }; + } + + private ItemType itemType() { + return switch (this.armorType) { + case HELMET -> ItemType.LEATHER_HELMET; + case CHESTPLATE -> ItemType.LEATHER_CHESTPLATE; + case LEGGINGS -> ItemType.LEATHER_LEGGINGS; + case BOOTS -> ItemType.LEATHER_BOOTS; + }; + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java new file mode 100644 index 0000000..e94d94b --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java @@ -0,0 +1,33 @@ +package tk.shanebee.survival.item.items.armor; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.DyedItemColor; +import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class SnowBoots extends Item { + + public SnowBoots() { + ItemStack itemStack = ItemType.LEATHER_BOOTS.createItemStack(); + itemStack.setData(DataComponentTypes.DYED_COLOR, + DyedItemColor.dyedItemColor(Color.fromRGB(158, 201, 202), + false)); + setupDefaults("snow_boots", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("dld"); + recipe.setIngredient('d', Material.DIAMOND); + recipe.setIngredient('l', Material.LEATHER_BOOTS); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java b/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java new file mode 100644 index 0000000..805f7eb --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java @@ -0,0 +1,38 @@ +package tk.shanebee.survival.item.items.blocks; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Tag; +import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice.MaterialChoice; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.BlockDataMeta; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class Campfire extends Item { + + public Campfire() { + ItemStack campfire = ItemType.CAMPFIRE.createItemStack(); + ItemMeta campfireMeta = campfire.getItemMeta(); + BlockData data = Bukkit.createBlockData("minecraft:campfire[lit=false]"); + ((BlockDataMeta) campfireMeta).setBlockData(data); + campfire.setItemMeta(campfireMeta); + setupDefaults("unlit_campfire", campfire); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" s ", "scs", "lll"); + recipe.setIngredient('s', Material.STICK); + recipe.setIngredient('c', new MaterialChoice(Tag.ITEMS_COALS)); + recipe.setIngredient('l', new MaterialChoice(Tag.LOGS)); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java b/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java new file mode 100644 index 0000000..5180f9f --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java @@ -0,0 +1,32 @@ +package tk.shanebee.survival.item.items.blocks; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Tag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.ShapelessRecipe; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; + +@SuppressWarnings("UnstableApiUsage") +public class Workbench extends Item { + + public Workbench() { + ItemStack itemStack = ItemType.CRAFTING_TABLE.createItemStack(); + setupDefaults("workbench", itemStack); + } + + @Override + public void registerRecipe() { + ShapelessRecipe recipe = new ShapelessRecipe(this.recipeKey, this.getItemStack()); + + recipe.addIngredient(new RecipeChoice.MaterialChoice(Tag.LOGS)); + recipe.addIngredient(Material.LEATHER); + recipe.addIngredient(Material.STRING); + recipe.addIngredient(Items.HAMMER.getItemStack()); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java new file mode 100644 index 0000000..8cadba2 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java @@ -0,0 +1,44 @@ +package tk.shanebee.survival.item.items.drinks; + +import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionType; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; + +@SuppressWarnings("UnstableApiUsage") +public class Coffee extends Item { + + public Coffee() { + ItemStack itemStack = ItemType.POTION.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); + ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor("coffee"))); + itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); + itemStack.setItemMeta(itemMeta); + setupDefaults("coffee", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack(2)); + + recipe.shape(" ", "12 ", "34 "); + recipe.setIngredient('1', new RecipeChoice.ExactChoice(Items.COFFEE_BEAN.getItemStack())); + recipe.setIngredient('2', Material.COCOA_BEANS); + recipe.setIngredient('3', new RecipeChoice.ExactChoice(Items.HOT_MILK.getItemStack())); + recipe.setIngredient('4', new RecipeChoice.ExactChoice(Items.PURIFIED_WATER.getItemStack())); + Bukkit.addRecipe(recipe); + + // TODO maybe a brewer recipe? + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java new file mode 100644 index 0000000..5960543 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java @@ -0,0 +1,36 @@ +package tk.shanebee.survival.item.items.drinks; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionType; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class ColdMilk extends Item { + + public ColdMilk() { + ItemStack itemStack = ItemType.POTION.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); + itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); + itemStack.setItemMeta(itemMeta); + setupDefaults("cold_milk", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" ", "12 ", " "); + recipe.setIngredient('1', Material.MILK_BUCKET); + recipe.setIngredient('2', Material.GLASS_BOTTLE); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java new file mode 100644 index 0000000..6e2921b --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java @@ -0,0 +1,33 @@ +package tk.shanebee.survival.item.items.drinks; + +import org.bukkit.Bukkit; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.SmokingRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionType; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; + +public class HotMilk extends Item { + + public HotMilk() { + ItemStack itemStack = ItemType.POTION.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); + itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); + itemStack.setItemMeta(itemMeta); + setupDefaults("hot_milk", itemStack); + } + + @Override + public void registerRecipe() { + SmokingRecipe recipe = new SmokingRecipe(this.recipeKey, this.getItemStack(), + new RecipeChoice.ExactChoice(Items.COLD_MILK.getItemStack()), 0, 200); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java new file mode 100644 index 0000000..440d1e5 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java @@ -0,0 +1,26 @@ +package tk.shanebee.survival.item.items.drinks; + +import org.bukkit.Color; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionType; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class Water extends Item { + + public Water(String key) { + ItemStack itemStack = ItemType.POTION.createItemStack(); + + ItemMeta itemMeta = itemStack.getItemMeta(); + ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); + ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor(key))); + itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); + itemStack.setItemMeta(itemMeta); + setupDefaults(key, itemStack); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java b/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java new file mode 100644 index 0000000..2035cb3 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java @@ -0,0 +1,20 @@ +package tk.shanebee.survival.item.items.drinks; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionType; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class WaterBowl extends Item { + + public WaterBowl() { + ItemStack itemStack = ItemType.POTION.createItemStack(); + PotionMeta itemMeta = ((PotionMeta) itemStack.getItemMeta()); + itemMeta.setBasePotionType(PotionType.WATER); + itemStack.setItemMeta(itemMeta); + setupDefaults("water_bowl", itemStack); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java b/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java new file mode 100644 index 0000000..cef5913 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java @@ -0,0 +1,60 @@ +package tk.shanebee.survival.item.items.food; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.SuspiciousStewEffects; +import io.papermc.paper.potion.SuspiciousEffectEntry; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.potion.PotionEffectType; +import tk.shanebee.survival.item.Item; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +@SuppressWarnings("UnstableApiUsage") +public class SuspiciousMeat extends Item { + + private static final List POTION_EFFECTS = new ArrayList<>(); + + @SuppressWarnings("UnstableApiUsage") + public SuspiciousMeat() { + ItemStack itemStack = ItemType.APPLE.createItemStack(); + setupDefaults("suspicious_meat", itemStack); + } + + @Override + public ItemStack getItemStack() { + // Add random effect when item is requested + ItemStack itemStack = super.getItemStack(); + itemStack.setData(DataComponentTypes.SUSPICIOUS_STEW_EFFECTS, SuspiciousStewEffects.suspiciousStewEffects().add(getRandomEffect()).build()); + return itemStack; + } + + static { + // BAD + POTION_EFFECTS.add(PotionEffectType.BAD_OMEN); + POTION_EFFECTS.add(PotionEffectType.NAUSEA); + POTION_EFFECTS.add(PotionEffectType.POISON); + POTION_EFFECTS.add(PotionEffectType.UNLUCK); + POTION_EFFECTS.add(PotionEffectType.HUNGER); + POTION_EFFECTS.add(PotionEffectType.INSTANT_DAMAGE); + POTION_EFFECTS.add(PotionEffectType.SLOWNESS); + // GOOD + POTION_EFFECTS.add(PotionEffectType.DOLPHINS_GRACE); + POTION_EFFECTS.add(PotionEffectType.ABSORPTION); + POTION_EFFECTS.add(PotionEffectType.HASTE); + POTION_EFFECTS.add(PotionEffectType.LUCK); + POTION_EFFECTS.add(PotionEffectType.HEALTH_BOOST); + POTION_EFFECTS.add(PotionEffectType.REGENERATION); + POTION_EFFECTS.add(PotionEffectType.SPEED); + } + + private static SuspiciousEffectEntry getRandomEffect() { + Random random = new Random(); + int randomEffect = random.nextInt(POTION_EFFECTS.size()); + int randomDuration = random.nextInt(200) + 200; + return SuspiciousEffectEntry.create(POTION_EFFECTS.get(randomEffect), randomDuration); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java b/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java new file mode 100644 index 0000000..ebf902a --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java @@ -0,0 +1,63 @@ +package tk.shanebee.survival.item.items.legendary; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.managers.ItemManager; +import tk.shanebee.survival.util.Utils; + +import java.util.Arrays; +import java.util.UUID; + +@SuppressWarnings("UnstableApiUsage") +public class BlazeSword extends Item { + + public BlazeSword() { + ItemStack itemStack = ItemType.DIAMOND_SWORD.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + int gSword_dmg = 6; + float gSword_spd = 1.6f; + int gSword_health = -6; + + AttributeModifier i_gSwordDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, gSword_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gSwordDamage); + + AttributeModifier i_gSwordSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gSword_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gSwordSpeed); + + AttributeModifier i_gSwordHealth = new AttributeModifier(NamespacedKey.minecraft("base_max_health"), gSword_health, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.MAX_HEALTH, i_gSwordHealth); + + itemMeta.addEnchant(Enchantment.FIRE_ASPECT, 2, true); + itemMeta.addEnchant(Enchantment.UNBREAKING, 3, false); + itemStack.setItemMeta(itemMeta); + setupDefaults("blaze_sword", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe blaze_sword = new ShapedRecipe(this.recipeKey, this.getItemStack()); + blaze_sword.shape("BgB", "BgB", "BbB"); + + blaze_sword.setIngredient('g', Material.GOLD_INGOT); + blaze_sword.setIngredient('b', Material.BLAZE_ROD); + blaze_sword.setIngredient('B', Material.BLAZE_POWDER); + Bukkit.addRecipe(blaze_sword); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java b/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java new file mode 100644 index 0000000..472ca5c --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java @@ -0,0 +1,58 @@ +package tk.shanebee.survival.item.items.legendary; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Tag; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class EnderGiantBlade extends Item { + + public EnderGiantBlade() { + ItemStack itemStack = ItemType.DIAMOND_SWORD.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + int gHoe_dmg = 8; + int gHoe_spd = 1; + float gHoe_move = -0.5f; + + AttributeModifier i_gHoeDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, gHoe_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gHoeDamage); + + AttributeModifier i_gHoeSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gHoe_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gHoeSpeed); + + AttributeModifier i_gHoeMove = new AttributeModifier(BASE_MOVEMENT_SPEED, gHoe_move, Operation.ADD_SCALAR, EquipmentSlotGroup.OFFHAND); + itemMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_gHoeMove); + + itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); + itemStack.setItemMeta(itemMeta); + setupDefaults("ender_giant_blade", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" dd", "Ded", "pD "); + + recipe.setIngredient('e', Material.ENDER_EYE); + recipe.setIngredient('d', Material.DIAMOND); + recipe.setIngredient('D', Material.DIAMOND_BLOCK); + recipe.setIngredient('p', new RecipeChoice.MaterialChoice(Tag.PLANKS)); + + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java b/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java new file mode 100644 index 0000000..8027548 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java @@ -0,0 +1,56 @@ +package tk.shanebee.survival.item.items.legendary; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class ObsidianMace extends Item { + + public ObsidianMace() { + ItemStack itemStack = ItemType.DIAMOND_SHOVEL.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + int gSpade_dmg = 4; + float gSpade_spd = 0.8f; + float gSpade_knockbackPercent = 0.5f; + + AttributeModifier i_gSpadeDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, gSpade_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gSpadeDamage); + + AttributeModifier i_gSpadeSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gSpade_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gSpadeSpeed); + + AttributeModifier i_gSpadeKnock = new AttributeModifier(NamespacedKey.minecraft("base_attack_resistance"), gSpade_knockbackPercent, Operation.ADD_SCALAR, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, i_gSpadeKnock); + + itemMeta.addEnchant(Enchantment.KNOCKBACK, 3, true); + itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); + itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); + setupDefaults("obsidian_mace", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe obsidian_mace = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + obsidian_mace.shape(" oo", " eo", "s "); + + obsidian_mace.setIngredient('o', Material.OBSIDIAN); + obsidian_mace.setIngredient('e', Material.END_CRYSTAL); + obsidian_mace.setIngredient('s', Material.STICK); + Bukkit.addRecipe(obsidian_mace); + + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java b/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java new file mode 100644 index 0000000..05e373b --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java @@ -0,0 +1,52 @@ +package tk.shanebee.survival.item.items.legendary; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class QuartzPickaxe extends Item { + + public QuartzPickaxe() { + ItemStack itemStack = ItemType.DIAMOND_PICKAXE.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + int gPickaxe_dmg = 5; + float gPickaxe_spd = 0.8f; + + AttributeModifier i_gPickDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, gPickaxe_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gPickDamage); + + AttributeModifier i_gPickSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gPickaxe_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gPickSpeed); + + itemMeta.addEnchant(Enchantment.SILK_TOUCH, 1, false); + itemMeta.addEnchant(Enchantment.MENDING, 1, false); + itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); + setupDefaults("quartz_pickaxe", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("qDd", "De ", "d s"); + + recipe.setIngredient('q', Material.QUARTZ_BLOCK); + recipe.setIngredient('d', Material.DIAMOND); + recipe.setIngredient('D', Material.DIAMOND_BLOCK); + recipe.setIngredient('s', Material.STICK); + recipe.setIngredient('e', Material.DRAGON_EGG); + + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java b/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java new file mode 100644 index 0000000..ce9c699 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java @@ -0,0 +1,44 @@ +package tk.shanebee.survival.item.items.legendary; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class ValkyriesAxe extends Item { + + public ValkyriesAxe() { + ItemStack itemStack = ItemType.DIAMOND_AXE.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + int gAxe_spd = 1; + int gAxe_dmg = 8; // TODO, why is this here? + + AttributeModifier i_gAxeSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gAxe_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gAxeSpeed); + + itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); + itemStack.setItemMeta(itemMeta); + setupDefaults("valkyries_axe", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("ddd", "dnd", " s "); + recipe.setIngredient('d', Material.DIAMOND); + recipe.setIngredient('n', Material.NETHER_STAR); + recipe.setIngredient('s', Material.STICK); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java b/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java new file mode 100644 index 0000000..7fc0d2a --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java @@ -0,0 +1,15 @@ +package tk.shanebee.survival.item.items.misc; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class BreedingEgg extends Item { + + public BreedingEgg() { + ItemStack itemStack = ItemType.EGG.createItemStack(); + setupDefaults("breeding_egg", itemStack); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java b/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java new file mode 100644 index 0000000..53b5bae --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java @@ -0,0 +1,25 @@ +package tk.shanebee.survival.item.items.misc; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.SmokingRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class CoffeeBean extends Item { + + public CoffeeBean() { + ItemStack itemStack = ItemType.COCOA_BEANS.createItemStack(); + setupDefaults("coffee_bean", itemStack); + } + + @Override + public void registerRecipe() { + SmokingRecipe recipe = new SmokingRecipe(this.recipeKey, this.getItemStack(), + Material.COCOA_BEANS, 0, 200); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java b/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java new file mode 100644 index 0000000..d5a03c8 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java @@ -0,0 +1,29 @@ +package tk.shanebee.survival.item.items.misc; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.ShapelessRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class FermentedSkin extends Item { + + public FermentedSkin() { + ItemStack itemStack = ItemType.RABBIT_HIDE.createItemStack(); // TODO rotten flesh instead? maybe an apple?!?! + setupDefaults("fermented_skin", itemStack); + + } + + @Override + public void registerRecipe() { + ShapelessRecipe recipe = new ShapelessRecipe(this.recipeKey, this.getItemStack()); + recipe.addIngredient(Material.ROTTEN_FLESH); + recipe.addIngredient(Material.SUGAR); + recipe.addIngredient(new RecipeChoice.MaterialChoice(Material.BROWN_MUSHROOM, Material.RED_MUSHROOM)); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java b/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java new file mode 100644 index 0000000..580259d --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java @@ -0,0 +1,27 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class Compass extends Item { + + public Compass() { + ItemStack itemStack = ItemType.COMPASS.createItemStack(); + setupDefaults("compass", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape(" i ", "iri", " i "); + recipe.setIngredient('i', Material.IRON_INGOT); + recipe.setIngredient('r', Material.REDSTONE); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java b/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java new file mode 100644 index 0000000..1d50154 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java @@ -0,0 +1,43 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Tag; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.ShapelessRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class FireStriker extends Item { + + public FireStriker() { + ItemStack itemStack = ItemType.WOODEN_SHOVEL.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + float firestriker_spd = 4f; + + AttributeModifier i_firestrikerSpeed = new AttributeModifier(BASE_ATTACK_SPEED, firestriker_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_firestrikerSpeed); + + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemStack.setItemMeta(itemMeta); + setupDefaults("firestriker", itemStack); + } + + @Override + public void registerRecipe() { + ShapelessRecipe recipe = new ShapelessRecipe(this.recipeKey, this.getItemStack()); + recipe.addIngredient(Material.FLINT); + recipe.addIngredient(new RecipeChoice.MaterialChoice(Tag.ITEMS_COALS)); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java b/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java new file mode 100644 index 0000000..92a1393 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java @@ -0,0 +1,29 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class GrapplingHook extends Item { + + public GrapplingHook() { + ItemStack itemStack = ItemType.FISHING_ROD.createItemStack(); + setupDefaults("grappling_hook", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" i ", "fsf", " i "); + recipe.setIngredient('f', Material.FISHING_ROD); + recipe.setIngredient('s', Material.STRING); + recipe.setIngredient('i', Material.IRON_INGOT); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java b/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java new file mode 100644 index 0000000..3e7dc09 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java @@ -0,0 +1,30 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +public class Hammer extends Item { + + @SuppressWarnings("UnstableApiUsage") + public Hammer() { + ItemStack itemStack = ItemType.WOODEN_SWORD.createItemStack(); + ItemMeta hammerMeta = itemStack.getItemMeta(); + itemStack.setItemMeta(hammerMeta); + setupDefaults("hammer", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("c ", "sc"); + recipe.setIngredient('c', Material.COBBLESTONE); + recipe.setIngredient('s', Material.STICK); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java b/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java new file mode 100644 index 0000000..8eb640e --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java @@ -0,0 +1,27 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class Hatchet extends Item { + + public Hatchet() { + ItemStack itemStack = ItemType.WOODEN_AXE.createItemStack(); + setupDefaults("hatchet", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("ff", " s"); + recipe.setIngredient('f', Material.FLINT); + recipe.setIngredient('s', Material.STICK); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java b/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java new file mode 100644 index 0000000..5cf56f1 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java @@ -0,0 +1,31 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Tag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class Mattock extends Item { + + public Mattock() { + ItemStack itemStack = ItemType.WOODEN_PICKAXE.createItemStack(); + setupDefaults("mattock", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape("fp", "sf"); + recipe.setIngredient('f', Material.FLINT); + recipe.setIngredient('p', new RecipeChoice.MaterialChoice(Tag.PLANKS)); + recipe.setIngredient('s', Material.STICK); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java b/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java new file mode 100644 index 0000000..bc86398 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java @@ -0,0 +1,31 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class MedicKit extends Item { + + public MedicKit() { + ItemStack itemStack = ItemType.CLOCK.createItemStack(); + setupDefaults("medic_kit", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" g ", "fgp", " g "); + + recipe.setIngredient('g', Material.GOLD_INGOT); + recipe.setIngredient('f', Material.FEATHER); + recipe.setIngredient('g', Material.GLISTERING_MELON_SLICE); + recipe.setIngredient('p', Material.PAPER); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java new file mode 100644 index 0000000..341145d --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java @@ -0,0 +1,35 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class RecurveBow extends Item { + + public RecurveBow() { + ItemStack itemStack = ItemType.BOW.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.addEnchant(Enchantment.PUNCH, 1, true); + itemStack.setItemMeta(itemMeta); + setupDefaults("recurve_bow", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" @1", "#^1", " @1"); + recipe.setIngredient('^', Material.BOW); + recipe.setIngredient('#', Material.PISTON); + recipe.setIngredient('@', Material.IRON_INGOT); + recipe.setIngredient('1', Material.STRING); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java new file mode 100644 index 0000000..80d850e --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java @@ -0,0 +1,35 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class RecurveCrossbow extends Item { + + public RecurveCrossbow() { + ItemStack itemStack = ItemType.CROSSBOW.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.addEnchant(Enchantment.PUNCH, 1, true); + itemStack.setItemMeta(itemMeta); + setupDefaults("recurve_crossbow", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" 12", "342", " 12"); + recipe.setIngredient('1', Material.DIAMOND); + recipe.setIngredient('2', Material.PHANTOM_MEMBRANE); + recipe.setIngredient('3', Material.PISTON); + recipe.setIngredient('4', Material.CROSSBOW); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java b/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java new file mode 100644 index 0000000..39dceff --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java @@ -0,0 +1,49 @@ +package tk.shanebee.survival.item.items.tools; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class Shiv extends Item { + + public Shiv() { + ItemStack itemStack = ItemType.WOODEN_HOE.createItemStack(); + ItemMeta itemMeta = itemStack.getItemMeta(); + + int shiv_dmg = 4; + float shiv_spd = 1.8f; + + AttributeModifier i_shivDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, shiv_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_shivDamage); + + AttributeModifier i_shivSpeed = new AttributeModifier(BASE_ATTACK_SPEED, shiv_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_shivSpeed); + + itemStack.setItemMeta(itemMeta); + setupDefaults("shiv", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe shiv = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + shiv.shape("*f", "se"); + + shiv.setIngredient('f', Material.FLINT); + shiv.setIngredient('s', Material.STICK); + shiv.setIngredient('*', Material.STRING); + shiv.setIngredient('e', Material.SPIDER_EYE); + + Bukkit.addRecipe(shiv); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java b/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java new file mode 100644 index 0000000..ea96fea --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java @@ -0,0 +1,34 @@ +package tk.shanebee.survival.item.items.tools; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.ShapedRecipe; +import tk.shanebee.survival.item.Item; + +@SuppressWarnings("UnstableApiUsage") +public class Sickle extends Item { + + private final Material recipeMaterial; + + public Sickle(String typeKey, Material recipeMaterial) { + this.recipeMaterial = recipeMaterial; + ItemStack itemStack = ItemType.WOODEN_HOE.createItemStack(); + itemStack.unsetData(DataComponentTypes.ATTRIBUTE_MODIFIERS); + setupDefaults(typeKey + "_sickle", itemStack); + } + + @Override + public void registerRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape("oof", " s", " s "); + recipe.setIngredient('o', this.recipeMaterial); + recipe.setIngredient('f', Material.FLINT); + recipe.setIngredient('s', Material.STICK); + Bukkit.addRecipe(recipe); + } + +} diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index 1631d0e..02fa3e8 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -61,7 +61,7 @@ public void registerEvents() { pm.registerEvents(new Campfire(plugin), this.plugin); //pm.registerEvents(new Backpack(), this.plugin); needs to be reworked } - pm.registerEvents(new NoAnvil(plugin), this.plugin); +// pm.registerEvents(new NoAnvil(plugin), this.plugin); // TODO see class if (config.MECHANICS_BOW) pm.registerEvents(new Bow(plugin), this.plugin); if (config.MECHANICS_GRAPPLING_HOOK) diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java index e8ad1d3..9e5c8f2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java @@ -1,7 +1,13 @@ package tk.shanebee.survival.listeners.block; -import org.bukkit.*; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.Ageable; @@ -15,276 +21,275 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; import java.util.Random; public class BlockBreak implements Listener { - private Config settings; - private Lang lang; + private Config settings; + private Lang lang; - public BlockBreak(Survival plugin) { - this.lang = plugin.getLang(); - this.settings = plugin.getSurvivalConfig(); - } + public BlockBreak(Survival plugin) { + this.lang = plugin.getLang(); + this.settings = plugin.getSurvivalConfig(); + } - @EventHandler(priority = EventPriority.HIGHEST) - private void onBlockBreak(BlockBreakEvent event) { - if (event.isCancelled()) return; - Player player = event.getPlayer(); + @EventHandler(priority = EventPriority.HIGHEST) + private void onBlockBreak(BlockBreakEvent event) { + if (event.isCancelled()) return; + Player player = event.getPlayer(); - ItemStack tool = player.getInventory().getItemInMainHand(); + ItemStack tool = player.getInventory().getItemInMainHand(); - Block block = event.getBlock(); - Material material = block.getType(); + Block block = event.getBlock(); + Material material = block.getType(); - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - if (!ItemManager.compare(tool, Item.QUARTZ_PICKAXE)) { - if (settings.BREAK_ONLY_WITH_SHOVEL) { - if (!Utils.isShovel(tool.getType())) { - if (Utils.requiresShovel(material)) { - event.setCancelled(true); - player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_shovel)); - } - //Flint - if (material == Material.GRAVEL) { - event.setDropItems(false); + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { + if (!Items.QUARTZ_PICKAXE.is(tool)) { + if (settings.BREAK_ONLY_WITH_SHOVEL) { + if (!Utils.isShovel(tool.getType())) { + if (Utils.requiresShovel(material)) { + event.setCancelled(true); + player.updateInventory(); + player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_shovel)); + } + //Flint + if (material == Material.GRAVEL) { + event.setDropItems(false); - Random rand = new Random(); - double chance = rand.nextDouble(); + Random rand = new Random(); + double chance = rand.nextDouble(); - if (chance <= settings.DROP_RATE_FLINT) - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.FLINT)); - } - } else { - Block above = block.getRelative(BlockFace.UP); - switch (block.getType()) { - case GRASS_BLOCK: - case DIRT: - case PODZOL: - case COARSE_DIRT: - case FARMLAND: - if (Utils.isFarmable(above.getType())) { - above.setType(Material.AIR); - } - } - } - } + if (chance <= settings.DROP_RATE_FLINT) + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.FLINT)); + } + } else { + Block above = block.getRelative(BlockFace.UP); + switch (block.getType()) { + case GRASS_BLOCK: + case DIRT: + case PODZOL: + case COARSE_DIRT: + case FARMLAND: + if (Utils.isFarmable(above.getType())) { + above.setType(Material.AIR); + } + } + } + } - if (settings.BREAK_ONLY_WITH_AXE && !Utils.isAxe(tool.getType())) { - if (Utils.requiresAxe(material)) { - event.setCancelled(true); - player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_axe)); - } + if (settings.BREAK_ONLY_WITH_AXE && !Utils.isAxe(tool.getType())) { + if (Utils.requiresAxe(material)) { + event.setCancelled(true); + player.updateInventory(); + player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_axe)); + } - //Fix half door glitch - if (Tag.DOORS.isTagged(material)) { - if (block.getRelative(BlockFace.UP).getType() == material) - block.getRelative(BlockFace.UP).getState().update(true); - if (block.getRelative(BlockFace.DOWN).getType() == material) - block.getRelative(BlockFace.DOWN).getState().update(true); - } - } - if (settings.BREAK_ONLY_WITH_PICKAXE && !Utils.isPickaxe(tool.getType())) { - if (Utils.requiresPickaxe(material)) { - event.setCancelled(true); - player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_pick)); - } - } + //Fix half door glitch + if (Tag.DOORS.isTagged(material)) { + if (block.getRelative(BlockFace.UP).getType() == material) + block.getRelative(BlockFace.UP).getState().update(true); + if (block.getRelative(BlockFace.DOWN).getType() == material) + block.getRelative(BlockFace.DOWN).getState().update(true); + } + } + if (settings.BREAK_ONLY_WITH_PICKAXE && !Utils.isPickaxe(tool.getType())) { + if (Utils.requiresPickaxe(material)) { + event.setCancelled(true); + player.updateInventory(); + player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_pick)); + } + } - if (settings.BREAK_ONLY_WITH_SICKLE) { - if (Utils.isFarmable(material)) { - if (!Item.Tags.SICKLES.isTagged(tool)) { - event.setCancelled(true); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_sickle)); - } else { - event.setDropItems(false); - Location loc = event.getBlock().getLocation(); - int random = 1; - int multiplier = 1; - boolean grown = true; + if (settings.BREAK_ONLY_WITH_SICKLE) { + if (Utils.isFarmable(material)) { + if (!Items.Tags.SICKLES.isTagged(tool)) { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_sickle)); + } else { + event.setDropItems(false); + Location loc = event.getBlock().getLocation(); + int random = 1; + int multiplier = 1; + boolean grown = true; - if (event.getBlock().getBlockData() instanceof Ageable) { - Ageable crop = ((Ageable) event.getBlock().getBlockData()); - grown = crop.getAge() == crop.getMaximumAge(); - } + if (event.getBlock().getBlockData() instanceof Ageable) { + Ageable crop = ((Ageable) event.getBlock().getBlockData()); + grown = crop.getAge() == crop.getMaximumAge(); + } - // Flint/Stone sickles drop a chance of 0-1 items (not grown) or 1-2 (grown) - if (ItemManager.compare(tool, Item.FLINT_SICKLE)) { - multiplier = 4; - random = grown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); - } - if (ItemManager.compare(tool, Item.STONE_SICKLE)) { - multiplier = 2; - random = grown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); - } - // Iron/Diamond sickles drop a chance of 1 (not grown) or 2-4 items (grown) - if (ItemManager.compare(tool, Item.IRON_SICKLE, Item.DIAMOND_SICKLE)) { - random = grown ? new Random().nextInt(2) + 3 : 1; - } + // Flint/Stone sickles drop a chance of 0-1 items (not grown) or 1-2 (grown) + if (Items.FLINT_SICKLE.is(tool)) { + multiplier = 4; + random = grown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); + } + if (Items.STONE_SICKLE.is(tool)) { + multiplier = 2; + random = grown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); + } + // Iron/Diamond sickles drop a chance of 1 (not grown) or 2-4 items (grown) + if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { + random = grown ? new Random().nextInt(2) + 3 : 1; + } - for (Material drop : Utils.getDrops(material, grown)) { - if (drop != Material.AIR && random != 0) { - assert loc.getWorld() != null; - if (drop == Material.PUMPKIN) { // prevent duping pumpkins - random = 1; + for (Material drop : Utils.getDrops(material, grown)) { + if (drop != Material.AIR && random != 0) { + assert loc.getWorld() != null; + if (drop == Material.PUMPKIN) { // prevent duping pumpkins + random = 1; } - loc.getWorld().dropItemNaturally(loc, new ItemStack(drop, random)); - } - } - if (tool.getType().getMaxDurability() < Utils.getDurability(tool) + multiplier) { - player.getInventory().setItemInMainHand(null); - player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); - return; - } - Utils.setDurability(tool, Utils.getDurability(tool) + multiplier); - player.updateInventory(); - } - } - } + loc.getWorld().dropItemNaturally(loc, new ItemStack(drop, random)); + } + } + if (tool.getType().getMaxDurability() < Utils.getDurability(tool) + multiplier) { + player.getInventory().setItemInMainHand(null); + player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); + return; + } + Utils.setDurability(tool, Utils.getDurability(tool) + multiplier); + player.updateInventory(); + } + } + } - if (!(tool.getType() == Material.SHEARS)) { - if (settings.BREAK_ONLY_WITH_SHEARS) { - if (Utils.requiresShears(material)) { - event.setCancelled(true); - player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_shear)); - } - } + if (!(tool.getType() == Material.SHEARS)) { + if (settings.BREAK_ONLY_WITH_SHEARS) { + if (Utils.requiresShears(material)) { + event.setCancelled(true); + player.updateInventory(); + player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_shear)); + } + } - //Sticks - Maybe this should be removed since 1.14+ leaves drop sticks?!?!? - if (Tag.LEAVES.isTagged(material)) { - Random rand = new Random(); - double chance = rand.nextDouble(); + //Sticks - Maybe this should be removed since 1.14+ leaves drop sticks?!?!? + if (Tag.LEAVES.isTagged(material)) { + Random rand = new Random(); + double chance = rand.nextDouble(); - if (chance <= settings.DROP_RATE_STICK) - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.STICK)); - } - } - if (settings.RECIPES_WORKBENCH && material == Material.CRAFTING_TABLE && !event.isCancelled()) { - event.setDropItems(false); - ItemStack workbench = ItemManager.get(Item.WORKBENCH); - block.getWorld().dropItem(block.getLocation(), workbench); - } - } else { - if (Utils.isOreBlock(material) || Utils.isNaturalOreBlock(material)) { - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(material)); - } - } - } - } + if (chance <= settings.DROP_RATE_STICK) + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.STICK)); + } + } + if (settings.RECIPES_WORKBENCH && material == Material.CRAFTING_TABLE && !event.isCancelled()) { + event.setDropItems(false); + ItemStack workbench = Items.WORKBENCH.getItemStack(); + block.getWorld().dropItem(block.getLocation(), workbench); + } + } else { + if (Utils.isOreBlock(material) || Utils.isNaturalOreBlock(material)) { + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(material)); + } + } + } + } - @SuppressWarnings("deprecation") - @EventHandler - private void onHarvest(PlayerInteractEvent e) { - if (e.isCancelled()) return; - if (!settings.BREAK_ONLY_WITH_SICKLE) return; - if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_AIR - || e.getAction() == Action.LEFT_CLICK_BLOCK) return; - Player player = e.getPlayer(); - Block block = e.getClickedBlock(); - ItemStack tool = player.getInventory().getItemInMainHand(); - assert block != null; - if (block.getType() == Material.SWEET_BERRY_BUSH) { - Ageable bush = ((Ageable) block.getBlockData()); - if (e.getItem() != null && e.getItem().getType() == Material.BONE_MEAL) { - if (bush.getAge() == 3) { - e.setCancelled(true); - return; - } else return; - } - if (!Item.Tags.SICKLES.isTagged(tool)) { - e.setCancelled(true); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_sickle)); - } else { - if (bush.getAge() >= 2) { - int berries = 0; - Location loc = block.getLocation(); - assert loc.getWorld() != null; - int multiplier = 1; - e.setCancelled(true); - int random = new Random().nextInt(5) + 1; + @SuppressWarnings("deprecation") + @EventHandler + private void onHarvest(PlayerInteractEvent e) { + if (e.isCancelled()) return; + if (!settings.BREAK_ONLY_WITH_SICKLE) return; + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_AIR + || e.getAction() == Action.LEFT_CLICK_BLOCK) return; + Player player = e.getPlayer(); + Block block = e.getClickedBlock(); + ItemStack tool = player.getInventory().getItemInMainHand(); + assert block != null; + if (block.getType() == Material.SWEET_BERRY_BUSH) { + Ageable bush = ((Ageable) block.getBlockData()); + if (e.getItem() != null && e.getItem().getType() == Material.BONE_MEAL) { + if (bush.getAge() == 3) { + e.setCancelled(true); + return; + } else return; + } + if (!Items.Tags.SICKLES.isTagged(tool)) { + e.setCancelled(true); + player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_sickle)); + } else { + if (bush.getAge() >= 2) { + int berries = 0; + Location loc = block.getLocation(); + assert loc.getWorld() != null; + int multiplier = 1; + e.setCancelled(true); + int random = new Random().nextInt(5) + 1; - if (ItemManager.compare(tool, Item.FLINT_SICKLE)) { - if (bush.getAge() == 3) { - berries = 1; - } - multiplier = 4; - } else if (ItemManager.compare(tool, Item.STONE_SICKLE)) { - if (bush.getAge() == 2) { - if (random <= 4) - berries = 1; - } else if (bush.getAge() == 3) { - if (random <= 3) - berries = 1; - else - berries = 2; - } - multiplier = 2; - } else if (ItemManager.compare(tool, Item.IRON_SICKLE, Item.DIAMOND_SICKLE)) { - if (bush.getAge() == 2) { - if (random <= 3) - berries = 1; - else - berries = 2; - } else if (bush.getAge() == 3) { - if (random <= 4) - berries = 2; - else - berries = 4; - } - } - if (berries != 0) - loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.SWEET_BERRIES, berries)); + if (Items.FLINT_SICKLE.is(tool)) { + if (bush.getAge() == 3) { + berries = 1; + } + multiplier = 4; + } else if (Items.STONE_SICKLE.is(tool)) { + if (bush.getAge() == 2) { + if (random <= 4) + berries = 1; + } else if (bush.getAge() == 3) { + if (random <= 3) + berries = 1; + else + berries = 2; + } + multiplier = 2; + } else if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { + if (bush.getAge() == 2) { + if (random <= 3) + berries = 1; + else + berries = 2; + } else if (bush.getAge() == 3) { + if (random <= 4) + berries = 2; + else + berries = 4; + } + } + if (berries != 0) + loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.SWEET_BERRIES, berries)); - bush.setAge(1); - block.setBlockData(bush); - int durability = Utils.getDurability(tool) + multiplier; - Utils.setDurability(tool, durability); - player.playSound(loc, Sound.BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES, 1, 1); - if (durability >= tool.getType().getMaxDurability()) { + bush.setAge(1); + block.setBlockData(bush); + int durability = Utils.getDurability(tool) + multiplier; + Utils.setDurability(tool, durability); + player.playSound(loc, Sound.BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES, 1, 1); + if (durability >= tool.getType().getMaxDurability()) { player.getInventory().setItemInMainHand(null); player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); } - } - } - } - } + } + } + } + } - @EventHandler - private void onWaterBreakCrops(BlockPhysicsEvent event) { - if (!settings.BREAK_ONLY_WITH_SICKLE) return; - if (event.getSourceBlock().getType() == Material.WATER) { - Material type = event.getBlock().getType(); - if (Utils.isFarmable(type)) { - if (type == Material.MELON || type == Material.PUMPKIN) return; - event.getBlock().setType(Material.AIR); - } - } - } + @EventHandler + private void onWaterBreakCrops(BlockPhysicsEvent event) { + if (!settings.BREAK_ONLY_WITH_SICKLE) return; + if (event.getSourceBlock().getType() == Material.WATER) { + Material type = event.getBlock().getType(); + if (Utils.isFarmable(type)) { + if (type == Material.MELON || type == Material.PUMPKIN) return; + event.getBlock().setType(Material.AIR); + } + } + } - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.HIGHEST) - private void onTrample(PlayerInteractEvent event) { - if (event.isCancelled()) return; - if (!settings.BREAK_ONLY_WITH_SICKLE) return; - if (event.getAction() == Action.PHYSICAL) { - if (event.getClickedBlock() == null) return; - if (event.getClickedBlock().getType() == Material.FARMLAND) { - Location loc = event.getClickedBlock().getLocation(); - assert loc.getWorld() != null; - loc.getWorld().playEffect(loc, Effect.STEP_SOUND, event.getClickedBlock().getRelative(BlockFace.UP).getType()); - event.getClickedBlock().getRelative(BlockFace.UP).setType(Material.AIR); - } - } - } + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.HIGHEST) + private void onTrample(PlayerInteractEvent event) { + if (event.isCancelled()) return; + if (!settings.BREAK_ONLY_WITH_SICKLE) return; + if (event.getAction() == Action.PHYSICAL) { + if (event.getClickedBlock() == null) return; + if (event.getClickedBlock().getType() == Material.FARMLAND) { + Location loc = event.getClickedBlock().getLocation(); + assert loc.getWorld() != null; + loc.getWorld().playEffect(loc, Effect.STEP_SOUND, event.getClickedBlock().getRelative(BlockFace.UP).getType()); + event.getClickedBlock().getRelative(BlockFace.UP).setType(Material.AIR); + } + } + } } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java index b576454..5b82437 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java @@ -1,6 +1,8 @@ package tk.shanebee.survival.listeners.block; -import org.bukkit.*; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -10,10 +12,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; import java.util.Random; @@ -42,7 +43,7 @@ private void onBlockPlace(BlockPlaceEvent event) { if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { if (config.PLACE_ONLY_WITH_HAMMER) { if (Utils.requiresHammer(block.getType())) { - if (ItemManager.compare(offTool, Item.HAMMER)) { + if (Items.HAMMER.is(offTool)) { Random rand = new Random(); int chance_reduceDur = rand.nextInt(10) + 1; if (chance_reduceDur == 1) { @@ -53,7 +54,7 @@ private void onBlockPlace(BlockPlaceEvent event) { player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); player.getInventory().setItemInOffHand(null); } - } else if (ItemManager.compare(mainTool, Item.HAMMER)) { + } else if (Items.HAMMER.is(mainTool)) { Random rand = new Random(); int chance_reduceDur = rand.nextInt(10) + 1; if (chance_reduceDur == 1) { @@ -74,4 +75,4 @@ private void onBlockPlace(BlockPlaceEvent event) { } } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java b/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java index 24d5d9e..dabd1f2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java @@ -21,7 +21,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.managers.BlockManager; import tk.shanebee.survival.util.Utils; @@ -64,7 +64,7 @@ private void onRelight(PlayerInteractEvent e) { if (block == null || (block.getType() != Material.REDSTONE_TORCH && block.getType() != Material.REDSTONE_WALL_TORCH)) return; if (!torchManager.isNonPersistent(block)) return; - if (tool.getType() != Material.FLINT_AND_STEEL && !ItemManager.compare(tool, Item.FIRESTRIKER)) return; + if (tool.getType() != Material.FLINT_AND_STEEL && !Items.FIRESTRIKER.is(tool)) return; if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; e.setCancelled(true); if (block.getType() == Material.REDSTONE_WALL_TORCH) { @@ -104,7 +104,7 @@ private void onPlaceTorch(BlockPlaceEvent e) { return; } if (block.getType() == Material.TORCH || block.getType() == Material.WALL_TORCH) { - if (!ItemManager.compare(mainHand, Item.PERSISTENT_TORCH)) { + if (!Items.PERSISTENT_TORCH.is(mainHand)) { torchManager.burnoutTorch(block); torchManager.setNonPersistent(block); } @@ -197,7 +197,7 @@ private boolean dropTorch(Block block) { Material mat = block.getType(); if (mat == Material.TORCH || mat == Material.WALL_TORCH) { if (PERSISTENT_TORCHES && !torchManager.isNonPersistent(block)) { - world.dropItemNaturally(loc, Item.PERSISTENT_TORCH.getItem()); + world.dropItemNaturally(loc, Items.PERSISTENT_TORCH.getItemStack()); } else if (DROP_TORCH) { return false; } else { diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java index a438d96..b6d94a4 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java @@ -15,8 +15,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import java.util.Random; @@ -32,7 +31,7 @@ public Campfire(Survival plugin) { @EventHandler private void onPlaceCampfire(BlockPlaceEvent e) { if (e.getBlockPlaced().getType() != Material.CAMPFIRE) return; - if (ItemManager.compare(e.getItemInHand(), Item.CAMPFIRE)) { + if (Items.CAMPFIRE.is(e.getItemInHand())) { Lightable camp = ((Lightable) e.getBlock().getBlockData()); camp.setLit(false); e.getBlock().setBlockData(camp); diff --git a/src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java b/src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java index dd568f8..c0a0dac 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java @@ -1,7 +1,7 @@ package tk.shanebee.survival.listeners.block; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; import org.bukkit.ChatColor; @@ -16,44 +16,45 @@ import tk.shanebee.survival.Survival; public class NoAnvil implements Listener { - - private Lang lang; - - public NoAnvil(Survival plugin) { - this.lang = plugin.getLang(); - } - - @EventHandler - private void onInventoryClick(InventoryClickEvent e) { - Inventory inv = e.getInventory(); - - if (inv instanceof AnvilInventory) { - AnvilInventory anvil = (AnvilInventory) inv; - InventoryView view = e.getView(); - int rawSlot = e.getRawSlot(); - - // compare raw slot to the inventory view to make sure we are in the upper inventory - if (rawSlot == view.convertSlot(rawSlot)) { - // 2 = result slot - if (rawSlot == 2) { - // item in the left slot - ItemStack item = anvil.getContents()[0]; - - if (item != null) { - if (ItemManager.compare(item, Item.VALKYRIES_AXE) - || ItemManager.compare(item, Item.QUARTZ_PICKAXE) || ItemManager.compare(item, Item.OBSIDIAN_MACE) - || ItemManager.compare(item, Item.ENDER_GIANT_BLADE) || ItemManager.compare(item, Item.BLAZE_SWORD) - || ItemManager.compare(item, Item.HATCHET) || ItemManager.compare(item, Item.MATTOCK) - || ItemManager.compare(item, Item.FIRESTRIKER) || ItemManager.compare(item, Item.SHIV) - || ItemManager.compare(item, Item.HAMMER)) { - e.setCancelled(true); - e.getWhoClicked().closeInventory(); - e.getWhoClicked().sendMessage(ChatColor.RED + Utils.getColoredString(lang.no_rename) + item.getItemMeta().getDisplayName() + ChatColor.RED + Utils.getColoredString(lang.period)); - } - } - } - } - } - } - -} \ No newline at end of file + // TODO lets maybe handle this with components?!?! + +// private Lang lang; +// +// public NoAnvil(Survival plugin) { +// this.lang = plugin.getLang(); +// } +// +// @EventHandler +// private void onInventoryClick(InventoryClickEvent e) { +// Inventory inv = e.getInventory(); +// +// if (inv instanceof AnvilInventory) { +// AnvilInventory anvil = (AnvilInventory) inv; +// InventoryView view = e.getView(); +// int rawSlot = e.getRawSlot(); +// +// // compare raw slot to the inventory view to make sure we are in the upper inventory +// if (rawSlot == view.convertSlot(rawSlot)) { +// // 2 = result slot +// if (rawSlot == 2) { +// // item in the left slot +// ItemStack item = anvil.getContents()[0]; +// +// if (item != null) { +// if (ItemManager.compare(item, Items.VALKYRIES_AXE) +// || ItemManager.compare(item, Items.QUARTZ_PICKAXE) || ItemManager.compare(item, Items.OBSIDIAN_MACE) +// || ItemManager.compare(item, Items.ENDER_GIANT_BLADE) || ItemManager.compare(item, Items.BLAZE_SWORD) +// || ItemManager.compare(item, Items.HATCHET) || ItemManager.compare(item, Items.MATTOCK) +// || ItemManager.compare(item, Items.FIRESTRIKER) || ItemManager.compare(item, Items.SHIV) +// || ItemManager.compare(item, Items.HAMMER)) { +// e.setCancelled(true); +// e.getWhoClicked().closeInventory(); +// e.getWhoClicked().sendMessage(ChatColor.RED + Utils.getColoredString(lang.no_rename) + item.getItemMeta().getDisplayName() + ChatColor.RED + Utils.getColoredString(lang.period)); +// } +// } +// } +// } +// } +// } + +} diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/BeeKeeperSuit.java b/src/main/java/tk/shanebee/survival/listeners/entity/BeeKeeperSuit.java index 28b5929..91131eb 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/BeeKeeperSuit.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/BeeKeeperSuit.java @@ -12,8 +12,7 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.inventory.PlayerInventory; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; public class BeeKeeperSuit implements Listener { @@ -22,9 +21,8 @@ public class BeeKeeperSuit implements Listener { private void onSting(EntityDamageByEntityEvent event) { Entity entity = event.getEntity(); Entity damager = event.getDamager(); - if (entity instanceof Player && damager instanceof Bee && !Utils.isCitizensNPC(entity)) { - if (hasBeekeeperSuit((Player) entity)) { - Bee bee = (Bee) damager; + if (entity instanceof Player player && damager instanceof Bee bee && !Utils.isCitizensNPC(player)) { + if (hasBeekeeperSuit(player)) { event.setCancelled(true); bee.setTarget(null); bee.setAnger(0); @@ -35,11 +33,11 @@ private void onSting(EntityDamageByEntityEvent event) { @EventHandler private void onPoison(EntityPotionEffectEvent event) { Entity entity = event.getEntity(); - if (entity instanceof Player && !Utils.isCitizensNPC(entity)) { + if (entity instanceof Player player && !Utils.isCitizensNPC(player)) { if (event.getCause() != Cause.ATTACK) return; if (event.getModifiedType() != PotionEffectType.POISON) return; if (event.getAction() != Action.ADDED) return; - if (hasBeekeeperSuit((Player) entity)) { + if (hasBeekeeperSuit(player)) { event.setCancelled(true); } } @@ -49,8 +47,8 @@ private void onPoison(EntityPotionEffectEvent event) { private void onTarget(EntityTargetLivingEntityEvent event) { Entity target = event.getTarget(); Entity entity = event.getEntity(); - if (target instanceof Player && entity instanceof Bee && !Utils.isCitizensNPC(target)) { - if (hasBeekeeperSuit((Player) target)) { + if (target instanceof Player player && entity instanceof Bee && !Utils.isCitizensNPC(player)) { + if (hasBeekeeperSuit(player)) { event.setCancelled(true); } } @@ -61,8 +59,10 @@ private boolean hasBeekeeperSuit(Player player) { if (inv.getHelmet() == null || inv.getChestplate() == null || inv.getLeggings() == null || inv.getBoots() == null) { return false; } - return ItemManager.compare(inv.getHelmet(), Item.BEEKEEPER_HELMET) && ItemManager.compare(inv.getChestplate(), Item.BEEKEEPER_CHESTPLATE) && - ItemManager.compare(inv.getLeggings(), Item.BEEKEEPER_LEGGINGS) && ItemManager.compare(inv.getBoots(), Item.BEEKEEPER_BOOTS); - } + return Items.BEEKEEPER_HELMET.is(inv.getHelmet()) && + Items.BEEKEEPER_CHESTPLATE.is(inv.getChestplate()) && + Items.BEEKEEPER_LEGGINGS.is(inv.getLeggings()) && + Items.BEEKEEPER_BOOTS.is(inv.getBoots()); + } } diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java index 72b52da..f16b3d5 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java @@ -18,7 +18,7 @@ import org.bukkit.persistence.PersistentDataType; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import java.util.Random; @@ -71,7 +71,7 @@ private void onEggThrown(PlayerEggThrowEvent e) { private ItemStack getEgg() { int ran = maxEggs > 1 ? rand.nextInt(maxEggs) + 1 : 1; - return Item.BREEDING_EGG.getItem(ran); + return Items.BREEDING_EGG.getItemStack(ran); } @SuppressWarnings("ConstantConditions") @@ -85,7 +85,7 @@ private boolean isFromBreeding(Egg egg) { // Old egg method (changed on sept 4/2020) // Will keep for a while incase players have old eggs return container.get(key, PersistentDataType.BYTE) == (byte) 1; - } else if (Item.BREEDING_EGG.compare(itemStack)) { + } else if (Items.BREEDING_EGG.is(itemStack)) { return true; } return false; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java b/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java index 34beed6..d027a5f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java @@ -9,7 +9,7 @@ import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import java.util.List; import java.util.Random; @@ -45,7 +45,7 @@ private void onEntityDeath(EntityDeathEvent event) { private void replaceDrops(List items) { items.removeIf(item -> item.getType() == Material.ROTTEN_FLESH); - items.add(Item.SUSPICIOUS_MEAT.getItem()); + items.add(Items.SUSPICIOUS_MEAT.getItemStack()); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java index 29616c0..b2c6e38 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java @@ -11,7 +11,7 @@ import org.bukkit.potion.PotionType; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import java.util.Random; @@ -44,11 +44,11 @@ private void onPiglinDrop(EntityDropItemEvent event) { if (itemDropMaterial == Material.POTION && THIRST_ENABLED && DROP_WATER) { PotionMeta meta = ((PotionMeta) itemDropStack.getItemMeta()); assert meta != null; - if (meta.getBasePotionData().getType() == PotionType.WATER) { + if (meta.getBasePotionType() == PotionType.WATER) { if (RANDOM.nextFloat() < 0.25f) { - itemDrop.setItemStack(Item.PURIFIED_WATER.getItem()); + itemDrop.setItemStack(Items.PURIFIED_WATER.getItemStack()); } else { - itemDrop.setItemStack(Item.CLEAN_WATER.getItem()); + itemDrop.setItemStack(Items.CLEAN_WATER.getItemStack()); } return; } @@ -59,36 +59,23 @@ private void onPiglinDrop(EntityDropItemEvent event) { // If slow armor is enabled let's always drop custom iron boots if (itemDropMaterial == Material.IRON_BOOTS && SLOW_ARMOR) { - ItemStack boots = Item.IRON_BOOTS.getItem(); + ItemStack boots = Items.IRON_BOOTS.getItemStack(); boots.addEnchantment(Enchantment.SOUL_SPEED, RANDOM.nextInt(3) + 1); itemDrop.setItemStack(boots); return; } // If anything else we have some random drops - ItemStack altItem = null; - switch (itemDropMaterial) { - case LEATHER: - altItem = Item.SUSPICIOUS_MEAT.getItem(); - break; - case NETHER_BRICK: - altItem = Item.COFFEE_BEAN.getItem(RANDOM.nextInt(4) + 1); - break; - case GRAVEL: - altItem = Item.FIRESTRIKER.getItem(); - break; - case SOUL_SAND: - altItem = Item.CAMPFIRE.getItem(); - break; - case POTION: - altItem = Item.MEDIC_KIT.getItem(); - break; - case SPLASH_POTION: - altItem = Item.GRAPPLING_HOOK.getItem(); - break; - case ENCHANTED_BOOK: - altItem = Item.RECURVE_CROSSBOW.getItem(); - } + ItemStack altItem = switch (itemDropMaterial) { + case LEATHER -> Items.SUSPICIOUS_MEAT.getItemStack(); + case NETHER_BRICK -> Items.COFFEE_BEAN.getItemStack(RANDOM.nextInt(4) + 1); + case GRAVEL -> Items.FIRESTRIKER.getItemStack(); + case SOUL_SAND -> Items.CAMPFIRE.getItemStack(); + case POTION -> Items.MEDIC_KIT.getItemStack(); + case SPLASH_POTION -> Items.GRAPPLING_HOOK.getItemStack(); + case ENCHANTED_BOOK -> Items.RECURVE_CROSSBOW.getItemStack(); + default -> null; + }; if (altItem != null && RANDOM.nextFloat() > 0.5f) { itemDrop.setItemStack(altItem); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java b/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java index 87b6570..2f1f7e7 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.listeners.item; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.Tag; import org.bukkit.block.BlockState; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -18,10 +18,13 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + public class BlazeSword implements Listener { @EventHandler @@ -29,7 +32,7 @@ private void onItemClick(PlayerInteractEvent event) { if (event.hasItem()) { Player player = event.getPlayer(); ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (ItemManager.compare(mainItem, Item.BLAZE_SWORD)) { + if (Items.BLAZE_SWORD.is(mainItem)) { if (player.isSneaking()) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java b/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java index ae30709..9fe8ad2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java @@ -14,8 +14,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.material.Cauldron; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; public class CauldronWaterBottle implements Listener { @@ -35,14 +34,14 @@ private void onItemClick(PlayerInteractEvent event) { Block fire = event.getClickedBlock().getRelative(BlockFace.DOWN); event.setCancelled(true); - event.getClickedBlock().getState().setData(new Cauldron()); + event.getClickedBlock().getState().setData(new Cauldron()); // TODO figure you out cauldron.setLevel(cauldron.getLevel() - 1); event.getClickedBlock().setBlockData(cauldron); - ItemStack waterBottle = ItemManager.get(Item.DIRTY_WATER); + ItemStack waterBottle = Items.DIRTY_WATER.getItemStack(); if (fire.getType() == Material.FIRE) { - waterBottle = ItemManager.get(Item.PURIFIED_WATER); + waterBottle = Items.PURIFIED_WATER.getItemStack(); } player.playSound(event.getClickedBlock().getLocation(), Sound.ITEM_BOTTLE_FILL, 1, 1); @@ -63,4 +62,4 @@ private void onItemClick(PlayerInteractEvent event) { } } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Consume.java b/src/main/java/tk/shanebee/survival/listeners/item/Consume.java index ffae81a..b0825bd 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Consume.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Consume.java @@ -3,11 +3,13 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; @@ -17,14 +19,12 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.event.player.PlayerFishEvent; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.events.ThirstLevelChangeEvent; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.managers.ItemManager; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.managers.StatusManager; import tk.shanebee.survival.util.Utils; @@ -58,32 +58,32 @@ private void onConsume(PlayerItemConsumeEvent event) { case POTION: if (config.MECHANICS_THIRST_PURIFY_WATER) { if (checkWaterBottle(item)) { - if (ItemManager.compare(item, Item.DIRTY_WATER)) { + if (Items.DIRTY_WATER.is(item)) { change = config.MECHANICS_THIRST_REP_DIRTY_WATER; Random rand = new Random(); if (rand.nextInt(10) + 1 <= 5) { player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); } - } else if (ItemManager.compare(item, Item.CLEAN_WATER)) { + } else if (Items.CLEAN_WATER.is(item)) { change = config.MECHANICS_THIRST_REP_CLEAN_WATER; Random rand = new Random(); if (rand.nextInt(10) + 1 <= 2) { player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); } - } else if (ItemManager.compare(item, Item.PURIFIED_WATER)) { + } else if (Items.PURIFIED_WATER.is(item)) { change = config.MECHANICS_THIRST_REP_PURE_WATER; - } else if (ItemManager.compare(item, Item.COFFEE)) { + } else if (Items.COFFEE.is(item)) { change = config.MECHANICS_THIRST_REP_COFFEE; - } else if (ItemManager.compare(item, Item.COLD_MILK)) { + } else if (Items.COLD_MILK.is(item)) { change = config.MECHANICS_THIRST_REP_COLD_MILK; - } else if (ItemManager.compare(item, Item.HOT_MILK)) { + } else if (Items.HOT_MILK.is(item)) { change = config.MECHANICS_THIRST_REP_HOT_MILK; player.damage(2); player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 0)); Utils.sendColoredMsg(player, lang.hot_milk_drink); - } else if (ItemManager.compare(item, Item.WATER_BOWL)) { + } else if (Items.WATER_BOWL.is(item)) { event.setCancelled(true); change = handleWaterBowl(player); } else { @@ -94,14 +94,6 @@ private void onConsume(PlayerItemConsumeEvent event) { change = config.MECHANICS_THIRST_REP_WATER; } break; - case BEETROOT_SOUP: //OLD Water Bowl (removed in 3.11.0 - keep for a few versions) - if (ItemManager.compare(event.getPlayer().getInventory().getItemInMainHand(), Item.WATER_BOWL_OLD)) { - event.setCancelled(true); - change = handleWaterBowl(player); - } else { - change = config.MECHANICS_THIRST_REP_BEET_SOUP; // Regular beetroot soup (if player somehow gets one) - } - break; case MILK_BUCKET: change = config.MECHANICS_THIRST_REP_MILK_BUCKET; break; @@ -115,8 +107,8 @@ private void onConsume(PlayerItemConsumeEvent event) { change = config.MECHANICS_THIRST_REP_HONEY_BOTTLE; break; case SUSPICIOUS_STEW: - if (Item.SUSPICIOUS_MEAT.compare(item)) { - // Remove the bowl from the player's hand afterwards + if (Items.SUSPICIOUS_MEAT.is(item)) { + // Remove the bowl from the player's hand afterward BukkitRunnable runnable = new BukkitRunnable() { @Override public void run() { @@ -165,11 +157,11 @@ private void onFish(PlayerFishEvent event) { if (event.isCancelled()) return; if (event.getState() == PlayerFishEvent.State.CAUGHT_FISH) { Entity caught = event.getCaught(); - if (caught instanceof org.bukkit.entity.Item) { - org.bukkit.entity.Item item = ((org.bukkit.entity.Item) caught); + if (caught instanceof Item) { + Item item = ((Item) caught); ItemStack stack = item.getItemStack(); if (stack.getType() == Material.POTION && checkWaterBottle(stack)) { - item.setItemStack(Item.CLEAN_WATER.getItem()); + item.setItemStack(Items.CLEAN_WATER.getItemStack()); } } } @@ -207,15 +199,10 @@ private void onDeath(PlayerDeathEvent event) { private boolean checkWaterBottle(ItemStack bottle) { ItemMeta meta = bottle.getItemMeta(); assert meta != null; - switch (((PotionMeta) meta).getBasePotionData().getType()) { - case WATER: - case MUNDANE: - case THICK: - case AWKWARD: - return true; - default: - return false; - } + return switch (((PotionMeta) meta).getBasePotionType()) { + case WATER, MUNDANE, THICK, AWKWARD -> true; + case null, default -> false; + }; } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java index ab485b3..b832bdb 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java @@ -28,9 +28,8 @@ import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.items.FireStriker; -import tk.shanebee.survival.managers.ItemManager; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.item.items.FireStrikerListen; import tk.shanebee.survival.util.Utils; import java.util.Random; @@ -54,14 +53,14 @@ private void onItemClick(PlayerInteractEvent event) { Material clickedBlockType = clickedBlock.getType(); Material toolType = tool.getType(); - if (ItemManager.compare(tool, Item.FIRESTRIKER)) { + if (Items.FIRESTRIKER.is(tool)) { if (player.isSneaking()) { if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { Random rand = new Random(); player.getLocation().getWorld().playSound(player.getLocation(), Sound.ITEM_SHOVEL_FLATTEN, 1.0F, rand.nextFloat() * 0.4F + 0.8F); event.setCancelled(true); - FireStriker fireStriker = new FireStriker(player, tool.clone()); + FireStrikerListen fireStriker = new FireStrikerListen(player, tool.clone()); fireStriker.open(); tool.setAmount(0); player.updateInventory(); @@ -163,8 +162,8 @@ private boolean ignite(Player igniter, Location loc) { private void onCloseInventory(InventoryCloseEvent event) { if (event.getView().getTitle().equalsIgnoreCase(Utils.getColoredString(lang.firestriker))) { Inventory inv = event.getInventory(); - if (inv.getHolder() instanceof FireStriker) { - ((FireStriker) inv.getHolder()).close(); + if (inv.getHolder() instanceof FireStrikerListen) { + ((FireStrikerListen) inv.getHolder()).close(); } } } @@ -175,7 +174,7 @@ private void onAttack(EntityDamageByEntityEvent event) { if (event.getDamager() instanceof Player && event.getEntity() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); - if (ItemManager.compare(item, Item.FIRESTRIKER)) { + if (Items.FIRESTRIKER.is(item)) { ItemMeta meta = item.getItemMeta(); assert meta != null; ((Damageable) meta).setDamage(((Damageable) meta).getDamage() - 2); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java index 8c34454..5c2715b 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java @@ -9,7 +9,7 @@ import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; @@ -60,7 +60,7 @@ private void onAttack(EntityDamageByEntityEvent event) { Random rand = new Random(); - if (ItemManager.compare(offItem, Item.ENDER_GIANT_BLADE)) { + if (Items.ENDER_GIANT_BLADE.is(offItem)) { if (event.getDamager() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { LivingEntity enemy = (LivingEntity) event.getDamager(); enemy.damage(event.getDamage() * 40 / 100, player); @@ -93,7 +93,7 @@ private void onItemClick(PlayerInteractEvent event) { assert mainItemMeta != null; assert offItemMeta != null; - if (ItemManager.compare(mainItem, Item.ENDER_GIANT_BLADE)) { + if (Items.ENDER_GIANT_BLADE.is(mainItem)) { if (playerData.getStat(Stat.DUAL_WIELD) == 0) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) { Block clickedBlock = event.getClickedBlock(); @@ -137,7 +137,7 @@ else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Acti player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.ender_giant_blade_unable_duel)); } } - } else if (ItemManager.compare(offItem, Item.ENDER_GIANT_BLADE)) { + } else if (Items.ENDER_GIANT_BLADE.is(offItem)) { if (playerData.getStat(Stat.DUAL_WIELD) != 0) { if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java index 57a6cf8..37cb3e1 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java @@ -1,12 +1,5 @@ package tk.shanebee.survival.listeners.item; -import java.util.List; - -import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -17,9 +10,14 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerFishEvent.State; +import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; - import tk.shanebee.survival.Survival; +import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.util.Utils; + +import java.util.List; public class GrapplingHook implements Listener { @@ -39,7 +37,7 @@ private void onPlayerFish(PlayerFishEvent event) { p.getInventory().getItemInOffHand(); if (offHand.getType() == Material.AIR) { - if (ItemManager.compare(mainHand, Item.GRAPPLING_HOOK)) { + if (Items.GRAPPLING_HOOK.is(mainHand)) { if (event.getState() == State.IN_GROUND) { List nearbyEntities = p.getNearbyEntities(50, 50, 50); @@ -108,7 +106,7 @@ private void onPlayerFish(PlayerFishEvent event) { } } else { event.setCancelled(true); - if (ItemManager.compare(mainHand, Item.GRAPPLING_HOOK)) + if (Items.GRAPPLING_HOOK.is(mainHand)) p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.grappling_off_hand)); else p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.fishing_off_hand)); @@ -116,7 +114,7 @@ private void onPlayerFish(PlayerFishEvent event) { } } else { event.setCancelled(true); - if (ItemManager.compare(offHand, Item.GRAPPLING_HOOK)) + if (Items.GRAPPLING_HOOK.is(offHand)) p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.grappling_main_hand)); else p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.fishing_main_hand)); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java index 34506a3..ad039c1 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java @@ -15,8 +15,8 @@ import tk.shanebee.survival.Survival; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; @@ -54,7 +54,7 @@ private void onClickEntity(PlayerInteractEntityEvent event) { PlayerData playerData = playerManager.getPlayerData(player); final ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (ItemManager.compare(mainItem, Item.MEDIC_KIT)) { + if (Items.MEDIC_KIT.is(mainItem)) { if (playerData.getStat(Stat.HEALING) <= 0) { if (!player.isSneaking()) { if (event.getRightClicked() instanceof Player) { @@ -100,7 +100,7 @@ public void run() { player.sendMessage(ChatColor.DARK_GREEN + Utils.getColoredString(lang.healing_complete)); healed.sendMessage(ChatColor.DARK_GREEN + Utils.getColoredString(lang.healing_complete)); - player.getInventory().removeItem(ItemManager.get(Item.MEDIC_KIT)); + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); } } else { playerData.setStat(Stat.HEALING, 0); @@ -109,7 +109,7 @@ public void run() { player.sendMessage(ChatColor.DARK_RED + Utils.getColoredString(lang.healing_interrupted)); healed.sendMessage(ChatColor.DARK_RED + Utils.getColoredString(lang.healing_interrupted)); - player.getInventory().removeItem(ItemManager.get(Item.MEDIC_KIT)); + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); } } }; @@ -128,7 +128,7 @@ private void onSelfClick(PlayerInteractEvent event) { final Player player = event.getPlayer(); PlayerData playerData = playerManager.getPlayerData(player); ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (ItemManager.compare(mainItem, Item.MEDIC_KIT)) { + if (Items.MEDIC_KIT.is(mainItem)) { if (playerData.getStat(Stat.HEALING) <= 0) { if (player.isSneaking()) { playerData.setStat(Stat.HEALING, 1); @@ -138,7 +138,7 @@ private void onSelfClick(PlayerInteractEvent event) { final Runnable task = new Runnable() { public void run() { int times = playerData.getStat(Stat.HEAL_TIMES); - if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.MEDIC_KIT) && playerData.getStat(Stat.HEALING) > 0) { + if (Items.MEDIC_KIT.is(player.getInventory().getItemInMainHand()) && playerData.getStat(Stat.HEALING) > 0) { if (times-- > 0) { Random rand = new Random(); @@ -161,14 +161,14 @@ public void run() { player.sendMessage(ChatColor.DARK_GREEN + Utils.getColoredString(lang.healing_complete)); - player.getInventory().removeItem(ItemManager.get(Item.MEDIC_KIT)); + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); } } else { playerData.setStat(Stat.HEALING, 0); player.sendMessage(ChatColor.DARK_RED + Utils.getColoredString(lang.healing_interrupted)); - player.getInventory().removeItem(ItemManager.get(Item.MEDIC_KIT)); + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); } } }; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java b/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java index a6bfa51..ff3c749 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java @@ -1,22 +1,21 @@ package tk.shanebee.survival.listeners.item; import org.bukkit.Material; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.managers.EffectManager; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.util.Utils; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.managers.EffectManager; +import tk.shanebee.survival.util.Utils; public class ObsidianMaceWeakness implements Listener { @@ -37,7 +36,7 @@ private void onAttack(EntityDamageByEntityEvent event) { ItemStack mainItem = player.getInventory().getItemInMainHand(); LivingEntity enemy = (LivingEntity) event.getEntity(); - if (ItemManager.compare(mainItem, Item.OBSIDIAN_MACE)) { + if (Items.OBSIDIAN_MACE.is(mainItem)) { effectManager.applyObsidianMaceEffects(player, enemy); } } @@ -54,7 +53,7 @@ private void onInteractBlock(PlayerInteractEvent event) { Material clickedBlock = event.getClickedBlock().getType(); - if (ItemManager.compare(tool, Item.OBSIDIAN_MACE)) { + if (Items.OBSIDIAN_MACE.is(tool)) { if (clickedBlock == Material.GRASS_BLOCK || clickedBlock == Material.DIRT) { event.setCancelled(true); } @@ -62,4 +61,4 @@ private void onInteractBlock(PlayerInteractEvent event) { } } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java b/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java index 33e8e7b..afcc467 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java @@ -11,8 +11,8 @@ import org.bukkit.util.Vector; import tk.shanebee.survival.Survival; import tk.shanebee.survival.events.ShootRecurvedBowEvent; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; import java.util.Random; @@ -33,16 +33,16 @@ private void onShoot(EntityShootBowEvent event) { ItemStack mainItem = event.getBow(); assert mainItem != null; - if (ItemManager.compare(mainItem, Item.RECURVE_BOW) || ItemManager.compare(mainItem, Item.RECURVE_CROSSBOW)) { + if (Items.RECURVE_BOW.is(mainItem) || Items.RECURVE_CROSSBOW.is(mainItem)) { Random rand = new Random(); if (event.getForce() >= 1.0F) { final Entity arrow = event.getProjectile(); final Vector velocity = player.getLocation().getDirection().add(new Vector(0, 0.025, 0)).multiply(4); Item item; - if (ItemManager.compare(mainItem, Item.RECURVE_BOW)) { - item = Item.RECURVE_BOW; + if (Items.RECURVE_BOW.is(mainItem)) { + item = Items.RECURVE_BOW; } else { - item = Item.RECURVE_CROSSBOW; + item = Items.RECURVE_CROSSBOW; } // Call new ShootRecurvedBowEvent ShootRecurvedBowEvent shootEvent = new ShootRecurvedBowEvent(player, mainItem, item); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/RepairCrafting.java b/src/main/java/tk/shanebee/survival/listeners/item/RepairCrafting.java index 63505d6..115169f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/RepairCrafting.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/RepairCrafting.java @@ -18,121 +18,122 @@ import java.util.List; public class RepairCrafting implements Listener { - - @EventHandler - private void onCraft(PrepareItemCraftEvent event) { - Recipe recipe = event.getRecipe(); - if (recipe instanceof Keyed && ((Keyed) recipe).getKey().getNamespace().equalsIgnoreCase("survivalplus")) { - // If this is a legit recipe, let's get outta here - return; - } - CraftingInventory inventory = event.getInventory(); - - List items = new ArrayList<>(); - for (ItemStack itemStack : inventory.getMatrix()) { - if (itemStack != null) { - items.add(itemStack); - } - } - - if (items.size() == 2) { - ItemStack iOne = items.get(0); - ItemStack iTwo = items.get(1); - Item itemOne = Item.getFromStack(iOne); - Item itemTwo = Item.getFromStack(iTwo); - if (itemOne != null && itemOne == itemTwo) { - ItemStack result = repair(iOne, iTwo, itemOne); - if (inventory.getType() == InventoryType.CRAFTING || itemOne.getRepairCostMultiplier() >= 0) { - // No repairing in player inventory - // Cost >= 0 signifies it requires an anvil - result = null; - } - // Since we're using a crafting table we're going to reset defaults - // ie: remove enchantments - result = resetItem(result); - inventory.setResult(result); - - } else if ((itemOne != null && itemTwo == null) || (itemOne == null && itemTwo != null)) { - // Prevent repairing custom items with vanilla items - inventory.setResult(null); - - } - } - items.clear(); - } - - @EventHandler - private void onAnvilRepair(PrepareAnvilEvent event) { - AnvilInventory inventory = event.getInventory(); - ItemStack iOne = inventory.getContents()[0]; - ItemStack iTwo = inventory.getContents()[1]; - if (iOne != null && iTwo != null) { - if (iOne.getType() != iTwo.getType()) { - // If two different items, lets get outta here - // ie: enchanting - return; - } - Item itemOne = Item.getFromStack(iOne); - Item itemTwo = Item.getFromStack(iTwo); - // Let's make sure we're joining two of the same item - if (itemOne != null && itemOne == itemTwo) { - ItemStack result = repair(iOne, iTwo, itemOne); - event.setResult(result); - double cost = itemOne.getRepairCostMultiplier(); - if (cost > 0) { - inventory.setRepairCost((int) Math.round(inventory.getRepairCost() * cost)); - } - } else if ((itemOne != null && itemTwo == null) || (itemOne == null && itemTwo != null)) { - // Prevent repairing custom items with vanilla items - event.setResult(null); - } - } - - } - - private ItemStack repair(ItemStack itemStackOne, ItemStack itemStackTwo, Item item) { - double repairPercent = item.getRepairPercent(); - if (repairPercent <= 0) { - return null; - } - - ItemStack result = itemStackOne.clone(); - double max = itemStackOne.getType().getMaxDurability(); - int dura1 = getRemainingDurability(itemStackOne); - int dura2 = getRemainingDurability(itemStackTwo); - int repair = (int) Math.min((dura1 + dura2 + Math.floor(max / 20)) * repairPercent, max); - - ItemMeta meta = result.getItemMeta(); - assert meta != null; - ((Damageable) meta).setDamage((int) (max - repair)); - result.setItemMeta(meta); - return result; - } - - private ItemStack resetItem(ItemStack itemStack) { - Item item = Item.getFromStack(itemStack); - - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - int damage = ((Damageable) itemMeta).getDamage(); - - assert item != null; - ItemStack newItemStack = item.getItem(); - ItemMeta newItemMeta = newItemStack.getItemMeta(); - assert newItemMeta != null; - ((Damageable) newItemMeta).setDamage(damage); - newItemStack.setItemMeta(newItemMeta); - - return newItemStack; - } - - private int getRemainingDurability(ItemStack itemStack) { - ItemMeta meta = itemStack.getItemMeta(); - - if (meta instanceof Damageable) { - return itemStack.getType().getMaxDurability() - ((Damageable) meta).getDamage(); - } - return 0; - } + // TODO not sure we need this anymore?!?! + +// @EventHandler +// private void onCraft(PrepareItemCraftEvent event) { +// Recipe recipe = event.getRecipe(); +// if (recipe instanceof Keyed && ((Keyed) recipe).getKey().getNamespace().equalsIgnoreCase("survivalplus")) { +// // If this is a legit recipe, let's get outta here +// return; +// } +// CraftingInventory inventory = event.getInventory(); +// +// List items = new ArrayList<>(); +// for (ItemStack itemStack : inventory.getMatrix()) { +// if (itemStack != null) { +// items.add(itemStack); +// } +// } +// +// if (items.size() == 2) { +// ItemStack iOne = items.get(0); +// ItemStack iTwo = items.get(1); +// Item itemOne = Item.getFromStack(iOne); +// Item itemTwo = Item.getFromStack(iTwo); +// if (itemOne != null && itemOne == itemTwo) { +// ItemStack result = repair(iOne, iTwo, itemOne); +// if (inventory.getType() == InventoryType.CRAFTING || itemOne.getRepairCostMultiplier() >= 0) { +// // No repairing in player inventory +// // Cost >= 0 signifies it requires an anvil +// result = null; +// } +// // Since we're using a crafting table we're going to reset defaults +// // ie: remove enchantments +// result = resetItem(result); +// inventory.setResult(result); +// +// } else if ((itemOne != null && itemTwo == null) || (itemOne == null && itemTwo != null)) { +// // Prevent repairing custom items with vanilla items +// inventory.setResult(null); +// +// } +// } +// items.clear(); +// } +// +// @EventHandler +// private void onAnvilRepair(PrepareAnvilEvent event) { +// AnvilInventory inventory = event.getInventory(); +// ItemStack iOne = inventory.getContents()[0]; +// ItemStack iTwo = inventory.getContents()[1]; +// if (iOne != null && iTwo != null) { +// if (iOne.getType() != iTwo.getType()) { +// // If two different items, lets get outta here +// // ie: enchanting +// return; +// } +// Item itemOne = Item.getFromStack(iOne); +// Item itemTwo = Item.getFromStack(iTwo); +// // Let's make sure we're joining two of the same item +// if (itemOne != null && itemOne == itemTwo) { +// ItemStack result = repair(iOne, iTwo, itemOne); +// event.setResult(result); +// double cost = itemOne.getRepairCostMultiplier(); +// if (cost > 0) { +// inventory.setRepairCost((int) Math.round(inventory.getRepairCost() * cost)); +// } +// } else if ((itemOne != null && itemTwo == null) || (itemOne == null && itemTwo != null)) { +// // Prevent repairing custom items with vanilla items +// event.setResult(null); +// } +// } +// +// } +// +// private ItemStack repair(ItemStack itemStackOne, ItemStack itemStackTwo, Item item) { +// double repairPercent = item.getRepairPercent(); +// if (repairPercent <= 0) { +// return null; +// } +// +// ItemStack result = itemStackOne.clone(); +// double max = itemStackOne.getType().getMaxDurability(); +// int dura1 = getRemainingDurability(itemStackOne); +// int dura2 = getRemainingDurability(itemStackTwo); +// int repair = (int) Math.min((dura1 + dura2 + Math.floor(max / 20)) * repairPercent, max); +// +// ItemMeta meta = result.getItemMeta(); +// assert meta != null; +// ((Damageable) meta).setDamage((int) (max - repair)); +// result.setItemMeta(meta); +// return result; +// } +// +// private ItemStack resetItem(ItemStack itemStack) { +// Item item = Item.getFromStack(itemStack); +// +// ItemMeta itemMeta = itemStack.getItemMeta(); +// assert itemMeta != null; +// int damage = ((Damageable) itemMeta).getDamage(); +// +// assert item != null; +// ItemStack newItemStack = item.getItem(); +// ItemMeta newItemMeta = newItemStack.getItemMeta(); +// assert newItemMeta != null; +// ((Damageable) newItemMeta).setDamage(damage); +// newItemStack.setItemMeta(newItemMeta); +// +// return newItemStack; +// } +// +// private int getRemainingDurability(ItemStack itemStack) { +// ItemMeta meta = itemStack.getItemMeta(); +// +// if (meta instanceof Damageable) { +// return itemStack.getType().getMaxDurability() - ((Damageable) meta).getDamage(); +// } +// return 0; +// } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java index 9dc9143..b8aaf21 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java @@ -17,8 +17,8 @@ import org.bukkit.potion.PotionEffectType; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.util.Utils; import java.util.Random; @@ -43,7 +43,7 @@ private void onAttack(EntityDamageByEntityEvent event) { Random rand = new Random(); - if (ItemManager.compare(mainItem, Item.SHIV)) { + if (Items.SHIV.is(mainItem)) { ItemMeta mainItemMeta = mainItem.getItemMeta(); enemy.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 80, 0, false)); assert mainItemMeta != null; @@ -53,7 +53,7 @@ private void onAttack(EntityDamageByEntityEvent event) { } } - if (ItemManager.compare(offItem, Item.SHIV)) { + if (Items.SHIV.is(offItem)) { int chance_poison = rand.nextInt(4) + 1; switch (chance_poison) { case 1: @@ -81,7 +81,7 @@ private void onInteractBlock(PlayerInteractEvent event) { ItemStack tool = event.getItem(); if (event.getClickedBlock() == null || tool == null) return; - if (config.SURVIVAL_ENABLED && ItemManager.compare(tool, Item.SHIV)) { + if (config.SURVIVAL_ENABLED && Items.SHIV.is(tool)) { switch (event.getClickedBlock().getType()) { case DIRT: case GRASS_BLOCK: diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java index 601aa84..5ee2304 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java @@ -6,7 +6,7 @@ import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; import org.bukkit.*; @@ -43,7 +43,7 @@ private void onItemClick(PlayerInteractEvent event) { ItemMeta mainItemMeta = mainItem.getItemMeta(); assert mainItemMeta != null; - if (ItemManager.compare(mainItem, Item.VALKYRIES_AXE)) { + if (Items.VALKYRIES_AXE.is(mainItem)) { if (playerData.getStat(Stat.DUAL_WIELD) == 0) { if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_AIR) { if (playerData.getStat(Stat.SPIN) == 0) { @@ -96,7 +96,7 @@ private void onAttack(EntityDamageByEntityEvent event) { assert mainItemMeta != null; if (playerData.getStat(Stat.DUAL_WIELD) == 0) { - if (ItemManager.compare(mainItem, Item.VALKYRIES_AXE)) { + if (Items.VALKYRIES_AXE.is(mainItem)) { if (playerData.getStat(Stat.SPIN) == 0) { if (player.getFoodLevel() > 6) { Random rand = new Random(); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java index d1132d8..cfe359d 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java @@ -11,16 +11,14 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.CraftItemEvent; -import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.CraftingInventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionType; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.item.Items; import java.util.Objects; @@ -68,16 +66,16 @@ private void onFillWaterBottle(PlayerInteractEvent e) { if (isWaterBlock(targetBlock)) { e.setCancelled(true); if (item.getAmount() > 1) { - if (player.getInventory().addItem(ItemManager.get(Item.DIRTY_WATER)).size() > 0) { - player.getWorld().dropItem(player.getLocation(), Item.DIRTY_WATER.getItem()); + if (!player.getInventory().addItem(Items.DIRTY_WATER.getItemStack()).isEmpty()) { + player.getWorld().dropItem(player.getLocation(), Items.DIRTY_WATER.getItemStack()); } if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) item.setAmount(item.getAmount() - 1); } else { if (player.getInventory().getItemInMainHand().getType() == item.getType()) - player.getInventory().setItemInMainHand(ItemManager.get(Item.DIRTY_WATER)); + player.getInventory().setItemInMainHand(Items.DIRTY_WATER.getItemStack()); else if (player.getInventory().getItemInOffHand().getType() == item.getType()) - player.getInventory().setItemInOffHand(ItemManager.get(Item.DIRTY_WATER)); + player.getInventory().setItemInOffHand(Items.DIRTY_WATER.getItemStack()); } } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java index 9fb632f..20e6590 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java @@ -15,8 +15,7 @@ import org.bukkit.inventory.Recipe; import tk.shanebee.survival.Survival; import tk.shanebee.survival.events.WaterBowlFillEvent; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.managers.ItemManager; +import tk.shanebee.survival.item.Items; public class WaterBowl implements Listener { @@ -34,7 +33,7 @@ public WaterBowl(Survival plugin) { private void onConsume(PlayerItemConsumeEvent event) { if (!THIRST_ENABLED) { if (event.isCancelled()) return; - if (ItemManager.compare(event.getItem(), Item.WATER_BOWL)) { + if (Items.WATER_BOWL.is(event.getItem())) { event.setCancelled(true); } } @@ -55,7 +54,7 @@ private void onDrop(ItemSpawnEvent event) { int amount = itemDrop.getItemStack().getAmount(); itemDrop.remove(); for (int i = 0; i < amount; i++) { - itemDrop.getWorld().dropItem(itemLocation, Item.WATER_BOWL.getItem()); + itemDrop.getWorld().dropItem(itemLocation, Items.WATER_BOWL.getItemStack()); } } }; @@ -73,7 +72,7 @@ private void onCraft(PrepareItemCraftEvent event) { if (key.equalsIgnoreCase("glass_bottle")) { CraftingInventory inventory = event.getInventory(); for (ItemStack itemStack : inventory.getMatrix()) { - if (itemStack != null && Item.WATER_BOWL.compare(itemStack)) { + if (itemStack != null && Items.WATER_BOWL.is(itemStack)) { inventory.setResult(null); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java index 65bc3c3..6ff4010 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java @@ -17,7 +17,7 @@ import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.events.EnergyLevelChangeEvent; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.util.Utils; @@ -57,7 +57,7 @@ private void onDrinkCoffee(PlayerItemConsumeEvent e) { Player player = e.getPlayer(); PlayerData playerData = playerManager.getPlayerData(player); - if (ItemManager.compare(item, Item.COFFEE)) { + if (Items.COFFEE.is(item)) { EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, 20.0 - playerData.getEnergy(), 20.0); Bukkit.getPluginManager().callEvent(energyEvent); if (energyEvent.isCancelled()) return; @@ -68,7 +68,7 @@ private void onDrinkCoffee(PlayerItemConsumeEvent e) { // Removes empty water bottles from crafting grid when brewing coffee @EventHandler private void onCraftCoffee(CraftItemEvent e) { - if (ItemManager.compare(e.getRecipe().getResult(), Item.COFFEE)) { + if (Items.COFFEE.is(e.getRecipe().getResult())) { Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> e.getInventory().remove(Material.GLASS_BOTTLE), 2); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java b/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java index 7722bbb..2d51d14 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java @@ -9,8 +9,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.managers.ItemManager; @SuppressWarnings("deprecation") public class InventoryUpdate implements Listener { @@ -41,12 +42,12 @@ private void itemCheck(Inventory inv) { private void itemUpdate(Inventory inv, int slot, ItemStack oldItem, Item newItem) { assert oldItem.getItemMeta() != null; int damage = ((Damageable) oldItem.getItemMeta()).getDamage(); - ItemStack item = ItemManager.get(newItem); - ItemMeta meta = item.getItemMeta(); + ItemStack itemStack = newItem.getItemStack(); + ItemMeta meta = itemStack.getItemMeta(); assert meta != null; ((Damageable) meta).setDamage(damage); - item.setItemMeta(meta); - inv.setItem(slot, item); + itemStack.setItemMeta(meta); + inv.setItem(slot, itemStack); } private boolean needsUpdate(Inventory inv) { diff --git a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java index 4116279..7286631 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java @@ -14,7 +14,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.managers.RecipeManager.Recipes; @@ -101,7 +101,7 @@ private void onPickupItems(EntityPickupItemEvent e) { player.discoverRecipes(Recipes.CLAY.getKeys()); } else if (item == Material.EGG) { player.discoverRecipes(Recipes.COOKIE.getKeys()); - } else if (ItemManager.compare(e.getItem().getItemStack(), Item.WATER_BOWL)) { + } else if (Items.WATER_BOWL.is(e.getItem().getItemStack())) { player.discoverRecipes(Recipes.BOWL.getKeys()); } else if (item == Material.VINE) { player.discoverRecipes(Recipes.SLIMEBALL.getKeys()); @@ -167,7 +167,7 @@ private void onCraft(CraftItemEvent e) { if (!(e.getWhoClicked() instanceof Player)) return; Player player = ((Player) e.getWhoClicked()); ItemStack result = e.getRecipe().getResult(); - if (ItemManager.compare(result, Item.FIRESTRIKER)) { + if (Items.FIRESTRIKER.is(result)) { player.discoverRecipes(Recipes.TORCH.getKeys()); player.discoverRecipes(Recipes.FURNACE.getKeys()); } else if (result.getType() == Material.FURNACE) { diff --git a/src/main/java/tk/shanebee/survival/managers/ItemManager.java b/src/main/java/tk/shanebee/survival/managers/ItemManager.java index 46aa07d..2dbd70b 100644 --- a/src/main/java/tk/shanebee/survival/managers/ItemManager.java +++ b/src/main/java/tk/shanebee/survival/managers/ItemManager.java @@ -1,37 +1,12 @@ package tk.shanebee.survival.managers; -import org.bukkit.ChatColor; -import org.bukkit.Color; -import org.bukkit.Material; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.type.Campfire; import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BlockDataMeta; import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.inventory.meta.SuspiciousStewMeta; -import org.bukkit.potion.PotionData; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.potion.PotionType; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.util.Utils; +import tk.shanebee.survival.item.Items; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; import java.util.Map; -import java.util.Random; -import java.util.UUID; /** * Manager for custom SurvivalPlus items @@ -39,891 +14,14 @@ @SuppressWarnings({"ConstantConditions", "removal"}) public class ItemManager { - private static final Lang lang = Survival.getInstance().getLang(); - - /** - * Get a custom SurvivalPlus item - * - * @param item The item you would like to get - * @return An ItemStack from a custom item enum - */ - public static ItemStack get(Item item) { - if (item == Item.HATCHET) { - ItemStack i_hatchet = new ItemStack(Item.HATCHET.getMaterialType(), 1); - ItemMeta hatchetMeta = i_hatchet.getItemMeta(); - hatchetMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.hatchet)); - hatchetMeta.setCustomModelData(Item.HATCHET.getModelData()); - i_hatchet.setItemMeta(hatchetMeta); - return i_hatchet; - } else if (item == Item.MATTOCK) { - ItemStack i_mattock = new ItemStack(Item.MATTOCK.getMaterialType(), 1); - ItemMeta mattockMeta = i_mattock.getItemMeta(); - mattockMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.mattock)); - mattockMeta.setCustomModelData(Item.MATTOCK.getModelData()); - i_mattock.setItemMeta(mattockMeta); - return i_mattock; - } else if (item == Item.SHIV) { - ItemStack i_shiv = new ItemStack(Item.SHIV.getMaterialType(), 1); - ItemMeta i_shivMeta = i_shiv.getItemMeta(); - i_shivMeta.setCustomModelData(Item.SHIV.getModelData()); - - int shiv_dmg = 4; - float shiv_spd = 1.8f; - - AttributeModifier i_shivDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c56"), - "generic.attackDamage", shiv_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_shivMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_shivDamage); - - AttributeModifier i_shivSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c57"), - "generic.attackSpeed", shiv_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_shivMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_shivSpeed); - - i_shivMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - - i_shivMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.shiv)); - i_shivMeta.setLore(Arrays.asList( - ChatColor.RESET + Utils.getColoredString(lang.poisoned_enemy), - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_main_hand), - ChatColor.DARK_GREEN + " " + shiv_spd + " " + Utils.getColoredString(lang.attack_speed), - ChatColor.DARK_GREEN + " " + shiv_dmg + " " + Utils.getColoredString(lang.attack_damage), - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_off_hand), - ChatColor.GRAY + " " + Utils.getColoredString(lang.poisoned_retain), - ChatColor.GRAY + " " + Utils.getColoredString(lang.reduce_50) - ) - ); - i_shiv.setItemMeta(i_shivMeta); - return i_shiv; - } else if (item == Item.HAMMER) { - ItemStack i_hammer = new ItemStack(Item.HAMMER.getMaterialType(), 1); - ItemMeta hammerMeta = i_hammer.getItemMeta(); - hammerMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.hammer)); - hammerMeta.setCustomModelData(Item.HAMMER.getModelData()); - i_hammer.setItemMeta(hammerMeta); - return i_hammer; - } else if (item == Item.VALKYRIES_AXE) { - ItemStack i_gAxe = new ItemStack(Item.VALKYRIES_AXE.getMaterialType(), 1); - ItemMeta i_gAxeMeta = i_gAxe.getItemMeta(); - i_gAxeMeta.setCustomModelData(Item.VALKYRIES_AXE.getModelData()); - - int gAxe_spd = 1; - int gAxe_dmg = 8; - - AttributeModifier i_gAxeSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c58"), - "generic.attackSpeed", gAxe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gAxeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gAxeSpeed); - - i_gAxeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - - i_gAxeMeta.setDisplayName(ChatColor.RESET + "" + Utils.getColoredString(lang.valkyrie_axe)); - i_gAxeMeta.setLore(Arrays.asList( - ChatColor.RESET + Utils.getColoredString(lang.valkyrie_axe_unable_dual), - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_main_hand), - ChatColor.DARK_GREEN + " " + gAxe_spd + " " + Utils.getColoredString(lang.attack_speed), - ChatColor.DARK_GREEN + " " + gAxe_dmg + " " + Utils.getColoredString(lang.attack_damage), - ChatColor.RESET + Utils.getColoredString(lang.valkyrie_axe_spin), - ChatColor.RESET + " " + Utils.getColoredString(lang.valkyrie_axe_cooldown), - ChatColor.RESET + " " + Utils.getColoredString(lang.decrease_hunger_value) - ) - ); - i_gAxeMeta.addEnchant(Enchantment.UNBREAKING, 5, true); - i_gAxe.setItemMeta(i_gAxeMeta); - return i_gAxe; - } else if (item == Item.QUARTZ_PICKAXE) { - ItemStack i_gPickaxe = new ItemStack(Item.QUARTZ_PICKAXE.getMaterialType(), 1); - ItemMeta i_gPickaxeMeta = i_gPickaxe.getItemMeta(); - i_gPickaxeMeta.setCustomModelData(Item.QUARTZ_PICKAXE.getModelData()); - - int gPickaxe_dmg = 5; - float gPickaxe_spd = 0.8f; - - AttributeModifier i_gPickDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c59"), - "generic.attackDamage", gPickaxe_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gPickaxeMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gPickDamage); - - AttributeModifier i_gPickSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c60"), - "generic.attackSpeed", gPickaxe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gPickaxeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gPickSpeed); - - i_gPickaxeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - - i_gPickaxeMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.quartz_breaker)); - i_gPickaxeMeta.setLore(Arrays.asList( - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_main_hand), - ChatColor.DARK_GREEN + " " + gPickaxe_spd + " " + Utils.getColoredString(lang.attack_speed), - ChatColor.DARK_GREEN + " " + gPickaxe_dmg + " " + Utils.getColoredString(lang.attack_damage), - ChatColor.GRAY + " " + Utils.getColoredString(lang.haste) - ) - ); - i_gPickaxeMeta.addEnchant(Enchantment.SILK_TOUCH, 1, false); - i_gPickaxeMeta.addEnchant(Enchantment.MENDING, 1, false); - i_gPickaxeMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); - i_gPickaxe.setItemMeta(i_gPickaxeMeta); - return i_gPickaxe; - } else if (item == Item.OBSIDIAN_MACE) { - ItemStack i_gSpade = new ItemStack(Item.OBSIDIAN_MACE.getMaterialType(), 1); - ItemMeta i_gSpadeMeta = i_gSpade.getItemMeta(); - i_gSpadeMeta.setCustomModelData(Item.OBSIDIAN_MACE.getModelData()); - - int gSpade_dmg = 4; - float gSpade_spd = 0.8f; - float gSpade_knockbackPercent = 0.5f; - - AttributeModifier i_gSpadeDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c61"), - "generic.attackDamage", gSpade_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSpadeMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gSpadeDamage); - - AttributeModifier i_gSpadeSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c62"), - "generic.attackSpeed", gSpade_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSpadeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gSpadeSpeed); - - AttributeModifier i_gSpadeKnock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c63"), - "generic.knockbackResistance", gSpade_knockbackPercent, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HAND); - i_gSpadeMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, i_gSpadeKnock); - - i_gSpadeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - - i_gSpadeMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.obsidian_mace)); - i_gSpadeMeta.setLore(Arrays.asList( - ChatColor.RESET + Utils.getColoredString(lang.cripple_hit), - ChatColor.RESET + Utils.getColoredString(lang.drain_hit), - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_main_hand), - ChatColor.DARK_GREEN + " " + gSpade_spd + " " + Utils.getColoredString(lang.attack_speed), - ChatColor.DARK_GREEN + " " + gSpade_dmg + " " + Utils.getColoredString(lang.attack_damage), - ChatColor.RESET + " " + Utils.getColoredString(lang.exhausted_slow), - ChatColor.RESET + " " + Utils.getColoredString(lang.expire_disarm), - ChatColor.RESET + " " + Utils.getColoredString(lang.knockback_resistance) - ) - ); - i_gSpadeMeta.addEnchant(Enchantment.KNOCKBACK, 3, true); - i_gSpadeMeta.addEnchant(Enchantment.UNBREAKING, 5, true); - i_gSpadeMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); - i_gSpade.setItemMeta(i_gSpadeMeta); - return i_gSpade; - } else if (item == Item.ENDER_GIANT_BLADE) { - ItemStack i_gHoe = new ItemStack(Item.ENDER_GIANT_BLADE.getMaterialType(), 1); - ItemMeta i_gHoeMeta = i_gHoe.getItemMeta(); - i_gHoeMeta.setCustomModelData(Item.ENDER_GIANT_BLADE.getModelData()); - - int gHoe_dmg = 8; - int gHoe_spd = 1; - float gHoe_move = -0.5f; - - AttributeModifier i_gHoeDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c64"), - "generic.attackDamage", gHoe_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gHoeMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gHoeDamage); - - AttributeModifier i_gHoeSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c65"), - "generic.attackSpeed", gHoe_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gHoeMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gHoeSpeed); - - AttributeModifier i_gHoeMove = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c66"), - "generic.movementSpeed", gHoe_move, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.OFF_HAND); - i_gHoeMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_gHoeMove); - - i_gHoeMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - - i_gHoeMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.ender_giant_blade)); - i_gHoeMeta.setLore(Arrays.asList( - ChatColor.RESET + Utils.getColoredString(lang.ender_giant_blade_unable_duel), - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_main_hand), - ChatColor.DARK_GREEN + " " + gHoe_spd + " " + Utils.getColoredString(lang.attack_speed), - ChatColor.DARK_GREEN + " " + gHoe_dmg + " " + Utils.getColoredString(lang.attack_damage), - ChatColor.GRAY + " " + Utils.getColoredString(lang.right_click_sprinting), - ChatColor.RESET + " " + Utils.getColoredString(lang.ender_giant_blade_charge), - ChatColor.RESET + " " + Utils.getColoredString(lang.ender_giant_blade_cooldown), - ChatColor.RESET + " " + Utils.getColoredString(lang.decrease_hunger_value), - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_off_hand), - ChatColor.RESET + " " + Utils.getColoredString(lang.half_shield_resistance), - ChatColor.RESET + " " + Utils.getColoredString(lang.reflecting_coming) - ) - ); - i_gHoeMeta.addEnchant(Enchantment.UNBREAKING, 5, true); - i_gHoe.setItemMeta(i_gHoeMeta); - return i_gHoe; - } else if (item == Item.BLAZE_SWORD) { - ItemStack i_gSword = new ItemStack(Item.BLAZE_SWORD.getMaterialType(), 1); - ItemMeta i_gSwordMeta = i_gSword.getItemMeta(); - i_gSwordMeta.setCustomModelData(Item.BLAZE_SWORD.getModelData()); - - int gSword_dmg = 6; - float gSword_spd = 1.6f; - int gSword_health = -6; - - AttributeModifier i_gSwordDamage = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c67"), - "generic.attackDamage", gSword_dmg - 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSwordMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gSwordDamage); - - AttributeModifier i_gSwordSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c68"), - "generic.attackSpeed", gSword_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSwordMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gSwordSpeed); - - AttributeModifier i_gSwordHealth = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c69"), - "generic.maxHealth", gSword_health, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - i_gSwordMeta.addAttributeModifier(Attribute.MAX_HEALTH, i_gSwordHealth); - - i_gSwordMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - - i_gSwordMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.blaze_sword)); - i_gSwordMeta.setLore(Arrays.asList( - "", - ChatColor.GRAY + Utils.getColoredString(lang.in_main_hand), - ChatColor.DARK_GREEN + " " + gSword_spd + " " + Utils.getColoredString(lang.attack_speed), - ChatColor.DARK_GREEN + " " + gSword_dmg + " " + Utils.getColoredString(lang.attack_damage), - ChatColor.RESET + " " + Utils.getColoredString(lang.blaze_sword_fire_resistance), - ChatColor.RESET + " " + Utils.getColoredString(lang.blaze_sword_fiery), - "", - ChatColor.GRAY + Utils.getColoredString(lang.right_click_sneaking), - ChatColor.RESET + " " + Utils.getColoredString(lang.blaze_sword_spread_fire), - ChatColor.RESET + " " + Utils.getColoredString(lang.blaze_sword_cost) - ) - ); - i_gSwordMeta.addEnchant(Enchantment.FIRE_ASPECT, 2, true); - i_gSwordMeta.addEnchant(Enchantment.UNBREAKING, 3, false); - i_gSword.setItemMeta(i_gSwordMeta); - return i_gSword; - } else if (item == Item.WORKBENCH) { - ItemStack workbench = new ItemStack(Item.WORKBENCH.getMaterialType(), 1); - ItemMeta workbenchMeta = workbench.getItemMeta(); - workbenchMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.workbench)); - workbench.setItemMeta(workbenchMeta); - return workbench; - } else if (item == Item.FIRESTRIKER) { - ItemStack i_firestriker = new ItemStack(Item.FIRESTRIKER.getMaterialType(), 1); - ItemMeta i_firestrikerMeta = i_firestriker.getItemMeta(); - i_firestrikerMeta.setCustomModelData(Item.FIRESTRIKER.getModelData()); - - float firestriker_spd = 4f; - - AttributeModifier i_firestrikerSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c55"), - "generic.attackSpeed", - firestriker_spd - 4, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - - i_firestrikerMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_firestrikerSpeed); - i_firestrikerMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - i_firestrikerMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.firestriker)); - String lore = Utils.getColoredString(lang.firestriker_lore); - i_firestrikerMeta.setLore(Arrays.asList(lore.split("\\|\\|"))); - i_firestriker.setItemMeta(i_firestrikerMeta); - return i_firestriker; - } else if (item == Item.FERMENTED_SKIN) { - ItemStack i_fermentedSkin = new ItemStack(Item.FERMENTED_SKIN.getMaterialType(), 1); - ItemMeta fermentedSkinMeta = i_fermentedSkin.getItemMeta(); - fermentedSkinMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.fermented_skin)); - i_fermentedSkin.setItemMeta(fermentedSkinMeta); - return i_fermentedSkin; - } else if (item == Item.MEDIC_KIT) { - ItemStack i_medicKit = new ItemStack(Item.MEDIC_KIT.getMaterialType(), 1); - ItemMeta medicKitMeta = i_medicKit.getItemMeta(); - medicKitMeta.setCustomModelData(Item.MEDIC_KIT.getModelData()); - medicKitMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.medical_kit)); - i_medicKit.setItemMeta(medicKitMeta); - return i_medicKit; - } else if (item == Item.REINFORCED_LEATHER_BOOTS) { - ItemStack i_leatherBoots = new ItemStack(Item.REINFORCED_LEATHER_BOOTS.getMaterialType(), 1); - ItemMeta i_leatherBootsMeta = i_leatherBoots.getItemMeta(); - i_leatherBootsMeta.setCustomModelData(Item.REINFORCED_LEATHER_BOOTS.getModelData()); - - AttributeModifier i_leatherBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c70"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_leatherBootsMeta.addAttributeModifier(Attribute.ARMOR, i_leatherBootsArmor); - - i_leatherBootsMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.reinforced_boots)); - - i_leatherBoots.setItemMeta(i_leatherBootsMeta); - return i_leatherBoots; - } else if (item == Item.REINFORCED_LEATHER_TUNIC) { - ItemStack i_leatherChestplate = new ItemStack(Item.REINFORCED_LEATHER_TUNIC.getMaterialType(), 1); - - ItemMeta leatherChestplateMeta = i_leatherChestplate.getItemMeta(); - leatherChestplateMeta.setCustomModelData(Item.REINFORCED_LEATHER_TUNIC.getModelData()); - leatherChestplateMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.reinforced_tunic)); - - i_leatherChestplate.setItemMeta(leatherChestplateMeta); - return i_leatherChestplate; - } else if (item == Item.REINFORCED_LEATHER_TROUSERS) { - ItemStack i_leatherLeggings = new ItemStack(Item.REINFORCED_LEATHER_TROUSERS.getMaterialType(), 1); - - ItemMeta leatherLeggingsMeta = i_leatherLeggings.getItemMeta(); - leatherLeggingsMeta.setCustomModelData(Item.REINFORCED_LEATHER_TROUSERS.getModelData()); - leatherLeggingsMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.reinforced_pants)); - - i_leatherLeggings.setItemMeta(leatherLeggingsMeta); - return i_leatherLeggings; - } else if (item == Item.REINFORCED_LEATHER_HELMET) { - //Reinforced Leather Helmet - ItemStack i_leatherHelmet = new ItemStack(Item.REINFORCED_LEATHER_HELMET.getMaterialType(), 1); - - ItemMeta leatherHelmetMeta = i_leatherHelmet.getItemMeta(); - leatherHelmetMeta.setCustomModelData(Item.REINFORCED_LEATHER_HELMET.getModelData()); - leatherHelmetMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.reinforced_hat)); - - i_leatherHelmet.setItemMeta(leatherHelmetMeta); - return i_leatherHelmet; - } else if (item == Item.GOLDEN_SABATONS) { - ItemStack i_goldBoots = new ItemStack(Item.GOLDEN_SABATONS.getMaterialType(), 1); - ItemMeta i_goldBootsMeta = i_goldBoots.getItemMeta(); - - AttributeModifier i_goldBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c71"), - "generic.armor", 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_goldBootsMeta.addAttributeModifier(Attribute.ARMOR, i_goldBootsArmor); - - AttributeModifier i_goldBootsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c71"), - "generic.movementSpeed", -0.0125, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); - i_goldBootsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldBootsSpeed); - - i_goldBootsMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_sabatons)); - i_goldBootsMeta.addEnchant(Enchantment.FEATHER_FALLING, 4, true); - - i_goldBoots.setItemMeta(i_goldBootsMeta); - return i_goldBoots; - } else if (item == Item.GOLDEN_GUARD) { - ItemStack i_goldChestplate = new ItemStack(Item.GOLDEN_GUARD.getMaterialType(), 1); - ItemMeta i_goldChestplateMeta = i_goldChestplate.getItemMeta(); - - AttributeModifier i_goldChestArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c72"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); - i_goldChestplateMeta.addAttributeModifier(Attribute.ARMOR, i_goldChestArmor); - - AttributeModifier i_goldChestSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c72"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); - i_goldChestplateMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldChestSpeed); - - i_goldChestplateMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_guard)); - i_goldChestplateMeta.addEnchant(Enchantment.BLAST_PROTECTION, 4, true); - - i_goldChestplate.setItemMeta(i_goldChestplateMeta); - return i_goldChestplate; - } else if (item == Item.GOLDEN_GREAVES) { - ItemStack i_goldLeggings = new ItemStack(Item.GOLDEN_GREAVES.getMaterialType(), 1); - ItemMeta i_goldLeggingsMeta = i_goldLeggings.getItemMeta(); - - AttributeModifier i_goldLeggingsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c73"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); - i_goldLeggingsMeta.addAttributeModifier(Attribute.ARMOR, i_goldLeggingsArmor); - - AttributeModifier i_goldLeggingsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c73"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); - i_goldLeggingsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldLeggingsSpeed); - - i_goldLeggingsMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_greaves)); - i_goldLeggingsMeta.addEnchant(Enchantment.BLAST_PROTECTION, 4, true); - - i_goldLeggings.setItemMeta(i_goldLeggingsMeta); - return i_goldLeggings; - } else if (item == Item.GOLDEN_CROWN) { - ItemStack i_goldHelmet = new ItemStack(Item.GOLDEN_CROWN.getMaterialType(), 1); - ItemMeta i_goldHelmetMeta = i_goldHelmet.getItemMeta(); - - AttributeModifier i_goldHelmetArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c74"), - "generic.armor", 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - i_goldHelmetMeta.addAttributeModifier(Attribute.ARMOR, i_goldHelmetArmor); - - AttributeModifier i_goldHelmetSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f088c74"), - "generic.movementSpeed", -0.0125, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - i_goldHelmetMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_goldHelmetSpeed); - - i_goldHelmetMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.golden_crown)); - i_goldHelmetMeta.addEnchant(Enchantment.MENDING, 1, true); - - i_goldHelmet.setItemMeta(i_goldHelmetMeta); - return i_goldHelmet; - } else if (item == Item.IRON_BOOTS) { - ItemStack i_ironBoots = new ItemStack(Item.IRON_BOOTS.getMaterialType(), 1); - ItemMeta i_ironBootsMeta = i_ironBoots.getItemMeta(); - - AttributeModifier i_ironBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c75"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_ironBootsMeta.addAttributeModifier(Attribute.ARMOR, i_ironBootsArmor); - AttributeModifier i_ironBootsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c76"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); - i_ironBootsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironBootsSpeed); - - i_ironBoots.setItemMeta(i_ironBootsMeta); - return i_ironBoots; - } else if (item == Item.IRON_CHESTPLATE) { - ItemStack i_ironChestplate = new ItemStack(Item.IRON_CHESTPLATE.getMaterialType(), 1); - ItemMeta i_ironChestplateMeta = i_ironChestplate.getItemMeta(); - - AttributeModifier i_ironChestMove = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c77"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); - i_ironChestplateMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironChestMove); - - AttributeModifier i_ironChestArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c78"), - "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); - i_ironChestplateMeta.addAttributeModifier(Attribute.ARMOR, i_ironChestArmor); - - i_ironChestplate.setItemMeta(i_ironChestplateMeta); - return i_ironChestplate; - } else if (item == Item.IRON_LEGGINGS) { - ItemStack i_ironLeggings = new ItemStack(Item.IRON_LEGGINGS.getMaterialType(), 1); - ItemMeta i_ironLeggingsMeta = i_ironLeggings.getItemMeta(); - - AttributeModifier i_ironLeggingsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c79"), - "generic.armor", 5, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); - i_ironLeggingsMeta.addAttributeModifier(Attribute.ARMOR, i_ironLeggingsArmor); - - AttributeModifier i_ironLeggingsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c80"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); - i_ironLeggingsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironLeggingsSpeed); - - i_ironLeggings.setItemMeta(i_ironLeggingsMeta); - return i_ironLeggings; - } else if (item == Item.IRON_HELMET) { - ItemStack i_ironHelmet = new ItemStack(Item.IRON_HELMET.getMaterialType(), 1); - ItemMeta i_ironHelmetMeta = i_ironHelmet.getItemMeta(); - - AttributeModifier i_ironHelmetArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c81"), - "generic.armor", 2, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - i_ironHelmetMeta.addAttributeModifier(Attribute.ARMOR, i_ironHelmetArmor); - - AttributeModifier i_ironHelmetSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c82"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - i_ironHelmetMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_ironHelmetSpeed); - - i_ironHelmet.setItemMeta(i_ironHelmetMeta); - return i_ironHelmet; - } else if (item == Item.DIAMOND_BOOTS) { - ItemStack i_diamondBoots = new ItemStack(Item.DIAMOND_BOOTS.getMaterialType(), 1); - ItemMeta i_diamondBootsMeta = i_diamondBoots.getItemMeta(); - - AttributeModifier i_diamondBootsArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c83"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.FEET); - i_diamondBootsMeta.addAttributeModifier(Attribute.ARMOR, i_diamondBootsArmor); - - AttributeModifier i_diamondBootsSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c84"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.FEET); - i_diamondBootsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondBootsSpeed); - - i_diamondBoots.setItemMeta(i_diamondBootsMeta); - return i_diamondBoots; - } else if (item == Item.DIAMOND_CHESTPLATE) { - ItemStack i_diamondChestplate = new ItemStack(Item.DIAMOND_CHESTPLATE.getMaterialType(), 1); - ItemMeta i_diamondChestplateMeta = i_diamondChestplate.getItemMeta(); - - AttributeModifier i_diamondChestArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c85"), - "generic.armor", 8, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.CHEST); - i_diamondChestplateMeta.addAttributeModifier(Attribute.ARMOR, i_diamondChestArmor); - - AttributeModifier i_diamondChestSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c86"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.CHEST); - i_diamondChestplateMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondChestSpeed); - - i_diamondChestplate.setItemMeta(i_diamondChestplateMeta); - return i_diamondChestplate; - } else if (item == Item.DIAMOND_LEGGINGS) { - ItemStack i_diamondLeggings = new ItemStack(Item.DIAMOND_LEGGINGS.getMaterialType(), 1); - ItemMeta i_diamondLeggingsMeta = i_diamondLeggings.getItemMeta(); - - AttributeModifier i_diamondLegArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c87"), - "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.LEGS); - i_diamondLeggingsMeta.addAttributeModifier(Attribute.ARMOR, i_diamondLegArmor); - - AttributeModifier i_diamondLegSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c88"), - "generic.movementSpeed", -0.03, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.LEGS); - i_diamondLeggingsMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondLegSpeed); - - i_diamondLeggings.setItemMeta(i_diamondLeggingsMeta); - return i_diamondLeggings; - } else if (item == Item.DIAMOND_HELMET) { - ItemStack i_diamondHelmet = new ItemStack(Item.DIAMOND_HELMET.getMaterialType(), 1); - ItemMeta i_diamondHelmetMeta = i_diamondHelmet.getItemMeta(); - - AttributeModifier i_diamondHelmetArmor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c89"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - i_diamondHelmetMeta.addAttributeModifier(Attribute.ARMOR, i_diamondHelmetArmor); - - AttributeModifier i_diamondHelmetSpeed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c90"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - i_diamondHelmetMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_diamondHelmetSpeed); - - i_diamondHelmet.setItemMeta(i_diamondHelmetMeta); - return i_diamondHelmet; - } else if (item == Item.RECURVE_BOW) { - ItemStack i_recurveBow = new ItemStack(Item.RECURVE_BOW.getMaterialType(), 1); - - ItemMeta recurveBowMeta = i_recurveBow.getItemMeta(); - recurveBowMeta.setCustomModelData(Item.RECURVE_BOW.getModelData()); - recurveBowMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.recurved_bow)); - recurveBowMeta.setLore(Collections.singletonList(ChatColor.RESET + "" + ChatColor.LIGHT_PURPLE + - Utils.getColoredString(lang.recurved))); - recurveBowMeta.addEnchant(Enchantment.PUNCH, 1, true); - i_recurveBow.setItemMeta(recurveBowMeta); - return i_recurveBow; - } else if (item == Item.RECURVE_CROSSBOW) { - ItemStack recurveCrossbow = new ItemStack(Item.RECURVE_CROSSBOW.getMaterialType(), 1); - ItemMeta recurveCrossbowMeta = recurveCrossbow.getItemMeta(); - recurveCrossbowMeta.setCustomModelData(Item.RECURVE_BOW.getModelData()); - recurveCrossbowMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.recurved_crossbow)); - recurveCrossbowMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.recurved))); - recurveCrossbowMeta.addEnchant(Enchantment.PUNCH, 1, true); - recurveCrossbow.setItemMeta(recurveCrossbowMeta); - return recurveCrossbow; - } else if (item == Item.DIRTY_WATER) { - ItemStack dirty_water = new ItemStack(Item.CLEAN_WATER.getMaterialType()); - ItemMeta dirtyMeta = dirty_water.getItemMeta(); - dirtyMeta.setCustomModelData(Item.DIRTY_WATER.getModelData()); - ((PotionMeta) dirtyMeta).setBasePotionData(new PotionData(PotionType.WATER)); - ((PotionMeta) dirtyMeta).setColor(Color.fromRGB(lang.dirty_water_color)); - dirtyMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.dirty_water)); - dirtyMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.dirty_water_lore))); - dirtyMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - dirty_water.setItemMeta(dirtyMeta); - return dirty_water; - } else if (item == Item.CLEAN_WATER) { - ItemStack clean_water = new ItemStack(Item.CLEAN_WATER.getMaterialType()); - ItemMeta cleanMeta = clean_water.getItemMeta(); - cleanMeta.setCustomModelData(Item.CLEAN_WATER.getModelData()); - ((PotionMeta) cleanMeta).setBasePotionData(new PotionData(PotionType.WATER)); - ((PotionMeta) cleanMeta).setColor(Color.fromRGB(lang.clean_water_color)); - cleanMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.clean_water)); - cleanMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.clean_water_lore))); - cleanMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - clean_water.setItemMeta(cleanMeta); - return clean_water; - } else if (item == Item.PURIFIED_WATER) { - ItemStack purified_water = new ItemStack(Item.PURIFIED_WATER.getMaterialType()); - ItemMeta meta = purified_water.getItemMeta(); - meta.setCustomModelData(Item.PURIFIED_WATER.getModelData()); - ((PotionMeta) meta).setBasePotionData(new PotionData(PotionType.WATER)); - ((PotionMeta) meta).setColor(Color.fromRGB(lang.purified_water_color)); - meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.purified_water)); - meta.setLore(Collections.singletonList(Utils.getColoredString(lang.purified_water_lore))); - meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - purified_water.setItemMeta(meta); - return purified_water; - } else if (item == Item.WATER_BOWL) { - ItemStack water_bowl = new ItemStack(Item.WATER_BOWL.getMaterialType()); - PotionMeta water_bowlMeta = ((PotionMeta) water_bowl.getItemMeta()); - water_bowlMeta.setBasePotionData(new PotionData(PotionType.WATER)); - water_bowlMeta.setCustomModelData(Item.WATER_BOWL.getModelData()); - water_bowlMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.water_bowl)); - water_bowl.setItemMeta(water_bowlMeta); - return water_bowl; - } else if (item == Item.CAMPFIRE) { - ItemStack campfire = new ItemStack(Item.CAMPFIRE.getMaterialType()); - ItemMeta campfireMeta = campfire.getItemMeta(); - campfireMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.campfire_name)); - campfireMeta.setLore(Arrays.asList(Utils.getColoredString(lang.campfire_lore).split("\\|\\|"))); - campfireMeta.setCustomModelData(Item.CAMPFIRE.getModelData()); - BlockData data = Material.CAMPFIRE.createBlockData(); - ((Campfire) data).setLit(false); - ((BlockDataMeta) campfireMeta).setBlockData(data); - campfire.setItemMeta(campfireMeta); - return campfire; - } else if (item == Item.STONE_SICKLE) { - ItemStack stone_sickle = new ItemStack(Item.STONE_SICKLE.getMaterialType()); - ItemMeta stone_sickleMeta = stone_sickle.getItemMeta(); - stone_sickleMeta.setCustomModelData(Item.STONE_SICKLE.getModelData()); - stone_sickleMeta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.stone_sickle)); - stone_sickle.setItemMeta(stone_sickleMeta); - return stone_sickle; - } else if (item == Item.IRON_SICKLE) { - ItemStack iron_sickle_new = new ItemStack(Item.IRON_SICKLE.getMaterialType()); - ItemMeta iron_sickle_new_meta = iron_sickle_new.getItemMeta(); - iron_sickle_new_meta.setCustomModelData(Item.IRON_SICKLE.getModelData()); - iron_sickle_new_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.iron_sickle)); - iron_sickle_new.setItemMeta(iron_sickle_new_meta); - return iron_sickle_new; - } else if (item == Item.FLINT_SICKLE) { - ItemStack flint_sickle = new ItemStack(Item.FLINT_SICKLE.getMaterialType()); - ItemMeta flint_sickle_meta = flint_sickle.getItemMeta(); - flint_sickle_meta.setCustomModelData(Item.FLINT_SICKLE.getModelData()); - flint_sickle_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.flint_sickle)); - flint_sickle.setItemMeta(flint_sickle_meta); - return flint_sickle; - } else if (item == Item.DIAMOND_SICKLE) { - ItemStack diamond_sickle = new ItemStack(Item.DIAMOND_SICKLE.getMaterialType()); - ItemMeta diamond_sickle_meta = diamond_sickle.getItemMeta(); - diamond_sickle_meta.setCustomModelData(Item.DIAMOND_SICKLE.getModelData()); - diamond_sickle_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.diamond_sickle)); - diamond_sickle.setItemMeta(diamond_sickle_meta); - return diamond_sickle; - } else if (item == Item.GRAPPLING_HOOK) { - ItemStack grappling_hook = new ItemStack(Item.GRAPPLING_HOOK.getMaterialType()); - ItemMeta grappling_meta = grappling_hook.getItemMeta(); - grappling_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.grappling_hook)); - grappling_meta.setCustomModelData(Item.GRAPPLING_HOOK.getModelData()); - grappling_hook.setItemMeta(grappling_meta); - return grappling_hook; - } else if (item == Item.COFFEE) { - ItemStack coffee = new ItemStack(Item.COFFEE.getMaterialType()); - ItemMeta coffee_meta = coffee.getItemMeta(); - coffee_meta.setCustomModelData(Item.COFFEE.getModelData()); - ((PotionMeta) coffee_meta).setBasePotionData(new PotionData(PotionType.WATER)); - ((PotionMeta) coffee_meta).setColor(Color.fromRGB(lang.coffee_color)); - coffee_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.coffee_name)); - coffee_meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - coffee.setItemMeta(coffee_meta); - return coffee; - } else if (item == Item.HOT_MILK) { - ItemStack hot_milk = new ItemStack(Item.HOT_MILK.getMaterialType()); - ItemMeta hot_milk_meta = hot_milk.getItemMeta(); - hot_milk_meta.setCustomModelData(Item.HOT_MILK.getModelData()); - ((PotionMeta) hot_milk_meta).setBasePotionData(new PotionData(PotionType.WATER)); - ((PotionMeta) hot_milk_meta).setColor(Color.fromRGB(lang.hot_milk_color)); - hot_milk_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.hot_milk_name)); - hot_milk_meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - hot_milk.setItemMeta(hot_milk_meta); - return hot_milk; - } else if (item == Item.COLD_MILK) { - ItemStack cold_milk = new ItemStack(Item.COLD_MILK.getMaterialType()); - ItemMeta cold_milk_meta = cold_milk.getItemMeta(); - cold_milk_meta.setCustomModelData(Item.COLD_MILK.getModelData()); - ((PotionMeta) cold_milk_meta).setBasePotionData(new PotionData(PotionType.WATER)); - ((PotionMeta) cold_milk_meta).setColor(Color.fromRGB(lang.cold_milk_color)); - cold_milk_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.cold_milk_name)); - cold_milk_meta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - cold_milk.setItemMeta(cold_milk_meta); - return cold_milk; - } else if (item == Item.COFFEE_BEAN) { - ItemStack coffee_bean = new ItemStack(Item.COFFEE_BEAN.getMaterialType()); - ItemMeta coffee_bean_meta = coffee_bean.getItemMeta(); - coffee_bean_meta.setCustomModelData(Item.COFFEE_BEAN.getModelData()); - coffee_bean_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.coffee_bean_name)); - coffee_bean.setItemMeta(coffee_bean_meta); - return coffee_bean; - } else if (item == Item.BREEDING_EGG) { - ItemStack breeding_egg = new ItemStack(Item.BREEDING_EGG.getMaterialType()); - ItemMeta breeding_egg_meta = breeding_egg.getItemMeta(); - breeding_egg_meta.setCustomModelData(Item.BREEDING_EGG.getModelData()); - breeding_egg_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.breeding_egg_name)); - breeding_egg.setItemMeta(breeding_egg_meta); - return breeding_egg; - } else if (item == Item.COMPASS) { - ItemStack compass = new ItemStack(Item.COMPASS.getMaterialType()); - ItemMeta compass_meta = compass.getItemMeta(); - List compass_lore = new ArrayList<>(); - for (int i = 0; i < lang.compass_lore.size(); i++) { - compass_lore.add(Utils.getColoredString(lang.compass_lore.get(i))); - } - compass_meta.setLore(compass_lore); - compass.setItemMeta(compass_meta); - return compass; - } else if (item == Item.PERSISTENT_TORCH) { - // TODO Experimental - ItemStack persistent_torch = new ItemStack(Item.PERSISTENT_TORCH.getMaterialType()); - ItemMeta p_torch_meta = persistent_torch.getItemMeta(); - p_torch_meta.setCustomModelData(Item.PERSISTENT_TORCH.getModelData()); - p_torch_meta.setLore(Collections.singletonList(ChatColor.AQUA + "Persistent")); - persistent_torch.setItemMeta(p_torch_meta); - return persistent_torch; - } else if (item == Item.BEEKEEPER_HELMET) { - ItemStack beeHelmet = new ItemStack(Item.BEEKEEPER_HELMET.getMaterialType()); - ItemMeta bhMeta = beeHelmet.getItemMeta(); - bhMeta.setCustomModelData(Item.BEEKEEPER_HELMET.getModelData()); - bhMeta.setDisplayName(Utils.getColoredString(lang.bee_helmet_name)); - bhMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.bee_suit_lore))); - ((LeatherArmorMeta) bhMeta).setColor(Color.WHITE); - bhMeta.addItemFlags(ItemFlag.HIDE_DYE); - beeHelmet.setItemMeta(bhMeta); - return beeHelmet; - } else if (item == Item.BEEKEEPER_CHESTPLATE) { - ItemStack beeChest = new ItemStack(Item.BEEKEEPER_CHESTPLATE.getMaterialType()); - ItemMeta bcMeta = beeChest.getItemMeta(); - bcMeta.setCustomModelData(Item.BEEKEEPER_CHESTPLATE.getModelData()); - bcMeta.setDisplayName(Utils.getColoredString(lang.bee_chest_name)); - bcMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.bee_suit_lore))); - ((LeatherArmorMeta) bcMeta).setColor(Color.WHITE); - bcMeta.addItemFlags(ItemFlag.HIDE_DYE); - beeChest.setItemMeta(bcMeta); - return beeChest; - } else if (item == Item.BEEKEEPER_LEGGINGS) { - ItemStack beeLegs = new ItemStack(Item.BEEKEEPER_LEGGINGS.getMaterialType()); - ItemMeta blMeta = beeLegs.getItemMeta(); - blMeta.setCustomModelData(Item.BEEKEEPER_LEGGINGS.getModelData()); - blMeta.setDisplayName(Utils.getColoredString(lang.bee_legs_name)); - blMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.bee_suit_lore))); - ((LeatherArmorMeta) blMeta).setColor(Color.WHITE); - blMeta.addItemFlags(ItemFlag.HIDE_DYE); - beeLegs.setItemMeta(blMeta); - return beeLegs; - } else if (item == Item.BEEKEEPER_BOOTS) { - ItemStack beeBoots = new ItemStack(Item.BEEKEEPER_BOOTS.getMaterialType()); - ItemMeta bbMeta = beeBoots.getItemMeta(); - bbMeta.setCustomModelData(Item.BEEKEEPER_BOOTS.getModelData()); - bbMeta.setDisplayName(Utils.getColoredString(lang.bee_boots_name)); - bbMeta.setLore(Collections.singletonList(Utils.getColoredString(lang.bee_suit_lore))); - ((LeatherArmorMeta) bbMeta).setColor(Color.WHITE); - bbMeta.addItemFlags(ItemFlag.HIDE_DYE); - beeBoots.setItemMeta(bbMeta); - return beeBoots; - } else if (item == Item.SUSPICIOUS_MEAT) { - ItemStack suspicious_meat = new ItemStack(Item.SUSPICIOUS_MEAT.getMaterialType()); - SuspiciousStewMeta suspicious_meat_meta = ((SuspiciousStewMeta) suspicious_meat.getItemMeta()); - suspicious_meat_meta.setCustomModelData(Item.SUSPICIOUS_MEAT.getModelData()); - suspicious_meat_meta.addCustomEffect(getRandomPotionEffect(), false); - suspicious_meat_meta.setDisplayName(Utils.getColoredString(lang.suspicious_meat)); - suspicious_meat.setItemMeta(suspicious_meat_meta); - return suspicious_meat; - } else if (item == Item.NETHERITE_HELMET) { - ItemStack n_helmet = new ItemStack(Item.NETHERITE_HELMET.getMaterialType()); - ItemMeta n_h_meta = n_helmet.getItemMeta(); - - AttributeModifier n_h_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c91"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.ARMOR, n_h_armor); - - AttributeModifier n_h_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c91"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_h_tough); - - AttributeModifier n_h_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c91"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_h_knock); - - AttributeModifier n_h_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c91"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_h_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_h_speed); - - n_helmet.setItemMeta(n_h_meta); - return n_helmet; - } else if (item == Item.NETHERITE_CHESTPLATE) { - ItemStack n_chest = new ItemStack(Item.NETHERITE_CHESTPLATE.getMaterialType()); - ItemMeta n_c_meta = n_chest.getItemMeta(); - - AttributeModifier n_c_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c92"), - "generic.armor", 8, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.ARMOR, n_c_armor); - - AttributeModifier n_c_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c92"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_c_tough); - - AttributeModifier n_c_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c92"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_c_knock); - - AttributeModifier n_c_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c92"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_c_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_c_speed); - - n_chest.setItemMeta(n_c_meta); - return n_chest; - } else if (item == Item.NETHERITE_LEGGINGS) { - ItemStack n_leg = new ItemStack(Item.NETHERITE_LEGGINGS.getMaterialType()); - ItemMeta n_l_meta = n_leg.getItemMeta(); - - AttributeModifier n_l_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c93"), - "generic.armor", 6, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.ARMOR, n_l_armor); - - AttributeModifier n_l_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c93"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_l_tough); - - AttributeModifier n_l_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c93"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_l_knock); - - AttributeModifier n_l_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c93"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_l_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_l_speed); - - n_leg.setItemMeta(n_l_meta); - return n_leg; - } else if (item == Item.NETHERITE_BOOTS) { - ItemStack n_boot = new ItemStack(Item.NETHERITE_BOOTS.getMaterialType()); - ItemMeta n_b_meta = n_boot.getItemMeta(); - - AttributeModifier n_b_armor = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f086c94"), - "generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.ARMOR, n_b_armor); - - AttributeModifier n_b_tough = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f085c94"), - "generic.toughness", 3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, n_b_tough); - - AttributeModifier n_b_knock = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f084c94"), - "generic.knock", 0.1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, n_b_knock); - - AttributeModifier n_b_speed = new AttributeModifier(UUID.fromString("95c4f950-1631-4cc4-9f67-f45d8f087c94"), - "generic.movementSpeed", -0.02, AttributeModifier.Operation.ADD_SCALAR, EquipmentSlot.HEAD); - n_b_meta.addAttributeModifier(Attribute.MOVEMENT_SPEED, n_b_speed); - - n_boot.setItemMeta(n_b_meta); - return n_boot; - } else if (item == Item.SNOW_BOOTS) { - ItemStack snow_boots = new ItemStack(Item.SNOW_BOOTS.getMaterialType()); - ItemMeta snow_boots_meta = snow_boots.getItemMeta(); - if (snow_boots_meta instanceof LeatherArmorMeta) { - ((LeatherArmorMeta) snow_boots_meta).setColor(Color.fromRGB(158, 201, 202)); - } - snow_boots_meta.setCustomModelData(Item.SNOW_BOOTS.getModelData()); - snow_boots_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.snow_boots_name)); - snow_boots_meta.setLore(Collections.singletonList(Utils.getColoredString(lang.snow_boots_lore))); - snow_boots.setItemMeta(snow_boots_meta); - - return snow_boots; - } else if (item == Item.RAIN_BOOTS) { - ItemStack rain_boots = new ItemStack(Item.RAIN_BOOTS.getMaterialType()); - ItemMeta rain_boots_meta = rain_boots.getItemMeta(); - if (rain_boots_meta instanceof LeatherArmorMeta) { - ((LeatherArmorMeta) rain_boots_meta).setColor(Color.fromRGB(214, 231, 3)); - } - rain_boots_meta.setCustomModelData(Item.RAIN_BOOTS.getModelData()); - rain_boots_meta.setDisplayName(ChatColor.RESET + Utils.getColoredString(lang.rain_boots_name)); - rain_boots_meta.setLore(Collections.singletonList(Utils.getColoredString(lang.rain_boots_lore))); - rain_boots.setItemMeta(rain_boots_meta); - - return rain_boots; - } else { - return new ItemStack(Material.AIR); - } - } - - /** - * Compare an ItemStack with a custom {@link Item} - *

- * NOTE: Will only compare a custom item's {@link Material} and CustomModelData tag - *

- * - * @param itemStack The ItemStack to check - * @param type The custom item enum to check - * @return Whether these two items match or not - */ - public static boolean compare(ItemStack itemStack, Item type) { - if (itemStack.getType() == type.getMaterialType()) { - if (itemStack.getItemMeta() != null && itemStack.getItemMeta().hasCustomModelData()) { - return itemStack.getItemMeta().getCustomModelData() == type.getModelData(); - } else { - return type.getModelData() == 0; - } - } - return false; - } - - /** - * Compare an ItemStack with several custom {@link Item} - * - * @param itemStack The ItemStack to check - * @param type The custom item enums to check - * @return Whether these items match or not - */ - public static boolean compare(ItemStack itemStack, Item... type) { - for (Item item : type) { - if (compare(itemStack, item)) { - return true; - } - } - return false; - } - /** - * Apply the attributes from an {@link Item} to an existing ItemStack + * Apply the attributes from an {@link Items} to an existing ItemStack * * @param itemStack Current ItemStack to apply attributes to * @param items Item to grab data from */ public static void applyAttribute(ItemStack itemStack, Item items) { - ItemStack from = items.getItem(); + ItemStack from = items.getItemStack(); ItemMeta metaTo = itemStack.getItemMeta(); ItemMeta metaFrom = from.getItemMeta(); Map enchants = metaTo.getEnchants(); @@ -933,33 +31,4 @@ public static void applyAttribute(ItemStack itemStack, Item items) { itemStack.setItemMeta(metaFrom); } - private static final List POTION_EFFECTS; - - static { - POTION_EFFECTS = new ArrayList<>(); - // BAD - POTION_EFFECTS.add(PotionEffectType.BAD_OMEN); - POTION_EFFECTS.add(PotionEffectType.NAUSEA); - POTION_EFFECTS.add(PotionEffectType.POISON); - POTION_EFFECTS.add(PotionEffectType.UNLUCK); - POTION_EFFECTS.add(PotionEffectType.HUNGER); - POTION_EFFECTS.add(PotionEffectType.INSTANT_DAMAGE); - POTION_EFFECTS.add(PotionEffectType.SLOWNESS); - // GOOD - POTION_EFFECTS.add(PotionEffectType.DOLPHINS_GRACE); - POTION_EFFECTS.add(PotionEffectType.ABSORPTION); - POTION_EFFECTS.add(PotionEffectType.HASTE); - POTION_EFFECTS.add(PotionEffectType.LUCK); - POTION_EFFECTS.add(PotionEffectType.HEALTH_BOOST); - POTION_EFFECTS.add(PotionEffectType.REGENERATION); - POTION_EFFECTS.add(PotionEffectType.SPEED); - } - - private static PotionEffect getRandomPotionEffect() { - Random random = new Random(); - int randomEffect = random.nextInt(POTION_EFFECTS.size()); - int randomDuration = random.nextInt(200) + 200; - return new PotionEffect(POTION_EFFECTS.get(randomEffect), randomDuration, 0); - } - } diff --git a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java index 56f149e..4bde4d8 100644 --- a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java +++ b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java @@ -8,6 +8,7 @@ import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import java.util.HashMap; import java.util.Map; @@ -25,7 +26,7 @@ public MerchantManager(Survival plugin) { /** * Update a merchants recipes - *

Replaces existing MerchantRecipes with ones that use custom {@link Item}

+ *

Replaces existing MerchantRecipes with ones that use custom {@link Items}

* * @param entity Merchant to update */ @@ -70,26 +71,26 @@ private boolean canUpdate(Material material) { /** * Merchant recipes overrides - *

These will take vanilla recipes and replace them with custom {@link Item}s

+ *

These will take vanilla recipes and replace them with custom {@link Items}s

*/ public enum Recipe { - IRON_HELMET(Material.IRON_HELMET, Item.IRON_HELMET), - IRON_CHESTPLATE(Material.IRON_CHESTPLATE, Item.IRON_CHESTPLATE), - IRON_LEGGINGS(Material.IRON_LEGGINGS, Item.IRON_LEGGINGS), - IRON_BOOTS(Material.IRON_BOOTS, Item.IRON_BOOTS), - DIAMOND_HELMET(Material.DIAMOND_HELMET, Item.DIAMOND_HELMET), - DIAMOND_CHESTPLATE(Material.DIAMOND_CHESTPLATE, Item.DIAMOND_CHESTPLATE), - DIAMOND_LEGGINGS(Material.DIAMOND_LEGGINGS, Item.DIAMOND_LEGGINGS), - DIAMOND_BOOTS(Material.DIAMOND_BOOTS, Item.DIAMOND_BOOTS), - REINFORCED_LEATHER_HELMET(Material.CHAINMAIL_HELMET, Item.REINFORCED_LEATHER_HELMET), - REINFORCED_LEATHER_TUNIC(Material.CHAINMAIL_CHESTPLATE, Item.REINFORCED_LEATHER_TUNIC), - REINFORCED_LEATHER_TROUSERS(Material.CHAINMAIL_LEGGINGS, Item.REINFORCED_LEATHER_TROUSERS), - REINFORCED_LEATHER_BOOTS(Material.CHAINMAIL_BOOTS, Item.REINFORCED_LEATHER_BOOTS), - STONE_SICKLE(Material.STONE_HOE, Item.STONE_SICKLE), - DIAMOND_SICKLE(Material.DIAMOND_HOE, Item.DIAMOND_SICKLE); + IRON_HELMET(Material.IRON_HELMET, Items.IRON_HELMET), + IRON_CHESTPLATE(Material.IRON_CHESTPLATE, Items.IRON_CHESTPLATE), + IRON_LEGGINGS(Material.IRON_LEGGINGS, Items.IRON_LEGGINGS), + IRON_BOOTS(Material.IRON_BOOTS, Items.IRON_BOOTS), + DIAMOND_HELMET(Material.DIAMOND_HELMET, Items.DIAMOND_HELMET), + DIAMOND_CHESTPLATE(Material.DIAMOND_CHESTPLATE, Items.DIAMOND_CHESTPLATE), + DIAMOND_LEGGINGS(Material.DIAMOND_LEGGINGS, Items.DIAMOND_LEGGINGS), + DIAMOND_BOOTS(Material.DIAMOND_BOOTS, Items.DIAMOND_BOOTS), + REINFORCED_LEATHER_HELMET(Material.CHAINMAIL_HELMET, Items.REINFORCED_LEATHER_HELMET), + REINFORCED_LEATHER_TUNIC(Material.CHAINMAIL_CHESTPLATE, Items.REINFORCED_LEATHER_TUNIC), + REINFORCED_LEATHER_TROUSERS(Material.CHAINMAIL_LEGGINGS, Items.REINFORCED_LEATHER_TROUSERS), + REINFORCED_LEATHER_BOOTS(Material.CHAINMAIL_BOOTS, Items.REINFORCED_LEATHER_BOOTS), + STONE_SICKLE(Material.STONE_HOE, Items.STONE_SICKLE), + DIAMOND_SICKLE(Material.DIAMOND_HOE, Items.DIAMOND_SICKLE); private final Material material; - private final Item item; + private final Item items; private static final Map recipeByMaterialMap; static { @@ -99,9 +100,9 @@ public enum Recipe { } } - Recipe(Material material, Item item) { + Recipe(Material material, Item items) { this.material = material; - this.item = item; + this.items = items; } /** @@ -113,7 +114,7 @@ public enum Recipe { public MerchantRecipe updateRecipe(MerchantRecipe oldRecipe) { ItemStack old = oldRecipe.getResult().clone(); - ItemManager.applyAttribute(old, this.item); + ItemManager.applyAttribute(old, this.items); MerchantRecipe recipe = new MerchantRecipe(old, oldRecipe.getUses(), oldRecipe.getMaxUses(), oldRecipe.hasExperienceReward(), oldRecipe.getVillagerExperience(), oldRecipe.getPriceMultiplier()); diff --git a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java index 34666ca..b39cab7 100644 --- a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java +++ b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java @@ -17,12 +17,13 @@ import org.bukkit.inventory.SmokingRecipe; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; import java.util.Collection; +@SuppressWarnings("DataFlowIssue") public class RecipeManager { private final Config config; @@ -36,108 +37,9 @@ public RecipeManager(Survival plugin) { /** * Load all custom server recipes */ - @SuppressWarnings("deprecation") public void loadCustomRecipes() { removeRecipes(); Server server = plugin.getServer(); - - // HATCHET RECIPE - ShapedRecipe hatchet1 = new ShapedRecipe(new NamespacedKey(plugin, "hatchet1"), ItemManager.get(Item.HATCHET)); - ShapedRecipe hatchet2 = new ShapedRecipe(new NamespacedKey(plugin, "hatchet2"), ItemManager.get(Item.HATCHET)); - - hatchet1.shape("@@", " 1"); - - hatchet1.setIngredient('@', Material.FLINT); - hatchet1.setIngredient('1', Material.STICK); - hatchet1.setGroup("HATCHET"); - - hatchet2.shape("@@", "1 "); - - hatchet2.setIngredient('@', Material.FLINT); - hatchet2.setIngredient('1', Material.STICK); - hatchet2.setGroup("HATCHET"); - - - // MATTOCK RECIPE - ShapedRecipe mattock = new ShapedRecipe(new NamespacedKey(plugin, "mattock"), ItemManager.get(Item.MATTOCK)); - - mattock.shape("@-", "1@"); - mattock.setIngredient('@', Material.FLINT); - mattock.setIngredient('-', new RecipeChoice.MaterialChoice(Tag.PLANKS)); - mattock.setIngredient('1', Material.STICK); - - - // SHIV RECIPE - ShapedRecipe shiv = new ShapedRecipe(new NamespacedKey(plugin, "shiv"), ItemManager.get(Item.SHIV)); - - shiv.shape("*@", "1&"); - - shiv.setIngredient('@', Material.FLINT); - shiv.setIngredient('1', Material.STICK); - shiv.setIngredient('*', Material.STRING); - shiv.setIngredient('&', Material.SPIDER_EYE); - - - // HAMMER RECIPE - ShapedRecipe hammer = new ShapedRecipe(new NamespacedKey(plugin, "hammer"), ItemManager.get(Item.HAMMER)); - - hammer.shape("@ ", "1@"); - - hammer.setIngredient('@', Material.COBBLESTONE); - hammer.setIngredient('1', Material.STICK); - - - // VALKYRIE's AXE RECIPE - ShapedRecipe valkyries_axe = new ShapedRecipe(new NamespacedKey(plugin, "valkyrie_axe"), ItemManager.get(Item.VALKYRIES_AXE)); - - valkyries_axe.shape("@@@", "@*@", " 1 "); - - valkyries_axe.setIngredient('@', Material.DIAMOND); - valkyries_axe.setIngredient('*', Material.NETHER_STAR); - valkyries_axe.setIngredient('1', Material.STICK); - - - // QUARTZ PICKAXE RECIPE - ShapedRecipe quartz_pickaxe = new ShapedRecipe(new NamespacedKey(plugin, "quartz_pickaxe"), ItemManager.get(Item.QUARTZ_PICKAXE)); - quartz_pickaxe.shape("@B-", "B# ", "- 1"); - - quartz_pickaxe.setIngredient('@', Material.QUARTZ_BLOCK); - quartz_pickaxe.setIngredient('-', Material.DIAMOND); - quartz_pickaxe.setIngredient('B', Material.DIAMOND_BLOCK); - quartz_pickaxe.setIngredient('1', Material.STICK); - quartz_pickaxe.setIngredient('#', Material.DRAGON_EGG); - - - // OBSIDIAN MACE RECIPE - ShapedRecipe obsidian_mace = new ShapedRecipe(new NamespacedKey(plugin, "obsidian_mace"), ItemManager.get(Item.OBSIDIAN_MACE)); - - obsidian_mace.shape(" @@", " &@", "1 "); - - obsidian_mace.setIngredient('@', Material.OBSIDIAN); - obsidian_mace.setIngredient('&', Material.END_CRYSTAL); - obsidian_mace.setIngredient('1', Material.STICK); - - - // ENDER GIANT BLADE RECIPE - ShapedRecipe ender_giant_blade = new ShapedRecipe(new NamespacedKey(plugin, "ender_giant_blade"), ItemManager.get(Item.ENDER_GIANT_BLADE)); - - ender_giant_blade.shape(" @@", "B*@", "1B "); - - ender_giant_blade.setIngredient('*', Material.ENDER_EYE); - ender_giant_blade.setIngredient('@', Material.DIAMOND); - ender_giant_blade.setIngredient('B', Material.DIAMOND_BLOCK); - ender_giant_blade.setIngredient('1', new RecipeChoice.MaterialChoice(Tag.PLANKS)); - - - // BLAZE SWORD RECIPE - ShapedRecipe blaze_sword = new ShapedRecipe(new NamespacedKey(plugin, "blaze_sword"), ItemManager.get(Item.BLAZE_SWORD)); - blaze_sword.shape("*@*", "*@*", "*1*"); - - blaze_sword.setIngredient('@', Material.GOLD_INGOT); - blaze_sword.setIngredient('1', Material.BLAZE_ROD); - blaze_sword.setIngredient('*', Material.BLAZE_POWDER); - - // NOTCH APPLE RECIPE ShapedRecipe notchApple = new ShapedRecipe(new NamespacedKey(plugin, "enchanted_golden_apple"), new ItemStack(Material.ENCHANTED_GOLDEN_APPLE, 1)); notchApple.shape("@@@", "@*@", "@@@"); @@ -248,23 +150,13 @@ public void loadCustomRecipes() { woolString.addIngredient(new RecipeChoice.MaterialChoice(Tag.WOOL)); string.addIngredient(Material.COBWEB); - - // WORKBENCH RECIPE - ShapelessRecipe workbench = new ShapelessRecipe(new NamespacedKey(plugin, "workbench"), ItemManager.get(Item.WORKBENCH)); - - workbench.addIngredient(new RecipeChoice.MaterialChoice(Tag.LOGS)); - workbench.addIngredient(Material.LEATHER); - workbench.addIngredient(Material.STRING); - workbench.addIngredient(new ExactChoice(ItemManager.get(Item.HAMMER))); - - // FURNACE RECIPE ShapedRecipe furnace = new ShapedRecipe(new NamespacedKey(plugin, "furnace"), new ItemStack(Material.FURNACE, 1)); furnace.shape("@@@", "@*@", "@@@"); furnace.setIngredient('@', Material.BRICK); - furnace.setIngredient('*', new ExactChoice(ItemManager.get(Item.FIRESTRIKER))); + furnace.setIngredient('*', Items.FIRESTRIKER.getItemStack()); // CHEST RECIPE @@ -282,7 +174,7 @@ public void loadCustomRecipes() { clay.shape(" ", "123", " "); clay.setIngredient('1', Material.DIRT); clay.setIngredient('2', Material.SAND); - clay.setIngredient('3', new ExactChoice(ItemManager.get(Item.WATER_BOWL))); + clay.setIngredient('3', Items.WATER_BOWL.getItemStack()); // DIORITE RECIPE @@ -314,26 +206,18 @@ public void loadCustomRecipes() { gravel.setIngredient('@', Material.SAND); gravel.setIngredient('B', Material.COBBLESTONE); - - // FIRESTRIKER RECIPE - ShapelessRecipe firestriker = new ShapelessRecipe(new NamespacedKey(plugin, "firestriker"), ItemManager.get(Item.FIRESTRIKER)); - - firestriker.addIngredient(Material.FLINT); - firestriker.addIngredient(new RecipeChoice.MaterialChoice(Tag.ITEMS_COALS)); - - // TORCH RECIPE ShapedRecipe torch1 = new ShapedRecipe(new NamespacedKey(plugin, "torch1"), new ItemStack(Material.TORCH, 8)); ShapedRecipe torch2 = new ShapedRecipe(new NamespacedKey(plugin, "torch2"), new ItemStack(Material.TORCH, 16)); torch1.shape("AAA", "ABA", "AAA"); - torch1.setIngredient('B', new ExactChoice(ItemManager.get(Item.FIRESTRIKER))); + torch1.setIngredient('B', Items.FIRESTRIKER.getItemStack()); torch1.setIngredient('A', Material.STICK); //torch1.setGroup("TORCH"); torch2.shape("ACA", "ABA", "AAA"); torch2.setIngredient('C', new RecipeChoice.MaterialChoice(Tag.ITEMS_COALS)); - torch2.setIngredient('B', new ExactChoice(ItemManager.get(Item.FIRESTRIKER))); + torch2.setIngredient('B', Items.FIRESTRIKER.getItemStack()); torch2.setIngredient('A', Material.STICK); //torch2.setGroup("TORCH"); @@ -346,24 +230,16 @@ public void loadCustomRecipes() { // FERMENTED SPIDER EYE RECIPE ShapelessRecipe fermented_spider_eye = new ShapelessRecipe(new NamespacedKey(plugin, "fermented_spider_eye"), - new ItemStack(Material.FERMENTED_SPIDER_EYE, 1)); + new ItemStack(Material.FERMENTED_SPIDER_EYE, 1)); fermented_spider_eye.addIngredient(Material.SPIDER_EYE); fermented_spider_eye.addIngredient(Material.SUGAR); fermented_spider_eye.addIngredient(new RecipeChoice.MaterialChoice(Material.RED_MUSHROOM, Material.BROWN_MUSHROOM)); - // FERMENTED SKIN RECIPE - ShapelessRecipe fermented_skin = new ShapelessRecipe(new NamespacedKey(plugin, "fermented_skin"), ItemManager.get(Item.FERMENTED_SKIN)); - - fermented_skin.addIngredient(Material.ROTTEN_FLESH); - fermented_skin.addIngredient(Material.SUGAR); - fermented_skin.addIngredient(new RecipeChoice.MaterialChoice(Material.BROWN_MUSHROOM, Material.RED_MUSHROOM)); - - // POISONOUS POTATO RECIPE ShapelessRecipe poisonousPotato = new ShapelessRecipe(new NamespacedKey(plugin, "poisonous_potato"), - new ItemStack(Material.POISONOUS_POTATO, 1)); + new ItemStack(Material.POISONOUS_POTATO, 1)); poisonousPotato.addIngredient(Material.POTATO); poisonousPotato.addIngredient(new RecipeChoice.MaterialChoice(Material.BONE_MEAL, Material.WHITE_DYE)); @@ -379,28 +255,17 @@ public void loadCustomRecipes() { ShapedRecipe bowl = new ShapedRecipe(new NamespacedKey(plugin, "bowl"), new ItemStack(Material.BOWL, 1)); bowl.shape(" ", " 1"); - bowl.setIngredient('1', new ExactChoice(ItemManager.get(Item.WATER_BOWL))); + bowl.setIngredient('1', Items.WATER_BOWL.getItemStack()); // CLEAN WATER RECIPES - FurnaceRecipe clean_water_furnace = new FurnaceRecipe(new NamespacedKey(plugin, "clean_water_furnace"), - ItemManager.get(Item.CLEAN_WATER), new ExactChoice(ItemManager.get(Item.DIRTY_WATER)), 0, 600); - - SmokingRecipe clean_water_smoker = new SmokingRecipe(new NamespacedKey(plugin, "clean_water_smoker"), - ItemManager.get(Item.CLEAN_WATER), new ExactChoice(ItemManager.get(Item.DIRTY_WATER)), 0, 300); + FurnaceRecipe clean_water_furnace = new FurnaceRecipe(NamespacedKey.fromString("survival_plus:clean_water_furnace"), + Items.CLEAN_WATER.getItemStack(), new ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 600); - CampfireRecipe clean_water_camp = new CampfireRecipe(new NamespacedKey(plugin, "clean_water_campfire"), - ItemManager.get(Item.CLEAN_WATER), new ExactChoice(ItemManager.get(Item.DIRTY_WATER)), 0, 2400); + SmokingRecipe clean_water_smoker = new SmokingRecipe(NamespacedKey.fromString("survival_plus:clean_water_smoker"), + Items.CLEAN_WATER.getItemStack(), new ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 300); - - // MEDIC KIT RECIPE - ShapedRecipe medic_kit = new ShapedRecipe(new NamespacedKey(plugin, "medic_kit"), ItemManager.get(Item.MEDIC_KIT)); - - medic_kit.shape(" @ ", "ABC", " @ "); - - medic_kit.setIngredient('@', Material.GOLD_INGOT); - medic_kit.setIngredient('A', Material.FEATHER); - medic_kit.setIngredient('B', Material.GLISTERING_MELON_SLICE); - medic_kit.setIngredient('C', Material.PAPER); + CampfireRecipe clean_water_camp = new CampfireRecipe(NamespacedKey.fromString("survival_plus:clean_water_campfire"), + Items.CLEAN_WATER.getItemStack(), new ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 2400); // FISHING ROD RECIPE @@ -434,13 +299,13 @@ public void loadCustomRecipes() { // SMELTING RECIPES FurnaceRecipe smelt_ironIngot = new FurnaceRecipe(new NamespacedKey(plugin, "furnace_iron_ingot"), - new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 400); + new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 400); FurnaceRecipe smelt_goldIngot = new FurnaceRecipe(new NamespacedKey(plugin, "furnace_gold_ingot"), - new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 400); + new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 400); BlastingRecipe blast_ironIngot = new BlastingRecipe(new NamespacedKey(plugin, "blast_iron_ingot"), - new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 100); + new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 100); BlastingRecipe blast_goldIngot = new BlastingRecipe(new NamespacedKey(plugin, "blast_gold_ingot"), - new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 100); + new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 100); // BREAD RECIPE @@ -483,291 +348,43 @@ public void loadCustomRecipes() { stick.addIngredient(new RecipeChoice.MaterialChoice(Tag.SAPLINGS)); - // REINFORCED LEATHER BOOTS RECIPE - ShapedRecipe reinforced_leather_boots = new ShapedRecipe(new NamespacedKey(plugin, "reinforced_leather_boots"), - ItemManager.get(Item.REINFORCED_LEATHER_BOOTS)); - reinforced_leather_boots.shape("@*@"); - - reinforced_leather_boots.setIngredient('@', Material.IRON_INGOT); - reinforced_leather_boots.setIngredient('*', Material.LEATHER_BOOTS); - - - // REINFORCED LEATHER TUNIC RECIPE - ShapedRecipe reinforced_leather_chestplate = new ShapedRecipe(new NamespacedKey(plugin, "reinforced_leather_chestplate"), - ItemManager.get(Item.REINFORCED_LEATHER_TUNIC)); - reinforced_leather_chestplate.shape(" @ ", "@*@", " @ "); - - reinforced_leather_chestplate.setIngredient('@', Material.IRON_INGOT); - reinforced_leather_chestplate.setIngredient('*', Material.LEATHER_CHESTPLATE); - - - // REINFORCED LEATHER TROUSERS RECIPE - ShapedRecipe reinforced_leather_leggings = new ShapedRecipe(new NamespacedKey(plugin, "reinforced_leather_leggings"), - ItemManager.get(Item.REINFORCED_LEATHER_TROUSERS)); - reinforced_leather_leggings.shape(" @ ", "@*@", " @ "); - - reinforced_leather_leggings.setIngredient('@', Material.IRON_INGOT); - reinforced_leather_leggings.setIngredient('*', Material.LEATHER_LEGGINGS); - - - // REINFORCED LEATHER HELMET RECIPE - ShapedRecipe reinforced_leather_helmet = new ShapedRecipe(new NamespacedKey(plugin, "reinforced_leather_helmet"), - ItemManager.get(Item.REINFORCED_LEATHER_HELMET)); - reinforced_leather_helmet.shape("@*@"); - - reinforced_leather_helmet.setIngredient('@', Material.IRON_INGOT); - reinforced_leather_helmet.setIngredient('*', Material.LEATHER_HELMET); - - - // GOLDEN SABATONS RECIPE - ShapedRecipe gold_sabatons = new ShapedRecipe(new NamespacedKey(plugin, "gold_sabatons"), ItemManager.get(Item.GOLDEN_SABATONS)); - gold_sabatons.shape("@ @", "@ @"); - - gold_sabatons.setIngredient('@', Material.GOLD_INGOT); - - - // GOLDEN GUARD RECIPE - ShapedRecipe gold_guard = new ShapedRecipe(new NamespacedKey(plugin, "gold_guard"), ItemManager.get(Item.GOLDEN_GUARD)); - gold_guard.shape("@ @", "@@@", "@@@"); - - gold_guard.setIngredient('@', Material.GOLD_INGOT); - - - // GOLDEN GREAVES RECIPE - ShapedRecipe gold_greaves = new ShapedRecipe(new NamespacedKey(plugin, "gold_greaves"), ItemManager.get(Item.GOLDEN_GREAVES)); - gold_greaves.shape("@@@", "@ @", "@ @"); - - gold_greaves.setIngredient('@', Material.GOLD_INGOT); - - - // GOLDEN CROWN RECIPE - ShapedRecipe gold_crown = new ShapedRecipe(new NamespacedKey(plugin, "gold_crown"), ItemManager.get(Item.GOLDEN_CROWN)); - gold_crown.shape("@*@", "@@@"); - - gold_crown.setIngredient('@', Material.GOLD_INGOT); - gold_crown.setIngredient('*', Material.EMERALD); - - - // IRON BOOTS RECIPE - ShapedRecipe ironBoots = new ShapedRecipe(new NamespacedKey(plugin, "iron_boots"), ItemManager.get(Item.IRON_BOOTS)); - ironBoots.shape("@ @", "@ @"); - - ironBoots.setIngredient('@', Material.IRON_INGOT); - - - // IRON CHESTPLATE RECIPE - ShapedRecipe ironChestplate = new ShapedRecipe(new NamespacedKey(plugin, "iron_chestplate"), ItemManager.get(Item.IRON_CHESTPLATE)); - ironChestplate.shape("@ @", "@@@", "@@@"); - - ironChestplate.setIngredient('@', Material.IRON_INGOT); - - - // IRON LEGGINGS RECIPE - ShapedRecipe ironLeggings = new ShapedRecipe(new NamespacedKey(plugin, "iron_leggings"), ItemManager.get(Item.IRON_LEGGINGS)); - ironLeggings.shape("@@@", "@ @", "@ @"); - - ironLeggings.setIngredient('@', Material.IRON_INGOT); - - - // IRON HELMET RECIPE - ShapedRecipe ironHelmet = new ShapedRecipe(new NamespacedKey(plugin, "iron_helmet"), ItemManager.get(Item.IRON_HELMET)); - ironHelmet.shape("@@@", "@ @"); - - ironHelmet.setIngredient('@', Material.IRON_INGOT); - - - // DIAMOND BOOTS RECIPE - ShapedRecipe diamondBoots = new ShapedRecipe(new NamespacedKey(plugin, "diamond_boots"), ItemManager.get(Item.DIAMOND_BOOTS)); - diamondBoots.shape("@ @", "@ @"); - - diamondBoots.setIngredient('@', Material.DIAMOND); - - - // DIAMOND CHESTPLATE RECIPE - ShapedRecipe diamondChestplate = new ShapedRecipe(new NamespacedKey(plugin, "diamond_chestplate"), ItemManager.get(Item.DIAMOND_CHESTPLATE)); - diamondChestplate.shape("@ @", "@@@", "@@@"); - - diamondChestplate.setIngredient('@', Material.DIAMOND); - - - // DIAMOND LEGGINGS RECIPE - ShapedRecipe diamondLeggings = new ShapedRecipe(new NamespacedKey(plugin, "diamond_leggings"), ItemManager.get(Item.DIAMOND_LEGGINGS)); - diamondLeggings.shape("@@@", "@ @", "@ @"); - - diamondLeggings.setIngredient('@', Material.DIAMOND); - - - // DIAMOND HELMET RECIPE - ShapedRecipe diamondHelmet = new ShapedRecipe(new NamespacedKey(plugin, "diamond_helmet"), ItemManager.get(Item.DIAMOND_HELMET)); - diamondHelmet.shape("@@@", "@ @"); - - diamondHelmet.setIngredient('@', Material.DIAMOND); - - - // RECURVED BOW RECIPE - ShapedRecipe recurvedBow = new ShapedRecipe(new NamespacedKey(plugin, "recurved_bow"), ItemManager.get(Item.RECURVE_BOW)); - - recurvedBow.shape(" @1", "#^1", " @1"); - recurvedBow.setIngredient('^', Material.BOW); - recurvedBow.setIngredient('#', Material.PISTON); - recurvedBow.setIngredient('@', Material.IRON_INGOT); - recurvedBow.setIngredient('1', Material.STRING); - - - // RECURVED CROSSBOW - ShapedRecipe recurvedCrossbow = new ShapedRecipe(new NamespacedKey(plugin, "recurved_crossbow"), ItemManager.get(Item.RECURVE_CROSSBOW)); - - recurvedCrossbow.shape(" 12", "342", " 12"); - recurvedCrossbow.setIngredient('1', Material.DIAMOND); - recurvedCrossbow.setIngredient('2', Material.PHANTOM_MEMBRANE); - recurvedCrossbow.setIngredient('3', Material.PISTON); - recurvedCrossbow.setIngredient('4', Material.CROSSBOW); - - // NEW CAMPFIRE RECIPE - ShapedRecipe unlit_campfire = new ShapedRecipe(new NamespacedKey(plugin, "unlit_campfire"), ItemManager.get(Item.CAMPFIRE)); - - unlit_campfire.shape(" 1 ", "121", "333"); - unlit_campfire.setIngredient('1', Material.STICK); - unlit_campfire.setIngredient('2', new RecipeChoice.MaterialChoice(Tag.ITEMS_COALS)); - unlit_campfire.setIngredient('3', new RecipeChoice.MaterialChoice(Tag.LOGS)); - - // FLINT SICKLE RECIPE - ShapedRecipe flint_sickle = new ShapedRecipe(new NamespacedKey(plugin, "flint_sickle"), ItemManager.get(Item.FLINT_SICKLE)); - - flint_sickle.shape("11 ", " 2 ", " 2 "); - flint_sickle.setIngredient('1', Material.FLINT); - flint_sickle.setIngredient('2', Material.STICK); - - // STONE SICKLE RECIPE - ShapedRecipe stone_sickle = new ShapedRecipe(new NamespacedKey(plugin, "stone_sickle"), ItemManager.get(Item.STONE_SICKLE)); - - stone_sickle.shape("112", " 3", " 3 "); - stone_sickle.setIngredient('1', Material.COBBLESTONE); - stone_sickle.setIngredient('2', Material.FLINT); - stone_sickle.setIngredient('3', Material.STICK); - - // IRON SICKLE RECIPE - ShapedRecipe iron_sickle = new ShapedRecipe(new NamespacedKey(plugin, "iron_sickle"), ItemManager.get(Item.IRON_SICKLE)); - - iron_sickle.shape("112", " 3", " 3 "); - iron_sickle.setIngredient('1', Material.IRON_INGOT); - iron_sickle.setIngredient('2', Material.FLINT); - iron_sickle.setIngredient('3', Material.STICK); - - // DIAMOND SICKLE RECIPE - ShapedRecipe diamond_sickle = new ShapedRecipe(new NamespacedKey(plugin, "diamond_sickle"), ItemManager.get(Item.DIAMOND_SICKLE)); - - diamond_sickle.shape("112", " 3", " 3 "); - diamond_sickle.setIngredient('1', Material.DIAMOND); - diamond_sickle.setIngredient('2', Material.FLINT); - diamond_sickle.setIngredient('3', Material.STICK); - - // NEW GRAPPLING HOOK RECIPE - ShapedRecipe grappling_hook = new ShapedRecipe(new NamespacedKey(plugin, "grappling_hook"), ItemManager.get(Item.GRAPPLING_HOOK)); - - grappling_hook.shape(" 3 ", "121", " 3 "); - grappling_hook.setIngredient('1', Material.FISHING_ROD); - grappling_hook.setIngredient('2', Material.STRING); - grappling_hook.setIngredient('3', Material.IRON_INGOT); - - // NEW COFFEE RECIPES - SmokingRecipe coffee_bean = new SmokingRecipe(new NamespacedKey(plugin, "coffee_bean"), ItemManager.get(Item.COFFEE_BEAN), - Material.COCOA_BEANS, 0, 200); - - SmokingRecipe hot_milk = new SmokingRecipe(new NamespacedKey(plugin, "hot_milk"), ItemManager.get(Item.HOT_MILK), - new ExactChoice(ItemManager.get(Item.COLD_MILK)), 0, 200); - - ItemStack COFFEE = ItemManager.get(Item.COFFEE); - COFFEE.setAmount(2); - ShapedRecipe coffee = new ShapedRecipe(new NamespacedKey(plugin, "coffee"), COFFEE); - - coffee.shape(" ", "12 ", "34 "); - coffee.setIngredient('1', new ExactChoice(ItemManager.get(Item.COFFEE_BEAN))); - coffee.setIngredient('2', Material.COCOA_BEANS); - coffee.setIngredient('3', new ExactChoice(ItemManager.get(Item.HOT_MILK))); - coffee.setIngredient('4', new ExactChoice(ItemManager.get(Item.PURIFIED_WATER))); - - ShapedRecipe cold_milk = new ShapedRecipe(new NamespacedKey(plugin, "cold_milk"), ItemManager.get(Item.COLD_MILK)); - - cold_milk.shape(" ", "12 ", " "); - cold_milk.setIngredient('1', Material.MILK_BUCKET); - cold_milk.setIngredient('2', Material.GLASS_BOTTLE); - - // NEW COMPASS RECIPE - ShapedRecipe compass_recipe = new ShapedRecipe(new NamespacedKey(plugin, "compass"), ItemManager.get(Item.COMPASS)); - compass_recipe.shape(" 1 ", "121", " 1 "); - compass_recipe.setIngredient('1', Material.IRON_INGOT); - compass_recipe.setIngredient('2', Material.REDSTONE); - // BEEKEEPER RECIPES - ShapedRecipe beekeeper_helmet = new ShapedRecipe(key("beekeeper_helmet"), ItemManager.get(Item.BEEKEEPER_HELMET)); - beekeeper_helmet.shape("121", "3 3", " "); - beekeeper_helmet.setIngredient('1', Material.HONEYCOMB); - beekeeper_helmet.setIngredient('2', Material.IRON_INGOT); - beekeeper_helmet.setIngredient('3', Material.LEATHER); - - ShapedRecipe beekeeper_chest = new ShapedRecipe(key("beekeeper_chestplate"), ItemManager.get(Item.BEEKEEPER_CHESTPLATE)); - beekeeper_chest.shape("1 1", "232", "323"); - beekeeper_chest.setIngredient('1', Material.HONEYCOMB); - beekeeper_chest.setIngredient('2', Material.IRON_INGOT); - beekeeper_chest.setIngredient('3', Material.LEATHER); - - ShapedRecipe beekeeper_leg = new ShapedRecipe(key("beekeeper_leggings"), ItemManager.get(Item.BEEKEEPER_LEGGINGS)); - beekeeper_leg.shape("131", "3 3", "2 2"); - beekeeper_leg.setIngredient('1', Material.HONEYCOMB); - beekeeper_leg.setIngredient('2', Material.IRON_INGOT); - beekeeper_leg.setIngredient('3', Material.LEATHER); - - ShapedRecipe beekeeper_boot = new ShapedRecipe(key("beekeeper_boots"), ItemManager.get(Item.BEEKEEPER_BOOTS)); - beekeeper_boot.shape(" ", "1 1", "3 3"); - beekeeper_boot.setIngredient('1', Material.HONEYCOMB); - beekeeper_boot.setIngredient('3', Material.LEATHER); if (config.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED) { - server.addRecipe(beekeeper_helmet); - server.addRecipe(beekeeper_chest); - server.addRecipe(beekeeper_leg); - server.addRecipe(beekeeper_boot); + Items.BEEKEEPER_HELMET.registerRecipe(); + Items.BEEKEEPER_CHESTPLATE.registerRecipe(); + Items.BEEKEEPER_LEGGINGS.registerRecipe(); + Items.BEEKEEPER_BOOTS.registerRecipe(); } if (config.MECHANICS_WEATHER_ENABLED) { - ShapedRecipe snowBoots = new ShapedRecipe(key("snow_boots"), Item.SNOW_BOOTS.getItem()); - snowBoots.shape(" ", "121", " "); - snowBoots.setIngredient('1', Material.DIAMOND); - snowBoots.setIngredient('2', Material.LEATHER_BOOTS); - server.addRecipe(snowBoots); - - ShapedRecipe rainBoots = new ShapedRecipe(key("rain_boots"), Item.RAIN_BOOTS.getItem()); - rainBoots.shape(" ", "121", " "); - rainBoots.setIngredient('1', Material.IRON_INGOT); - rainBoots.setIngredient('2', Material.LEATHER_BOOTS); - server.addRecipe(rainBoots); + Items.SNOW_BOOTS.registerRecipe(); + Items.RAIN_BOOTS.registerRecipe(); } //Add recipes if (config.SURVIVAL_ENABLED) { - plugin.getServer().addRecipe(hatchet1); - plugin.getServer().addRecipe(hatchet2); - plugin.getServer().addRecipe(mattock); - plugin.getServer().addRecipe(shiv); - plugin.getServer().addRecipe(hammer); - plugin.getServer().addRecipe(firestriker); + Items.HATCHET.registerRecipe(); + Items.MATTOCK.registerRecipe(); + Items.SHIV.registerRecipe(); + Items.HAMMER.registerRecipe(); + Items.FIRESTRIKER.registerRecipe(); plugin.getServer().addRecipe(chest); plugin.getServer().addRecipe(flint); - plugin.getServer().addRecipe(unlit_campfire); + Items.CAMPFIRE.registerRecipe(); if (config.BREAK_ONLY_WITH_SICKLE) { if (config.SURVIVAL_SICKLE_FLINT) - plugin.getServer().addRecipe(flint_sickle); + Items.FLINT_SICKLE.registerRecipe(); if (config.SURVIVAL_SICKLE_STONE) - plugin.getServer().addRecipe(stone_sickle); + Items.STONE_SICKLE.registerRecipe(); if (config.SURVIVAL_SICKLE_IRON) - plugin.getServer().addRecipe(iron_sickle); + Items.IRON_SICKLE.registerRecipe(); if (config.SURVIVAL_SICKLE_DIAMOND) - plugin.getServer().addRecipe(diamond_sickle); + Items.DIAMOND_SICKLE.registerRecipe(); } if (config.RECIPES_WORKBENCH) { - plugin.getServer().addRecipe(workbench); + Items.WORKBENCH.registerRecipe(); } if (config.RECIPES_FURNACE) { plugin.getServer().addRecipe(furnace); @@ -784,19 +401,19 @@ public void loadCustomRecipes() { } if (config.LEGENDARY_VALKYRIE) { - plugin.getServer().addRecipe(valkyries_axe); + Items.VALKYRIES_AXE.registerRecipe(); } if (config.LEGENDARY_QUARTZPICKAXE) { - plugin.getServer().addRecipe(quartz_pickaxe); + Items.QUARTZ_PICKAXE.registerRecipe(); } if (config.LEGENDARY_OBSIDIAN_MACE) { - plugin.getServer().addRecipe(obsidian_mace); + Items.OBSIDIAN_MACE.registerRecipe(); } if (config.LEGENDARY_GIANTBLADE) { - plugin.getServer().addRecipe(ender_giant_blade); + Items.ENDER_GIANT_BLADE.registerRecipe(); } if (config.LEGENDARY_BLAZESWORD) { - plugin.getServer().addRecipe(blaze_sword); + Items.BLAZE_SWORD.registerRecipe(); } if (config.LEGENDARY_NOTCH_APPLE) plugin.getServer().addRecipe(notchApple); @@ -840,14 +457,8 @@ public void loadCustomRecipes() { if (config.RECIPES_GRAVEL) { plugin.getServer().addRecipe(gravel); } - /* There is no setting for this in the config?!?! - if (settings.getBoolean("Mechanics.RedMushroomFermentation")) { - survival.getServer().addRecipe(fermented_spider_eye); - } - - */ if (config.MECHANICS_FERMENTED_SKIN) { - plugin.getServer().addRecipe(fermented_skin); + Items.FERMENTED_SKIN.registerRecipe(); } if (config.MECHANICS_POISON_POTATO) plugin.getServer().addRecipe(poisonousPotato); @@ -856,31 +467,35 @@ public void loadCustomRecipes() { plugin.getServer().addRecipe(bowl); } if (config.MECHANICS_REINFORCED_ARMOR) { - plugin.getServer().addRecipe(reinforced_leather_boots); - plugin.getServer().addRecipe(reinforced_leather_chestplate); - plugin.getServer().addRecipe(reinforced_leather_leggings); - plugin.getServer().addRecipe(reinforced_leather_helmet); + Items.REINFORCED_LEATHER_HELMET.registerRecipe(); + Items.REINFORCED_LEATHER_TUNIC.registerRecipe(); + Items.REINFORCED_LEATHER_TROUSERS.registerRecipe(); + Items.REINFORCED_LEATHER_BOOTS.registerRecipe(); } if (config.LEGENDARY_GOLDARMORBUFF) { - plugin.getServer().addRecipe(gold_sabatons); - plugin.getServer().addRecipe(gold_guard); - plugin.getServer().addRecipe(gold_greaves); - plugin.getServer().addRecipe(gold_crown); + Items.GOLDEN_CROWN.registerRecipe(); + Items.GOLDEN_GUARD.registerRecipe(); + Items.GOLDEN_GREAVES.registerRecipe(); + Items.GOLDEN_SABATONS.registerRecipe(); } if (config.MECHANICS_SLOW_ARMOR) { - plugin.getServer().addRecipe(ironBoots); - plugin.getServer().addRecipe(ironChestplate); - plugin.getServer().addRecipe(ironLeggings); - plugin.getServer().addRecipe(ironHelmet); - plugin.getServer().addRecipe(diamondBoots); - plugin.getServer().addRecipe(diamondChestplate); - plugin.getServer().addRecipe(diamondLeggings); - plugin.getServer().addRecipe(diamondHelmet); + Items.IRON_BOOTS.registerRecipe(); + Items.IRON_CHESTPLATE.registerRecipe(); + Items.IRON_LEGGINGS.registerRecipe(); + Items.IRON_HELMET.registerRecipe(); + Items.DIAMOND_BOOTS.registerRecipe(); + Items.DIAMOND_CHESTPLATE.registerRecipe(); + Items.DIAMOND_LEGGINGS.registerRecipe(); + Items.DIAMOND_HELMET.registerRecipe(); + Items.NETHERITE_BOOTS.registerRecipe(); + Items.NETHERITE_CHESTPLATE.registerRecipe(); + Items.NETHERITE_LEGGINGS.registerRecipe(); + Items.NETHERITE_HELMET.registerRecipe(); } if (config.MECHANICS_MEDIC_KIT) { - plugin.getServer().addRecipe(medic_kit); + Items.MEDIC_KIT.registerRecipe(); } if (config.RECIPES_FISHING_ROD) { @@ -910,24 +525,24 @@ public void loadCustomRecipes() { if (config.RECIPES_COBWEB) plugin.getServer().addRecipe(cobweb); if (config.MECHANICS_RECURVED_BOW) { - plugin.getServer().addRecipe(recurvedBow); - plugin.getServer().addRecipe(recurvedCrossbow); + Items.RECURVE_BOW.registerRecipe(); + Items.RECURVE_CROSSBOW.registerRecipe(); } if (config.MECHANICS_GRAPPLING_HOOK) - plugin.getServer().addRecipe(grappling_hook); + Items.GRAPPLING_HOOK.registerRecipe(); if (config.MECHANICS_THIRST_PURIFY_WATER) { plugin.getServer().addRecipe(clean_water_furnace); plugin.getServer().addRecipe(clean_water_smoker); plugin.getServer().addRecipe(clean_water_camp); } if (config.MECHANICS_ENERGY_COFFEE_ENABLED) { - plugin.getServer().addRecipe(coffee_bean); - plugin.getServer().addRecipe(cold_milk); - plugin.getServer().addRecipe(hot_milk); - plugin.getServer().addRecipe(coffee); + Items.COFFEE_BEAN.registerRecipe(); + Items.COLD_MILK.registerRecipe(); + Items.HOT_MILK.registerRecipe(); + Items.COFFEE.registerRecipe(); } if (config.MECHANICS_COMPASS_WAYPOINT) { - plugin.getServer().addRecipe(compass_recipe); + Items.COMPASS.registerRecipe(); } } diff --git a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java index ac9d14b..e6330df 100644 --- a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java +++ b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java @@ -15,7 +15,7 @@ import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; public class WeatherTask extends BukkitRunnable { @@ -114,12 +114,12 @@ private void setWalkSpeed(Player player, double speed) { private boolean hasRainBoots(Player player) { ItemStack boots = player.getInventory().getBoots(); - return boots != null && Item.RAIN_BOOTS.compare(boots); + return boots != null && Items.RAIN_BOOTS.is(boots); } private boolean hasSnowBoots(Player player) { ItemStack boots = player.getInventory().getBoots(); - return boots != null && Item.SNOW_BOOTS.compare(boots); + return boots != null && Items.SNOW_BOOTS.is(boots); } } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java index 61fb88e..5dc284c 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java @@ -8,7 +8,7 @@ import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; public class BlazeSwordEffects extends BukkitRunnable { @@ -24,7 +24,7 @@ public BlazeSwordEffects(Survival plugin) { @Override public void run() { for (Player player : plugin.getServer().getOnlinePlayers()) { - if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.BLAZE_SWORD)) { + if (Items.BLAZE_SWORD.is(player.getInventory().getItemInMainHand())) { player.removePotionEffect(PotionEffectType.FIRE_RESISTANCE); player.addPotionEffect(this.FLAME); Location particleLoc = player.getLocation(); diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java index 8e0af10..769ee08 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java @@ -1,33 +1,32 @@ package tk.shanebee.survival.tasks.tool; import org.bukkit.Sound; +import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import java.util.Random; public class BlazeSwordSound extends BukkitRunnable { - private final Survival plugin; + private final Survival plugin; - public BlazeSwordSound(Survival plugin) { - this.plugin = plugin; - this.runTaskTimer(plugin, 1, 50); - } + public BlazeSwordSound(Survival plugin) { + this.plugin = plugin; + this.runTaskTimer(plugin, 1, 50); + } - @Override - public void run() { - for (Player player : plugin.getServer().getOnlinePlayers()) { - if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.BLAZE_SWORD)) { - Random rand = new Random(); - assert player.getLocation().getWorld() != null; - player.getLocation().getWorld().playSound( - player.getLocation(), Sound.ENTITY_BLAZE_AMBIENT, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - } - } - } + @Override + public void run() { + for (Player player : plugin.getServer().getOnlinePlayers()) { + if (Items.BLAZE_SWORD.is(player.getInventory().getItemInMainHand())) { + Random rand = new Random(); + World world = player.getWorld(); + world.playSound(player.getLocation(), Sound.ENTITY_BLAZE_AMBIENT, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + } + } + } } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java b/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java index 870cc31..e0165b0 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java @@ -12,8 +12,7 @@ import tk.shanebee.survival.Survival; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.PlayerManager; public class GiantBlade extends BukkitRunnable { @@ -57,14 +56,14 @@ public void run() { //TODO this guy needs some serious work Material mainType = mainItem.getType(); Material offType = offItem.getType(); - if (ItemManager.compare(mainItem, Item.ENDER_GIANT_BLADE)) { + if (Items.ENDER_GIANT_BLADE.is(mainItem)) { Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 1); assert particleLoc.getWorld() != null; particleLoc.getWorld().spawnParticle(Particle.CRIT, particleLoc, 10, 0.5, 0.5, 0.5); } - if (ItemManager.compare(offItem, Item.ENDER_GIANT_BLADE)) { + if (Items.ENDER_GIANT_BLADE.is(offItem)) { player.removePotionEffect(PotionEffectType.RESISTANCE); player.addPotionEffect(this.DAMAGE); Location particleLoc = player.getLocation(); diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java b/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java index 5de4a5c..120fe9c 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java @@ -7,8 +7,7 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; public class ObsidianMace extends BukkitRunnable { @@ -22,7 +21,7 @@ public ObsidianMace(Survival plugin) { @Override public void run() { for (Player player : plugin.getServer().getOnlinePlayers()) { - if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.OBSIDIAN_MACE)) { + if (Items.OBSIDIAN_MACE.is(player.getInventory().getItemInMainHand())) { player.removePotionEffect(PotionEffectType.SLOWNESS); player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 100, 1, false)); Location particleLoc = player.getLocation(); diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java b/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java index 406ff12..ded390e 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java @@ -5,8 +5,7 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; public class QuartzPickaxe extends BukkitRunnable { @@ -20,7 +19,7 @@ public QuartzPickaxe(Survival plugin) { @Override public void run() { for (Player player : plugin.getServer().getOnlinePlayers()) { - if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.QUARTZ_PICKAXE)) { + if (Items.QUARTZ_PICKAXE.is(player.getInventory().getItemInMainHand())) { player.removePotionEffect(PotionEffectType.HASTE); player.addPotionEffect(new PotionEffect(PotionEffectType.HASTE, 20, 9, false)); } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java index 5c3ab55..60276bc 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java @@ -6,7 +6,7 @@ import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; public class Valkyrie extends BukkitRunnable { @@ -19,8 +19,8 @@ public Valkyrie(Survival plugin) { @Override public void run() { - for (Player player : plugin.getServer().getOnlinePlayers()) { - if (ItemManager.compare(player.getInventory().getItemInMainHand(), Item.VALKYRIES_AXE)) { + for (Player player : this.plugin.getServer().getOnlinePlayers()) { + if (Items.VALKYRIES_AXE.is(player.getInventory().getItemInMainHand())) { Location particleLoc = player.getLocation(); particleLoc.setY(particleLoc.getY() + 1); assert particleLoc.getWorld() != null; diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index f76c32b..1ede7a1 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -1,7 +1,15 @@ package tk.shanebee.survival.util; import com.google.common.collect.ImmutableSet; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Particle; +import org.bukkit.Statistic; +import org.bukkit.Tag; +import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -10,8 +18,6 @@ import org.bukkit.metadata.Metadatable; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.item.Item; import java.util.ArrayList; import java.util.List; @@ -768,19 +774,6 @@ public static int getDurability(ItemStack item) { return ((Damageable) item.getItemMeta()).getDamage(); } - public static List getItemStackDura(Item item, int maxDurability) { - List itemStacks = new ArrayList<>(); - for (int i = 0; i < maxDurability; i++) { - ItemStack stack = ItemManager.get(item); - ItemMeta meta = stack.getItemMeta(); - assert meta != null; - ((Damageable) meta).setDamage(i); - stack.setItemMeta(meta); - itemStacks.add(stack); - } - return itemStacks; - } - /** Gets the minutes a player has played on the server * @param player The player to check * @return The number of minutes they have played on the server diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 9793399..92dbc7c 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -7,10 +7,9 @@ # model_data is the CustomModalData version of this item which represents the CustomModelData number in the resource pack # If you are using a custom resource pack, you can change this number to match -# repair_cost_multiplier = the amount that will multiply when repairing in an anvil -# -1 = does not require an anvil, can be repaired in a crafting table -# 0 = requires an anvil, but no multiplier -# >0 = requires an anvil, multiplier applied +# repair_cost = The number of experience levels to add to the base level cost when repairing, combining, +# or renaming this item with an anvil. Must be a non-negative integer, defaults to 0. +# See https://minecraft.wiki/w/Data_component_format#repair_cost for further details. # repair_percent = modifier for repair amount # Value must be between 0.0 and 1.0 (1.0 = full vanilla healing) @@ -26,5 +25,238 @@ # --NUTRITION-- # Nutrition values can be changed. They cannot be removed nor added to -# Deleting a value will reset to it's default value +# Deleting a value will reset to its default value # The values must be >= 0 + +items: + # TOOLS + compass: + name: "Compass" + repair_cost: 0 + repair_percent: 0.85 + firestriker: + name: "Firestriker" + repair_cost: 0 + repair_percent: 0.0 + grappling_hook: + name: "Grappling Hook" + repair_cost: 0 + repair_percent: 0.85 + hammer: + name: "Hammer" + repair_cost: 0 + repair_percent: 0.85 + hatchet: + name: "Hatchet" + repair_cost: 0 + repair_percent: 0.85 + mattock: + name: "Mattock" + repair_cost: 0 + repair_percent: 0.85 + medic_kit: + name: "Medic Kit" + repair_cost: 0 + repair_percent: 0.0 + recurve_bow: + name: "Recurve Bow" + repair_cost: 1 + repair_percent: 0.9 + recurve_crossbow: + name: "Recurve Crossbow" + repair_cost: 2 + repair_percent: 0.9 + shiv: + name: "Shiv" + repair_cost: 0 + repair_percent: 0.85 + + # SICKLES + diamond_sickle: + name: "Diamond Sickle" + repair_cost: 2 + repair_percent: 0.85 + max_damage: 1400 + flint_sickle: + name: "Flint Sickle" + repair_cost: 0 + repair_percent: 1.0 + max_damage: 700 + iron_sickle: + name: "Iron Sickle" + repair_cost: 1 + repair_percent: 0.9 + max_damage: 100 + stone_sickle: + name: "Stone Sickle" + repair_cost: 0 + repair_percent: 1.0 + max_damage: 50 + + # LEGENDARY TOOLS + blaze_sword: + name: "Blaze Sword" + repair_cost: 3 + repair_percent: 0.95 + ender_giant_blade: + name: "Ender Giant Blade" + repair_cost: 3 + repair_percent: 0.95 + obsidian_mace: + name: "Obsidian Mace" + repair_cost: 3 + repair_percent: 0.95 + quartz_pickaxe: + name: "Quartz Pickaxe" + repair_cost: 2 + repair_percent: 0.95 + valkyries_axe: + name: "Valkyries Axe" + repair_cost: 2 + repair_percent: 0.95 + + # ARMOR + snow_boots: + name: "Snow Boots" + repair_cost: 1 + repair_percent: 0.97 + rain_boots: + name: "Rain Boots" + repair_cost: 1 + repair_percent: 0.97 + diamond_helmet: + name: "Diamond Helmet" + repair_cost: 0 + repair_percent: 1.0 + diamond_chestplate: + name: "Diamond Chestplate" + repair_cost: 0 + repair_percent: 1.0 + diamond_leggings: + name: "Diamond Leggings" + repair_cost: 0 + repair_percent: 1.0 + diamond_boots: + name: "Diamond Boots" + repair_cost: 0 + repair_percent: 1.0 + iron_helmet: + name: "Iron Helmet" + repair_cost: 0 + repair_percent: 1.0 + iron_chestplate: + name: "Iron Chestplate" + repair_cost: 0 + repair_percent: 1.0 + iron_leggings: + name: "Iron Leggings" + repair_cost: 0 + repair_percent: 1.0 + iron_boots: + name: "Iron Boots" + repair_cost: 0 + repair_percent: 1.0 + golden_crown: + name: "Golden Crown" + repair_cost: 0 + repair_percent: 1.0 + golden_guard: + name: "Golden Guard" + repair_cost: 0 + repair_percent: 1.0 + golden_greaves: + name: "Golden Greaves" + repair_cost: 0 + repair_percent: 1.0 + golden_sabatons: + name: "Golden Sabatons" + repair_cost: 0 + repair_percent: 1.0 + netherite_helmet: + name: "Netherite Helmet" + repair_cost: 0 + repair_percent: 1.0 + netherite_chestplate: + name: "Netherite Chestplate" + repair_cost: 0 + repair_percent: 1.0 + netherite_leggings: + name: "Netherite Leggings" + repair_cost: 0 + repair_percent: 1.0 + netherite_boots: + name: "Netherite Boots" + repair_cost: 0 + repair_percent: 1.0 + beekeeper_helmet: + name: "Beekeeper Helmet" + repair_cost: 0 + repair_percent: 1.0 + beekeeper_chestplate: + name: "Beekeeper Chestplate" + repair_cost: 0 + repair_percent: 1.0 + beekeeper_leggings: + name: "Beekeeper Leggings" + repair_cost: 0 + repair_percent: 1.0 + beekeeper_boots: + name: "Beekeeper Boots" + repair_cost: 0 + repair_percent: 1.0 + reinforced_leather_helmet: + name: "Reinforced Leather Helmet" + repair_cost: 0 + repair_percent: 0.85 + reinforced_leather_tunic: + name: "Reinforced Leather Tunic" + repair_cost: 0 + repair_percent: 0.85 + reinforced_leather_trousers: + name: "Reinforced Leather Trousers" + repair_cost: 0 + repair_percent: 0.85 + reinforced_leather_boots: + name: "Reinforced Leather Boots" + repair_cost: 0 + repair_percent: 0.85 + + # BLOCKS + unlit_campfire: + name: "Campfire" + workbench: + name: "Workbench" + + # DRINKS + clean_water: + name: "Clean Water" + color: 1213666 + dirty_water: + name: "Dirty Water" + color: 12769874 + purified_Water: + name: "Purified Water" + color: 0x00FFFF + coffee: + name: "Coffee" + color: 9461779 + cold_milk: + name: "Cold Milk" + color: 16250871 + hot_milk: + name: "Hot Milk" + color: 15456977 + water_bowl: + name: "Water Bowl" + + # FOOD + suspicious_meat: + name: "Suspicious Meat" + + # MISC + breeding_egg: + name: "Breeding Egg" + coffee_bean: + name: "Coffee Bean" + fermented_skin: + name: "Fermented Skin" From 1fa713054c93d2ca7539fbb8987a7bdf3180de76 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 12:00:31 -0800 Subject: [PATCH 004/133] Item - add null check and error message - also fix purified water key --- src/main/java/tk/shanebee/survival/item/Item.java | 7 ++++++- src/main/resources/items.yml | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index c0543ea..d650751 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; +import tk.shanebee.survival.util.Utils; @SuppressWarnings("UnstableApiUsage") public abstract class Item { @@ -42,7 +43,11 @@ protected void setupDefaults(String key, ItemStack itemStack) { // Item Name String itemName = ITEM_CONFIG.getName(key); - itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); + if (itemName != null) { + itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); + } else { + Utils.log("&cFailed to load item name &r'&b" + key + "&r'"); + } // Max Damage int maxDamage = ITEM_CONFIG.getMaxDamage(key); diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 92dbc7c..aec1e37 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -234,7 +234,7 @@ items: dirty_water: name: "Dirty Water" color: 12769874 - purified_Water: + purified_water: name: "Purified Water" color: 0x00FFFF coffee: From 5724305f214107f1033ee47646e4cb703be8bd99 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 12:03:28 -0800 Subject: [PATCH 005/133] build.gradle.kts - update --- build.gradle.kts | 53 +++++++++++++++++++++++++---------- src/main/resources/plugin.yml | 2 +- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e5c47f6..f233090 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - `java-library` - `maven-publish` + id("java") + id("io.github.goooler.shadow") version "8.1.7" } repositories { @@ -34,21 +34,44 @@ dependencies { compileOnly("me.clip:placeholderapi:2.11.6") } -group = "com.shanebeestudios" -version = "3.15.0" -description = "SurvivalPlus" +// Where this builds on the server +val serverLocation = "1-21-4" +// Version of SurvivalPlus +val projectVersion = "1.0.0" + java.sourceCompatibility = JavaVersion.VERSION_21 -publishing { - publications.create("maven") { - from(components["java"]) - } -} +tasks { + register("server", Copy::class) { + dependsOn("shadowJar") + from("build/libs") { + include("SurvivalPlus-*.jar") + destinationDir = file("/Users/ShaneBee/Desktop/Server/${serverLocation}/plugins/") + } -tasks.withType() { - options.encoding = "UTF-8" -} + } + processResources { + expand("version" to projectVersion) + } + compileJava { + options.release = 21 + } + javadoc { + options.encoding = Charsets.UTF_8.name() + exclude("com/shanebeestudios/core/plugin") + (options as StandardJavadocDocletOptions).links( + "https://jd.papermc.io/paper/1.21.1/", + "https://jd.advntr.dev/api/4.17.0/" + ) -tasks.withType() { - options.encoding = "UTF-8" + } + shadowJar { + relocate("fr.mrmicky.fastboard", "com.shanebeestudios.survival.api.fastboard") + relocate("dev.jorel.commandapi", "com.shanebeestudios.survival.api.commandapi") + archiveFileName = "SurvivalPlus-${projectVersion}.jar" + } + jar { + dependsOn(shadowJar) + archiveFileName.set("SurvivalPlus.jar") + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 35bfe6b..776fb04 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: SurvivalPlus main: tk.shanebee.survival.Survival authors: [FattyMieo, ShaneBee] -version: '${project.version}' +version: '${version}' api-version: '1.15' softdepend: - PlaceholderAPI From 68e3f5df6466259003ebb064934b5df07445e605 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 12:37:00 -0800 Subject: [PATCH 006/133] Items - some cleanup and fix for the command --- .../shanebee/survival/commands/GiveItem.java | 10 +++-- .../java/tk/shanebee/survival/item/Item.java | 19 ++++---- .../java/tk/shanebee/survival/item/Items.java | 44 ++++++++++--------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/commands/GiveItem.java b/src/main/java/tk/shanebee/survival/commands/GiveItem.java index cd9c45b..28c19ed 100644 --- a/src/main/java/tk/shanebee/survival/commands/GiveItem.java +++ b/src/main/java/tk/shanebee/survival/commands/GiveItem.java @@ -1,6 +1,7 @@ package tk.shanebee.survival.commands; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.key.Key; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.command.Command; @@ -19,6 +20,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Locale; @SuppressWarnings("NullableProblems") public class GiveItem implements CommandExecutor, TabCompleter { @@ -44,14 +46,14 @@ public boolean onCommand(CommandSender sender, Command command, String s, String } catch (IllegalArgumentException ignore) { } try { - item = Items.valueOf(args[1].toUpperCase()); + item = Items.getByKey(args[1].toLowerCase(Locale.ROOT)); ItemStack itemStack = item.getItemStack(); itemStack.setAmount(amount); Location loc = player.getLocation(); loc.setY(loc.getY() + 1); - if (player.getInventory().addItem(itemStack).size() != 0) { + if (!player.getInventory().addItem(itemStack).isEmpty()) { player.getWorld().dropItem(loc, itemStack); } if (item != null) { @@ -79,8 +81,8 @@ public List onTabComplete(CommandSender sender, Command command, String if (args.length <= 1) return null; if (args.length == 2) { ArrayList matches = new ArrayList<>(); - for (Item item : Items.values()) { - String name = item.getKey().toString(); + for (Key key : Items.allItemKeys()) { + String name = key.toString(); if (StringUtil.startsWithIgnoreCase(name, args[1])) { matches.add(name); } diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index d650751..a5993bd 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.util.Utils; -@SuppressWarnings("UnstableApiUsage") +@SuppressWarnings({"UnstableApiUsage", "PatternValidation"}) public abstract class Item { protected static final ItemConfig ITEM_CONFIG = new ItemConfig(); @@ -21,7 +21,7 @@ public abstract class Item { // Non-official keys protected static final NamespacedKey BASE_MOVEMENT_SPEED = NamespacedKey.minecraft("base_movement_speed"); - private Key modelKey; + private Key key; protected NamespacedKey recipeKey; private ItemStack itemStack; private double repairPercent; // TODO figure this out @@ -36,17 +36,18 @@ public ItemStack getItemStack(int amount) { return clone; } + @SuppressWarnings("PatternValidation") protected void setupDefaults(String key, ItemStack itemStack) { - this.modelKey = Key.key("survival_plus", key); - this.recipeKey = NamespacedKey.fromString("survival_plus:" + key); - itemStack.setData(DataComponentTypes.ITEM_MODEL, this.modelKey); + this.key = Key.key("survival_plus", key); + this.recipeKey = NamespacedKey.fromString(this.key.toString()); + itemStack.setData(DataComponentTypes.ITEM_MODEL, this.key); // Item Name String itemName = ITEM_CONFIG.getName(key); if (itemName != null) { itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); } else { - Utils.log("&cFailed to load item name &r'&b" + key + "&r'"); + Utils.log("&cFailed to load item name for item &r'&b" + key + "&r'"); } // Max Damage @@ -64,7 +65,7 @@ protected void setupDefaults(String key, ItemStack itemStack) { // Repair Percent this.repairPercent = ITEM_CONFIG.getRepairPercent(key); this.itemStack = itemStack; - Items.ALL_ITEMS.put(key, this); + Items.ALL_ITEMS.put(this.key, this); } public void registerRecipe() { @@ -73,13 +74,13 @@ public void registerRecipe() { public boolean is(ItemStack itemStack) { if (itemStack.hasData(DataComponentTypes.ITEM_MODEL)) { Key data = itemStack.getData(DataComponentTypes.ITEM_MODEL); - return data != null && data.equals(this.modelKey); + return data != null && data.equals(this.key); } return false; } public Key getKey() { - return this.modelKey; + return this.key; } } diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/tk/shanebee/survival/item/Items.java index 5675140..15f12d9 100644 --- a/src/main/java/tk/shanebee/survival/item/Items.java +++ b/src/main/java/tk/shanebee/survival/item/Items.java @@ -1,5 +1,7 @@ package tk.shanebee.survival.item; +import io.papermc.paper.datacomponent.DataComponentTypes; +import net.kyori.adventure.key.Key; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -39,16 +41,18 @@ import tk.shanebee.survival.item.items.tools.Shiv; import tk.shanebee.survival.item.items.tools.Sickle; -import java.util.Collection; import java.util.HashMap; +import java.util.Locale; import java.util.Map; +import java.util.Set; /** * Custom SurvivalPlus items */ +@SuppressWarnings("UnstableApiUsage") public class Items { - static final Map ALL_ITEMS = new HashMap<>(); + static final Map ALL_ITEMS = new HashMap<>(); // TOOLS public static final Item HATCHET = new Hatchet(); @@ -130,35 +134,33 @@ public class Items { // TODO Experimental public static final Item PERSISTENT_TORCH = null; + public static Set allItemKeys() { + return ALL_ITEMS.keySet(); + } + /** - * Get an {@link Item} based on a key + * Get an {@link Item} by {@link Key} * - * @param value Key for item - * @return Item based on key + * @param key Key of item + * @return Item if available */ - public static Item valueOf(String value) { - if (ALL_ITEMS.containsKey(value.toLowerCase())) { - return ALL_ITEMS.get(value.toLowerCase()); - } - return null; + @SuppressWarnings("PatternValidation") + @Nullable + public static Item getByKey(@NotNull String key) { + return ALL_ITEMS.get(Key.key(key.toLowerCase(Locale.ROOT))); } /** - * Get a collection of all registered {@link Item Items} + * Get an {@link Item} from an {@link ItemStack} * - * @return Collection of all registered Items + * @param itemStack ItemStack to grab item from + * @return Item if ItemStack has linked item */ - public static Collection values() { - return ALL_ITEMS.values(); - } - @Nullable public static Item getFromStack(@NotNull ItemStack itemStack) { - // TODO refactor this to use keys instead of strings - for (Item item : ALL_ITEMS.values()) { - if (item.is(itemStack)) { - return item; - } + if (itemStack.hasData(DataComponentTypes.ITEM_MODEL)) { + Key data = itemStack.getData(DataComponentTypes.ITEM_MODEL); + if (data != null) return ALL_ITEMS.get(data); } return null; } From 0473b3f66f8c44b712ef36b1dd4e6a80b0c56085 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 12:38:43 -0800 Subject: [PATCH 007/133] NoPos.java - remove, can be done with a gamerule --- .../tk/shanebee/survival/config/Config.java | 2 - .../survival/listeners/EventManager.java | 10 -- .../survival/listeners/server/NoPos.java | 105 ------------------ src/main/resources/config.yml | 5 +- 4 files changed, 1 insertion(+), 121 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/listeners/server/NoPos.java diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index fcd6b84..011fd65 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -24,7 +24,6 @@ public class Config { public boolean RESOURCE_PACK_NOTIFY; public int LOCAL_CHAT_DISTANCE; - public boolean NO_POS; public boolean WELCOME_GUIDE_ENABLED; public boolean WELCOME_GUIDE_NEW_PLAYERS; @@ -292,7 +291,6 @@ private void loadSettings() { this.RESOURCE_PACK_NOTIFY = settings.getBoolean("MultiWorld.NotifyMessage"); this.LOCAL_CHAT_DISTANCE = settings.getInt("LocalChatDist"); - this.NO_POS = settings.getBoolean("NoPos"); // WELCOME GUIDE this.WELCOME_GUIDE_ENABLED = settings.getBoolean("WelcomeGuide.Enabled"); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index 02fa3e8..bbe4390 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -9,7 +9,6 @@ import tk.shanebee.survival.listeners.block.BurnoutTorches; import tk.shanebee.survival.listeners.block.Campfire; import tk.shanebee.survival.listeners.block.Chairs; -import tk.shanebee.survival.listeners.block.NoAnvil; import tk.shanebee.survival.listeners.block.SnowGeneration; import tk.shanebee.survival.listeners.block.SnowballThrow; import tk.shanebee.survival.listeners.block.WorkbenchShare; @@ -26,7 +25,6 @@ import tk.shanebee.survival.listeners.server.Guide; import tk.shanebee.survival.listeners.server.InventoryUpdate; import tk.shanebee.survival.listeners.server.LocalChat; -import tk.shanebee.survival.listeners.server.NoPos; import tk.shanebee.survival.listeners.server.RecipeDiscovery; import tk.shanebee.survival.listeners.server.SetResourcePack; import tk.shanebee.survival.util.Utils; @@ -127,14 +125,6 @@ public void registerEvents() { if (config.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED) pm.registerEvents(new ChestPigmen(this.plugin), this.plugin); - if (config.NO_POS) { - if (Utils.isRunningMinecraft(1, 16)) { - Utils.log("&7NoPos &ccurrently broken. &7Please use the &breducedDebugInfo &7gamerule for the time being"); - } else { - Bukkit.getPluginManager().registerEvents(new NoPos(), this.plugin); - Utils.log("&7NoPos &aimplemented &7- F3 coordinates are disabled!"); - } - } if (config.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED) { Bukkit.getPluginManager().registerEvents(new BeeKeeperSuit(), this.plugin); } diff --git a/src/main/java/tk/shanebee/survival/listeners/server/NoPos.java b/src/main/java/tk/shanebee/survival/listeners/server/NoPos.java deleted file mode 100644 index 2aae941..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/server/NoPos.java +++ /dev/null @@ -1,105 +0,0 @@ -package tk.shanebee.survival.listeners.server; - -/** - * Originally by Rolyndev's plugin, NoPos - * Modified and implemented by FattyMieo - * Thanks to Rolyndev for allowing implementation! -**/ - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerGameModeChangeEvent; -import org.bukkit.event.player.PlayerJoinEvent; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -public class NoPos implements Listener { - @EventHandler - private void onJoin(PlayerJoinEvent e) { - Player player = e.getPlayer(); - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) - disableF3(player); - } - - @EventHandler - private void onGamemodeChange(PlayerGameModeChangeEvent e) { - Player player = e.getPlayer(); - if (e.getNewGameMode() == GameMode.ADVENTURE || e.getNewGameMode() == GameMode.SURVIVAL) { - disableF3(player); - } else { - enableF3(player); - } - } - - @EventHandler - private void onWorldChange(PlayerChangedWorldEvent e) { - Player player = e.getPlayer(); - if (player.getGameMode() == GameMode.ADVENTURE || player.getGameMode() == GameMode.SURVIVAL) { - disableF3(player); - } - } - - /** - * Disable a player's coordinates in their Minecraft Debug screen - * - * @param player The player to disable coords for - */ - @SuppressWarnings("WeakerAccess") - public static void disableF3(Player player) { - try { - Class packetClass = getNMSClass("PacketPlayOutEntityStatus"); - Constructor packetConstructor = packetClass.getConstructor(getNMSClass("Entity"), Byte.TYPE); - Object packet = packetConstructor.newInstance(getHandle(player), (byte) 22); - Method sendPacket = getNMSClass("PlayerConnection").getMethod("sendPacket", getNMSClass("Packet")); - sendPacket.invoke(getConnection(player), packet); - } catch (Exception e) { - Bukkit.getConsoleSender().sendMessage("[SurvivalPlus] " + ChatColor.RED + e.getMessage()); - } - } - - /** - * Enable a player's coordinates in their Minecraft Debug screen - * - * @param player The player to enable coords for - */ - @SuppressWarnings("WeakerAccess") - public static void enableF3(Player player) { - try { - Class packetClass = getNMSClass("PacketPlayOutEntityStatus"); - Constructor packetConstructor = packetClass.getConstructor(getNMSClass("Entity"), Byte.TYPE); - Object packet = packetConstructor.newInstance(getHandle(player), (byte) 23); - Method sendPacket = getNMSClass("PlayerConnection").getMethod("sendPacket", getNMSClass("Packet")); - sendPacket.invoke(getConnection(player), packet); - } catch (Exception e) { - Bukkit.getConsoleSender().sendMessage("[SurvivalPlus] " + ChatColor.RED + e.getMessage()); - } - } - - private static Class getNMSClass(String nmsClassString) - throws ClassNotFoundException { - String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3] + "."; - String name = "net.minecraft.server." + version + nmsClassString; - return Class.forName(name); - } - - private static Object getConnection(Player player) - throws SecurityException, NoSuchMethodException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { - Field conField = getHandle(player).getClass().getField("playerConnection"); - return conField.get(getHandle(player)); - } - - private static Object getHandle(Player player) - throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { - Method getHandle = player.getClass().getMethod("getHandle"); - return getHandle.invoke(player); - } - -} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 155d686..22f6859 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -20,9 +20,6 @@ MultiWorld: # -1 = disabled LocalChatDist: -1 -# Disable player's coords in the Minecraft debug screen -NoPos: true - # When a player joins, they will get a link to a simple starter guide WelcomeGuide: Enabled: true @@ -285,7 +282,7 @@ Mechanics: # Currently disabled, do not use!!! SnowGenerationRevamp: false - + FarmingProducts: Bread: true Cookie: true From bee26164b9839acb3dbda84faeda08878e0445f1 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 13:18:28 -0800 Subject: [PATCH 008/133] Item - use vanilla textures for some items --- src/main/java/tk/shanebee/survival/item/Item.java | 12 +++++++++--- .../survival/item/items/armor/ArmorPiece.java | 13 +++++++------ .../survival/item/items/armor/RainBoots.java | 2 +- .../survival/item/items/armor/SnowBoots.java | 2 +- .../survival/item/items/blocks/Workbench.java | 2 +- .../shanebee/survival/item/items/drinks/Coffee.java | 2 +- .../survival/item/items/drinks/ColdMilk.java | 2 +- .../survival/item/items/drinks/HotMilk.java | 2 +- .../shanebee/survival/item/items/drinks/Water.java | 2 +- .../survival/item/items/misc/BreedingEgg.java | 2 +- .../survival/item/items/tools/RecurveBow.java | 2 +- .../survival/item/items/tools/RecurveCrossbow.java | 2 +- 12 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index a5993bd..d8e8333 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -36,17 +36,23 @@ public ItemStack getItemStack(int amount) { return clone; } - @SuppressWarnings("PatternValidation") protected void setupDefaults(String key, ItemStack itemStack) { + setupDefaults(key, itemStack, false); + } + + @SuppressWarnings("PatternValidation") + protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaModel) { this.key = Key.key("survival_plus", key); this.recipeKey = NamespacedKey.fromString(this.key.toString()); - itemStack.setData(DataComponentTypes.ITEM_MODEL, this.key); + if (!vanillaModel) { + itemStack.setData(DataComponentTypes.ITEM_MODEL, this.key); + } // Item Name String itemName = ITEM_CONFIG.getName(key); if (itemName != null) { itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); - } else { + } else if (!vanillaModel) { Utils.log("&cFailed to load item name for item &r'&b" + key + "&r'"); } diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java index 275507e..33f6f45 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java @@ -29,27 +29,28 @@ public ArmorPiece(ArmorType armorType, ArmorMaterial armorMaterial, double armor this.armorMaterial = armorMaterial; ItemStack itemStack = armorMaterial.getItemType(armorType).createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - AttributeModifier armorMod = new AttributeModifier(NamespacedKey.minecraft("armor." + armorType.key), armor, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); + NamespacedKey modKey = NamespacedKey.minecraft("armor." + armorType.key); + + AttributeModifier armorMod = new AttributeModifier(modKey, armor, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); itemMeta.addAttributeModifier(Attribute.ARMOR, armorMod); - AttributeModifier speedMod = new AttributeModifier(BASE_MOVEMENT_SPEED, moveSpeed, Operation.ADD_SCALAR, EquipmentSlotGroup.FEET); + AttributeModifier speedMod = new AttributeModifier(modKey, moveSpeed, Operation.ADD_SCALAR, EquipmentSlotGroup.FEET); itemMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, speedMod); if (toughness > 0) { - AttributeModifier toughnessMod = new AttributeModifier(BASE_ATTACK_TOUGH, toughness, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); + AttributeModifier toughnessMod = new AttributeModifier(modKey, toughness, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, toughnessMod); } if (knockback > 0) { - AttributeModifier knockbackMod = new AttributeModifier(BASE_ATTACK_KNOCKBACK, knockback, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); + AttributeModifier knockbackMod = new AttributeModifier(modKey, knockback, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, knockbackMod); } itemStack.setItemMeta(itemMeta); - setupDefaults(armorMaterial.getKey(armorType), itemStack); + setupDefaults(armorMaterial.getKey(armorType), itemStack, this.armorMaterial != ArmorMaterial.GOLDEN && this.armorMaterial != ArmorMaterial.LEATHER); } @SuppressWarnings({"DataFlowIssue", "deprecation"}) diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java index bf3fbed..b4b9b62 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java @@ -18,7 +18,7 @@ public RainBoots() { itemStack.setData(DataComponentTypes.DYED_COLOR, DyedItemColor.dyedItemColor(Color.fromRGB(214, 231, 3), false)); - setupDefaults("rain_boots", itemStack); + setupDefaults("rain_boots", itemStack, true); } diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java index e94d94b..13d80b5 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java @@ -18,7 +18,7 @@ public SnowBoots() { itemStack.setData(DataComponentTypes.DYED_COLOR, DyedItemColor.dyedItemColor(Color.fromRGB(158, 201, 202), false)); - setupDefaults("snow_boots", itemStack); + setupDefaults("snow_boots", itemStack, true); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java b/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java index 5180f9f..3b82486 100644 --- a/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java +++ b/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java @@ -15,7 +15,7 @@ public class Workbench extends Item { public Workbench() { ItemStack itemStack = ItemType.CRAFTING_TABLE.createItemStack(); - setupDefaults("workbench", itemStack); + setupDefaults("workbench", itemStack, true); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java index 8cadba2..29faa74 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java @@ -24,7 +24,7 @@ public Coffee() { ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor("coffee"))); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults("coffee", itemStack); + setupDefaults("coffee", itemStack, true); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java index 5960543..ea1b1ab 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java @@ -20,7 +20,7 @@ public ColdMilk() { ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults("cold_milk", itemStack); + setupDefaults("cold_milk", itemStack, true); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java index 6e2921b..2827d50 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java @@ -20,7 +20,7 @@ public HotMilk() { ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults("hot_milk", itemStack); + setupDefaults("hot_milk", itemStack, true); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java index 440d1e5..63540b8 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java @@ -20,7 +20,7 @@ public Water(String key) { ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor(key))); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults(key, itemStack); + setupDefaults(key, itemStack, true); } } diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java b/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java index 7fc0d2a..cebb9b3 100644 --- a/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java +++ b/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java @@ -9,7 +9,7 @@ public class BreedingEgg extends Item { public BreedingEgg() { ItemStack itemStack = ItemType.EGG.createItemStack(); - setupDefaults("breeding_egg", itemStack); + setupDefaults("breeding_egg", itemStack, true); } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java index 341145d..73cdcb0 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java @@ -17,7 +17,7 @@ public RecurveBow() { ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.addEnchant(Enchantment.PUNCH, 1, true); itemStack.setItemMeta(itemMeta); - setupDefaults("recurve_bow", itemStack); + setupDefaults("recurve_bow", itemStack, true); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java index 80d850e..24b4be1 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java @@ -17,7 +17,7 @@ public RecurveCrossbow() { ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.addEnchant(Enchantment.PUNCH, 1, true); itemStack.setItemMeta(itemMeta); - setupDefaults("recurve_crossbow", itemStack); + setupDefaults("recurve_crossbow", itemStack, true); } @Override From 2f2330d36fac3f9c89503bc634c3a57135b86769 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 13:40:52 -0800 Subject: [PATCH 009/133] Item - fix naming issue for potion based items --- src/main/java/tk/shanebee/survival/item/Item.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index d8e8333..4db7eb5 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -51,7 +51,12 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod // Item Name String itemName = ITEM_CONFIG.getName(key); if (itemName != null) { - itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); + if (itemStack.hasData(DataComponentTypes.POTION_CONTENTS)) { + // Stupid workaround because potion names override item_name + itemStack.setData(DataComponentTypes.CUSTOM_NAME, MINI.deserialize("" + itemName)); + } else { + itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); + } } else if (!vanillaModel) { Utils.log("&cFailed to load item name for item &r'&b" + key + "&r'"); } From c68e38bebb20bd17c6e1259b4ae7d6d8e3de1304 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 13:42:53 -0800 Subject: [PATCH 010/133] WaterBowl - fix potion info showing --- .../java/tk/shanebee/survival/item/items/drinks/WaterBowl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java b/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java index 2035cb3..d4a685e 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.drinks; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.meta.PotionMeta; @@ -13,6 +14,7 @@ public WaterBowl() { ItemStack itemStack = ItemType.POTION.createItemStack(); PotionMeta itemMeta = ((PotionMeta) itemStack.getItemMeta()); itemMeta.setBasePotionType(PotionType.WATER); + itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); setupDefaults("water_bowl", itemStack); } From 30a863b71d74e9b66f3d30868f76d34373232e01 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 13:51:35 -0800 Subject: [PATCH 011/133] BeekeeperPiece - use vanilla model --- .../tk/shanebee/survival/item/items/armor/BeekeeperPiece.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java index 3f585f3..d06baf2 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java @@ -28,7 +28,7 @@ public BeekeeperPiece(ArmorType armorType) { itemStack.setItemMeta(leatherArmorMeta); } } - setupDefaults(key, itemStack); + setupDefaults(key, itemStack, true); } @Override From 274939ec04f49fb296b563157b461fd5dc54986a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 13:55:45 -0800 Subject: [PATCH 012/133] items.yml - forgot beekeeper colors --- src/main/resources/items.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index aec1e37..fc1d56e 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -192,18 +192,22 @@ items: name: "Beekeeper Helmet" repair_cost: 0 repair_percent: 1.0 + color: 16777215 beekeeper_chestplate: name: "Beekeeper Chestplate" repair_cost: 0 repair_percent: 1.0 + color: 16777215 beekeeper_leggings: name: "Beekeeper Leggings" repair_cost: 0 repair_percent: 1.0 + color: 16777215 beekeeper_boots: name: "Beekeeper Boots" repair_cost: 0 repair_percent: 1.0 + color: 16777215 reinforced_leather_helmet: name: "Reinforced Leather Helmet" repair_cost: 0 From 57d0846ea6728e050d96835819305360672b56b3 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 14:42:03 -0800 Subject: [PATCH 013/133] ReinforcedPiece - fix up model --- .../item/items/armor/ReinforcedPiece.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java index ddfeec1..6278bed 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java @@ -1,11 +1,15 @@ package tk.shanebee.survival.item.items.armor; +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.Equippable; +import net.kyori.adventure.key.Key; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; @@ -24,10 +28,14 @@ public ReinforcedPiece(ArmorType armorType) { ItemStack itemStack = itemType().createItemStack(); if (armorType == ArmorType.BOOTS) { ItemMeta itemMeta = itemStack.getItemMeta(); - AttributeModifier i_leatherBootsArmor = new AttributeModifier(NamespacedKey.minecraft("armor.boots"), 2, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); + AttributeModifier i_leatherBootsArmor = new AttributeModifier(NamespacedKey.minecraft("armor." + armorType.getKey()), 2, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); itemMeta.addAttributeModifier(Attribute.ARMOR, i_leatherBootsArmor); itemStack.setItemMeta(itemMeta); } + itemStack.setData(DataComponentTypes.EQUIPPABLE, + Equippable.equippable(getSlotGroup()) + .assetId(Key.key("survival_plus:reinforced_leather")) + .build()); setupDefaults(key(), itemStack); } @@ -74,6 +82,15 @@ private String key() { }; } + private EquipmentSlot getSlotGroup() { + return switch (this.armorType) { + case HELMET -> EquipmentSlot.HEAD; + case CHESTPLATE -> EquipmentSlot.CHEST; + case LEGGINGS -> EquipmentSlot.LEGS; + case BOOTS -> EquipmentSlot.FEET; + }; + } + private ItemType itemType() { return switch (this.armorType) { case HELMET -> ItemType.LEATHER_HELMET; From 4829212fdd115751f21f34c89c22394f0839b3c0 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 14:52:00 -0800 Subject: [PATCH 014/133] Initial resource pack work --- build.gradle.kts | 8 + resource_pack/SP-1.14-3.0.0.zip | Bin 145557 -> 0 bytes resource_pack/SR-1.14-Beta5.zip | Bin 138626 -> 0 bytes .../assets/survival_plus/equipment/gold.json | 19 ++ .../equipment/reinforced_leather.json | 25 +++ .../survival_plus/items/blaze_sword.json | 6 + .../survival_plus/items/diamond_sickle.json | 6 + .../items/ender_giant_blade.json | 6 + .../survival_plus/items/firestriker.json | 6 + .../survival_plus/items/flint_sickle.json | 6 + .../survival_plus/items/grappling_hook.json | 6 + .../assets/survival_plus/items/hammer.json | 6 + .../assets/survival_plus/items/hatchet.json | 6 + .../survival_plus/items/iron_sickle.json | 6 + .../assets/survival_plus/items/mattock.json | 6 + .../assets/survival_plus/items/medic_kit.json | 6 + .../survival_plus/items/obsidian_mace.json | 6 + .../survival_plus/items/quartz_pickaxe.json | 6 + .../items/reinforced_leather_boots.json | 12 ++ .../items/reinforced_leather_helmet.json | 12 ++ .../items/reinforced_leather_trousers.json | 12 ++ .../items/reinforced_leather_tunic.json | 12 ++ .../assets/survival_plus/items/rock.json | 6 + .../assets/survival_plus/items/shiv.json | 6 + .../survival_plus/items/stone_sickle.json | 6 + .../survival_plus/items/suspicious_meat.json | 6 + .../survival_plus/items/unlit_campfire.json | 6 + .../survival_plus/items/valkyries_axe.json | 6 + .../survival_plus/items/water_bowl.json | 6 + .../models/item/blaze_sword.json | 6 + .../models/item/diamond_sickle.json | 6 + .../models/item/ender_giant_blade.json | 6 + .../models/item/firestriker.json | 6 + .../models/item/flint_sickle.json | 6 + .../models/item/grappling_hook.json | 6 + .../survival_plus/models/item/hammer.json | 6 + .../survival_plus/models/item/hatchet.json | 6 + .../models/item/iron_sickle.json | 6 + .../survival_plus/models/item/mattock.json | 6 + .../survival_plus/models/item/medic_kit.json | 200 ++++++++++++++++++ .../models/item/obsidian_mace.json | 6 + .../models/item/quartz_pickaxe.json | 6 + .../models/item/reinforced_leather_boots.json | 6 + .../item/reinforced_leather_chestplate.json | 6 + .../item/reinforced_leather_helmet.json | 6 + .../item/reinforced_leather_leggings.json | 6 + .../survival_plus/models/item/rock.json | 6 + .../survival_plus/models/item/shiv.json | 6 + .../models/item/stone_sickle.json | 6 + .../models/item/suspicious_meat.json | 6 + .../models/item/unlit_campfire.json | 6 + .../models/item/valkyries_axe.json | 6 + .../survival_plus/models/item/water_bowl.json | 6 + .../entity/equipment/humanoid/gold.png | Bin 0 -> 3973 bytes .../equipment/humanoid/reinforced_leather.png | Bin 0 -> 4575 bytes .../humanoid_leggings/reinforced_leather.png | Bin 0 -> 3638 bytes .../textures/item/blaze_sword.png | Bin 0 -> 3457 bytes .../textures/item/diamond_sickle.png | Bin 0 -> 218 bytes .../textures/item/ender_giant_blade.png | Bin 0 -> 3114 bytes .../textures/item/firestriker.png | Bin 0 -> 3004 bytes .../textures/item/flint_sickle.png | Bin 0 -> 209 bytes .../textures/item/golden_helmet.png | Bin 0 -> 3025 bytes .../textures/item/grappling_hook.png | Bin 0 -> 1943 bytes .../survival_plus/textures/item/hammer.png | Bin 0 -> 2996 bytes .../survival_plus/textures/item/hatchet.png | Bin 0 -> 3006 bytes .../textures/item/iron_sickle.png | Bin 0 -> 214 bytes .../survival_plus/textures/item/mattock.png | Bin 0 -> 3094 bytes .../survival_plus/textures/item/medic_kit.png | Bin 0 -> 1245 bytes .../textures/item/melon_slice.png | Bin 0 -> 4079 bytes .../textures/item/obsidian_mace.png | Bin 0 -> 3055 bytes .../textures/item/quartz_pickaxe.png | Bin 0 -> 3094 bytes .../item/reinforced_leather_boots.png | Bin 0 -> 2934 bytes .../item/reinforced_leather_chestplate.png | Bin 0 -> 2984 bytes .../item/reinforced_leather_helmet.png | Bin 0 -> 2939 bytes .../item/reinforced_leather_leggings.png | Bin 0 -> 2964 bytes .../survival_plus/textures/item/rock.png | Bin 0 -> 553 bytes .../survival_plus/textures/item/shiv.png | Bin 0 -> 2976 bytes .../textures/item/stone_sickle.png | Bin 0 -> 217 bytes .../textures/item/suspicious_meat.png | Bin 0 -> 384 bytes .../textures/item/unlit_campfire.png | Bin 0 -> 656 bytes .../textures/item/valkyries_axe.png | Bin 0 -> 3118 bytes .../textures/item/water_bowl.png | Bin 0 -> 2961 bytes src/main/resources/resource-pack/license.txt | 14 ++ src/main/resources/resource-pack/pack.mcmeta | 6 + src/main/resources/resource-pack/pack.png | Bin 0 -> 8137 bytes 85 files changed, 578 insertions(+) delete mode 100644 resource_pack/SP-1.14-3.0.0.zip delete mode 100644 resource_pack/SR-1.14-Beta5.zip create mode 100644 src/main/resources/resource-pack/assets/survival_plus/equipment/gold.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/blaze_sword.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/diamond_sickle.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/ender_giant_blade.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/firestriker.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/flint_sickle.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/grappling_hook.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/hammer.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/hatchet.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/iron_sickle.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/mattock.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/medic_kit.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/obsidian_mace.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/quartz_pickaxe.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/rock.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/shiv.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/stone_sickle.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/suspicious_meat.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/unlit_campfire.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/valkyries_axe.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/water_bowl.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/medic_kit.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_boots.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_chestplate.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_helmet.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_leggings.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/rock.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/suspicious_meat.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/unlit_campfire.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/water_bowl.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/entity/equipment/humanoid/gold.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/entity/equipment/humanoid/reinforced_leather.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/entity/equipment/humanoid_leggings/reinforced_leather.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/blaze_sword.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/diamond_sickle.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/ender_giant_blade.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/firestriker.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/flint_sickle.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/golden_helmet.png create mode 100644 src/main/resources/resource-pack/assets/survival_plus/textures/item/grappling_hook.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/hammer.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/hatchet.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/iron_sickle.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/mattock.png create mode 100644 src/main/resources/resource-pack/assets/survival_plus/textures/item/medic_kit.png create mode 100644 src/main/resources/resource-pack/assets/survival_plus/textures/item/melon_slice.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/obsidian_mace.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/quartz_pickaxe.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/reinforced_leather_boots.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/reinforced_leather_chestplate.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/reinforced_leather_helmet.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/reinforced_leather_leggings.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/rock.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/shiv.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/stone_sickle.png create mode 100644 src/main/resources/resource-pack/assets/survival_plus/textures/item/suspicious_meat.png create mode 100644 src/main/resources/resource-pack/assets/survival_plus/textures/item/unlit_campfire.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/valkyries_axe.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/water_bowl.png create mode 100755 src/main/resources/resource-pack/license.txt create mode 100755 src/main/resources/resource-pack/pack.mcmeta create mode 100644 src/main/resources/resource-pack/pack.png diff --git a/build.gradle.kts b/build.gradle.kts index f233090..41e760d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -50,8 +50,16 @@ tasks { } } + register("resourcepack", Zip::class) { + archiveFileName = "SurvivalPlusResourcePack-${projectVersion}.zip" + from("src/main/resources/resource-pack") { + exclude("**/.DS_Store") + destinationDirectory = file("build/libs/") + } + } processResources { expand("version" to projectVersion) + exclude("resource-pack/*") } compileJava { options.release = 21 diff --git a/resource_pack/SP-1.14-3.0.0.zip b/resource_pack/SP-1.14-3.0.0.zip deleted file mode 100644 index ef555200b12a6248d8d01fd61e5da918934cc0be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145557 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 diff --git a/src/main/resources/resource-pack/assets/survival_plus/equipment/gold.json b/src/main/resources/resource-pack/assets/survival_plus/equipment/gold.json new file mode 100644 index 0000000..4538465 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/equipment/gold.json @@ -0,0 +1,19 @@ +{ + "layers": { + "horse_body": [ + { + "texture": "minecraft:gold" + } + ], + "humanoid": [ + { + "texture": "survival_plus:gold" + } + ], + "humanoid_leggings": [ + { + "texture": "minecraft:gold" + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json b/src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json new file mode 100644 index 0000000..7cfe162 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json @@ -0,0 +1,25 @@ +{ + "layers": { + "horse_body": [ + { + "texture": "minecraft:leather" + } + ], + "humanoid": [ + { + "texture": "survival_plus:reinforced_leather", + "dyeable": { + "color_when_undyed": -6265536 + } + } + ], + "humanoid_leggings": [ + { + "texture": "survival_plus:reinforced_leather", + "dyeable": { + "color_when_undyed": -6265536 + } + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/blaze_sword.json b/src/main/resources/resource-pack/assets/survival_plus/items/blaze_sword.json new file mode 100644 index 0000000..36f834e --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/blaze_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/blaze_sword" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/diamond_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/items/diamond_sickle.json new file mode 100644 index 0000000..1f737af --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/diamond_sickle.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/diamond_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/ender_giant_blade.json b/src/main/resources/resource-pack/assets/survival_plus/items/ender_giant_blade.json new file mode 100644 index 0000000..9da87c2 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/ender_giant_blade.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/ender_giant_blade" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/firestriker.json b/src/main/resources/resource-pack/assets/survival_plus/items/firestriker.json new file mode 100644 index 0000000..5651bca --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/firestriker.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/firestriker" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/flint_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/items/flint_sickle.json new file mode 100644 index 0000000..a80584d --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/flint_sickle.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/flint_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/grappling_hook.json b/src/main/resources/resource-pack/assets/survival_plus/items/grappling_hook.json new file mode 100644 index 0000000..9709e8c --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/grappling_hook.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/grappling_hook" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/hammer.json b/src/main/resources/resource-pack/assets/survival_plus/items/hammer.json new file mode 100644 index 0000000..8e5306b --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/hammer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/hammer" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/hatchet.json b/src/main/resources/resource-pack/assets/survival_plus/items/hatchet.json new file mode 100644 index 0000000..9ca1f99 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/hatchet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/hatchet" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/iron_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/items/iron_sickle.json new file mode 100644 index 0000000..e104cbc --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/iron_sickle.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/iron_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/mattock.json b/src/main/resources/resource-pack/assets/survival_plus/items/mattock.json new file mode 100644 index 0000000..1b4bf94 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/mattock.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/mattock" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/medic_kit.json b/src/main/resources/resource-pack/assets/survival_plus/items/medic_kit.json new file mode 100644 index 0000000..b823655 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/medic_kit.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/medic_kit" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/obsidian_mace.json b/src/main/resources/resource-pack/assets/survival_plus/items/obsidian_mace.json new file mode 100644 index 0000000..4901beb --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/obsidian_mace.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/obsidian_mace" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/quartz_pickaxe.json b/src/main/resources/resource-pack/assets/survival_plus/items/quartz_pickaxe.json new file mode 100644 index 0000000..8dac1b3 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/quartz_pickaxe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/quartz_pickaxe" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json new file mode 100644 index 0000000..acd4772 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/reinforced_leather_boots", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json new file mode 100644 index 0000000..5f4e1d9 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/reinforced_leather_helmet", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json new file mode 100644 index 0000000..e8e83f3 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/reinforced_leather_leggings", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json new file mode 100644 index 0000000..b702b61 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/reinforced_leather_chestplate", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/rock.json b/src/main/resources/resource-pack/assets/survival_plus/items/rock.json new file mode 100644 index 0000000..d55967b --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/rock.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/rock" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/shiv.json b/src/main/resources/resource-pack/assets/survival_plus/items/shiv.json new file mode 100644 index 0000000..77e4e1e --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/shiv.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/shiv" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/stone_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/items/stone_sickle.json new file mode 100644 index 0000000..3dc661c --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/stone_sickle.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/stone_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/suspicious_meat.json b/src/main/resources/resource-pack/assets/survival_plus/items/suspicious_meat.json new file mode 100644 index 0000000..94c1dae --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/suspicious_meat.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/suspicious_meat" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/unlit_campfire.json b/src/main/resources/resource-pack/assets/survival_plus/items/unlit_campfire.json new file mode 100644 index 0000000..4334790 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/unlit_campfire.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/unlit_campfire" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/valkyries_axe.json b/src/main/resources/resource-pack/assets/survival_plus/items/valkyries_axe.json new file mode 100644 index 0000000..447a417 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/valkyries_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/valkyries_axe" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/water_bowl.json b/src/main/resources/resource-pack/assets/survival_plus/items/water_bowl.json new file mode 100644 index 0000000..d941515 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/water_bowl.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/water_bowl" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json new file mode 100755 index 0000000..c0fab02 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/blaze_sword" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json new file mode 100755 index 0000000..0983272 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "survival_plus:item/diamond_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json new file mode 100755 index 0000000..1b9e761 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/ender_giant_blade" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json new file mode 100755 index 0000000..b171ca8 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/firestriker" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json new file mode 100755 index 0000000..53f82a7 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "survival_plus:item/flint_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json new file mode 100755 index 0000000..65e580d --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json @@ -0,0 +1,6 @@ +{ + "parent": "item/handheld", + "textures": { + "layer0": "survival_plus:item/grappling_hook" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json new file mode 100755 index 0000000..1454db0 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/hammer" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json new file mode 100755 index 0000000..b702cdf --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/hatchet" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json new file mode 100755 index 0000000..1381d3d --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/iron_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json new file mode 100755 index 0000000..cd10aad --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/mattock" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/medic_kit.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/medic_kit.json new file mode 100755 index 0000000..eb90bd1 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/medic_kit.json @@ -0,0 +1,200 @@ +{ + "parent": "block/furnace", + "textures": { + "texture": "survival_plus:item/medic_kit" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16.5, + 16 + ], + "faces": { + "down": { + "uv": [ + 4, + 0, + 6, + 2 + ], + "texture": "#texture" + }, + "up": { + "uv": [ + 2, + 0, + 4, + 2 + ], + "texture": "#texture" + }, + "north": { + "uv": [ + 2, + 2, + 4, + 4 + ], + "texture": "#texture" + }, + "south": { + "uv": [ + 0, + 2, + 2, + 4 + ], + "texture": "#texture" + }, + "west": { + "uv": [ + 4, + 2, + 6, + 4 + ], + "texture": "#texture" + }, + "east": { + "uv": [ + 6, + 2, + 8, + 4 + ], + "texture": "#texture" + } + } + }, + { + "__comment": "Box2", + "from": [ + 0, + 16.4, + 0 + ], + "to": [ + 16, + 16.401, + 16 + ], + "faces": { + "down": { + "uv": [ + 0, + 0, + 16, + 16 + ], + "texture": "#texture" + }, + "up": { + "uv": [ + 4, + 0, + 6, + 2 + ], + "texture": "#texture" + }, + "north": { + "uv": [ + 0, + 12.999, + 16, + 13 + ], + "texture": "#texture" + }, + "south": { + "uv": [ + 0, + 12.999, + 16, + 13 + ], + "texture": "#texture" + }, + "west": { + "uv": [ + 0, + 12.999, + 16, + 13 + ], + "texture": "#texture" + }, + "east": { + "uv": [ + 0, + 12.999, + 16, + 13 + ], + "texture": "#texture" + } + } + } + ], + "display": { + "thirdperson_righthand": { + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "thirdperson_lefthand": { + "scale": [ + 0.0001, + 0.0001, + 0.0001 + ] + }, + "firstperson_righthand": { + "rotation": [ + 2, + 135, + 0 + ], + "translation": [ + -2.086, + 0.4782, + 0 + ], + "scale": [ + 0.25, + 0.25, + 0.25 + ] + }, + "firstperson_lefthand": { + "scale": [ + 0.0001, + 0.0001, + 0.0001 + ] + }, + "ground": { + "scale": [ + 0.2, + 0.2, + 0.2 + ] + }, + "fixed": { + "scale": [ + 0.4, + 0.4, + 0.4 + ] + } + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json new file mode 100755 index 0000000..f96b73c --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/obsidian_mace" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json new file mode 100755 index 0000000..da3e0c0 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/quartz_pickaxe" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_boots.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_boots.json new file mode 100755 index 0000000..a8f7113 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/reinforced_leather_boots" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_chestplate.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_chestplate.json new file mode 100755 index 0000000..1e62882 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_chestplate.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/reinforced_leather_chestplate" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_helmet.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_helmet.json new file mode 100755 index 0000000..bcb540d --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_helmet.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/reinforced_leather_helmet" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_leggings.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_leggings.json new file mode 100755 index 0000000..5b0bdf5 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/reinforced_leather_leggings.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/reinforced_leather_leggings" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/rock.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/rock.json new file mode 100755 index 0000000..8509cc7 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/rock.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/rock" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json new file mode 100755 index 0000000..4c966ca --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/shiv" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json new file mode 100755 index 0000000..ac5f494 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/stone_sickle" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/suspicious_meat.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/suspicious_meat.json new file mode 100755 index 0000000..b666731 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/suspicious_meat.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/suspicious_meat" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/unlit_campfire.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/unlit_campfire.json new file mode 100755 index 0000000..2c518d8 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/unlit_campfire.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/unlit_campfire" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json new file mode 100755 index 0000000..b5f9673 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/valkyries_axe" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/water_bowl.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/water_bowl.json new file mode 100755 index 0000000..d334a7c --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/water_bowl.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/water_bowl" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/entity/equipment/humanoid/gold.png b/src/main/resources/resource-pack/assets/survival_plus/textures/entity/equipment/humanoid/gold.png new file mode 100755 index 0000000000000000000000000000000000000000..b5007d823437434e1482feeea7ccc267d3f88049 GIT binary patch literal 3973 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/entity/equipment/humanoid_leggings/reinforced_leather.png b/src/main/resources/resource-pack/assets/survival_plus/textures/entity/equipment/humanoid_leggings/reinforced_leather.png new file mode 100755 index 0000000000000000000000000000000000000000..7d8aa8bac077a19eca89e5cfce72dea8067d07d1 GIT binary patch literal 3638 zcmV-64$1L}P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000AFNklUFAtzrtMPyk_sd^Dz`DnTs;b2OGS}DFBmx$Cy&iGDjH;@{ zd=lMmmkp1JdcDr()CfWd-oF_|2*I-l5JIpsJErCQ$;k=(;c@!?J~5v}rBY#U-cG;Y zC#snFdwf(eKYxISMI9_SxVgC@?w5&r%|yLs&d<+@`(?V_F6oGad_GUiC(&-V*_j|?LI~0k$0xaeu;6&~8t^0l*=&}*c{{mWjx9x^ z*=%Ylu%$={A=sU>(`Yo<@R(?|TI`3%$!4=80+#0wkPKR=*XtZCI4GCPBmx%N?Y8!( zH>XCpyu8#dN1Ib4)a!NLzZs?1>wO(H;Be7NE|()2v}jenTrO+d|M!_uip3%u9uv)G zlbzWy+U+(`#mt)9$coFrTd$d=iD72OzF}!%m=%|S)yY9$niyu;Wnk7m7+ak*@Y4_9 z5pfRU*4##ZnHu5OAI-e|n09M!Bde1J9vxuAV;U4c#Z1g6u`+33OOdqq&8ZQ7b{pAJ zB;tOVWYEI9X)B3ELfkJ?tJO%nwvf-~S${RyQOS>K z7Iu8g{rx?ukc~#8LEJBMc6LTGU?G#qJk1XHw{6XB zlOd{@DHICq&D&8`l~l+^wOVC&&Q7P((N3L*f*kkDj}GwH0F@!&73E&|oB#j-07*qo IM6N<$g5lWIcmMzZ literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/blaze_sword.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/blaze_sword.png new file mode 100755 index 0000000000000000000000000000000000000000..9fda9ae481a15b87b1fa150ed7998db529dc7ffa GIT binary patch literal 3457 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 Ef;&#kssI20 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/firestriker.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/firestriker.png new file mode 100755 index 0000000000000000000000000000000000000000..2b3eef34476a7306f13eae759cac1f81e0f1f1e9 GIT binary patch literal 3004 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 JS?83{1OVEuRAK-C literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/golden_helmet.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/golden_helmet.png new file mode 100755 index 0000000000000000000000000000000000000000..7e219041ff3cb346c33aae1e0fc4f6330c8353aa GIT binary patch literal 3025 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 To)MSa00000NkvXXu0mjfLerk; literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/grappling_hook.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/grappling_hook.png new file mode 100644 index 0000000000000000000000000000000000000000..bcec15a35b2dec466f184842a4e25761ba212a76 GIT binary patch literal 1943 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 Ac>n+a literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/iron_sickle.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/iron_sickle.png new file mode 100755 index 0000000000000000000000000000000000000000..6ccf374e6baf603adb79e7500bdde94a6b884544 GIT binary patch literal 214 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/medic_kit.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/medic_kit.png new file mode 100644 index 0000000000000000000000000000000000000000..3040e4fdcb8d6cb696cea2c5285dd7e1387b873c GIT binary patch literal 1245 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/quartz_pickaxe.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/quartz_pickaxe.png new file mode 100755 index 0000000000000000000000000000000000000000..b6c49fdfa9229b34bce067c9ff9d0a8a0e2ac058 GIT binary patch literal 3094 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/reinforced_leather_chestplate.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/reinforced_leather_chestplate.png new file mode 100755 index 0000000000000000000000000000000000000000..b9db7d6d608aedb4b2a4500e90a3b9205b3e34a0 GIT binary patch literal 2984 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/shiv.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/shiv.png new file mode 100755 index 0000000000000000000000000000000000000000..6a20ec0189d499209a49ea9e87486f2ce108cdea GIT binary patch literal 2976 zcmV;R3t#k!P)pPPiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002XNkl2WA(=_Al5SDY!eCt51wFE)%QwwUXrRzF8&)Y1Z zOXQ*`0L+?ziU@UGuaZ|=SR(_N{v}SPpdvyX$HTdCv8t;17y(`n2cWmhi6lvgqKG`t zNz+ufI8cD=`GKpR0H$nxU2>3R*>VOVLV7<^w!SG_zbBecIn5j_-8jYAf!X_=-va>p WGG8A>&J#=k0000}9on*+@puppLb8c+x zSC+mvdTR5W*wf!9$jIz%yuL>Bq&Y8BtA&Z_q3XX)Z5?Okcj?_YIVnDpDd*n0-oD=j zvgZ{iT1|cUH71_Z<(2x6plJn;Mqf-*IhSx`O5A&X?dyZI8_q%pVuM?SJ$C<(JM`ir z%LI=AKR>kz4J?eV>o3k%@%}5!sGmHUC4}*?>LmUi=2KH=NCZrAuwD^jd#ktmd$aec ROF*|Wc)I$ztaD0e0sw4yRc-(P literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/suspicious_meat.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/suspicious_meat.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6c4b831cf84dbf332afb420ab50a05c7bc2490 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvVnnx;Tbd_|KhS%f)0U(7IeuCuQxLwK;E&1m)N?bR;CJM&#x$PXA!h zwbfkUjg9Xa>54?7lT8sdv**wKo+@;4S!TJy^U1Y!T?P&oWz$(^1fQr1Xp!uCKWT1HZ9}d0#q)W)&O~ij-0jA` zue)T|{`~1JM^>+PVb%Cl&XyydaPI5l5)D?42u`;y&5sXN796pcSvupsc{Z>8dU4S` z_vY_v*dW}rfIpo{```(^H!ru9PSS1QHSUz9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqGLkxkLMfuL^+7WFhI$72aI=A0Z9t+{{zaLoK$}74+Zoz`RicPN?Xl4Z zS&rlwh)=>(1W3t z@&rq@2}~)$^Xn_v!+t#a6hA>k;=m09%Lxl+ZZo;DwLqNX^QI-lvtpoeum*tx!hjXY^F@M%$mOswP)}vIkYt~oJkOnmJu-c-@xL*xS>JC cmA@^DK`t$3qs8ANQJ}Qr>FVdQ&MBb@0A?fKSO5S3 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/valkyries_axe.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/valkyries_axe.png new file mode 100755 index 0000000000000000000000000000000000000000..dc777605d3535e342153ba80f73db489910b8f8c GIT binary patch literal 3118 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 Date: Thu, 13 Feb 2025 15:37:29 -0800 Subject: [PATCH 015/133] Armor - fix slot group --- .../survival/item/items/armor/ArmorPiece.java | 24 ++++++++++++------- .../item/items/armor/ReinforcedPiece.java | 4 ++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java index 33f6f45..f0822fa 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java @@ -33,19 +33,19 @@ public ArmorPiece(ArmorType armorType, ArmorMaterial armorMaterial, double armor NamespacedKey modKey = NamespacedKey.minecraft("armor." + armorType.key); - AttributeModifier armorMod = new AttributeModifier(modKey, armor, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); + AttributeModifier armorMod = new AttributeModifier(modKey, armor, Operation.ADD_NUMBER, armorType.slotGroup); itemMeta.addAttributeModifier(Attribute.ARMOR, armorMod); - AttributeModifier speedMod = new AttributeModifier(modKey, moveSpeed, Operation.ADD_SCALAR, EquipmentSlotGroup.FEET); + AttributeModifier speedMod = new AttributeModifier(modKey, moveSpeed, Operation.ADD_SCALAR, armorType.slotGroup); itemMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, speedMod); if (toughness > 0) { - AttributeModifier toughnessMod = new AttributeModifier(modKey, toughness, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); + AttributeModifier toughnessMod = new AttributeModifier(modKey, toughness, Operation.ADD_NUMBER, armorType.slotGroup); itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, toughnessMod); } if (knockback > 0) { - AttributeModifier knockbackMod = new AttributeModifier(modKey, knockback, Operation.ADD_NUMBER, EquipmentSlotGroup.HEAD); + AttributeModifier knockbackMod = new AttributeModifier(modKey, knockback, Operation.ADD_NUMBER, armorType.slotGroup); itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, knockbackMod); } @@ -69,24 +69,30 @@ public void registerRecipe() { } public enum ArmorType { - HELMET("helmet", "crown", "###", "# #"), - CHESTPLATE("chestplate", "guard", "# #", "###", "###"), - LEGGINGS("leggings", "greaves", "###", "# #", "# #"), - BOOTS("boots", "sabatons", "# #", "# #"); + HELMET("helmet", "crown", EquipmentSlotGroup.HEAD, "###", "# #"), + CHESTPLATE("chestplate", "guard",EquipmentSlotGroup.CHEST, "# #", "###", "###"), + LEGGINGS("leggings", "greaves",EquipmentSlotGroup.LEGS, "###", "# #", "# #"), + BOOTS("boots", "sabatons",EquipmentSlotGroup.FEET, "# #", "# #"); private final String key; private final String name; + private final EquipmentSlotGroup slotGroup; private final String[] shape; - ArmorType(String key, String name, String... shape) { + ArmorType(String key, String name, EquipmentSlotGroup slotGroup, String... shape) { this.key = key; this.name = name; + this.slotGroup = slotGroup; this.shape = shape; } public String getKey() { return this.key; } + + public EquipmentSlotGroup getSlotGroup() { + return this.slotGroup; + } } public enum ArmorMaterial { diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java index 6278bed..0e7620b 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java @@ -28,8 +28,8 @@ public ReinforcedPiece(ArmorType armorType) { ItemStack itemStack = itemType().createItemStack(); if (armorType == ArmorType.BOOTS) { ItemMeta itemMeta = itemStack.getItemMeta(); - AttributeModifier i_leatherBootsArmor = new AttributeModifier(NamespacedKey.minecraft("armor." + armorType.getKey()), 2, Operation.ADD_NUMBER, EquipmentSlotGroup.FEET); - itemMeta.addAttributeModifier(Attribute.ARMOR, i_leatherBootsArmor); + AttributeModifier mod = new AttributeModifier(NamespacedKey.minecraft("armor." + armorType.getKey()), 2, Operation.ADD_NUMBER, armorType.getSlotGroup()); + itemMeta.addAttributeModifier(Attribute.ARMOR, mod); itemStack.setItemMeta(itemMeta); } itemStack.setData(DataComponentTypes.EQUIPPABLE, From ab909a24ac130e2d9826e403cf09223742ea366a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 16:06:08 -0800 Subject: [PATCH 016/133] Utils - some cleanup --- .../java/tk/shanebee/survival/util/Utils.java | 1050 ++++++++--------- 1 file changed, 485 insertions(+), 565 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 1ede7a1..459256b 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -29,431 +29,312 @@ public class Utils { private static final Pattern HEX_PATTERN = Pattern.compile("<#([A-Fa-f0-9]){6}>"); private static final ImmutableSet CONCRETE_BLOCKS; - private static final ImmutableSet CONCRETE_POWDER; - private final static ImmutableSet GLAZED_TERRACOTTA; - private final static ImmutableSet TERRACOTTA; - private final static ImmutableSet NATURAL_ORE_BLOCK; - private final static ImmutableSet ORE_BLOCK; - private final static ImmutableSet COOKING_BLOCK; - private final static ImmutableSet UTILITY_BLOCK; - private final static ImmutableSet STORAGE_BLOCK; - private final static ImmutableSet STONE_TYPE_BLOCK; - private final static ImmutableSet FARMABLE; - private final static ImmutableSet SHOVEL; - private final static ImmutableSet REQUIRES_SHOVEL; - private final static ImmutableSet PICKAXE; - private final static ImmutableSet REQUIRES_PICKAXE; - private final static ImmutableSet AXE; - private final static ImmutableSet REQUIRES_AXE; - private final static ImmutableSet REQUIRES_SHEARS; - private final static ImmutableSet REQUIRES_HAMMER; + private final static ImmutableSet GLAZED_TERRACOTTA; + private final static ImmutableSet NATURAL_ORE_BLOCK; + private final static ImmutableSet ORE_BLOCK; + private final static ImmutableSet COOKING_BLOCK; + private final static ImmutableSet UTILITY_BLOCK; + private final static ImmutableSet STORAGE_BLOCK; + private final static ImmutableSet STONE_TYPE_BLOCK; + private final static ImmutableSet FARMABLE; + private final static ImmutableSet REQUIRES_SHEARS; + private final static ImmutableSet REQUIRES_HAMMER; static { - CONCRETE_BLOCKS = ImmutableSet.builder() - .add(Material.CYAN_CONCRETE) - .add(Material.BLACK_CONCRETE) - .add(Material.BLUE_CONCRETE) - .add(Material.BROWN_CONCRETE) - .add(Material.GRAY_CONCRETE) - .add(Material.GREEN_CONCRETE) - .add(Material.LIGHT_BLUE_CONCRETE) - .add(Material.LIGHT_GRAY_CONCRETE) - .add(Material.LIME_CONCRETE) - .add(Material.MAGENTA_CONCRETE) - .add(Material.ORANGE_CONCRETE) - .add(Material.PINK_CONCRETE) - .add(Material.PURPLE_CONCRETE) - .add(Material.RED_CONCRETE) - .add(Material.WHITE_CONCRETE) - .add(Material.YELLOW_CONCRETE) - .build(); - - CONCRETE_POWDER = ImmutableSet.builder() - .add(Material.BLACK_CONCRETE_POWDER) - .add(Material.BLUE_CONCRETE_POWDER) - .add(Material.BROWN_CONCRETE_POWDER) - .add(Material.CYAN_CONCRETE_POWDER) - .add(Material.GRAY_CONCRETE_POWDER) - .add(Material.GREEN_CONCRETE_POWDER) - .add(Material.LIME_CONCRETE_POWDER) - .add(Material.MAGENTA_CONCRETE_POWDER) - .add(Material.ORANGE_CONCRETE_POWDER) - .add(Material.PINK_CONCRETE_POWDER) - .add(Material.PURPLE_CONCRETE_POWDER) - .add(Material.RED_CONCRETE_POWDER) - .add(Material.WHITE_CONCRETE_POWDER) - .add(Material.YELLOW_CONCRETE_POWDER) - .add(Material.LIGHT_BLUE_CONCRETE_POWDER) - .add(Material.LIGHT_GRAY_CONCRETE_POWDER) - .build(); - - GLAZED_TERRACOTTA = ImmutableSet.builder() - .add(Material.BLACK_GLAZED_TERRACOTTA) - .add(Material.BLUE_GLAZED_TERRACOTTA) - .add(Material.BROWN_GLAZED_TERRACOTTA) - .add(Material.CYAN_GLAZED_TERRACOTTA) - .add(Material.GRAY_GLAZED_TERRACOTTA) - .add(Material.GREEN_GLAZED_TERRACOTTA) - .add(Material.LIGHT_BLUE_GLAZED_TERRACOTTA) - .add(Material.LIME_GLAZED_TERRACOTTA) - .add(Material.MAGENTA_GLAZED_TERRACOTTA) - .add(Material.ORANGE_GLAZED_TERRACOTTA) - .add(Material.PINK_GLAZED_TERRACOTTA) - .add(Material.PURPLE_GLAZED_TERRACOTTA) - .add(Material.RED_GLAZED_TERRACOTTA) - .add(Material.LIGHT_GRAY_GLAZED_TERRACOTTA) - .add(Material.WHITE_GLAZED_TERRACOTTA) - .add(Material.YELLOW_GLAZED_TERRACOTTA) - .build(); - - TERRACOTTA = ImmutableSet.builder() - .add(Material.BLACK_TERRACOTTA) - .add(Material.BLUE_TERRACOTTA) - .add(Material.BROWN_TERRACOTTA) - .add(Material.CYAN_TERRACOTTA) - .add(Material.GRAY_TERRACOTTA) - .add(Material.GREEN_TERRACOTTA) - .add(Material.LIGHT_BLUE_TERRACOTTA) - .add(Material.LIME_TERRACOTTA) - .add(Material.MAGENTA_TERRACOTTA) - .add(Material.ORANGE_TERRACOTTA) - .add(Material.PINK_TERRACOTTA) - .add(Material.PURPLE_TERRACOTTA) - .add(Material.RED_TERRACOTTA) - .add(Material.LIGHT_GRAY_TERRACOTTA) - .add(Material.WHITE_TERRACOTTA) - .add(Material.YELLOW_TERRACOTTA) - .build(); + CONCRETE_BLOCKS = ImmutableSet.builder() + .add(Material.CYAN_CONCRETE) + .add(Material.BLACK_CONCRETE) + .add(Material.BLUE_CONCRETE) + .add(Material.BROWN_CONCRETE) + .add(Material.GRAY_CONCRETE) + .add(Material.GREEN_CONCRETE) + .add(Material.LIGHT_BLUE_CONCRETE) + .add(Material.LIGHT_GRAY_CONCRETE) + .add(Material.LIME_CONCRETE) + .add(Material.MAGENTA_CONCRETE) + .add(Material.ORANGE_CONCRETE) + .add(Material.PINK_CONCRETE) + .add(Material.PURPLE_CONCRETE) + .add(Material.RED_CONCRETE) + .add(Material.WHITE_CONCRETE) + .add(Material.YELLOW_CONCRETE) + .build(); + + GLAZED_TERRACOTTA = ImmutableSet.builder() + .add(Material.BLACK_GLAZED_TERRACOTTA) + .add(Material.BLUE_GLAZED_TERRACOTTA) + .add(Material.BROWN_GLAZED_TERRACOTTA) + .add(Material.CYAN_GLAZED_TERRACOTTA) + .add(Material.GRAY_GLAZED_TERRACOTTA) + .add(Material.GREEN_GLAZED_TERRACOTTA) + .add(Material.LIGHT_BLUE_GLAZED_TERRACOTTA) + .add(Material.LIME_GLAZED_TERRACOTTA) + .add(Material.MAGENTA_GLAZED_TERRACOTTA) + .add(Material.ORANGE_GLAZED_TERRACOTTA) + .add(Material.PINK_GLAZED_TERRACOTTA) + .add(Material.PURPLE_GLAZED_TERRACOTTA) + .add(Material.RED_GLAZED_TERRACOTTA) + .add(Material.LIGHT_GRAY_GLAZED_TERRACOTTA) + .add(Material.WHITE_GLAZED_TERRACOTTA) + .add(Material.YELLOW_GLAZED_TERRACOTTA) + .build(); NATURAL_ORE_BLOCK = ImmutableSet.builder() - .add(Material.COAL_ORE) - .add(Material.DIAMOND_ORE) - .add(Material.EMERALD_ORE) - .add(Material.GOLD_ORE) - .add(Material.IRON_ORE) - .add(Material.LAPIS_ORE) - .add(Material.NETHER_QUARTZ_ORE) - .add(Material.REDSTONE_ORE) - .add(Material.NETHER_GOLD_ORE) - .add(Material.ANCIENT_DEBRIS) - .add(Material.GILDED_BLACKSTONE) - .build(); + .add(Material.COAL_ORE) + .add(Material.DIAMOND_ORE) + .add(Material.EMERALD_ORE) + .add(Material.GOLD_ORE) + .add(Material.IRON_ORE) + .add(Material.LAPIS_ORE) + .add(Material.NETHER_QUARTZ_ORE) + .add(Material.REDSTONE_ORE) + .add(Material.NETHER_GOLD_ORE) + .add(Material.ANCIENT_DEBRIS) + .add(Material.GILDED_BLACKSTONE) + .build(); ORE_BLOCK = ImmutableSet.builder() - .add(Material.COAL_BLOCK) - .add(Material.DIAMOND_BLOCK) - .add(Material.EMERALD_BLOCK) - .add(Material.GOLD_BLOCK) - .add(Material.IRON_BLOCK) - .add(Material.LAPIS_BLOCK) - .add(Material.QUARTZ_BLOCK) - .add(Material.REDSTONE_BLOCK) - .add(Material.NETHERITE_BLOCK) - .build(); - - COOKING_BLOCK = ImmutableSet.builder() - .add(Material.FURNACE) - .add(Material.BLAST_FURNACE) - .add(Material.SMOKER) - .build(); + .add(Material.COAL_BLOCK) + .add(Material.DIAMOND_BLOCK) + .add(Material.EMERALD_BLOCK) + .add(Material.GOLD_BLOCK) + .add(Material.IRON_BLOCK) + .add(Material.LAPIS_BLOCK) + .add(Material.QUARTZ_BLOCK) + .add(Material.REDSTONE_BLOCK) + .add(Material.NETHERITE_BLOCK) + .build(); + + COOKING_BLOCK = ImmutableSet.builder() + .add(Material.FURNACE) + .add(Material.BLAST_FURNACE) + .add(Material.SMOKER) + .build(); UTILITY_BLOCK = ImmutableSet.builder() - .add(Material.CARTOGRAPHY_TABLE) - .add(Material.FLETCHING_TABLE) - .add(Material.LECTERN) - .add(Material.LOOM) - .add(Material.STONECUTTER) - .add(Material.GRINDSTONE) - .add(Material.SMITHING_TABLE) - .add(Material.ANVIL) - .add(Material.ENCHANTING_TABLE) - .add(Material.JUKEBOX) - .add(Material.NOTE_BLOCK) - .add(Material.BREWING_STAND) - .add(Material.CAULDRON) - .add(Material.COMPOSTER) - .add(Material.RESPAWN_ANCHOR) - .add(Material.LODESTONE) - .build(); - - STORAGE_BLOCK = ImmutableSet.builder() - .add(Material.CHEST) - .add(Material.ENDER_CHEST) - .add(Material.TRAPPED_CHEST) - .add(Material.BARREL) - .build(); + .add(Material.CARTOGRAPHY_TABLE) + .add(Material.FLETCHING_TABLE) + .add(Material.LECTERN) + .add(Material.LOOM) + .add(Material.STONECUTTER) + .add(Material.GRINDSTONE) + .add(Material.SMITHING_TABLE) + .add(Material.ANVIL) + .add(Material.ENCHANTING_TABLE) + .add(Material.JUKEBOX) + .add(Material.NOTE_BLOCK) + .add(Material.BREWING_STAND) + .add(Material.CAULDRON) + .add(Material.COMPOSTER) + .add(Material.RESPAWN_ANCHOR) + .add(Material.LODESTONE) + .build(); + + STORAGE_BLOCK = ImmutableSet.builder() + .add(Material.CHEST) + .add(Material.ENDER_CHEST) + .add(Material.TRAPPED_CHEST) + .add(Material.BARREL) + .build(); STONE_TYPE_BLOCK = ImmutableSet.builder() - .add(Material.STONE) - .add(Material.COBBLESTONE) - .add(Material.MOSSY_COBBLESTONE) - .add(Material.INFESTED_COBBLESTONE) - .add(Material.ANDESITE) - .add(Material.POLISHED_ANDESITE) - .add(Material.DIORITE) - .add(Material.POLISHED_DIORITE) - .add(Material.GRANITE) - .add(Material.POLISHED_GRANITE) - .add(Material.BRICKS) - .add(Material.NETHER_BRICKS) - .add(Material.SANDSTONE) - .add(Material.CHISELED_SANDSTONE) - .add(Material.SMOOTH_SANDSTONE) - .add(Material.CUT_SANDSTONE) - .add(Material.RED_SANDSTONE) - .add(Material.CHISELED_RED_SANDSTONE) - .add(Material.CUT_RED_SANDSTONE) - .add(Material.SMOOTH_RED_SANDSTONE) - .add(Material.PRISMARINE) - .add(Material.PRISMARINE_BRICKS) - .add(Material.DARK_PRISMARINE) - .add(Material.NETHERRACK) - .add(Material.END_STONE) - .add(Material.END_STONE_BRICKS) - .add(Material.PURPUR_BLOCK) - .add(Material.PURPUR_PILLAR) - // Nether update blocks - .add(Material.BASALT) - .add(Material.POLISHED_BASALT) - .add(Material.BLACKSTONE) - .add(Material.POLISHED_BLACKSTONE) - .add(Material.CHISELED_POLISHED_BLACKSTONE) - .add(Material.CHISELED_NETHER_BRICKS) - .add(Material.CRACKED_NETHER_BRICKS) - .add(Material.QUARTZ_BRICKS) - .build(); - - FARMABLE = ImmutableSet.builder() - .add(Material.MELON) - .add(Material.MELON_STEM) - .add(Material.PUMPKIN) - .add(Material.PUMPKIN_STEM) - .add(Material.CHORUS_FLOWER) - .add(Material.CHORUS_PLANT) - .add(Material.CARROTS) - .add(Material.POTATOES) - .add(Material.BEETROOTS) - .add(Material.WHEAT) - .add(Material.SWEET_BERRY_BUSH) - .add(Material.COCOA) - .build(); - - SHOVEL = ImmutableSet.builder() - .add(Material.STONE_SHOVEL) - .add(Material.IRON_SHOVEL) - .add(Material.DIAMOND_SHOVEL) - .add(Material.GOLDEN_SHOVEL) - .add(Material.WOODEN_SHOVEL) - .add(Material.NETHERITE_SHOVEL) - .build(); - - REQUIRES_SHOVEL = ImmutableSet.builder() - .add(Material.GRASS_BLOCK) - .add(Material.DIRT) - .add(Material.PODZOL) - .add(Material.COARSE_DIRT) - .add(Material.DIRT_PATH) - .add(Material.FARMLAND) - .add(Material.SOUL_SAND) - .add(Material.SAND) - .add(Material.RED_SAND) - .add(Material.CLAY) - .add(Material.MYCELIUM) - .add(Material.SNOW) - .add(Material.SNOW_BLOCK) - .add(Material.SOUL_SOIL) - .build(); - - PICKAXE = ImmutableSet.builder() - .add(Material.GOLDEN_PICKAXE) - .add(Material.WOODEN_PICKAXE) - .add(Material.DIAMOND_PICKAXE) - .add(Material.IRON_PICKAXE) - .add(Material.STONE_PICKAXE) - .add(Material.NETHERITE_PICKAXE) - .build(); - - REQUIRES_PICKAXE = ImmutableSet.builder() - .add(Material.NETHER_BRICK_FENCE) - .add(Material.NETHER_BRICKS) - .add(Material.RED_NETHER_BRICKS) - .add(Material.SPAWNER) - .add(Material.SEA_LANTERN) - .add(Material.GLOWSTONE) - .add(Material.END_ROD) - .add(Material.DISPENSER) - .add(Material.DROPPER) - .add(Material.OBSERVER) - .add(Material.PISTON) - .add(Material.PISTON_HEAD) - .add(Material.STICKY_PISTON) - .add(Material.MOVING_PISTON) - .add(Material.ENCHANTING_TABLE) - .add(Material.ANVIL) - .add(Material.GRINDSTONE) - .add(Material.STONECUTTER) - .add(Material.ENDER_CHEST) - .add(Material.HOPPER) - .add(Material.CAULDRON) - .add(Material.BREWING_STAND) - .add(Material.STONE_PRESSURE_PLATE) - .add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE) - .add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE) - .add(Material.BEACON) - .add(Material.OBSIDIAN) - .add(Material.IRON_TRAPDOOR) - .build(); - - AXE = ImmutableSet.builder() - .add(Material.WOODEN_AXE) - .add(Material.STONE_AXE) - .add(Material.GOLDEN_AXE) - .add(Material.IRON_AXE) - .add(Material.DIAMOND_AXE) - .add(Material.NETHERITE_AXE) - .build(); - - REQUIRES_AXE = ImmutableSet.builder() - .add(Material.CHEST) - .add(Material.TRAPPED_CHEST) - .add(Material.BARREL) - .add(Material.CRAFTING_TABLE) - .add(Material.CARTOGRAPHY_TABLE) - .add(Material.FLETCHING_TABLE) - .add(Material.SMITHING_TABLE) - .add(Material.LOOM) - .add(Material.LECTERN) - .add(Material.CAMPFIRE) - .add(Material.COMPOSTER) - .add(Material.BOOKSHELF) - .add(Material.LADDER) - .add(Material.JUKEBOX) - .add(Material.NOTE_BLOCK) - .add(Material.DAYLIGHT_DETECTOR) - .add(Material.SCAFFOLDING) - .build(); - - REQUIRES_SHEARS = ImmutableSet.builder() - .add(Material.COBWEB) - .add(Material.TRIPWIRE) - .add(Material.TNT) - .add(Material.MUSHROOM_STEM) - .build(); - - REQUIRES_HAMMER = ImmutableSet.builder() - .add(Material.BOOKSHELF) - .add(Material.LADDER) - .add(Material.SEA_LANTERN) - .add(Material.GLOWSTONE) - .add(Material.END_ROD) - .add(Material.DISPENSER) - .add(Material.DROPPER) - .add(Material.HOPPER) - .add(Material.STONE_PRESSURE_PLATE) - .add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE) - .add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE) - .add(Material.DAYLIGHT_DETECTOR) - .add(Material.PISTON) - .add(Material.STICKY_PISTON) - .add(Material.REDSTONE_LAMP) - .add(Material.REPEATER) - .add(Material.COMPARATOR) - .add(Material.TRIPWIRE_HOOK) - .add(Material.BEACON) - .add(Material.IRON_BARS) - .add(Material.SCAFFOLDING) - .build(); - } - - /** Check if a material is concrete - * @param material Material to check - * @return True if material is concrete - */ + .add(Material.STONE) + .add(Material.COBBLESTONE) + .add(Material.MOSSY_COBBLESTONE) + .add(Material.INFESTED_COBBLESTONE) + .add(Material.ANDESITE) + .add(Material.POLISHED_ANDESITE) + .add(Material.DIORITE) + .add(Material.POLISHED_DIORITE) + .add(Material.GRANITE) + .add(Material.POLISHED_GRANITE) + .add(Material.BRICKS) + .add(Material.NETHER_BRICKS) + .add(Material.SANDSTONE) + .add(Material.CHISELED_SANDSTONE) + .add(Material.SMOOTH_SANDSTONE) + .add(Material.CUT_SANDSTONE) + .add(Material.RED_SANDSTONE) + .add(Material.CHISELED_RED_SANDSTONE) + .add(Material.CUT_RED_SANDSTONE) + .add(Material.SMOOTH_RED_SANDSTONE) + .add(Material.PRISMARINE) + .add(Material.PRISMARINE_BRICKS) + .add(Material.DARK_PRISMARINE) + .add(Material.NETHERRACK) + .add(Material.END_STONE) + .add(Material.END_STONE_BRICKS) + .add(Material.PURPUR_BLOCK) + .add(Material.PURPUR_PILLAR) + // Nether update blocks + .add(Material.BASALT) + .add(Material.POLISHED_BASALT) + .add(Material.BLACKSTONE) + .add(Material.POLISHED_BLACKSTONE) + .add(Material.CHISELED_POLISHED_BLACKSTONE) + .add(Material.CHISELED_NETHER_BRICKS) + .add(Material.CRACKED_NETHER_BRICKS) + .add(Material.QUARTZ_BRICKS) + .build(); + + FARMABLE = ImmutableSet.builder() + .add(Material.MELON) + .add(Material.MELON_STEM) + .add(Material.PUMPKIN) + .add(Material.PUMPKIN_STEM) + .add(Material.CHORUS_FLOWER) + .add(Material.CHORUS_PLANT) + .add(Material.CARROTS) + .add(Material.POTATOES) + .add(Material.BEETROOTS) + .add(Material.WHEAT) + .add(Material.SWEET_BERRY_BUSH) + .add(Material.COCOA) + .build(); + + REQUIRES_SHEARS = ImmutableSet.builder() + .add(Material.COBWEB) + .add(Material.TRIPWIRE) + .add(Material.TNT) + .add(Material.MUSHROOM_STEM) + .build(); + + REQUIRES_HAMMER = ImmutableSet.builder() + .add(Material.BOOKSHELF) + .add(Material.LADDER) + .add(Material.SEA_LANTERN) + .add(Material.GLOWSTONE) + .add(Material.END_ROD) + .add(Material.DISPENSER) + .add(Material.DROPPER) + .add(Material.HOPPER) + .add(Material.STONE_PRESSURE_PLATE) + .add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE) + .add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE) + .add(Material.DAYLIGHT_DETECTOR) + .add(Material.PISTON) + .add(Material.STICKY_PISTON) + .add(Material.REDSTONE_LAMP) + .add(Material.REPEATER) + .add(Material.COMPARATOR) + .add(Material.TRIPWIRE_HOOK) + .add(Material.BEACON) + .add(Material.IRON_BARS) + .add(Material.SCAFFOLDING) + .build(); + } + + /** + * Check if a material is concrete + * + * @param material Material to check + * @return True if material is concrete + */ public static boolean isConcrete(Material material) { return CONCRETE_BLOCKS.contains(material); } - /** Check if a material is concrete powder - * @param material Material to check - * @return True if material is concrete powder - */ + /** + * Check if a material is concrete powder + * + * @param material Material to check + * @return True if material is concrete powder + */ public static boolean isConcretePowder(Material material) { - return CONCRETE_POWDER.contains(material); + return Tag.CONCRETE_POWDER.isTagged(material); } - /** Check if a material is glazed terracotta - * @param material Material to check - * @return True if material is glazed terracotta - */ + /** + * Check if a material is glazed terracotta + * + * @param material Material to check + * @return True if material is glazed terracotta + */ public static boolean isGlazedTerracotta(Material material) { return GLAZED_TERRACOTTA.contains(material); } - /** Check if a material is terracotta - * @param material Material to check - * @return True if material is terracotta - */ + /** + * Check if a material is terracotta + * + * @param material Material to check + * @return True if material is terracotta + */ public static boolean isTerracotta(Material material) { - return TERRACOTTA.contains(material); + return Tag.TERRACOTTA.isTagged(material); } - /** Check if a material is a natural ore block - *

ie: coal ore, diamond ore, iron ore

- * @param material Material to check - * @return True if material is natural ore block - */ + /** + * Check if a material is a natural ore block + *

ie: coal ore, diamond ore, iron ore

+ * + * @param material Material to check + * @return True if material is natural ore block + */ public static boolean isNaturalOreBlock(Material material) { return NATURAL_ORE_BLOCK.contains(material); } - /** Check if a material is an ore block - *

ie: coal block, diamond block, iron block

- * @param material Material to check - * @return True if material is ore block - */ + /** + * Check if a material is an ore block + *

ie: coal block, diamond block, iron block

+ * + * @param material Material to check + * @return True if material is ore block + */ public static boolean isOreBlock(Material material) { return ORE_BLOCK.contains(material); } - /** Check if a material is a cooking block - *

ie: furnace, blast furnace, smoker

- * @param material Material to check - * @return True if material is cooking block - */ + /** + * Check if a material is a cooking block + *

ie: furnace, blast furnace, smoker

+ * + * @param material Material to check + * @return True if material is cooking block + */ public static boolean isCookingBlock(Material material) { return COOKING_BLOCK.contains(material); } - /** Check if a material is a utility block - *

ie: cartography table, grindstone, anvil

- * @param material Material to check - * @return True if material is utility block - */ + /** + * Check if a material is a utility block + *

ie: cartography table, grindstone, anvil

+ * + * @param material Material to check + * @return True if material is utility block + */ public static boolean isUtilityBlock(Material material) { return UTILITY_BLOCK.contains(material); } - /** Check if a material is a shulker box - * @param material Material to check - * @return True if material is shulker box - */ + /** + * Check if a material is a shulker box + * + * @param material Material to check + * @return True if material is shulker box + */ public static boolean isShulkerBox(Material material) { return Tag.SHULKER_BOXES.isTagged(material); } - /** Check if a material is a storage block - *

ie: chest, ender chest, barrel

- * @param material Material to check - * @return True if material is storage block - */ + /** + * Check if a material is a storage block + *

ie: chest, ender chest, barrel

+ * + * @param material Material to check + * @return True if material is storage block + */ public static boolean isStorageBlock(Material material) { - return STORAGE_BLOCK.contains(material); + return STORAGE_BLOCK.contains(material) || Tag.SHULKER_BOXES.isTagged(material); } - /** Check if a material is stone block type - * @param material Material to check - * @return True if material is stone block type - */ + /** + * Check if a material is stone block type + * + * @param material Material to check + * @return True if material is stone block type + */ public static boolean isStoneTypeBlock(Material material) { if (STONE_TYPE_BLOCK.contains(material)) return true; if (isNonWoodSlab(material)) return true; @@ -461,165 +342,170 @@ public static boolean isStoneTypeBlock(Material material) { return Tag.STONE_BRICKS.isTagged(material) || Tag.WALLS.isTagged(material); } - /** Check if a material is a non wood door - * @param material Material to check - * @return True if material is non wood door - */ + /** + * Check if a material is a non wood door + * + * @param material Material to check + * @return True if material is non wood door + */ public static boolean isNonWoodDoor(Material material) { return (Tag.DOORS.isTagged(material) && !Tag.WOODEN_DOORS.isTagged(material)); } - /** Check if a material is a non wood slab - * @param material Material to check - * @return True if material is non wood slab - */ + /** + * Check if a material is a non wood slab + * + * @param material Material to check + * @return True if material is non wood slab + */ public static boolean isNonWoodSlab(Material material) { return (Tag.SLABS.isTagged(material) && !Tag.WOODEN_SLABS.isTagged(material)); } - /** Check if a material is a non wood stair - * @param material Material to check - * @return True if material is non wood stair - */ + /** + * Check if a material is a non wood stair + * + * @param material Material to check + * @return True if material is non wood stair + */ public static boolean isNonWoodStairs(Material material) { return (Tag.STAIRS.isTagged(material) && !Tag.WOODEN_STAIRS.isTagged(material)); } - /** Check if a material is a wood gate - * @param material Material to check - * @return True if material is wood gate - */ + /** + * Check if a material is a wood gate + * + * @param material Material to check + * @return True if material is wood gate + */ public static boolean isWoodGate(Material material) { return Tag.FENCE_GATES.isTagged(material); } - /** Check if a material is a farmable block - *

ie: melon, potatoes, wheat

- * @param material Material to check - * @return True if material is farmable block - */ + /** + * Check if a material is a farmable block + *

ie: melon, potatoes, wheat

+ * + * @param material Material to check + * @return True if material is farmable block + */ public static boolean isFarmable(Material material) { return FARMABLE.contains(material); } - /** Check if a material is a shove - * @param material Material to check - * @return True if material is shovel - */ + /** + * Check if a material is a shove + * + * @param material Material to check + * @return True if material is shovel + */ public static boolean isShovel(Material material) { - return SHOVEL.contains(material); + return Tag.ITEMS_SHOVELS.isTagged(material); } - /** Check if a material requires a shovel to dig it - * @param material Material to check - * @return True if material requires a shovel - */ + /** + * Check if a material requires a shovel to dig it + * + * @param material Material to check + * @return True if material requires a shovel + */ public static boolean requiresShovel(Material material) { - return REQUIRES_SHOVEL.contains(material) || isConcretePowder(material); - } + return Tag.MINEABLE_SHOVEL.isTagged(material); + } - /** Check if a material is a pickaxe - * @param material Material to check - * @return True if material is pickaxe - */ + /** + * Check if a material is a pickaxe + * + * @param material Material to check + * @return True if material is a pickaxe + */ public static boolean isPickaxe(Material material) { - return PICKAXE.contains(material); + return Tag.ITEMS_PICKAXES.isTagged(material); } - /** Check if a material requires a pickaxe to mine it - *

ie: ores, non-wood doors/slabs/stairs, concrete

- * @param material Material to check - * @return True if material requires pickaxe - */ + /** + * Check if a material requires a pickaxe to mine it + *

ie: ores, non-wood doors/slabs/stairs, concrete

+ * + * @param material Material to check + * @return True if material requires pickaxe + */ public static boolean requiresPickaxe(Material material) { - if (REQUIRES_PICKAXE.contains(material)) return true; - if (Utils.isStoneTypeBlock(material)) return true; - if (Utils.isOreBlock(material)) return true; - if (Utils.isNaturalOreBlock(material)) return true; - if (Utils.isNonWoodDoor(material)) return true; - if (Utils.isTerracotta(material)) return true; - if (Utils.isGlazedTerracotta(material)) return true; - if (Utils.isConcrete(material)) return true; - if (Utils.isCookingBlock(material)) return true; - if (Tag.WALLS.isTagged(material)) return true; - if (Tag.ICE.isTagged(material)) return true; - if (Tag.CORAL_BLOCKS.isTagged(material)) return true; - return Tag.RAILS.isTagged(material); - } - - /** Check if a material is an axe - * @param material Material to check - * @return True if material is axe - */ + return Tag.MINEABLE_PICKAXE.isTagged(material); + } + + /** + * Check if a material is an axe + * + * @param material Material to check + * @return True if material is axe + */ public static boolean isAxe(Material material) { - return AXE.contains(material); + return Tag.ITEMS_AXES.isTagged(material); } - /** Check if a material requires an axe to break - * @param material Material to check - * @return True if material requires axe - */ + /** + * Check if a material requires an axe to break + * + * @param material Material to check + * @return True if material requires axe + */ public static boolean requiresAxe(Material material) { - if (REQUIRES_AXE.contains(material)) return true; - if (Tag.WOODEN_DOORS.isTagged(material)) return true; - if (Tag.WOODEN_TRAPDOORS.isTagged(material)) return true; - if (Tag.PLANKS.isTagged(material)) return true; - if (Tag.LOGS.isTagged(material)) return true; - if (Tag.WOODEN_STAIRS.isTagged(material)) return true; - if (Tag.WOODEN_SLABS.isTagged(material)) return true; - if (Tag.WOODEN_FENCES.isTagged(material)) return true; - if (Tag.WOODEN_PRESSURE_PLATES.isTagged(material)) return true; - if (Tag.BANNERS.isTagged(material)) return true; - if (Tag.SIGNS.isTagged(material)) return true; - return Utils.isWoodGate(material); - } - - /** Check if a material requires shears to break - *

ie: cobweb, tripwire, tnt

- * @param material Material to check - * @return True if material requires shears - */ + return Tag.MINEABLE_AXE.isTagged(material); + } + + /** + * Check if a material requires shears to break + *

ie: cobweb, tripwire, tnt

+ * + * @param material Material to check + * @return True if material requires shears + */ public static boolean requiresShears(Material material) { return REQUIRES_SHEARS.contains(material); } - /** Check if a material requires a hammer (in offhand) to place - * @param material Material to check - * @return True if material requires hammer - */ + /** + * Check if a material requires a hammer (in offhand) to place + * + * @param material Material to check + * @return True if material requires hammer + */ public static boolean requiresHammer(Material material) { if (REQUIRES_HAMMER.contains(material)) return true; return Tag.DOORS.isTagged(material) - || isWoodGate(material) - || isTerracotta(material) - || isGlazedTerracotta(material) - || isConcrete(material) - || isStoneTypeBlock(material) - || isCookingBlock(material) - || isStorageBlock(material) - || isUtilityBlock(material) - || isShulkerBox(material) - || isOreBlock(material) - - || Tag.BEDS.isTagged(material) - || Tag.LOGS.isTagged(material) - || Tag.STAIRS.isTagged(material) - || Tag.SLABS.isTagged(material) - || Tag.PLANKS.isTagged(material) - || Tag.WOODEN_PRESSURE_PLATES.isTagged(material) - || Tag.WOODEN_FENCES.isTagged(material) - || Tag.RAILS.isTagged(material) - || Tag.BANNERS.isTagged(material) - || Tag.FENCES.isTagged(material) - || Tag.SIGNS.isTagged(material); - } - - /** Get the drops for a certain material - * @param material Material that will be broken - * @param grown If the block is grown - * @return List of materials this material will drop - */ + || isWoodGate(material) + || isTerracotta(material) + || isGlazedTerracotta(material) + || isConcrete(material) + || isStoneTypeBlock(material) + || isCookingBlock(material) + || isStorageBlock(material) + || isUtilityBlock(material) + || isShulkerBox(material) + || isOreBlock(material) + + || Tag.BEDS.isTagged(material) + || Tag.LOGS.isTagged(material) + || Tag.STAIRS.isTagged(material) + || Tag.SLABS.isTagged(material) + || Tag.PLANKS.isTagged(material) + || Tag.WOODEN_PRESSURE_PLATES.isTagged(material) + || Tag.WOODEN_FENCES.isTagged(material) + || Tag.RAILS.isTagged(material) + || Tag.BANNERS.isTagged(material) + || Tag.FENCES.isTagged(material) + || Tag.SIGNS.isTagged(material); + } + + /** + * Get the drops for a certain material + * + * @param material Material that will be broken + * @param grown If the block is grown + * @return List of materials this material will drop + */ public static List getDrops(Material material, Boolean grown) { List mat = new ArrayList<>(); switch (material) { @@ -668,49 +554,59 @@ public static List getDrops(Material material, Boolean grown) { return mat; } - /** Send a colored string to a Player + /** + * Send a colored string to a Player *

- * Does not require ChatColor methods + * Does not require ChatColor methods *

+ * * @param player The player to send a colored string to - * @param msg The string to send including color codes + * @param msg The string to send including color codes */ public static void sendColoredMsg(CommandSender player, String msg) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); } - /** Send a colored console message + /** + * Send a colored console message *

This will NOT include plugin prefix

- * @param msg Message to send - */ + * + * @param msg Message to send + */ public static void sendColoredConsoleMsg(String msg) { Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); } - /** Log a message to console + /** + * Log a message to console *

This will include plugin prefix

+ * * @param msg Message to log to console */ - public static void log(String msg) { + public static void log(String msg) { Lang lang = Survival.getInstance().getLang(); String prefix = "&7[&bSurvival&3Plus&7] "; if (lang != null) { prefix = lang.prefix; } - sendColoredConsoleMsg(prefix + msg); - } + sendColoredConsoleMsg(prefix + msg); + } - /** Log a formatted message to console + /** + * Log a formatted message to console *

Formatted in the same style as {@link String#format(String, Object...)} *
This will include plugin prefix

- * @param format Message format + * + * @param format Message format * @param objects Objects in format */ - public static void log(String format, Object... objects) { - log(String.format(format, objects)); + public static void log(String format, Object... objects) { + log(String.format(format, objects)); } - /** Gets a colored string + /** + * Gets a colored string + * * @param string The string including color codes/HEX color codes * @return Returns a formatted string */ @@ -728,34 +624,40 @@ public static String getColoredString(String string) { return net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', string); } - /** Spawn a particle at a location for all players + /** + * Spawn a particle at a location for all players + * * @param location The location to spawn a particle at * @param particle The particle to spawn - * @param amount The amount of particles - * @param offsetX Offset by x - * @param offsetY Offset by y - * @param offsetZ Offset by z + * @param amount The amount of particles + * @param offsetX Offset by x + * @param offsetY Offset by y + * @param offsetZ Offset by z */ public static void spawnParticle(Location location, Particle particle, int amount, double offsetX, double offsetY, double offsetZ) { assert location.getWorld() != null; location.getWorld().spawnParticle(particle, location, amount, offsetX, offsetY, offsetZ); } - /** Spawn a particle at a location for a player + /** + * Spawn a particle at a location for a player + * * @param location The location to spawn a particle at * @param particle The particle to spawn - * @param amount The amount of particles - * @param offsetX Offset by x - * @param offsetY Offset by y - * @param offsetZ Offset by z - * @param player The player to spawn a particle for + * @param amount The amount of particles + * @param offsetX Offset by x + * @param offsetY Offset by y + * @param offsetZ Offset by z + * @param player The player to spawn a particle for */ public static void spawnParticle(Location location, Particle particle, int amount, double offsetX, double offsetY, double offsetZ, Player player) { player.spawnParticle(particle, location, amount, offsetX, offsetY, offsetZ); } - /** Set the durability of an ItemStack - * @param item The ItemStack to set + /** + * Set the durability of an ItemStack + * + * @param item The ItemStack to set * @param durability The durability to set */ public static void setDurability(ItemStack item, int durability) { @@ -765,7 +667,9 @@ public static void setDurability(ItemStack item, int durability) { item.setItemMeta(meta); } - /** Check the durability of an ItemStack + /** + * Check the durability of an ItemStack + * * @param item The ItemStack to check * @return The durability of the ItemStack */ @@ -774,17 +678,21 @@ public static int getDurability(ItemStack item) { return ((Damageable) item.getItemMeta()).getDamage(); } - /** Gets the minutes a player has played on the server + /** + * Gets the minutes a player has played on the server + * * @param player The player to check * @return The number of minutes they have played on the server */ @SuppressWarnings("IntegerDivisionInFloatingPointContext") - public static int getMinutesPlayed(Player player) { + public static int getMinutesPlayed(Player player) { int played = player.getStatistic(Statistic.PLAY_ONE_MINUTE); return Math.round(played / 1200); } - /** Check if server is running a minimum Minecraft version + /** + * Check if server is running a minimum Minecraft version + * * @param major Major version to check (Most likely just going to be 1) * @param minor Minor version to check * @return True if running this version or higher @@ -793,9 +701,11 @@ public static boolean isRunningMinecraft(int major, int minor) { return isRunningMinecraft(major, minor, 0); } - /** Check if server is running a minimum Minecraft version - * @param major Major version to check (Most likely just going to be 1) - * @param minor Minor version to check + /** + * Check if server is running a minimum Minecraft version + * + * @param major Major version to check (Most likely just going to be 1) + * @param minor Minor version to check * @param revision Revision to check * @return True if running this version or higher */ @@ -816,58 +726,68 @@ public static boolean isRunningSpigot() { return classExists("org.spigotmc.CustomTimingsHandler"); } - /** Check if a class exists - * @param className The {@link Class#getCanonicalName() canonical name} of the class - * @return True if the class exists - */ + /** + * Check if a class exists + * + * @param className The {@link Class#getCanonicalName() canonical name} of the class + * @return True if the class exists + */ public static boolean classExists(final String className) { - try { - Class.forName(className); - return true; - } catch (ClassNotFoundException ex) { - return false; - } - } - - /** Check if a method exists - * @param c Class the method belongs to - * @param methodName Name of method - * @param parameterTypes Parameter types for this method - * @return True if the method exists - */ - public static boolean methodExists(final Class c, final String methodName, final Class... parameterTypes) { - try { - c.getDeclaredMethod(methodName, parameterTypes); - return true; - } catch (NoSuchMethodException ex) { - return false; - } - } - - /** Check if this entity is a Citizens NPC + try { + Class.forName(className); + return true; + } catch (ClassNotFoundException ex) { + return false; + } + } + + /** + * Check if a method exists + * + * @param c Class the method belongs to + * @param methodName Name of method + * @param parameterTypes Parameter types for this method + * @return True if the method exists + */ + public static boolean methodExists(final Class c, final String methodName, final Class... parameterTypes) { + try { + c.getDeclaredMethod(methodName, parameterTypes); + return true; + } catch (NoSuchMethodException ex) { + return false; + } + } + + /** + * Check if this entity is a Citizens NPC + * * @param entity Entity to check * @return True if entity is an NPC */ - public static boolean isCitizensNPC(Metadatable entity) { - return entity.hasMetadata("NPC"); + public static boolean isCitizensNPC(Metadatable entity) { + return entity.hasMetadata("NPC"); } - /** Get a {@link NamespacedKey} linked to this plugin + /** + * Get a {@link NamespacedKey} linked to this plugin + * * @param key Key to create * @return New NamespacedKey linked to this plugin */ public static NamespacedKey getNamespacedKey(String key) { - return new NamespacedKey(Survival.getInstance(), key); + return new NamespacedKey(Survival.getInstance(), key); } - /** Check if the player is at the highest block (exposed to sun) + /** + * Check if the player is at the highest block (exposed to sun) + * * @param player Player to check * @return True if player is exposed to sun */ public static boolean isAtHighest(Player player) { Location location = player.getLocation(); World world = player.getWorld(); - return location.getY() > world.getHighestBlockAt(location).getY(); + return location.getY() > world.getHighestBlockYAt(location); } } From 5234632f6ac6c2d2c41aa44a43ecaeaab794b590 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 16:10:12 -0800 Subject: [PATCH 017/133] Compass - use vanilla texture --- .../java/tk/shanebee/survival/item/items/tools/Compass.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java b/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java index 580259d..cfbee92 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java @@ -12,7 +12,7 @@ public class Compass extends Item { public Compass() { ItemStack itemStack = ItemType.COMPASS.createItemStack(); - setupDefaults("compass", itemStack); + setupDefaults("compass", itemStack, true); } @Override From f232d07c9c3a80b71f1f91a2f7a346f1e880ba42 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 16:52:27 -0800 Subject: [PATCH 018/133] CompassWaypoint - reformat how compass works --- .../tk/shanebee/survival/config/Lang.java | 25 +- .../java/tk/shanebee/survival/item/Item.java | 13 + .../tk/shanebee/survival/item/ItemConfig.java | 9 + .../listeners/item/CompassWaypoint.java | 35 ++- .../java/tk/shanebee/survival/util/Utils.java | 9 + src/main/resources/items.yml | 5 + src/main/resources/lang_CN.yml | 231 ------------------ src/main/resources/lang_EN.yml | 11 +- 8 files changed, 74 insertions(+), 264 deletions(-) delete mode 100644 src/main/resources/lang_CN.yml diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index 41939d3..a3e9450 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.config; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -17,7 +16,7 @@ public class Lang { private final Survival plugin; - private final String lang_yml; + private final String langFilePath; private FileConfiguration lang; public String prefix; @@ -57,8 +56,9 @@ public class Lang { public String fishing_main_hand; public String grappling_off_hand; public String grappling_main_hand; - public String compass_pointed; - public String compass_coords; + public String compass_waypoint_set; + public String compass_waypoint_get; + public String compass_waypoint_unset; public List compass_lore; public String players_only; public String toggle_chat_local; @@ -208,17 +208,17 @@ public class Lang { public Lang(Survival main, String language) { this.plugin = main; - this.lang_yml = language.equals("CN") ? "lang_CN.yml" : "lang_EN.yml"; + this.langFilePath = "lang_" + language + ".yml"; } public void loadLangFile(CommandSender sender) { String loaded; - File lang_file = new File(plugin.getDataFolder(), lang_yml); + File lang_file = new File(plugin.getDataFolder(), langFilePath); if (!lang_file.exists()) { - plugin.saveResource(lang_yml, true); - loaded = "&aNew " + lang_yml + " created"; + plugin.saveResource(langFilePath, true); + loaded = "&aNew " + langFilePath + " created"; } else { - loaded = "&7" + lang_yml + " &aloaded"; + loaded = "&7" + langFilePath + " &aloaded"; //updateLang(YamlConfiguration.loadConfiguration(lang_file), lang_file); matchConfig(YamlConfiguration.loadConfiguration(lang_file), lang_file); } @@ -256,8 +256,9 @@ public void loadLangFile(CommandSender sender) { fishing_main_hand = lang.getString("fishing-main-hand"); grappling_off_hand = lang.getString("grappling-off-hand"); grappling_main_hand = lang.getString("grappling-main-hand"); - compass_pointed = lang.getString("compass-pointed"); - compass_coords = lang.getString("compass-coords"); + compass_waypoint_set = lang.getString("compass-waypoint-set"); + compass_waypoint_get = lang.getString("compass-waypoint-get"); + compass_waypoint_unset = lang.getString("compass-waypoint-unset"); compass_lore = lang.getStringList("compass-lore"); players_only = lang.getString("players-only"); toggle_chat_local = lang.getString("toggle-chat-local"); @@ -423,7 +424,7 @@ private void saveLang(YamlConfiguration lang, File file) { try { lang.save(file); String prefix = lang.getString("prefix"); - Utils.sendColoredMsg(Bukkit.getConsoleSender(), prefix + "&7" + lang_yml + " &aUpdated"); + Utils.sendColoredMsg(Bukkit.getConsoleSender(), prefix + "&7" + langFilePath + " &aUpdated"); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index 4db7eb5..568be05 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -2,11 +2,15 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.util.Utils; +import java.util.ArrayList; +import java.util.List; + @SuppressWarnings({"UnstableApiUsage", "PatternValidation"}) public abstract class Item { @@ -61,6 +65,15 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod Utils.log("&cFailed to load item name for item &r'&b" + key + "&r'"); } + List lore = ITEM_CONFIG.getLore(key); + if (lore != null && !lore.isEmpty()) { + List loreComponents = new ArrayList<>(); + for (String line : lore) { + loreComponents.add(MINI.deserialize("" + line)); + } + itemStack.lore(loreComponents); + } + // Max Damage int maxDamage = ITEM_CONFIG.getMaxDamage(key); if (maxDamage > 0) { diff --git a/src/main/java/tk/shanebee/survival/item/ItemConfig.java b/src/main/java/tk/shanebee/survival/item/ItemConfig.java index 799ff3b..438428f 100644 --- a/src/main/java/tk/shanebee/survival/item/ItemConfig.java +++ b/src/main/java/tk/shanebee/survival/item/ItemConfig.java @@ -7,6 +7,7 @@ import java.io.File; import java.io.IOException; +import java.util.List; public class ItemConfig { @@ -63,6 +64,14 @@ String getName(String key) { return this.settings.getString("items." + key + ".name"); } + List getLore(String key) { + String path = "items." + key + ".lore"; + if (this.settings.contains(path)) { + return this.settings.getStringList(path); + } + return null; + } + int getMaxDamage(String key) { String path = "items." + key + ".max_damage"; if (this.settings.contains(path)) { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java index 348af93..ee21ef6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java @@ -3,6 +3,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Tag; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -40,10 +41,11 @@ private void onItemClick(PlayerInteractEvent event) { else if (offItem.getType() == Material.COMPASS && event.getHand() == EquipmentSlot.HAND) return; if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + Block clickedBlock = event.getClickedBlock(); if (!player.isSneaking()) return; // To prevent accidentally resetting waypoint, player needs to sneak - assert event.getClickedBlock() != null; - switch (event.getClickedBlock().getType()) { + assert clickedBlock != null; + switch (clickedBlock.getType()) { case HOPPER: case CRAFTING_TABLE: case DROPPER: @@ -51,22 +53,29 @@ private void onItemClick(PlayerInteractEvent event) { return; default: } - if (Tag.BEDS.isTagged(event.getClickedBlock().getType())) return; - if (Utils.isWoodGate(event.getClickedBlock().getType())) return; - if (Tag.DOORS.isTagged(event.getClickedBlock().getType())) return; - if (Utils.isCookingBlock(event.getClickedBlock().getType())) return; - if (Utils.isStorageBlock(event.getClickedBlock().getType())) return; - if (Utils.isUtilityBlock(event.getClickedBlock().getType())) return; + if (Tag.BEDS.isTagged(clickedBlock.getType())) return; + if (Utils.isWoodGate(clickedBlock.getType())) return; + if (Tag.DOORS.isTagged(clickedBlock.getType())) return; + if (Utils.isCookingBlock(clickedBlock.getType())) return; + if (Utils.isStorageBlock(clickedBlock.getType())) return; + if (Utils.isUtilityBlock(clickedBlock.getType())) return; - Location loc = event.getClickedBlock().getRelative(event.getBlockFace()).getLocation(); - player.sendMessage(Utils.getColoredString("&d" + lang.compass_pointed + locToString(loc))); + Location loc = clickedBlock.getRelative(event.getBlockFace()).getLocation(); + Utils.sendColoredMini(player, lang.compass_waypoint_set, locToString(loc)); loc.add(0.5, 0.5, 0.5); - playerManager.setWaypoint(player, loc, true); + this.playerManager.setWaypoint(player, loc, true); } if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) { - Location loc = player.getLocation().getBlock().getLocation(); - player.sendMessage(Utils.getColoredString("&d" + lang.compass_coords + locToString(loc))); + PlayerData playerData = this.playerManager.getPlayerData(player); + Location waypoint = playerData.getCompassWaypoint(player.getWorld()); + if (waypoint != null) { + int distance = (int) player.getLocation().distance(waypoint); + String s = locToString(waypoint); + Utils.sendColoredMini(player, lang.compass_waypoint_get, distance, s); + } else { + Utils.sendColoredMini(player, lang.compass_waypoint_unset); + } } } } diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 459256b..6f40af8 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -1,6 +1,8 @@ package tk.shanebee.survival.util; import com.google.common.collect.ImmutableSet; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -27,6 +29,8 @@ @SuppressWarnings({"WeakerAccess", "unused"}) public class Utils { + private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage(); + private static final Pattern HEX_PATTERN = Pattern.compile("<#([A-Fa-f0-9]){6}>"); private static final ImmutableSet CONCRETE_BLOCKS; private final static ImmutableSet GLAZED_TERRACOTTA; @@ -567,6 +571,11 @@ public static void sendColoredMsg(CommandSender player, String msg) { player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); } + public static void sendColoredMini(CommandSender player, String format, Object... args) { + String f = String.format(format, args); + player.sendMessage(MINI_MESSAGE.deserialize(f)); + } + /** * Send a colored console message *

This will NOT include plugin prefix

diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index fc1d56e..f5f85e5 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -34,6 +34,11 @@ items: name: "Compass" repair_cost: 0 repair_percent: 0.85 + lore: + - '<#B1BBBE>Shift-Right-Click:' + - '<#17DA4F> Set waypoint to current location' + - '<#B1BBBE>Left-Click:' + - '<#17DA4F> See coords of waypoint' firestriker: name: "Firestriker" repair_cost: 0 diff --git a/src/main/resources/lang_CN.yml b/src/main/resources/lang_CN.yml deleted file mode 100644 index fcf85ba..0000000 --- a/src/main/resources/lang_CN.yml +++ /dev/null @@ -1,231 +0,0 @@ -# SurvivalPlus 语言文件 - -#################### -# 语言: Chinese (CN) -# 作者: FattyMieo, ShaneBee -# 译者: BackWheel -# Date: 28/4/2016 (Refreshed 23/2/2020) -#################### -# -# 你可以自定义本文件 -# -#################### - -#################### -# 系统消息 -#################### - -prefix: "&7[&3Survival&bPlus&7] " -no-perm: "&c你没有权限执行这个指令" - -# 玩家加入游戏后会看到以下插件帮助的消息 -# 你可以更改为你想要的帮助链接 -survival-guide-msg: "&6本服修改了大量原版生存机制,为了让你有更加流畅且愉快的游戏体验,请 " -survival-guide-click-msg: "&b点击这里查看游戏指南" -survival-guide-hover-msg: "点击查看帮助" -survival-guide-link: "http://mineplugin.org/SurvivalPlus" - -resource-pack-accepted: "成功加载服务器资源包." -resource-pack-declined: "**资源包被拒绝**" -resource-pack-apply: "请使用指定服务器资源包." -resource-pack-required: "该材质包将用于显示本服的更多物品." - - -task-must-use-shovel: "你需要使用铲子才能挖掘这个方块." -task-must-use-axe: "你需要使用斧头才能砍伐木头." -task-must-use-pick: "你需要使用镐子才能挖掘矿物." -task-must-use-shear: "你需要使用剪刀才能剪掉这个方块." -task-must-use-hammer: "你需要使用锤子才能进行方块放置." -task-must-use-sickle: "你需要使用镰刀才能进行农作物收获." - -no-rename: "你不能修改这个物品的名字或者对物品进行修复 " -period: "." - -charge: "已充能!" -charge-ready: "准备充能!" -charge-unable: "无法充能." - -lack-of-energy: "装备未完成充能,请等待充能完毕再进行使用" - -arrows-off-hand: "&c你必须副手持箭才能使用弓." -arrows-off-hand-crossbow: "&c你必须副手持箭才能使用弩." -bow-main-hand: "&c你必须主手手持弓." -recurved-bow: "&3弓" -recurved-crossbow: "&3弩" -recurved: "&7反曲" - -fishing-off-hand: "&c请勿双持钓竿,你需要单手持钓竿才能使用." -fishing-main-hand: "&c你必须用主手持钓竿才能使用钓竿." -grappling-off-hand: "&c请勿双持抓钩,你需要单手持抓钩才能使用." -grappling-main-hand: "&c你必须主手持抓钩才能使用抓钩." - -compass-pointed: "已设置指南针航点" -compass-coords: "你的坐标:" -compass-lore: - - ' ' - - '&7左键单击:' - - '&2 查看你所在的位置坐标' - - '&7右键单击:' - - '&2 设置指南针航点' - -players-only: "仅适用于玩家." -toggle-chat-local: "&b开启&a本地&b聊天." -toggle-chat-global: "&b开启&2全服&b聊天." -toggle-chat-disabled: "&c本服务器关闭了聊天模式的切换." -invalid-arg: "无效的参数,请检查指令是否输入错误." - -starved-eat: "你饿了,吃点东西吧." -dehydrated-drink: "你就快脱水了,喝点水吧." -healthboard-title: "状态" -hunger: "饥饿值" -thirst: "口渴值" -energy: "&d能量值" -carbohydrates: "碳水化合物" -protein: "蛋白质" -vitamins: "维他命/矿物质" -nutrition-gui: "食物营养参数GUI" -nutrition-gui-next-page: "&b下一页" -nutrition-gui-last-page: "&b最后一页" -carbohydrates-lack: "吃点谷类或糖来补充碳水化合物吧." -vitamins-lack: "吃点蔬菜来补充维他命/矿物质吧." -protein-lack: "吃点肉或喝点牛奶来补充蛋白质吧." - -healing: "&a治疗中 " -healing-self: "&a自我疗愈&r治疗自己中" -keep: "&a, 保持 " -on-hand: "&a 手持." -being-healed: "&a你正在被治疗 " -stay-still: "&a, 请勿移动." -healing-complete: "治疗完成." -healing-interrupted: "治疗中断." - -# 能量等级 -energy-level-10: "&6您开始感到有些疲倦." -energy-level-6-5: "&6您开始感到有点疲惫和虚弱." -energy-level-3-5: "&e您开始感到头晕, 也许是时候入睡了." -energy-level-2: "&c您开始感到头晕目眩, 赶快休息一下." -energy-level-1: "&c由于缺乏睡眠,你快要猝死了." - -locked: "已锁定" -missing-component: "缺少组件" - -#################### -# 物品名称及介绍 -#################### - -in-main-hand: "位于主手时:" -in-off-hand: "位于副手时:" -attack-speed: "攻击速度" -attack-damage: "攻击伤害" -right-click-sprinting: "奔跑时右键:" -right-click-sneaking: "潜行时右键:" -decrease-hunger-value: "&7> 降低饥饿值" - -hatchet: "燧石斧" -mattock: "燧石镐" -firestriker: "简易打火石" -firestriker-damaged: "损坏的打火石" -firestriker-lore: "&7右键可点燃物品||&bshift+右键进入冶炼界面||&7 -放入你想冶炼的物品||&7 -点击冶炼" -shiv: "匕首" -poisoned-enemy: "&2添毒: 给予敌人中毒效果" -poisoned-retain: "&2中毒效果 &7会持续一段时间" -reduce-50: "&7> 伤害-50%" -grappling-hook: "抓钩" - -hammer: "锤子" -workbench: "工作台" - -valkyrie-axe: "瓦基里女武神之斧" -valkyrie-axe-unable-dual: "&c你无法双持瓦基里女武神之斧" -valkyrie-axe-spin: "&a旋风斩: 手持斧头旋转一圈可对周围敌人造成伤害!" -valkyrie-axe-cooldown: "&7> 冷却时间: 1 秒" - -quartz-breaker: "石英破碎机" -haste: "&e急迫" - -obsidian-mace: "黑曜石重锤" -cripple-hit: "&d重击: 给予命中的敌人 &8虚弱效果" -drain-hit: "&a嗜血: 每次攻击会获得&b2 颗心" -exhausted-slow: "&8沉重: &c你会获得缓慢 II效果" -expire-disarm: "&7> 缴械5秒" -knockback-resistance: "&9+50% 击退距离" - -ender-giant-blade: "末影巨刃" -ender-giant-blade-unable-duel: "&c你无法双持末影巨刃" -ender-giant-blade-charge: "&a充能技: 奔跑时右键会冲刺攻击前方敌人" -ender-giant-blade-cooldown: "&7> 冷却时间: 5 秒" -half-shield-resistance: "&a末影护盾: 获得 &4抗性提升 II效果" -reflecting-coming: "&7> 反弹受到的40%的伤害" - -blaze-sword: "火焰神剑" -blaze-sword-fire-resistance: "&6免疫火焰伤害" -blaze-sword-fiery: "&c灼伤: -3 颗心的生命值" -blaze-sword-spread-fire: "&6点火" -blaze-sword-cost: "&7> 消耗1点耐久" - -reinforced-boots: "强化皮革靴子" -reinforced-tunic: "强化皮革外套" -reinforced-pants: "强化皮革裤子" -reinforced-hat: "强化皮革帽子" - -golden-sabatons: "金靴子" -golden-guard: "金胸甲" -golden-greaves: "金护腿" -golden-crown: "金皇冠" - -fermented-skin: "发酵皮革" -medical-kit: "医疗包" -water-bowl: "&b装满水的碗" - -suspicious-meat: "&e可疑肉" - -# 水瓶名称、描述和颜色 -# 查看RGB颜色: -# http://minecraft.tools/en/potion.php -dirty-water: "水瓶" -dirty-water-lore: "&7装满了污水..." -dirty-water-color: 12769874 -clean-water: "&b水瓶" -clean-water-lore: "&7简单加热过滤的水" -clean-water-color: 1213666 -purified-water: "&b水瓶" -purified-water-lore: "&7纯净水" -purified-water-color: 0x00FFFF - -coffee-bean-name: "咖啡豆" -coffee-name: "&3咖啡" -coffee-color: 9461779 -cold-milk-name: "&b牛奶" -cold-milk-color: 16250871 -hot-milk-name: "&c热牛奶" -hot-milk-color: 15456977 -hot-milk-drink: "&c哎哟,那太烫了!" -breeding-egg-name: "繁殖卵" - -flint_sickle: "&8燧石镰刀" -stone_sickle: "&7石镰刀" -iron_sickle: "&3铁镰刀" -diamond_sickle: "&b钻石镰刀" - -campfire-name: "&a篝火" -campfire-lore: "&b未点燃的篝火||&7使用木棍进行添柴||&7从而点燃篝火" - -bee-helmet-name: '&6养蜂人头盔' -bee-chest-name: '&6养蜂人胸甲' -bee-legs-name: '&6养蜂人护腿' -bee-boots-name: '&6养蜂人靴子' -bee-suit-lore: '&b可防止被蜜蜂攻击' -snow-boots-name: '&x&9&E&C&9&C&A雪靴' -snow-boots-lore: '&b在雪中移动更快' -rain-boots-name: '&x&D&6&E&7&0&3雨鞋' -rain-boots-lore: '&b在雨中移动更快' - -#################### -# 指令提醒 -#################### - -# 是玩家名称的变量! -cmd-player-not-online: "&c 并不在线!" -cmd-heal-self: "&a你已恢复健康状态!" -cmd-heal-by: "&a 为你恢复了健康!" -cmd-heal-other: "&a你为 恢复了健康!" diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index a6ee1c0..bee6ce0 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -58,14 +58,9 @@ fishing-main-hand: "&cYou must use a fishing pole with your main hand." grappling-off-hand: "&cYou must use a grappling hook with an empty off hand." grappling-main-hand: "&cYou must use a grappling hook with your main hand." -compass-pointed: "Compass has pointed at" -compass-coords: "Your coordinates are" -compass-lore: - - ' ' - - '&7Left-Click:' - - '&2 See coords of current location' - - '&7Shift-Right-Click:' - - '&2 Set waypoint for compass' +compass-waypoint-set: "Compass has pointed at %s" +compass-waypoint-get: "You are %s blocks away from your waypoint at %s" +compass-waypoint-unset: "You do not have a waypoint set for this world." players-only: "Works on players only." toggle-chat-local: "&bToggled to &aLocal&b Chat." From 742bd937d9006147dd23040a6240be4516b9366f Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 16:56:31 -0800 Subject: [PATCH 019/133] PlayerData - only return waypoint if set --- .../tk/shanebee/survival/data/PlayerData.java | 3 +-- .../listeners/player/PlayerDataListener.java | 17 ++++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/data/PlayerData.java b/src/main/java/tk/shanebee/survival/data/PlayerData.java index 954651a..55e1ad0 100644 --- a/src/main/java/tk/shanebee/survival/data/PlayerData.java +++ b/src/main/java/tk/shanebee/survival/data/PlayerData.java @@ -385,12 +385,11 @@ public void setCompassWaypoint(Location location) { * @param world World to grab waypoint from * @return Location of waypoint */ - @NotNull public Location getCompassWaypoint(World world) { if (this.compassMap.containsKey(world.getName())) { return this.compassMap.get(world.getName()); } - return world.getSpawnLocation(); + return null; } /** diff --git a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java index 4867a57..26346cb 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java @@ -1,11 +1,13 @@ package tk.shanebee.survival.listeners.player; +import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitScheduler; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.PlayerDataConfig; @@ -13,6 +15,8 @@ import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.managers.ScoreBoardManager; +import java.util.Objects; + public class PlayerDataListener implements Listener { private final Survival plugin; @@ -20,6 +24,7 @@ public class PlayerDataListener implements Listener { private final PlayerDataConfig playerDataConfig; private final ScoreBoardManager scoreboardManager; private final Config config; + private final BukkitScheduler scheduler = Bukkit.getScheduler(); public PlayerDataListener(Survival plugin) { this.plugin = plugin; @@ -43,12 +48,10 @@ private void onJoin(PlayerJoinEvent event) { // Appears you can only set a compass target after a delay if (config.MECHANICS_COMPASS_WAYPOINT) { - new BukkitRunnable() { - @Override - public void run() { - player.setCompassTarget(playerData.getCompassWaypoint(player.getWorld())); - } - }.runTaskLater(this.plugin, 1); + this.scheduler.runTaskLater(this.plugin, () -> { + Location waypoint = playerData.getCompassWaypoint(player.getWorld()); + player.setCompassTarget(Objects.requireNonNullElseGet(waypoint, () -> player.getWorld().getSpawnLocation())); + }, 1); } } From abba71b56038e3d07b23d7aaa0294a8c80124fb9 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 17:18:33 -0800 Subject: [PATCH 020/133] WaterBowl - cleanup --- .../survival/listeners/item/WaterBowl.java | 97 ++++++++----------- 1 file changed, 38 insertions(+), 59 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java index 20e6590..b6f9f10 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java @@ -1,84 +1,63 @@ package tk.shanebee.survival.listeners.item; import org.bukkit.Bukkit; -import org.bukkit.Keyed; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.ItemSpawnEvent; -import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; +import org.bukkit.scheduler.BukkitScheduler; import tk.shanebee.survival.Survival; import tk.shanebee.survival.events.WaterBowlFillEvent; import tk.shanebee.survival.item.Items; public class WaterBowl implements Listener { - private final Survival plugin; - private final boolean THIRST_ENABLED; - private final boolean CLAY_ENABLED; + private final Survival plugin; + private final boolean thirstEnabled; + private final boolean clayEnabled; + private final BukkitScheduler scheduler = Bukkit.getScheduler(); - public WaterBowl(Survival plugin) { - this.plugin = plugin; - this.THIRST_ENABLED = plugin.getSurvivalConfig().MECHANICS_THIRST_ENABLED; - this.CLAY_ENABLED = plugin.getSurvivalConfig().RECIPES_CLAY; - } + public WaterBowl(Survival plugin) { + this.plugin = plugin; + this.thirstEnabled = plugin.getSurvivalConfig().MECHANICS_THIRST_ENABLED; + this.clayEnabled = plugin.getSurvivalConfig().RECIPES_CLAY; + } - @EventHandler(priority = EventPriority.HIGHEST) - private void onConsume(PlayerItemConsumeEvent event) { - if (!THIRST_ENABLED) { - if (event.isCancelled()) return; - if (Items.WATER_BOWL.is(event.getItem())) { - event.setCancelled(true); - } - } - } + @EventHandler(priority = EventPriority.HIGHEST) + private void onConsume(PlayerItemConsumeEvent event) { + if (this.thirstEnabled || event.isCancelled()) return; - @EventHandler - private void onDrop(ItemSpawnEvent event) { - if (event.isCancelled()) return; - if (THIRST_ENABLED || CLAY_ENABLED) { - final org.bukkit.entity.Item itemDrop = event.getEntity(); - if (itemDrop.getItemStack().getType() == Material.BOWL) { - final Runnable task = () -> { - Location itemLocation = itemDrop.getLocation(); - if (itemLocation.getBlock().getType() == Material.WATER) { - WaterBowlFillEvent bowlFillEvent = new WaterBowlFillEvent(itemDrop.getItemStack()); - Bukkit.getPluginManager().callEvent(bowlFillEvent); - if (bowlFillEvent.isCancelled()) return; - int amount = itemDrop.getItemStack().getAmount(); - itemDrop.remove(); - for (int i = 0; i < amount; i++) { - itemDrop.getWorld().dropItem(itemLocation, Items.WATER_BOWL.getItemStack()); - } - } - }; - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, 20L); - } - } - } + if (Items.WATER_BOWL.is(event.getItem())) { + event.setCancelled(true); + } + } - // Prevent water bowls turning into glass bottles - @EventHandler - private void onCraft(PrepareItemCraftEvent event) { - Recipe recipe = event.getRecipe(); - if (recipe instanceof Keyed) { - String key = ((Keyed) recipe).getKey().getKey(); - if (key.equalsIgnoreCase("glass_bottle")) { - CraftingInventory inventory = event.getInventory(); - for (ItemStack itemStack : inventory.getMatrix()) { - if (itemStack != null && Items.WATER_BOWL.is(itemStack)) { - inventory.setResult(null); - } + @EventHandler + private void onDrop(ItemSpawnEvent event) { + if (event.isCancelled()) return; + if (!this.thirstEnabled && !this.clayEnabled) return; + + final org.bukkit.entity.Item itemDrop = event.getEntity(); + if (itemDrop.getItemStack().getType() == Material.BOWL) { + this.scheduler.runTaskLater(this.plugin, () -> { + Location itemLocation = itemDrop.getLocation(); + if (itemLocation.getBlock().getType() != Material.WATER) return; + + WaterBowlFillEvent bowlFillEvent = new WaterBowlFillEvent(itemDrop.getItemStack()); + if (!bowlFillEvent.callEvent()) return; + + World world = itemDrop.getWorld(); + int amount = itemDrop.getItemStack().getAmount(); + itemDrop.remove(); + for (int i = 0; i < amount; i++) { + world.dropItem(itemLocation, Items.WATER_BOWL.getItemStack()); } - } + }, 20); } - } } From 98afaccc18981ec2a966148e77b790ec0a8579e3 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 17:27:18 -0800 Subject: [PATCH 021/133] TropicalFish - revamp --- .../survival/listeners/EventManager.java | 3 +- .../survival/listeners/item/Clownfish.java | 41 ------------- .../survival/listeners/item/TropicalFish.java | 59 +++++++++++++++++++ 3 files changed, 60 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/listeners/item/Clownfish.java create mode 100644 src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index bbe4390..9e017e0 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -27,7 +27,6 @@ import tk.shanebee.survival.listeners.server.LocalChat; import tk.shanebee.survival.listeners.server.RecipeDiscovery; import tk.shanebee.survival.listeners.server.SetResourcePack; -import tk.shanebee.survival.util.Utils; /** * Internal use only @@ -101,7 +100,7 @@ public void registerEvents() { if (config.MECHANICS_BEET_STRENGTH) pm.registerEvents(new BeetrootStrength(), this.plugin); if (config.MECHANICS_CLOWN_FISH) - pm.registerEvents(new Clownfish(), this.plugin); + pm.registerEvents(new TropicalFish(this.plugin), this.plugin); if (config.MECHANICS_LIVING_SLIME) pm.registerEvents(new LivingSlime(plugin), this.plugin); if (config.MECHANICS_ENERGY_ENABLED) diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Clownfish.java b/src/main/java/tk/shanebee/survival/listeners/item/Clownfish.java deleted file mode 100644 index 30bfe14..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/item/Clownfish.java +++ /dev/null @@ -1,41 +0,0 @@ -package tk.shanebee.survival.listeners.item; - -import java.util.Random; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerItemConsumeEvent; - -public class Clownfish implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST) - private void onConsume(PlayerItemConsumeEvent event) { - if (event.isCancelled()) return; - Player player = event.getPlayer(); - if (event.getItem().getType() == Material.TROPICAL_FISH) { - Random rand = new Random(); - Location originLoc = player.getLocation(); - originLoc.getWorld().spawnParticle(Particle.PORTAL, originLoc, 200, 0.5, 0.5, 0.5); - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ITEM_CHORUS_FRUIT_TELEPORT, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - - if (player.getCompassTarget() != null) { - Location teleportLoc = player.getCompassTarget(); - player.teleport(teleportLoc); - teleportLoc.getWorld().spawnParticle(Particle.PORTAL, teleportLoc, 200, 0.5, 0.5, 0.5); - player.getLocation().getWorld().playSound(teleportLoc, Sound.BLOCK_PORTAL_TRAVEL, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - } else { - Location teleportLoc = player.getWorld().getSpawnLocation(); - player.teleport(teleportLoc); - teleportLoc.getWorld().spawnParticle(Particle.PORTAL, teleportLoc, 200, 0.5, 0.5, 0.5); - player.getLocation().getWorld().playSound(teleportLoc, Sound.BLOCK_PORTAL_TRAVEL, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - } - } - } - -} \ No newline at end of file diff --git a/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java b/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java new file mode 100644 index 0000000..895968e --- /dev/null +++ b/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java @@ -0,0 +1,59 @@ +package tk.shanebee.survival.listeners.item; + +import java.util.Random; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.managers.PlayerManager; + +public class TropicalFish implements Listener { + + private final PlayerManager playerManager; + private final Random random = new Random(); + + public TropicalFish(Survival plugin) { + this.playerManager = plugin.getPlayerManager(); + } + + @EventHandler(priority = EventPriority.HIGHEST) + private void onConsume(PlayerItemConsumeEvent event) { + if (event.isCancelled()) return; + Player player = event.getPlayer(); + if (event.getItem().getType() == Material.TROPICAL_FISH) { + Location originLoc = player.getLocation(); + playSoundAndParticle(originLoc, Sound.ITEM_CHORUS_FRUIT_TELEPORT); + + PlayerData playerData = this.playerManager.getPlayerData(player); + Location waypoint = playerData.getCompassWaypoint(player.getWorld()); + + if (waypoint != null) { + player.teleport(waypoint); + playSoundAndParticle(waypoint, Sound.BLOCK_PORTAL_TRAVEL); + } else { + Location respawnLocation = player.getRespawnLocation(); + if (respawnLocation == null || respawnLocation.getWorld() != player.getWorld()) { + // Only teleport in the same world + respawnLocation = player.getWorld().getSpawnLocation(); + } + player.teleport(respawnLocation); + playSoundAndParticle(respawnLocation, Sound.BLOCK_PORTAL_TRAVEL); + } + } + } + + private void playSoundAndParticle(Location location, Sound sound) { + location.getWorld().spawnParticle(Particle.PORTAL, location, 200, 0.5, 0.5, 0.5); + location.getWorld().playSound(location, sound, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); + + } + +} From c09b3203ca6ece718068492e9503afaa5b3ac94e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 18:01:53 -0800 Subject: [PATCH 022/133] Make some items non-repairable - this only prevents repairing with vanilla items, doesn't block combining --- .../item/items/legendary/BlazeSword.java | 12 +--- .../item/items/legendary/EnderGiantBlade.java | 4 +- .../item/items/legendary/ObsidianMace.java | 4 ++ .../item/items/legendary/QuartzPickaxe.java | 4 ++ .../item/items/legendary/ValkyriesAxe.java | 3 + .../survival/item/items/tools/Hammer.java | 3 + .../survival/item/items/tools/Hatchet.java | 2 + .../survival/item/items/tools/Mattock.java | 2 + .../survival/item/items/tools/Shiv.java | 3 + .../survival/listeners/EventManager.java | 1 - .../survival/listeners/block/NoAnvil.java | 60 ------------------- src/main/resources/items.yml | 10 ++-- 12 files changed, 32 insertions(+), 76 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java b/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java index ebf902a..be871e2 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java @@ -1,27 +1,19 @@ package tk.shanebee.survival.item.items.legendary; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.attribute.AttributeModifier.Operation; import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlotGroup; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.util.Utils; - -import java.util.Arrays; -import java.util.UUID; @SuppressWarnings("UnstableApiUsage") public class BlazeSword extends Item { @@ -46,6 +38,8 @@ public BlazeSword() { itemMeta.addEnchant(Enchantment.FIRE_ASPECT, 2, true); itemMeta.addEnchant(Enchantment.UNBREAKING, 3, false); itemStack.setItemMeta(itemMeta); + + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("blaze_sword", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java b/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java index 472ca5c..f20f513 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java @@ -1,8 +1,8 @@ package tk.shanebee.survival.item.items.legendary; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; -import org.bukkit.NamespacedKey; import org.bukkit.Tag; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -38,6 +38,8 @@ public EnderGiantBlade() { itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); itemStack.setItemMeta(itemMeta); + + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("ender_giant_blade", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java b/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java index 8027548..c6d9a51 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.legendary; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -37,6 +38,9 @@ public ObsidianMace() { itemMeta.addEnchant(Enchantment.KNOCKBACK, 3, true); itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); + itemStack.setItemMeta(itemMeta); + + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("obsidian_mace", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java b/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java index 05e373b..7c1d875 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.legendary; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.attribute.Attribute; @@ -32,6 +33,9 @@ public QuartzPickaxe() { itemMeta.addEnchant(Enchantment.SILK_TOUCH, 1, false); itemMeta.addEnchant(Enchantment.MENDING, 1, false); itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); + itemStack.setItemMeta(itemMeta); + + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("quartz_pickaxe", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java b/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java index ce9c699..50c6f94 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.legendary; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.attribute.Attribute; @@ -28,6 +29,8 @@ public ValkyriesAxe() { itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); itemStack.setItemMeta(itemMeta); + + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("valkyries_axe", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java b/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java index 3e7dc09..388a568 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.tools; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -15,6 +16,8 @@ public Hammer() { ItemStack itemStack = ItemType.WOODEN_SWORD.createItemStack(); ItemMeta hammerMeta = itemStack.getItemMeta(); itemStack.setItemMeta(hammerMeta); + + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("hammer", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java b/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java index 8eb640e..2f18b80 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.tools; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -12,6 +13,7 @@ public class Hatchet extends Item { public Hatchet() { ItemStack itemStack = ItemType.WOODEN_AXE.createItemStack(); + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("hatchet", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java b/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java index 5cf56f1..f6e142c 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.tools; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; @@ -14,6 +15,7 @@ public class Mattock extends Item { public Mattock() { ItemStack itemStack = ItemType.WOODEN_PICKAXE.createItemStack(); + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("mattock", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java b/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java index 39dceff..af6bfb8 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.item.items.tools; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.attribute.Attribute; @@ -29,6 +30,8 @@ public Shiv() { itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_shivSpeed); itemStack.setItemMeta(itemMeta); + + itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("shiv", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index 9e017e0..fec0897 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -58,7 +58,6 @@ public void registerEvents() { pm.registerEvents(new Campfire(plugin), this.plugin); //pm.registerEvents(new Backpack(), this.plugin); needs to be reworked } -// pm.registerEvents(new NoAnvil(plugin), this.plugin); // TODO see class if (config.MECHANICS_BOW) pm.registerEvents(new Bow(plugin), this.plugin); if (config.MECHANICS_GRAPPLING_HOOK) diff --git a/src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java b/src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java deleted file mode 100644 index c0a0dac..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/block/NoAnvil.java +++ /dev/null @@ -1,60 +0,0 @@ -package tk.shanebee.survival.listeners.block; - -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; -import org.bukkit.ChatColor; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.AnvilInventory; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.ItemStack; - -import tk.shanebee.survival.Survival; - -public class NoAnvil implements Listener { - // TODO lets maybe handle this with components?!?! - -// private Lang lang; -// -// public NoAnvil(Survival plugin) { -// this.lang = plugin.getLang(); -// } -// -// @EventHandler -// private void onInventoryClick(InventoryClickEvent e) { -// Inventory inv = e.getInventory(); -// -// if (inv instanceof AnvilInventory) { -// AnvilInventory anvil = (AnvilInventory) inv; -// InventoryView view = e.getView(); -// int rawSlot = e.getRawSlot(); -// -// // compare raw slot to the inventory view to make sure we are in the upper inventory -// if (rawSlot == view.convertSlot(rawSlot)) { -// // 2 = result slot -// if (rawSlot == 2) { -// // item in the left slot -// ItemStack item = anvil.getContents()[0]; -// -// if (item != null) { -// if (ItemManager.compare(item, Items.VALKYRIES_AXE) -// || ItemManager.compare(item, Items.QUARTZ_PICKAXE) || ItemManager.compare(item, Items.OBSIDIAN_MACE) -// || ItemManager.compare(item, Items.ENDER_GIANT_BLADE) || ItemManager.compare(item, Items.BLAZE_SWORD) -// || ItemManager.compare(item, Items.HATCHET) || ItemManager.compare(item, Items.MATTOCK) -// || ItemManager.compare(item, Items.FIRESTRIKER) || ItemManager.compare(item, Items.SHIV) -// || ItemManager.compare(item, Items.HAMMER)) { -// e.setCancelled(true); -// e.getWhoClicked().closeInventory(); -// e.getWhoClicked().sendMessage(ChatColor.RED + Utils.getColoredString(lang.no_rename) + item.getItemMeta().getDisplayName() + ChatColor.RED + Utils.getColoredString(lang.period)); -// } -// } -// } -// } -// } -// } - -} diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index f5f85e5..4ae5226 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -101,23 +101,23 @@ items: # LEGENDARY TOOLS blaze_sword: name: "Blaze Sword" - repair_cost: 3 + repair_cost: 5 repair_percent: 0.95 ender_giant_blade: name: "Ender Giant Blade" - repair_cost: 3 + repair_cost: 5 repair_percent: 0.95 obsidian_mace: name: "Obsidian Mace" - repair_cost: 3 + repair_cost: 5 repair_percent: 0.95 quartz_pickaxe: name: "Quartz Pickaxe" - repair_cost: 2 + repair_cost: 5 repair_percent: 0.95 valkyries_axe: name: "Valkyries Axe" - repair_cost: 2 + repair_cost: 5 repair_percent: 0.95 # ARMOR From b3b4ff4cf318c238d9d907d916774eab8edbd2ec Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 18:17:14 -0800 Subject: [PATCH 023/133] Utils - fix up requires axe/shovel --- .../java/tk/shanebee/survival/util/Utils.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 6f40af8..1abc492 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.util; import com.google.common.collect.ImmutableSet; -import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -43,6 +42,8 @@ public class Utils { private final static ImmutableSet FARMABLE; private final static ImmutableSet REQUIRES_SHEARS; private final static ImmutableSet REQUIRES_HAMMER; + private final static ImmutableSet REQUIRES_SHOVEL; + private final static ImmutableSet REQUIRES_AXE; static { CONCRETE_BLOCKS = ImmutableSet.builder() @@ -226,6 +227,18 @@ public class Utils { .add(Material.IRON_BARS) .add(Material.SCAFFOLDING) .build(); + + ImmutableSet.Builder requiresShovelBuilder = ImmutableSet.builder(); + for (Material value : Tag.MINEABLE_SHOVEL.getValues()) { + if (value != Material.GRAVEL) requiresShovelBuilder.add(value); + } + REQUIRES_SHOVEL = requiresShovelBuilder.build(); + + ImmutableSet.Builder requiresAxeBuilder = ImmutableSet.builder(); + for (Material value : Tag.MINEABLE_AXE.getValues()) { + if (!Tag.REPLACEABLE.isTagged(value)) requiresAxeBuilder.add(value); + } + REQUIRES_AXE = requiresAxeBuilder.build(); } /** @@ -414,7 +427,7 @@ public static boolean isShovel(Material material) { * @return True if material requires a shovel */ public static boolean requiresShovel(Material material) { - return Tag.MINEABLE_SHOVEL.isTagged(material); + return REQUIRES_SHOVEL.contains(material); } /** @@ -455,7 +468,7 @@ public static boolean isAxe(Material material) { * @return True if material requires axe */ public static boolean requiresAxe(Material material) { - return Tag.MINEABLE_AXE.isTagged(material); + return REQUIRES_AXE.contains(material); } /** From 8d3dd2e80facb61c5ed15a51b071ae7f38d1ca28 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 18:26:28 -0800 Subject: [PATCH 024/133] BlockBreak - cleanup --- .../survival/listeners/block/BlockBreak.java | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java index 9e5c8f2..a19f539 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.listeners.block; -import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; @@ -30,8 +29,8 @@ public class BlockBreak implements Listener { - private Config settings; - private Lang lang; + private final Config settings; + private final Lang lang; public BlockBreak(Survival plugin) { this.lang = plugin.getLang(); @@ -55,7 +54,7 @@ private void onBlockBreak(BlockBreakEvent event) { if (Utils.requiresShovel(material)) { event.setCancelled(true); player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_shovel)); + Utils.sendColoredMini(player, "" + lang.task_must_use_shovel); } //Flint if (material == Material.GRAVEL) { @@ -65,7 +64,7 @@ private void onBlockBreak(BlockBreakEvent event) { double chance = rand.nextDouble(); if (chance <= settings.DROP_RATE_FLINT) - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.FLINT)); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(Material.FLINT)); } } else { Block above = block.getRelative(BlockFace.UP); @@ -86,7 +85,7 @@ private void onBlockBreak(BlockBreakEvent event) { if (Utils.requiresAxe(material)) { event.setCancelled(true); player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_axe)); + Utils.sendColoredMini(player, "" + lang.task_must_use_axe); } //Fix half door glitch @@ -101,7 +100,7 @@ private void onBlockBreak(BlockBreakEvent event) { if (Utils.requiresPickaxe(material)) { event.setCancelled(true); player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_pick)); + Utils.sendColoredMini(player, "" + lang.task_must_use_pick); } } @@ -109,40 +108,39 @@ private void onBlockBreak(BlockBreakEvent event) { if (Utils.isFarmable(material)) { if (!Items.Tags.SICKLES.isTagged(tool)) { event.setCancelled(true); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_sickle)); + Utils.sendColoredMini(player, "" + lang.task_must_use_sickle); } else { event.setDropItems(false); Location loc = event.getBlock().getLocation(); int random = 1; int multiplier = 1; - boolean grown = true; + boolean fullyGrown = true; - if (event.getBlock().getBlockData() instanceof Ageable) { - Ageable crop = ((Ageable) event.getBlock().getBlockData()); - grown = crop.getAge() == crop.getMaximumAge(); + if (event.getBlock().getBlockData() instanceof Ageable crop) { + fullyGrown = crop.getAge() == crop.getMaximumAge(); } // Flint/Stone sickles drop a chance of 0-1 items (not grown) or 1-2 (grown) if (Items.FLINT_SICKLE.is(tool)) { multiplier = 4; - random = grown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); + random = fullyGrown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); } if (Items.STONE_SICKLE.is(tool)) { multiplier = 2; - random = grown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); + random = fullyGrown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); } // Iron/Diamond sickles drop a chance of 1 (not grown) or 2-4 items (grown) if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { - random = grown ? new Random().nextInt(2) + 3 : 1; + random = fullyGrown ? new Random().nextInt(2) + 3 : 1; } - for (Material drop : Utils.getDrops(material, grown)) { + for (Material drop : Utils.getDrops(material, fullyGrown)) { if (drop != Material.AIR && random != 0) { assert loc.getWorld() != null; if (drop == Material.PUMPKIN) { // prevent duping pumpkins random = 1; } - loc.getWorld().dropItemNaturally(loc, new ItemStack(drop, random)); + loc.getWorld().dropItemNaturally(loc.add(0.5,0.1,0.5), new ItemStack(drop, random)); } } if (tool.getType().getMaxDurability() < Utils.getDurability(tool) + multiplier) { @@ -161,7 +159,7 @@ private void onBlockBreak(BlockBreakEvent event) { if (Utils.requiresShears(material)) { event.setCancelled(true); player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_shear)); + Utils.sendColoredMini(player, "" + lang.task_must_use_shear); } } @@ -171,7 +169,7 @@ private void onBlockBreak(BlockBreakEvent event) { double chance = rand.nextDouble(); if (chance <= settings.DROP_RATE_STICK) - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.STICK)); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5,0.1,0.5), new ItemStack(Material.STICK)); } } if (settings.RECIPES_WORKBENCH && material == Material.CRAFTING_TABLE && !event.isCancelled()) { @@ -181,7 +179,7 @@ private void onBlockBreak(BlockBreakEvent event) { } } else { if (Utils.isOreBlock(material) || Utils.isNaturalOreBlock(material)) { - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(material)); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5,0.1,0.5), new ItemStack(material)); } } } @@ -208,7 +206,7 @@ private void onHarvest(PlayerInteractEvent e) { } if (!Items.Tags.SICKLES.isTagged(tool)) { e.setCancelled(true); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_sickle)); + Utils.sendColoredMini(player, "" + lang.task_must_use_sickle); } else { if (bush.getAge() >= 2) { int berries = 0; @@ -248,7 +246,7 @@ private void onHarvest(PlayerInteractEvent e) { } } if (berries != 0) - loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.SWEET_BERRIES, berries)); + loc.getWorld().dropItemNaturally(loc.add(0.5, 0.1, 0.5), new ItemStack(Material.SWEET_BERRIES, berries)); bush.setAge(1); block.setBlockData(bush); From d67159965fcc9c409f333ba0a41ee1776fde81b6 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 18:30:00 -0800 Subject: [PATCH 025/133] Campfire - cleanup - also remove water putout fire thing, since vanilla does that now --- .../survival/listeners/block/Campfire.java | 53 +++++++------------ 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java index b6d94a4..8f1730c 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java @@ -6,13 +6,11 @@ import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.data.Lightable; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockCookEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; import tk.shanebee.survival.item.Items; @@ -21,7 +19,7 @@ public class Campfire implements Listener { - private Survival plugin; + private final Survival plugin; public Campfire(Survival plugin) { this.plugin = plugin; @@ -29,63 +27,52 @@ public Campfire(Survival plugin) { // When placing a campfire, turn it off (Requiring a player to light it manually) @EventHandler - private void onPlaceCampfire(BlockPlaceEvent e) { - if (e.getBlockPlaced().getType() != Material.CAMPFIRE) return; - if (Items.CAMPFIRE.is(e.getItemInHand())) { - Lightable camp = ((Lightable) e.getBlock().getBlockData()); + private void onPlaceCampfire(BlockPlaceEvent event) { + if (event.getBlockPlaced().getType() != Material.CAMPFIRE) return; + if (Items.CAMPFIRE.is(event.getItemInHand())) { + Lightable camp = ((Lightable) event.getBlock().getBlockData()); camp.setLit(false); - e.getBlock().setBlockData(camp); + event.getBlock().setBlockData(camp); } else { - if (e.getPlayer().getGameMode() == GameMode.CREATIVE) return; - e.setCancelled(true); + if (event.getPlayer().getGameMode() == GameMode.CREATIVE) return; + event.setCancelled(true); } } // Hit an unlit campfire with a stick to light it @EventHandler - private void lightFire(PlayerInteractEvent e) { - if (e.getClickedBlock() == null) return; - if (e.getClickedBlock().getType() == Material.CAMPFIRE) { - if (e.getItem() != null && e.getItem().getType() == Material.STICK) { - Block block = e.getClickedBlock(); + private void lightFire(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) return; + if (event.getClickedBlock().getType() == Material.CAMPFIRE) { + if (event.getItem() != null && event.getItem().getType() == Material.STICK) { + Block block = event.getClickedBlock(); Lightable camp = ((Lightable) block.getBlockData()); if (camp.isLit()) return; - e.setCancelled(true); + event.setCancelled(true); int i = new Random().nextInt(20); if (i == 10) { camp.setLit(true); block.setBlockData(camp); - ItemStack tool = e.getItem(); + ItemStack tool = event.getItem(); tool.setAmount(tool.getAmount() - 1); - e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); + event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> - e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_GENERIC_BURN, 1, 1), 1); + event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.ENTITY_GENERIC_BURN, 1, 1), 1); } - } else if (e.getItem() != null && e.getItem().getType() == Material.POTION) { - if (!e.getPlayer().isSneaking()) return; - Lightable camp = ((Lightable) e.getClickedBlock().getBlockData()); - if (!camp.isLit()) return; - camp.setLit(false); - e.getClickedBlock().setBlockData(camp); - Player p = e.getPlayer(); - if (e.getHand() == EquipmentSlot.HAND) p.getInventory().setItemInMainHand(new ItemStack(Material.GLASS_BOTTLE)); - if (e.getHand() == EquipmentSlot.OFF_HAND) p.getInventory().setItemInOffHand(new ItemStack(Material.GLASS_BOTTLE)); - p.playSound(e.getPlayer().getLocation(), Sound.BLOCK_FIRE_EXTINGUISH, 1, 1); - } } } // Randomly put out the fire when cooking food @EventHandler - private void fireFinishedCooking(BlockCookEvent e) { - if (e.getBlock().getType() != Material.CAMPFIRE) return; + private void fireFinishedCooking(BlockCookEvent event) { + if (event.getBlock().getType() != Material.CAMPFIRE) return; int i = new Random().nextInt(8); if (i == 5) { - Block block = e.getBlock(); + Block block = event.getBlock(); Lightable camp = ((Lightable) block.getBlockData()); camp.setLit(false); block.setBlockData(camp); From e4aa6368530941050f680f047805048d18581781 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 19:24:15 -0800 Subject: [PATCH 026/133] ChestPigmen - update some bigs --- .../tk/shanebee/survival/config/Config.java | 6 +- .../survival/listeners/block/BlockPlace.java | 93 +++++++------- .../listeners/block/SnowGeneration.java | 2 +- .../listeners/block/SnowballThrow.java | 7 +- .../listeners/entity/ChestPigmen.java | 121 ++++++++++-------- src/main/resources/config.yml | 13 +- 6 files changed, 130 insertions(+), 112 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 011fd65..00c48b6 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -446,9 +446,9 @@ private void loadSettings() { this.ITEM_FIRESTRIKER_COOK_TIME = settings.getInt("Item-Mechanics.firestriker.cook-time"); // ENTITY MECHANICS - this.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED = settings.getBoolean("Entity-Mechanics.pigmen-chests.enabled"); - this.ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS = settings.getInt("Entity-Mechanics.pigmen-chests.distance"); - this.ENTITY_MECHANICS_PIGMEN_CHEST_SPEED = settings.getDouble("Entity-Mechanics.pigmen-chests.speed-modifier"); + this.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); + this.ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS = settings.getInt("Entity-Mechanics.zombified-piglin-chests.distance"); + this.ENTITY_MECHANICS_PIGMEN_CHEST_SPEED = settings.getDouble("Entity-Mechanics.zombified-piglin-chests.speed-modifier"); this.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED = settings.getBoolean("Entity-Mechanics.beekeeper-suit.enabled"); this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java index 5b82437..3204d22 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java @@ -1,6 +1,5 @@ package tk.shanebee.survival.listeners.block; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -21,58 +20,58 @@ public class BlockPlace implements Listener { - private Config config; - private Lang lang; + private final Config config; + private final Lang lang; - public BlockPlace(Survival plugin) { - this.config = plugin.getSurvivalConfig(); - this.lang = plugin.getLang(); - } + public BlockPlace(Survival plugin) { + this.config = plugin.getSurvivalConfig(); + this.lang = plugin.getLang(); + } - @SuppressWarnings("ConstantConditions") - @EventHandler(priority = EventPriority.HIGHEST) - private void onBlockPlace(BlockPlaceEvent event) { - if (event.isCancelled()) return; - Player player = event.getPlayer(); + @SuppressWarnings("ConstantConditions") + @EventHandler(priority = EventPriority.HIGHEST) + private void onBlockPlace(BlockPlaceEvent event) { + if (event.isCancelled()) return; + Player player = event.getPlayer(); - ItemStack mainTool = player.getInventory().getItemInMainHand(); - ItemStack offTool = player.getInventory().getItemInOffHand(); + ItemStack mainTool = player.getInventory().getItemInMainHand(); + ItemStack offTool = player.getInventory().getItemInOffHand(); - Block block = event.getBlock(); + Block block = event.getBlock(); - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - if (config.PLACE_ONLY_WITH_HAMMER) { - if (Utils.requiresHammer(block.getType())) { - if (Items.HAMMER.is(offTool)) { - Random rand = new Random(); - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - Utils.setDurability(offTool, Utils.getDurability(offTool) + 1); - } + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { + if (config.PLACE_ONLY_WITH_HAMMER) { + if (Utils.requiresHammer(block.getType())) { + if (Items.HAMMER.is(offTool)) { + Random rand = new Random(); + int chance_reduceDur = rand.nextInt(10) + 1; + if (chance_reduceDur == 1) { + Utils.setDurability(offTool, Utils.getDurability(offTool) + 1); + } - if (Utils.getDurability(offTool) >= offTool.getType().getMaxDurability()) { - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInOffHand(null); - } - } else if (Items.HAMMER.is(mainTool)) { - Random rand = new Random(); - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - Utils.setDurability(mainTool, ((Damageable) mainTool.getItemMeta()).getDamage() + 1); - } + if (Utils.getDurability(offTool) >= offTool.getType().getMaxDurability()) { + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + player.getInventory().setItemInOffHand(null); + } + } else if (Items.HAMMER.is(mainTool)) { + Random rand = new Random(); + int chance_reduceDur = rand.nextInt(10) + 1; + if (chance_reduceDur == 1) { + Utils.setDurability(mainTool, ((Damageable) mainTool.getItemMeta()).getDamage() + 1); + } - if (Utils.getDurability(mainTool) >= mainTool.getType().getMaxDurability()) { - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInMainHand(null); - } - } else { - event.setCancelled(true); - player.updateInventory(); - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.task_must_use_hammer)); - } - } - } - } - } + if (Utils.getDurability(mainTool) >= mainTool.getType().getMaxDurability()) { + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + player.getInventory().setItemInMainHand(null); + } + } else { + event.setCancelled(true); + player.updateInventory(); + Utils.sendColoredMini(player, "" + lang.task_must_use_hammer); + } + } + } + } + } } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java b/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java index e3dfad1..b51de3a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java @@ -11,7 +11,7 @@ public class SnowGeneration implements Listener { - private Survival plugin; + private final Survival plugin; public SnowGeneration(Survival plugin) { this.plugin = plugin; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/SnowballThrow.java b/src/main/java/tk/shanebee/survival/listeners/block/SnowballThrow.java index db61da1..6ab851a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/SnowballThrow.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/SnowballThrow.java @@ -20,11 +20,10 @@ public class SnowballThrow implements Listener { @EventHandler - private void onThrowingSnowball(ProjectileHitEvent e) { - if (e.getEntity() instanceof Snowball) { - Snowball snowball = (Snowball) e.getEntity(); + private void onThrowingSnowball(ProjectileHitEvent event) { + if (event.getEntity() instanceof Snowball snowball) { - BlockIterator iterator = new BlockIterator(snowball.getWorld(), snowball.getLocation().toVector(), + BlockIterator iterator = new BlockIterator(snowball.getWorld(), snowball.getLocation().toVector(), snowball.getVelocity().normalize(), 0.0D, 4); Block actual = null; while (iterator.hasNext()) { diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java index a0e16f2..2d4bb72 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java @@ -1,15 +1,20 @@ package tk.shanebee.survival.listeners.entity; import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.attribute.Attributable; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; import org.bukkit.block.Chest; +import org.bukkit.entity.Mob; import org.bukkit.entity.PigZombie; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; @@ -19,58 +24,72 @@ public class ChestPigmen implements Listener { - private final List GOLD_ITEMS; - private final int RADIUS; - private double SPEED; + private final List goldItems; + private final int radius; + private final NamespacedKey key = NamespacedKey.fromString("survival_plus:chest_pigmen"); + private final AttributeModifier mod; - public ChestPigmen(Survival plugin) { - GOLD_ITEMS = new ArrayList<>(); - GOLD_ITEMS.add(Material.GOLDEN_SWORD); - GOLD_ITEMS.add(Material.GOLDEN_SHOVEL); - GOLD_ITEMS.add(Material.GOLDEN_PICKAXE); - GOLD_ITEMS.add(Material.GOLDEN_AXE); - GOLD_ITEMS.add(Material.GOLDEN_HOE); - GOLD_ITEMS.add(Material.GOLDEN_HELMET); - GOLD_ITEMS.add(Material.GOLDEN_CHESTPLATE); - GOLD_ITEMS.add(Material.GOLDEN_LEGGINGS); - GOLD_ITEMS.add(Material.GOLDEN_BOOTS); - GOLD_ITEMS.add(Material.GOLD_BLOCK); - GOLD_ITEMS.add(Material.GOLD_INGOT); - GOLD_ITEMS.add(Material.GOLD_NUGGET); - RADIUS = plugin.getSurvivalConfig().ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS; - SPEED = plugin.getSurvivalConfig().ENTITY_MECHANICS_PIGMEN_CHEST_SPEED; - } - @EventHandler - private void onOpenChest(PlayerInteractEvent event) { - Player player = event.getPlayer(); - if (player.getWorld().getEnvironment() != World.Environment.NETHER) return; - if (event.getClickedBlock() == null) return; - if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getClickedBlock().getType() != Material.CHEST) return; - Chest chest = ((Chest) event.getClickedBlock().getState()); - if (chestContainsGold(chest)) { - player.getNearbyEntities(RADIUS, RADIUS, RADIUS).forEach(entity -> { - if (entity instanceof PigZombie) { - ((PigZombie) entity).setTarget(player); - moveFaster((Attributable) entity, SPEED); - } - }); - } - } + public ChestPigmen(Survival plugin) { + this.goldItems = new ArrayList<>(); + for (Material material : Registry.MATERIAL) { + if (material.isItem() && material.getKey().toString().contains("gold")) { + this.goldItems.add(material); + } + } + this.radius = plugin.getSurvivalConfig().ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS; + double speedModifier = plugin.getSurvivalConfig().ENTITY_MECHANICS_PIGMEN_CHEST_SPEED; + assert this.key != null; + this.mod = speedModifier > 0 ? new AttributeModifier(this.key, speedModifier, Operation.ADD_SCALAR) : null; - private boolean chestContainsGold(Chest block) { - for (ItemStack item : block.getInventory().getContents()) { - if (item == null) continue; - if (GOLD_ITEMS.contains(item.getType())) return true; - } - return false; - } + } - private void moveFaster(Attributable entity, double modifier) { - if (entity.getAttribute(Attribute.MOVEMENT_SPEED) != null) { - double speed = entity.getAttribute(Attribute.MOVEMENT_SPEED).getBaseValue(); - entity.getAttribute(Attribute.MOVEMENT_SPEED).setBaseValue(speed * modifier); - } - } + @EventHandler + private void onOpenChest(PlayerInteractEvent event) { + Player player = event.getPlayer(); + //if (player.getWorld().getEnvironment() != World.Environment.NETHER) return; + if (event.getClickedBlock() == null) return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getClickedBlock().getType() != Material.CHEST) + return; + Chest chest = ((Chest) event.getClickedBlock().getState()); + if (chestContainsGold(chest)) { + player.getNearbyEntities(this.radius, this.radius, this.radius).forEach(entity -> { + if (entity instanceof PigZombie pigZombie) { + pigZombie.setTarget(player); + moveFaster(pigZombie); + } + }); + } + } + + private boolean chestContainsGold(Chest block) { + for (ItemStack item : block.getInventory().getContents()) { + if (item == null) continue; + if (this.goldItems.contains(item.getType())) return true; + } + return false; + } + + @SuppressWarnings("DataFlowIssue") + private void moveFaster(Mob mob) { + if (this.mod == null) return; + + AttributeInstance attribute = mob.getAttribute(Attribute.MOVEMENT_SPEED); + if (attribute != null && attribute.getModifier(this.key.key()) == null) { + attribute.addTransientModifier(this.mod); + } + } + + @SuppressWarnings("DataFlowIssue") + @EventHandler + private void onStopTarget(EntityTargetEvent event) { + // Remove speed when they stop targeting the player + if (event.getEntity() instanceof PigZombie pigZombie && event.getTarget() == null) { + AttributeInstance attribute = pigZombie.getAttribute(Attribute.MOVEMENT_SPEED); + if (attribute != null && attribute.getModifier(this.key.key()) != null) { + attribute.removeModifier(this.mod); + } + } + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 22f6859..22c2c8d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -350,13 +350,14 @@ Item-Mechanics: # Mechanics that flow around entities Entity-Mechanics: - # When a player opens a chest in the nether, and it contains gold items, zombie pigmen will attack the player - pigmen-chests: - enabled: false - # Max radius to check for zombie pigmen around chests + # When a player opens a chest in the nether, and it contains gold items, zombified piglins will attack the player + zombified-piglin-chests: + enabled: true + # Max radius to check for zombified piglin around chests distance: 24 - # Speeds up the pigmen when they are triggered (1.0 = no increase in speed) - speed-modifier: 1.3 + # Speeds up the zombified piglin when they are triggered + # 0.0 = no increase in speed, 0.25 = 25% faster + speed-modifier: 0.25 # When a player has a beekeeper suit on they will not take damage from bee stings beekeeper-suit: enabled: true From d969d25496955d166f666266de6e0854e6c2da9a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 19:25:45 -0800 Subject: [PATCH 027/133] CompassWaypoint - fix error when moving worlds and no waypoint set --- .../tk/shanebee/survival/listeners/item/CompassWaypoint.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java index ee21ef6..d595e00 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java @@ -85,7 +85,10 @@ private void onItemClick(PlayerInteractEvent event) { private void onWorldChange(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); PlayerData playerData = this.playerManager.getPlayerData(player); - player.setCompassTarget(playerData.getCompassWaypoint(player.getWorld())); + Location waypoint = playerData.getCompassWaypoint(player.getWorld()); + if (waypoint != null) { + player.setCompassTarget(waypoint); + } } private String locToString(Location loc) { From 4100276038f5336486e19b3b92732078d772d2db Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 13 Feb 2025 19:39:35 -0800 Subject: [PATCH 028/133] ChickenSpawn - some cleanup --- .../listeners/entity/ChickenSpawn.java | 56 ++++++------------- 1 file changed, 16 insertions(+), 40 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java index f16b3d5..189db9e 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java @@ -1,11 +1,9 @@ package tk.shanebee.survival.listeners.entity; import org.bukkit.Location; -import org.bukkit.NamespacedKey; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.entity.Chicken; -import org.bukkit.entity.Egg; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -13,9 +11,6 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.player.PlayerEggThrowEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; @@ -24,71 +19,52 @@ public class ChickenSpawn implements Listener { - private final Random rand = new Random(); - private final NamespacedKey key; + private final Random random = new Random(); private final int maxEggs; private final boolean alwaysBaby; private final int babyTicks; public ChickenSpawn(Survival plugin) { Config config = plugin.getSurvivalConfig(); - this.key = new NamespacedKey(plugin, "fromBreeding"); this.maxEggs = config.ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS; this.alwaysBaby = config.ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY; this.babyTicks = config.ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS; } @EventHandler - private void onChickenSpawn(CreatureSpawnEvent e) { - if (e.getEntityType() == EntityType.CHICKEN) { - SpawnReason reason = e.getSpawnReason(); + private void onChickenSpawn(CreatureSpawnEvent event) { + if (event.getEntityType() == EntityType.CHICKEN) { + SpawnReason reason = event.getSpawnReason(); if (reason == SpawnReason.BREEDING) { - e.setCancelled(true); - Location loc = e.getLocation(); + event.setCancelled(true); + Location loc = event.getLocation(); World world = loc.getWorld(); assert world != null; world.dropItem(loc, getEgg()); - world.playSound(loc, Sound.ENTITY_CHICKEN_EGG, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + world.playSound(loc, Sound.ENTITY_CHICKEN_EGG, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); } else if (reason == SpawnReason.EGG) { - Chicken chicken = ((Chicken) e.getEntity()); - if (alwaysBaby) { + Chicken chicken = ((Chicken) event.getEntity()); + if (this.alwaysBaby) { chicken.setBaby(); - chicken.setAge(-babyTicks); + chicken.setAge(-this.babyTicks); } else if (!chicken.isAdult()) { - chicken.setAge(-babyTicks); + chicken.setAge(-this.babyTicks); } } } } @EventHandler - private void onEggThrown(PlayerEggThrowEvent e) { - if (isFromBreeding(e.getEgg())) { - e.setHatching(true); - e.setNumHatches((byte) 1); + private void onEggThrown(PlayerEggThrowEvent event) { + if (Items.BREEDING_EGG.is(event.getEgg().getItem())) { + event.setHatching(true); + event.setNumHatches((byte) 1); } } private ItemStack getEgg() { - int ran = maxEggs > 1 ? rand.nextInt(maxEggs) + 1 : 1; + int ran = maxEggs > 1 ? this.random.nextInt(maxEggs) + 1 : 1; return Items.BREEDING_EGG.getItemStack(ran); } - @SuppressWarnings("ConstantConditions") - private boolean isFromBreeding(Egg egg) { - ItemStack itemStack = egg.getItem(); - ItemMeta meta = itemStack.getItemMeta(); - - assert meta != null; - PersistentDataContainer container = meta.getPersistentDataContainer(); - if (container.has(key, PersistentDataType.BYTE)) { - // Old egg method (changed on sept 4/2020) - // Will keep for a while incase players have old eggs - return container.get(key, PersistentDataType.BYTE) == (byte) 1; - } else if (Items.BREEDING_EGG.is(itemStack)) { - return true; - } - return false; - } - } From 5cda154c53c95b0b6dbf3a0f0e861f9e5382d4cd Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 14 Feb 2025 00:04:35 -0800 Subject: [PATCH 029/133] more item updates and more models --- .../java/tk/shanebee/survival/item/Item.java | 2 - .../item/items/armor/BeekeeperPiece.java | 2 +- .../survival/item/items/armor/RainBoots.java | 2 +- .../survival/item/items/armor/SnowBoots.java | 2 +- .../survival/item/items/drinks/Coffee.java | 3 +- .../survival/item/items/drinks/ColdMilk.java | 4 +- .../survival/item/items/drinks/HotMilk.java | 4 +- .../survival/item/items/drinks/Water.java | 2 +- .../survival/item/items/misc/BreedingEgg.java | 2 +- .../survival/item/items/tools/RecurveBow.java | 2 +- .../item/items/tools/RecurveCrossbow.java | 2 +- src/main/resources/items.yml | 3 +- .../equipment/reinforced_leather.json | 4 +- .../survival_plus/items/beekeeper_boots.json | 161 ++++++++++++++++++ .../items/beekeeper_chestplate.json | 161 ++++++++++++++++++ .../survival_plus/items/beekeeper_helmet.json | 161 ++++++++++++++++++ .../items/beekeeper_leggings.json | 161 ++++++++++++++++++ .../survival_plus/items/breeding_egg.json | 6 + .../survival_plus/items/clean_water.json | 12 ++ .../assets/survival_plus/items/coffee.json | 6 + .../assets/survival_plus/items/cold_milk.json | 12 ++ .../survival_plus/items/dirty_water.json | 12 ++ .../assets/survival_plus/items/hot_milk.json | 12 ++ .../survival_plus/items/purified_water.json | 12 ++ .../survival_plus/items/rain_boots.json | 161 ++++++++++++++++++ .../survival_plus/items/recurve_bow.json | 35 ++++ .../survival_plus/items/recurve_crossbow.json | 54 ++++++ .../items/reinforced_leather_boots.json | 2 +- .../items/reinforced_leather_helmet.json | 2 +- .../items/reinforced_leather_trousers.json | 2 +- .../items/reinforced_leather_tunic.json | 2 +- .../survival_plus/items/snow_boots.json | 161 ++++++++++++++++++ .../models/item/breeding_egg.json | 6 + .../survival_plus/models/item/coffee.json | 6 + .../survival_plus/models/item/cold_milk.json | 6 + .../survival_plus/models/item/hot_milk.json | 6 + .../textures/item/breeding_egg.png | Bin 0 -> 2970 bytes .../survival_plus/textures/item/coffee.png | Bin 0 -> 2829 bytes .../survival_plus/textures/item/cold_milk.png | Bin 0 -> 3327 bytes .../survival_plus/textures/item/hot_milk.png | Bin 0 -> 2779 bytes 40 files changed, 1172 insertions(+), 21 deletions(-) create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_boots.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_chestplate.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_helmet.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_leggings.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/breeding_egg.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/coffee.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/rain_boots.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/recurve_bow.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/recurve_crossbow.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/snow_boots.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/breeding_egg.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/coffee.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/cold_milk.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/hot_milk.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/breeding_egg.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/coffee.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/cold_milk.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/hot_milk.png diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index 568be05..aecae8e 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -20,8 +20,6 @@ public abstract class Item { // Minecraft default keys protected static final NamespacedKey BASE_ATTACK_DAMAGE = NamespacedKey.minecraft("base_attack_damage"); protected static final NamespacedKey BASE_ATTACK_SPEED = NamespacedKey.minecraft("base_attack_speed"); - protected static final NamespacedKey BASE_ATTACK_TOUGH = NamespacedKey.minecraft("base_attack_toughness"); - protected static final NamespacedKey BASE_ATTACK_KNOCKBACK = NamespacedKey.minecraft("base_attack_knockback"); // Non-official keys protected static final NamespacedKey BASE_MOVEMENT_SPEED = NamespacedKey.minecraft("base_movement_speed"); diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java index d06baf2..3f585f3 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java @@ -28,7 +28,7 @@ public BeekeeperPiece(ArmorType armorType) { itemStack.setItemMeta(leatherArmorMeta); } } - setupDefaults(key, itemStack, true); + setupDefaults(key, itemStack); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java index b4b9b62..bf3fbed 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java @@ -18,7 +18,7 @@ public RainBoots() { itemStack.setData(DataComponentTypes.DYED_COLOR, DyedItemColor.dyedItemColor(Color.fromRGB(214, 231, 3), false)); - setupDefaults("rain_boots", itemStack, true); + setupDefaults("rain_boots", itemStack); } diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java index 13d80b5..e94d94b 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java @@ -18,7 +18,7 @@ public SnowBoots() { itemStack.setData(DataComponentTypes.DYED_COLOR, DyedItemColor.dyedItemColor(Color.fromRGB(158, 201, 202), false)); - setupDefaults("snow_boots", itemStack, true); + setupDefaults("snow_boots", itemStack); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java index 29faa74..5cc4dd6 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java @@ -21,10 +21,9 @@ public Coffee() { ItemStack itemStack = ItemType.POTION.createItemStack(); ItemMeta itemMeta = itemStack.getItemMeta(); ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); - ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor("coffee"))); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults("coffee", itemStack, true); + setupDefaults("coffee", itemStack); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java index ea1b1ab..e1faafb 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java @@ -1,6 +1,7 @@ package tk.shanebee.survival.item.items.drinks; import org.bukkit.Bukkit; +import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -18,9 +19,10 @@ public ColdMilk() { ItemStack itemStack = ItemType.POTION.createItemStack(); ItemMeta itemMeta = itemStack.getItemMeta(); ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); + ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor("cold_milk"))); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults("cold_milk", itemStack, true); + setupDefaults("cold_milk", itemStack); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java index 2827d50..5c72ed1 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java @@ -1,6 +1,7 @@ package tk.shanebee.survival.item.items.drinks; import org.bukkit.Bukkit; +import org.bukkit.Color; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; @@ -18,9 +19,10 @@ public HotMilk() { ItemStack itemStack = ItemType.POTION.createItemStack(); ItemMeta itemMeta = itemStack.getItemMeta(); ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); + ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor("hot_milk"))); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults("hot_milk", itemStack, true); + setupDefaults("hot_milk", itemStack); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java index 63540b8..440d1e5 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java @@ -20,7 +20,7 @@ public Water(String key) { ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor(key))); itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); itemStack.setItemMeta(itemMeta); - setupDefaults(key, itemStack, true); + setupDefaults(key, itemStack); } } diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java b/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java index cebb9b3..7fc0d2a 100644 --- a/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java +++ b/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java @@ -9,7 +9,7 @@ public class BreedingEgg extends Item { public BreedingEgg() { ItemStack itemStack = ItemType.EGG.createItemStack(); - setupDefaults("breeding_egg", itemStack, true); + setupDefaults("breeding_egg", itemStack); } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java index 73cdcb0..341145d 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java @@ -17,7 +17,7 @@ public RecurveBow() { ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.addEnchant(Enchantment.PUNCH, 1, true); itemStack.setItemMeta(itemMeta); - setupDefaults("recurve_bow", itemStack, true); + setupDefaults("recurve_bow", itemStack); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java index 24b4be1..80d850e 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java @@ -17,7 +17,7 @@ public RecurveCrossbow() { ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.addEnchant(Enchantment.PUNCH, 1, true); itemStack.setItemMeta(itemMeta); - setupDefaults("recurve_crossbow", itemStack, true); + setupDefaults("recurve_crossbow", itemStack); } @Override diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 4ae5226..f71dd1a 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -248,13 +248,12 @@ items: color: 0x00FFFF coffee: name: "Coffee" - color: 9461779 cold_milk: name: "Cold Milk" color: 16250871 hot_milk: name: "Hot Milk" - color: 15456977 + color: 16110486 water_bowl: name: "Water Bowl" diff --git a/src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json b/src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json index 7cfe162..d3bf20d 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json +++ b/src/main/resources/resource-pack/assets/survival_plus/equipment/reinforced_leather.json @@ -9,7 +9,7 @@ { "texture": "survival_plus:reinforced_leather", "dyeable": { - "color_when_undyed": -6265536 + "color_when_undyed": -2302756 } } ], @@ -17,7 +17,7 @@ { "texture": "survival_plus:reinforced_leather", "dyeable": { - "color_when_undyed": -6265536 + "color_when_undyed": -2302756 } } ] diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_boots.json b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_boots.json new file mode 100644 index 0000000..06e8c02 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_boots.json @@ -0,0 +1,161 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_quartz_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_iron_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_netherite_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_redstone_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_copper_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_gold_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_emerald_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_diamond_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_lapis_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_amethyst_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_resin_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "property": "minecraft:trim_material" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_chestplate.json b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_chestplate.json new file mode 100644 index 0000000..9def761 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_chestplate.json @@ -0,0 +1,161 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_quartz_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_iron_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_netherite_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_redstone_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_copper_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_gold_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_emerald_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_diamond_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_lapis_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_amethyst_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate_resin_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/leather_chestplate", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "property": "minecraft:trim_material" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_helmet.json b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_helmet.json new file mode 100644 index 0000000..82ac5ab --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_helmet.json @@ -0,0 +1,161 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_quartz_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_iron_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_netherite_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_redstone_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_copper_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_gold_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_emerald_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_diamond_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_lapis_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_amethyst_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet_resin_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/leather_helmet", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "property": "minecraft:trim_material" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_leggings.json b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_leggings.json new file mode 100644 index 0000000..d2d3d8d --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/beekeeper_leggings.json @@ -0,0 +1,161 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_quartz_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_iron_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_netherite_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_redstone_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_copper_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_gold_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_emerald_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_diamond_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_lapis_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_amethyst_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings_resin_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/leather_leggings", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "property": "minecraft:trim_material" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/breeding_egg.json b/src/main/resources/resource-pack/assets/survival_plus/items/breeding_egg.json new file mode 100644 index 0000000..7484346 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/breeding_egg.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/breeding_egg" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json new file mode 100644 index 0000000..02f67bd --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "minecraft:item/potion", + "tints": [ + { + "type": "minecraft:potion", + "default": -13083194 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/coffee.json b/src/main/resources/resource-pack/assets/survival_plus/items/coffee.json new file mode 100644 index 0000000..c3face6 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/coffee.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/coffee" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json b/src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json new file mode 100644 index 0000000..deb22fd --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/cold_milk", + "tints": [ + { + "type": "minecraft:potion", + "default": -13083194 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json new file mode 100644 index 0000000..02f67bd --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "minecraft:item/potion", + "tints": [ + { + "type": "minecraft:potion", + "default": -13083194 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json b/src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json new file mode 100644 index 0000000..a8ecf0c --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/hot_milk", + "tints": [ + { + "type": "minecraft:potion", + "default": -13083194 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json new file mode 100644 index 0000000..02f67bd --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "minecraft:item/potion", + "tints": [ + { + "type": "minecraft:potion", + "default": -13083194 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/rain_boots.json b/src/main/resources/resource-pack/assets/survival_plus/items/rain_boots.json new file mode 100644 index 0000000..06e8c02 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/rain_boots.json @@ -0,0 +1,161 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_quartz_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_iron_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_netherite_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_redstone_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_copper_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_gold_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_emerald_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_diamond_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_lapis_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_amethyst_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_resin_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "property": "minecraft:trim_material" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/recurve_bow.json b/src/main/resources/resource-pack/assets/survival_plus/items/recurve_bow.json new file mode 100644 index 0000000..c177116 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/recurve_bow.json @@ -0,0 +1,35 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "minecraft:item/bow" + }, + "on_true": { + "type": "minecraft:range_dispatch", + "entries": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/bow_pulling_1" + }, + "threshold": 0.65 + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/bow_pulling_2" + }, + "threshold": 0.9 + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/bow_pulling_0" + }, + "property": "minecraft:use_duration", + "scale": 0.05 + }, + "property": "minecraft:using_item" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/recurve_crossbow.json b/src/main/resources/resource-pack/assets/survival_plus/items/recurve_crossbow.json new file mode 100644 index 0000000..87f8923 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/recurve_crossbow.json @@ -0,0 +1,54 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_arrow" + }, + "when": "arrow" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_firework" + }, + "when": "rocket" + } + ], + "fallback": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow" + }, + "on_true": { + "type": "minecraft:range_dispatch", + "entries": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_pulling_1" + }, + "threshold": 0.58 + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_pulling_2" + }, + "threshold": 1.0 + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/crossbow_pulling_0" + }, + "property": "minecraft:crossbow/pull" + }, + "property": "minecraft:using_item" + }, + "property": "minecraft:charge_type" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json index acd4772..25b62eb 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_boots.json @@ -5,7 +5,7 @@ "tints": [ { "type": "minecraft:dye", - "default": -6265536 + "default": -2302756 } ] } diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json index 5f4e1d9..aa375e5 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_helmet.json @@ -5,7 +5,7 @@ "tints": [ { "type": "minecraft:dye", - "default": -6265536 + "default": -2302756 } ] } diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json index e8e83f3..498ec0b 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_trousers.json @@ -5,7 +5,7 @@ "tints": [ { "type": "minecraft:dye", - "default": -6265536 + "default": -2302756 } ] } diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json index b702b61..1d24f54 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/reinforced_leather_tunic.json @@ -5,7 +5,7 @@ "tints": [ { "type": "minecraft:dye", - "default": -6265536 + "default": -2302756 } ] } diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/snow_boots.json b/src/main/resources/resource-pack/assets/survival_plus/items/snow_boots.json new file mode 100644 index 0000000..06e8c02 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/snow_boots.json @@ -0,0 +1,161 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_quartz_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_iron_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_netherite_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_redstone_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_copper_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_gold_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_emerald_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_diamond_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_lapis_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_amethyst_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots_resin_trim", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/leather_boots", + "tints": [ + { + "type": "minecraft:dye", + "default": -6265536 + } + ] + }, + "property": "minecraft:trim_material" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/breeding_egg.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/breeding_egg.json new file mode 100755 index 0000000..7e070f4 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/breeding_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/breeding_egg" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/coffee.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/coffee.json new file mode 100755 index 0000000..b377cf0 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/coffee.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/coffee" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/cold_milk.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/cold_milk.json new file mode 100755 index 0000000..6084954 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/cold_milk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/cold_milk" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/hot_milk.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/hot_milk.json new file mode 100755 index 0000000..a56dfd2 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/hot_milk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/hot_milk" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/breeding_egg.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/breeding_egg.png new file mode 100755 index 0000000000000000000000000000000000000000..37e487346f2ae628b1e02461b0de81e6fd85a525 GIT binary patch literal 2970 zcmd5;YgAKL7C!fK#RO$YjUeKKSS!Jx;u=IO3b`N>P)Q#RSB8;RnNPY4U$F~qD1{NX@i$Vy5R}v(IB(qtwX3hWUYG;1j^__F>zUS<{ z&$qw3|IFud?Co6a5JL8$Awl5?VKBrH#TH=qae4IA>_j*x5S7)>?}JIu!5yK|VPS{` zV+z934p+Nx=r!Z~1vUE?3 zqivUO!dxX^67{F6hK>l;~iKa10X){{rOHqY-5IvSp(Ve{SBIL<5xWpXdC znR6wAI27M-E^Kqj>xlit3FU}J-Q3zb^mu1-YjL6EFNW&|zy9G4uhz9qZ`n9Op)p7i z!hX#l>JVO9WPc#PohTC+`?N;}oUipQ!|RBJhgT0-+i$ga`qTZkSd9wdGB2w1QRi0*`Yr$Kg(kN3SzPVB z17Eh63T)I>0XjN`AV^VhHkk-}3r_biX%vbG@s^4QVQZ6Z9gjhyAuK-}Z=Xhx@9lG? zB!hwQbw$LT85Ggryj5&5Nh0FZMr!;V8fy2672;wMq6}xxQmfHnN7h}CuhSu0rm2dKVq4$PvUg>Ze;;oYytZyVfg*H{X z{#|pUZd6Wu)`>KUQ8<1Oyvo?SA2$FBr@Jxuki}*M zD}tWy3X{k!UA0AWp=qK*F3kOV=ORf+N-noU#nYviu3fJD>C*c|9K+MVOIqZga1~&Z z%>>;YZZ>WFQ@Y%VhE($!q~s4Gc&N+&bRJ`y6B{6B~wV4R#VvEzjnEzjfTK5OybCmoz0KV1-{<4K0a7K59{Dt3sm z^mg8IHFTDho2*?AJ+@dc#97z4bTJ=G2GVRB^-XW*krer5G6sa?i{xk~4X8=ue=M#C z^6SQ4a2Y`UMY7{~9`L7Eo0CTZw*$#{gfHA&eVf->F`qHfeB+b@1aO~*vzQG#K}b6CTd8MooIylzW#y#NghtbUD5p1P3YNBYYCbA;kUr_? z7~k+R#rvQzG46H71l#!bwp@6(uBTeiKeWZFV)eUvyYdI-)u12_P0a$SI#U0dum$bI zzCO=r*akU^{JjK)Cx~46=PxwT^dV!3)$c33inW&R zw8xz{lN)o+o=*7gzC&K}P)^fH>oGx=fUu0-mE865+d9(5o-Z{v4YH5$EEQ9hm-brT z<*?yX-q4Xh*0k^X!}TZrg7utZ&KPb2GMk)QGHX%^q9*mbeY1b(m00sK9p$gj-L3)N#g(A68*kQZ>|7;QKe1 zV&d^@A`~)BMURC-bn#TGiEs?dvMXUW?0|-4Z+;{73KXJa1W)!i=vVHoE2M`2^I7tI zazE6_sV{<=SwQ>HX)DJlseb96sBVOvW$5rs0us_(Q-` z*ekjmWai>T65SoVe>kHdpDcoZ>&q4i3EsKy6^#)rIJKy%gE$K~g5O~Bp}S%k3~qb~ z@9Z3zpLiqC>zcwx{2Aaqq@_lH`x^z7)L-95{;La}%&e)#wq;i+>zupnr~2a14cwrz Iz^K%J0(Bgd9smFU literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/coffee.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/coffee.png new file mode 100755 index 0000000000000000000000000000000000000000..476253db5aef929b5305c664a16305ea71fb2212 GIT binary patch literal 2829 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/hot_milk.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/hot_milk.png new file mode 100755 index 0000000000000000000000000000000000000000..58acc9ee05cb8204332ee1bb82d382787ced689a GIT binary patch literal 2779 zcmd5;YgAKL7C!fKg#>Yo2I~VHZe0TbYt_-QRt(8CLMavqN>GPK!gQ!XsfHrUAWBG3 zDoQJL21IBv5$gh}JOlxYgup^-eUyMjc})U{3IZ`OU&!WPiwk zurRO|`XqpyIS8=%Bk)-T9{`+W2ylWHnctJ4|9*=AnbUv#`Gfq4RUrVl289If;G`iM zmHZ)BztUye@?ysO^xk!>9o<3EIjdb4)IaVBXU!~5_I>Njy7kwtXz+~gYpH7!YJPVt z`T9p^vSMoTS#53?SP>KNv^^fk|6umO)yJ2{-b;OOe~r-=kW%v9*l7OF%agIa+M_Cw z^u#t=ZnlF&!3i-yQ0)J~ktmn$7d>5UvMBcr)7Xsq5Pwg4^3FXieKD0+&40}lZL4s! zFI3E~`~s_c7PYsk7)Ux%R5ojP6pp)7z}vDEv}6HBjA@EW2wxnqh!>duLXx<1aPxLa z1OZNqACObuqJWY{{xS557?6+x>i9Yw_zRR%7z;rt=vrFWp9zqvzT8hfjiNZl376H0 z!FY2(9hC$Flghs#_!4<%yMy`2-s&`zbACp@Qy8o-Q}WJDC_Qg)sZf|1;&Se1KEocw z%d%o32|>EjGd`z%MJ9K!T`(d<$k<*~?Eui^SkZD~Fo+E)JrrmDAWJ1o>+2x=&X$0d8@nBjf~_?QCS2 ztX^zH+^e;P!O~nG(}OG3LHh5a4BLl$1_eR3WxcKmgViN*LiE2c7UqBa!~q(`l_aJ_ zZ2Ki>8zookKUCA$N8*0N)kN`eK5%kl{!gg)ccOB#hl5(BoMT zPPt^W0509WOGi)F&sy7F2m9G34o{9Bw<;W?oac`F1ydOqn>p8>Xx~j)D0t>UyxsB? ztAI??JL_l>a4uYD>U|<0lPb2#m=ehQh@9#zl0(qS5gXYZwwiUalFWexO)MH`%i!R+ zKT8UeL8@^CL?)UI6QS^u&?nHQJDI7zaPqQE(bRIt)h8ZZQUXqv@7>;FqMooA5ziB^ z5_I&rMy-N2(3X9aUuxI#npfy~m9_W!dvm9Rttrb^XU;SV*}-EDyHG)WqOGiT^0f6| z_!Q~Z9sjJs)~wi0!GFuF#h_d*wqvdf1{90qZ}#Vz7}nuWISS!)EGN^lyw;6-s9?F^HL&r0s&H?K0pe+MT`g{fosJi7FTe)iw}y98!5aqA47t?A ze(Rv0FlYyPcGE?bzIrcLedDS*w{U%se)2_jxv0MLB~$dzFUuWju3?FKD8Z8Vxs4$<o_ly>XQ(ZTa{)13V4 zTDvjMf7|V$hUI1ZjDnaHm6AWp6V@FoY(Z|t6iLWm&~WfWT`CRLK$*Bxu<}xC8mx@| zk#J2{IQ$j-x<_V3E6f$6BT~nqzb7+h`r1S0J{GJl*l=;g0**A#{g5aYsxvlJFf$FY z9EUYG^X!Dw(viovIm80ceJ}Wr5;bIp(H_dimr}qI>Bp!XYLeDgbeZ@A4%RR_uyjax zwPkaFk$sW}jwyJeRMfn>_7Oq*eFggK@ngGSX%l$Q|UDl_iiU6;Gj^Ck@BGo?h*Y&?twNsQ$_x@*Z-?qm>b4epm!9OE+&^{ Q&0j1-g2Dr Date: Fri, 14 Feb 2025 00:44:46 -0800 Subject: [PATCH 030/133] WeatherTask - small cleanup --- .../shanebee/survival/tasks/WeatherTask.java | 42 ++++++------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java index e6330df..e7489ce 100644 --- a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java +++ b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java @@ -2,7 +2,6 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.World.Environment; @@ -17,6 +16,7 @@ import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; +@SuppressWarnings("BooleanMethodIsAlwaysInverted") public class WeatherTask extends BukkitRunnable { private final double baseSpeed; @@ -47,18 +47,18 @@ private void handleWeather(Player player) { GameMode mode = player.getGameMode(); if (world.getEnvironment() == Environment.NORMAL && (mode == GameMode.SURVIVAL || mode == GameMode.ADVENTURE)) { if (isInSnowstorm(player) && !hasSnowBoots(player)) { - setWalkSpeed(player, snowstormSpeed); + setWalkSpeed(player, this.snowstormSpeed); } else if (isOnSnow(player) && !hasSnowBoots(player)) { - setWalkSpeed(player, snowSpeed); + setWalkSpeed(player, this.snowSpeed); } else if (isInStorm(player) && !hasRainBoots(player)) { - setWalkSpeed(player, stormSpeed); - } else if (isInRain(player) && !hasRainBoots(player)) { - setWalkSpeed(player, rainSpeed); + setWalkSpeed(player, this.stormSpeed); + } else if (player.isInRain() && !hasRainBoots(player)) { + setWalkSpeed(player, this.rainSpeed); } else { - setWalkSpeed(player, baseSpeed); + setWalkSpeed(player, this.baseSpeed); } } else { - setWalkSpeed(player, baseSpeed); + setWalkSpeed(player, this.baseSpeed); } } @@ -78,31 +78,15 @@ private boolean isOnSnow(Player player) { private boolean isInSnowstorm(Player player) { World world = player.getWorld(); - double temp = player.getLocation().getBlock().getTemperature(); - - return world.hasStorm() && temp < 0.15 && isAtHighest(player); - } - - private boolean isInRain(Player player) { - World world = player.getWorld(); - double temp = player.getLocation().getBlock().getTemperature(); + Block block = player.getLocation().getBlock(); + double temp = block.getTemperature(); + byte lightFromSky = block.getLightFromSky(); - // is raining (0.15 – 0.95 for rain) - if (world.hasStorm() && temp >= 0.15 && temp <= 0.95) { - // sky is above - return isAtHighest(player); - } - return false; + return world.hasStorm() && temp < 0.15 && lightFromSky == 15; } private boolean isInStorm(Player player) { - return isInRain(player) && player.getWorld().isThundering(); - } - - private boolean isAtHighest(Player player) { - Location location = player.getLocation(); - World world = player.getWorld(); - return location.getY() > world.getHighestBlockAt(location).getY(); + return player.isInRain() && player.getWorld().isThundering(); } private void setWalkSpeed(Player player, double speed) { From 997953b82f57ac58ed05099663d42130b1c15aa5 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 14 Feb 2025 11:44:39 -0800 Subject: [PATCH 031/133] Thirst cleanup --- .../java/tk/shanebee/survival/Survival.java | 2 +- .../tk/shanebee/survival/commands/Heal.java | 2 +- .../tk/shanebee/survival/commands/Status.java | 8 +- .../tk/shanebee/survival/config/Config.java | 94 +++---- .../survival/listeners/EventManager.java | 6 +- .../listeners/entity/PiglinBarter.java | 2 +- .../survival/listeners/item/Consume.java | 208 ---------------- .../listeners/item/ThirstListener.java | 231 ++++++++++++++++++ .../listeners/item/WaterBottleCrafting.java | 2 +- .../survival/listeners/item/WaterBowl.java | 2 +- .../survival/managers/PlayerManager.java | 2 +- .../survival/managers/RecipeManager.java | 2 +- .../shanebee/survival/tasks/Healthboard.java | 2 +- .../shanebee/survival/tasks/TaskManager.java | 21 +- .../shanebee/survival/tasks/ThirstDrain.java | 98 +++----- .../survival/tasks/ThirstDrainHeat.java | 16 +- .../survival/tasks/ThirstDrainNether.java | 2 +- src/main/resources/config.yml | 33 +-- 18 files changed, 370 insertions(+), 363 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/listeners/item/Consume.java create mode 100644 src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java diff --git a/src/main/java/tk/shanebee/survival/Survival.java b/src/main/java/tk/shanebee/survival/Survival.java index 8f2ed8c..fac50c3 100644 --- a/src/main/java/tk/shanebee/survival/Survival.java +++ b/src/main/java/tk/shanebee/survival/Survival.java @@ -109,7 +109,7 @@ public void onEnable() { Rates.add(config.DROP_RATE_FLINT); Rates.add(config.DROP_RATE_STICK); - Rates.add(config.MECHANICS_THIRST_DRAIN_RATE); + Rates.add(config.mechanics_thirst_drain_rate); for (double i : Rates) { if (i <= 0) { Utils.log("&cRate values cannot be zero or below! (Check config.yml) Plugin disabled."); diff --git a/src/main/java/tk/shanebee/survival/commands/Heal.java b/src/main/java/tk/shanebee/survival/commands/Heal.java index 816d3c4..63c0afd 100644 --- a/src/main/java/tk/shanebee/survival/commands/Heal.java +++ b/src/main/java/tk/shanebee/survival/commands/Heal.java @@ -59,7 +59,7 @@ private void heal(Player player) { player.setFoodLevel(20); player.setSaturation(5); PlayerData playerData = plugin.getPlayerManager().getPlayerData(player); - if (config.MECHANICS_THIRST_ENABLED) { + if (config.mechanics_thirst_enabled) { playerData.setThirst(40); } if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { diff --git a/src/main/java/tk/shanebee/survival/commands/Status.java b/src/main/java/tk/shanebee/survival/commands/Status.java index a712911..c0fa770 100644 --- a/src/main/java/tk/shanebee/survival/commands/Status.java +++ b/src/main/java/tk/shanebee/survival/commands/Status.java @@ -45,7 +45,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St player.sendMessage(playerManager.ShowHunger(player).get(1) + playerManager.ShowHunger(player).get(2) + " " + playerManager.ShowHunger(player).get(0).toUpperCase()); - if (config.MECHANICS_THIRST_ENABLED) + if (config.mechanics_thirst_enabled) player.sendMessage(playerManager.ShowThirst(player).get(1) + playerManager.ShowThirst(player).get(2) + " " + playerManager.ShowThirst(player).get(0).toUpperCase()); @@ -61,7 +61,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St player.sendMessage(playerManager.ShowHunger(player).get(1) + playerManager.ShowHunger(player).get(2) + " " + playerManager.ShowHunger(player).get(0).toUpperCase()); - if (config.MECHANICS_THIRST_ENABLED) + if (config.mechanics_thirst_enabled) player.sendMessage(playerManager.ShowThirst(player).get(1) + playerManager.ShowThirst(player).get(2) + " " + playerManager.ShowThirst(player).get(0).toUpperCase()); @@ -74,7 +74,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } } else { playerData.setInfoDisplayed(Info.HUNGER, true); - if (config.MECHANICS_THIRST_ENABLED) + if (config.mechanics_thirst_enabled) playerData.setInfoDisplayed(Info.THIRST, true); if (config.MECHANICS_ENERGY_ENABLED) playerData.setInfoDisplayed(Info.ENERGY, true); @@ -101,7 +101,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St case "thirst": case "t": if (!config.MECHANICS_STATUS_SCOREBOARD) { - if (config.MECHANICS_THIRST_ENABLED) + if (config.mechanics_thirst_enabled) player.sendMessage(playerManager.ShowThirst(player).get(1) + playerManager.ShowThirst(player).get(2) + " " + playerManager.ShowThirst(player).get(0).toUpperCase()); diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 00c48b6..2049774 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -117,29 +117,29 @@ public class Config { public int MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_DURATION; // THIRST - public boolean MECHANICS_THIRST_ENABLED; - public int MECHANICS_THIRST_START_AMOUNT; - public int MECHANICS_THIRST_RESPAWN_AMOUNT; - public boolean MECHANICS_THIRST_PURIFY_WATER; - public boolean MECHANICS_THIRST_MELT_SNOW; - public double MECHANICS_THIRST_DRAIN_RATE; - public int MECHANICS_THIRST_DRAIN_HEAT; - public int MECHANICS_THIRST_DRAIN_NETHER; - public double MECHANICS_THIRST_DAMAGE_RATE; - public int MECHANICS_THIRST_REP_BEET_SOUP; - public int MECHANICS_THIRST_REP_MELON_SLICE; - public int MECHANICS_THIRST_REP_MUSH_STEW; - public int MECHANICS_THIRST_REP_WATER_BOWL; - public int MECHANICS_THIRST_REP_DIRTY_WATER; - public int MECHANICS_THIRST_REP_CLEAN_WATER; - public int MECHANICS_THIRST_REP_PURE_WATER; - public int MECHANICS_THIRST_REP_COFFEE; - public int MECHANICS_THIRST_REP_COLD_MILK; - public int MECHANICS_THIRST_REP_HOT_MILK; - public int MECHANICS_THIRST_REP_MILK_BUCKET; - public int MECHANICS_THIRST_REP_WATER; - public int MECHANICS_THIRST_REP_HONEY_BOTTLE; - public int MECHANICS_THIRST_REP_OTHER_WATER; + public boolean mechanics_thirst_enabled; + public int mechanics_thirst_starting_amount; + public int mechanics_thirst_respawn_amount; + public boolean mechanics_thirst_purify_water; + public boolean mechanics_thirst_melt_snow; + public double mechanics_thirst_drain_rate; + public int mechanics_thirst_heat_drain; + public int mechanics_thirst_nether_drain; + public double mechanics_thirst_damage_rate; + public int mechanics_thirst_rep_beetroot_soup; + public int mechanics_thirst_rep_melon_slice; + public int mechanics_thirst_rep_mush_stew; + public int mechanics_thirst_rep_water_bowl; + public int mechanics_thirst_rep_dirty_water; + public int mechanics_thirst_rep_clean_water; + public int mechanics_thirst_rep_pure_water; + public int mechanics_thirst_rep_coffee; + public int mechanics_thirst_rep_cold_milk; + public int mechanics_thirst_rep_hot_milk; + public int mechanics_thirst_rep_milk_bucket; + public int mechanics_thirst_rep_water; + public int mechanics_thirst_rep_honey_bottle; + public int mechanics_thirst_rep_other_water; public int MECHANICS_HUNGER_START_AMOUNT; public int MECHANICS_HUNGER_RESPAWN_AMOUNT; @@ -385,30 +385,30 @@ private void loadSettings() { this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_AMP = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.amplifier"); this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_DURATION = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.duration"); - this.MECHANICS_THIRST_ENABLED = settings.getBoolean("Mechanics.Thirst.Enabled"); - this.MECHANICS_THIRST_START_AMOUNT = settings.getInt("Mechanics.Thirst.Starting-Amount"); - this.MECHANICS_THIRST_RESPAWN_AMOUNT = settings.getInt("Mechanics.Thirst.Respawn-Amount"); - this.MECHANICS_THIRST_PURIFY_WATER = settings.getBoolean("Mechanics.Thirst.PurifyWater"); - this.MECHANICS_THIRST_MELT_SNOW = settings.getBoolean("Mechanics.Thirst.MeltSnow"); - this.MECHANICS_THIRST_DRAIN_RATE = settings.getDouble("Mechanics.Thirst.DrainRate"); - this.MECHANICS_THIRST_DRAIN_HEAT = settings.getInt("Mechanics.Thirst.HeatDrain"); - this.MECHANICS_THIRST_DRAIN_NETHER = settings.getInt("Mechanics.Thirst.NetherDrain"); - this.MECHANICS_THIRST_DAMAGE_RATE = settings.getDouble("Mechanics.Thirst.DamageRate"); - - this.MECHANICS_THIRST_REP_BEET_SOUP = settings.getInt("Mechanics.Thirst.Replenish-Level.beetroot-soup"); - this.MECHANICS_THIRST_REP_MELON_SLICE = settings.getInt("Mechanics.Thirst.Replenish-Level.melon-slice"); - this.MECHANICS_THIRST_REP_MUSH_STEW = settings.getInt("Mechanics.Thirst.Replenish-Level.mushroom-stew"); - this.MECHANICS_THIRST_REP_WATER_BOWL = settings.getInt("Mechanics.Thirst.Replenish-Level.water-bowl"); - this.MECHANICS_THIRST_REP_DIRTY_WATER = settings.getInt("Mechanics.Thirst.Replenish-Level.dirty-water"); - this.MECHANICS_THIRST_REP_CLEAN_WATER = settings.getInt("Mechanics.Thirst.Replenish-Level.clean-water"); - this.MECHANICS_THIRST_REP_PURE_WATER = settings.getInt("Mechanics.Thirst.Replenish-Level.purified-water"); - this.MECHANICS_THIRST_REP_COFFEE = settings.getInt("Mechanics.Thirst.Replenish-Level.coffee"); - this.MECHANICS_THIRST_REP_COLD_MILK = settings.getInt("Mechanics.Thirst.Replenish-Level.cold-milk"); - this.MECHANICS_THIRST_REP_HOT_MILK = settings.getInt("Mechanics.Thirst.Replenish-Level.hot-milk"); - this.MECHANICS_THIRST_REP_MILK_BUCKET = settings.getInt("Mechanics.Thirst.Replenish-Level.milk-bucket"); - this.MECHANICS_THIRST_REP_WATER = settings.getInt("Mechanics.Thirst.Replenish-Level.water"); - this.MECHANICS_THIRST_REP_HONEY_BOTTLE = settings.getInt("Mechanics.Thirst.Replenish-Level.honey-bottle"); - this.MECHANICS_THIRST_REP_OTHER_WATER = settings.getInt("Mechanics.Thirst.Replenish-Level.other-water"); + this.mechanics_thirst_enabled = settings.getBoolean("Mechanics.Thirst.enabled"); + this.mechanics_thirst_starting_amount = settings.getInt("Mechanics.Thirst.starting-amount"); + this.mechanics_thirst_respawn_amount = settings.getInt("Mechanics.Thirst.respawn-amount"); + this.mechanics_thirst_purify_water = settings.getBoolean("Mechanics.Thirst.purify-water"); + this.mechanics_thirst_melt_snow = settings.getBoolean("Mechanics.Thirst.melt-snow"); + this.mechanics_thirst_drain_rate = settings.getDouble("Mechanics.Thirst.drain-rate"); + this.mechanics_thirst_heat_drain = settings.getInt("Mechanics.Thirst.heat-drain"); + this.mechanics_thirst_nether_drain = settings.getInt("Mechanics.Thirst.nether-drain"); + this.mechanics_thirst_damage_rate = settings.getDouble("Mechanics.Thirst.damage-rate"); + + this.mechanics_thirst_rep_beetroot_soup = settings.getInt("Mechanics.Thirst.replenish-level.beetroot-soup"); + this.mechanics_thirst_rep_melon_slice = settings.getInt("Mechanics.Thirst.replenish-level.melon-slice"); + this.mechanics_thirst_rep_mush_stew = settings.getInt("Mechanics.Thirst.replenish-level.mushroom-stew"); + this.mechanics_thirst_rep_water_bowl = settings.getInt("Mechanics.Thirst.replenish-level.water-bowl"); + this.mechanics_thirst_rep_dirty_water = settings.getInt("Mechanics.Thirst.replenish-level.dirty-water"); + this.mechanics_thirst_rep_clean_water = settings.getInt("Mechanics.Thirst.replenish-level.clean-water"); + this.mechanics_thirst_rep_pure_water = settings.getInt("Mechanics.Thirst.replenish-level.purified-water"); + this.mechanics_thirst_rep_coffee = settings.getInt("Mechanics.Thirst.replenish-level.coffee"); + this.mechanics_thirst_rep_cold_milk = settings.getInt("Mechanics.Thirst.replenish-level.cold-milk"); + this.mechanics_thirst_rep_hot_milk = settings.getInt("Mechanics.Thirst.replenish-level.hot-milk"); + this.mechanics_thirst_rep_milk_bucket = settings.getInt("Mechanics.Thirst.replenish-level.milk-bucket"); + this.mechanics_thirst_rep_honey_bottle = settings.getInt("Mechanics.Thirst.replenish-level.honey-bottle"); + this.mechanics_thirst_rep_other_water = settings.getInt("Mechanics.Thirst.replenish-level.other-water"); + this.mechanics_thirst_rep_water = settings.getInt("Mechanics.Thirst.replenish-level.water"); this.MECHANICS_HUNGER_START_AMOUNT = settings.getInt("Mechanics.Hunger.Starting-Amount"); this.MECHANICS_HUNGER_RESPAWN_AMOUNT = settings.getInt("Mechanics.Hunger.Respawn-Amount"); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index fec0897..db7b64c 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -83,9 +83,9 @@ public void registerEvents() { if (config.MECHANICS_RAW_MEAT_HUNGER) pm.registerEvents(new RawMeatHunger(), this.plugin); - if (config.MECHANICS_THIRST_ENABLED) { - pm.registerEvents(new Consume(this.plugin), this.plugin); - if (config.MECHANICS_THIRST_PURIFY_WATER) + if (config.mechanics_thirst_enabled) { + pm.registerEvents(new ThirstListener(this.plugin), this.plugin); + if (config.mechanics_thirst_purify_water) pm.registerEvents(new CauldronWaterBottle(), this.plugin); } if (config.MECHANICS_POISON_POTATO) diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java index b2c6e38..c506cf4 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java @@ -26,7 +26,7 @@ public class PiglinBarter implements Listener { public PiglinBarter(Survival plugin) { Config config = plugin.getSurvivalConfig(); this.SLOW_ARMOR = config.MECHANICS_SLOW_ARMOR; - this.THIRST_ENABLED = config.MECHANICS_THIRST_ENABLED; + this.THIRST_ENABLED = config.mechanics_thirst_enabled; this.DROP_WATER = config.ENTITY_MECHANICS_PIGLIN_DROP_WATER; this.ALT_DROPS = config.ENTITY_MECHANICS_PIGLIN_ALT_DROP; this.RANDOM = new Random(); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Consume.java b/src/main/java/tk/shanebee/survival/listeners/item/Consume.java deleted file mode 100644 index b0825bd..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/item/Consume.java +++ /dev/null @@ -1,208 +0,0 @@ -package tk.shanebee.survival.listeners.item; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Item; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerItemConsumeEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.events.ThirstLevelChangeEvent; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.managers.StatusManager; -import tk.shanebee.survival.util.Utils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class Consume implements Listener { - - private final Survival plugin; - private final Config config; - private final Lang lang; - private final PlayerManager playerManager; - - public Consume(Survival plugin) { - this.plugin = plugin; - this.config = plugin.getSurvivalConfig(); - this.lang = plugin.getLang(); - this.playerManager = plugin.getPlayerManager(); - } - - @EventHandler(priority = EventPriority.HIGHEST) - private void onConsume(PlayerItemConsumeEvent event) { - if (event.isCancelled()) return; - final Player player = event.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack item = event.getItem(); - int change = 0; - switch (event.getItem().getType()) { - case POTION: - if (config.MECHANICS_THIRST_PURIFY_WATER) { - if (checkWaterBottle(item)) { - if (Items.DIRTY_WATER.is(item)) { - change = config.MECHANICS_THIRST_REP_DIRTY_WATER; - Random rand = new Random(); - if (rand.nextInt(10) + 1 <= 5) { - player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); - } - } else if (Items.CLEAN_WATER.is(item)) { - change = config.MECHANICS_THIRST_REP_CLEAN_WATER; - Random rand = new Random(); - if (rand.nextInt(10) + 1 <= 2) { - player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); - } - } else if (Items.PURIFIED_WATER.is(item)) { - change = config.MECHANICS_THIRST_REP_PURE_WATER; - } else if (Items.COFFEE.is(item)) { - change = config.MECHANICS_THIRST_REP_COFFEE; - } else if (Items.COLD_MILK.is(item)) { - change = config.MECHANICS_THIRST_REP_COLD_MILK; - } else if (Items.HOT_MILK.is(item)) { - change = config.MECHANICS_THIRST_REP_HOT_MILK; - player.damage(2); - player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 0)); - Utils.sendColoredMsg(player, lang.hot_milk_drink); - } else if (Items.WATER_BOWL.is(item)) { - event.setCancelled(true); - change = handleWaterBowl(player); - } else { - change = config.MECHANICS_THIRST_REP_OTHER_WATER; - } - } - } else { - change = config.MECHANICS_THIRST_REP_WATER; - } - break; - case MILK_BUCKET: - change = config.MECHANICS_THIRST_REP_MILK_BUCKET; - break; - case MELON_SLICE: - change = config.MECHANICS_THIRST_REP_MELON_SLICE; - break; - case MUSHROOM_STEW: - change = config.MECHANICS_THIRST_REP_MUSH_STEW; - break; - case HONEY_BOTTLE: - change = config.MECHANICS_THIRST_REP_HONEY_BOTTLE; - break; - case SUSPICIOUS_STEW: - if (Items.SUSPICIOUS_MEAT.is(item)) { - // Remove the bowl from the player's hand afterward - BukkitRunnable runnable = new BukkitRunnable() { - @Override - public void run() { - PlayerInventory inv = player.getInventory(); - if (inv.getItemInMainHand().getType() == Material.BOWL) { - inv.setItemInMainHand(null); - } else if (inv.getItemInOffHand().getType() == Material.BOWL) { - inv.setItemInOffHand(null); - } - } - }; - runnable.runTaskLater(plugin, 1); - return; - } - } - ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); - Bukkit.getPluginManager().callEvent(thirstEvent); - if (!thirstEvent.isCancelled()) { - playerData.setThirst(playerData.getThirst() + change); - } - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(plugin.getPlayerManager().ShowHunger(player).get(1) + plugin.getPlayerManager().ShowHunger(player).get(2) + " " + plugin.getPlayerManager().ShowHunger(player).get(0).toUpperCase()); - player.sendMessage(plugin.getPlayerManager().ShowThirst(player).get(1) + plugin.getPlayerManager().ShowThirst(player).get(2) + " " + plugin.getPlayerManager().ShowThirst(player).get(0).toUpperCase()); - } - }, 1L); - } - - private int handleWaterBowl(Player player) { - int change = config.MECHANICS_THIRST_REP_WATER_BOWL; - player.getInventory().setItemInMainHand(new ItemStack(Material.BOWL)); - if (config.MECHANICS_THIRST_PURIFY_WATER) { - Random rand = new Random(); - if (rand.nextInt(10) + 1 <= 8) { - player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); - } - } - return change; - } - - @EventHandler //if player catches a water bottle/potion give them dirty water instead - private void onFish(PlayerFishEvent event) { - if (!config.MECHANICS_THIRST_PURIFY_WATER) return; - if (event.isCancelled()) return; - if (event.getState() == PlayerFishEvent.State.CAUGHT_FISH) { - Entity caught = event.getCaught(); - if (caught instanceof Item) { - Item item = ((Item) caught); - ItemStack stack = item.getItemStack(); - if (stack.getType() == Material.POTION && checkWaterBottle(stack)) { - item.setItemStack(Items.CLEAN_WATER.getItemStack()); - } - } - } - } - - // This map is to tell if the player actually DIED before respawning - // Using the portal in the end causes the respawn event to fire - // when the player re-enters the overworld - private final List HUNGER_CHANGE = new ArrayList<>(); - - @EventHandler - private void onRespawn(PlayerRespawnEvent event) { - Player player = event.getPlayer(); - if (HUNGER_CHANGE.contains(player)) { - HUNGER_CHANGE.remove(player); - - PlayerData playerData = playerManager.getPlayerData(player); - int thirst = config.MECHANICS_THIRST_RESPAWN_AMOUNT; - playerData.setThirst(thirst); - playerManager.getPlayerData(player).setThirst(thirst); - - int hunger = config.MECHANICS_HUNGER_RESPAWN_AMOUNT; - Bukkit.getScheduler().runTaskLater(plugin, () -> StatusManager.setHunger(player, hunger), 1); - } - } - - @EventHandler - private void onDeath(PlayerDeathEvent event) { - Player player = event.getEntity(); - if (!HUNGER_CHANGE.contains(player)) { - HUNGER_CHANGE.add(player); - } - } - - private boolean checkWaterBottle(ItemStack bottle) { - ItemMeta meta = bottle.getItemMeta(); - assert meta != null; - return switch (((PotionMeta) meta).getBasePotionType()) { - case WATER, MUNDANE, THICK, AWKWARD -> true; - case null, default -> false; - }; - } - -} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java new file mode 100644 index 0000000..41fa4aa --- /dev/null +++ b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java @@ -0,0 +1,231 @@ +package tk.shanebee.survival.listeners.item; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityExhaustionEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.events.ThirstLevelChangeEvent; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.managers.PlayerManager; +import tk.shanebee.survival.managers.StatusManager; +import tk.shanebee.survival.util.Utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class ThirstListener implements Listener { + + private final Survival plugin; + private final Config config; + private final Lang lang; + private final PlayerManager playerManager; + private final Random random = new Random(); + private final double drain; + + public ThirstListener(Survival plugin) { + this.plugin = plugin; + this.config = plugin.getSurvivalConfig(); + this.lang = plugin.getLang(); + this.playerManager = plugin.getPlayerManager(); + this.drain = config.mechanics_thirst_drain_rate; + } + + @EventHandler(priority = EventPriority.HIGHEST) + private void onConsume(PlayerItemConsumeEvent event) { + if (event.isCancelled()) return; + final Player player = event.getPlayer(); + PlayerData playerData = playerManager.getPlayerData(player); + ItemStack item = event.getItem(); + int change = 0; + switch (event.getItem().getType()) { + case POTION: + if (config.mechanics_thirst_purify_water) { + if (checkWaterBottle(item)) { + if (Items.DIRTY_WATER.is(item)) { + change = config.mechanics_thirst_rep_dirty_water; + Random rand = new Random(); + if (rand.nextInt(10) + 1 <= 5) { + player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); + } + } else if (Items.CLEAN_WATER.is(item)) { + change = config.mechanics_thirst_rep_clean_water; + Random rand = new Random(); + if (rand.nextInt(10) + 1 <= 2) { + player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); + } + } else if (Items.PURIFIED_WATER.is(item)) { + change = config.mechanics_thirst_rep_pure_water; + } else if (Items.COFFEE.is(item)) { + change = config.mechanics_thirst_rep_coffee; + } else if (Items.COLD_MILK.is(item)) { + change = config.mechanics_thirst_rep_cold_milk; + } else if (Items.HOT_MILK.is(item)) { + change = config.mechanics_thirst_rep_hot_milk; + player.damage(2); + player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 0)); + Utils.sendColoredMsg(player, lang.hot_milk_drink); + } else if (Items.WATER_BOWL.is(item)) { + event.setCancelled(true); + change = handleWaterBowl(player); + } else { + change = config.mechanics_thirst_rep_other_water; + } + } + } else { + change = config.mechanics_thirst_rep_water; + } + break; + case MILK_BUCKET: + change = config.mechanics_thirst_rep_milk_bucket; + break; + case MELON_SLICE: + change = config.mechanics_thirst_rep_melon_slice; + break; + case MUSHROOM_STEW: + change = config.mechanics_thirst_rep_mush_stew; + break; + case HONEY_BOTTLE: + change = config.mechanics_thirst_rep_honey_bottle; + break; + case SUSPICIOUS_STEW: + if (Items.SUSPICIOUS_MEAT.is(item)) { + // Remove the bowl from the player's hand afterward + BukkitRunnable runnable = new BukkitRunnable() { + @Override + public void run() { + PlayerInventory inv = player.getInventory(); + if (inv.getItemInMainHand().getType() == Material.BOWL) { + inv.setItemInMainHand(null); + } else if (inv.getItemInOffHand().getType() == Material.BOWL) { + inv.setItemInOffHand(null); + } + } + }; + runnable.runTaskLater(plugin, 1); + return; + } + } + ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); + Bukkit.getPluginManager().callEvent(thirstEvent); + if (!thirstEvent.isCancelled()) { + playerData.setThirst(playerData.getThirst() + change); + } + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + if (!config.MECHANICS_STATUS_SCOREBOARD) { + player.sendMessage(plugin.getPlayerManager().ShowHunger(player).get(1) + plugin.getPlayerManager().ShowHunger(player).get(2) + " " + plugin.getPlayerManager().ShowHunger(player).get(0).toUpperCase()); + player.sendMessage(plugin.getPlayerManager().ShowThirst(player).get(1) + plugin.getPlayerManager().ShowThirst(player).get(2) + " " + plugin.getPlayerManager().ShowThirst(player).get(0).toUpperCase()); + } + }, 1L); + } + + private int handleWaterBowl(Player player) { + int change = config.mechanics_thirst_rep_water_bowl; + player.getInventory().setItemInMainHand(new ItemStack(Material.BOWL)); + if (config.mechanics_thirst_purify_water) { + Random rand = new Random(); + if (rand.nextInt(10) + 1 <= 8) { + player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); + } + } + return change; + } + + @EventHandler + private void onExhaustionReached(EntityExhaustionEvent event) { + Player player = (Player) event.getEntity(); + if (player.getExhaustion() >= 3.97) { // highest amount the event gets to (sometimes) + PlayerData playerData = this.playerManager.getPlayerData(player); + + int change = this.random.nextDouble() <= this.drain ? 1 : 0; + + // Prevent calling thirst event if there is no change + if (change == 0) return; + + // Call thirst level change event + ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); + if (thirstEvent.callEvent()) { + playerData.increaseThirst(-change); + } + } + } + + + @EventHandler //if player catches a water bottle/potion give them dirty water instead + private void onFish(PlayerFishEvent event) { + if (!config.mechanics_thirst_purify_water) return; + if (event.isCancelled()) return; + if (event.getState() == PlayerFishEvent.State.CAUGHT_FISH) { + Entity caught = event.getCaught(); + if (caught instanceof Item item) { + ItemStack stack = item.getItemStack(); + if (stack.getType() == Material.POTION && checkWaterBottle(stack)) { + item.setItemStack(Items.DIRTY_WATER.getItemStack()); + } + } + } + } + + // This map is to tell if the player actually DIED before respawning + // Using the portal in the end causes the respawn event to fire + // when the player re-enters the overworld + private final List HUNGER_CHANGE = new ArrayList<>(); + + @EventHandler + private void onRespawn(PlayerRespawnEvent event) { + Player player = event.getPlayer(); + if (HUNGER_CHANGE.contains(player)) { + HUNGER_CHANGE.remove(player); + + PlayerData playerData = playerManager.getPlayerData(player); + int thirst = config.mechanics_thirst_respawn_amount; + playerData.setThirst(thirst); + playerManager.getPlayerData(player).setThirst(thirst); + + int hunger = config.MECHANICS_HUNGER_RESPAWN_AMOUNT; + Bukkit.getScheduler().runTaskLater(plugin, () -> StatusManager.setHunger(player, hunger), 1); + } + } + + @EventHandler + private void onDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + if (!HUNGER_CHANGE.contains(player)) { + HUNGER_CHANGE.add(player); + } + } + + private boolean checkWaterBottle(ItemStack bottle) { + ItemMeta meta = bottle.getItemMeta(); + assert meta != null; + return switch (((PotionMeta) meta).getBasePotionType()) { + case WATER, MUNDANE, THICK, AWKWARD -> true; + case null, default -> false; + }; + } + +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java index cfe359d..909d6bf 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java @@ -57,7 +57,7 @@ private void onCraft(CraftItemEvent e) { @EventHandler private void onFillWaterBottle(PlayerInteractEvent e) { - if (!config.MECHANICS_THIRST_PURIFY_WATER) return; + if (!config.mechanics_thirst_purify_water) return; Player player = e.getPlayer(); ItemStack item = e.getItem(); if (item != null && item.getType() == Material.GLASS_BOTTLE) { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java index b6f9f10..6b34b47 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java @@ -23,7 +23,7 @@ public class WaterBowl implements Listener { public WaterBowl(Survival plugin) { this.plugin = plugin; - this.thirstEnabled = plugin.getSurvivalConfig().MECHANICS_THIRST_ENABLED; + this.thirstEnabled = plugin.getSurvivalConfig().mechanics_thirst_enabled; this.clayEnabled = plugin.getSurvivalConfig().RECIPES_CLAY; } diff --git a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java index f51a7c2..7b4ae3b 100644 --- a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java +++ b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java @@ -41,7 +41,7 @@ public PlayerManager(Survival plugin, Map playerDataMap) { this.url = plugin.getSurvivalConfig().RESOURCE_PACK_URL; this.playerDataConfig = plugin.getPlayerDataConfig(); Config config = plugin.getSurvivalConfig(); - THIRST = config.MECHANICS_THIRST_START_AMOUNT; + THIRST = config.mechanics_thirst_starting_amount; HUNGER = config.MECHANICS_HUNGER_START_AMOUNT; ENERGY = config.MECHANICS_ENERGY_START; PROTEIN = config.MECHANICS_FOOD_START_PROTEINS; diff --git a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java index b39cab7..26a8c80 100644 --- a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java +++ b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java @@ -530,7 +530,7 @@ public void loadCustomRecipes() { } if (config.MECHANICS_GRAPPLING_HOOK) Items.GRAPPLING_HOOK.registerRecipe(); - if (config.MECHANICS_THIRST_PURIFY_WATER) { + if (config.mechanics_thirst_purify_water) { plugin.getServer().addRecipe(clean_water_furnace); plugin.getServer().addRecipe(clean_water_smoker); plugin.getServer().addRecipe(clean_water_camp); diff --git a/src/main/java/tk/shanebee/survival/tasks/Healthboard.java b/src/main/java/tk/shanebee/survival/tasks/Healthboard.java index 00048a3..90e8c31 100644 --- a/src/main/java/tk/shanebee/survival/tasks/Healthboard.java +++ b/src/main/java/tk/shanebee/survival/tasks/Healthboard.java @@ -85,7 +85,7 @@ public void run() { board.deleteLine(9); } - if (config.MECHANICS_THIRST_ENABLED && thirst) { + if (config.mechanics_thirst_enabled && thirst) { board.setLine(8, pm.ShowThirst(player).get(0)); board.setLine(7, pm.ShowThirst(player).get(1)); board.setLine(6, pm.ShowThirst(player).get(2)); diff --git a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java index d80c5d4..014d6d9 100644 --- a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java +++ b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java @@ -9,21 +9,15 @@ public class TaskManager { public TaskManager(Survival plugin) { - final int ALERT_INTERVAL = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; + final int alertInterval = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; Config config = plugin.getSurvivalConfig(); if (config.MECHANICS_ENERGY_ENABLED) { new EnergyDrain(plugin); } - if (config.MECHANICS_THIRST_ENABLED) { - new ThirstDrain(plugin); - if (!config.MECHANICS_STATUS_SCOREBOARD && ALERT_INTERVAL > 0) { - new ThirstAlert(plugin); - } - } if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { new NutrientsDrain(plugin); new NutrientsEffect(plugin); - if (!config.MECHANICS_STATUS_SCOREBOARD && ALERT_INTERVAL > 0) { + if (!config.MECHANICS_STATUS_SCOREBOARD && alertInterval > 0) { new NutrientsAlert(plugin); } } @@ -31,10 +25,17 @@ public TaskManager(Survival plugin) { if (config.MECHANICS_WEATHER_ENABLED) { new WeatherTask(plugin); } - if (config.MECHANICS_THIRST_DRAIN_NETHER > 0) { + // Thirst + if (config.mechanics_thirst_enabled) { + new ThirstDrain(plugin); + if (!config.MECHANICS_STATUS_SCOREBOARD && alertInterval > 0) { + new ThirstAlert(plugin); + } + } + if (config.mechanics_thirst_nether_drain > 0) { new ThirstDrainNether(plugin); } - if (config.MECHANICS_THIRST_DRAIN_HEAT > 0) { + if (config.mechanics_thirst_heat_drain > 0) { new ThirstDrainHeat(plugin); } } diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java b/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java index bbe872f..d07ffe7 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java @@ -2,72 +2,52 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.damage.DamageSource; +import org.bukkit.damage.DamageType; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Config; import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.events.ThirstLevelChangeEvent; import tk.shanebee.survival.managers.PlayerManager; -import java.util.Random; - +@SuppressWarnings("UnstableApiUsage") class ThirstDrain extends BukkitRunnable { - private final PlayerManager playerManager; - private final double drain; - private final double damage; - - ThirstDrain(Survival plugin) { - this.playerManager = plugin.getPlayerManager(); - Config config = plugin.getSurvivalConfig(); - this.drain = config.MECHANICS_THIRST_DRAIN_RATE; - this.damage = config.MECHANICS_THIRST_DAMAGE_RATE; - this.runTaskTimer(plugin, -1, 1); - } - - @Override - public void run() { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - // Drain player's thirst when exhaustion is high - if (player.getExhaustion() >= 4) { - PlayerData playerData = playerManager.getPlayerData(player); - - Random rand = new Random(); - int change = rand.nextDouble() <= this.drain ? 1 : 0; - - // Prevent calling thirst event if there is no change - if (change == 0) continue; - - // Call thirst level change event - ThirstLevelChangeEvent event = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - playerData.increaseThirst(-change); - } - } - // Damage player when thirst is too low - PlayerData playerData = playerManager.getPlayerData(player); - - if (playerData.getThirst() <= 0) { - switch (player.getWorld().getDifficulty()) { - case EASY: - if (player.getHealth() > 10) - player.damage(this.damage); - break; - case NORMAL: - if (player.getHealth() > 1) - player.damage(this.damage); - break; - case HARD: - player.damage(this.damage); - break; - default: - } - } - } - } - } + private final PlayerManager playerManager; + private final double damageRate; + + ThirstDrain(Survival plugin) { + this.playerManager = plugin.getPlayerManager(); + this.damageRate = plugin.getSurvivalConfig().mechanics_thirst_damage_rate; + this.runTaskTimer(plugin, 20, 20); + } + + @Override + public void run() { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; + + // Damage player when thirst is too low + PlayerData playerData = playerManager.getPlayerData(player); + + if (playerData.getThirst() <= 0) { + DamageSource damageSource = DamageSource.builder(DamageType.DRY_OUT).build(); + switch (player.getWorld().getDifficulty()) { + case EASY: + if (player.getHealth() > 10) + player.damage(this.damageRate, damageSource); + break; + case NORMAL: + if (player.getHealth() > 1) + player.damage(this.damageRate, damageSource); + break; + case HARD: + player.damage(this.damageRate, damageSource); + break; + default: + } + } + } + } } diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java index e243747..fc982ed 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java +++ b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java @@ -3,13 +3,13 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.World.Environment; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.events.ThirstLevelChangeEvent; import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; class ThirstDrainHeat extends BukkitRunnable { @@ -17,23 +17,23 @@ class ThirstDrainHeat extends BukkitRunnable { ThirstDrainHeat(Survival plugin) { this.playerManager = plugin.getPlayerManager(); - this.runTaskTimer(plugin, 0, 20 * plugin.getSurvivalConfig().MECHANICS_THIRST_DRAIN_HEAT); + this.runTaskTimer(plugin, 0, 20L * plugin.getSurvivalConfig().mechanics_thirst_heat_drain); } @Override public void run() { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { + for (Player player : Bukkit.getOnlinePlayers()) { if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; if (player.getWorld().getEnvironment() != Environment.NORMAL) continue; - if (player.getLocation().getBlock().getTemperature() < 1.0) continue; - if (!Utils.isAtHighest(player)) continue; + Block block = player.getLocation().getBlock(); + if (block.getTemperature() < 1.0) continue; // Only hot biomes + if (block.getLightFromSky() < 15) continue; // Must be exposed to sunlight - PlayerData playerData = playerManager.getPlayerData(player); + PlayerData playerData = this.playerManager.getPlayerData(player); int change = 1; // Call thirst level change event ThirstLevelChangeEvent event = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { + if (event.callEvent()) { playerData.increaseThirst(-change); } } diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java index 7218c35..c66af64 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java +++ b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java @@ -16,7 +16,7 @@ class ThirstDrainNether extends BukkitRunnable { ThirstDrainNether(Survival plugin) { this.playerManager = plugin.getPlayerManager(); - this.runTaskTimer(plugin, 0, 20 * plugin.getSurvivalConfig().MECHANICS_THIRST_DRAIN_NETHER); + this.runTaskTimer(plugin, 0, 20L * plugin.getSurvivalConfig().mechanics_thirst_nether_drain); } @Override diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 22c2c8d..004b468 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -181,30 +181,33 @@ Mechanics: # When enabled, players will need to drink water to replenish their thirst levels Thirst: - Enabled: true + enabled: true # The level of thirst a player starts out with (max = 40) - Starting-Amount: 30 - # The level of thirst a player gets after respawning after death (max = 40) - Respawn-Amount: 30 + starting-amount: 30 + # The level of thirst a player gets after respawning (max = 40) + respawn-amount: 30 # Enables 3 different levels of water (dirty, clean, purified) - PurifyWater: true - MeltSnow: true + purify-water: true + # Unused (maybe for the future?!?!) + melt-snow: true # The rate at which a player's thirst level will drop (value from 0.01 -> 1.0) - DrainRate: 1.0 + # The player will lose thirst levels when they reach exhaustion + # This happens when the player does exhausting tasks such as running, mining, etc. + drain-rate: 1.0 # If player is in a HOT biome, drain 1 extra thirst point every X seconds - # This helps speed up thirst draining when a player is in a hot biome like the desert or savannah + # This helps speed up thirst draining when a player is in a hot biome like the desert or savanna # (ex: at a rate of 30, thirst drops 2 points a minute, which means the player would lose all thirst in 20 minutes) # If set to 0, this will be disabled - HeatDrain: 30 + heat-drain: 30 # If player is in the nether, drain 1 extra thirst point every X seconds # This helps speed up thirst draining when a player is in the nether # (ex: at a rate of 30, thirst drops 2 points a minute, which means the player would lose all thirst in 20 minutes) # If set to 0, this will be disabled - NetherDrain: 30 + nether-drain: 30 # The amount of damage a player takes when their thirst level is empty - DamageRate: 1.0 + damage-rate: 1.0 # The level of thirst that will be replenished when a player consumes this item - Replenish-Level: + replenish-level: beetroot-soup: 6 melon-slice: 6 mushroom-stew: 12 @@ -215,9 +218,9 @@ Mechanics: milk-bucket: 30 honey-bottle: 16 # Only used if PurifyWater is enabled - dirty-water: 13 - clean-water: 18 - purified-water: 23 + dirty-water: 7 + clean-water: 14 + purified-water: 24 # This can be used for any other water bottle (such as custom ones or just vanilla water bottles) # If you do not want players to get thirst from other water bottles leave this at 0 other-water: 0 From 32e2af46ba0ba818dc172960ab9aee08a7f9bb72 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 14 Feb 2025 15:02:46 -0800 Subject: [PATCH 032/133] HealthBoard updates --- .../tk/shanebee/survival/commands/Status.java | 48 ++-- .../java/tk/shanebee/survival/data/Board.java | 194 -------------- .../shanebee/survival/data/HealthBoard.java | 145 +++++++++++ .../listeners/item/ThirstListener.java | 4 +- .../survival/managers/Placeholders.java | 16 +- .../survival/managers/PlayerManager.java | 241 +++++++----------- .../survival/managers/ScoreBoardManager.java | 68 +++-- .../survival/tasks/HealthBoardTask.java | 136 ++++++++++ .../shanebee/survival/tasks/Healthboard.java | 122 --------- src/main/resources/config.yml | 6 +- src/main/resources/lang_EN.yml | 2 +- 11 files changed, 468 insertions(+), 514 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/data/Board.java create mode 100644 src/main/java/tk/shanebee/survival/data/HealthBoard.java create mode 100644 src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java delete mode 100644 src/main/java/tk/shanebee/survival/tasks/Healthboard.java diff --git a/src/main/java/tk/shanebee/survival/commands/Status.java b/src/main/java/tk/shanebee/survival/commands/Status.java index c0fa770..47d2459 100644 --- a/src/main/java/tk/shanebee/survival/commands/Status.java +++ b/src/main/java/tk/shanebee/survival/commands/Status.java @@ -42,13 +42,13 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (args.length == 0) { if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(playerManager.ShowHunger(player).get(1) + - playerManager.ShowHunger(player).get(2) + " " + - playerManager.ShowHunger(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getHungerVisual(player).get(1) + + playerManager.getHungerVisual(player).get(2) + " " + + playerManager.getHungerVisual(player).get(0).toUpperCase()); if (config.mechanics_thirst_enabled) - player.sendMessage(playerManager.ShowThirst(player).get(1) + - playerManager.ShowThirst(player).get(2) + " " + - playerManager.ShowThirst(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getThirstVisual(player).get(1) + + playerManager.getThirstVisual(player).get(2) + " " + + playerManager.getThirstVisual(player).get(0).toUpperCase()); } else { sendHelp(player); } @@ -58,18 +58,18 @@ public boolean onCommand(CommandSender sender, Command command, String label, St switch (args[0]) { case "all": if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(playerManager.ShowHunger(player).get(1) + - playerManager.ShowHunger(player).get(2) + " " + - playerManager.ShowHunger(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getHungerVisual(player).get(1) + + playerManager.getHungerVisual(player).get(2) + " " + + playerManager.getHungerVisual(player).get(0).toUpperCase()); if (config.mechanics_thirst_enabled) - player.sendMessage(playerManager.ShowThirst(player).get(1) + - playerManager.ShowThirst(player).get(2) + " " + - playerManager.ShowThirst(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getThirstVisual(player).get(1) + + playerManager.getThirstVisual(player).get(2) + " " + + playerManager.getThirstVisual(player).get(0).toUpperCase()); if (config.MECHANICS_ENERGY_ENABLED) - player.sendMessage(playerManager.showEnergy(player).get(1) + - " " + playerManager.showEnergy(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getEnergyVisual(player).get(1) + + " " + playerManager.getEnergyVisual(player).get(0).toUpperCase()); if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { - for (String s : playerManager.ShowNutrients(player)) + for (String s : playerManager.getNutrientsVisual(player)) player.sendMessage(s); } } else { @@ -92,9 +92,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St case "hunger": case "h": if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(playerManager.ShowHunger(player).get(1) + - playerManager.ShowHunger(player).get(2) + " " + - playerManager.ShowHunger(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getHungerVisual(player).get(1) + + playerManager.getHungerVisual(player).get(2) + " " + + playerManager.getHungerVisual(player).get(0).toUpperCase()); } else playerData.setInfoDisplayed(Info.HUNGER, !playerData.isInfoDisplayed(Info.HUNGER)); break; @@ -102,9 +102,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St case "t": if (!config.MECHANICS_STATUS_SCOREBOARD) { if (config.mechanics_thirst_enabled) - player.sendMessage(playerManager.ShowThirst(player).get(1) + - playerManager.ShowThirst(player).get(2) + " " + - playerManager.ShowThirst(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getThirstVisual(player).get(1) + + playerManager.getThirstVisual(player).get(2) + " " + + playerManager.getThirstVisual(player).get(0).toUpperCase()); } else playerData.setInfoDisplayed(Info.THIRST, !playerData.isInfoDisplayed(Info.THIRST)); break; @@ -114,8 +114,8 @@ public boolean onCommand(CommandSender sender, Command command, String label, St case "e": if (!config.MECHANICS_STATUS_SCOREBOARD) { if (config.MECHANICS_ENERGY_ENABLED) - player.sendMessage(playerManager.showEnergy(player).get(1) + - " " + playerManager.showEnergy(player).get(0).toUpperCase()); + player.sendMessage(playerManager.getEnergyVisual(player).get(1) + + " " + playerManager.getEnergyVisual(player).get(0).toUpperCase()); } else playerData.setInfoDisplayed(Info.ENERGY, !playerData.isInfoDisplayed(Info.ENERGY)); break; @@ -123,7 +123,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St case "n": if (!config.MECHANICS_STATUS_SCOREBOARD) { if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { - for (String s : playerManager.ShowNutrients(player)) + for (String s : playerManager.getNutrientsVisual(player)) player.sendMessage(s); } } else diff --git a/src/main/java/tk/shanebee/survival/data/Board.java b/src/main/java/tk/shanebee/survival/data/Board.java deleted file mode 100644 index 69e7ee7..0000000 --- a/src/main/java/tk/shanebee/survival/data/Board.java +++ /dev/null @@ -1,194 +0,0 @@ -package tk.shanebee.survival.data; - -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; -import org.bukkit.scoreboard.Team; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.util.Utils; -import tk.shanebee.survival.util.Validate; - -import java.util.HashMap; -import java.util.Map; - -/** - * Represents a team based scoreboard for a player - *

This class also has a map that holds all player scoreboards

- */ -@SuppressWarnings("unused") -public class Board { - - // STATIC STUFF - private static final Map BOARD_MAP = new HashMap<>(); - - /** - * Get the Board for a specific player - *
- * If no Board is available, a new one will be created - * - * @param player Player to grab scoreboard for - * @return Board of player - */ - public static Board getBoard(Player player) { - if (BOARD_MAP.containsKey(player)) { - return BOARD_MAP.get(player); - } else { - return createBoard(player); - } - } - - /** - * Create a Board for a player - *
- * Useful in a join event - * - * @param player Player to create Board for - */ - public static Board createBoard(Player player) { - Board board = new Board(player, false); - BOARD_MAP.put(player, board); - return board; - } - - /** - * Remove a Board for a player - *
- * Useful when the player leaves the server - * - * @param player Player to remove Board for - */ - public static void removeBoard(Player player) { - if (BOARD_MAP.containsKey(player)) { - Board board = BOARD_MAP.get(player); - board.toggle(false); - board.clearBoard(); - } - BOARD_MAP.remove(player); - } - - /** - * Clear and remove all Boards - */ - public static void clearBoards() { - for (Board board : BOARD_MAP.values()) { - board.clearBoard(); - } - BOARD_MAP.clear(); - } - - // OBJECT STUFF - private final Player player; - private final Scoreboard oldScoreboard; - private final Scoreboard scoreboard; - private final Objective board; - private final Team[] lines = new Team[15]; - private final String[] entries = new String[]{"&1", "&2", "&3", "&4", "&5", "&6", "&7", "&8", "&9", "&0", "&a", "&b", "&c", "&d", "&e"}; - private boolean on; - - public Board(Player player, boolean load) { - this.player = player; - this.on = true; - Survival plugin = Survival.getInstance(); - ScoreboardManager scoreboardManager = plugin.getServer().getScoreboardManager(); - oldScoreboard = player.getScoreboard(); - if (!load) { - assert scoreboardManager != null; - scoreboard = scoreboardManager.getNewScoreboard(); - this.player.setScoreboard(scoreboard); - board = scoreboard.registerNewObjective("Board", "dummy", "Board"); - board.setDisplaySlot(DisplaySlot.SIDEBAR); - board.setDisplayName(" "); - - for (int i = 0; i < 15; i++) { - lines[i] = scoreboard.registerNewTeam("line" + (i + 1)); - } - - for (int i = 0; i < 15; i++) { - lines[i].addEntry(getColString(entries[i])); - } - } else { - scoreboard = player.getScoreboard(); - board = scoreboard.getObjective("Board"); - - for (int i = 0; i < 15; i++) { - lines[i] = scoreboard.getTeam("line" + (i + 1)); - } - } - } - - /** - * Set the title of this Board - * - * @param title Title to set - */ - public void setTitle(String title) { - board.setDisplayName(getColString(title)); - } - - /** - * Set a specific line for this Board - *

Lines 1 - 15

- * - * @param line Line to set (1 - 15) - * @param text Text to put in line - */ - public void setLine(int line, String text) { - Validate.isBetween(line, 1, 15); - Team t = lines[line - 1]; - t.setPrefix(getColString(text)); - board.getScore(getColString(entries[line - 1])).setScore(line); - } - - /** - * Delete a line in this Board - *

Lines 1 - 15

- * - * @param line Line to delete (1 - 15) - */ - public void deleteLine(int line) { - Validate.isBetween(line, 1, 15); - scoreboard.resetScores(getColString(entries[line - 1])); - } - - /** - * Clear all lines of this Board - */ - public void clearBoard() { - for (int i = 1; i < 16; i++) { - deleteLine(i); - } - } - - /** - * Toggle this Board on or off - *
- * When off, will not be visible to player, but can still update - * - * @param on Whether on or off - */ - public void toggle(boolean on) { - if (on) { - player.setScoreboard(this.scoreboard); - this.on = true; - } else { - player.setScoreboard(this.oldScoreboard); - this.on = false; - } - } - - /** - * Check if this Board is on or off - * - * @return True if on else false - */ - public boolean isOn() { - return this.on; - } - - private String getColString(String string) { - return Utils.getColoredString(string); - } - -} diff --git a/src/main/java/tk/shanebee/survival/data/HealthBoard.java b/src/main/java/tk/shanebee/survival/data/HealthBoard.java new file mode 100644 index 0000000..67d8220 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/data/HealthBoard.java @@ -0,0 +1,145 @@ +package tk.shanebee.survival.data; + +import fr.mrmicky.fastboard.adventure.FastBoard; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; +import org.jetbrains.annotations.Nullable; +import tk.shanebee.survival.util.Validate; + +import java.util.ArrayList; +import java.util.List; + +/** + * Represents a scoreboard for player data + *

Uses {@link FastBoard} for packet based scoreboards

+ */ +@SuppressWarnings("unused") +public class HealthBoard { + + // STATIC STUFF + private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage(); + private static final Scoreboard MAIN = Bukkit.getScoreboardManager().getMainScoreboard(); + private static final Scoreboard DUMMY = Bukkit.getScoreboardManager().getNewScoreboard(); + + // OBJECT STUFF + private final Player player; + private FastBoard fastBoard; + private final Component[] lines = new Component[15]; + private final Component[] formats = new Component[15]; + private Component title; + private boolean on; + + public HealthBoard(Player player) { + this.player = player; + this.on = false; + } + + /** + * Set the title of this Board + * + * @param title Title to set + */ + public void setTitle(String title) { + this.title = MINI_MESSAGE.deserialize(title); + } + + /** + * Set a specific line for this Board + *

Lines 1 - 15

+ * + * @param line Line to set (1 - 15) + * @param text Text to put in line + */ + public void setLine(int line, @Nullable String text) { + setLine(line, text, null); + } + + public void setLine(int line, @Nullable String text, String format) { + Validate.isBetween(line, 1, 15); + if (text != null) { + Component component = MINI_MESSAGE.deserialize(text); + this.lines[line - 1] = component; + } else { + this.lines[line - 1] = null; + } + if (format != null) { + Component component = MINI_MESSAGE.deserialize(format); + this.formats[line - 1] = component; + } else { + this.formats[line - 1] = null; + } + } + + /** + * Delete a line in this Board + *

Lines 1 - 15

+ * + * @param line Line to delete (1 - 15) + */ + public void deleteLine(int line) { + Validate.isBetween(line, 1, 15); + setLine(line, null); + } + + /** + * Clear all lines of this Board + */ + public void clearBoard() { + for (int i = 1; i < 16; i++) { + deleteLine(i); + } + } + + public void update() { + if (this.fastBoard != null) { + this.fastBoard.updateTitle(this.title); + List lines = new ArrayList<>(); + List formats = new ArrayList<>(); + for (int i = 0; i < this.lines.length; i++) { + if (this.lines[i] != null) { + lines.add(this.lines[i]); + if (this.formats[i] != null) { + formats.add(this.formats[i]); + } else { + formats.add(Component.empty()); + } + } + } + this.fastBoard.updateLines(lines, formats); + } + } + + /** + * Toggle this Board on or off + *
+ * When off, will not be visible to player, but can still update + * + * @param on Whether on or off + */ + public void toggle(boolean on) { + if (on) { + this.fastBoard = new FastBoard(this.player); + this.on = true; + } else { + this.fastBoard.delete(); + this.fastBoard = null; + this.on = false; + // Force resends the vanilla scoreboard + this.player.setScoreboard(DUMMY); + this.player.setScoreboard(MAIN); + } + } + + /** + * Check if this Board is on or off + * + * @return True if on else false + */ + public boolean isOn() { + return this.on; + } + +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java index 41fa4aa..98cddd1 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java @@ -136,8 +136,8 @@ public void run() { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(plugin.getPlayerManager().ShowHunger(player).get(1) + plugin.getPlayerManager().ShowHunger(player).get(2) + " " + plugin.getPlayerManager().ShowHunger(player).get(0).toUpperCase()); - player.sendMessage(plugin.getPlayerManager().ShowThirst(player).get(1) + plugin.getPlayerManager().ShowThirst(player).get(2) + " " + plugin.getPlayerManager().ShowThirst(player).get(0).toUpperCase()); + player.sendMessage(plugin.getPlayerManager().getHungerVisual(player).get(1) + plugin.getPlayerManager().getHungerVisual(player).get(2) + " " + plugin.getPlayerManager().getHungerVisual(player).get(0).toUpperCase()); + player.sendMessage(plugin.getPlayerManager().getThirstVisual(player).get(1) + plugin.getPlayerManager().getThirstVisual(player).get(2) + " " + plugin.getPlayerManager().getThirstVisual(player).get(0).toUpperCase()); } }, 1L); } diff --git a/src/main/java/tk/shanebee/survival/managers/Placeholders.java b/src/main/java/tk/shanebee/survival/managers/Placeholders.java index a43a8dc..4b81d16 100644 --- a/src/main/java/tk/shanebee/survival/managers/Placeholders.java +++ b/src/main/java/tk/shanebee/survival/managers/Placeholders.java @@ -64,11 +64,11 @@ public String onPlaceholderRequest(Player p, String identifier) { } // Shows player's hunger bar (hunger part) if (identifier.equalsIgnoreCase("player_hunger_bar_1")) { - return playerManager.ShowHunger(p).get(1); + return playerManager.getHungerVisual(p).get(1); } // Shows player's hunger bar (saturation part) if (identifier.equalsIgnoreCase("player_hunger_bar_2")) { - return playerManager.ShowHunger(p).get(2); + return playerManager.getHungerVisual(p).get(2); } // Shows player's thirst if (identifier.equalsIgnoreCase("player_thirst")) { @@ -76,11 +76,11 @@ public String onPlaceholderRequest(Player p, String identifier) { } // Shows player's thirst bar (top part - first half out of 40) if (identifier.equalsIgnoreCase("player_thirst_bar_1")) { - return playerManager.ShowThirst(p).get(1); + return playerManager.getThirstVisual(p).get(1); } // Shows player's thirst bar (bottom part - second half out of 40) if (identifier.equalsIgnoreCase("player_thirst_bar_2")) { - return playerManager.ShowThirst(p).get(2); + return playerManager.getThirstVisual(p).get(2); } // Shows player's fatigue // Deprecated if (identifier.equalsIgnoreCase("player_fatigue")) { @@ -92,17 +92,17 @@ public String onPlaceholderRequest(Player p, String identifier) { } // Shows player's energy level (as a colored bar) if (identifier.equalsIgnoreCase("player_energy_bar")) { - return playerManager.showEnergy(p).get(1); + return playerManager.getEnergyVisual(p).get(1); } // Shows player's nutrients bars ( ) if (identifier.equalsIgnoreCase("player_nutrients_carbs_bar")) { - return playerManager.ShowNutrients(p).get(0); + return playerManager.getNutrientsVisual(p).get(0); } if (identifier.equalsIgnoreCase("player_nutrients_proteins_bar")) { - return playerManager.ShowNutrients(p).get(1); + return playerManager.getNutrientsVisual(p).get(1); } if (identifier.equalsIgnoreCase("player_nutrients_salts_bar")) { - return playerManager.ShowNutrients(p).get(2); + return playerManager.getNutrientsVisual(p).get(2); } // Shows player's nutrients (just the ) if (identifier.equalsIgnoreCase("player_nutrients_carbs")) { diff --git a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java index 7b4ae3b..e7c0543 100644 --- a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java +++ b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java @@ -1,18 +1,25 @@ package tk.shanebee.survival.managers; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.event.Listener; -import org.bukkit.scoreboard.Scoreboard; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.config.PlayerDataConfig; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.UUID; /** * Manager for players @@ -24,12 +31,15 @@ public class PlayerManager implements Listener { private final Lang lang; private final Survival plugin; private final PlayerDataConfig playerDataConfig; - private final int THIRST; - private final int HUNGER; - private final double ENERGY; - private final int PROTEIN; - private final int CARBS; - private final int SALTS; + private final int thirstStartingAmount; + private final int hungerStartingAmount; + private final double energyStartingAmount; + private final int proteinStartingAmount; + private final int carbsStartingAmount; + private final int saltsStartingAmount; + private final int maxProtein; + private final int maxCarbs; + private final int maxSalts; // Store all the active PlayerData private final Map playerDataMap; @@ -41,13 +51,15 @@ public PlayerManager(Survival plugin, Map playerDataMap) { this.url = plugin.getSurvivalConfig().RESOURCE_PACK_URL; this.playerDataConfig = plugin.getPlayerDataConfig(); Config config = plugin.getSurvivalConfig(); - THIRST = config.mechanics_thirst_starting_amount; - HUNGER = config.MECHANICS_HUNGER_START_AMOUNT; - ENERGY = config.MECHANICS_ENERGY_START; - PROTEIN = config.MECHANICS_FOOD_START_PROTEINS; - CARBS = config.MECHANICS_FOOD_START_CARBS; - SALTS = config.MECHANICS_FOOD_START_SALTS; - loadPlayerData(); + this.thirstStartingAmount = config.mechanics_thirst_starting_amount; + this.hungerStartingAmount = config.MECHANICS_HUNGER_START_AMOUNT; + this.energyStartingAmount = config.MECHANICS_ENERGY_START; + this.proteinStartingAmount = config.MECHANICS_FOOD_START_PROTEINS; + this.carbsStartingAmount = config.MECHANICS_FOOD_START_CARBS; + this.saltsStartingAmount = config.MECHANICS_FOOD_START_SALTS; + this.maxCarbs = config.MECHANICS_FOOD_MAX_CARBS; + this.maxProtein = config.MECHANICS_FOOD_MAX_PROTEINS; + this.maxSalts = config.MECHANICS_FOOD_MAX_SALTS; } /** @@ -57,7 +69,7 @@ public PlayerManager(Survival plugin, Map playerDataMap) { * @return PlayerData for player */ public PlayerData getPlayerData(Player player) { - return playerDataMap.get(player.getUniqueId()); + return this.playerDataMap.get(player.getUniqueId()); } /** @@ -67,7 +79,7 @@ public PlayerData getPlayerData(Player player) { */ @SuppressWarnings("unused") public Collection getAllPlayerData() { - return playerDataMap.values(); + return this.playerDataMap.values(); } /** @@ -78,10 +90,10 @@ public Collection getAllPlayerData() { */ public PlayerData createNewPlayerData(Player player) { UUID uuid = player.getUniqueId(); - setHunger(player, HUNGER); + setHunger(player, hungerStartingAmount); - PlayerData playerData = new PlayerData(uuid, THIRST, PROTEIN, CARBS, SALTS, ENERGY); - playerDataMap.put(uuid, playerData); + PlayerData playerData = new PlayerData(uuid, this.thirstStartingAmount, this.proteinStartingAmount, this.carbsStartingAmount, this.saltsStartingAmount, this.energyStartingAmount); + this.playerDataMap.put(uuid, playerData); savePlayerData(playerData); return playerData; } @@ -100,7 +112,7 @@ private void setHunger(Player player, int value) { * @param data PlayerData to save */ private void savePlayerData(PlayerData data) { - playerDataConfig.savePlayerDataToFile(data); + this.playerDataConfig.savePlayerDataToFile(data); } /** @@ -110,8 +122,8 @@ private void savePlayerData(PlayerData data) { * @return Loaded player data */ public PlayerData loadPlayerData(Player player) { - PlayerData playerData = playerDataConfig.getPlayerDataFromFile(player); - playerDataMap.put(player.getUniqueId(), playerData); + PlayerData playerData = this.playerDataConfig.getPlayerDataFromFile(player); + this.playerDataMap.put(player.getUniqueId(), playerData); return playerData; } @@ -124,8 +136,8 @@ public PlayerData loadPlayerData(Player player) { */ public void unloadPlayerData(Player player) { PlayerData playerData = getPlayerData(player); - playerDataConfig.savePlayerDataToFile(playerData); - playerDataMap.remove(player.getUniqueId()); + this.playerDataConfig.savePlayerDataToFile(playerData); + this.playerDataMap.remove(player.getUniqueId()); } /** @@ -161,16 +173,16 @@ public void setWaypoint(Player player, Location location, boolean particle) { * @param delay A delay in ticks */ public void applyResourcePack(Player player, int delay) { - if (url != null) { + if (this.url != null) { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { try { player.setResourcePack(url); } catch (Exception e) { Bukkit.getConsoleSender().sendMessage("ResourcePackURL is null or URL is too long! Plugin disabled."); - Bukkit.getPluginManager().disablePlugin(plugin); + Bukkit.getPluginManager().disablePlugin(this.plugin); return; } - plugin.getUsingPlayers().add(player); + this.plugin.getUsingPlayers().add(player); }, delay); } } @@ -209,104 +221,82 @@ public Location lookAt(Location loc, Location lookat) { return loc; } - public List ShowThirst(Player player) { - StringBuilder thirstBar = new StringBuilder(); + public List getThirstVisual(Player player) { PlayerData data = getPlayerData(player); int thirst = data.getThirst(); + double grad = ((double) thirst / 40) - 1; - for (int i = 0; i < thirst; i++) { - thirstBar.append("|"); - } - for (int i = thirst; i < 20; i++) { - thirstBar.append("."); - } + // green - green - green - yellow - orange - red + StringBuilder thirstLineOne = new StringBuilder(""); + StringBuilder thirstLineTwo = new StringBuilder(""); - if (thirst >= 40) - thirstBar.insert(0, ChatColor.GREEN); - else if (thirst <= 6) - thirstBar.insert(0, ChatColor.RED); - else - thirstBar.insert(0, ChatColor.AQUA); + if (thirst > 20) { + thirstLineOne.append("|".repeat(20)); + thirstLineTwo.append("|".repeat(thirst - 20)); + thirstLineTwo.append(".".repeat(20 - (thirst - 20))); + } else { + thirstLineOne.append("|".repeat(thirst)); + thirstLineOne.append(".".repeat(20 - thirst)); + thirstLineTwo.append(".".repeat(20)); + } - return Arrays.asList(ChatColor.AQUA + lang.thirst, (thirstBar.length() <= 22 ? thirstBar.toString() : thirstBar.substring(0, 22)), - thirstBar.substring(0, 2) + (thirstBar.length() > 22 ? thirstBar.substring(22) : "") + ChatColor.RESET + ChatColor.RESET); + return Arrays.asList("" + this.lang.thirst, thirstLineOne.toString(), thirstLineTwo.toString()); } - public List ShowHunger(Player player) { - int hunger = player.getFoodLevel(); - int saturation = Math.round(player.getSaturation()); - StringBuilder hungerBar = new StringBuilder(); - StringBuilder saturationBar = new StringBuilder(ChatColor.YELLOW + ""); - for (int i = 0; i < hunger; i++) { - hungerBar.append("|"); - } - for (int i = hunger; i < 20; i++) { - hungerBar.append("."); - } - for (int i = 0; i < saturation; i++) { - saturationBar.append("|"); - } + @SuppressWarnings("StringBufferReplaceableByString") + public List getHungerVisual(Player player) { + int hunger = Math.clamp(player.getFoodLevel(), 0, 20); + int saturation = Math.clamp((int) player.getSaturation(), 0, 20); + double grad = ((double) hunger / 20) - 1; - if (hunger >= 20) - hungerBar.insert(0, ChatColor.GREEN); - else if (hunger <= 6) - hungerBar.insert(0, ChatColor.RED); - else - hungerBar.insert(0, ChatColor.GOLD); + // green - green - yellow - red + StringBuilder hungerBar = new StringBuilder(""); + StringBuilder saturationBar = new StringBuilder(""); - return Arrays.asList(ChatColor.GOLD + lang.hunger, hungerBar.toString() + ChatColor.RESET, saturationBar.toString()); + hungerBar.append("|".repeat(Math.max(0, hunger))); + hungerBar.append(".".repeat(Math.max(0, 20 - hunger))); + saturationBar.append("|".repeat(Math.max(0, saturation))); + saturationBar.append(".".repeat(Math.max(0, 20 - saturation))); + + return Arrays.asList("<#63F9A7>" + this.lang.hunger, hungerBar.toString(), saturationBar.toString()); } - public List ShowNutrients(Player player) { + public List getNutrientsVisual(Player player) { List nutrients = new ArrayList<>(); PlayerData data = getPlayerData(player); - int carbon = data.getNutrient(Nutrient.CARBS); + int carbs = data.getNutrient(Nutrient.CARBS); int protein = data.getNutrient(Nutrient.PROTEIN); int salts = data.getNutrient(Nutrient.SALTS); - String showCarbon = Integer.toString(carbon); - if (carbon >= 480) - showCarbon = ChatColor.GREEN + showCarbon; - else - showCarbon = ChatColor.RED + showCarbon; - nutrients.add(showCarbon + " " + ChatColor.DARK_GREEN + lang.carbohydrates); - - String showProtein = Integer.toString(protein); - if (protein >= 120) - showProtein = ChatColor.GREEN + showProtein; - else - showProtein = ChatColor.RED + showProtein; - nutrients.add(showProtein + " " + ChatColor.DARK_RED + lang.protein); - - String showSalts = Integer.toString(salts); - if (salts >= 180) - showSalts = ChatColor.GREEN + showSalts; - else - showSalts = ChatColor.RED + showSalts; - nutrients.add(showSalts + " " + ChatColor.BLUE + lang.vitamins); + nutrients.add("<#A0E853>" + this.lang.carbohydrates); + nutrients.add("<#CE784D>" + this.lang.protein); + nutrients.add("<#53DDE8>" + this.lang.vitamins); + + double carbGrad = ((double) carbs / this.maxCarbs) - 1; + double proteinGrad = ((double) protein / this.maxProtein) - 1; + double saltsGrad = ((double) salts / this.maxSalts) - 1; + + // green - green - green - yellow - red + nutrients.add("" + carbs); + nutrients.add("" + protein); + nutrients.add("" + salts); return nutrients; } - public List showEnergy(Player player) { + @SuppressWarnings("StringBufferReplaceableByString") + public List getEnergyVisual(Player player) { PlayerData playerData = getPlayerData(player); double energy = Math.floor(playerData.getEnergy()); - StringBuilder energyBar = new StringBuilder(); - for (int i = 0; i < energy; i++) { - energyBar.append("|"); - } - for (int i = ((int) energy); i < 20; i++) { - energyBar.append("."); - } - if (energy >= 16) { - energyBar.insert(0, ChatColor.GREEN); - } else if (energy <= 3) { - energyBar.insert(0, ChatColor.RED); - } else { - energyBar.insert(0, ChatColor.GOLD); - } - return Arrays.asList(Utils.getColoredString(lang.energy), energyBar.toString()); + double grad = (energy / 20) - 1; + + // green - green - green - yellow - red + StringBuilder energyBar = new StringBuilder(""); + energyBar.append("|".repeat((int) Math.max(0, Math.ceil(energy)))); + energyBar.append(".".repeat((int) Math.max(0, 20 - Math.ceil(energy)))); + + return Arrays.asList("<#F963F2>" + this.lang.energy, energyBar.toString()); } /** @@ -320,47 +310,8 @@ public boolean isArrowOffHand(Player player) { Material offHand = player.getInventory().getItemInOffHand().getType(); if (mainHand == Material.CROSSBOW) return offHand == Material.ARROW || offHand == Material.SPECTRAL_ARROW - || offHand == Material.TIPPED_ARROW || offHand == Material.FIREWORK_ROCKET; + || offHand == Material.TIPPED_ARROW || offHand == Material.FIREWORK_ROCKET; return offHand == Material.ARROW || offHand == Material.SPECTRAL_ARROW || offHand == Material.TIPPED_ARROW; } - @SuppressWarnings("ConstantConditions") - private void loadPlayerData() { - OfflinePlayer[] players = Bukkit.getOfflinePlayers(); - Scoreboard scoreboard = plugin.getMainBoard(); - - // Convert previous player data - if (playerDataConfig.needsConversion()) { - int c = 0; - if (scoreboard.getObjective("Thirst") != null) { - Utils.log("&bConverting player data!"); - long time = System.currentTimeMillis(); - - for (OfflinePlayer player : players) { - UUID uuid = player.getUniqueId(); - assert player.getName() != null; - int thirst = scoreboard.getObjective("Thirst").getScore(player.getName()).getScore(); - int proteins = scoreboard.getObjective("Protein").getScore(player.getName()).getScore(); - int carbs = scoreboard.getObjective("Carbs").getScore(player.getName()).getScore(); - int salts = scoreboard.getObjective("Salts").getScore(player.getName()).getScore(); - - boolean s_hunger = scoreboard.getObjective("BoardHunger").getScore(player.getName()).getScore() == 0; - boolean s_thirst = scoreboard.getObjective("BoardThirst").getScore(player.getName()).getScore() == 0; - boolean s_energy = scoreboard.getObjective("BoardEnergy").getScore(player.getName()).getScore() == 0; - boolean s_nutrients = scoreboard.getObjective("BoardNutrients").getScore(player.getName()).getScore() == 0; - - if (thirst > 0 || proteins > 0 || carbs > 0 || salts > 0) { - PlayerData data = new PlayerData(uuid, thirst, proteins, carbs, salts, 20.0); - data.setInfoDisplayed(s_hunger, s_thirst, s_energy, s_nutrients); - savePlayerData(data); - c++; - } - } - Utils.log("Converted players: &b" + c); - Utils.log("&aPlayer data conversion completed in " + (System.currentTimeMillis() - time) + " milliseconds!"); - } - playerDataConfig.createConvertedFile(c); - } - } - } diff --git a/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java b/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java index ffd64e2..2364a2d 100644 --- a/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java +++ b/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java @@ -1,9 +1,10 @@ package tk.shanebee.survival.managers; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.data.Board; -import tk.shanebee.survival.tasks.Healthboard; +import tk.shanebee.survival.data.HealthBoard; +import tk.shanebee.survival.tasks.HealthBoardTask; import java.util.HashMap; import java.util.Map; @@ -12,36 +13,73 @@ public class ScoreBoardManager { private final Survival plugin; - private final Map playerBoards = new HashMap<>(); + private final Map healthBoardTaskMap = new HashMap<>(); + private final Map boardMap = new HashMap<>(); public ScoreBoardManager(Survival plugin) { this.plugin = plugin; } - /** Sets up a scoreboard for a player + /** + * Sets up a scoreboard for a player *

- * This is generally used internally - *

- * @param player Player to setup a scoreboard for + * This is generally used internally + * + * @param player Player to set up a scoreboard for */ public void setupScoreboard(Player player) { - playerBoards.put(player.getUniqueId(), new Healthboard(plugin, player)); + this.healthBoardTaskMap.put(player.getUniqueId(), new HealthBoardTask(this.plugin, player)); } public void resetStatusScoreboard(boolean enabled) { - for (Player player : plugin.getServer().getOnlinePlayers()) { - if (enabled) + for (Player player : Bukkit.getOnlinePlayers()) { + if (enabled) { setupScoreboard(player); - else - Board.removeBoard(player); + } else { + this.removeBoard(player); + } } } public void unloadScoreboard(Player player) { - if (playerBoards.containsKey(player.getUniqueId())) { - playerBoards.get(player.getUniqueId()).cancel(); - playerBoards.remove(player.getUniqueId()); + UUID uuid = player.getUniqueId(); + if (this.healthBoardTaskMap.containsKey(uuid)) { + this.healthBoardTaskMap.get(uuid).cancel(); + this.healthBoardTaskMap.remove(uuid); } } + /** + * Get the Board for a specific player + *
+ * If no Board is available, a new one will be created + * + * @param player Player to grab scoreboard for + * @return Board of player + */ + public HealthBoard getBoard(Player player) { + if (this.boardMap.containsKey(player)) { + return this.boardMap.get(player); + } else { + HealthBoard healthBoard = new HealthBoard(player); + this.boardMap.put(player, healthBoard); + return healthBoard; + } + } + + /** + * Remove a Board for a player + *
+ * Useful when the player leaves the server + * + * @param player Player to remove Board for + */ + public void removeBoard(Player player) { + if (this.boardMap.containsKey(player)) { + HealthBoard healthBoard = this.boardMap.get(player); + healthBoard.toggle(false); + } + this.boardMap.remove(player); + } + } diff --git a/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java b/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java new file mode 100644 index 0000000..c53f725 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java @@ -0,0 +1,136 @@ +package tk.shanebee.survival.tasks; + +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.data.HealthBoard; +import tk.shanebee.survival.data.Info; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.managers.PlayerManager; + +import java.util.List; + +public class HealthBoardTask extends BukkitRunnable { + + private final Survival plugin; + private final Config config; + private final PlayerManager playerManager; + private final Player player; + private final PlayerData playerData; + private final HealthBoard healthBoard; + + // Board stuff + private boolean hungerEnabled; + private boolean thirstEnabled; + private boolean energyEnabled; + private boolean nutrientsEnabled; + + public HealthBoardTask(Survival plugin, Player player) { + this.plugin = plugin; + this.config = plugin.getSurvivalConfig(); + this.playerManager = plugin.getPlayerManager(); + this.player = player; + this.playerData = plugin.getPlayerManager().getPlayerData(this.player); + this.healthBoard = plugin.getScoreboardManager().getBoard(this.player); + this.hungerEnabled = playerData.isInfoDisplayed(Info.HUNGER); + this.thirstEnabled = playerData.isInfoDisplayed(Info.THIRST); + this.energyEnabled = playerData.isInfoDisplayed(Info.ENERGY); + this.nutrientsEnabled = playerData.isInfoDisplayed(Info.NUTRIENTS); + + this.healthBoard.setTitle(plugin.getLang().healthboard_title); + + this.runTaskTimerAsynchronously(plugin, -1, 10); + } + + @Override + public void run() { + if (!this.player.isOnline()) { + this.cancel(); + return; + } + + GameMode mode = this.player.getGameMode(); + if (mode == GameMode.CREATIVE || mode == GameMode.SPECTATOR) { + // If the player is in creative/spectator and board is on, turn it off + if (this.healthBoard.isOn()) { + this.healthBoard.toggle(false); + } + } else { + // Else if player is in survival/adventure and board is off, turn it on + if (!this.healthBoard.isOn()) { + this.healthBoard.toggle(true); + } + } + + // Refresh board options + this.hungerEnabled = playerData.isInfoDisplayed(Info.HUNGER); + this.thirstEnabled = playerData.isInfoDisplayed(Info.THIRST); + this.energyEnabled = playerData.isInfoDisplayed(Info.ENERGY); + this.nutrientsEnabled = playerData.isInfoDisplayed(Info.NUTRIENTS); + + // If all options on the board are disabled, turn board off + if (!hungerEnabled && !thirstEnabled && !energyEnabled && !nutrientsEnabled) { + if (this.healthBoard.isOn()) { + this.healthBoard.toggle(false); + } + return; + } + + if (this.hungerEnabled) { + List hunger = this.playerManager.getHungerVisual(this.player); + this.healthBoard.setLine(1, hunger.get(0)); + this.healthBoard.setLine(2, hunger.get(1)); + this.healthBoard.setLine(3, hunger.get(2)); + this.healthBoard.setLine(4, ""); + } else { + this.healthBoard.deleteLine(1); + this.healthBoard.deleteLine(2); + this.healthBoard.deleteLine(3); + this.healthBoard.deleteLine(4); + } + + if (config.mechanics_thirst_enabled && thirstEnabled) { + List thirst = this.playerManager.getThirstVisual(this.player); + this.healthBoard.setLine(5, thirst.get(0)); + this.healthBoard.setLine(6, thirst.get(1)); + this.healthBoard.setLine(7, thirst.get(2)); + this.healthBoard.setLine(8, ""); + } else { + this.healthBoard.deleteLine(5); + this.healthBoard.deleteLine(6); + this.healthBoard.deleteLine(7); + this.healthBoard.deleteLine(8); + } + + if (config.MECHANICS_ENERGY_ENABLED && energyEnabled) { + this.healthBoard.setLine(9, this.playerManager.getEnergyVisual(this.player).get(0)); + this.healthBoard.setLine(10, this.playerManager.getEnergyVisual(this.player).get(1)); + this.healthBoard.setLine(11, ""); + } else { + this.healthBoard.deleteLine(9); + this.healthBoard.deleteLine(10); + this.healthBoard.deleteLine(11); + } + + if (config.MECHANICS_FOOD_DIVERSITY_ENABLED && nutrientsEnabled) { + List nutrients = this.playerManager.getNutrientsVisual(this.player); + this.healthBoard.setLine(12, nutrients.get(0), nutrients.get(3)); + this.healthBoard.setLine(13, nutrients.get(1), nutrients.get(4)); + this.healthBoard.setLine(14, nutrients.get(2), nutrients.get(5)); + } else { + this.healthBoard.deleteLine(12); + this.healthBoard.deleteLine(13); + this.healthBoard.deleteLine(14); + } + this.healthBoard.update(); + } + + @Override + public synchronized void cancel() throws IllegalStateException { + super.cancel(); + this.plugin.getScoreboardManager().removeBoard(this.player); + } + +} diff --git a/src/main/java/tk/shanebee/survival/tasks/Healthboard.java b/src/main/java/tk/shanebee/survival/tasks/Healthboard.java deleted file mode 100644 index 90e8c31..0000000 --- a/src/main/java/tk/shanebee/survival/tasks/Healthboard.java +++ /dev/null @@ -1,122 +0,0 @@ -package tk.shanebee.survival.tasks; - -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.data.Board; -import tk.shanebee.survival.data.Info; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; - -public class Healthboard extends BukkitRunnable { - - private final Config config; - private final PlayerManager pm; - private final Player player; - private final PlayerData playerData; - private final Board board; - - // Board stuff - private boolean hunger; - private boolean thirst; - private boolean energy; - private boolean nutrients; - - public Healthboard(Survival plugin, Player player) { - this.config = plugin.getSurvivalConfig(); - this.pm = plugin.getPlayerManager(); - this.player = player; - this.playerData = plugin.getPlayerManager().getPlayerData(player); - this.board = Board.getBoard(player); - this.hunger = playerData.isInfoDisplayed(Info.HUNGER); - this.thirst = playerData.isInfoDisplayed(Info.THIRST); - this.energy = playerData.isInfoDisplayed(Info.ENERGY); - this.nutrients = playerData.isInfoDisplayed(Info.NUTRIENTS); - - this.board.setTitle(Utils.getColoredString(plugin.getLang().healthboard_title)); - - this.runTaskTimer(plugin, -1, 10); - } - - @Override - public void run() { - if (!player.isOnline()) { - this.cancel(); - return; - } - - GameMode mode = player.getGameMode(); - if (mode == GameMode.CREATIVE || mode == GameMode.SPECTATOR) { - // If the player is in creative/spectator and board is on, turn it off - if (board.isOn()) { - board.toggle(false); - } - } else { - // Else if player is in survival/adventure and board is off, turn it on - if (!board.isOn()) { - board.toggle(true); - } - } - - // Refresh board options - this.hunger = playerData.isInfoDisplayed(Info.HUNGER); - this.thirst = playerData.isInfoDisplayed(Info.THIRST); - this.energy = playerData.isInfoDisplayed(Info.ENERGY); - this.nutrients = playerData.isInfoDisplayed(Info.NUTRIENTS); - - // If all options on the board are disabled, turn board off - if (!hunger && !thirst && !energy && !nutrients) { - if (board.isOn()) { - board.toggle(false); - } - return; - } - - if (hunger) { - board.setLine(11, pm.ShowHunger(player).get(0)); - board.setLine(10, pm.ShowHunger(player).get(1)); - board.setLine(9, pm.ShowHunger(player).get(2)); - } else { - board.deleteLine(11); - board.deleteLine(10); - board.deleteLine(9); - } - - if (config.mechanics_thirst_enabled && thirst) { - board.setLine(8, pm.ShowThirst(player).get(0)); - board.setLine(7, pm.ShowThirst(player).get(1)); - board.setLine(6, pm.ShowThirst(player).get(2)); - } else { - board.deleteLine(8); - board.deleteLine(7); - board.deleteLine(6); - } - - if (config.MECHANICS_ENERGY_ENABLED && energy) { - board.setLine(5, pm.showEnergy(player).get(0)); - board.setLine(4, pm.showEnergy(player).get(1)); - } else { - board.deleteLine(5); - board.deleteLine(4); - } - - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED && nutrients) { - board.setLine(3, pm.ShowNutrients(player).get(0)); - board.setLine(2, pm.ShowNutrients(player).get(1)); - board.setLine(1, pm.ShowNutrients(player).get(2)); - } else { - board.deleteLine(3); - board.deleteLine(2); - board.deleteLine(1); - } - } - - @Override - public synchronized void cancel() throws IllegalStateException { - super.cancel(); - Board.removeBoard(player); - } -} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 004b468..0c6209f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -129,9 +129,9 @@ Mechanics: enabled: true # Max level for each nutritional value max-level: - carbs: 50000 - salts: 50000 - proteins: 50000 + carbs: 1000 + salts: 1000 + proteins: 1000 # The level the player will start with start-level: proteins: 240 diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index bee6ce0..4685d36 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -73,7 +73,7 @@ dehydrated-drink: "You are dehydrated, drink some water." healthboard-title: "Status" hunger: "Hunger" thirst: "Thirst" -energy: "&dEnergy" +energy: "Energy" carbohydrates: "Carbohydrates" protein: "Protein" vitamins: "Vitamins and Minerals" From bd4deac35d1d5f81d192f75aa44c5a0fdd45d340 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 14 Feb 2025 22:51:31 -0800 Subject: [PATCH 033/133] HealthBoard - fix an error --- src/main/java/tk/shanebee/survival/data/HealthBoard.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/data/HealthBoard.java b/src/main/java/tk/shanebee/survival/data/HealthBoard.java index 67d8220..44b270c 100644 --- a/src/main/java/tk/shanebee/survival/data/HealthBoard.java +++ b/src/main/java/tk/shanebee/survival/data/HealthBoard.java @@ -124,8 +124,10 @@ public void toggle(boolean on) { this.fastBoard = new FastBoard(this.player); this.on = true; } else { - this.fastBoard.delete(); - this.fastBoard = null; + if (this.fastBoard != null) { + this.fastBoard.delete(); + this.fastBoard = null; + } this.on = false; // Force resends the vanilla scoreboard this.player.setScoreboard(DUMMY); From b117cfa8af49df2fea6feaeb7dd53fcf671e7c6e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 14 Feb 2025 22:57:19 -0800 Subject: [PATCH 034/133] ResourcePackListener - some updates --- .../java/tk/shanebee/survival/Survival.java | 32 ++------- .../tk/shanebee/survival/config/Config.java | 12 ++-- .../tk/shanebee/survival/config/Lang.java | 8 +-- .../survival/listeners/EventManager.java | 29 +++++++- .../server/ResourcePackListener.java | 69 +++++++++++++++++++ .../listeners/server/SetResourcePack.java | 67 ------------------ .../survival/managers/PlayerManager.java | 26 +------ .../java/tk/shanebee/survival/util/Utils.java | 33 +++++++++ src/main/resources/config.yml | 17 +++-- src/main/resources/lang_EN.yml | 11 ++- 10 files changed, 153 insertions(+), 151 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java delete mode 100644 src/main/java/tk/shanebee/survival/listeners/server/SetResourcePack.java diff --git a/src/main/java/tk/shanebee/survival/Survival.java b/src/main/java/tk/shanebee/survival/Survival.java index fac50c3..574c7d7 100644 --- a/src/main/java/tk/shanebee/survival/Survival.java +++ b/src/main/java/tk/shanebee/survival/Survival.java @@ -35,7 +35,6 @@ public class Survival extends JavaPlugin implements Listener { // Lists & Maps private final List Rates = new ArrayList<>(); private final List chairBlocks = new ArrayList<>(); - private List usingPlayers = new ArrayList<>(); private Map playerDataMap = new HashMap<>(); // Configs @@ -43,9 +42,6 @@ public class Survival extends JavaPlugin implements Listener { private Lang lang; private PlayerDataConfig playerDataConfig; - // Scoreboards - private Scoreboard mainBoard; - // Managers private BlockManager blockManager; private EffectManager effectManager; @@ -95,17 +91,17 @@ public void onEnable() { } // LOAD RESOURCE PACK - String url = config.RESOURCE_PACK_URL; - boolean resourcePack = config.RESOURCE_PACK_ENABLED; - if (resourcePack) { - if (url.isEmpty()) { + if (config.settings_resource_pack_enabled) { + if (config.settings_resource_pack_url.isEmpty()) { Utils.log("&cResource Pack is not set! Plugin disabling"); Bukkit.getPluginManager().disablePlugin(this); return; } else { Utils.log("&7Resource pack &aenabled"); } - } else Utils.log("&eResource Pack disabled"); + } else { + Utils.log("&eResource Pack disabled"); + } Rates.add(config.DROP_RATE_FLINT); Rates.add(config.DROP_RATE_STICK); @@ -122,9 +118,6 @@ public void onEnable() { } } - // LOAD SCOREBOARDS - mainBoard = Bukkit.getScoreboardManager().getMainScoreboard(); - // LOAD MANAGERS blockManager = new BlockManager(this); playerManager = new PlayerManager(this, playerDataMap); @@ -180,7 +173,6 @@ public void onDisable() { Utils.log("&eShutting down"); getServer().getScheduler().cancelTasks(this); //getServer().resetRecipes(); <-- why is this even here? - usingPlayers = new ArrayList<>(); // Remove limited crafting when server shuts down (important if server removes this plugin) for (World world : getServer().getWorlds()) { @@ -365,13 +357,6 @@ public Lang getLang() { return lang; } - /** Get the main server scoreboard - * @return Main server scoreboard - */ - public Scoreboard getMainBoard() { - return mainBoard; - } - public boolean isSnowGenOption() { return snowGenOption; } @@ -387,13 +372,6 @@ public List getChairBlocks() { return chairBlocks; } - /** Get a list of players using the plugin's resource pack - * @return List of players using the plugin's resource pack - */ - public List getUsingPlayers() { - return usingPlayers; - } - public PlayerDataConfig getPlayerDataConfig() { return playerDataConfig; } diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 2049774..7f49505 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -19,9 +19,8 @@ public class Config { public String LANG; - public String RESOURCE_PACK_URL; - public boolean RESOURCE_PACK_ENABLED; - public boolean RESOURCE_PACK_NOTIFY; + public String settings_resource_pack_url; + public boolean settings_resource_pack_enabled; public int LOCAL_CHAT_DISTANCE; @@ -285,10 +284,9 @@ private void loadSettings() { this.LANG = settings.getString("Language"); - // MULTIWORLD - this.RESOURCE_PACK_URL = settings.getString("MultiWorld.ResourcePackURL"); - this.RESOURCE_PACK_ENABLED = settings.getBoolean("MultiWorld.EnableResourcePack"); - this.RESOURCE_PACK_NOTIFY = settings.getBoolean("MultiWorld.NotifyMessage"); + // SETTINGS + this.settings_resource_pack_enabled = settings.getBoolean("Settings.enable-resource-pack"); + this.settings_resource_pack_url = settings.getString("Settings.resource-pack-url"); this.LOCAL_CHAT_DISTANCE = settings.getInt("LocalChatDist"); diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index a3e9450..bc114c4 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -26,10 +26,8 @@ public class Lang { public String survival_guide_hover_msg; public String survival_guide_link; - public String resource_pack_accepted; - public String resource_pack_declined; public String resource_pack_apply; - public String resource_pack_required; + public String resource_pack_fail_download; public String task_must_use_shovel; public String task_must_use_axe; @@ -230,10 +228,8 @@ public void loadLangFile(CommandSender sender) { survival_guide_click_msg = lang.getString("survival-guide-click-msg"); survival_guide_hover_msg = lang.getString("survival-guide-hover-msg"); survival_guide_link = lang.getString("survival-guide-link"); - resource_pack_accepted = lang.getString("resource-pack-accepted"); - resource_pack_declined = lang.getString("resource-pack-declined"); resource_pack_apply = lang.getString("resource-pack-apply"); - resource_pack_required = lang.getString("resource-pack-required"); + resource_pack_fail_download = lang.getString("resource-pack-fail-download"); task_must_use_shovel = lang.getString("task-must-use-shovel"); task_must_use_axe = lang.getString("task-must-use-axe"); task_must_use_pick = lang.getString("task-must-use-pick"); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index db7b64c..c3fe9c9 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -19,14 +19,35 @@ import tk.shanebee.survival.listeners.entity.LivingSlime; import tk.shanebee.survival.listeners.entity.MerchantTrades; import tk.shanebee.survival.listeners.entity.PiglinBarter; -import tk.shanebee.survival.listeners.item.*; +import tk.shanebee.survival.listeners.item.BeetrootStrength; +import tk.shanebee.survival.listeners.item.BlazeSword; +import tk.shanebee.survival.listeners.item.Bow; +import tk.shanebee.survival.listeners.item.CauldronWaterBottle; +import tk.shanebee.survival.listeners.item.CompassWaypoint; +import tk.shanebee.survival.listeners.item.CookieHealthBoost; +import tk.shanebee.survival.listeners.item.FirestrikerClick; +import tk.shanebee.survival.listeners.item.FoodDiversityConsume; +import tk.shanebee.survival.listeners.item.GiantBlade; +import tk.shanebee.survival.listeners.item.GrapplingHook; +import tk.shanebee.survival.listeners.item.MedicKit; +import tk.shanebee.survival.listeners.item.ObsidianMaceWeakness; +import tk.shanebee.survival.listeners.item.PoisonousPotato; +import tk.shanebee.survival.listeners.item.RawMeatHunger; +import tk.shanebee.survival.listeners.item.RecurvedBow; +import tk.shanebee.survival.listeners.item.RepairCrafting; +import tk.shanebee.survival.listeners.item.ShivPoison; +import tk.shanebee.survival.listeners.item.ThirstListener; +import tk.shanebee.survival.listeners.item.TropicalFish; +import tk.shanebee.survival.listeners.item.Valkyrie; +import tk.shanebee.survival.listeners.item.WaterBottleCrafting; +import tk.shanebee.survival.listeners.item.WaterBowl; import tk.shanebee.survival.listeners.player.EnergyChange; import tk.shanebee.survival.listeners.player.PlayerDataListener; import tk.shanebee.survival.listeners.server.Guide; import tk.shanebee.survival.listeners.server.InventoryUpdate; import tk.shanebee.survival.listeners.server.LocalChat; import tk.shanebee.survival.listeners.server.RecipeDiscovery; -import tk.shanebee.survival.listeners.server.SetResourcePack; +import tk.shanebee.survival.listeners.server.ResourcePackListener; /** * Internal use only @@ -79,7 +100,9 @@ public void registerEvents() { pm.registerEvents(new WaterBottleCrafting(plugin), this.plugin); - pm.registerEvents(new SetResourcePack(plugin), this.plugin); + if (config.settings_resource_pack_enabled) { + pm.registerEvents(new ResourcePackListener(plugin), this.plugin); + } if (config.MECHANICS_RAW_MEAT_HUNGER) pm.registerEvents(new RawMeatHunger(), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java b/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java new file mode 100644 index 0000000..9f27f3c --- /dev/null +++ b/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java @@ -0,0 +1,69 @@ +package tk.shanebee.survival.listeners.server; + +import net.kyori.adventure.text.Component; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerResourcePackStatusEvent; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.util.Utils; + +import java.util.UUID; + +public class ResourcePackListener implements Listener { + + private final String resourcePackUrl; + private final UUID resourcePackID = UUID.fromString("cd60c108-b291-4d5a-a9e8-1404defeed1b"); + private final Component kickMessage; + private final Component resourcePackMessage; + + public ResourcePackListener(Survival plugin) { + Config config = plugin.getSurvivalConfig(); + Lang lang = plugin.getLang(); + this.resourcePackUrl = config.settings_resource_pack_url; + this.kickMessage = Utils.getMini(lang.resource_pack_fail_download); + this.resourcePackMessage = Utils.getMini( lang.resource_pack_apply); + } + + + @EventHandler + private void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + try { + player.setResourcePack(this.resourcePackID, this.resourcePackUrl, "", this.resourcePackMessage, true); + } catch (IllegalArgumentException ex) { + Utils.logMini("[ResourcePackListener] Invalid resource pack URL: %s", this.resourcePackUrl); + Utils.logMini("[ResourcePackListener] Error Message: %s", ex.getMessage()); + kick(player); + } + } + + @EventHandler + private void resourcePackEvent(PlayerResourcePackStatusEvent event) { + Player player = event.getPlayer(); + switch (event.getStatus()) { + case DECLINED: + Utils.logMini("Player '%s' denied the resource pack and was kicked!", player.getName()); + break; + case FAILED_DOWNLOAD, FAILED_RELOAD: + Utils.logMini("Player '%s' failed to download the resource pack!", player.getName()); + kick(player); + break; + case INVALID_URL: + Utils.logMini("Player '%s' failed to download the resource pack due to invalid url: '%s'", + player.getName(), this.resourcePackUrl); + kick(player); + break; + case DISCARDED: + + } + } + + private void kick(Player player) { + player.kick(this.kickMessage); + } + +} diff --git a/src/main/java/tk/shanebee/survival/listeners/server/SetResourcePack.java b/src/main/java/tk/shanebee/survival/listeners/server/SetResourcePack.java deleted file mode 100644 index e1433c3..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/server/SetResourcePack.java +++ /dev/null @@ -1,67 +0,0 @@ -package tk.shanebee.survival.listeners.server; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerResourcePackStatusEvent; -import org.bukkit.event.player.PlayerResourcePackStatusEvent.Status; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; - -public class SetResourcePack implements Listener { - - private Survival plugin; - private Config config; - private Lang lang; - private PlayerManager playerManager; - private String prefix; - - public SetResourcePack(Survival plugin) { - this.plugin = plugin; - this.config = plugin.getSurvivalConfig(); - this.lang = plugin.getLang(); - this.playerManager = plugin.getPlayerManager(); - this.prefix = lang.prefix; - } - - - - @EventHandler - private void onPlayerJoin(PlayerJoinEvent event) { - if (config.RESOURCE_PACK_ENABLED) - playerManager.applyResourcePack(event.getPlayer(), 20); - } - - /* Not sure why this was added, leaving here for now just in case its actually needed - @EventHandler - public void onPlayerChangedWorld(PlayerChangedWorldEvent event) { - if (resourcePack) - applyResourcePack(event.getPlayer()); - } - */ - - @EventHandler - private void onPlayerLeave(PlayerQuitEvent event) { - plugin.getUsingPlayers().remove(event.getPlayer()); - } - - @EventHandler - private void resourcePackEvent(PlayerResourcePackStatusEvent e) { - Player player = e.getPlayer(); - if (config.RESOURCE_PACK_ENABLED && config.RESOURCE_PACK_NOTIFY) - if (e.getStatus() == Status.DECLINED) { - Utils.sendColoredMsg(player, " "); - Utils.sendColoredMsg(player, prefix + "&c" + lang.resource_pack_declined); - Utils.sendColoredMsg(player, " &6" + lang.resource_pack_apply); - Utils.sendColoredMsg(player, " &6" + lang.resource_pack_required); - } else if (e.getStatus() == Status.ACCEPTED) { - Utils.sendColoredMsg(player, prefix + "&a" + lang.resource_pack_accepted); - } - } - -} \ No newline at end of file diff --git a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java index e7c0543..5d6be8d 100644 --- a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java +++ b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java @@ -1,6 +1,5 @@ package tk.shanebee.survival.managers; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; @@ -27,9 +26,8 @@ */ public class PlayerManager implements Listener { - private final String url; + private final Lang lang; - private final Survival plugin; private final PlayerDataConfig playerDataConfig; private final int thirstStartingAmount; private final int hungerStartingAmount; @@ -45,10 +43,8 @@ public class PlayerManager implements Listener { private final Map playerDataMap; public PlayerManager(Survival plugin, Map playerDataMap) { - this.plugin = plugin; this.playerDataMap = playerDataMap; this.lang = plugin.getLang(); - this.url = plugin.getSurvivalConfig().RESOURCE_PACK_URL; this.playerDataConfig = plugin.getPlayerDataConfig(); Config config = plugin.getSurvivalConfig(); this.thirstStartingAmount = config.mechanics_thirst_starting_amount; @@ -166,26 +162,6 @@ public void setWaypoint(Player player, Location location, boolean particle) { savePlayerData(playerData); } - /** - * Apply SurvivalPlus' resource pack to a player - * - * @param player The player to apply the resource pack to - * @param delay A delay in ticks - */ - public void applyResourcePack(Player player, int delay) { - if (this.url != null) { - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - try { - player.setResourcePack(url); - } catch (Exception e) { - Bukkit.getConsoleSender().sendMessage("ResourcePackURL is null or URL is too long! Plugin disabled."); - Bukkit.getPluginManager().disablePlugin(this.plugin); - return; - } - this.plugin.getUsingPlayers().add(player); - }, delay); - } - } public Location lookAt(Location loc, Location lookat) { //Clone the loc to prevent applied changes to the input loc diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 1abc492..0a9ccd3 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -1,6 +1,7 @@ package tk.shanebee.survival.util; import com.google.common.collect.ImmutableSet; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -589,6 +590,11 @@ public static void sendColoredMini(CommandSender player, String format, Object.. player.sendMessage(MINI_MESSAGE.deserialize(f)); } + public static Component getMini(String format, Object... args) { + String msg = args != null ? String.format(format, args) : format; + return MINI_MESSAGE.deserialize(msg); + } + /** * Send a colored console message *

This will NOT include plugin prefix

@@ -626,6 +632,33 @@ public static void log(String format, Object... objects) { log(String.format(format, objects)); } + /** + * Log a message to console + *

This will include plugin prefix

+ * + * @param msg Message to log to console + */ + public static void logMini(String msg) { + Lang lang = Survival.getInstance().getLang(); + String prefix = "[SurvivalPlus] "; + if (lang != null) { + prefix = lang.prefix; + } + sendColoredMini(Bukkit.getConsoleSender(), prefix + msg); + } + + /** + * Log a formatted message to console + *

Formatted in the same style as {@link String#format(String, Object...)} + *
This will include plugin prefix

+ * + * @param format Message format + * @param objects Objects in format + */ + public static void logMini(String format, Object... objects) { + logMini(String.format(format, objects)); + } + /** * Gets a colored string * diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 0c6209f..aad75e6 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,20 +1,19 @@ # Settings # Notes in this config are lost on updates if the config file changes -# If you would like to see the notes, delete this file and it will regenerate with notes -# (Make sure to backup your config file) +# If you would like to see the notes, delete this file, and it will regenerate with notes +# (Make sure to back up your config file) -# Preset language file includes in-game messages, item names, lore, etc. -# Language options are EN (English) or CN (Chinese) +# Preset language file includes in-game messages. +# Language options are EN (English) Language: EN -MultiWorld: +Settings: # Enable the SurvivalPlus resource pack for players - EnableResourcePack: true + # You can disable this if you wish to supply it yourself + enable-resource-pack: true # The link to the pack, you can put a custom link here if need be - ResourcePackURL: https://www.dropbox.com/s/fq6or9vvcup7wvd/SP-1.14v6.zip?dl=1 - # Notify players when they log in if they deny the resource pack - NotifyMessage: true + resource-pack-url: https://www.dropbox.com/s/fq6or9vvcup7wvd/SP-1.14v6.zip?dl=1 # The distance from the player at which other players will see their chat messages # -1 = disabled diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index 4685d36..916a5b1 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -14,8 +14,8 @@ # System Messages #################### -prefix: "&7[&3Survival&bPlus&7] " -no-perm: "&cYou do not have permission to perform this command" +prefix: "[SurvivalPlus] " +no-perm: "You do not have permission to perform this command" # When a player joins, they will see this message which links them to a guide to help get them started # IF you want, you can create your own guide and change the link @@ -24,11 +24,8 @@ survival-guide-click-msg: "&bClick Here" survival-guide-hover-msg: "Click for Guide" survival-guide-link: "https://bitbucket.org/ShaneBeeStudios/SurvivalPlus/wiki/Getting-Started" -resource-pack-accepted: "Successfully loaded resource pack." -resource-pack-declined: "**Resource pack declined**" -resource-pack-apply: "Please apply the requested Resource Pack." -resource-pack-required: "The resource pack is required for visual effects." - +resource-pack-apply: "Please apply the requested Resource Pack." +resource-pack-fail-download: "Failed to download resource pack, talk to server owner!" task-must-use-shovel: "You must use a shovel to dig this." task-must-use-axe: "You must use an axe to chop this." From b906504f960716b8eef87388ffef70432a3aab33 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 01:09:43 -0800 Subject: [PATCH 035/133] Utils - update namespaced key --- src/main/java/tk/shanebee/survival/item/Nutrition.java | 3 ++- src/main/java/tk/shanebee/survival/util/Utils.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/item/Nutrition.java b/src/main/java/tk/shanebee/survival/item/Nutrition.java index b8d5d03..d8ba5dd 100644 --- a/src/main/java/tk/shanebee/survival/item/Nutrition.java +++ b/src/main/java/tk/shanebee/survival/item/Nutrition.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import tk.shanebee.survival.Survival; +import tk.shanebee.survival.util.Utils; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -78,7 +79,7 @@ static void setup() { private static Nutrition register(int carbs, int proteins, int vitamins, Material material) { String key = material.toString().toLowerCase(Locale.ROOT); int[] nutritions = ItemConfig.INSTANCE.getNutritionValues(key, carbs, proteins, vitamins); - NamespacedKey namespacedKey = new NamespacedKey(Survival.getInstance(), "nutrition_" + key); + NamespacedKey namespacedKey = Utils.getNamespacedKey( "nutrition_" + key); ItemStack itemStack = new ItemStack(material); return register(namespacedKey, false, itemStack, nutritions[0], nutritions[1], nutritions[2]); } diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 0a9ccd3..42f9ebc 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -830,7 +830,7 @@ public static boolean isCitizensNPC(Metadatable entity) { * @return New NamespacedKey linked to this plugin */ public static NamespacedKey getNamespacedKey(String key) { - return new NamespacedKey(Survival.getInstance(), key); + return new NamespacedKey("survival_plus", key); } /** From 711be17bb02ae25c9d45ba23b758996ae8509ece Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 01:38:31 -0800 Subject: [PATCH 036/133] Items - add better grabber --- src/main/java/tk/shanebee/survival/item/Items.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/tk/shanebee/survival/item/Items.java index 15f12d9..17c0a5c 100644 --- a/src/main/java/tk/shanebee/survival/item/Items.java +++ b/src/main/java/tk/shanebee/survival/item/Items.java @@ -147,7 +147,11 @@ public static Set allItemKeys() { @SuppressWarnings("PatternValidation") @Nullable public static Item getByKey(@NotNull String key) { - return ALL_ITEMS.get(Key.key(key.toLowerCase(Locale.ROOT))); + key = key.toLowerCase(Locale.ROOT); + if (!key.contains("survival_plus:")) { + key = "survival_plus:" + key; + } + return ALL_ITEMS.get(Key.key(key)); } /** From f49ec3fece204101147601ff23f8ab46f5cba931 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 10:56:40 -0800 Subject: [PATCH 037/133] Command Rework --- .../java/tk/shanebee/survival/Survival.java | 77 +++++--- .../survival/commands/BaseCommand.java | 25 +++ .../shanebee/survival/commands/GiveItem.java | 96 ---------- .../survival/commands/GiveItemCommand.java | 105 +++++++++++ .../tk/shanebee/survival/commands/Heal.java | 87 --------- .../survival/commands/HealCommand.java | 70 ++++++++ .../shanebee/survival/commands/Nutrition.java | 47 ----- .../survival/commands/NutritionCommand.java | 43 +++++ .../survival/commands/Permissions.java | 18 ++ .../survival/commands/PlayerDataCmd.java | 104 ----------- .../survival/commands/PlayerDataCommand.java | 56 ++++++ .../shanebee/survival/commands/Recipes.java | 23 --- .../tk/shanebee/survival/commands/Reload.java | 26 --- .../survival/commands/ReloadCommand.java | 24 +++ .../shanebee/survival/commands/SnowGen.java | 83 --------- .../survival/commands/StatCommand.java | 139 ++++++++++++++ .../tk/shanebee/survival/commands/Status.java | 169 ------------------ .../survival/commands/SurvivalCommand.java | 37 ++++ .../survival/commands/ToggleChat.java | 100 ----------- .../survival/commands/ToggleChatCommand.java | 52 ++++++ .../tk/shanebee/survival/config/Config.java | 43 +++-- .../tk/shanebee/survival/config/Lang.java | 4 +- .../survival/listeners/EventManager.java | 6 +- .../listeners/item/FoodDiversityConsume.java | 6 +- .../listeners/item/ThirstListener.java | 4 +- .../listeners/player/EnergyChange.java | 3 +- .../listeners/player/PlayerDataListener.java | 2 +- .../survival/listeners/server/LocalChat.java | 4 +- .../survival/tasks/HealthBoardTask.java | 4 +- .../shanebee/survival/tasks/TaskManager.java | 8 +- .../java/tk/shanebee/survival/util/Utils.java | 6 + src/main/resources/config.yml | 6 +- src/main/resources/lang_EN.yml | 104 +++++------ src/main/resources/plugin.yml | 39 ---- 34 files changed, 719 insertions(+), 901 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/commands/BaseCommand.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/GiveItem.java create mode 100644 src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/Heal.java create mode 100644 src/main/java/tk/shanebee/survival/commands/HealCommand.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/Nutrition.java create mode 100644 src/main/java/tk/shanebee/survival/commands/NutritionCommand.java create mode 100644 src/main/java/tk/shanebee/survival/commands/Permissions.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java create mode 100644 src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/Recipes.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/Reload.java create mode 100644 src/main/java/tk/shanebee/survival/commands/ReloadCommand.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/SnowGen.java create mode 100644 src/main/java/tk/shanebee/survival/commands/StatCommand.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/Status.java create mode 100644 src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java delete mode 100644 src/main/java/tk/shanebee/survival/commands/ToggleChat.java create mode 100644 src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java diff --git a/src/main/java/tk/shanebee/survival/Survival.java b/src/main/java/tk/shanebee/survival/Survival.java index 574c7d7..71dbafd 100644 --- a/src/main/java/tk/shanebee/survival/Survival.java +++ b/src/main/java/tk/shanebee/survival/Survival.java @@ -1,6 +1,12 @@ package tk.shanebee.survival; -import org.bukkit.*; +import dev.jorel.commandapi.CommandAPI; +import dev.jorel.commandapi.CommandAPIBukkitConfig; +import dev.jorel.commandapi.exceptions.UnsupportedVersionException; +import org.bukkit.Bukkit; +import org.bukkit.GameRule; +import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.configuration.serialization.ConfigurationSerialization; @@ -9,19 +15,28 @@ import org.bukkit.event.Listener; import org.bukkit.event.server.ServerLoadEvent; import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.scoreboard.Scoreboard; -import tk.shanebee.survival.commands.*; +import tk.shanebee.survival.commands.SurvivalCommand; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.config.PlayerDataConfig; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.listeners.EventManager; -import tk.shanebee.survival.managers.*; +import tk.shanebee.survival.managers.BlockManager; +import tk.shanebee.survival.managers.EffectManager; +import tk.shanebee.survival.managers.MerchantManager; +import tk.shanebee.survival.managers.Placeholders; +import tk.shanebee.survival.managers.PlayerManager; +import tk.shanebee.survival.managers.RecipeManager; +import tk.shanebee.survival.managers.ScoreBoardManager; import tk.shanebee.survival.metrics.Metrics; import tk.shanebee.survival.tasks.TaskManager; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; @SuppressWarnings("ConstantConditions") public class Survival extends JavaPlugin implements Listener { @@ -56,6 +71,19 @@ public class Survival extends JavaPlugin implements Listener { private boolean loaded = true; private boolean snowGenOption = true; + @Override + public void onLoad() { + try { + CommandAPI.onLoad(new CommandAPIBukkitConfig(this) + .setNamespace("survivalplus") + .verboseOutput(false) + .silentLogs(true) + .skipReloadDatapacks(true)); + } catch (UnsupportedVersionException ignore) { + Utils.log("CommandAPI does not support this version of Minecraft, will update soon."); + } + } + public void onEnable() { instance = this; long time = System.currentTimeMillis(); @@ -129,7 +157,7 @@ public void onEnable() { // LOAD PLAYER DATA - (during a reload if players are still online) playerDataLoader(true); - scoreBoardManager.resetStatusScoreboard(config.MECHANICS_STATUS_SCOREBOARD); + scoreBoardManager.resetStatusScoreboard(config.mechanics_status_scoreboard); // LOAD PLACEHOLDERS if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { @@ -234,8 +262,14 @@ private void playerDataLoader(boolean load) { * @param sender The person/console loading config */ public void loadSettings(CommandSender sender) { - this.config = new Config(this); - this.lang = new Lang(this, config.LANG); + if (this.config == null) { + this.config = new Config(this); + } else { + this.config.loadDefaultSettings(); + } + if (this.lang == null) { + this.lang = new Lang(this, config.LANG); + } this.lang.loadLangFile(sender); this.prefix = lang.prefix; for (String type : config.MECHANICS_CHAIRS_BLOCKS) { @@ -265,25 +299,10 @@ private void onServerReload(ServerLoadEvent e) { } private void registerCommands() { - String noPerm = Utils.getColoredString(prefix + lang.no_perm); - getCommand("recipes").setExecutor(new Recipes()); - getCommand("togglechat").setExecutor(new ToggleChat(this)); - getCommand("togglechat").setPermissionMessage(noPerm); - getCommand("status").setExecutor(new Status(this)); - getCommand("reload-survival").setExecutor(new Reload(this)); - getCommand("reload-survival").setPermissionMessage(noPerm); - if (config.MECHANICS_SNOW_GEN_REVAMP) { - getCommand("snowgen").setExecutor(new SnowGen(this)); - getCommand("snowgen").setPermissionMessage(noPerm); - } - getCommand("giveitem").setExecutor(new GiveItem(this)); - getCommand("giveitem").setPermissionMessage(noPerm); - getCommand("nutrition").setExecutor(new Nutrition(this)); - getCommand("nutrition").setPermissionMessage(noPerm); - getCommand("heal").setExecutor(new Heal(this)); - getCommand("heal").setPermissionMessage(noPerm); - getCommand("playerdata").setExecutor(new PlayerDataCmd(this)); - getCommand("playerdata").setPermissionMessage(noPerm); + if (CommandAPI.isLoaded()) { + CommandAPI.onEnable(); + new SurvivalCommand(this, "survival"); + } } /** Get instance of this plugin diff --git a/src/main/java/tk/shanebee/survival/commands/BaseCommand.java b/src/main/java/tk/shanebee/survival/commands/BaseCommand.java new file mode 100644 index 0000000..7f5d50d --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/BaseCommand.java @@ -0,0 +1,25 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.arguments.Argument; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.managers.PlayerManager; + +public abstract class BaseCommand { + + protected final Survival plugin; + protected final Config config; + protected final Lang lang; + protected final PlayerManager playerManager; + + public BaseCommand(Survival plugin) { + this.plugin = plugin; + this.config = plugin.getSurvivalConfig(); + this.lang = plugin.getLang(); + this.playerManager = plugin.getPlayerManager(); + } + + abstract Argument register(); + +} diff --git a/src/main/java/tk/shanebee/survival/commands/GiveItem.java b/src/main/java/tk/shanebee/survival/commands/GiveItem.java deleted file mode 100644 index 28c19ed..0000000 --- a/src/main/java/tk/shanebee/survival/commands/GiveItem.java +++ /dev/null @@ -1,96 +0,0 @@ -package tk.shanebee.survival.commands; - -import com.google.common.collect.ImmutableList; -import net.kyori.adventure.key.Key; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.StringUtil; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -@SuppressWarnings("NullableProblems") -public class GiveItem implements CommandExecutor, TabCompleter { - - private final Lang lang; - - public GiveItem(Survival plugin) { - this.lang = plugin.getLang(); - } - - @Override - public boolean onCommand(CommandSender sender, Command command, String s, String[] args) { - String prefix = Utils.getColoredString(lang.prefix); - if (args.length < 2) return true; - Player player = Bukkit.getPlayer(args[0]); - if (player != null) { - Item item; - int amount = 1; - try { - if (args.length == 3) { - amount = Integer.parseInt(args[2]); - } - } catch (IllegalArgumentException ignore) { - } - try { - item = Items.getByKey(args[1].toLowerCase(Locale.ROOT)); - ItemStack itemStack = item.getItemStack(); - itemStack.setAmount(amount); - - Location loc = player.getLocation(); - loc.setY(loc.getY() + 1); - - if (!player.getInventory().addItem(itemStack).isEmpty()) { - player.getWorld().dropItem(loc, itemStack); - } - if (item != null) { - String itemName = itemStack.getItemMeta().getDisplayName(); - if (sender instanceof Player) { - Utils.sendColoredMsg(sender, prefix + "&6You gave &b" + itemName + " &6to &b" + player.getName()); - } else { - Utils.sendColoredMsg(sender, prefix + "&6CONSOLE gave &b" + itemName + " &6to &b" + player.getName()); - } - } - } catch (IllegalArgumentException ignore) { - Utils.sendColoredMsg(sender, prefix + "&b" + args[1] + "&c is not an item"); - } - } else { - Utils.sendColoredMsg(sender, prefix + "&b" + args[0] + " &cis not online"); - } - return true; - } - - @Override - public List onTabComplete(CommandSender sender, Command command, String s, String[] args) { - if (args.length == 0 || args.length >= 4) { - return ImmutableList.of(); - } - if (args.length <= 1) return null; - if (args.length == 2) { - ArrayList matches = new ArrayList<>(); - for (Key key : Items.allItemKeys()) { - String name = key.toString(); - if (StringUtil.startsWithIgnoreCase(name, args[1])) { - matches.add(name); - } - } - return matches; - } else { - return Collections.singletonList(""); - } - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java b/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java new file mode 100644 index 0000000..0c450bf --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java @@ -0,0 +1,105 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.ArgumentSuggestions; +import dev.jorel.commandapi.arguments.EntitySelectorArgument; +import dev.jorel.commandapi.arguments.IntegerArgument; +import dev.jorel.commandapi.arguments.LiteralArgument; +import dev.jorel.commandapi.arguments.StringArgument; +import dev.jorel.commandapi.executors.CommandArguments; +import io.papermc.paper.datacomponent.DataComponentTypes; +import net.kyori.adventure.text.Component; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.util.Utils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.StringJoiner; + +public class GiveItemCommand extends BaseCommand { + + private final List names = new ArrayList<>(); + + public GiveItemCommand(Survival plugin) { + super(plugin); + Items.allItemKeys().forEach(key -> this.names.add(key.value())); + } + + @SuppressWarnings("unchecked") + @Override + Argument register() { + return LiteralArgument.literal("giveitem") + .withPermission(Permissions.COMMAND_GIVEITEM) + .then(new EntitySelectorArgument.ManyPlayers("players") + .then(new StringArgument("item") + .includeSuggestions(ArgumentSuggestions.strings(this.names)) + .then(new IntegerArgument("amount", 1, 99) + .setOptional(true) + .executes(info -> { + CommandSender sender = info.sender(); + CommandArguments args = info.args(); + Collection players = (Collection) args.get("players"); + String itemKey = args.getByClass("item", String.class); + int amount = args.getByClassOrDefault("amount", Integer.class, 1); + + assert itemKey != null; + assert players != null; + + Item item = Items.getByKey(itemKey); + + if (item != null) { + ItemStack itemStack = item.getItemStack(amount); + + StringJoiner joiner = new StringJoiner(", "); + players.forEach(player -> { + giveItem(player, itemStack); + joiner.add(player.getName()); + }); + String itemName = getItemName(itemStack); + if (itemName == null) itemName = item.getKey().toString(); + + sendMessage(sender, itemStack, itemName, amount, joiner.toString()); + } else { + Utils.sendColoredMini(sender, this.lang.prefix + "Invalid item %s", itemKey); + } + })))); + } + + private void giveItem(Player player, ItemStack item) { + HashMap returnMap = player.getInventory().addItem(item); + if (!returnMap.isEmpty()) { + World world = player.getWorld(); + Location location = player.getLocation(); + returnMap.values().forEach(itemStack -> world.dropItemNaturally(location, itemStack)); + } + } + + @SuppressWarnings("UnstableApiUsage") + private @Nullable String getItemName(ItemStack itemStack) { + if (itemStack.hasData(DataComponentTypes.CUSTOM_NAME)) { + return Utils.reverseComponent(itemStack.getData(DataComponentTypes.CUSTOM_NAME)); + } else if (itemStack.hasData(DataComponentTypes.ITEM_NAME)) { + return Utils.reverseComponent(itemStack.getData(DataComponentTypes.ITEM_NAME)); + } + return null; + } + + private void sendMessage(CommandSender sender, ItemStack itemStack, String itemName, int amount, String players) { + String who = sender instanceof Player ? "You" : "CONSOLE"; + Component message = Utils.getMini(this.lang.prefix + "%s gave %s of ", who, amount) + .append(Utils.getMini("[%s]", itemName).hoverEvent(itemStack.asHoverEvent())) + .append(Utils.getMini(" to %s", players)); + sender.sendMessage(message); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/Heal.java b/src/main/java/tk/shanebee/survival/commands/Heal.java deleted file mode 100644 index 63c0afd..0000000 --- a/src/main/java/tk/shanebee/survival/commands/Heal.java +++ /dev/null @@ -1,87 +0,0 @@ -package tk.shanebee.survival.commands; - -import org.bukkit.Bukkit; -import org.bukkit.attribute.Attribute; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.util.Utils; - -public class Heal implements CommandExecutor { - - private final Survival plugin; - private final Config config; - private final Lang lang; - - public Heal(Survival plugin) { - this.plugin = plugin; - this.config = plugin.getSurvivalConfig(); - this.lang = plugin.getLang(); - } - - @SuppressWarnings("NullableProblems") - @Override - public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) { - if (args.length > 0) { - if (!sender.hasPermission("survivalplus.heal.others")) { - sender.sendMessage(plugin.getLang().no_perm); - return true; - } - Player healed = Bukkit.getPlayer(args[0]); - if (healed == null) { - Utils.sendColoredMsg(sender, lang.cmd_player_not_online.replace("", args[0])); - return true; - } - heal(healed); - Utils.sendColoredMsg(sender, lang.cmd_heal_other.replace("", args[0])); - Utils.sendColoredMsg(healed, lang.cmd_heal_by.replace("", sender.getName())); - } else { - if (sender instanceof Player) { - heal(((Player) sender)); - Utils.sendColoredMsg(sender, lang.cmd_heal_self); - } else { - Utils.log("&cConsole can not heal itself!"); - return true; - } - } - return true; - } - - @SuppressWarnings("ConstantConditions") - private void heal(Player player) { - player.setHealth(player.getAttribute(Attribute.MAX_HEALTH).getValue()); - player.setFoodLevel(20); - player.setSaturation(5); - PlayerData playerData = plugin.getPlayerManager().getPlayerData(player); - if (config.mechanics_thirst_enabled) { - playerData.setThirst(40); - } - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { - switch (player.getWorld().getDifficulty()) { - case PEACEFUL: - case EASY: - playerData.setNutrients( 960, 240, 360); - break; - case NORMAL: - playerData.setNutrients( 480, 120, 180); - break; - case HARD: - playerData.setNutrients( 96, 24, 36); - break; - } - } - if (config.MECHANICS_ENERGY_ENABLED) { - playerData.setEnergy(20.0); - } - for (PotionEffect effect : player.getActivePotionEffects()) { - player.removePotionEffect(effect.getType()); - } - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/HealCommand.java b/src/main/java/tk/shanebee/survival/commands/HealCommand.java new file mode 100644 index 0000000..79f891d --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/HealCommand.java @@ -0,0 +1,70 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.EntitySelectorArgument; +import dev.jorel.commandapi.arguments.LiteralArgument; +import org.bukkit.attribute.Attribute; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.util.Utils; + +import java.util.Collection; +import java.util.StringJoiner; + +public class HealCommand extends BaseCommand { + + public HealCommand(Survival plugin) { + super(plugin); + } + + @SuppressWarnings("unchecked") + @Override + Argument register() { + return LiteralArgument.literal("heal") + .withPermission(Permissions.COMMAND_HEAL) + .executesPlayer(info -> { + heal(info.sender()); + Utils.sendColoredMini(info.sender(), this.lang.cmd_heal_self); + }) + .then(new EntitySelectorArgument.ManyPlayers("players") + .withPermission(Permissions.COMMAND_HEAL_OTHERS) + .executes(info -> { + CommandSender sender = info.sender(); + Collection players = (Collection) info.args().get("players"); + assert players != null; + + StringJoiner joiner = new StringJoiner(", "); + players.forEach(player -> { + joiner.add(player.getName()); + heal(player); + Utils.sendColoredMini(player, lang.cmd_heal_by, sender.getName()); + }); + Utils.sendColoredMini(sender, this.lang.cmd_heal_other, joiner.toString()); + })); + } + + @SuppressWarnings("DataFlowIssue") + private void heal(Player player) { + PlayerData playerData = this.plugin.getPlayerManager().getPlayerData(player); + + player.setHealth(player.getAttribute(Attribute.MAX_HEALTH).getValue()); + playerData.setHunger(this.config.mechanics_hunger_respawn_amount); + + if (this.config.mechanics_thirst_enabled) { + playerData.setThirst(this.config.mechanics_thirst_respawn_amount); + } + if (this.config.mechanics_food_diversity_enabled) { + int carbs = this.config.mechanics_food_respawn_carbs; + int proteins = this.config.mechanics_food_respawn_proteins; + int salts = this.config.mechanics_food_respawn_salts; + playerData.setNutrients(carbs, proteins, salts); + } + if (this.config.mechanics_energy_enabled) { + playerData.setEnergy(this.config.mechanics_energy_respawn); + } + player.clearActivePotionEffects(); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/Nutrition.java b/src/main/java/tk/shanebee/survival/commands/Nutrition.java deleted file mode 100644 index 82f2cff..0000000 --- a/src/main/java/tk/shanebee/survival/commands/Nutrition.java +++ /dev/null @@ -1,47 +0,0 @@ -package tk.shanebee.survival.commands; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.gui.NutritionGUI; -import tk.shanebee.survival.util.Utils; - -public class Nutrition implements CommandExecutor { - - private final Survival plugin; - - public Nutrition(Survival plugin) { - this.plugin = plugin; - } - - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, String[] args) { - if (sender instanceof Player) { - Player player = ((Player) sender); - NutritionGUI gui = new NutritionGUI(this.plugin); - gui.openInventory(player, 0); - } else { - if (args.length == 1 && args[0].equalsIgnoreCase("debug")) { - itemTest(); - return true; - } - Utils.log("&cThis is a player only command!"); - } - return true; - } - - // Used for debugging edible items - private void itemTest() { - tk.shanebee.survival.item.Nutrition.getAllNutritions().forEach(nutrition -> { - String key = nutrition.getKey().toString().replace(":", "&r:&a"); - String item = nutrition.getItemStack().toString().replace("{", "&r{&b").replace("}", "&r}&b"); - Utils.log("Nutrition%s:", nutrition.isCustom() ? "&r(&cCUSTOM&r)&7" : ""); - Utils.log(" - Key: &a%s", key); - Utils.log(" - Item: &e%s", item); - }); - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java new file mode 100644 index 0000000..6547780 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java @@ -0,0 +1,43 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.LiteralArgument; +import org.bukkit.entity.Player; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.gui.NutritionGUI; +import tk.shanebee.survival.item.Nutrition; +import tk.shanebee.survival.util.Utils; + +public class NutritionCommand extends BaseCommand{ + + public NutritionCommand(Survival plugin) { + super(plugin); + } + + @Override + Argument register() { + return LiteralArgument.literal("nutrition") + .withPermission(Permissions.COMMAND_NUTRITION) + .executesPlayer(info -> { + Player player = info.sender(); + NutritionGUI gui = new NutritionGUI(this.plugin); + gui.openInventory(player, 0); + }).then(LiteralArgument.literal("debug") + .withPermission(Permissions.COMMAND_NUTRITION_DEBUG) + .executes(info -> { + itemTest(); + })); + } + + // Used for debugging edible items + private void itemTest() { + Nutrition.getAllNutritions().forEach(nutrition -> { + String key = nutrition.getKey().toString().replace(":", ":"); + String item = nutrition.getItemStack().toString().replace("{", "{").replace("}", "}"); + Utils.logMini("Nutrition%s:", nutrition.isCustom() ? "(&cCUSTOM)&7" : ""); + Utils.logMini(" - Key: %s", key); + Utils.logMini(" - Item: &e%s", item); + }); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/Permissions.java b/src/main/java/tk/shanebee/survival/commands/Permissions.java new file mode 100644 index 0000000..2853db9 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/Permissions.java @@ -0,0 +1,18 @@ +package tk.shanebee.survival.commands; + +public class Permissions { + + static final String COMMAND_CHAT = getCommand("chat"); + static final String COMMAND_GIVEITEM = getCommand("giveitem"); + static final String COMMAND_HEAL = getCommand("heal"); + static final String COMMAND_HEAL_OTHERS = getCommand("heal.others"); + static final String COMMAND_NUTRITION = getCommand("nutrition"); + static final String COMMAND_NUTRITION_DEBUG = getCommand("nutrition.debug"); + static final String COMMAND_RELOAD = getCommand("reload"); + static final String COMMAND_PLAYERDATA = getCommand("playerdata"); + + private static String getCommand(String permission) { + return "survivalplus.command." + permission; + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java b/src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java deleted file mode 100644 index 999a2e7..0000000 --- a/src/main/java/tk/shanebee/survival/commands/PlayerDataCmd.java +++ /dev/null @@ -1,104 +0,0 @@ -package tk.shanebee.survival.commands; - -import com.google.common.collect.ImmutableList; -import org.apache.commons.lang3.math.NumberUtils; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabExecutor; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.data.PlayerData.DataType; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class PlayerDataCmd implements TabExecutor { - - private final PlayerManager playerManager; - - public PlayerDataCmd(Survival plugin) { - this.playerManager = plugin.getPlayerManager(); - } - - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - // command player (add/set/remove) stat amount - if (args.length != 4) { - return false; - } - Player player = Bukkit.getPlayer(args[0]); - if (player == null) { - Utils.sendColoredMsg(sender, "&cPlayer &b" + args[0] + "&c is not online!"); - return true; - } - PlayerData playerData = playerManager.getPlayerData(player); - if (playerData == null) { - Utils.sendColoredMsg(sender, "&cInvalid player data for &b" + args[0]); - return true; - } - - String changer = args[1]; - if (!changer.equalsIgnoreCase("set") && !changer.equalsIgnoreCase("add") && !changer.equalsIgnoreCase("remove")) { - return false; - } - - if (!NumberUtils.isNumber(args[3])) { - return false; - } - double value = Double.parseDouble(args[3]); - DataType dataType = DataType.getByName(args[2]); - if (dataType == null) { - return false; - } - - switch (args[1]) { - case "add": - value = value + playerData.getData(dataType); - break; - case "remove": - value = playerData.getData(dataType) - value; - break; - } - playerData.setData(dataType, value); - - return true; - } - - private final String[] DATA_TYPES = PlayerData.DataType.getNames(); - private final String[] CHANGE = new String[]{"add", "set", "remove"}; - - @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { - if (args.length == 1) { - return null; // return player names - } else if (args.length == 2) { - List matches = new ArrayList<>(); - for (String name : CHANGE) { - if (StringUtil.startsWithIgnoreCase(name, args[1])) { - matches.add(name); - } - } - return matches; - } else if (args.length == 3) { - List matches = new ArrayList<>(); - for (String name : DATA_TYPES) { - if (StringUtil.startsWithIgnoreCase(name, args[2])) { - matches.add(name); - } - } - return matches; - } else if (args.length == 4) { - return Collections.singletonList(""); - } - return ImmutableList.of(); // Return nothing - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java b/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java new file mode 100644 index 0000000..0b0daab --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java @@ -0,0 +1,56 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.DoubleArgument; +import dev.jorel.commandapi.arguments.EntitySelectorArgument; +import dev.jorel.commandapi.arguments.LiteralArgument; +import dev.jorel.commandapi.arguments.MultiLiteralArgument; +import org.bukkit.entity.Player; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.util.Utils; + +import java.util.Collection; + +public class PlayerDataCommand extends BaseCommand { + + public PlayerDataCommand(Survival plugin) { + super(plugin); + } + + @SuppressWarnings("unchecked") + @Override + Argument register() { + return LiteralArgument.literal("playerdata") + .withPermission(Permissions.COMMAND_PLAYERDATA) + .then(new EntitySelectorArgument.ManyPlayers("players") + .then(new MultiLiteralArgument("type", PlayerData.DataType.getNames()) + .then(new MultiLiteralArgument("change", "add", "remove", "set") + .then(new DoubleArgument("amount") + .executes(info -> { + Collection players = (Collection) info.args().get("players"); + String type = info.args().getByClass("type", String.class); + String change = info.args().getByClass("change", String.class); + Double value = info.args().getByClass("amount", Double.class); + PlayerData.DataType dataType = PlayerData.DataType.getByName(type); + + if (dataType == null || players == null || change == null || value == null) return; + + players.forEach(player -> { + double changeValue = value; + PlayerData playerData = this.playerManager.getPlayerData(player); + if (playerData == null) { + Utils.sendColoredMini(info.sender(), "Invalid player data for " + player.getName()); + return; + } + changeValue = switch (change) { + case "add" -> value + playerData.getData(dataType); + case "remove" -> playerData.getData(dataType) - value; + default -> changeValue; + }; + playerData.setData(dataType, changeValue); + }); + }))))); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/Recipes.java b/src/main/java/tk/shanebee/survival/commands/Recipes.java deleted file mode 100644 index b2db348..0000000 --- a/src/main/java/tk/shanebee/survival/commands/Recipes.java +++ /dev/null @@ -1,23 +0,0 @@ -package tk.shanebee.survival.commands; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import tk.shanebee.survival.util.Utils; - -public class Recipes implements CommandExecutor { - - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - String prefix = "&7[&3SurvivalPlus&7] "; - if (!(sender instanceof Player)) { - Utils.sendColoredConsoleMsg(prefix + "&cPlayer only command"); - return true; - } - Player player = (Player) sender; - Utils.sendColoredMsg(player, prefix + "&6Recipes"); - Utils.sendColoredMsg(player, " &7Recipes can be found in your crafting guide in your inventory/crafting table"); - return true; - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/Reload.java b/src/main/java/tk/shanebee/survival/commands/Reload.java deleted file mode 100644 index 35fe145..0000000 --- a/src/main/java/tk/shanebee/survival/commands/Reload.java +++ /dev/null @@ -1,26 +0,0 @@ -package tk.shanebee.survival.commands; - -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - -public class Reload implements CommandExecutor { - - private final Survival plugin; - private final Lang lang; - - public Reload(Survival plugin) { - this.plugin = plugin; - this.lang = plugin.getLang(); - } - - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - plugin.loadSettings(sender); - Utils.sendColoredMsg(sender, lang.prefix + "&aReload complete"); - return true; - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java b/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java new file mode 100644 index 0000000..71fb215 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java @@ -0,0 +1,24 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.LiteralArgument; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.util.Utils; + +public class ReloadCommand extends BaseCommand { + + public ReloadCommand(Survival plugin) { + super(plugin); + } + + @Override + Argument register() { + return LiteralArgument.literal("reload") + .withPermission(Permissions.COMMAND_RELOAD) + .executes(info -> { + this.plugin.loadSettings(info.sender()); + Utils.sendColoredMini(info.sender(), this.lang.prefix + "Reload complete"); + }); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/SnowGen.java b/src/main/java/tk/shanebee/survival/commands/SnowGen.java deleted file mode 100644 index 5d94e04..0000000 --- a/src/main/java/tk/shanebee/survival/commands/SnowGen.java +++ /dev/null @@ -1,83 +0,0 @@ -package tk.shanebee.survival.commands; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Chunk; -import org.bukkit.World; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.listeners.block.SnowGeneration; - -public class SnowGen implements CommandExecutor { - - private final Survival plugin; - private final String prefix = ChatColor.translateAlternateColorCodes('&', "&7[&3SurvivalPlus&7] "); - - public SnowGen(Survival plugin) { - this.plugin = plugin; - } - - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (args.length == 1) { - switch (args[0].toLowerCase()) { - case "on": - plugin.setSnowGenOption(true); - break; - case "off": - plugin.setSnowGenOption(false); - break; - default: - return false; - } - if (sender instanceof Player) { - sender.sendMessage(ChatColor.AQUA + prefix + ChatColor.YELLOW + "Snow Generation is " + args[0].toLowerCase()); - sender.getServer().getConsoleSender().sendMessage(prefix + ChatColor.YELLOW + "Snow Generation is " + args[0].toLowerCase()); - } else if (sender instanceof ConsoleCommandSender) { - sender.sendMessage(prefix + ChatColor.YELLOW + "Snow Generation is " + args[0].toLowerCase()); - } - return true; - } else if (args.length == 0) { - if (Bukkit.getServer().getOnlinePlayers().size() <= 1) { - if (sender instanceof Player) { - sender.sendMessage(ChatColor.AQUA + prefix + ChatColor.RED + "WARNING!" + ChatColor.YELLOW + " Snow Generation is running for generated chunks!"); - sender.getServer().getConsoleSender().sendMessage(prefix + ChatColor.RED + "WARNING!" + ChatColor.YELLOW + " Snow Generation is running for generated chunks!"); - } else if (sender instanceof ConsoleCommandSender) { - sender.sendMessage(prefix + ChatColor.RED + "WARNING!" + ChatColor.YELLOW + " Snow Generation is running for generated chunks!"); - } - - SnowGeneration snowGen = new SnowGeneration(plugin); - - for (final World world : Bukkit.getServer().getWorlds()) { - for (final Chunk chunk : world.getLoadedChunks()) { - snowGen.checkChunk(chunk); - } - } - - if (sender instanceof Player) { - sender.sendMessage(ChatColor.AQUA + prefix + ChatColor.GREEN + "Snow Generation is completed."); - sender.getServer().getConsoleSender().sendMessage(prefix + ChatColor.GREEN + "Snow Generation is completed."); - } else if (sender instanceof ConsoleCommandSender) { - sender.sendMessage(prefix + ChatColor.GREEN + "Snow Generation is completed."); - } - - return true; - } else { - if (sender instanceof Player) { - sender.sendMessage(ChatColor.AQUA + prefix + ChatColor.RED + "WARNING!" + ChatColor.YELLOW + " Snow Generation will run through all generated chunks, lag spikes may occur!"); - sender.sendMessage(ChatColor.AQUA + prefix + ChatColor.YELLOW + "Run this command while nobody is in the server."); - } else if (sender instanceof ConsoleCommandSender) { - sender.sendMessage(prefix + ChatColor.RED + "WARNING!" + ChatColor.YELLOW + " Snow Generation will run through all generated chunks, lag spikes may occur!"); - sender.sendMessage(prefix + ChatColor.YELLOW + "Run this command while nobody is in the server."); - } - - return false; - } - } - return false; - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/StatCommand.java b/src/main/java/tk/shanebee/survival/commands/StatCommand.java new file mode 100644 index 0000000..dca8970 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/StatCommand.java @@ -0,0 +1,139 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.BukkitStringTooltip; +import dev.jorel.commandapi.IStringTooltip; +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.ArgumentSuggestions; +import dev.jorel.commandapi.arguments.LiteralArgument; +import dev.jorel.commandapi.arguments.StringArgument; +import dev.jorel.commandapi.executors.CommandArguments; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.data.Info; +import tk.shanebee.survival.data.Nutrient; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.util.Utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class StatCommand extends BaseCommand { + + private final List infoTooltips = new ArrayList<>(); + private final List typeTooltips = new ArrayList<>(); + + public StatCommand(Survival plugin) { + super(plugin); + + setupInfos("all", "Manage all stats"); + setupInfos("hunger", "Manage hunger stat"); + if (this.config.mechanics_thirst_enabled) { + setupInfos("thirst", "Manage thirst stat"); + } + if (this.config.mechanics_energy_enabled) { + setupInfos("energy", "Manage energy stat"); + } + if (this.config.mechanics_food_diversity_enabled) { + setupInfos("nutrients", "Manage nutrient stat"); + } + + if (this.config.mechanics_status_scoreboard) { + setupTypes("toggle", "Toggle a stat"); + setupTypes("on", "Turn a stat on"); + setupTypes("off", "Turn a stat off"); + } + setupTypes("show", "Show a stat in chat"); + } + + @Override + Argument register() { + return LiteralArgument.literal("stats") + .then(new StringArgument("info") + .includeSuggestions(ArgumentSuggestions.stringsWithTooltips(this.infoTooltips)) + .then(new StringArgument("type") + .includeSuggestions(ArgumentSuggestions.stringsWithTooltips(this.typeTooltips)) + .executesPlayer(commandInfo -> { + CommandArguments args = commandInfo.args(); + Player player = commandInfo.sender(); + + String infoName = args.getByClassOrDefault("info", String.class, "all"); + String type = args.getByClassOrDefault("type", String.class, "show"); + + Info info = getStat(infoName); + + if (type.equalsIgnoreCase("show")) { + showStat(player, info); + } else { + manageStat(player, info, type); + } + }))) + ; + } + + private void showStat(@NotNull Player player, @Nullable Info info) { + if (info == null) { + for (Info value : Info.values()) { + showStat(player, value); + } + return; + } + + PlayerData playerData = this.playerManager.getPlayerData(player); + String message = switch (info) { + case HUNGER -> String.format("%s: %s", this.lang.hunger, playerData.getHunger()); + case THIRST -> String.format("%s: %s", this.lang.thirst, playerData.getThirst()); + case ENERGY -> String.format("Energy: %.2f", playerData.getEnergy()); + case NUTRIENTS -> String.format("%s: %s = %s, %s = %s, %s = %s", + this.lang.nutrients, + this.lang.carbohydrates, + playerData.getNutrient(Nutrient.CARBS), + this.lang.protein, + playerData.getNutrient(Nutrient.PROTEIN), + this.lang.vitamins, + playerData.getNutrient(Nutrient.SALTS)); + }; + + Utils.sendColoredMini(player, message); + } + + private void manageStat(@NotNull Player player, @Nullable Info info, @NotNull String type) { + if (!this.config.mechanics_status_scoreboard) return; + PlayerData playerData = this.playerManager.getPlayerData(player); + + if (info == null) { + for (Info value : Info.values()) { + switch (type) { + case "toggle" -> playerData.setInfoDisplayed(value, !playerData.isInfoDisplayed(value)); + case "on" -> playerData.setInfoDisplayed(value, true); + case "off" -> playerData.setInfoDisplayed(value, false); + } + } + } else { + switch (type) { + case "toggle" -> playerData.setInfoDisplayed(info, !playerData.isInfoDisplayed(info)); + case "on" -> playerData.setInfoDisplayed(info, true); + case "off" -> playerData.setInfoDisplayed(info, false); + } + } + } + + private Info getStat(String stat) { + try { + return Info.valueOf(stat.toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) { + return null; + } + } + + private void setupInfos(String stat, String tooltip) { + this.infoTooltips.add(BukkitStringTooltip.ofString(stat, tooltip)); + } + + private void setupTypes(String type, String tooltip) { + this.typeTooltips.add(BukkitStringTooltip.ofString(type, tooltip)); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/Status.java b/src/main/java/tk/shanebee/survival/commands/Status.java deleted file mode 100644 index 47d2459..0000000 --- a/src/main/java/tk/shanebee/survival/commands/Status.java +++ /dev/null @@ -1,169 +0,0 @@ -package tk.shanebee.survival.commands; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.data.Info; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; - -import java.util.ArrayList; -import java.util.List; - -@SuppressWarnings("NullableProblems") -public class Status implements CommandExecutor, TabCompleter { - - private final Config config; - private final Lang lang; - private final PlayerManager playerManager; - - public Status(Survival plugin) { - this.config = plugin.getSurvivalConfig(); - this.lang = plugin.getLang(); - this.playerManager = plugin.getPlayerManager(); - } - - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (command.getName().equalsIgnoreCase("status")) { - if (!(sender instanceof Player)) { - sender.sendMessage(Utils.getColoredString(lang.players_only)); - return false; - } - - Player player = (Player) sender; - PlayerData playerData = playerManager.getPlayerData(player); - - if (args.length == 0) { - if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(playerManager.getHungerVisual(player).get(1) + - playerManager.getHungerVisual(player).get(2) + " " + - playerManager.getHungerVisual(player).get(0).toUpperCase()); - if (config.mechanics_thirst_enabled) - player.sendMessage(playerManager.getThirstVisual(player).get(1) + - playerManager.getThirstVisual(player).get(2) + " " + - playerManager.getThirstVisual(player).get(0).toUpperCase()); - } else { - sendHelp(player); - } - } - - if (args.length == 1) { - switch (args[0]) { - case "all": - if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(playerManager.getHungerVisual(player).get(1) + - playerManager.getHungerVisual(player).get(2) + " " + - playerManager.getHungerVisual(player).get(0).toUpperCase()); - if (config.mechanics_thirst_enabled) - player.sendMessage(playerManager.getThirstVisual(player).get(1) + - playerManager.getThirstVisual(player).get(2) + " " + - playerManager.getThirstVisual(player).get(0).toUpperCase()); - if (config.MECHANICS_ENERGY_ENABLED) - player.sendMessage(playerManager.getEnergyVisual(player).get(1) + - " " + playerManager.getEnergyVisual(player).get(0).toUpperCase()); - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { - for (String s : playerManager.getNutrientsVisual(player)) - player.sendMessage(s); - } - } else { - playerData.setInfoDisplayed(Info.HUNGER, true); - if (config.mechanics_thirst_enabled) - playerData.setInfoDisplayed(Info.THIRST, true); - if (config.MECHANICS_ENERGY_ENABLED) - playerData.setInfoDisplayed(Info.ENERGY, true); - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) - playerData.setInfoDisplayed(Info.NUTRIENTS, true); - } - break; - case "none": - case "off": - playerData.setInfoDisplayed(Info.HUNGER, false); - playerData.setInfoDisplayed(Info.THIRST, false); - playerData.setInfoDisplayed(Info.ENERGY, false); - playerData.setInfoDisplayed(Info.NUTRIENTS, false); - break; - case "hunger": - case "h": - if (!config.MECHANICS_STATUS_SCOREBOARD) { - player.sendMessage(playerManager.getHungerVisual(player).get(1) + - playerManager.getHungerVisual(player).get(2) + " " + - playerManager.getHungerVisual(player).get(0).toUpperCase()); - } else - playerData.setInfoDisplayed(Info.HUNGER, !playerData.isInfoDisplayed(Info.HUNGER)); - break; - case "thirst": - case "t": - if (!config.MECHANICS_STATUS_SCOREBOARD) { - if (config.mechanics_thirst_enabled) - player.sendMessage(playerManager.getThirstVisual(player).get(1) + - playerManager.getThirstVisual(player).get(2) + " " + - playerManager.getThirstVisual(player).get(0).toUpperCase()); - } else - playerData.setInfoDisplayed(Info.THIRST, !playerData.isInfoDisplayed(Info.THIRST)); - break; - case "fatigue": - case "f": - case "energy": - case "e": - if (!config.MECHANICS_STATUS_SCOREBOARD) { - if (config.MECHANICS_ENERGY_ENABLED) - player.sendMessage(playerManager.getEnergyVisual(player).get(1) + - " " + playerManager.getEnergyVisual(player).get(0).toUpperCase()); - } else - playerData.setInfoDisplayed(Info.ENERGY, !playerData.isInfoDisplayed(Info.ENERGY)); - break; - case "nutrients": - case "n": - if (!config.MECHANICS_STATUS_SCOREBOARD) { - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { - for (String s : playerManager.getNutrientsVisual(player)) - player.sendMessage(s); - } - } else - playerData.setInfoDisplayed(Info.NUTRIENTS, !playerData.isInfoDisplayed(Info.NUTRIENTS)); - break; - default: - sendHelp(player); - } - } - return true; - } else - return false; - } - - @Override - public List onTabComplete(CommandSender sender, Command command, String s, String[] args) { - StringBuilder builder = new StringBuilder(); - for (String arg : args) { - builder.append(arg).append(" "); - } - String[] list = {"all", "hunger", "thirst", "energy", "nutrients", "none", "help"}; - - String arg = builder.toString().trim(); - ArrayList matches = new ArrayList<>(); - for (String name : list) { - if (StringUtil.startsWithIgnoreCase(name, arg)) { - matches.add(name); - } - } - return matches; - } - - private void sendHelp(Player player) { - Utils.sendColoredMsg(player, lang.prefix + "&6HealthBoard"); - Utils.sendColoredMsg(player, " &b/stat all &7- Show your entire health board"); - Utils.sendColoredMsg(player, " &b/stat none &7- Turn off your entire health board"); - Utils.sendColoredMsg(player, " &b/stat hunger &7- Turn on/off hunger"); - Utils.sendColoredMsg(player, " &b/stat thirst &7- Turn on/off thirst"); - Utils.sendColoredMsg(player, " &b/stat energy &7- Turn on/off energy"); - Utils.sendColoredMsg(player, " &b/stat nutrients &7- Turn on/off nutrients"); - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java new file mode 100644 index 0000000..08d1bae --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java @@ -0,0 +1,37 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.CommandTree; +import tk.shanebee.survival.Survival; + +import java.util.ArrayList; +import java.util.List; + +public class SurvivalCommand { + + public SurvivalCommand(Survival plugin, String commandName) { + List arguments = new ArrayList<>(); + + arguments.add(new GiveItemCommand(plugin)); + arguments.add(new HealCommand(plugin)); + arguments.add(new NutritionCommand(plugin)); + arguments.add(new PlayerDataCommand(plugin)); + arguments.add(new ReloadCommand(plugin)); + arguments.add(new StatCommand(plugin)); + + if (plugin.getSurvivalConfig().settings_local_chat_distance >= 0) { + arguments.add(new ToggleChatCommand(plugin)); + } + + register(commandName, arguments); + } + + private void register(String commandName, List arguments) { + CommandTree command = new CommandTree(commandName); + for (BaseCommand argument : arguments) { + command.then(argument.register()); + } + + command.register(); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/ToggleChat.java b/src/main/java/tk/shanebee/survival/commands/ToggleChat.java deleted file mode 100644 index 1419bc6..0000000 --- a/src/main/java/tk/shanebee/survival/commands/ToggleChat.java +++ /dev/null @@ -1,100 +0,0 @@ -package tk.shanebee.survival.commands; - -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import tk.shanebee.survival.Survival; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; - -import java.util.ArrayList; -import java.util.List; - -@SuppressWarnings("NullableProblems") -public class ToggleChat implements CommandExecutor, TabCompleter { - - private final Lang lang; - private final PlayerManager playerManager; - private final int LOCAL_CHAT_DIST; - - public ToggleChat(Survival plugin) { - this.lang = plugin.getLang(); - this.playerManager = plugin.getPlayerManager(); - this.LOCAL_CHAT_DIST = plugin.getSurvivalConfig().LOCAL_CHAT_DISTANCE; - } - - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (command.getName().equalsIgnoreCase("togglechat")) { - if (!(sender instanceof Player)) { - sender.sendMessage(Utils.getColoredString(lang.players_only)); - return true; - } - Player player = (Player) sender; - PlayerData playerData = playerManager.getPlayerData(player); - - if (LOCAL_CHAT_DIST <= -1) { - player.sendMessage(Utils.getColoredString(lang.toggle_chat_disabled)); - return true; - } - - if (args.length == 1) { - - switch (args[0]) { - case "local": - case "l": - player.sendMessage(Utils.getColoredString(lang.toggle_chat_local)); - playerData.setLocalChat(true); - break; - case "global": - case "g": - player.sendMessage(Utils.getColoredString(lang.toggle_chat_global)); - playerData.setLocalChat(false); - break; - default: - return false; - } - } else if (args.length == 0) { - if (playerData.isLocalChat()) { - player.sendMessage(Utils.getColoredString(lang.toggle_chat_global)); - playerData.setLocalChat(false); - } else { - player.sendMessage(Utils.getColoredString(lang.toggle_chat_local)); - playerData.setLocalChat(true); - } - } else { - sender.sendMessage(ChatColor.RED + Utils.getColoredString(lang.invalid_arg)); - return false; - } - - return true; - } else { - sender.sendMessage("Command: " + command.getName()); - return true; - } - } - - @Override - public List onTabComplete(CommandSender sender, Command command, String s, String[] args) { - StringBuilder builder = new StringBuilder(); - for (String arg : args) { - builder.append(arg).append(" "); - } - String[] list = {"local", "global"}; - String[] list2 = {""}; - String arg = builder.toString().trim(); - ArrayList matches = new ArrayList<>(); - for (String name : (LOCAL_CHAT_DIST > -1) ? list : list2) { - if (StringUtil.startsWithIgnoreCase(name, arg)) { - matches.add(name); - } - } - return matches; - } - -} diff --git a/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java b/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java new file mode 100644 index 0000000..3c0798f --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java @@ -0,0 +1,52 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.BukkitStringTooltip; +import dev.jorel.commandapi.IStringTooltip; +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.ArgumentSuggestions; +import dev.jorel.commandapi.arguments.LiteralArgument; +import dev.jorel.commandapi.arguments.StringArgument; +import org.bukkit.entity.Player; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.util.Utils; + +import java.util.ArrayList; +import java.util.List; + +public class ToggleChatCommand extends BaseCommand { + + private final List typeTooltips = new ArrayList<>(); + + public ToggleChatCommand(Survival plugin) { + super(plugin); + setupInfos("global", "Set chat to global chat"); + setupInfos("local", "Set chat to local chat"); + } + + @Override + Argument register() { + return LiteralArgument.literal("chat") + .withPermission(Permissions.COMMAND_CHAT) + //.then(new StringArgument("type") + .then(new StringArgument("type") + .replaceSuggestions(ArgumentSuggestions.stringsWithTooltips(this.typeTooltips)) + .executesPlayer(info -> { + Player player = info.sender(); + String type = info.args().getByClassOrDefault("type", String.class, "global"); + PlayerData playerData = this.playerManager.getPlayerData(player); + if (type.equalsIgnoreCase("global")) { + Utils.sendColoredMini(player, lang.toggle_chat_global); + playerData.setLocalChat(false); + } else if (type.equalsIgnoreCase("local")) { + Utils.sendColoredMini(player, lang.toggle_chat_local); + playerData.setLocalChat(true); + } + })); + } + + private void setupInfos(String stat, String tooltip) { + this.typeTooltips.add(BukkitStringTooltip.ofString(stat, tooltip)); + } + +} diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 7f49505..20608a9 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -22,7 +22,7 @@ public class Config { public String settings_resource_pack_url; public boolean settings_resource_pack_enabled; - public int LOCAL_CHAT_DISTANCE; + public int settings_local_chat_distance; public boolean WELCOME_GUIDE_ENABLED; public boolean WELCOME_GUIDE_NEW_PLAYERS; @@ -56,9 +56,9 @@ public class Config { public boolean MECHANICS_PREVENT_NIGHT_SKIP; // ENERGY - public boolean MECHANICS_ENERGY_ENABLED; + public boolean mechanics_energy_enabled; public double MECHANICS_ENERGY_START; - public double MECHANICS_ENERGY_RESPAWN; + public double mechanics_energy_respawn; public boolean MECHANICS_ENERGY_WARNING; public double MECHANICS_ENERGY_DRAIN_RATE; public double MECHANICS_ENERGY_DRAIN_COLD_RATE; @@ -78,7 +78,7 @@ public class Config { public boolean MECHANICS_REDUCED_IRON_NUGGET; public boolean MECHANICS_REDUCED_GOLD_NUGGET; - public boolean MECHANICS_STATUS_SCOREBOARD; + public boolean mechanics_status_scoreboard; public int MECHANICS_ALERT_INTERVAL; public boolean MECHANICS_RAW_MEAT_HUNGER; @@ -87,16 +87,16 @@ public class Config { public boolean MECHANICS_COOKIE_BOOST; public boolean MECHANICS_BEET_STRENGTH; - public boolean MECHANICS_FOOD_DIVERSITY_ENABLED; + public boolean mechanics_food_diversity_enabled; public int MECHANICS_FOOD_MAX_PROTEINS; public int MECHANICS_FOOD_MAX_SALTS; public int MECHANICS_FOOD_MAX_CARBS; public int MECHANICS_FOOD_START_PROTEINS; public int MECHANICS_FOOD_START_SALTS; public int MECHANICS_FOOD_START_CARBS; - public int MECHANICS_FOOD_RESPAWN_PROTEINS; - public int MECHANICS_FOOD_RESPAWN_SALTS; - public int MECHANICS_FOOD_RESPAWN_CARBS; + public int mechanics_food_respawn_proteins; + public int mechanics_food_respawn_salts; + public int mechanics_food_respawn_carbs; public int MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_EASY; public int MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_MEDIUM; public int MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_HARD; @@ -141,7 +141,7 @@ public class Config { public int mechanics_thirst_rep_other_water; public int MECHANICS_HUNGER_START_AMOUNT; - public int MECHANICS_HUNGER_RESPAWN_AMOUNT; + public int mechanics_hunger_respawn_amount; public boolean MECHANICS_COMPASS_WAYPOINT; public boolean MECHANICS_COMPASS_WAYPOINT_WORLDS; @@ -231,7 +231,7 @@ public Config(Survival plugin) { loadDefaultSettings(); } - private void loadDefaultSettings() { + public void loadDefaultSettings() { if (configFile == null) { configFile = new File(plugin.getDataFolder(), "config.yml"); } @@ -287,8 +287,7 @@ private void loadSettings() { // SETTINGS this.settings_resource_pack_enabled = settings.getBoolean("Settings.enable-resource-pack"); this.settings_resource_pack_url = settings.getString("Settings.resource-pack-url"); - - this.LOCAL_CHAT_DISTANCE = settings.getInt("LocalChatDist"); + this.settings_local_chat_distance = settings.getInt("settings.local-chat-distance"); // WELCOME GUIDE this.WELCOME_GUIDE_ENABLED = settings.getBoolean("WelcomeGuide.Enabled"); @@ -321,9 +320,9 @@ private void loadSettings() { // MECHANICS this.MECHANICS_SHARED_WORKBENCH = settings.getBoolean("Mechanics.SharedWorkbench"); this.MECHANICS_PREVENT_NIGHT_SKIP = settings.getBoolean("Mechanics.Prevent-Night-Skip"); - this.MECHANICS_ENERGY_ENABLED = settings.getBoolean("Mechanics.Energy.enabled"); + this.mechanics_energy_enabled = settings.getBoolean("Mechanics.Energy.enabled"); this.MECHANICS_ENERGY_START = settings.getDouble("Mechanics.Energy.start-level"); - this.MECHANICS_ENERGY_RESPAWN = settings.getDouble("Mechanics.Energy.respawn-level"); + this.mechanics_energy_respawn = settings.getDouble("Mechanics.Energy.respawn-level"); this.MECHANICS_ENERGY_WARNING = settings.getBoolean("Mechanics.Energy.warning"); this.MECHANICS_ENERGY_DRAIN_RATE = settings.getDouble("Mechanics.Energy.drain-rate"); this.MECHANICS_ENERGY_DRAIN_COLD_RATE = settings.getDouble("Mechanics.Energy.cold-drain-rate"); @@ -343,7 +342,7 @@ private void loadSettings() { this.MECHANICS_REDUCED_IRON_NUGGET = settings.getBoolean("Mechanics.ReducedIronNugget"); this.MECHANICS_REDUCED_GOLD_NUGGET = settings.getBoolean("Mechanics.ReducedGoldNugget"); - this.MECHANICS_STATUS_SCOREBOARD = settings.getBoolean("Mechanics.StatusScoreboard"); + this.mechanics_status_scoreboard = settings.getBoolean("Mechanics.StatusScoreboard"); this.MECHANICS_ALERT_INTERVAL = settings.getInt("Mechanics.AlertInterval"); this.MECHANICS_RAW_MEAT_HUNGER = settings.getBoolean("Mechanics.RawMeatHunger"); @@ -352,18 +351,18 @@ private void loadSettings() { this.MECHANICS_COOKIE_BOOST = settings.getBoolean("Mechanics.CookieHealthBoost"); this.MECHANICS_BEET_STRENGTH = settings.getBoolean("Mechanics.BeetrootStrength"); - this.MECHANICS_FOOD_DIVERSITY_ENABLED = settings.getBoolean("Mechanics.FoodDiversity.enabled"); + this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); this.MECHANICS_FOOD_MAX_CARBS = settings.getInt("Mechanics.FoodDiversity.max-level.carbs"); this.MECHANICS_FOOD_MAX_SALTS = settings.getInt("Mechanics.FoodDiversity.max-level.salts"); this.MECHANICS_FOOD_MAX_PROTEINS = settings.getInt("Mechanics.FoodDiversity.max-level.proteins"); - this.MECHANICS_FOOD_DIVERSITY_ENABLED = settings.getBoolean("Mechanics.FoodDiversity.enabled"); + this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); this.MECHANICS_FOOD_START_CARBS = settings.getInt("Mechanics.FoodDiversity.start-level.carbs"); this.MECHANICS_FOOD_START_SALTS = settings.getInt("Mechanics.FoodDiversity.start-level.salts"); this.MECHANICS_FOOD_START_PROTEINS = settings.getInt("Mechanics.FoodDiversity.start-level.proteins"); - this.MECHANICS_FOOD_DIVERSITY_ENABLED = settings.getBoolean("Mechanics.FoodDiversity.enabled"); - this.MECHANICS_FOOD_RESPAWN_CARBS = settings.getInt("Mechanics.FoodDiversity.respawn-level.carbs"); - this.MECHANICS_FOOD_RESPAWN_SALTS = settings.getInt("Mechanics.FoodDiversity.respawn-level.salts"); - this.MECHANICS_FOOD_RESPAWN_PROTEINS = settings.getInt("Mechanics.FoodDiversity.respawn-level.proteins"); + this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); + this.mechanics_food_respawn_carbs = settings.getInt("Mechanics.FoodDiversity.respawn-level.carbs"); + this.mechanics_food_respawn_salts = settings.getInt("Mechanics.FoodDiversity.respawn-level.salts"); + this.mechanics_food_respawn_proteins = settings.getInt("Mechanics.FoodDiversity.respawn-level.proteins"); this.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_EASY = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.easy"); this.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_MEDIUM = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.normal"); this.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_HARD = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.hard"); @@ -409,7 +408,7 @@ private void loadSettings() { this.mechanics_thirst_rep_water = settings.getInt("Mechanics.Thirst.replenish-level.water"); this.MECHANICS_HUNGER_START_AMOUNT = settings.getInt("Mechanics.Hunger.Starting-Amount"); - this.MECHANICS_HUNGER_RESPAWN_AMOUNT = settings.getInt("Mechanics.Hunger.Respawn-Amount"); + this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); this.MECHANICS_COMPASS_WAYPOINT = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); this.MECHANICS_COMPASS_WAYPOINT_WORLDS = settings.getBoolean("Mechanics.CompassWaypoint.per-world"); diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index bc114c4..3d26eb1 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -70,6 +70,7 @@ public class Lang { public String hunger; public String thirst; public String energy; + public String nutrients; public String carbohydrates; public String carbohydrates_lack; public String protein; @@ -199,7 +200,6 @@ public class Lang { public String rain_boots_name; public String rain_boots_lore; - public String cmd_player_not_online; public String cmd_heal_self; public String cmd_heal_by; public String cmd_heal_other; @@ -267,6 +267,7 @@ public void loadLangFile(CommandSender sender) { hunger = lang.getString("hunger"); thirst = lang.getString("thirst"); energy = lang.getString("energy"); + nutrients = lang.getString("nutrients"); carbohydrates = lang.getString("carbohydrates"); carbohydrates_lack = lang.getString("carbohydrates-lack"); protein = lang.getString("protein"); @@ -380,7 +381,6 @@ public void loadLangFile(CommandSender sender) { rain_boots_name = lang.getString("rain-boots-name"); rain_boots_lore = lang.getString("rain-boots-lore"); - cmd_player_not_online = lang.getString("cmd-player-not-online"); cmd_heal_self = lang.getString("cmd-heal-self"); cmd_heal_by = lang.getString("cmd-heal-by"); cmd_heal_other = lang.getString("cmd-heal-other"); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index c3fe9c9..ae71800 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -61,7 +61,7 @@ public class EventManager { public EventManager(Survival plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); - this.LOCAL_CHAT = config.LOCAL_CHAT_DISTANCE; + this.LOCAL_CHAT = config.settings_local_chat_distance; } public void registerEvents() { @@ -125,9 +125,9 @@ public void registerEvents() { pm.registerEvents(new TropicalFish(this.plugin), this.plugin); if (config.MECHANICS_LIVING_SLIME) pm.registerEvents(new LivingSlime(plugin), this.plugin); - if (config.MECHANICS_ENERGY_ENABLED) + if (config.mechanics_energy_enabled) pm.registerEvents(new EnergyChange(plugin), this.plugin); - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) + if (config.mechanics_food_diversity_enabled) pm.registerEvents(new FoodDiversityConsume(plugin), this.plugin); if (config.MECHANICS_RECURVED_BOW) pm.registerEvents(new RecurvedBow(plugin), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java b/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java index 4816414..71e03c9 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java @@ -30,9 +30,9 @@ public class FoodDiversityConsume implements Listener { public FoodDiversityConsume(Survival plugin) { this.playerManager = plugin.getPlayerManager(); Config config = plugin.getSurvivalConfig(); - RESPAWN_PROTEIN = config.MECHANICS_FOOD_RESPAWN_PROTEINS; - RESPAWN_CARBS = config.MECHANICS_FOOD_RESPAWN_CARBS; - RESPAWN_SALTS = config.MECHANICS_FOOD_RESPAWN_SALTS; + RESPAWN_PROTEIN = config.mechanics_food_respawn_proteins; + RESPAWN_CARBS = config.mechanics_food_respawn_carbs; + RESPAWN_SALTS = config.mechanics_food_respawn_salts; } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java index 98cddd1..3f91029 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java @@ -135,7 +135,7 @@ public void run() { } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (!config.MECHANICS_STATUS_SCOREBOARD) { + if (!config.mechanics_status_scoreboard) { player.sendMessage(plugin.getPlayerManager().getHungerVisual(player).get(1) + plugin.getPlayerManager().getHungerVisual(player).get(2) + " " + plugin.getPlayerManager().getHungerVisual(player).get(0).toUpperCase()); player.sendMessage(plugin.getPlayerManager().getThirstVisual(player).get(1) + plugin.getPlayerManager().getThirstVisual(player).get(2) + " " + plugin.getPlayerManager().getThirstVisual(player).get(0).toUpperCase()); } @@ -206,7 +206,7 @@ private void onRespawn(PlayerRespawnEvent event) { playerData.setThirst(thirst); playerManager.getPlayerData(player).setThirst(thirst); - int hunger = config.MECHANICS_HUNGER_RESPAWN_AMOUNT; + int hunger = config.mechanics_hunger_respawn_amount; Bukkit.getScheduler().runTaskLater(plugin, () -> StatusManager.setHunger(player, hunger), 1); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java index 6ff4010..1a1a4d9 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java @@ -18,7 +18,6 @@ import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.events.EnergyLevelChangeEvent; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.util.Utils; @@ -35,7 +34,7 @@ public EnergyChange(Survival plugin) { this.playerManager = plugin.getPlayerManager(); this.config = plugin.getSurvivalConfig(); this.lang = plugin.getLang(); - this.ENERGY_RESPAWN = config.MECHANICS_ENERGY_RESPAWN; + this.ENERGY_RESPAWN = config.mechanics_energy_respawn; } @EventHandler diff --git a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java index 26346cb..673f4f6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java @@ -43,7 +43,7 @@ private void onJoin(PlayerJoinEvent event) { } else { playerData = playerManager.loadPlayerData(player); } - if (config.MECHANICS_STATUS_SCOREBOARD) + if (config.mechanics_status_scoreboard) scoreboardManager.setupScoreboard(player); // Appears you can only set a compass target after a delay diff --git a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java index ed9f1e0..a35c577 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java @@ -51,7 +51,7 @@ private void onChat(AsyncPlayerChatEvent event) { event.setCancelled(true); Bukkit.getConsoleSender().sendMessage("<" + player.getDisplayName() + "> " + msg); - double maxDist = config.LOCAL_CHAT_DISTANCE; + double maxDist = config.settings_local_chat_distance; for (Player other : Bukkit.getServer().getOnlinePlayers()) { if (other.getLocation().getWorld() == player.getLocation().getWorld()) { if (other.getLocation().distance(player.getLocation()) <= maxDist) { @@ -61,4 +61,4 @@ private void onChat(AsyncPlayerChatEvent event) { } } -} \ No newline at end of file +} diff --git a/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java b/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java index c53f725..75861a2 100644 --- a/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java +++ b/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java @@ -104,7 +104,7 @@ public void run() { this.healthBoard.deleteLine(8); } - if (config.MECHANICS_ENERGY_ENABLED && energyEnabled) { + if (config.mechanics_energy_enabled && energyEnabled) { this.healthBoard.setLine(9, this.playerManager.getEnergyVisual(this.player).get(0)); this.healthBoard.setLine(10, this.playerManager.getEnergyVisual(this.player).get(1)); this.healthBoard.setLine(11, ""); @@ -114,7 +114,7 @@ public void run() { this.healthBoard.deleteLine(11); } - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED && nutrientsEnabled) { + if (config.mechanics_food_diversity_enabled && nutrientsEnabled) { List nutrients = this.playerManager.getNutrientsVisual(this.player); this.healthBoard.setLine(12, nutrients.get(0), nutrients.get(3)); this.healthBoard.setLine(13, nutrients.get(1), nutrients.get(4)); diff --git a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java index 014d6d9..879b782 100644 --- a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java +++ b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java @@ -11,13 +11,13 @@ public class TaskManager { public TaskManager(Survival plugin) { final int alertInterval = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; Config config = plugin.getSurvivalConfig(); - if (config.MECHANICS_ENERGY_ENABLED) { + if (config.mechanics_energy_enabled) { new EnergyDrain(plugin); } - if (config.MECHANICS_FOOD_DIVERSITY_ENABLED) { + if (config.mechanics_food_diversity_enabled) { new NutrientsDrain(plugin); new NutrientsEffect(plugin); - if (!config.MECHANICS_STATUS_SCOREBOARD && alertInterval > 0) { + if (!config.mechanics_status_scoreboard && alertInterval > 0) { new NutrientsAlert(plugin); } } @@ -28,7 +28,7 @@ public TaskManager(Survival plugin) { // Thirst if (config.mechanics_thirst_enabled) { new ThirstDrain(plugin); - if (!config.MECHANICS_STATUS_SCOREBOARD && alertInterval > 0) { + if (!config.mechanics_status_scoreboard && alertInterval > 0) { new ThirstAlert(plugin); } } diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 42f9ebc..ecba5de 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -3,6 +3,7 @@ import com.google.common.collect.ImmutableSet; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -30,6 +31,7 @@ public class Utils { private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage(); + private static final LegacyComponentSerializer COMPONENT_SERIALIZER = LegacyComponentSerializer.legacySection(); private static final Pattern HEX_PATTERN = Pattern.compile("<#([A-Fa-f0-9]){6}>"); private static final ImmutableSet CONCRETE_BLOCKS; @@ -595,6 +597,10 @@ public static Component getMini(String format, Object... args) { return MINI_MESSAGE.deserialize(msg); } + public static String reverseComponent(Component component) { + return COMPONENT_SERIALIZER.serialize(component); + } + /** * Send a colored console message *

This will NOT include plugin prefix

diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index aad75e6..1f5c0f0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -15,9 +15,9 @@ Settings: # The link to the pack, you can put a custom link here if need be resource-pack-url: https://www.dropbox.com/s/fq6or9vvcup7wvd/SP-1.14v6.zip?dl=1 -# The distance from the player at which other players will see their chat messages -# -1 = disabled -LocalChatDist: -1 + # The distance from the player at which other players will see their chat messages + # -1 = disabled + local-chat-distance: -1 # When a player joins, they will get a link to a simple starter guide WelcomeGuide: diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index 916a5b1..10d7795 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -20,7 +20,7 @@ no-perm: "You do not have permission to perform this command" # When a player joins, they will see this message which links them to a guide to help get them started # IF you want, you can create your own guide and change the link survival-guide-msg: "&6Our server changes a bunch of vanilla Minecraft mechanics, &6To see our survival guide " -survival-guide-click-msg: "&bClick Here" +survival-guide-click-msg: "Click Here" survival-guide-hover-msg: "Click for Guide" survival-guide-link: "https://bitbucket.org/ShaneBeeStudios/SurvivalPlus/wiki/Getting-Started" @@ -43,26 +43,26 @@ charge-unable: "Unable to charge immediately." lack-of-energy: "Lack of energy, unable to spin." -arrows-off-hand: "&cYou must have arrows in your off hand." -arrows-off-hand-crossbow: "&cYou must load arrows from your off hand." -bow-main-hand: "&cYou must use a bow with your main hand." +arrows-off-hand: "You must have arrows in your off hand." +arrows-off-hand-crossbow: "You must load arrows from your off hand." +bow-main-hand: "You must use a bow with your main hand." recurved-bow: "&3Bow" recurved-crossbow: "&3Crossbow" recurved: "&7Recurved" -fishing-off-hand: "&cYou must use a fishing pole with an empty off hand." -fishing-main-hand: "&cYou must use a fishing pole with your main hand." -grappling-off-hand: "&cYou must use a grappling hook with an empty off hand." -grappling-main-hand: "&cYou must use a grappling hook with your main hand." +fishing-off-hand: "You must use a fishing pole with an empty off hand." +fishing-main-hand: "You must use a fishing pole with your main hand." +grappling-off-hand: "You must use a grappling hook with an empty off hand." +grappling-main-hand: "You must use a grappling hook with your main hand." compass-waypoint-set: "Compass has pointed at %s" compass-waypoint-get: "You are %s blocks away from your waypoint at %s" compass-waypoint-unset: "You do not have a waypoint set for this world." players-only: "Works on players only." -toggle-chat-local: "&bToggled to &aLocal&b Chat." -toggle-chat-global: "&bToggled to &2Global&b Chat." -toggle-chat-disabled: "&cChat toggle has been disabled on this server." +toggle-chat-local: "Toggled to Local Chat." +toggle-chat-global: "Toggled to Global Chat." +toggle-chat-disabled: "Chat toggle has been disabled on this server." invalid-arg: "Invalid Arguments." starved-eat: "You are starving, eat some food." @@ -71,22 +71,23 @@ healthboard-title: "Status" hunger: "Hunger" thirst: "Thirst" energy: "Energy" -carbohydrates: "Carbohydrates" +nutrients: "Nutrients" +carbohydrates: "Carbs" protein: "Protein" -vitamins: "Vitamins and Minerals" +vitamins: "Vitamins" nutrition-gui: "Nutrition GUI" -nutrition-gui-next-page: "&bNext Page" -nutrition-gui-last-page: "&bLast Page" +nutrition-gui-next-page: "Next Page" +nutrition-gui-last-page: "Last Page" carbohydrates-lack: "Eat your grains and sugar." vitamins-lack: "Eat your vegetables and fruit." protein-lack: "Eat your meat, poultry, and dairy." -healing: "&aHealing " -healing-self: "&aHealing &ryourself" -keep: "&a, keep " -on-hand: "&a on hand." -being-healed: "&aYou are being healed by " -stay-still: "&a, stay still." +healing: "Healing " +healing-self: "Healing &ryourself" +keep: ", keep " +on-hand: " on hand." +being-healed: "You are being healed by " +stay-still: ", stay still." healing-complete: "Healing complete." healing-interrupted: "Healing interrupted." @@ -94,8 +95,8 @@ healing-interrupted: "Healing interrupted." energy-level-10: "&6You are starting to feel a little tired." energy-level-6-5: "&6You are starting to feel a little worn out and weak." energy-level-3-5: "&eYou are starting to feel a little nauseous, maybe it's time to get some sleep." -energy-level-2: "&cYou are starting to feel really sick, you should get some rest." -energy-level-1: "&cYour lack of sleep is really taking a toll on you." +energy-level-2: "You are starting to feel really sick, you should get some rest." +energy-level-1: "Your lack of sleep is really taking a toll on you." locked: "Locked" missing-component: "Missing Component" @@ -116,10 +117,10 @@ hatchet: "Hatchet" mattock: "Mattock" firestriker: "Firestriker" firestriker-damaged: "Damaged Firestriker" -firestriker-lore: "&7Right-Click to burn things||&bSneak-Right-Click for portable smelter||&7 -Put smeltable into input slot||&7 -Click output slot to smelt" +firestriker-lore: "&7Right-Click to burn things||Sneak-Right-Click for portable smelter||&7 -Put smeltable into input slot||&7 -Click output slot to smelt" shiv: "Shiv" -poisoned-enemy: "&2Poisoned: Poison enemy on hit" -poisoned-retain: "&2Poisoning Effect &7retains" +poisoned-enemy: "Poisoned: Poison enemy on hit" +poisoned-retain: "Poisoning Effect &7retains" reduce-50: "&7> Reduce chance by 50%" grappling-hook: "Grappling Hook" @@ -127,8 +128,8 @@ hammer: "Hammer" workbench: "Workbench" valkyrie-axe: "Valkyrie's Axe" -valkyrie-axe-unable-dual: "&cUnable to dual-wield with Valkyrie's Axe" -valkyrie-axe-spin: "&aSpin: Spin your axe in a circle to attack all nearby enemies!" +valkyrie-axe-unable-dual: "Unable to dual-wield with Valkyrie's Axe" +valkyrie-axe-spin: "Spin: Spin your axe in a circle to attack all nearby enemies!" valkyrie-axe-cooldown: "&7> Cooldown: 1 second" quartz-breaker: "Quartz Breaker" @@ -136,21 +137,21 @@ haste: "&eHaste" obsidian-mace: "Obsidian Mace" cripple-hit: "&dCripple: Enemies hit become &8weakened" -drain-hit: "&aDrain: Gain &b2 hearts&a per hit" -exhausted-slow: "&8Exhausted: &cSlowness II" +drain-hit: "Drain: Gain 2 hearts per hit" +exhausted-slow: "&8Exhausted: Slowness II" expire-disarm: "&7> Expires after disarming for 5 seconds" knockback-resistance: "&9+50% Knockback Resistance" ender-giant-blade: "Ender Giant Blade" -ender-giant-blade-unable-duel: "&cUnable to dual-wield with the Ender Giant Blade" -ender-giant-blade-charge: "&aCharge: Sprint forward, attack enemies in the way" +ender-giant-blade-unable-duel: "Unable to dual-wield with the Ender Giant Blade" +ender-giant-blade-charge: "Charge: Sprint forward, attack enemies in the way" ender-giant-blade-cooldown: "&7> Cooldown: 5 seconds" -half-shield-resistance: "&aHalf-Shield: Gains &4Resistance II" +half-shield-resistance: "Half-Shield: Gains &4Resistance II" reflecting-coming: "&7> Reflecting incoming damage by 40%" blaze-sword: "Blaze Sword" blaze-sword-fire-resistance: "&6Fire Resistance" -blaze-sword-fiery: "&cFiery: -3 Hearts" +blaze-sword-fiery: "Fiery: -3 Hearts" blaze-sword-spread-fire: "&6Spread fire on the ground" blaze-sword-cost: "&7> Costs 1 Durability" @@ -166,7 +167,7 @@ golden-crown: "Golden Crown" fermented-skin: "Fermented Skin" medical-kit: "Medical Kit" -water-bowl: "&bWater Bowl" +water-bowl: "Water Bowl" suspicious-meat: "&eSuspicious Meat" @@ -176,47 +177,46 @@ suspicious-meat: "&eSuspicious Meat" dirty-water: "Water Bottle" dirty-water-lore: "&7Dirty" dirty-water-color: 12769874 -clean-water: "&bWater Bottle" +clean-water: "Water Bottle" clean-water-lore: "&7Clean" clean-water-color: 1213666 -purified-water: "&bWater Bottle" +purified-water: "Water Bottle" purified-water-lore: "&7Purified" purified-water-color: 0x00FFFF coffee-bean-name: "Coffee Bean" coffee-name: "&3Coffee" coffee-color: 9461779 -cold-milk-name: "&bCold Milk" +cold-milk-name: "Cold Milk" cold-milk-color: 16250871 -hot-milk-name: "&cHot Milk" +hot-milk-name: "Hot Milk" hot-milk-color: 15456977 -hot-milk-drink: "&cOUCH, that was hot!" +hot-milk-drink: "OUCH, that was hot!" breeding-egg-name: "Breeding Egg" flint_sickle: "&8Flint Sickle" stone_sickle: "&7Stone Sickle" iron_sickle: "&3Iron Sickle" -diamond_sickle: "&bDiamond Sickle" +diamond_sickle: "Diamond Sickle" -campfire-name: "&aCampfire" -campfire-lore: "&bUnlit||&7Hit with a stick a few times||&7to light the campfire" +campfire-name: "Campfire" +campfire-lore: "Unlit||&7Hit with a stick a few times||&7to light the campfire" bee-helmet-name: '&6Beekeeper Helmet' bee-chest-name: '&6Beekeeper Chestplate' bee-legs-name: '&6Beekeeper Leggings' bee-boots-name: '&6Beekeeper Boots' -bee-suit-lore: '&bPrevent bee stings' -snow-boots-name: '&x&9&E&C&9&C&ASnow Boots' -snow-boots-lore: '&bMove quicker in snow' +bee-suit-lore: 'Prevent bee stings' +snow-boots-name: '&x&9&E&9Snow Boots' +snow-boots-lore: 'Move quicker in snow' rain-boots-name: '&x&D&6&E&7&0&3Rain Boots' -rain-boots-lore: '&bMove quicker in rain' +rain-boots-lore: 'Move quicker in rain' #################### # Commands #################### -# will be replaced with a player name! -cmd-player-not-online: "&cIt appears is not online!" -cmd-heal-self: "&aYou have been healed!" -cmd-heal-by: "&aYou have been healed by !" -cmd-heal-other: "&aYou have headed !" +# %s will be replaced with a player name! +cmd-heal-self: "You have been healed!" +cmd-heal-by: "You have been healed by %s!" +cmd-heal-other: "You have healed %s!" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 776fb04..a96e630 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -7,42 +7,3 @@ softdepend: - PlaceholderAPI - Multiverse-Core - Oh_the_dungeons_youll_go -commands: - reload-survival: - aliases: [survival-reload] - description: Reload configurations - usage: / - permission: survivalplus.reload - recipes: - description: Unused - usage: / - togglechat: - description: Toggling between Global and Local Chat - usage: / [global|local] - aliases: [tc] - permission: survivalplus.togglechat - status: - description: Checking Hunger and Thirst Status - usage: / - aliases: [stat, s] - snowgen: - description: Regenerates snow layers for all chunks, or toggles real-time snow formation - usage: / [on|off] - permission: survivalplus.snowgen - giveitem: - description: Give a SurvivalPlus item to a player - usage: / - permission: survivalplus.giveitem - aliases: [survivalitem, itemgive] - nutrition: - description: Open the nutrition GUI - usage: / - permission: survivalplus.nutrition.gui - heal: - description: Heal a player - usage: / [player] - permission: survivalplus.heal - playerdata: - description: Adjust player data - usage: / (player) (add/remove/set) (stat) (amount) - permission: survivalplus.playerdata From cc6b25eb23fa5b2be4f8ac7d078d404213f35e16 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 11:44:27 -0800 Subject: [PATCH 038/133] Stats cleanup --- .../survival/commands/HealCommand.java | 2 +- .../survival/commands/StatCommand.java | 2 +- .../tk/shanebee/survival/config/Config.java | 102 +++++---- .../tk/shanebee/survival/data/Nutrient.java | 2 +- .../tk/shanebee/survival/data/PlayerData.java | 162 ++++++-------- .../listeners/item/FoodDiversityConsume.java | 8 +- .../survival/managers/Placeholders.java | 2 +- .../survival/managers/PlayerManager.java | 43 ++-- .../survival/managers/StatusManager.java | 4 +- .../survival/tasks/NutrientsAlert.java | 2 +- .../survival/tasks/NutrientsDrain.java | 3 +- .../survival/tasks/NutrientsEffect.java | 206 +++++++++--------- src/main/resources/config.yml | 20 +- 13 files changed, 257 insertions(+), 301 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/commands/HealCommand.java b/src/main/java/tk/shanebee/survival/commands/HealCommand.java index 79f891d..7450dce 100644 --- a/src/main/java/tk/shanebee/survival/commands/HealCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/HealCommand.java @@ -58,7 +58,7 @@ private void heal(Player player) { if (this.config.mechanics_food_diversity_enabled) { int carbs = this.config.mechanics_food_respawn_carbs; int proteins = this.config.mechanics_food_respawn_proteins; - int salts = this.config.mechanics_food_respawn_salts; + int salts = this.config.mechanics_food_respawn_vitamins; playerData.setNutrients(carbs, proteins, salts); } if (this.config.mechanics_energy_enabled) { diff --git a/src/main/java/tk/shanebee/survival/commands/StatCommand.java b/src/main/java/tk/shanebee/survival/commands/StatCommand.java index dca8970..97bc01f 100644 --- a/src/main/java/tk/shanebee/survival/commands/StatCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/StatCommand.java @@ -93,7 +93,7 @@ private void showStat(@NotNull Player player, @Nullable Info info) { this.lang.protein, playerData.getNutrient(Nutrient.PROTEIN), this.lang.vitamins, - playerData.getNutrient(Nutrient.SALTS)); + playerData.getNutrient(Nutrient.VITAMINS)); }; Utils.sendColoredMini(player, message); diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 20608a9..015f56e 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -57,7 +57,7 @@ public class Config { // ENERGY public boolean mechanics_energy_enabled; - public double MECHANICS_ENERGY_START; + public double mechanics_energy_start; public double mechanics_energy_respawn; public boolean MECHANICS_ENERGY_WARNING; public double MECHANICS_ENERGY_DRAIN_RATE; @@ -88,32 +88,30 @@ public class Config { public boolean MECHANICS_BEET_STRENGTH; public boolean mechanics_food_diversity_enabled; - public int MECHANICS_FOOD_MAX_PROTEINS; - public int MECHANICS_FOOD_MAX_SALTS; - public int MECHANICS_FOOD_MAX_CARBS; - public int MECHANICS_FOOD_START_PROTEINS; - public int MECHANICS_FOOD_START_SALTS; - public int MECHANICS_FOOD_START_CARBS; + public int mechanics_food_max_level; + public int mechanics_food_start_carbs; + public int mechanics_food_start_protein; + public int mechanics_food_start_vitamins; public int mechanics_food_respawn_proteins; - public int mechanics_food_respawn_salts; + public int mechanics_food_respawn_vitamins; public int mechanics_food_respawn_carbs; - public int MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_EASY; - public int MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_MEDIUM; - public int MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_HARD; - public int MECHANICS_FOOD_EFFECTS_SALTS_EX_AMP; - public String MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_EFFECT; - public int MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_AMP; - public int MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_DURATION; - public String MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_EFFECT; - public int MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_AMP; - public int MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_DURATION; - public int MECHANICS_FOOD_EFFECTS_PROTEIN_EX_AMP; - public String MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_EFFECT; - public int MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_AMP; - public int MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_DURATION; - public String MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_EFFECT; - public int MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_AMP; - public int MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_DURATION; + public int mechanics_food_effects_carbs_ex_amp_easy; + public int mechanics_food_effects_carbs_ex_amp_medium; + public int mechanics_food_effects_carbs_ex_amp_hard; + public int mechanics_food_effects_vitamins_ex_amp; + public String mechanics_food_effects_vitamins_se_normal_effect; + public int mechanics_food_effects_vitamins_se_normal_amp; + public int mechanics_food_effects_vitamins_se_normal_duration; + public String mechanics_food_effects_vitamins_se_hard_effect; + public int mechanics_food_effects_vitamins_se_hard_amp; + public int mechanics_food_effects_vitamins_se_hard_duration; + public int mechanics_food_effects_protein_ex_amp; + public String mechanics_food_effects_protein_se_normal_effect; + public int mechanics_food_effects_protein_se_normal_amp; + public int mechanics_food_effects_protein_se_normal_duration; + public String mechanics_food_effects_protein_se_hard_effect; + public int mechanics_food_effects_protein_se_hard_amp; + public int mechanics_food_effects_protein_se_hard_duration; // THIRST public boolean mechanics_thirst_enabled; @@ -140,7 +138,7 @@ public class Config { public int mechanics_thirst_rep_honey_bottle; public int mechanics_thirst_rep_other_water; - public int MECHANICS_HUNGER_START_AMOUNT; + public int mechanics_hunger_start_amount; public int mechanics_hunger_respawn_amount; public boolean MECHANICS_COMPASS_WAYPOINT; @@ -321,7 +319,7 @@ private void loadSettings() { this.MECHANICS_SHARED_WORKBENCH = settings.getBoolean("Mechanics.SharedWorkbench"); this.MECHANICS_PREVENT_NIGHT_SKIP = settings.getBoolean("Mechanics.Prevent-Night-Skip"); this.mechanics_energy_enabled = settings.getBoolean("Mechanics.Energy.enabled"); - this.MECHANICS_ENERGY_START = settings.getDouble("Mechanics.Energy.start-level"); + this.mechanics_energy_start = settings.getDouble("Mechanics.Energy.start-level"); this.mechanics_energy_respawn = settings.getDouble("Mechanics.Energy.respawn-level"); this.MECHANICS_ENERGY_WARNING = settings.getBoolean("Mechanics.Energy.warning"); this.MECHANICS_ENERGY_DRAIN_RATE = settings.getDouble("Mechanics.Energy.drain-rate"); @@ -352,35 +350,33 @@ private void loadSettings() { this.MECHANICS_BEET_STRENGTH = settings.getBoolean("Mechanics.BeetrootStrength"); this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); - this.MECHANICS_FOOD_MAX_CARBS = settings.getInt("Mechanics.FoodDiversity.max-level.carbs"); - this.MECHANICS_FOOD_MAX_SALTS = settings.getInt("Mechanics.FoodDiversity.max-level.salts"); - this.MECHANICS_FOOD_MAX_PROTEINS = settings.getInt("Mechanics.FoodDiversity.max-level.proteins"); + this.mechanics_food_max_level = settings.getInt("Mechanics.FoodDiversity.max-level"); this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); - this.MECHANICS_FOOD_START_CARBS = settings.getInt("Mechanics.FoodDiversity.start-level.carbs"); - this.MECHANICS_FOOD_START_SALTS = settings.getInt("Mechanics.FoodDiversity.start-level.salts"); - this.MECHANICS_FOOD_START_PROTEINS = settings.getInt("Mechanics.FoodDiversity.start-level.proteins"); + this.mechanics_food_start_carbs = settings.getInt("Mechanics.FoodDiversity.start-level.carbs"); + this.mechanics_food_start_vitamins = settings.getInt("Mechanics.FoodDiversity.start-level.vitamins"); + this.mechanics_food_start_protein = settings.getInt("Mechanics.FoodDiversity.start-level.proteins"); this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); this.mechanics_food_respawn_carbs = settings.getInt("Mechanics.FoodDiversity.respawn-level.carbs"); - this.mechanics_food_respawn_salts = settings.getInt("Mechanics.FoodDiversity.respawn-level.salts"); + this.mechanics_food_respawn_vitamins = settings.getInt("Mechanics.FoodDiversity.respawn-level.vitamins"); this.mechanics_food_respawn_proteins = settings.getInt("Mechanics.FoodDiversity.respawn-level.proteins"); - this.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_EASY = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.easy"); - this.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_MEDIUM = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.normal"); - this.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_HARD = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.hard"); - this.MECHANICS_FOOD_EFFECTS_SALTS_EX_AMP = settings.getInt("Mechanics.FoodDiversity.effects.salts.exhaustion-amplifier"); - this.MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_EFFECT = settings.getString("Mechanics.FoodDiversity.effects.salts.status-effects.normal.effect"); - this.MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_AMP = settings.getInt("Mechanics.FoodDiversity.effects.salts.status-effects.normal.amplifier"); - this.MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_DURATION = settings.getInt("Mechanics.FoodDiversity.effects.salts.status-effects.normal.duration"); - this.MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_EFFECT = settings.getString("Mechanics.FoodDiversity.effects.salts.status-effects.hard.effect"); - this.MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_AMP = settings.getInt("Mechanics.FoodDiversity.effects.salts.status-effects.hard.amplifier"); - this.MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_DURATION = settings.getInt("Mechanics.FoodDiversity.effects.salts.status-effects.hard.duration"); - - this.MECHANICS_FOOD_EFFECTS_PROTEIN_EX_AMP = settings.getInt("Mechanics.FoodDiversity.effects.proteins.exhaustion-amplifier"); - this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_EFFECT = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.effect"); - this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_AMP = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.amplifier"); - this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_DURATION = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.duration"); - this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_EFFECT = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.effect"); - this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_AMP = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.amplifier"); - this.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_DURATION = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.duration"); + this.mechanics_food_effects_carbs_ex_amp_easy = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.easy"); + this.mechanics_food_effects_carbs_ex_amp_medium = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.normal"); + this.mechanics_food_effects_carbs_ex_amp_hard = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.hard"); + this.mechanics_food_effects_vitamins_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.exhaustion-amplifier"); + this.mechanics_food_effects_vitamins_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.effect"); + this.mechanics_food_effects_vitamins_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.amplifier"); + this.mechanics_food_effects_vitamins_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.duration"); + this.mechanics_food_effects_vitamins_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.effect"); + this.mechanics_food_effects_vitamins_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.amplifier"); + this.mechanics_food_effects_vitamins_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.duration"); + + this.mechanics_food_effects_protein_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.exhaustion-amplifier"); + this.mechanics_food_effects_protein_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.effect"); + this.mechanics_food_effects_protein_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.amplifier"); + this.mechanics_food_effects_protein_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.duration"); + this.mechanics_food_effects_protein_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.effect"); + this.mechanics_food_effects_protein_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.amplifier"); + this.mechanics_food_effects_protein_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.duration"); this.mechanics_thirst_enabled = settings.getBoolean("Mechanics.Thirst.enabled"); this.mechanics_thirst_starting_amount = settings.getInt("Mechanics.Thirst.starting-amount"); @@ -407,7 +403,7 @@ private void loadSettings() { this.mechanics_thirst_rep_other_water = settings.getInt("Mechanics.Thirst.replenish-level.other-water"); this.mechanics_thirst_rep_water = settings.getInt("Mechanics.Thirst.replenish-level.water"); - this.MECHANICS_HUNGER_START_AMOUNT = settings.getInt("Mechanics.Hunger.Starting-Amount"); + this.mechanics_hunger_start_amount = settings.getInt("Mechanics.Hunger.Starting-Amount"); this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); this.MECHANICS_COMPASS_WAYPOINT = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); diff --git a/src/main/java/tk/shanebee/survival/data/Nutrient.java b/src/main/java/tk/shanebee/survival/data/Nutrient.java index 782b5d6..4dc0f10 100644 --- a/src/main/java/tk/shanebee/survival/data/Nutrient.java +++ b/src/main/java/tk/shanebee/survival/data/Nutrient.java @@ -7,7 +7,7 @@ public enum Nutrient { CARBS("Carbs"), PROTEIN("Protein"), - SALTS("Salts"); + VITAMINS("Vitamins"); private final String name; diff --git a/src/main/java/tk/shanebee/survival/data/PlayerData.java b/src/main/java/tk/shanebee/survival/data/PlayerData.java index 55e1ad0..099d3e9 100644 --- a/src/main/java/tk/shanebee/survival/data/PlayerData.java +++ b/src/main/java/tk/shanebee/survival/data/PlayerData.java @@ -6,7 +6,6 @@ import org.bukkit.World; import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.util.Math; @@ -25,17 +24,14 @@ public class PlayerData implements ConfigurationSerializable { private final Config config = Survival.getInstance().getSurvivalConfig(); - private final int max_carbs = config.MECHANICS_FOOD_MAX_CARBS; - private final int max_proteins = config.MECHANICS_FOOD_MAX_PROTEINS; - private final int max_salts = config.MECHANICS_FOOD_MAX_SALTS; private final UUID uuid; private int thirst; private Map compassMap = new HashMap<>(); // Nutrients - private int proteins; private int carbs; - private int salts; + private int proteins; + private int vitamins; private double energy; // Dunno yet @@ -58,16 +54,16 @@ public class PlayerData implements ConfigurationSerializable { private boolean score_energy = true; private boolean score_nutrients = true; - public PlayerData(OfflinePlayer player, int thirst, int proteins, int carbs, int salts, double energy) { - this(player.getUniqueId(), thirst, proteins, carbs, salts, energy); + public PlayerData(OfflinePlayer player, int thirst, int proteins, int carbs, int vitamins, double energy) { + this(player.getUniqueId(), thirst, proteins, carbs, vitamins, energy); } - public PlayerData(UUID uuid, int thirst, int proteins, int carbs, int salts, double energy) { + public PlayerData(UUID uuid, int thirst, int proteins, int carbs, int vitamins, double energy) { this.uuid = uuid; this.thirst = thirst; this.proteins = proteins; this.carbs = carbs; - this.salts = salts; + this.vitamins = vitamins; this.energy = energy; } @@ -123,16 +119,11 @@ public void increaseThirst(int thirst) { * @return Level of the nutrient */ public int getNutrient(Nutrient nutrient) { - switch (nutrient) { - case PROTEIN: - return proteins; - case CARBS: - return carbs; - case SALTS: - return salts; - default: - throw new IllegalArgumentException("Unexpected value: " + nutrient); - } + return switch (nutrient) { + case PROTEIN -> proteins; + case CARBS -> carbs; + case VITAMINS -> vitamins; + }; } /** @@ -144,13 +135,13 @@ public int getNutrient(Nutrient nutrient) { public void setNutrient(Nutrient nutrient, int value) { switch (nutrient) { case PROTEIN: - this.proteins = Math.clamp(value, 0, this.max_proteins); + this.proteins = Math.clamp(value, 0, this.config.mechanics_food_max_level); break; case CARBS: - this.carbs = Math.clamp(value, 0, this.max_carbs); + this.carbs = Math.clamp(value, 0, this.config.mechanics_food_max_level); break; - case SALTS: - this.salts = Math.clamp(value, 0, this.max_salts); + case VITAMINS: + this.vitamins = Math.clamp(value, 0, this.config.mechanics_food_max_level); break; default: throw new IllegalArgumentException("Unexpected value: " + nutrient); @@ -162,12 +153,12 @@ public void setNutrient(Nutrient nutrient, int value) { * * @param carbs Level of carbs to set * @param proteins Level of proteins to set - * @param salts Level of salts to set + * @param vitamins Level of vitamins to set */ - public void setNutrients(int carbs, int proteins, int salts) { + public void setNutrients(int carbs, int proteins, int vitamins) { setNutrient(Nutrient.CARBS, carbs); setNutrient(Nutrient.PROTEIN, proteins); - setNutrient(Nutrient.SALTS, salts); + setNutrient(Nutrient.VITAMINS, vitamins); } /** @@ -179,13 +170,13 @@ public void setNutrients(int carbs, int proteins, int salts) { public void increaseNutrient(Nutrient nutrient, int value) { switch (nutrient) { case PROTEIN: - this.proteins = Math.clamp(this.proteins + value, 0, this.max_proteins); + this.proteins = Math.clamp(this.proteins + value, 0, this.config.mechanics_food_max_level); break; case CARBS: - this.carbs = Math.clamp(this.carbs + value, 0, this.max_carbs); + this.carbs = Math.clamp(this.carbs + value, 0, this.config.mechanics_food_max_level); break; - case SALTS: - this.salts = Math.clamp(this.salts + value, 0, this.max_salts); + case VITAMINS: + this.vitamins = Math.clamp(this.vitamins + value, 0, this.config.mechanics_food_max_level); break; default: throw new IllegalArgumentException("Unexpected value: " + nutrient); @@ -261,26 +252,17 @@ public void setStat(Stat stat, int value) { * @return Value of stat */ public int getStat(Stat stat) { - switch (stat) { - case CHARGE: - return this.charge; - case CHARGING: - return this.charging; - case SPIN: - return this.spin; - case DUAL_WIELD: - return this.dualWield; - case HEALING: - return this.healing; - case HEAL_TIMES: - return this.healTimes; - case RECURVE_FIRING: - return this.recurveFiring; - case RECURVE_COOLDOWN: - return this.recurveCooldown; - default: - throw new IllegalArgumentException("Unexpected value: " + stat); - } + return switch (stat) { + case CHARGE -> this.charge; + case CHARGING -> this.charging; + case SPIN -> this.spin; + case DUAL_WIELD -> this.dualWield; + case HEALING -> this.healing; + case HEAL_TIMES -> this.healTimes; + case RECURVE_FIRING -> this.recurveFiring; + case RECURVE_COOLDOWN -> this.recurveCooldown; + default -> throw new IllegalArgumentException("Unexpected value: " + stat); + }; } /** @@ -308,18 +290,13 @@ public boolean isLocalChat() { * @return True if this info is displayed on the player's scoreboard */ public boolean isInfoDisplayed(Info info) { - switch (info) { - case HUNGER: - return score_hunger; - case THIRST: - return score_thirst; - case ENERGY: - return score_energy; - case NUTRIENTS: - return score_nutrients; - default: - throw new IllegalArgumentException("Unexpected value: " + info); - } + return switch (info) { + case HUNGER -> this.score_hunger; + case THIRST -> this.score_thirst; + case ENERGY -> this.score_energy; + case NUTRIENTS -> this.score_nutrients; + default -> throw new IllegalArgumentException("Unexpected value: " + info); + }; } /** @@ -401,18 +378,18 @@ public Location getCompassWaypoint(World world) { @Override public Map serialize() { Map result = new LinkedHashMap<>(); - result.put("uuid", uuid.toString()); - result.put("thirst", thirst); - result.put("energy", energy); - result.put("nutrients.proteins", proteins); - result.put("nutrients.carbs", carbs); - result.put("nutrients.salts", salts); - result.put("local-chat", localChat); - result.put("score.hunger", score_hunger); - result.put("score.thirst", score_thirst); - result.put("score.energy", score_energy); - result.put("score.nutrients", score_nutrients); - result.put("compass", compassMap); + result.put("uuid", this.uuid.toString()); + result.put("thirst", this.thirst); + result.put("energy", this.energy); + result.put("nutrients.proteins", this.proteins); + result.put("nutrients.carbs", this.carbs); + result.put("nutrients.vitamins", this.vitamins); + result.put("local-chat", this.localChat); + result.put("score.hunger", this.score_hunger); + result.put("score.thirst", this.score_thirst); + result.put("score.energy", this.score_energy); + result.put("score.nutrients", this.score_nutrients); + result.put("compass", this.compassMap); return result; } @@ -428,9 +405,9 @@ public static PlayerData deserialize(Map args) { double energy = getDouble(args, "energy", 20.0); int proteins = ((Integer) args.get("nutrients.proteins")); int carbs = ((Integer) args.get("nutrients.carbs")); - int salts = ((Integer) args.get("nutrients.salts")); + int vitamins = ((Integer) args.get("nutrients.vitamins")); - PlayerData data = new PlayerData(uuid, thirst, proteins, carbs, salts, energy); + PlayerData data = new PlayerData(uuid, thirst, proteins, carbs, vitamins, energy); boolean localChat = getBool(args, "local-chat", false); data.setLocalChat(localChat); @@ -522,8 +499,8 @@ public void setData(DataType type, Number value) { case CARBS: setNutrient(Nutrient.CARBS, value.intValue()); break; - case SALTS: - setNutrient(Nutrient.SALTS, value.intValue()); + case VITAMINS: + setNutrient(Nutrient.VITAMINS, value.intValue()); break; case HUNGER: setHunger(value.doubleValue()); @@ -540,29 +517,22 @@ public void setData(DataType type, Number value) { * @return Value from this player data */ public double getData(DataType type) { - switch (type) { - case THIRST: - return getThirst(); - case ENERGY: - return getEnergy(); - case PROTEINS: - return getNutrient(Nutrient.PROTEIN); - case CARBS: - return getNutrient(Nutrient.CARBS); - case SALTS: - return getNutrient(Nutrient.SALTS); - case HUNGER: - return getHunger(); - default: - throw new IllegalArgumentException("Unknown type: " + type); - } + return switch (type) { + case THIRST -> getThirst(); + case ENERGY -> getEnergy(); + case PROTEINS -> getNutrient(Nutrient.PROTEIN); + case CARBS -> getNutrient(Nutrient.CARBS); + case VITAMINS -> getNutrient(Nutrient.VITAMINS); + case HUNGER -> getHunger(); + default -> throw new IllegalArgumentException("Unknown type: " + type); + }; } public enum DataType { THIRST, ENERGY, PROTEINS, - SALTS, + VITAMINS, CARBS, HUNGER; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java b/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java index 71e03c9..81b45cc 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java @@ -32,7 +32,7 @@ public FoodDiversityConsume(Survival plugin) { Config config = plugin.getSurvivalConfig(); RESPAWN_PROTEIN = config.mechanics_food_respawn_proteins; RESPAWN_CARBS = config.mechanics_food_respawn_carbs; - RESPAWN_SALTS = config.mechanics_food_respawn_salts; + RESPAWN_SALTS = config.mechanics_food_respawn_vitamins; } @EventHandler(priority = EventPriority.HIGHEST) @@ -90,14 +90,14 @@ private void addStats(Player player, Nutrient nutrient, int point) { private void addStats(Player player, Nutrition nutrition) { addStats(player, Nutrient.CARBS, nutrition.getCarbs()); addStats(player, Nutrient.PROTEIN, nutrition.getProteins()); - addStats(player, Nutrient.SALTS, nutrition.getVitamins()); + addStats(player, Nutrient.VITAMINS, nutrition.getVitamins()); } private void setStats(Player player, int carbs, int proteins, int vitamins) { PlayerData playerData = playerManager.getPlayerData(player); playerData.setNutrient(Nutrient.CARBS, carbs); playerData.setNutrient(Nutrient.PROTEIN, proteins); - playerData.setNutrient(Nutrient.SALTS, vitamins); + playerData.setNutrient(Nutrient.VITAMINS, vitamins); } private double addMultiplier(Player player) { @@ -118,7 +118,7 @@ private double addMultiplier(Player player) { default: } } - if (playerData.getNutrient(Nutrient.SALTS) <= 100) { + if (playerData.getNutrient(Nutrient.VITAMINS) <= 100) { switch (player.getWorld().getDifficulty()) { case EASY: damageMultiplier *= 1.25; diff --git a/src/main/java/tk/shanebee/survival/managers/Placeholders.java b/src/main/java/tk/shanebee/survival/managers/Placeholders.java index 4b81d16..a5e5480 100644 --- a/src/main/java/tk/shanebee/survival/managers/Placeholders.java +++ b/src/main/java/tk/shanebee/survival/managers/Placeholders.java @@ -112,7 +112,7 @@ public String onPlaceholderRequest(Player p, String identifier) { return String.valueOf(playerData.getNutrient(Nutrient.PROTEIN)); } if (identifier.equalsIgnoreCase("player_nutrients_salts")) { - return String.valueOf(playerData.getNutrient(Nutrient.SALTS)); + return String.valueOf(playerData.getNutrient(Nutrient.VITAMINS)); } return null; } diff --git a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java index 5d6be8d..fd8f93b 100644 --- a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java +++ b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java @@ -26,18 +26,9 @@ */ public class PlayerManager implements Listener { - private final Lang lang; + private final Config config; private final PlayerDataConfig playerDataConfig; - private final int thirstStartingAmount; - private final int hungerStartingAmount; - private final double energyStartingAmount; - private final int proteinStartingAmount; - private final int carbsStartingAmount; - private final int saltsStartingAmount; - private final int maxProtein; - private final int maxCarbs; - private final int maxSalts; // Store all the active PlayerData private final Map playerDataMap; @@ -46,16 +37,7 @@ public PlayerManager(Survival plugin, Map playerDataMap) { this.playerDataMap = playerDataMap; this.lang = plugin.getLang(); this.playerDataConfig = plugin.getPlayerDataConfig(); - Config config = plugin.getSurvivalConfig(); - this.thirstStartingAmount = config.mechanics_thirst_starting_amount; - this.hungerStartingAmount = config.MECHANICS_HUNGER_START_AMOUNT; - this.energyStartingAmount = config.MECHANICS_ENERGY_START; - this.proteinStartingAmount = config.MECHANICS_FOOD_START_PROTEINS; - this.carbsStartingAmount = config.MECHANICS_FOOD_START_CARBS; - this.saltsStartingAmount = config.MECHANICS_FOOD_START_SALTS; - this.maxCarbs = config.MECHANICS_FOOD_MAX_CARBS; - this.maxProtein = config.MECHANICS_FOOD_MAX_PROTEINS; - this.maxSalts = config.MECHANICS_FOOD_MAX_SALTS; + this.config = plugin.getSurvivalConfig(); } /** @@ -86,9 +68,14 @@ public Collection getAllPlayerData() { */ public PlayerData createNewPlayerData(Player player) { UUID uuid = player.getUniqueId(); - setHunger(player, hungerStartingAmount); - - PlayerData playerData = new PlayerData(uuid, this.thirstStartingAmount, this.proteinStartingAmount, this.carbsStartingAmount, this.saltsStartingAmount, this.energyStartingAmount); + setHunger(player, this.config.mechanics_hunger_start_amount); + + PlayerData playerData = new PlayerData(uuid, + this.config.mechanics_thirst_starting_amount, + this.config.mechanics_food_start_protein, + this.config.mechanics_food_start_carbs, + this.config.mechanics_food_start_vitamins, + this.config.mechanics_energy_start); this.playerDataMap.put(uuid, playerData); savePlayerData(playerData); return playerData; @@ -243,20 +230,20 @@ public List getNutrientsVisual(Player player) { int carbs = data.getNutrient(Nutrient.CARBS); int protein = data.getNutrient(Nutrient.PROTEIN); - int salts = data.getNutrient(Nutrient.SALTS); + int vitamins = data.getNutrient(Nutrient.VITAMINS); nutrients.add("<#A0E853>" + this.lang.carbohydrates); nutrients.add("<#CE784D>" + this.lang.protein); nutrients.add("<#53DDE8>" + this.lang.vitamins); - double carbGrad = ((double) carbs / this.maxCarbs) - 1; - double proteinGrad = ((double) protein / this.maxProtein) - 1; - double saltsGrad = ((double) salts / this.maxSalts) - 1; + double carbGrad = ((double) carbs / this.config.mechanics_food_max_level) - 1; + double proteinGrad = ((double) protein / this.config.mechanics_food_max_level) - 1; + double vitaminsGrad = ((double) vitamins / this.config.mechanics_food_max_level) - 1; // green - green - green - yellow - red nutrients.add("" + carbs); nutrients.add("" + protein); - nutrients.add("" + salts); + nutrients.add("" + vitamins); return nutrients; } diff --git a/src/main/java/tk/shanebee/survival/managers/StatusManager.java b/src/main/java/tk/shanebee/survival/managers/StatusManager.java index 5bba9d9..7ccecb8 100644 --- a/src/main/java/tk/shanebee/survival/managers/StatusManager.java +++ b/src/main/java/tk/shanebee/survival/managers/StatusManager.java @@ -78,7 +78,7 @@ public static void setNutrients(Player player, Nutrients nutrient, int level) { PlayerData pd = playerManager.getPlayerData(player); switch (nutrient) { case SALTS: - pd.setNutrient(Nutrient.SALTS, level); + pd.setNutrient(Nutrient.VITAMINS, level); break; case CARBS: pd.setNutrient(Nutrient.CARBS, level); @@ -97,7 +97,7 @@ public static int getNutrients(Player player, Nutrients nutrient) { PlayerData pd = playerManager.getPlayerData(player); switch (nutrient) { case SALTS: - return pd.getNutrient(Nutrient.SALTS); + return pd.getNutrient(Nutrient.VITAMINS); case CARBS: return pd.getNutrient(Nutrient.CARBS); case PROTEIN: diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java b/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java index 66dadd3..82b99a8 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java +++ b/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java @@ -33,7 +33,7 @@ public void run() { player.sendMessage(ChatColor.DARK_GREEN + lang.carbohydrates_lack); } - if (playerData.getNutrient(Nutrient.SALTS) <= 180) { + if (playerData.getNutrient(Nutrient.VITAMINS) <= 180) { player.sendMessage(ChatColor.BLUE + lang.vitamins_lack); } diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java b/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java index b9b230d..1bdf08b 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java @@ -8,7 +8,6 @@ import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.managers.StatusManager; class NutrientsDrain extends BukkitRunnable { @@ -28,7 +27,7 @@ public void run() { playerData.increaseNutrient(Nutrient.CARBS, -8); playerData.increaseNutrient(Nutrient.PROTEIN, -2); - playerData.increaseNutrient(Nutrient.SALTS, -3); + playerData.increaseNutrient(Nutrient.VITAMINS, -3); } } } diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java b/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java index c52f18f..b59e19f 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java +++ b/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java @@ -2,124 +2,132 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; +import org.jetbrains.annotations.Nullable; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; +import tk.shanebee.survival.util.Utils; class NutrientsEffect extends BukkitRunnable { - private final Config config; - private final PlayerManager playerManager; - private PotionEffect SALTS_NORMAL = null; - private PotionEffect SALTS_HARD = null; - private PotionEffect PROTEIN_NORMAL = null; - private PotionEffect PROTEIN_HARD = null; + private final Config config; + private final PlayerManager playerManager; + private PotionEffect VITAMINS_NORMAL = null; + private PotionEffect VITAMINS_HARD = null; + private PotionEffect PROTEIN_NORMAL = null; + private PotionEffect PROTEIN_HARD = null; - NutrientsEffect(Survival plugin) { - this.config = plugin.getSurvivalConfig(); - this.playerManager = plugin.getPlayerManager(); - loadEffects(); - this.runTaskTimer(plugin, -1, 320); - } + NutrientsEffect(Survival plugin) { + this.config = plugin.getSurvivalConfig(); + this.playerManager = plugin.getPlayerManager(); + loadEffects(); + this.runTaskTimer(plugin, -1, 320); + } - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - PlayerData playerData = playerManager.getPlayerData(player); + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) { + if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; - if (playerData.getNutrient(Nutrient.CARBS) <= 0) { - switch (player.getWorld().getDifficulty()) { - case EASY: - player.setExhaustion(player.getExhaustion() + Math.max(config.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_EASY, 0)); - break; - case NORMAL: - player.setExhaustion(player.getExhaustion() + Math.max(config.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_MEDIUM, 0)); - break; - case HARD: - player.setExhaustion(player.getExhaustion() + Math.max(config.MECHANICS_FOOD_EFFECTS_CARBS_EX_AMP_HARD, 0)); - break; - default: - } - } + World world = player.getWorld(); + PlayerData playerData = playerManager.getPlayerData(player); - if (playerData.getNutrient(Nutrient.SALTS) <= 0) { - player.setExhaustion(player.getExhaustion() + Math.max(config.MECHANICS_FOOD_EFFECTS_SALTS_EX_AMP, 0)); - switch (player.getWorld().getDifficulty()) { - case NORMAL: - if (SALTS_NORMAL != null) { - player.addPotionEffect(SALTS_NORMAL, true); - } - break; - case HARD: - if (SALTS_HARD != null) { - player.addPotionEffect(SALTS_HARD, true); - } - break; - default: - } - } + if (playerData.getNutrient(Nutrient.CARBS) <= 0) { + switch (world.getDifficulty()) { + case EASY: + player.setExhaustion(player.getExhaustion() + Math.max(this.config.mechanics_food_effects_carbs_ex_amp_easy, 0)); + break; + case NORMAL: + player.setExhaustion(player.getExhaustion() + Math.max(this.config.mechanics_food_effects_carbs_ex_amp_medium, 0)); + break; + case HARD: + player.setExhaustion(player.getExhaustion() + Math.max(this.config.mechanics_food_effects_carbs_ex_amp_hard, 0)); + break; + default: + } + } - if (playerData.getNutrient(Nutrient.PROTEIN) <= 0) { - player.setExhaustion(player.getExhaustion() + Math.max(config.MECHANICS_FOOD_EFFECTS_PROTEIN_EX_AMP, 0)); - switch (player.getWorld().getDifficulty()) { - case NORMAL: - if (PROTEIN_NORMAL != null) { - player.addPotionEffect(PROTEIN_NORMAL, true); - } - break; - case HARD: - if (PROTEIN_HARD != null) { - player.addPotionEffect(PROTEIN_HARD, true); - } - break; - default: - } - } - } - } - } + if (playerData.getNutrient(Nutrient.VITAMINS) <= 0) { + player.setExhaustion(player.getExhaustion() + Math.max(this.config.mechanics_food_effects_vitamins_ex_amp, 0)); + switch (world.getDifficulty()) { + case NORMAL: + if (VITAMINS_NORMAL != null) { + player.addPotionEffect(VITAMINS_NORMAL, true); + } + break; + case HARD: + if (VITAMINS_HARD != null) { + player.addPotionEffect(VITAMINS_HARD, true); + } + break; + default: + } + } - private void loadEffects() { - PotionEffectType s_normal_type = getType(config.MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_EFFECT); - if (s_normal_type != null) { - int s_normal_amp = config.MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_AMP; - int s_normal_dur = config.MECHANICS_FOOD_EFFECTS_SALTS_SE_NORMAL_DURATION; - SALTS_NORMAL = new PotionEffect(s_normal_type, s_normal_dur * 20, s_normal_amp); - } - PotionEffectType s_hard_type = getType(config.MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_EFFECT); - if (s_hard_type != null) { - int s_hard_amp = config.MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_AMP; - int s_hard_dur = config.MECHANICS_FOOD_EFFECTS_SALTS_SE_HARD_DURATION; - SALTS_HARD = new PotionEffect(s_hard_type, s_hard_dur * 20, s_hard_amp); - } + if (playerData.getNutrient(Nutrient.PROTEIN) <= 0) { + player.setExhaustion(player.getExhaustion() + Math.max(config.mechanics_food_effects_protein_ex_amp, 0)); + switch (world.getDifficulty()) { + case NORMAL: + if (PROTEIN_NORMAL != null) { + player.addPotionEffect(PROTEIN_NORMAL, true); + } + break; + case HARD: + if (PROTEIN_HARD != null) { + player.addPotionEffect(PROTEIN_HARD, true); + } + break; + default: + } + } + } + } - PotionEffectType p_normal_type = getType(config.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_EFFECT); - if (p_normal_type != null) { - int p_normal_amp = config.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_AMP; - int p_normal_dur = config.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_NORMAL_DURATION; - PROTEIN_NORMAL = new PotionEffect(p_normal_type, p_normal_dur * 20, p_normal_amp); - } - PotionEffectType p_hard_type = getType(config.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_EFFECT); - if (p_hard_type != null) { - int p_hard_amp = config.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_AMP; - int p_hard_dur = config.MECHANICS_FOOD_EFFECTS_PROTEIN_SE_HARD_DURATION; - PROTEIN_HARD = new PotionEffect(p_hard_type, p_hard_dur * 20, p_hard_amp); - } - } + private void loadEffects() { + PotionEffectType vitamins_normal_type = getType(config.mechanics_food_effects_vitamins_se_normal_effect); + if (vitamins_normal_type != null) { + int vitamins_normal_amp = this.config.mechanics_food_effects_vitamins_se_normal_amp; + int vitamins_normal_dur = this.config.mechanics_food_effects_vitamins_se_normal_duration; + VITAMINS_NORMAL = new PotionEffect(vitamins_normal_type, vitamins_normal_dur * 20, vitamins_normal_amp, true, false, false); + } + PotionEffectType vitamins_hard_type = getType(config.mechanics_food_effects_vitamins_se_hard_effect); + if (vitamins_hard_type != null) { + int vitamins_hard_amp = this.config.mechanics_food_effects_vitamins_se_hard_amp; + int vitamins_hard_dur = this.config.mechanics_food_effects_vitamins_se_hard_duration; + VITAMINS_HARD = new PotionEffect(vitamins_hard_type, vitamins_hard_dur * 20, vitamins_hard_amp, true, false, false); + } - private PotionEffectType getType(String potionType) { - try { - return PotionEffectType.getByName(potionType); - } catch (IllegalArgumentException ex) { - return null; - } - } + PotionEffectType protein_normal_type = getType(config.mechanics_food_effects_protein_se_normal_effect); + if (protein_normal_type != null) { + int protein_normal_amp = this.config.mechanics_food_effects_protein_se_normal_amp; + int protein_normal_dur = this.config.mechanics_food_effects_protein_se_normal_duration; + PROTEIN_NORMAL = new PotionEffect(protein_normal_type, protein_normal_dur * 20, protein_normal_amp, true, false, false); + } + PotionEffectType protein_hard_type = getType(config.mechanics_food_effects_protein_se_hard_effect); + if (protein_hard_type != null) { + int protein_hard_amp = this.config.mechanics_food_effects_protein_se_hard_amp; + int protein_hard_dur = this.config.mechanics_food_effects_protein_se_hard_duration; + PROTEIN_HARD = new PotionEffect(protein_hard_type, protein_hard_dur * 20, protein_hard_amp, true, false, false); + } + } + + private @Nullable PotionEffectType getType(String potionType) { + NamespacedKey key = NamespacedKey.fromString(potionType); + if (key != null) { + PotionEffectType potionEffectType = Registry.EFFECT.get(key); + if (potionEffectType != null) return potionEffectType; + } + Utils.logMini("Invalid potion effect type: '%s'", potionType); + return null; + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1f5c0f0..804be26 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -127,20 +127,17 @@ Mechanics: FoodDiversity: enabled: true # Max level for each nutritional value - max-level: - carbs: 1000 - salts: 1000 - proteins: 1000 + max-level: 1000 # The level the player will start with start-level: proteins: 240 carbs: 960 - salts: 360 + vitamins: 360 # The level the player will get after dying respawn-level: proteins: 120 carbs: 480 - salts: 180 + vitamins: 180 # Each nutrition section has different effects when player's levels are too low effects: carbs: @@ -149,20 +146,19 @@ Mechanics: easy: 2 normal: 4 hard: 8 - salts: + vitamins: exhaustion-amplifier: 1 # Status effects/amplifiers can differ based on server difficulty level status-effects: normal: # The effect (uses Bukkit PotionEffectTypes) - # You can find these effects here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html - effect: WEAKNESS + effect: "minecraft:weakness" # The amplifying level (0 = tier 1, 1 = tier 2) amplifier: 0 # The time in seconds this effect will last for duration: 20 hard: - effect: WEAKNESS + effect: "minecraft:weakness" amplifier: 1 duration: 20 proteins: @@ -170,11 +166,11 @@ Mechanics: # Status effects/amplifiers can differ based on server difficulty level status-effects: normal: - effect: WEAKNESS + effect: "minecraft:weakness" amplifier: 0 duration: 20 hard: - effect: WEAKNESS + effect: "minecraft:weakness" amplifier: 1 duration: 20 From 50227619b30d417582b14beb2f8acd3dac884ed2 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 12:03:07 -0800 Subject: [PATCH 039/133] More message cleanup --- .../java/tk/shanebee/survival/Survival.java | 66 +- .../tk/shanebee/survival/config/Config.java | 766 +++++++++--------- .../tk/shanebee/survival/config/Lang.java | 9 +- .../tk/shanebee/survival/item/ItemConfig.java | 5 +- .../survival/managers/BlockManager.java | 20 +- 5 files changed, 431 insertions(+), 435 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/Survival.java b/src/main/java/tk/shanebee/survival/Survival.java index 71dbafd..86ea49b 100644 --- a/src/main/java/tk/shanebee/survival/Survival.java +++ b/src/main/java/tk/shanebee/survival/Survival.java @@ -80,7 +80,7 @@ public void onLoad() { .silentLogs(true) .skipReloadDatapacks(true)); } catch (UnsupportedVersionException ignore) { - Utils.log("CommandAPI does not support this version of Minecraft, will update soon."); + Utils.logMini("CommandAPI does not support this version of Minecraft, will update soon."); } } @@ -91,10 +91,10 @@ public void onEnable() { // VERSION CHECK if (!Utils.isRunningMinecraft(1, 16)) { String ver = Bukkit.getServer().getBukkitVersion().split("-")[0]; - Utils.log("&c-----------------------------------------------------------"); - Utils.log("&cYour version is not supported: &b" + ver); - Utils.log("&eThis plugin only works on Minecraft &b1.16+"); - Utils.log("&c-----------------------------------------------------------"); + Utils.logMini("-----------------------------------------------------------"); + Utils.logMini("Your version is not supported: " + ver); + Utils.logMini("This plugin only works on Minecraft 1.16+"); + Utils.logMini("-----------------------------------------------------------"); loaded = false; Bukkit.getPluginManager().disablePlugin(this); return; @@ -102,10 +102,10 @@ public void onEnable() { // SPIGOT CHECK if (!Utils.isRunningSpigot()) { - Utils.log("&c-----------------------------------------------------------"); - Utils.log("&7Your server software is not supported: &c" + Bukkit.getName()); - Utils.log("&7This plugin will only work on &aSpigot &7or &aPaper."); - Utils.log("&c-----------------------------------------------------------"); + Utils.logMini("-----------------------------------------------------------"); + Utils.logMini("Your server software is not supported: " + Bukkit.getName()); + Utils.logMini("This plugin will only work on Spigot or Paper."); + Utils.logMini("-----------------------------------------------------------"); loaded = false; Bukkit.getPluginManager().disablePlugin(this); return; @@ -121,14 +121,14 @@ public void onEnable() { // LOAD RESOURCE PACK if (config.settings_resource_pack_enabled) { if (config.settings_resource_pack_url.isEmpty()) { - Utils.log("&cResource Pack is not set! Plugin disabling"); + Utils.logMini("Resource Pack is not set! Plugin disabling"); Bukkit.getPluginManager().disablePlugin(this); return; } else { - Utils.log("&7Resource pack &aenabled"); + Utils.logMini("Resource pack enabled"); } } else { - Utils.log("&eResource Pack disabled"); + Utils.logMini("Resource Pack disabled"); } Rates.add(config.DROP_RATE_FLINT); @@ -136,11 +136,11 @@ public void onEnable() { Rates.add(config.mechanics_thirst_drain_rate); for (double i : Rates) { if (i <= 0) { - Utils.log("&cRate values cannot be zero or below! (Check config.yml) Plugin disabled."); + Utils.logMini("Rate values cannot be zero or below! (Check config.yml) Plugin disabled."); Bukkit.getPluginManager().disablePlugin(this); return; } else if (i > 1) { - Utils.log("&cRate values cannot be above 1! (Check config.yml) Plugin disabled."); + Utils.logMini("Rate values cannot be above 1! (Check config.yml) Plugin disabled."); Bukkit.getPluginManager().disablePlugin(this); return; } @@ -162,7 +162,7 @@ public void onEnable() { // LOAD PLACEHOLDERS if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { new Placeholders(this).register(); - Utils.log("&7PlaceholderAPI placeholders &aenabled"); + Utils.logMini("PlaceholderAPI placeholders enabled"); } // REGISTER EVENTS & COMMANDS @@ -173,32 +173,32 @@ public void onEnable() { // LOAD CUSTOM RECIPES // This is a helper for other plugins that wipe custom recipes - secret hidden config if (config.RECIPE_DELAY > 0) { - Utils.log("&7Custom recipe loading delayed... will load in &b" + config.RECIPE_DELAY + "&7 second[s]"); + Utils.logMini("Custom recipe loading delayed... will load in " + config.RECIPE_DELAY + " second[s]"); Bukkit.getScheduler().runTaskLater(this, () -> { this.recipeManager.loadCustomRecipes(); - Utils.log("&7Custom recipes &aloaded"); + Utils.logMini("Custom recipes loaded"); }, config.RECIPE_DELAY * 20L); } else { this.recipeManager.loadCustomRecipes(); - Utils.log("&7Custom recipes &aloaded"); + Utils.logMini("Custom recipes loaded"); } // LOAD METRICS Metrics metrics = new Metrics(this); - Utils.log("&7Metrics " + (metrics.isEnabled() ? "&aenabled" : "&cdisabled")); + Utils.logMini("Metrics " + (metrics.isEnabled() ? "enabled" : "disabled")); - Utils.log("&aSuccessfully loaded &7in " + (System.currentTimeMillis() - time) + " milliseconds"); + Utils.logMini("Successfully loaded in " + (System.currentTimeMillis() - time) + " milliseconds"); // BETA WARNING if (this.getDescription().getVersion().contains("Beta")) { - Utils.log("&eYOU ARE RUNNING A BETA VERSION, PLEASE USE WITH CAUTION!"); + Utils.logMini("YOU ARE RUNNING A BETA VERSION, PLEASE USE WITH CAUTION!"); } } public void onDisable() { if (!loaded) return; - Utils.log("&eShutting down"); + Utils.logMini("Shutting down"); getServer().getScheduler().cancelTasks(this); //getServer().resetRecipes(); <-- why is this even here? @@ -228,7 +228,7 @@ public void onDisable() { } } } - Utils.log("&eSuccessfully disabled"); + Utils.logMini("Successfully disabled"); } private void playerDataLoader(boolean load) { @@ -243,7 +243,7 @@ private void playerDataLoader(boolean load) { } } if (size > 0) { - Utils.log("Loading player data for &b" + size + " player" + (size != 1 ? "s" : "")); + Utils.logMini("Loading player data for " + size + " player" + (size != 1 ? "s" : "")); } } else { // Unload player data - if players are still online @@ -253,7 +253,7 @@ private void playerDataLoader(boolean load) { // Clear/delete player data map to prevent memory leaks playerDataMap.clear(); playerDataMap = null; - Utils.log("Unloading player data for &b" + size + " player" + (size != 1 ? "s" : "")); + Utils.logMini("Unloading player data for " + size + " player" + (size != 1 ? "s" : "")); } } @@ -277,7 +277,7 @@ public void loadSettings(CommandSender sender) { if (mat != null) { chairBlocks.add(mat); } else { - Utils.log("&cInvalid chair block material: &7" + type); + Utils.logMini("Invalid chair block material: " + type); } } this.playerDataConfig = new PlayerDataConfig(this); @@ -287,14 +287,14 @@ public void loadSettings(CommandSender sender) { private void onServerReload(ServerLoadEvent e) { if (e.getType() == ServerLoadEvent.LoadType.RELOAD) { for (Player player : getServer().getOnlinePlayers()) { - Utils.sendColoredMsg(player, prefix + "&cDETECTED SERVER RELOAD"); - Utils.sendColoredMsg(player, " &6Recipes may have been impacted"); - Utils.sendColoredMsg(player, " &6Relog to update your recipes"); + Utils.sendColoredMsg(player, prefix + "DETECTED SERVER RELOAD"); + Utils.sendColoredMsg(player, " Recipes may have been impacted"); + Utils.sendColoredMsg(player, " Relog to update your recipes"); } - Utils.sendColoredConsoleMsg(prefix + "&cDETECTED SERVER RELOAD"); - Utils.sendColoredConsoleMsg(" &7- &6Server reloads will impact recipes"); - Utils.sendColoredConsoleMsg(" &7- &6Players will need to relog to re-enable custom recipes"); - Utils.sendColoredConsoleMsg(" &7- &6A warning has been sent to each player that is online right now"); + Utils.sendColoredConsoleMsg(prefix + "DETECTED SERVER RELOAD"); + Utils.sendColoredConsoleMsg(" - Server reloads will impact recipes"); + Utils.sendColoredConsoleMsg(" - Players will need to relog to re-enable custom recipes"); + Utils.sendColoredConsoleMsg(" - A warning has been sent to each player that is online right now"); } } diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 015f56e..ec64e47 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -12,50 +12,49 @@ public class Config { - private final Survival plugin; - private FileConfiguration settings; - private File configFile; - private final String prefix; + private final Survival plugin; + private FileConfiguration settings; + private File configFile; - public String LANG; + public String LANG; - public String settings_resource_pack_url; - public boolean settings_resource_pack_enabled; + public String settings_resource_pack_url; + public boolean settings_resource_pack_enabled; - public int settings_local_chat_distance; + public int settings_local_chat_distance; - public boolean WELCOME_GUIDE_ENABLED; - public boolean WELCOME_GUIDE_NEW_PLAYERS; - public int WELCOME_GUIDE_DELAY; + public boolean WELCOME_GUIDE_ENABLED; + public boolean WELCOME_GUIDE_NEW_PLAYERS; + public int WELCOME_GUIDE_DELAY; - // SURVIVAL - public boolean SURVIVAL_ENABLED; - public boolean SURVIVAL_LIMITED_CRAFTING; + // SURVIVAL + public boolean SURVIVAL_ENABLED; + public boolean SURVIVAL_LIMITED_CRAFTING; public boolean SURVIVAL_UNLOCK_ALL_RECIPES; public boolean SURVIVAL_REMOVE_WOOD_TOOLS; - public boolean SURVIVAL_TORCH; - public boolean SURVIVAL_UPDATE_MERCHANT_TRADES; + public boolean SURVIVAL_TORCH; + public boolean SURVIVAL_UPDATE_MERCHANT_TRADES; - public boolean BREAK_ONLY_WITH_SICKLE; - public boolean BREAK_ONLY_WITH_SHOVEL; - public boolean BREAK_ONLY_WITH_AXE; - public boolean BREAK_ONLY_WITH_PICKAXE; - public boolean BREAK_ONLY_WITH_SHEARS; - public boolean PLACE_ONLY_WITH_HAMMER; + public boolean BREAK_ONLY_WITH_SICKLE; + public boolean BREAK_ONLY_WITH_SHOVEL; + public boolean BREAK_ONLY_WITH_AXE; + public boolean BREAK_ONLY_WITH_PICKAXE; + public boolean BREAK_ONLY_WITH_SHEARS; + public boolean PLACE_ONLY_WITH_HAMMER; - public boolean SURVIVAL_SICKLE_FLINT; - public boolean SURVIVAL_SICKLE_STONE; - public boolean SURVIVAL_SICKLE_IRON; - public boolean SURVIVAL_SICKLE_DIAMOND; + public boolean SURVIVAL_SICKLE_FLINT; + public boolean SURVIVAL_SICKLE_STONE; + public boolean SURVIVAL_SICKLE_IRON; + public boolean SURVIVAL_SICKLE_DIAMOND; - public double DROP_RATE_STICK; - public double DROP_RATE_FLINT; + public double DROP_RATE_STICK; + public double DROP_RATE_FLINT; - // MECHANICS - public boolean MECHANICS_SHARED_WORKBENCH; - public boolean MECHANICS_PREVENT_NIGHT_SKIP; + // MECHANICS + public boolean MECHANICS_SHARED_WORKBENCH; + public boolean MECHANICS_PREVENT_NIGHT_SKIP; - // ENERGY + // ENERGY public boolean mechanics_energy_enabled; public double mechanics_energy_start; public double mechanics_energy_respawn; @@ -65,29 +64,29 @@ public class Config { public double MECHANICS_ENERGY_REFRESH_RATE_BED; public double MECHANICS_ENERGY_REFRESH_RATE_CHAIR; public double MECHANICS_ENERGY_EXHAUSTION; - public boolean MECHANICS_ENERGY_COFFEE_ENABLED; - public boolean MECHANICS_ENERGY_ABSORPTION; - public boolean MECHANICS_ENERGY_HASTE; - - public boolean MECHANICS_SLOW_ARMOR; - public boolean MECHANICS_REINFORCED_ARMOR; - public boolean MECHANICS_BOW; - public boolean MECHANICS_RECURVED_BOW; - public boolean MECHANICS_GRAPPLING_HOOK; - public boolean MECHANICS_MEDIC_KIT; - public boolean MECHANICS_REDUCED_IRON_NUGGET; - public boolean MECHANICS_REDUCED_GOLD_NUGGET; - - public boolean mechanics_status_scoreboard; - public int MECHANICS_ALERT_INTERVAL; - - public boolean MECHANICS_RAW_MEAT_HUNGER; - public boolean MECHANICS_EMPTY_POTION; - public boolean MECHANICS_POISON_POTATO; - public boolean MECHANICS_COOKIE_BOOST; - public boolean MECHANICS_BEET_STRENGTH; - - public boolean mechanics_food_diversity_enabled; + public boolean MECHANICS_ENERGY_COFFEE_ENABLED; + public boolean MECHANICS_ENERGY_ABSORPTION; + public boolean MECHANICS_ENERGY_HASTE; + + public boolean MECHANICS_SLOW_ARMOR; + public boolean MECHANICS_REINFORCED_ARMOR; + public boolean MECHANICS_BOW; + public boolean MECHANICS_RECURVED_BOW; + public boolean MECHANICS_GRAPPLING_HOOK; + public boolean MECHANICS_MEDIC_KIT; + public boolean MECHANICS_REDUCED_IRON_NUGGET; + public boolean MECHANICS_REDUCED_GOLD_NUGGET; + + public boolean mechanics_status_scoreboard; + public int MECHANICS_ALERT_INTERVAL; + + public boolean MECHANICS_RAW_MEAT_HUNGER; + public boolean MECHANICS_EMPTY_POTION; + public boolean MECHANICS_POISON_POTATO; + public boolean MECHANICS_COOKIE_BOOST; + public boolean MECHANICS_BEET_STRENGTH; + + public boolean mechanics_food_diversity_enabled; public int mechanics_food_max_level; public int mechanics_food_start_carbs; public int mechanics_food_start_protein; @@ -95,75 +94,75 @@ public class Config { public int mechanics_food_respawn_proteins; public int mechanics_food_respawn_vitamins; public int mechanics_food_respawn_carbs; - public int mechanics_food_effects_carbs_ex_amp_easy; - public int mechanics_food_effects_carbs_ex_amp_medium; - public int mechanics_food_effects_carbs_ex_amp_hard; - public int mechanics_food_effects_vitamins_ex_amp; - public String mechanics_food_effects_vitamins_se_normal_effect; - public int mechanics_food_effects_vitamins_se_normal_amp; - public int mechanics_food_effects_vitamins_se_normal_duration; - public String mechanics_food_effects_vitamins_se_hard_effect; - public int mechanics_food_effects_vitamins_se_hard_amp; - public int mechanics_food_effects_vitamins_se_hard_duration; - public int mechanics_food_effects_protein_ex_amp; - public String mechanics_food_effects_protein_se_normal_effect; - public int mechanics_food_effects_protein_se_normal_amp; - public int mechanics_food_effects_protein_se_normal_duration; - public String mechanics_food_effects_protein_se_hard_effect; - public int mechanics_food_effects_protein_se_hard_amp; - public int mechanics_food_effects_protein_se_hard_duration; - - // THIRST - public boolean mechanics_thirst_enabled; - public int mechanics_thirst_starting_amount; - public int mechanics_thirst_respawn_amount; - public boolean mechanics_thirst_purify_water; - public boolean mechanics_thirst_melt_snow; - public double mechanics_thirst_drain_rate; - public int mechanics_thirst_heat_drain; + public int mechanics_food_effects_carbs_ex_amp_easy; + public int mechanics_food_effects_carbs_ex_amp_medium; + public int mechanics_food_effects_carbs_ex_amp_hard; + public int mechanics_food_effects_vitamins_ex_amp; + public String mechanics_food_effects_vitamins_se_normal_effect; + public int mechanics_food_effects_vitamins_se_normal_amp; + public int mechanics_food_effects_vitamins_se_normal_duration; + public String mechanics_food_effects_vitamins_se_hard_effect; + public int mechanics_food_effects_vitamins_se_hard_amp; + public int mechanics_food_effects_vitamins_se_hard_duration; + public int mechanics_food_effects_protein_ex_amp; + public String mechanics_food_effects_protein_se_normal_effect; + public int mechanics_food_effects_protein_se_normal_amp; + public int mechanics_food_effects_protein_se_normal_duration; + public String mechanics_food_effects_protein_se_hard_effect; + public int mechanics_food_effects_protein_se_hard_amp; + public int mechanics_food_effects_protein_se_hard_duration; + + // THIRST + public boolean mechanics_thirst_enabled; + public int mechanics_thirst_starting_amount; + public int mechanics_thirst_respawn_amount; + public boolean mechanics_thirst_purify_water; + public boolean mechanics_thirst_melt_snow; + public double mechanics_thirst_drain_rate; + public int mechanics_thirst_heat_drain; public int mechanics_thirst_nether_drain; - public double mechanics_thirst_damage_rate; - public int mechanics_thirst_rep_beetroot_soup; - public int mechanics_thirst_rep_melon_slice; - public int mechanics_thirst_rep_mush_stew; - public int mechanics_thirst_rep_water_bowl; - public int mechanics_thirst_rep_dirty_water; - public int mechanics_thirst_rep_clean_water; - public int mechanics_thirst_rep_pure_water; - public int mechanics_thirst_rep_coffee; - public int mechanics_thirst_rep_cold_milk; - public int mechanics_thirst_rep_hot_milk; - public int mechanics_thirst_rep_milk_bucket; - public int mechanics_thirst_rep_water; + public double mechanics_thirst_damage_rate; + public int mechanics_thirst_rep_beetroot_soup; + public int mechanics_thirst_rep_melon_slice; + public int mechanics_thirst_rep_mush_stew; + public int mechanics_thirst_rep_water_bowl; + public int mechanics_thirst_rep_dirty_water; + public int mechanics_thirst_rep_clean_water; + public int mechanics_thirst_rep_pure_water; + public int mechanics_thirst_rep_coffee; + public int mechanics_thirst_rep_cold_milk; + public int mechanics_thirst_rep_hot_milk; + public int mechanics_thirst_rep_milk_bucket; + public int mechanics_thirst_rep_water; public int mechanics_thirst_rep_honey_bottle; public int mechanics_thirst_rep_other_water; - public int mechanics_hunger_start_amount; - public int mechanics_hunger_respawn_amount; + public int mechanics_hunger_start_amount; + public int mechanics_hunger_respawn_amount; - public boolean MECHANICS_COMPASS_WAYPOINT; - public boolean MECHANICS_COMPASS_WAYPOINT_WORLDS; - public boolean MECHANICS_CLOWN_FISH; - public boolean MECHANICS_FERMENTED_SKIN; - public boolean MECHANICS_LIVING_SLIME; - public boolean MECHANICS_SNOWBALL_REVAMP; - public boolean MECHANICS_SNOW_GEN_REVAMP; + public boolean MECHANICS_COMPASS_WAYPOINT; + public boolean MECHANICS_COMPASS_WAYPOINT_WORLDS; + public boolean MECHANICS_CLOWN_FISH; + public boolean MECHANICS_FERMENTED_SKIN; + public boolean MECHANICS_LIVING_SLIME; + public boolean MECHANICS_SNOWBALL_REVAMP; + public boolean MECHANICS_SNOW_GEN_REVAMP; - public boolean MECHANICS_FARMING_PRODUCTS_COOKIE; - public boolean MECHANICS_FARMING_PRODUCTS_BREAD; + public boolean MECHANICS_FARMING_PRODUCTS_COOKIE; + public boolean MECHANICS_FARMING_PRODUCTS_BREAD; - public boolean MECHANICS_CHAIRS_ENABLED; - public int MECHANICS_CHAIRS_MAX_WIDTH; - public List MECHANICS_CHAIRS_BLOCKS; + public boolean MECHANICS_CHAIRS_ENABLED; + public int MECHANICS_CHAIRS_MAX_WIDTH; + public List MECHANICS_CHAIRS_BLOCKS; - public boolean MECHANICS_BURNOUT_TORCH_ENABLED; - public int MECHANICS_BURNOUT_TORCH_TIME; - public boolean MECHANICS_BURNOUT_TORCH_RELIGHT; - public boolean MECHANICS_BURNOUT_TORCH_DROP; - public boolean MECHANICS_BURNOUT_TORCH_PERSIST; + public boolean MECHANICS_BURNOUT_TORCH_ENABLED; + public int MECHANICS_BURNOUT_TORCH_TIME; + public boolean MECHANICS_BURNOUT_TORCH_RELIGHT; + public boolean MECHANICS_BURNOUT_TORCH_DROP; + public boolean MECHANICS_BURNOUT_TORCH_PERSIST; - public boolean MECHANICS_WEATHER_ENABLED; - public double MECHANICS_WEATHER_SPEED_BASE; + public boolean MECHANICS_WEATHER_ENABLED; + public double MECHANICS_WEATHER_SPEED_BASE; public double MECHANICS_WEATHER_SPEED_RAIN; public double MECHANICS_WEATHER_SPEED_STORM; public double MECHANICS_WEATHER_SPEED_SNOW; @@ -172,185 +171,184 @@ public class Config { // ITEM MECHANICS public int ITEM_FIRESTRIKER_COOK_TIME; - // ENTITY MECHANICS - public boolean ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED; - public int ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS; - public double ENTITY_MECHANICS_PIGMEN_CHEST_SPEED; - public boolean ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED; - public boolean ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED; - public int ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE; - public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED; + // ENTITY MECHANICS + public boolean ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED; + public int ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS; + public double ENTITY_MECHANICS_PIGMEN_CHEST_SPEED; + public boolean ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED; + public boolean ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED; + public int ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE; + public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED; public int ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS; public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY; public int ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS; public boolean ENTITY_MECHANICS_PIGLIN_DROP_WATER; public boolean ENTITY_MECHANICS_PIGLIN_ALT_DROP; - // RECIPES - public boolean RECIPES_SADDLE; - public boolean RECIPES_NAME_TAG; - public boolean RECIPES_PACKED_ICE; - public boolean RECIPES_LEATHER_BARD; - public boolean RECIPES_IRON_BARD; - public boolean RECIPES_GOLD_BARD; - public boolean RECIPES_DIAMOND_BARD; - public boolean RECIPES_CLAY_BRICK; - public boolean RECIPES_QUARTZ_BLOCK; - public boolean RECIPES_WOOL_STRING; - public boolean RECIPES_WEB_STRING; - public boolean RECIPES_ICE; - public boolean RECIPES_CLAY; - public boolean RECIPES_DIORITE; - public boolean RECIPES_GRANITE; - public boolean RECIPES_ANDESITE; - public boolean RECIPES_GRAVEL; - public boolean RECIPES_SLIMEBALL; - public boolean RECIPES_COBWEB; - public boolean RECIPES_SAPLING_STICK; - public boolean RECIPES_FISHING_ROD; - public boolean RECIPES_FURNACE; - public boolean RECIPES_WORKBENCH; - - // LEGENDARY TOOLS - public boolean LEGENDARY_VALKYRIE; - public boolean LEGENDARY_QUARTZPICKAXE; - public boolean LEGENDARY_OBSIDIAN_MACE; - public boolean LEGENDARY_GIANTBLADE; - public boolean LEGENDARY_BLAZESWORD; - public boolean LEGENDARY_NOTCH_APPLE; - public boolean LEGENDARY_GOLDARMORBUFF; - - // HIDDEN CONFIG + // RECIPES + public boolean RECIPES_SADDLE; + public boolean RECIPES_NAME_TAG; + public boolean RECIPES_PACKED_ICE; + public boolean RECIPES_LEATHER_BARD; + public boolean RECIPES_IRON_BARD; + public boolean RECIPES_GOLD_BARD; + public boolean RECIPES_DIAMOND_BARD; + public boolean RECIPES_CLAY_BRICK; + public boolean RECIPES_QUARTZ_BLOCK; + public boolean RECIPES_WOOL_STRING; + public boolean RECIPES_WEB_STRING; + public boolean RECIPES_ICE; + public boolean RECIPES_CLAY; + public boolean RECIPES_DIORITE; + public boolean RECIPES_GRANITE; + public boolean RECIPES_ANDESITE; + public boolean RECIPES_GRAVEL; + public boolean RECIPES_SLIMEBALL; + public boolean RECIPES_COBWEB; + public boolean RECIPES_SAPLING_STICK; + public boolean RECIPES_FISHING_ROD; + public boolean RECIPES_FURNACE; + public boolean RECIPES_WORKBENCH; + + // LEGENDARY TOOLS + public boolean LEGENDARY_VALKYRIE; + public boolean LEGENDARY_QUARTZPICKAXE; + public boolean LEGENDARY_OBSIDIAN_MACE; + public boolean LEGENDARY_GIANTBLADE; + public boolean LEGENDARY_BLAZESWORD; + public boolean LEGENDARY_NOTCH_APPLE; + public boolean LEGENDARY_GOLDARMORBUFF; + + // HIDDEN CONFIG public int RECIPE_DELAY; - public Config(Survival plugin) { - this.plugin = plugin; - this.prefix = "&7[&3Survival&bPlus&7] "; //temp prefix used before lang.yml loads - loadDefaultSettings(); - } - - public void loadDefaultSettings() { - if (configFile == null) { - configFile = new File(plugin.getDataFolder(), "config.yml"); - } - if (!configFile.exists()) { - plugin.saveResource("config.yml", false); - settings = YamlConfiguration.loadConfiguration(configFile); - Utils.sendColoredConsoleMsg(prefix + "new config.yml created"); - } else { - settings = YamlConfiguration.loadConfiguration(configFile); - } - matchConfig(settings, configFile); - loadSettings(); - Utils.sendColoredConsoleMsg(prefix + "&7config.yml &aloaded"); - } - - // Used to update config - @SuppressWarnings("ConstantConditions") - private void matchConfig(FileConfiguration config, File file) { - try { - boolean hasUpdated = false; - InputStream is = plugin.getResource(file.getName()); - assert is != null; - InputStreamReader isr = new InputStreamReader(is); - YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(isr); - for (String key : defConfig.getConfigurationSection("").getKeys(true)) { - if (!config.contains(key)) { - config.set(key, defConfig.get(key)); - hasUpdated = true; - } - } - for (String key : config.getConfigurationSection("").getKeys(true)) { - if (!defConfig.contains(key) && !key.equalsIgnoreCase("recipe-delay")) { - config.set(key, null); - hasUpdated = true; - } - } - if (hasUpdated) - config.save(file); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @SuppressWarnings("unused") + public Config(Survival plugin) { + this.plugin = plugin; + loadDefaultSettings(); + } + + public void loadDefaultSettings() { + if (configFile == null) { + configFile = new File(plugin.getDataFolder(), "config.yml"); + } + if (!configFile.exists()) { + plugin.saveResource("config.yml", false); + settings = YamlConfiguration.loadConfiguration(configFile); + Utils.logMini("new config.yml created"); + } else { + settings = YamlConfiguration.loadConfiguration(configFile); + } + matchConfig(settings, configFile); + loadSettings(); + Utils.logMini("config.yml loaded"); + } + + // Used to update config + @SuppressWarnings("ConstantConditions") + private void matchConfig(FileConfiguration config, File file) { + try { + boolean hasUpdated = false; + InputStream is = plugin.getResource(file.getName()); + assert is != null; + InputStreamReader isr = new InputStreamReader(is); + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(isr); + for (String key : defConfig.getConfigurationSection("").getKeys(true)) { + if (!config.contains(key)) { + config.set(key, defConfig.get(key)); + hasUpdated = true; + } + } + for (String key : config.getConfigurationSection("").getKeys(true)) { + if (!defConfig.contains(key) && !key.equalsIgnoreCase("recipe-delay")) { + config.set(key, null); + hasUpdated = true; + } + } + if (hasUpdated) + config.save(file); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @SuppressWarnings("unused") public FileConfiguration getSettings() { - return this.settings; - } + return this.settings; + } - private void loadSettings() { + private void loadSettings() { - this.LANG = settings.getString("Language"); + this.LANG = settings.getString("Language"); - // SETTINGS + // SETTINGS this.settings_resource_pack_enabled = settings.getBoolean("Settings.enable-resource-pack"); - this.settings_resource_pack_url = settings.getString("Settings.resource-pack-url"); - this.settings_local_chat_distance = settings.getInt("settings.local-chat-distance"); + this.settings_resource_pack_url = settings.getString("Settings.resource-pack-url"); + this.settings_local_chat_distance = settings.getInt("settings.local-chat-distance"); - // WELCOME GUIDE - this.WELCOME_GUIDE_ENABLED = settings.getBoolean("WelcomeGuide.Enabled"); - this.WELCOME_GUIDE_NEW_PLAYERS = settings.getBoolean("WelcomeGuide.NewPlayersOnly"); - this.WELCOME_GUIDE_DELAY = settings.getInt("WelcomeGuide.Delay"); + // WELCOME GUIDE + this.WELCOME_GUIDE_ENABLED = settings.getBoolean("WelcomeGuide.Enabled"); + this.WELCOME_GUIDE_NEW_PLAYERS = settings.getBoolean("WelcomeGuide.NewPlayersOnly"); + this.WELCOME_GUIDE_DELAY = settings.getInt("WelcomeGuide.Delay"); - // SURVIVAL - this.SURVIVAL_ENABLED = settings.getBoolean("Survival.Enabled"); - this.SURVIVAL_LIMITED_CRAFTING = settings.getBoolean("Survival.LimitedCrafting"); + // SURVIVAL + this.SURVIVAL_ENABLED = settings.getBoolean("Survival.Enabled"); + this.SURVIVAL_LIMITED_CRAFTING = settings.getBoolean("Survival.LimitedCrafting"); this.SURVIVAL_UNLOCK_ALL_RECIPES = settings.getBoolean("Survival.Unlock-all-recipes-on-join"); this.SURVIVAL_REMOVE_WOOD_TOOLS = settings.getBoolean("Survival.Remove-Wooden-Tools"); - this.SURVIVAL_TORCH = settings.getBoolean("Survival.Torch"); - this.SURVIVAL_UPDATE_MERCHANT_TRADES = settings.getBoolean("Survival.UpdateMerchantTrades"); - - this.BREAK_ONLY_WITH_SICKLE = settings.getBoolean("Survival.BreakOnlyWith.Sickle"); - this.BREAK_ONLY_WITH_SHOVEL = settings.getBoolean("Survival.BreakOnlyWith.Shovel"); - this.BREAK_ONLY_WITH_AXE = settings.getBoolean("Survival.BreakOnlyWith.Axe"); - this.BREAK_ONLY_WITH_PICKAXE = settings.getBoolean("Survival.BreakOnlyWith.Pickaxe"); - this.BREAK_ONLY_WITH_SHEARS = settings.getBoolean("Survival.BreakOnlyWith.Shears"); - this.PLACE_ONLY_WITH_HAMMER = settings.getBoolean("Survival.PlaceOnlyWith.Hammer"); - - this.SURVIVAL_SICKLE_FLINT = settings.getBoolean("Survival.Sickles.Flint"); - this.SURVIVAL_SICKLE_STONE = settings.getBoolean("Survival.Sickles.Stone"); - this.SURVIVAL_SICKLE_IRON = settings.getBoolean("Survival.Sickles.Iron"); - this.SURVIVAL_SICKLE_DIAMOND = settings.getBoolean("Survival.Sickles.Diamond"); - - this.DROP_RATE_STICK = settings.getDouble("Survival.DropRate.Stick"); - this.DROP_RATE_FLINT = settings.getDouble("Survival.DropRate.Flint"); - - // MECHANICS - this.MECHANICS_SHARED_WORKBENCH = settings.getBoolean("Mechanics.SharedWorkbench"); - this.MECHANICS_PREVENT_NIGHT_SKIP = settings.getBoolean("Mechanics.Prevent-Night-Skip"); - this.mechanics_energy_enabled = settings.getBoolean("Mechanics.Energy.enabled"); - this.mechanics_energy_start = settings.getDouble("Mechanics.Energy.start-level"); + this.SURVIVAL_TORCH = settings.getBoolean("Survival.Torch"); + this.SURVIVAL_UPDATE_MERCHANT_TRADES = settings.getBoolean("Survival.UpdateMerchantTrades"); + + this.BREAK_ONLY_WITH_SICKLE = settings.getBoolean("Survival.BreakOnlyWith.Sickle"); + this.BREAK_ONLY_WITH_SHOVEL = settings.getBoolean("Survival.BreakOnlyWith.Shovel"); + this.BREAK_ONLY_WITH_AXE = settings.getBoolean("Survival.BreakOnlyWith.Axe"); + this.BREAK_ONLY_WITH_PICKAXE = settings.getBoolean("Survival.BreakOnlyWith.Pickaxe"); + this.BREAK_ONLY_WITH_SHEARS = settings.getBoolean("Survival.BreakOnlyWith.Shears"); + this.PLACE_ONLY_WITH_HAMMER = settings.getBoolean("Survival.PlaceOnlyWith.Hammer"); + + this.SURVIVAL_SICKLE_FLINT = settings.getBoolean("Survival.Sickles.Flint"); + this.SURVIVAL_SICKLE_STONE = settings.getBoolean("Survival.Sickles.Stone"); + this.SURVIVAL_SICKLE_IRON = settings.getBoolean("Survival.Sickles.Iron"); + this.SURVIVAL_SICKLE_DIAMOND = settings.getBoolean("Survival.Sickles.Diamond"); + + this.DROP_RATE_STICK = settings.getDouble("Survival.DropRate.Stick"); + this.DROP_RATE_FLINT = settings.getDouble("Survival.DropRate.Flint"); + + // MECHANICS + this.MECHANICS_SHARED_WORKBENCH = settings.getBoolean("Mechanics.SharedWorkbench"); + this.MECHANICS_PREVENT_NIGHT_SKIP = settings.getBoolean("Mechanics.Prevent-Night-Skip"); + this.mechanics_energy_enabled = settings.getBoolean("Mechanics.Energy.enabled"); + this.mechanics_energy_start = settings.getDouble("Mechanics.Energy.start-level"); this.mechanics_energy_respawn = settings.getDouble("Mechanics.Energy.respawn-level"); - this.MECHANICS_ENERGY_WARNING = settings.getBoolean("Mechanics.Energy.warning"); - this.MECHANICS_ENERGY_DRAIN_RATE = settings.getDouble("Mechanics.Energy.drain-rate"); - this.MECHANICS_ENERGY_DRAIN_COLD_RATE = settings.getDouble("Mechanics.Energy.cold-drain-rate"); - this.MECHANICS_ENERGY_REFRESH_RATE_BED = settings.getDouble("Mechanics.Energy.sleeping-refresh-rate"); + this.MECHANICS_ENERGY_WARNING = settings.getBoolean("Mechanics.Energy.warning"); + this.MECHANICS_ENERGY_DRAIN_RATE = settings.getDouble("Mechanics.Energy.drain-rate"); + this.MECHANICS_ENERGY_DRAIN_COLD_RATE = settings.getDouble("Mechanics.Energy.cold-drain-rate"); + this.MECHANICS_ENERGY_REFRESH_RATE_BED = settings.getDouble("Mechanics.Energy.sleeping-refresh-rate"); this.MECHANICS_ENERGY_REFRESH_RATE_CHAIR = settings.getDouble("Mechanics.Energy.chair-refresh-rate"); - this.MECHANICS_ENERGY_EXHAUSTION = settings.getDouble("Mechanics.Energy.exhaustion"); - this.MECHANICS_ENERGY_COFFEE_ENABLED = settings.getBoolean("Mechanics.Energy.coffee"); - this.MECHANICS_ENERGY_ABSORPTION = settings.getBoolean("Mechanics.Energy.absorption"); - this.MECHANICS_ENERGY_HASTE = settings.getBoolean("Mechanics.Energy.haste"); - - this.MECHANICS_SLOW_ARMOR = settings.getBoolean("Mechanics.SlowArmor"); - this.MECHANICS_REINFORCED_ARMOR = settings.getBoolean("Mechanics.ReinforcedLeatherArmor"); - this.MECHANICS_BOW = settings.getBoolean("Mechanics.Bow"); - this.MECHANICS_RECURVED_BOW = settings.getBoolean("Mechanics.RecurveBow"); - this.MECHANICS_GRAPPLING_HOOK = settings.getBoolean("Mechanics.GrapplingHook"); - this.MECHANICS_MEDIC_KIT = settings.getBoolean("Mechanics.MedicalKit"); - this.MECHANICS_REDUCED_IRON_NUGGET = settings.getBoolean("Mechanics.ReducedIronNugget"); - this.MECHANICS_REDUCED_GOLD_NUGGET = settings.getBoolean("Mechanics.ReducedGoldNugget"); - - this.mechanics_status_scoreboard = settings.getBoolean("Mechanics.StatusScoreboard"); - this.MECHANICS_ALERT_INTERVAL = settings.getInt("Mechanics.AlertInterval"); - - this.MECHANICS_RAW_MEAT_HUNGER = settings.getBoolean("Mechanics.RawMeatHunger"); - this.MECHANICS_EMPTY_POTION = settings.getBoolean("Mechanics.EmptyPotions"); - this.MECHANICS_POISON_POTATO = settings.getBoolean("Mechanics.PoisonousPotato"); - this.MECHANICS_COOKIE_BOOST = settings.getBoolean("Mechanics.CookieHealthBoost"); - this.MECHANICS_BEET_STRENGTH = settings.getBoolean("Mechanics.BeetrootStrength"); - - this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); - this.mechanics_food_max_level = settings.getInt("Mechanics.FoodDiversity.max-level"); + this.MECHANICS_ENERGY_EXHAUSTION = settings.getDouble("Mechanics.Energy.exhaustion"); + this.MECHANICS_ENERGY_COFFEE_ENABLED = settings.getBoolean("Mechanics.Energy.coffee"); + this.MECHANICS_ENERGY_ABSORPTION = settings.getBoolean("Mechanics.Energy.absorption"); + this.MECHANICS_ENERGY_HASTE = settings.getBoolean("Mechanics.Energy.haste"); + + this.MECHANICS_SLOW_ARMOR = settings.getBoolean("Mechanics.SlowArmor"); + this.MECHANICS_REINFORCED_ARMOR = settings.getBoolean("Mechanics.ReinforcedLeatherArmor"); + this.MECHANICS_BOW = settings.getBoolean("Mechanics.Bow"); + this.MECHANICS_RECURVED_BOW = settings.getBoolean("Mechanics.RecurveBow"); + this.MECHANICS_GRAPPLING_HOOK = settings.getBoolean("Mechanics.GrapplingHook"); + this.MECHANICS_MEDIC_KIT = settings.getBoolean("Mechanics.MedicalKit"); + this.MECHANICS_REDUCED_IRON_NUGGET = settings.getBoolean("Mechanics.ReducedIronNugget"); + this.MECHANICS_REDUCED_GOLD_NUGGET = settings.getBoolean("Mechanics.ReducedGoldNugget"); + + this.mechanics_status_scoreboard = settings.getBoolean("Mechanics.StatusScoreboard"); + this.MECHANICS_ALERT_INTERVAL = settings.getInt("Mechanics.AlertInterval"); + + this.MECHANICS_RAW_MEAT_HUNGER = settings.getBoolean("Mechanics.RawMeatHunger"); + this.MECHANICS_EMPTY_POTION = settings.getBoolean("Mechanics.EmptyPotions"); + this.MECHANICS_POISON_POTATO = settings.getBoolean("Mechanics.PoisonousPotato"); + this.MECHANICS_COOKIE_BOOST = settings.getBoolean("Mechanics.CookieHealthBoost"); + this.MECHANICS_BEET_STRENGTH = settings.getBoolean("Mechanics.BeetrootStrength"); + + this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); + this.mechanics_food_max_level = settings.getInt("Mechanics.FoodDiversity.max-level"); this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); this.mechanics_food_start_carbs = settings.getInt("Mechanics.FoodDiversity.start-level.carbs"); this.mechanics_food_start_vitamins = settings.getInt("Mechanics.FoodDiversity.start-level.vitamins"); @@ -359,135 +357,135 @@ private void loadSettings() { this.mechanics_food_respawn_carbs = settings.getInt("Mechanics.FoodDiversity.respawn-level.carbs"); this.mechanics_food_respawn_vitamins = settings.getInt("Mechanics.FoodDiversity.respawn-level.vitamins"); this.mechanics_food_respawn_proteins = settings.getInt("Mechanics.FoodDiversity.respawn-level.proteins"); - this.mechanics_food_effects_carbs_ex_amp_easy = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.easy"); - this.mechanics_food_effects_carbs_ex_amp_medium = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.normal"); - this.mechanics_food_effects_carbs_ex_amp_hard = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.hard"); - this.mechanics_food_effects_vitamins_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.exhaustion-amplifier"); - this.mechanics_food_effects_vitamins_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.effect"); - this.mechanics_food_effects_vitamins_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.amplifier"); - this.mechanics_food_effects_vitamins_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.duration"); - this.mechanics_food_effects_vitamins_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.effect"); - this.mechanics_food_effects_vitamins_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.amplifier"); - this.mechanics_food_effects_vitamins_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.duration"); - - this.mechanics_food_effects_protein_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.exhaustion-amplifier"); - this.mechanics_food_effects_protein_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.effect"); - this.mechanics_food_effects_protein_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.amplifier"); - this.mechanics_food_effects_protein_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.duration"); - this.mechanics_food_effects_protein_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.effect"); - this.mechanics_food_effects_protein_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.amplifier"); - this.mechanics_food_effects_protein_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.duration"); - - this.mechanics_thirst_enabled = settings.getBoolean("Mechanics.Thirst.enabled"); - this.mechanics_thirst_starting_amount = settings.getInt("Mechanics.Thirst.starting-amount"); - this.mechanics_thirst_respawn_amount = settings.getInt("Mechanics.Thirst.respawn-amount"); - this.mechanics_thirst_purify_water = settings.getBoolean("Mechanics.Thirst.purify-water"); - this.mechanics_thirst_melt_snow = settings.getBoolean("Mechanics.Thirst.melt-snow"); - this.mechanics_thirst_drain_rate = settings.getDouble("Mechanics.Thirst.drain-rate"); - this.mechanics_thirst_heat_drain = settings.getInt("Mechanics.Thirst.heat-drain"); + this.mechanics_food_effects_carbs_ex_amp_easy = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.easy"); + this.mechanics_food_effects_carbs_ex_amp_medium = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.normal"); + this.mechanics_food_effects_carbs_ex_amp_hard = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.hard"); + this.mechanics_food_effects_vitamins_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.exhaustion-amplifier"); + this.mechanics_food_effects_vitamins_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.effect"); + this.mechanics_food_effects_vitamins_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.amplifier"); + this.mechanics_food_effects_vitamins_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.duration"); + this.mechanics_food_effects_vitamins_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.effect"); + this.mechanics_food_effects_vitamins_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.amplifier"); + this.mechanics_food_effects_vitamins_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.duration"); + + this.mechanics_food_effects_protein_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.exhaustion-amplifier"); + this.mechanics_food_effects_protein_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.effect"); + this.mechanics_food_effects_protein_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.amplifier"); + this.mechanics_food_effects_protein_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.duration"); + this.mechanics_food_effects_protein_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.effect"); + this.mechanics_food_effects_protein_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.amplifier"); + this.mechanics_food_effects_protein_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.duration"); + + this.mechanics_thirst_enabled = settings.getBoolean("Mechanics.Thirst.enabled"); + this.mechanics_thirst_starting_amount = settings.getInt("Mechanics.Thirst.starting-amount"); + this.mechanics_thirst_respawn_amount = settings.getInt("Mechanics.Thirst.respawn-amount"); + this.mechanics_thirst_purify_water = settings.getBoolean("Mechanics.Thirst.purify-water"); + this.mechanics_thirst_melt_snow = settings.getBoolean("Mechanics.Thirst.melt-snow"); + this.mechanics_thirst_drain_rate = settings.getDouble("Mechanics.Thirst.drain-rate"); + this.mechanics_thirst_heat_drain = settings.getInt("Mechanics.Thirst.heat-drain"); this.mechanics_thirst_nether_drain = settings.getInt("Mechanics.Thirst.nether-drain"); - this.mechanics_thirst_damage_rate = settings.getDouble("Mechanics.Thirst.damage-rate"); - - this.mechanics_thirst_rep_beetroot_soup = settings.getInt("Mechanics.Thirst.replenish-level.beetroot-soup"); - this.mechanics_thirst_rep_melon_slice = settings.getInt("Mechanics.Thirst.replenish-level.melon-slice"); - this.mechanics_thirst_rep_mush_stew = settings.getInt("Mechanics.Thirst.replenish-level.mushroom-stew"); - this.mechanics_thirst_rep_water_bowl = settings.getInt("Mechanics.Thirst.replenish-level.water-bowl"); - this.mechanics_thirst_rep_dirty_water = settings.getInt("Mechanics.Thirst.replenish-level.dirty-water"); - this.mechanics_thirst_rep_clean_water = settings.getInt("Mechanics.Thirst.replenish-level.clean-water"); - this.mechanics_thirst_rep_pure_water = settings.getInt("Mechanics.Thirst.replenish-level.purified-water"); - this.mechanics_thirst_rep_coffee = settings.getInt("Mechanics.Thirst.replenish-level.coffee"); - this.mechanics_thirst_rep_cold_milk = settings.getInt("Mechanics.Thirst.replenish-level.cold-milk"); - this.mechanics_thirst_rep_hot_milk = settings.getInt("Mechanics.Thirst.replenish-level.hot-milk"); - this.mechanics_thirst_rep_milk_bucket = settings.getInt("Mechanics.Thirst.replenish-level.milk-bucket"); + this.mechanics_thirst_damage_rate = settings.getDouble("Mechanics.Thirst.damage-rate"); + + this.mechanics_thirst_rep_beetroot_soup = settings.getInt("Mechanics.Thirst.replenish-level.beetroot-soup"); + this.mechanics_thirst_rep_melon_slice = settings.getInt("Mechanics.Thirst.replenish-level.melon-slice"); + this.mechanics_thirst_rep_mush_stew = settings.getInt("Mechanics.Thirst.replenish-level.mushroom-stew"); + this.mechanics_thirst_rep_water_bowl = settings.getInt("Mechanics.Thirst.replenish-level.water-bowl"); + this.mechanics_thirst_rep_dirty_water = settings.getInt("Mechanics.Thirst.replenish-level.dirty-water"); + this.mechanics_thirst_rep_clean_water = settings.getInt("Mechanics.Thirst.replenish-level.clean-water"); + this.mechanics_thirst_rep_pure_water = settings.getInt("Mechanics.Thirst.replenish-level.purified-water"); + this.mechanics_thirst_rep_coffee = settings.getInt("Mechanics.Thirst.replenish-level.coffee"); + this.mechanics_thirst_rep_cold_milk = settings.getInt("Mechanics.Thirst.replenish-level.cold-milk"); + this.mechanics_thirst_rep_hot_milk = settings.getInt("Mechanics.Thirst.replenish-level.hot-milk"); + this.mechanics_thirst_rep_milk_bucket = settings.getInt("Mechanics.Thirst.replenish-level.milk-bucket"); this.mechanics_thirst_rep_honey_bottle = settings.getInt("Mechanics.Thirst.replenish-level.honey-bottle"); this.mechanics_thirst_rep_other_water = settings.getInt("Mechanics.Thirst.replenish-level.other-water"); this.mechanics_thirst_rep_water = settings.getInt("Mechanics.Thirst.replenish-level.water"); - this.mechanics_hunger_start_amount = settings.getInt("Mechanics.Hunger.Starting-Amount"); - this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); + this.mechanics_hunger_start_amount = settings.getInt("Mechanics.Hunger.Starting-Amount"); + this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); - this.MECHANICS_COMPASS_WAYPOINT = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); - this.MECHANICS_COMPASS_WAYPOINT_WORLDS = settings.getBoolean("Mechanics.CompassWaypoint.per-world"); - this.MECHANICS_CLOWN_FISH = settings.getBoolean("Mechanics.Clownfish"); - this.MECHANICS_FERMENTED_SKIN = settings.getBoolean("Mechanics.FermentedSkin"); - this.MECHANICS_LIVING_SLIME = settings.getBoolean("Mechanics.LivingSlime"); + this.MECHANICS_COMPASS_WAYPOINT = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); + this.MECHANICS_COMPASS_WAYPOINT_WORLDS = settings.getBoolean("Mechanics.CompassWaypoint.per-world"); + this.MECHANICS_CLOWN_FISH = settings.getBoolean("Mechanics.Clownfish"); + this.MECHANICS_FERMENTED_SKIN = settings.getBoolean("Mechanics.FermentedSkin"); + this.MECHANICS_LIVING_SLIME = settings.getBoolean("Mechanics.LivingSlime"); - this.MECHANICS_SNOWBALL_REVAMP = settings.getBoolean("Mechanics.SnowballRevamp"); - this.MECHANICS_SNOW_GEN_REVAMP = settings.getBoolean("Mechanics.SnowGenerationRevamp"); + this.MECHANICS_SNOWBALL_REVAMP = settings.getBoolean("Mechanics.SnowballRevamp"); + this.MECHANICS_SNOW_GEN_REVAMP = settings.getBoolean("Mechanics.SnowGenerationRevamp"); - this.MECHANICS_FARMING_PRODUCTS_COOKIE = settings.getBoolean("Mechanics.FarmingProducts.Cookie"); - this.MECHANICS_FARMING_PRODUCTS_BREAD = settings.getBoolean("Mechanics.FarmingProducts.Bread"); + this.MECHANICS_FARMING_PRODUCTS_COOKIE = settings.getBoolean("Mechanics.FarmingProducts.Cookie"); + this.MECHANICS_FARMING_PRODUCTS_BREAD = settings.getBoolean("Mechanics.FarmingProducts.Bread"); - this.MECHANICS_CHAIRS_ENABLED = settings.getBoolean("Mechanics.Chairs.Enabled"); - this.MECHANICS_CHAIRS_MAX_WIDTH = settings.getInt("Mechanics.Chairs.MaxChairWidth"); - this.MECHANICS_CHAIRS_BLOCKS = settings.getStringList("Mechanics.Chairs.AllowedBlocks"); + this.MECHANICS_CHAIRS_ENABLED = settings.getBoolean("Mechanics.Chairs.Enabled"); + this.MECHANICS_CHAIRS_MAX_WIDTH = settings.getInt("Mechanics.Chairs.MaxChairWidth"); + this.MECHANICS_CHAIRS_BLOCKS = settings.getStringList("Mechanics.Chairs.AllowedBlocks"); - this.MECHANICS_BURNOUT_TORCH_ENABLED = settings.getBoolean("Mechanics.BurnoutTorches.Enabled"); - this.MECHANICS_BURNOUT_TORCH_TIME = settings.getInt("Mechanics.BurnoutTorches.BurnoutTime"); - this.MECHANICS_BURNOUT_TORCH_RELIGHT = settings.getBoolean("Mechanics.BurnoutTorches.Relightable"); - this.MECHANICS_BURNOUT_TORCH_DROP = settings.getBoolean("Mechanics.BurnoutTorches.DropTorch"); - this.MECHANICS_BURNOUT_TORCH_PERSIST = settings.getBoolean("Mechanics.BurnoutTorches.PersistentTorches"); + this.MECHANICS_BURNOUT_TORCH_ENABLED = settings.getBoolean("Mechanics.BurnoutTorches.Enabled"); + this.MECHANICS_BURNOUT_TORCH_TIME = settings.getInt("Mechanics.BurnoutTorches.BurnoutTime"); + this.MECHANICS_BURNOUT_TORCH_RELIGHT = settings.getBoolean("Mechanics.BurnoutTorches.Relightable"); + this.MECHANICS_BURNOUT_TORCH_DROP = settings.getBoolean("Mechanics.BurnoutTorches.DropTorch"); + this.MECHANICS_BURNOUT_TORCH_PERSIST = settings.getBoolean("Mechanics.BurnoutTorches.PersistentTorches"); - this.MECHANICS_WEATHER_ENABLED = settings.getBoolean("Mechanics.Weather.Enabled"); - this.MECHANICS_WEATHER_SPEED_BASE = settings.getDouble("Mechanics.Weather.speed.base"); - this.MECHANICS_WEATHER_SPEED_RAIN = settings.getDouble("Mechanics.Weather.speed.rain"); - this.MECHANICS_WEATHER_SPEED_STORM = settings.getDouble("Mechanics.Weather.speed.storm"); - this.MECHANICS_WEATHER_SPEED_SNOW = settings.getDouble("Mechanics.Weather.speed.snow"); - this.MECHANICS_WEATHER_SPEED_SNOWSTORM = settings.getDouble("Mechanics.Weather.speed.snowstorm"); + this.MECHANICS_WEATHER_ENABLED = settings.getBoolean("Mechanics.Weather.Enabled"); + this.MECHANICS_WEATHER_SPEED_BASE = settings.getDouble("Mechanics.Weather.speed.base"); + this.MECHANICS_WEATHER_SPEED_RAIN = settings.getDouble("Mechanics.Weather.speed.rain"); + this.MECHANICS_WEATHER_SPEED_STORM = settings.getDouble("Mechanics.Weather.speed.storm"); + this.MECHANICS_WEATHER_SPEED_SNOW = settings.getDouble("Mechanics.Weather.speed.snow"); + this.MECHANICS_WEATHER_SPEED_SNOWSTORM = settings.getDouble("Mechanics.Weather.speed.snowstorm"); - // ITEM MECHANICS + // ITEM MECHANICS this.ITEM_FIRESTRIKER_COOK_TIME = settings.getInt("Item-Mechanics.firestriker.cook-time"); - // ENTITY MECHANICS - this.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); - this.ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS = settings.getInt("Entity-Mechanics.zombified-piglin-chests.distance"); - this.ENTITY_MECHANICS_PIGMEN_CHEST_SPEED = settings.getDouble("Entity-Mechanics.zombified-piglin-chests.speed-modifier"); - this.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED = settings.getBoolean("Entity-Mechanics.beekeeper-suit.enabled"); - this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); - this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); - this.ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED = settings.getBoolean("Entity-Mechanics.chicken-breeding.enabled"); + // ENTITY MECHANICS + this.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); + this.ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS = settings.getInt("Entity-Mechanics.zombified-piglin-chests.distance"); + this.ENTITY_MECHANICS_PIGMEN_CHEST_SPEED = settings.getDouble("Entity-Mechanics.zombified-piglin-chests.speed-modifier"); + this.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED = settings.getBoolean("Entity-Mechanics.beekeeper-suit.enabled"); + this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); + this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); + this.ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED = settings.getBoolean("Entity-Mechanics.chicken-breeding.enabled"); this.ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS = settings.getInt("Entity-Mechanics.chicken-breeding.max-eggs"); this.ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY = settings.getBoolean("Entity-Mechanics.chicken-breeding.always-baby"); this.ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS = settings.getInt("Entity-Mechanics.chicken-breeding.baby-ticks"); this.ENTITY_MECHANICS_PIGLIN_DROP_WATER = settings.getBoolean("Entity-Mechanics.piglin-barter.drop-purified-water"); this.ENTITY_MECHANICS_PIGLIN_ALT_DROP = settings.getBoolean("Entity-Mechanics.piglin-barter.alternate-bartering"); - // RECIPES - this.RECIPES_SADDLE = settings.getBoolean("Recipes.Saddle"); - this.RECIPES_NAME_TAG = settings.getBoolean("Recipes.Nametag"); - this.RECIPES_PACKED_ICE = settings.getBoolean("Recipes.PackedIce"); - this.RECIPES_LEATHER_BARD = settings.getBoolean("Recipes.LeatherBard"); - this.RECIPES_IRON_BARD = settings.getBoolean("Recipes.IronBard"); - this.RECIPES_GOLD_BARD = settings.getBoolean("Recipes.GoldBard"); - this.RECIPES_DIAMOND_BARD = settings.getBoolean("Recipes.DiamondBard"); - this.RECIPES_CLAY_BRICK = settings.getBoolean("Recipes.ClayBrick"); - this.RECIPES_QUARTZ_BLOCK = settings.getBoolean("Recipes.QuartzBlock"); - this.RECIPES_WOOL_STRING = settings.getBoolean("Recipes.WoolString"); - this.RECIPES_WEB_STRING = settings.getBoolean("Recipes.WebString"); - this.RECIPES_ICE = settings.getBoolean("Recipes.Ice"); - this.RECIPES_CLAY = settings.getBoolean("Recipes.Clay"); - this.RECIPES_DIORITE = settings.getBoolean("Recipes.Diorite"); - this.RECIPES_GRANITE = settings.getBoolean("Recipes.Granite"); - this.RECIPES_ANDESITE = settings.getBoolean("Recipes.Andesite"); - this.RECIPES_GRAVEL = settings.getBoolean("Recipes.Gravel"); - this.RECIPES_SLIMEBALL = settings.getBoolean("Recipes.Slimeball"); - this.RECIPES_COBWEB = settings.getBoolean("Recipes.Cobweb"); - this.RECIPES_SAPLING_STICK = settings.getBoolean("Recipes.SaplingToSticks"); - this.RECIPES_FISHING_ROD = settings.getBoolean("Recipes.FishingRod"); - this.RECIPES_FURNACE = settings.getBoolean("Recipes.Furnace"); - this.RECIPES_WORKBENCH = settings.getBoolean("Recipes.Workbench"); - - // LEGENDARY ITEMS - this.LEGENDARY_VALKYRIE = settings.getBoolean("LegendaryItems.ValkyrieAxe"); - this.LEGENDARY_QUARTZPICKAXE = settings.getBoolean("LegendaryItems.QuartzPickaxe"); - this.LEGENDARY_OBSIDIAN_MACE = settings.getBoolean("LegendaryItems.ObsidianMace"); - this.LEGENDARY_GIANTBLADE = settings.getBoolean("LegendaryItems.GiantBlade"); - this.LEGENDARY_BLAZESWORD = settings.getBoolean("LegendaryItems.BlazeSword"); - this.LEGENDARY_NOTCH_APPLE = settings.getBoolean("LegendaryItems.NotchApple"); - this.LEGENDARY_GOLDARMORBUFF = settings.getBoolean("LegendaryItems.GoldArmorBuff"); - - // HIDDEN CONFIG + // RECIPES + this.RECIPES_SADDLE = settings.getBoolean("Recipes.Saddle"); + this.RECIPES_NAME_TAG = settings.getBoolean("Recipes.Nametag"); + this.RECIPES_PACKED_ICE = settings.getBoolean("Recipes.PackedIce"); + this.RECIPES_LEATHER_BARD = settings.getBoolean("Recipes.LeatherBard"); + this.RECIPES_IRON_BARD = settings.getBoolean("Recipes.IronBard"); + this.RECIPES_GOLD_BARD = settings.getBoolean("Recipes.GoldBard"); + this.RECIPES_DIAMOND_BARD = settings.getBoolean("Recipes.DiamondBard"); + this.RECIPES_CLAY_BRICK = settings.getBoolean("Recipes.ClayBrick"); + this.RECIPES_QUARTZ_BLOCK = settings.getBoolean("Recipes.QuartzBlock"); + this.RECIPES_WOOL_STRING = settings.getBoolean("Recipes.WoolString"); + this.RECIPES_WEB_STRING = settings.getBoolean("Recipes.WebString"); + this.RECIPES_ICE = settings.getBoolean("Recipes.Ice"); + this.RECIPES_CLAY = settings.getBoolean("Recipes.Clay"); + this.RECIPES_DIORITE = settings.getBoolean("Recipes.Diorite"); + this.RECIPES_GRANITE = settings.getBoolean("Recipes.Granite"); + this.RECIPES_ANDESITE = settings.getBoolean("Recipes.Andesite"); + this.RECIPES_GRAVEL = settings.getBoolean("Recipes.Gravel"); + this.RECIPES_SLIMEBALL = settings.getBoolean("Recipes.Slimeball"); + this.RECIPES_COBWEB = settings.getBoolean("Recipes.Cobweb"); + this.RECIPES_SAPLING_STICK = settings.getBoolean("Recipes.SaplingToSticks"); + this.RECIPES_FISHING_ROD = settings.getBoolean("Recipes.FishingRod"); + this.RECIPES_FURNACE = settings.getBoolean("Recipes.Furnace"); + this.RECIPES_WORKBENCH = settings.getBoolean("Recipes.Workbench"); + + // LEGENDARY ITEMS + this.LEGENDARY_VALKYRIE = settings.getBoolean("LegendaryItems.ValkyrieAxe"); + this.LEGENDARY_QUARTZPICKAXE = settings.getBoolean("LegendaryItems.QuartzPickaxe"); + this.LEGENDARY_OBSIDIAN_MACE = settings.getBoolean("LegendaryItems.ObsidianMace"); + this.LEGENDARY_GIANTBLADE = settings.getBoolean("LegendaryItems.GiantBlade"); + this.LEGENDARY_BLAZESWORD = settings.getBoolean("LegendaryItems.BlazeSword"); + this.LEGENDARY_NOTCH_APPLE = settings.getBoolean("LegendaryItems.NotchApple"); + this.LEGENDARY_GOLDARMORBUFF = settings.getBoolean("LegendaryItems.GoldArmorBuff"); + + // HIDDEN CONFIG this.RECIPE_DELAY = settings.getInt("recipe-delay", 0); - } + } } diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index 3d26eb1..df3b356 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -214,10 +214,9 @@ public void loadLangFile(CommandSender sender) { File lang_file = new File(plugin.getDataFolder(), langFilePath); if (!lang_file.exists()) { plugin.saveResource(langFilePath, true); - loaded = "&aNew " + langFilePath + " created"; + loaded = "New " + langFilePath + " created"; } else { - loaded = "&7" + langFilePath + " &aloaded"; - //updateLang(YamlConfiguration.loadConfiguration(lang_file), lang_file); + loaded = "" + langFilePath + " loaded"; matchConfig(YamlConfiguration.loadConfiguration(lang_file), lang_file); } lang = YamlConfiguration.loadConfiguration(lang_file); @@ -385,7 +384,7 @@ public void loadLangFile(CommandSender sender) { cmd_heal_by = lang.getString("cmd-heal-by"); cmd_heal_other = lang.getString("cmd-heal-other"); - Utils.sendColoredMsg(sender, prefix + loaded); + Utils.sendColoredMini(sender, prefix + loaded); } // Used to update config @@ -420,7 +419,7 @@ private void saveLang(YamlConfiguration lang, File file) { try { lang.save(file); String prefix = lang.getString("prefix"); - Utils.sendColoredMsg(Bukkit.getConsoleSender(), prefix + "&7" + langFilePath + " &aUpdated"); + Utils.sendColoredMsg(Bukkit.getConsoleSender(), prefix + "" + langFilePath + " Updated"); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/tk/shanebee/survival/item/ItemConfig.java b/src/main/java/tk/shanebee/survival/item/ItemConfig.java index 438428f..acf480d 100644 --- a/src/main/java/tk/shanebee/survival/item/ItemConfig.java +++ b/src/main/java/tk/shanebee/survival/item/ItemConfig.java @@ -13,7 +13,6 @@ public class ItemConfig { static ItemConfig INSTANCE; private final Survival plugin = Survival.getInstance(); - private final String prefix = plugin.getLang().prefix; private FileConfiguration settings; private File configFile; @@ -22,7 +21,7 @@ public class ItemConfig { loadDefaultSettings(); Nutrition.setup(); save(); - Utils.sendColoredConsoleMsg(prefix + "&7items.yml &aloaded"); + Utils.logMini("items.yml loaded"); } private void loadDefaultSettings() { @@ -32,7 +31,7 @@ private void loadDefaultSettings() { if (!configFile.exists()) { plugin.saveResource("items.yml", false); settings = YamlConfiguration.loadConfiguration(configFile); - Utils.sendColoredConsoleMsg(prefix + "&aNew items.yml created"); + Utils.logMini("New items.yml created"); } else { settings = YamlConfiguration.loadConfiguration(configFile); } diff --git a/src/main/java/tk/shanebee/survival/managers/BlockManager.java b/src/main/java/tk/shanebee/survival/managers/BlockManager.java index 898449c..d2cf371 100644 --- a/src/main/java/tk/shanebee/survival/managers/BlockManager.java +++ b/src/main/java/tk/shanebee/survival/managers/BlockManager.java @@ -67,7 +67,7 @@ else if (data.getMaterial() == Material.WALL_TORCH) { } ((Lightable) data).setLit(false); block.setBlockData(data); - }, 20 * seconds); + }, 20L * seconds); } private void loadDataFile(CommandSender sender) { @@ -75,23 +75,23 @@ private void loadDataFile(CommandSender sender) { data_file = new File(plugin.getDataFolder(), "data.yml"); if (!data_file.exists()) { plugin.saveResource("data.yml", true); - loaded = "&aNew data.yml created"; + loaded = "New data.yml created"; } else { - loaded = "&7data.yml &aloaded"; + loaded = "data.yml loaded"; } data = YamlConfiguration.loadConfiguration(data_file); - Utils.sendColoredMsg(sender, lang.prefix + loaded); + Utils.sendColoredMini(sender, lang.prefix + loaded); } /** - * Adds a non persistent torch to the data.yml file + * Adds a non-persistent torch to the data.yml file * - * @param block The torch to make non persistent + * @param block The torch to make non-persistent */ public void setNonPersistent(Block block) { List list = data.getStringList("NonPersistent Torches"); long time = System.currentTimeMillis(); - time = time + (1000 * seconds); + time = time + (1000L * seconds); list.add(locToString(block.getLocation()) + " time:" + time); data.set("NonPersistent Torches", list); try { @@ -102,7 +102,7 @@ public void setNonPersistent(Block block) { } /** - * Removes a non persistent torch from the data.yml file + * Removes a non-persistent torch from the data.yml file * * @param block The torch to remove as non persistent */ @@ -122,10 +122,10 @@ public void unsetNonPersistent(Block block) { } /** - * Checks if a torch is non persistent + * Checks if a torch is non-persistent * * @param block The torch to check - * @return Whether its persistent or not + * @return Whether it's persistent or not */ public boolean isNonPersistent(Block block) { return containsLoc(block.getLocation()); From efb1a993539aaa60b78bdb66f946a4e2fb3529bd Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 16:59:26 -0800 Subject: [PATCH 040/133] Overhaul block tags --- .../java/tk/shanebee/survival/Survival.java | 4 +- .../shanebee/survival/SurvivalBootstrap.java | 16 + .../survival/commands/DataGenCommand.java | 28 + .../survival/commands/SurvivalCommand.java | 3 + .../tk/shanebee/survival/data/PlayerData.java | 2 + .../generator/BlockTagFileGenerator.java | 283 ++++++++++ .../survival/generator/BlockTagGenerator.java | 97 ++++ .../tk/shanebee/survival/item/Nutrition.java | 1 - .../survival/listeners/block/BlockBreak.java | 32 +- .../survival/listeners/block/BlockPlace.java | 12 +- .../listeners/block/BurnoutTorches.java | 7 +- .../survival/listeners/item/BlazeSword.java | 3 +- .../shanebee/survival/listeners/item/Bow.java | 4 +- .../listeners/item/CompassWaypoint.java | 9 +- .../listeners/item/FirestrikerClick.java | 2 +- .../survival/listeners/item/GiantBlade.java | 1 - .../survival/listeners/item/MedicKit.java | 1 - .../survival/listeners/item/ShivPoison.java | 1 - .../survival/listeners/item/Valkyrie.java | 1 - .../survival/listeners/server/Guide.java | 4 +- .../listeners/server/RecipeDiscovery.java | 1 - .../tasks/tool/BlazeSwordEffects.java | 1 - .../survival/tasks/tool/Valkyrie.java | 1 - .../tk/shanebee/survival/util/BlockTags.java | 44 ++ .../tk/shanebee/survival/util/ItemUtils.java | 36 ++ .../java/tk/shanebee/survival/util/Utils.java | 519 +---------------- src/main/resources/block-tags.yml | 525 ++++++++++++++++++ src/main/resources/paper-plugin.yml | 13 + src/main/resources/plugin.yml | 9 - 29 files changed, 1091 insertions(+), 569 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/SurvivalBootstrap.java create mode 100644 src/main/java/tk/shanebee/survival/commands/DataGenCommand.java create mode 100644 src/main/java/tk/shanebee/survival/generator/BlockTagFileGenerator.java create mode 100644 src/main/java/tk/shanebee/survival/generator/BlockTagGenerator.java create mode 100644 src/main/java/tk/shanebee/survival/util/BlockTags.java create mode 100644 src/main/java/tk/shanebee/survival/util/ItemUtils.java create mode 100644 src/main/resources/block-tags.yml create mode 100644 src/main/resources/paper-plugin.yml delete mode 100644 src/main/resources/plugin.yml diff --git a/src/main/java/tk/shanebee/survival/Survival.java b/src/main/java/tk/shanebee/survival/Survival.java index 86ea49b..7bcde0c 100644 --- a/src/main/java/tk/shanebee/survival/Survival.java +++ b/src/main/java/tk/shanebee/survival/Survival.java @@ -30,6 +30,7 @@ import tk.shanebee.survival.managers.ScoreBoardManager; import tk.shanebee.survival.metrics.Metrics; import tk.shanebee.survival.tasks.TaskManager; +import tk.shanebee.survival.util.BlockTags; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; @@ -42,7 +43,7 @@ public class Survival extends JavaPlugin implements Listener { static { - ConfigurationSerialization.registerClass(PlayerData.class, "PlayerData"); + ConfigurationSerialization.registerClass(PlayerData.class); } private static Survival instance; @@ -147,6 +148,7 @@ public void onEnable() { } // LOAD MANAGERS + BlockTags.initialize(); blockManager = new BlockManager(this); playerManager = new PlayerManager(this, playerDataMap); effectManager = new EffectManager(this); diff --git a/src/main/java/tk/shanebee/survival/SurvivalBootstrap.java b/src/main/java/tk/shanebee/survival/SurvivalBootstrap.java new file mode 100644 index 0000000..52030f6 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/SurvivalBootstrap.java @@ -0,0 +1,16 @@ +package tk.shanebee.survival; + +import io.papermc.paper.plugin.bootstrap.BootstrapContext; +import io.papermc.paper.plugin.bootstrap.PluginBootstrap; +import org.jetbrains.annotations.NotNull; +import tk.shanebee.survival.generator.BlockTagGenerator; + +@SuppressWarnings({"UnstableApiUsage", "unused"}) +public class SurvivalBootstrap implements PluginBootstrap { + + @Override + public void bootstrap(@NotNull BootstrapContext context) { + new BlockTagGenerator(context); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java b/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java new file mode 100644 index 0000000..34a8976 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java @@ -0,0 +1,28 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.LiteralArgument; +import tk.shanebee.survival.Survival; +import tk.shanebee.survival.generator.BlockTagFileGenerator; +import tk.shanebee.survival.util.Utils; + +public class DataGenCommand extends BaseCommand { + + private final BlockTagFileGenerator blockTagFileGenerator; + + public DataGenCommand(Survival plugin) { + super(plugin); + this.blockTagFileGenerator = new BlockTagFileGenerator(); + } + + @Override + Argument register() { + return LiteralArgument.literal("datagen") + .executes(info -> { + this.blockTagFileGenerator.generateBlockTags(this.plugin.getDataFolder(), "generated/block-tags.yml"); + Utils.sendColoredMini(info.sender(), "Finished generating block-tags.yml"); + }); + } + + +} diff --git a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java index 08d1bae..e0daf54 100644 --- a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java @@ -22,6 +22,9 @@ public SurvivalCommand(Survival plugin, String commandName) { arguments.add(new ToggleChatCommand(plugin)); } + // TODO comment out + arguments.add(new DataGenCommand(plugin)); + register(commandName, arguments); } diff --git a/src/main/java/tk/shanebee/survival/data/PlayerData.java b/src/main/java/tk/shanebee/survival/data/PlayerData.java index 099d3e9..b128eea 100644 --- a/src/main/java/tk/shanebee/survival/data/PlayerData.java +++ b/src/main/java/tk/shanebee/survival/data/PlayerData.java @@ -5,6 +5,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.entity.Player; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; @@ -21,6 +22,7 @@ *

You can get an instance of PlayerData from {@link tk.shanebee.survival.managers.PlayerManager}

*/ @SuppressWarnings({"unused", "FieldCanBeLocal", "SameParameterValue"}) +@SerializableAs("PlayerData") public class PlayerData implements ConfigurationSerializable { private final Config config = Survival.getInstance().getSurvivalConfig(); diff --git a/src/main/java/tk/shanebee/survival/generator/BlockTagFileGenerator.java b/src/main/java/tk/shanebee/survival/generator/BlockTagFileGenerator.java new file mode 100644 index 0000000..e85a081 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/generator/BlockTagFileGenerator.java @@ -0,0 +1,283 @@ +package tk.shanebee.survival.generator; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.Tag; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings({"UnstableApiUsage", "UnusedReturnValue"}) +public class BlockTagFileGenerator { + + public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { + File file = new File(pluginDataFolder, path); + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + + List header = new ArrayList<>(); + + header.add("Block Tags"); + header.add("This file is used to create some tags the plugin uses."); + header.add("Modify this to your liking but be very careful when you do."); + header.add(" "); + header.add("This accepts both Minecraft block types `minecraft:stone`"); + header.add("and block tags prefixed with `#`, ex: `#minecraft:logs` (minecraft or custom)"); + header.add(" "); + header.add("The names of these sections double as tags."); + header.add("Example `requires_shovel` = `#survival_plus:requires_shovel`"); + config.options().setHeader(header); + + ConfigurationSection blocks = config.getConfigurationSection("blocks"); + if (blocks == null) blocks = config.createSection("blocks"); + + createConcreteTag(blocks); + createCookingBlockTag(blocks); + createFarmableTag(blocks); + createGlazedTerracottaTag(blocks); + createOresTag(blocks); + createOreTypeBlockTag(blocks); + createStoneTypeTag(blocks); + createStorageBlockTag(blocks); + createUtilityBlockTag(blocks); + + createRequiresAxeTag(blocks); + createRequiresPickaxeTag(blocks); + createRequiresShovelTag(blocks); + createRequiresShearsTag(blocks); + createRequiresHammerTag(blocks); + + + try { + config.save(file); + return config; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private void createGlazedTerracottaTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + Registry.BLOCK.forEach(block -> { + NamespacedKey namespacedKey = block.getKey(); + String key = namespacedKey.getKey(); + if (key.endsWith("_glazed_terracotta")) blocks.add(namespacedKey.toString()); + }); + section.set("glazed_terracotta", blocks); + } + + private void createConcreteTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + Registry.BLOCK.forEach(block -> { + NamespacedKey namespacedKey = block.getKey(); + String key = namespacedKey.getKey(); + if (key.endsWith("_concrete")) blocks.add(namespacedKey.toString()); + }); + section.set("concrete", blocks); + } + + private void createStoneTypeTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + blocks.add("minecraft:stone"); + blocks.add("cobblestone"); + blocks.add("minecraft:mossy_cobblestone"); + blocks.add("minecraft:infested_cobblestone"); + blocks.add("minecraft:andesite"); + blocks.add("minecraft:polished_andesite"); + blocks.add("minecraft:diorite"); + blocks.add("minecraft:polished_diorite"); + blocks.add("minecraft:granite"); + blocks.add("minecraft:polished_granite"); + blocks.add("minecraft:bricks"); + blocks.add("minecraft:nether_bricks"); + blocks.add("minecraft:sandstone"); + blocks.add("minecraft:chiseled_sandstone"); + blocks.add("minecraft:smooth_sandstone"); + blocks.add("minecraft:cut_sandstone"); + blocks.add("minecraft:red_sandstone"); + blocks.add("minecraft:chiseled_red_sandstone"); + blocks.add("minecraft:cut_red_sandstone"); + blocks.add("minecraft:smooth_red_sandstone"); + blocks.add("minecraft:prismarine"); + blocks.add("minecraft:prismarine_bricks"); + blocks.add("minecraft:dark_prismarine"); + blocks.add("minecraft:netherrack"); + blocks.add("minecraft:end_stone"); + blocks.add("minecraft:end_stone_bricks"); + blocks.add("minecraft:purpur_block"); + blocks.add("minecraft:purpur_pillar"); + // nether blocks + blocks.add("minecraft:basalt"); + blocks.add("minecraft:polished_basalt"); + blocks.add("minecraft:blackstone"); + blocks.add("minecraft:polished_blackstone"); + blocks.add("minecraft:chiseled_polished_blackstone"); + blocks.add("minecraft:chiseled_nether_bricks"); + blocks.add("minecraft:cracked_nether_bricks"); + blocks.add("minecraft:quartz_bricks"); + + section.set("stone_type", blocks); + } + + private void createCookingBlockTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + blocks.add("minecraft:furnace"); + blocks.add("minecraft:blast_furnace"); + blocks.add("minecraft:smoker"); + section.set("cooking_block", blocks); + } + + private void createStorageBlockTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + + blocks.add("#minecraft:shulker_boxes"); + blocks.add("minecraft:chest"); + blocks.add("minecraft:ender_chest"); + blocks.add("minecraft:trapped_chest"); + blocks.add("minecraft:barrel"); + + section.set("storage_block", blocks); + } + + private void createUtilityBlockTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + + blocks.add("minecraft:cartography_table"); + blocks.add("minecraft:fletching_table"); + blocks.add("minecraft:lectern"); + blocks.add("minecraft:loom"); + blocks.add("minecraft:stonecutter"); + blocks.add("minecraft:grindstone"); + blocks.add("minecraft:smithing_table"); + blocks.add("minecraft:anvil"); + blocks.add("minecraft:enchanting_table"); + blocks.add("minecraft:jukebox"); + blocks.add("minecraft:note_block"); + blocks.add("minecraft:brewing_stand"); + blocks.add("minecraft:cauldron"); + blocks.add("minecraft:composter"); + blocks.add("minecraft:respawn_anchor"); + blocks.add("minecraft:lodestone"); + + section.set("utility_block", blocks); + } + + private void createOreTypeBlockTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + + blocks.add("minecraft:coal_block"); + blocks.add("minecraft:diamond_block"); + blocks.add("minecraft:emerald_block"); + blocks.add("minecraft:gold_block"); + blocks.add("minecraft:iron_block"); + blocks.add("minecraft:lapis_block"); + blocks.add("minecraft:quartz_block"); + blocks.add("minecraft:redstone_block"); + blocks.add("minecraft:netherite_block"); + + section.set("ore_type_block", blocks); + } + + private void createOresTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + Registry.BLOCK.forEach(block -> { + String key = block.getKey().toString(); + if (key.endsWith("_ore")) blocks.add(key); + }); + + section.set("ores", blocks); + } + + private void createFarmableTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + + blocks.add("minecraft:melon"); + blocks.add("minecraft:melon_stem"); + blocks.add("minecraft:pumpkin"); + blocks.add("minecraft:pumpkin_stem"); + blocks.add("minecraft:chorus_flower"); + blocks.add("minecraft:chorus_plant"); + blocks.add("minecraft:carrots"); + blocks.add("minecraft:potatoes"); + blocks.add("minecraft:beetroots"); + blocks.add("minecraft:wheat"); + blocks.add("minecraft:sweet_berry_bush"); + blocks.add("minecraft:cocoa"); + + section.set("farmable", blocks); + } + + private void createRequiresAxeTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + for (Material value : Tag.MINEABLE_AXE.getValues()) { + if (!Tag.REPLACEABLE.isTagged(value)) blocks.add(value.getKey().toString()); + } + section.set("requires_axe", blocks); + section.setInlineComments("requires_axe", List.of("Blocks which require an axe to break.")); + + } + + private void createRequiresPickaxeTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + blocks.add("#minecraft:mineable/pickaxe"); + section.set("requires_pickaxe", blocks); + section.setInlineComments("requires_pickaxe", List.of("Blocks which require a pickaxe to break.")); + + } + + private void createRequiresShovelTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + for (Material value : Tag.MINEABLE_SHOVEL.getValues()) { + if (value != Material.GRAVEL) blocks.add(value.getKey().toString()); + } + section.set("requires_shovel", blocks); + section.setInlineComments("requires_shovel", List.of("Blocks which require a shovel to break.")); + + } + + private void createRequiresShearsTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + blocks.add(Material.COBWEB.getKey().toString()); + blocks.add(Material.TRIPWIRE.getKey().toString()); + blocks.add(Material.TNT.getKey().toString()); + blocks.add(Material.MUSHROOM_STEM.getKey().toString()); + section.set("requires_shears", blocks); + section.setInlineComments("requires_shears", List.of("Blocks which require shears to break.")); + } + + private void createRequiresHammerTag(@NotNull ConfigurationSection section) { + List blocks = new ArrayList<>(); + blocks.add("#minecraft:fence_gates"); + blocks.add("#minecraft:terracotta"); + blocks.add("#minecraft:shulker_boxes"); + blocks.add("#minecraft:beds"); + blocks.add("#minecraft:logs"); + blocks.add("#minecraft:stairs"); + blocks.add("#minecraft:slabs"); + blocks.add("#minecraft:planks"); + blocks.add("#minecraft:wooden_pressure_plates"); + blocks.add("#minecraft:wooden_fences"); + blocks.add("#minecraft:rails"); + blocks.add("#minecraft:banners"); + blocks.add("#minecraft:fences"); + blocks.add("#minecraft:signs"); + + blocks.add("#survival_plus:glazed_terracotta"); + blocks.add("#survival_plus:concrete"); + blocks.add("#survival_plus:stone_type"); + blocks.add("#survival_plus:cooking_block"); + blocks.add("#survival_plus:storage_block"); + blocks.add("#survival_plus:utility_block"); + blocks.add("#survival_plus:ore_type_block"); + + section.set("requires_hammer", blocks); + section.setInlineComments("requires_hammer", List.of("Blocks which require a hammer to place.")); + } + +} diff --git a/src/main/java/tk/shanebee/survival/generator/BlockTagGenerator.java b/src/main/java/tk/shanebee/survival/generator/BlockTagGenerator.java new file mode 100644 index 0000000..5ad7adf --- /dev/null +++ b/src/main/java/tk/shanebee/survival/generator/BlockTagGenerator.java @@ -0,0 +1,97 @@ +package tk.shanebee.survival.generator; + +import io.papermc.paper.plugin.bootstrap.BootstrapContext; +import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; +import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.tag.TagKey; +import io.papermc.paper.tag.PreFlattenTagRegistrar; +import io.papermc.paper.tag.TagEntry; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.logger.slf4j.ComponentLogger; +import org.bukkit.block.BlockType; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.codehaus.plexus.util.FileUtils; +import tk.shanebee.survival.util.Utils; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("UnstableApiUsage") +public class BlockTagGenerator { + + private FileConfiguration config; + + public BlockTagGenerator(BootstrapContext context) { + loadConfig(context.getDataDirectory()); + bootstrap(context); + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + private void loadConfig(Path dataFolder) { + File file = new File(dataFolder.toFile(), "block-tags.yml"); + if (!file.exists()) { + file.getParentFile().mkdirs(); + URL resource = getClass().getClassLoader().getResource("block-tags.yml"); + try { + FileUtils.copyURLToFile(resource, file); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + this.config = YamlConfiguration.loadConfiguration(file); + } + + @SuppressWarnings("NullableProblems") + private void bootstrap(BootstrapContext context) { + ComponentLogger logger = context.getLogger(); + LifecycleEventManager manager = context.getLifecycleManager(); + manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.BLOCK), event -> { + final PreFlattenTagRegistrar registrar = event.registrar(); + + logger.info(Utils.getMini("Bootstrap:")); + ConfigurationSection blocksSection = this.config.getConfigurationSection("blocks"); + assert blocksSection != null; + for (String key : blocksSection.getKeys(false)) { + createTagFromSection(key, registrar); + logger.info(Utils.getMini("Generating block tag '%s'", key)); + } + logger.info(Utils.getMini("Finished bootstrapping")); + }); + } + + @SuppressWarnings("PatternValidation") + private void createTagFromSection(String key, PreFlattenTagRegistrar registrar) { + List> entries = new ArrayList<>(); + for (String s : this.config.getStringList("blocks." + key)) { + entries.add(getTagEntry(s)); + } + + registrar.setTag(TagKey.create(registrar.registryKey(), Key.key("survival_plus:" + key)), entries); + } + + private TagEntry getTagEntry(String string) { + if (string.startsWith("#")) return getTagKeyEntry(string.substring(1)); + return getBlockEntry(string); + } + + @SuppressWarnings("PatternValidation") + private TagEntry getTagKeyEntry(String string) { + TagKey tagKey = TagKey.create(RegistryKey.BLOCK, Key.key(string)); + return TagEntry.tagEntry(tagKey); + } + + @SuppressWarnings("PatternValidation") + private TagEntry getBlockEntry(String string) { + TypedKey blockKey = TypedKey.create(RegistryKey.BLOCK, Key.key(string)); + return TagEntry.valueEntry(blockKey); + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/Nutrition.java b/src/main/java/tk/shanebee/survival/item/Nutrition.java index d8ba5dd..802594f 100644 --- a/src/main/java/tk/shanebee/survival/item/Nutrition.java +++ b/src/main/java/tk/shanebee/survival/item/Nutrition.java @@ -7,7 +7,6 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.Survival; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java index a19f539..ca00f6e 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java @@ -23,6 +23,8 @@ import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.util.BlockTags; +import tk.shanebee.survival.util.ItemUtils; import tk.shanebee.survival.util.Utils; import java.util.Random; @@ -50,8 +52,8 @@ private void onBlockBreak(BlockBreakEvent event) { if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { if (!Items.QUARTZ_PICKAXE.is(tool)) { if (settings.BREAK_ONLY_WITH_SHOVEL) { - if (!Utils.isShovel(tool.getType())) { - if (Utils.requiresShovel(material)) { + if (!Tag.ITEMS_SHOVELS.isTagged(tool.getType())) { + if (BlockTags.REQUIRES_SHOVEL.isTagged(material)) { event.setCancelled(true); player.updateInventory(); Utils.sendColoredMini(player, "" + lang.task_must_use_shovel); @@ -74,15 +76,15 @@ private void onBlockBreak(BlockBreakEvent event) { case PODZOL: case COARSE_DIRT: case FARMLAND: - if (Utils.isFarmable(above.getType())) { + if (BlockTags.FARMABLE.isTagged(above.getType())) { above.setType(Material.AIR); } } } } - if (settings.BREAK_ONLY_WITH_AXE && !Utils.isAxe(tool.getType())) { - if (Utils.requiresAxe(material)) { + if (settings.BREAK_ONLY_WITH_AXE && !Tag.ITEMS_AXES.isTagged(tool.getType())) { + if (BlockTags.REQUIRES_AXE.isTagged(material)) { event.setCancelled(true); player.updateInventory(); Utils.sendColoredMini(player, "" + lang.task_must_use_axe); @@ -96,8 +98,8 @@ private void onBlockBreak(BlockBreakEvent event) { block.getRelative(BlockFace.DOWN).getState().update(true); } } - if (settings.BREAK_ONLY_WITH_PICKAXE && !Utils.isPickaxe(tool.getType())) { - if (Utils.requiresPickaxe(material)) { + if (settings.BREAK_ONLY_WITH_PICKAXE && !Tag.ITEMS_PICKAXES.isTagged(tool.getType())) { + if (BlockTags.REQUIRES_PICKAXE.isTagged(material)) { event.setCancelled(true); player.updateInventory(); Utils.sendColoredMini(player, "" + lang.task_must_use_pick); @@ -105,7 +107,7 @@ private void onBlockBreak(BlockBreakEvent event) { } if (settings.BREAK_ONLY_WITH_SICKLE) { - if (Utils.isFarmable(material)) { + if (BlockTags.FARMABLE.isTagged(material)) { if (!Items.Tags.SICKLES.isTagged(tool)) { event.setCancelled(true); Utils.sendColoredMini(player, "" + lang.task_must_use_sickle); @@ -143,12 +145,12 @@ private void onBlockBreak(BlockBreakEvent event) { loc.getWorld().dropItemNaturally(loc.add(0.5,0.1,0.5), new ItemStack(drop, random)); } } - if (tool.getType().getMaxDurability() < Utils.getDurability(tool) + multiplier) { + if (tool.getType().getMaxDurability() < ItemUtils.getDurability(tool) + multiplier) { player.getInventory().setItemInMainHand(null); player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); return; } - Utils.setDurability(tool, Utils.getDurability(tool) + multiplier); + ItemUtils.setDurability(tool, ItemUtils.getDurability(tool) + multiplier); player.updateInventory(); } } @@ -156,7 +158,7 @@ private void onBlockBreak(BlockBreakEvent event) { if (!(tool.getType() == Material.SHEARS)) { if (settings.BREAK_ONLY_WITH_SHEARS) { - if (Utils.requiresShears(material)) { + if (BlockTags.REQUIRES_SHEARS.isTagged(material)) { event.setCancelled(true); player.updateInventory(); Utils.sendColoredMini(player, "" + lang.task_must_use_shear); @@ -178,7 +180,7 @@ private void onBlockBreak(BlockBreakEvent event) { block.getWorld().dropItem(block.getLocation(), workbench); } } else { - if (Utils.isOreBlock(material) || Utils.isNaturalOreBlock(material)) { + if (BlockTags.ORE_TYPE_BLOCK.isTagged(material) || BlockTags.ORES.isTagged(material)) { event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5,0.1,0.5), new ItemStack(material)); } } @@ -250,8 +252,8 @@ private void onHarvest(PlayerInteractEvent e) { bush.setAge(1); block.setBlockData(bush); - int durability = Utils.getDurability(tool) + multiplier; - Utils.setDurability(tool, durability); + int durability = ItemUtils.getDurability(tool) + multiplier; + ItemUtils.setDurability(tool, durability); player.playSound(loc, Sound.BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES, 1, 1); if (durability >= tool.getType().getMaxDurability()) { player.getInventory().setItemInMainHand(null); @@ -267,7 +269,7 @@ private void onWaterBreakCrops(BlockPhysicsEvent event) { if (!settings.BREAK_ONLY_WITH_SICKLE) return; if (event.getSourceBlock().getType() == Material.WATER) { Material type = event.getBlock().getType(); - if (Utils.isFarmable(type)) { + if (BlockTags.FARMABLE.isTagged(type)) { if (type == Material.MELON || type == Material.PUMPKIN) return; event.getBlock().setType(Material.AIR); } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java index 3204d22..07ceb84 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java @@ -14,6 +14,8 @@ import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.util.BlockTags; +import tk.shanebee.survival.util.ItemUtils; import tk.shanebee.survival.util.Utils; import java.util.Random; @@ -41,15 +43,15 @@ private void onBlockPlace(BlockPlaceEvent event) { if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { if (config.PLACE_ONLY_WITH_HAMMER) { - if (Utils.requiresHammer(block.getType())) { + if (BlockTags.REQUIRES_HAMMER.isTagged(block.getType())) { if (Items.HAMMER.is(offTool)) { Random rand = new Random(); int chance_reduceDur = rand.nextInt(10) + 1; if (chance_reduceDur == 1) { - Utils.setDurability(offTool, Utils.getDurability(offTool) + 1); + ItemUtils.setDurability(offTool, ItemUtils.getDurability(offTool) + 1); } - if (Utils.getDurability(offTool) >= offTool.getType().getMaxDurability()) { + if (ItemUtils.getDurability(offTool) >= offTool.getType().getMaxDurability()) { player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); player.getInventory().setItemInOffHand(null); } @@ -57,10 +59,10 @@ private void onBlockPlace(BlockPlaceEvent event) { Random rand = new Random(); int chance_reduceDur = rand.nextInt(10) + 1; if (chance_reduceDur == 1) { - Utils.setDurability(mainTool, ((Damageable) mainTool.getItemMeta()).getDamage() + 1); + ItemUtils.setDurability(mainTool, ((Damageable) mainTool.getItemMeta()).getDamage() + 1); } - if (Utils.getDurability(mainTool) >= mainTool.getType().getMaxDurability()) { + if (ItemUtils.getDurability(mainTool) >= mainTool.getType().getMaxDurability()) { player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); player.getInventory().setItemInMainHand(null); } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java b/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java index dabd1f2..d5c4cef 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java @@ -22,9 +22,8 @@ import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.managers.BlockManager; -import tk.shanebee.survival.util.Utils; +import tk.shanebee.survival.util.ItemUtils; import java.util.Random; @@ -81,8 +80,8 @@ private void onRelight(PlayerInteractEvent e) { assert loc.getWorld() != null; loc.getWorld().playSound(loc, Sound.ITEM_FLINTANDSTEEL_USE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - if ((Utils.getDurability(tool) + 1) < tool.getType().getMaxDurability()) - Utils.setDurability(tool, Utils.getDurability(tool) + 1); + if ((ItemUtils.getDurability(tool) + 1) < tool.getType().getMaxDurability()) + ItemUtils.setDurability(tool, ItemUtils.getDurability(tool) + 1); else { player.getInventory().setItemInMainHand(null); assert player.getLocation().getWorld() != null; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java b/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java index 2f1f7e7..fe552ae 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java @@ -19,7 +19,6 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; import java.util.ArrayList; import java.util.List; @@ -37,7 +36,7 @@ private void onItemClick(PlayerInteractEvent event) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { Material mat = event.getClickedBlock().getType(); - if (Tag.BEDS.isTagged(mat) || Tag.DOORS.isTagged(mat) || Tag.TRAPDOORS.isTagged(mat) || Utils.isWoodGate(mat)) { + if (Tag.BEDS.isTagged(mat) || Tag.DOORS.isTagged(mat) || Tag.TRAPDOORS.isTagged(mat) || Tag.FENCE_GATES.isTagged(mat)) { return; } switch (event.getClickedBlock().getType()) { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java b/src/main/java/tk/shanebee/survival/listeners/item/Bow.java index 31bed0e..3bbbda6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Bow.java @@ -15,9 +15,9 @@ import tk.shanebee.survival.util.Utils; public class Bow implements Listener { - + private Lang lang; - + public Bow(Survival plugin) { this.lang = plugin.getLang(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java index d595e00..ab3f865 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java @@ -16,6 +16,7 @@ import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; +import tk.shanebee.survival.util.BlockTags; import tk.shanebee.survival.util.Utils; public class CompassWaypoint implements Listener { @@ -54,11 +55,11 @@ private void onItemClick(PlayerInteractEvent event) { default: } if (Tag.BEDS.isTagged(clickedBlock.getType())) return; - if (Utils.isWoodGate(clickedBlock.getType())) return; + if (Tag.FENCE_GATES.isTagged(clickedBlock.getType())) return; if (Tag.DOORS.isTagged(clickedBlock.getType())) return; - if (Utils.isCookingBlock(clickedBlock.getType())) return; - if (Utils.isStorageBlock(clickedBlock.getType())) return; - if (Utils.isUtilityBlock(clickedBlock.getType())) return; + if (BlockTags.COOKING_BLOCK.isTagged(clickedBlock.getType())) return; + if (BlockTags.STORAGE_BLOCK.isTagged(clickedBlock.getType())) return; + if (BlockTags.UTILITY_BLOCK.isTagged(clickedBlock.getType())) return; Location loc = clickedBlock.getRelative(event.getBlockFace()).getLocation(); Utils.sendColoredMini(player, lang.compass_waypoint_set, locToString(loc)); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java index b832bdb..28cec84 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java @@ -93,7 +93,7 @@ private void onItemClick(PlayerInteractEvent event) { default: } if (Tag.BEDS.isTagged(clickedBlockType)) return; - if (Utils.isWoodGate(clickedBlockType)) return; + if (Tag.FENCE_GATES.isTagged(clickedBlockType)) return; if (Tag.TRAPDOORS.isTagged(clickedBlockType)) return; if (clickedBlockType == Material.CAMPFIRE) { Lightable camp = ((Lightable) clickedBlock.getBlockData()); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java index 5c2715b..4e14cb0 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java @@ -8,7 +8,6 @@ import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.config.Lang; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java index ad039c1..70f8d05 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java @@ -16,7 +16,6 @@ import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java index b8aaf21..5e14ca9 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java @@ -18,7 +18,6 @@ import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.util.Utils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java index 5ee2304..d4e0462 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java @@ -5,7 +5,6 @@ import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; diff --git a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java b/src/main/java/tk/shanebee/survival/listeners/server/Guide.java index 4b50fd1..f622844 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/Guide.java @@ -15,11 +15,11 @@ import tk.shanebee.survival.util.Utils; public class Guide implements Listener { - + private Survival plugin; private Lang lang; private Config config; - + public Guide(Survival plugin) { this.plugin = plugin; this.lang = plugin.getLang(); diff --git a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java index 7286631..ce4cdb7 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java @@ -15,7 +15,6 @@ import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.Survival; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.managers.RecipeManager.Recipes; public class RecipeDiscovery implements Listener { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java index 5dc284c..de57b6c 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java @@ -7,7 +7,6 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.item.Items; public class BlazeSwordEffects extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java index 60276bc..e8f1358 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java @@ -5,7 +5,6 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.Survival; -import tk.shanebee.survival.managers.ItemManager; import tk.shanebee.survival.item.Items; public class Valkyrie extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/util/BlockTags.java b/src/main/java/tk/shanebee/survival/util/BlockTags.java new file mode 100644 index 0000000..cd1b59a --- /dev/null +++ b/src/main/java/tk/shanebee/survival/util/BlockTags.java @@ -0,0 +1,44 @@ +package tk.shanebee.survival.util; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Tag; + +/** + * Custom block tags + */ +@SuppressWarnings("unused") +public class BlockTags { + + public static void initialize() { + } + + public static Tag CONCRETE = getTag("concrete"); + public static Tag COOKING_BLOCK = getTag("cooking_block"); + public static Tag FARMABLE = getTag("farmable"); + public static Tag GLAZED_TERRACOTTA = getTag("glazed_terracotta"); + public static Tag ORES = getTag("ores"); + public static Tag ORE_TYPE_BLOCK = getTag("ore_type_block"); + public static Tag STONE_TYPE = getTag("stone_type"); + public static Tag STORAGE_BLOCK = getTag("storage_block"); + public static Tag UTILITY_BLOCK = getTag("utility_block"); + + public static Tag REQUIRES_AXE = getTag("requires_axe"); + public static Tag REQUIRES_PICKAXE = getTag("requires_pickaxe"); + public static Tag REQUIRES_SHOVEL = getTag("requires_shovel"); + public static Tag REQUIRES_SHEARS = getTag("requires_shears"); + public static Tag REQUIRES_HAMMER = getTag("requires_hammer"); + + private static Tag getTag(String key) { + NamespacedKey namespacedKey = NamespacedKey.fromString("survival_plus:" + key); + assert namespacedKey != null; + Tag tag = Bukkit.getTag(Tag.REGISTRY_BLOCKS, namespacedKey, Material.class); + if (tag == null) { + Utils.logMini("Could not find tag for '%s'", namespacedKey.toString()); + return null; + } + return tag; + } + +} diff --git a/src/main/java/tk/shanebee/survival/util/ItemUtils.java b/src/main/java/tk/shanebee/survival/util/ItemUtils.java new file mode 100644 index 0000000..e764a55 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/util/ItemUtils.java @@ -0,0 +1,36 @@ +package tk.shanebee.survival.util; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; + +/** + * Utility methods for {@link ItemStack ItemStacks} + */ +public class ItemUtils { + + /** + * Set the durability of an ItemStack + * + * @param item The ItemStack to set + * @param durability The durability to set + */ + public static void setDurability(ItemStack item, int durability) { + ItemMeta meta = item.getItemMeta(); + assert meta != null; + ((Damageable) meta).setDamage(durability); + item.setItemMeta(meta); + } + + /** + * Check the durability of an ItemStack + * + * @param item The ItemStack to check + * @return The durability of the ItemStack + */ + public static int getDurability(ItemStack item) { + assert item.getItemMeta() != null; + return ((Damageable) item.getItemMeta()).getDamage(); + } + +} diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index ecba5de..7903688 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -1,6 +1,5 @@ package tk.shanebee.survival.util; -import com.google.common.collect.ImmutableSet; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; @@ -11,13 +10,9 @@ import org.bukkit.NamespacedKey; import org.bukkit.Particle; import org.bukkit.Statistic; -import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.metadata.Metadatable; import tk.shanebee.survival.Survival; import tk.shanebee.survival.config.Lang; @@ -34,490 +29,6 @@ public class Utils { private static final LegacyComponentSerializer COMPONENT_SERIALIZER = LegacyComponentSerializer.legacySection(); private static final Pattern HEX_PATTERN = Pattern.compile("<#([A-Fa-f0-9]){6}>"); - private static final ImmutableSet CONCRETE_BLOCKS; - private final static ImmutableSet GLAZED_TERRACOTTA; - private final static ImmutableSet NATURAL_ORE_BLOCK; - private final static ImmutableSet ORE_BLOCK; - private final static ImmutableSet COOKING_BLOCK; - private final static ImmutableSet UTILITY_BLOCK; - private final static ImmutableSet STORAGE_BLOCK; - private final static ImmutableSet STONE_TYPE_BLOCK; - private final static ImmutableSet FARMABLE; - private final static ImmutableSet REQUIRES_SHEARS; - private final static ImmutableSet REQUIRES_HAMMER; - private final static ImmutableSet REQUIRES_SHOVEL; - private final static ImmutableSet REQUIRES_AXE; - - static { - CONCRETE_BLOCKS = ImmutableSet.builder() - .add(Material.CYAN_CONCRETE) - .add(Material.BLACK_CONCRETE) - .add(Material.BLUE_CONCRETE) - .add(Material.BROWN_CONCRETE) - .add(Material.GRAY_CONCRETE) - .add(Material.GREEN_CONCRETE) - .add(Material.LIGHT_BLUE_CONCRETE) - .add(Material.LIGHT_GRAY_CONCRETE) - .add(Material.LIME_CONCRETE) - .add(Material.MAGENTA_CONCRETE) - .add(Material.ORANGE_CONCRETE) - .add(Material.PINK_CONCRETE) - .add(Material.PURPLE_CONCRETE) - .add(Material.RED_CONCRETE) - .add(Material.WHITE_CONCRETE) - .add(Material.YELLOW_CONCRETE) - .build(); - - GLAZED_TERRACOTTA = ImmutableSet.builder() - .add(Material.BLACK_GLAZED_TERRACOTTA) - .add(Material.BLUE_GLAZED_TERRACOTTA) - .add(Material.BROWN_GLAZED_TERRACOTTA) - .add(Material.CYAN_GLAZED_TERRACOTTA) - .add(Material.GRAY_GLAZED_TERRACOTTA) - .add(Material.GREEN_GLAZED_TERRACOTTA) - .add(Material.LIGHT_BLUE_GLAZED_TERRACOTTA) - .add(Material.LIME_GLAZED_TERRACOTTA) - .add(Material.MAGENTA_GLAZED_TERRACOTTA) - .add(Material.ORANGE_GLAZED_TERRACOTTA) - .add(Material.PINK_GLAZED_TERRACOTTA) - .add(Material.PURPLE_GLAZED_TERRACOTTA) - .add(Material.RED_GLAZED_TERRACOTTA) - .add(Material.LIGHT_GRAY_GLAZED_TERRACOTTA) - .add(Material.WHITE_GLAZED_TERRACOTTA) - .add(Material.YELLOW_GLAZED_TERRACOTTA) - .build(); - - NATURAL_ORE_BLOCK = ImmutableSet.builder() - .add(Material.COAL_ORE) - .add(Material.DIAMOND_ORE) - .add(Material.EMERALD_ORE) - .add(Material.GOLD_ORE) - .add(Material.IRON_ORE) - .add(Material.LAPIS_ORE) - .add(Material.NETHER_QUARTZ_ORE) - .add(Material.REDSTONE_ORE) - .add(Material.NETHER_GOLD_ORE) - .add(Material.ANCIENT_DEBRIS) - .add(Material.GILDED_BLACKSTONE) - .build(); - - ORE_BLOCK = ImmutableSet.builder() - .add(Material.COAL_BLOCK) - .add(Material.DIAMOND_BLOCK) - .add(Material.EMERALD_BLOCK) - .add(Material.GOLD_BLOCK) - .add(Material.IRON_BLOCK) - .add(Material.LAPIS_BLOCK) - .add(Material.QUARTZ_BLOCK) - .add(Material.REDSTONE_BLOCK) - .add(Material.NETHERITE_BLOCK) - .build(); - - COOKING_BLOCK = ImmutableSet.builder() - .add(Material.FURNACE) - .add(Material.BLAST_FURNACE) - .add(Material.SMOKER) - .build(); - - UTILITY_BLOCK = ImmutableSet.builder() - .add(Material.CARTOGRAPHY_TABLE) - .add(Material.FLETCHING_TABLE) - .add(Material.LECTERN) - .add(Material.LOOM) - .add(Material.STONECUTTER) - .add(Material.GRINDSTONE) - .add(Material.SMITHING_TABLE) - .add(Material.ANVIL) - .add(Material.ENCHANTING_TABLE) - .add(Material.JUKEBOX) - .add(Material.NOTE_BLOCK) - .add(Material.BREWING_STAND) - .add(Material.CAULDRON) - .add(Material.COMPOSTER) - .add(Material.RESPAWN_ANCHOR) - .add(Material.LODESTONE) - .build(); - - STORAGE_BLOCK = ImmutableSet.builder() - .add(Material.CHEST) - .add(Material.ENDER_CHEST) - .add(Material.TRAPPED_CHEST) - .add(Material.BARREL) - .build(); - - STONE_TYPE_BLOCK = ImmutableSet.builder() - .add(Material.STONE) - .add(Material.COBBLESTONE) - .add(Material.MOSSY_COBBLESTONE) - .add(Material.INFESTED_COBBLESTONE) - .add(Material.ANDESITE) - .add(Material.POLISHED_ANDESITE) - .add(Material.DIORITE) - .add(Material.POLISHED_DIORITE) - .add(Material.GRANITE) - .add(Material.POLISHED_GRANITE) - .add(Material.BRICKS) - .add(Material.NETHER_BRICKS) - .add(Material.SANDSTONE) - .add(Material.CHISELED_SANDSTONE) - .add(Material.SMOOTH_SANDSTONE) - .add(Material.CUT_SANDSTONE) - .add(Material.RED_SANDSTONE) - .add(Material.CHISELED_RED_SANDSTONE) - .add(Material.CUT_RED_SANDSTONE) - .add(Material.SMOOTH_RED_SANDSTONE) - .add(Material.PRISMARINE) - .add(Material.PRISMARINE_BRICKS) - .add(Material.DARK_PRISMARINE) - .add(Material.NETHERRACK) - .add(Material.END_STONE) - .add(Material.END_STONE_BRICKS) - .add(Material.PURPUR_BLOCK) - .add(Material.PURPUR_PILLAR) - // Nether update blocks - .add(Material.BASALT) - .add(Material.POLISHED_BASALT) - .add(Material.BLACKSTONE) - .add(Material.POLISHED_BLACKSTONE) - .add(Material.CHISELED_POLISHED_BLACKSTONE) - .add(Material.CHISELED_NETHER_BRICKS) - .add(Material.CRACKED_NETHER_BRICKS) - .add(Material.QUARTZ_BRICKS) - .build(); - - FARMABLE = ImmutableSet.builder() - .add(Material.MELON) - .add(Material.MELON_STEM) - .add(Material.PUMPKIN) - .add(Material.PUMPKIN_STEM) - .add(Material.CHORUS_FLOWER) - .add(Material.CHORUS_PLANT) - .add(Material.CARROTS) - .add(Material.POTATOES) - .add(Material.BEETROOTS) - .add(Material.WHEAT) - .add(Material.SWEET_BERRY_BUSH) - .add(Material.COCOA) - .build(); - - REQUIRES_SHEARS = ImmutableSet.builder() - .add(Material.COBWEB) - .add(Material.TRIPWIRE) - .add(Material.TNT) - .add(Material.MUSHROOM_STEM) - .build(); - - REQUIRES_HAMMER = ImmutableSet.builder() - .add(Material.BOOKSHELF) - .add(Material.LADDER) - .add(Material.SEA_LANTERN) - .add(Material.GLOWSTONE) - .add(Material.END_ROD) - .add(Material.DISPENSER) - .add(Material.DROPPER) - .add(Material.HOPPER) - .add(Material.STONE_PRESSURE_PLATE) - .add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE) - .add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE) - .add(Material.DAYLIGHT_DETECTOR) - .add(Material.PISTON) - .add(Material.STICKY_PISTON) - .add(Material.REDSTONE_LAMP) - .add(Material.REPEATER) - .add(Material.COMPARATOR) - .add(Material.TRIPWIRE_HOOK) - .add(Material.BEACON) - .add(Material.IRON_BARS) - .add(Material.SCAFFOLDING) - .build(); - - ImmutableSet.Builder requiresShovelBuilder = ImmutableSet.builder(); - for (Material value : Tag.MINEABLE_SHOVEL.getValues()) { - if (value != Material.GRAVEL) requiresShovelBuilder.add(value); - } - REQUIRES_SHOVEL = requiresShovelBuilder.build(); - - ImmutableSet.Builder requiresAxeBuilder = ImmutableSet.builder(); - for (Material value : Tag.MINEABLE_AXE.getValues()) { - if (!Tag.REPLACEABLE.isTagged(value)) requiresAxeBuilder.add(value); - } - REQUIRES_AXE = requiresAxeBuilder.build(); - } - - /** - * Check if a material is concrete - * - * @param material Material to check - * @return True if material is concrete - */ - public static boolean isConcrete(Material material) { - return CONCRETE_BLOCKS.contains(material); - } - - /** - * Check if a material is concrete powder - * - * @param material Material to check - * @return True if material is concrete powder - */ - public static boolean isConcretePowder(Material material) { - return Tag.CONCRETE_POWDER.isTagged(material); - } - - /** - * Check if a material is glazed terracotta - * - * @param material Material to check - * @return True if material is glazed terracotta - */ - public static boolean isGlazedTerracotta(Material material) { - return GLAZED_TERRACOTTA.contains(material); - } - - /** - * Check if a material is terracotta - * - * @param material Material to check - * @return True if material is terracotta - */ - public static boolean isTerracotta(Material material) { - return Tag.TERRACOTTA.isTagged(material); - } - - /** - * Check if a material is a natural ore block - *

ie: coal ore, diamond ore, iron ore

- * - * @param material Material to check - * @return True if material is natural ore block - */ - public static boolean isNaturalOreBlock(Material material) { - return NATURAL_ORE_BLOCK.contains(material); - } - - /** - * Check if a material is an ore block - *

ie: coal block, diamond block, iron block

- * - * @param material Material to check - * @return True if material is ore block - */ - public static boolean isOreBlock(Material material) { - return ORE_BLOCK.contains(material); - } - - /** - * Check if a material is a cooking block - *

ie: furnace, blast furnace, smoker

- * - * @param material Material to check - * @return True if material is cooking block - */ - public static boolean isCookingBlock(Material material) { - return COOKING_BLOCK.contains(material); - } - - /** - * Check if a material is a utility block - *

ie: cartography table, grindstone, anvil

- * - * @param material Material to check - * @return True if material is utility block - */ - public static boolean isUtilityBlock(Material material) { - return UTILITY_BLOCK.contains(material); - } - - /** - * Check if a material is a shulker box - * - * @param material Material to check - * @return True if material is shulker box - */ - public static boolean isShulkerBox(Material material) { - return Tag.SHULKER_BOXES.isTagged(material); - } - - /** - * Check if a material is a storage block - *

ie: chest, ender chest, barrel

- * - * @param material Material to check - * @return True if material is storage block - */ - public static boolean isStorageBlock(Material material) { - return STORAGE_BLOCK.contains(material) || Tag.SHULKER_BOXES.isTagged(material); - } - - /** - * Check if a material is stone block type - * - * @param material Material to check - * @return True if material is stone block type - */ - public static boolean isStoneTypeBlock(Material material) { - if (STONE_TYPE_BLOCK.contains(material)) return true; - if (isNonWoodSlab(material)) return true; - if (isNonWoodStairs(material)) return true; - return Tag.STONE_BRICKS.isTagged(material) || Tag.WALLS.isTagged(material); - } - - /** - * Check if a material is a non wood door - * - * @param material Material to check - * @return True if material is non wood door - */ - public static boolean isNonWoodDoor(Material material) { - return (Tag.DOORS.isTagged(material) && !Tag.WOODEN_DOORS.isTagged(material)); - } - - /** - * Check if a material is a non wood slab - * - * @param material Material to check - * @return True if material is non wood slab - */ - public static boolean isNonWoodSlab(Material material) { - return (Tag.SLABS.isTagged(material) && !Tag.WOODEN_SLABS.isTagged(material)); - } - - /** - * Check if a material is a non wood stair - * - * @param material Material to check - * @return True if material is non wood stair - */ - public static boolean isNonWoodStairs(Material material) { - return (Tag.STAIRS.isTagged(material) && !Tag.WOODEN_STAIRS.isTagged(material)); - } - - /** - * Check if a material is a wood gate - * - * @param material Material to check - * @return True if material is wood gate - */ - public static boolean isWoodGate(Material material) { - return Tag.FENCE_GATES.isTagged(material); - } - - /** - * Check if a material is a farmable block - *

ie: melon, potatoes, wheat

- * - * @param material Material to check - * @return True if material is farmable block - */ - public static boolean isFarmable(Material material) { - return FARMABLE.contains(material); - } - - /** - * Check if a material is a shove - * - * @param material Material to check - * @return True if material is shovel - */ - public static boolean isShovel(Material material) { - return Tag.ITEMS_SHOVELS.isTagged(material); - } - - /** - * Check if a material requires a shovel to dig it - * - * @param material Material to check - * @return True if material requires a shovel - */ - public static boolean requiresShovel(Material material) { - return REQUIRES_SHOVEL.contains(material); - } - - /** - * Check if a material is a pickaxe - * - * @param material Material to check - * @return True if material is a pickaxe - */ - public static boolean isPickaxe(Material material) { - return Tag.ITEMS_PICKAXES.isTagged(material); - } - - /** - * Check if a material requires a pickaxe to mine it - *

ie: ores, non-wood doors/slabs/stairs, concrete

- * - * @param material Material to check - * @return True if material requires pickaxe - */ - public static boolean requiresPickaxe(Material material) { - return Tag.MINEABLE_PICKAXE.isTagged(material); - } - - /** - * Check if a material is an axe - * - * @param material Material to check - * @return True if material is axe - */ - public static boolean isAxe(Material material) { - return Tag.ITEMS_AXES.isTagged(material); - } - - /** - * Check if a material requires an axe to break - * - * @param material Material to check - * @return True if material requires axe - */ - public static boolean requiresAxe(Material material) { - return REQUIRES_AXE.contains(material); - } - - /** - * Check if a material requires shears to break - *

ie: cobweb, tripwire, tnt

- * - * @param material Material to check - * @return True if material requires shears - */ - public static boolean requiresShears(Material material) { - return REQUIRES_SHEARS.contains(material); - } - - /** - * Check if a material requires a hammer (in offhand) to place - * - * @param material Material to check - * @return True if material requires hammer - */ - public static boolean requiresHammer(Material material) { - if (REQUIRES_HAMMER.contains(material)) return true; - return Tag.DOORS.isTagged(material) - - || isWoodGate(material) - || isTerracotta(material) - || isGlazedTerracotta(material) - || isConcrete(material) - || isStoneTypeBlock(material) - || isCookingBlock(material) - || isStorageBlock(material) - || isUtilityBlock(material) - || isShulkerBox(material) - || isOreBlock(material) - - || Tag.BEDS.isTagged(material) - || Tag.LOGS.isTagged(material) - || Tag.STAIRS.isTagged(material) - || Tag.SLABS.isTagged(material) - || Tag.PLANKS.isTagged(material) - || Tag.WOODEN_PRESSURE_PLATES.isTagged(material) - || Tag.WOODEN_FENCES.isTagged(material) - || Tag.RAILS.isTagged(material) - || Tag.BANNERS.isTagged(material) - || Tag.FENCES.isTagged(material) - || Tag.SIGNS.isTagged(material); - } /** * Get the drops for a certain material @@ -645,10 +156,10 @@ public static void log(String format, Object... objects) { * @param msg Message to log to console */ public static void logMini(String msg) { - Lang lang = Survival.getInstance().getLang(); + Survival plugin = Survival.getInstance(); String prefix = "[SurvivalPlus] "; - if (lang != null) { - prefix = lang.prefix; + if (plugin != null && plugin.getLang() != null) { + prefix = plugin.getLang().prefix; } sendColoredMini(Bukkit.getConsoleSender(), prefix + msg); } @@ -715,30 +226,6 @@ public static void spawnParticle(Location location, Particle particle, int amoun player.spawnParticle(particle, location, amount, offsetX, offsetY, offsetZ); } - /** - * Set the durability of an ItemStack - * - * @param item The ItemStack to set - * @param durability The durability to set - */ - public static void setDurability(ItemStack item, int durability) { - ItemMeta meta = item.getItemMeta(); - assert meta != null; - ((Damageable) meta).setDamage(durability); - item.setItemMeta(meta); - } - - /** - * Check the durability of an ItemStack - * - * @param item The ItemStack to check - * @return The durability of the ItemStack - */ - public static int getDurability(ItemStack item) { - assert item.getItemMeta() != null; - return ((Damageable) item.getItemMeta()).getDamage(); - } - /** * Gets the minutes a player has played on the server * diff --git a/src/main/resources/block-tags.yml b/src/main/resources/block-tags.yml new file mode 100644 index 0000000..f17c1f6 --- /dev/null +++ b/src/main/resources/block-tags.yml @@ -0,0 +1,525 @@ +# Block Tags +# This file is used to create some tags the plugin uses. +# Modify this to your liking but be very careful when you do. +# +# This accepts both Minecraft block types `minecraft:stone` +# and block tags prefixed with `#`, ex: `#minecraft:logs` (minecraft or custom) +# +# The names of these sections double as tags. +# Example `requires_shovel` = `#survival_plus:requires_shovel` + +blocks: + concrete: + - minecraft:black_concrete + - minecraft:green_concrete + - minecraft:magenta_concrete + - minecraft:light_blue_concrete + - minecraft:gray_concrete + - minecraft:yellow_concrete + - minecraft:white_concrete + - minecraft:brown_concrete + - minecraft:lime_concrete + - minecraft:cyan_concrete + - minecraft:blue_concrete + - minecraft:purple_concrete + - minecraft:light_gray_concrete + - minecraft:red_concrete + - minecraft:orange_concrete + - minecraft:pink_concrete + cooking_block: + - minecraft:furnace + - minecraft:blast_furnace + - minecraft:smoker + farmable: + - minecraft:melon + - minecraft:melon_stem + - minecraft:pumpkin + - minecraft:pumpkin_stem + - minecraft:chorus_flower + - minecraft:chorus_plant + - minecraft:carrots + - minecraft:potatoes + - minecraft:beetroots + - minecraft:wheat + - minecraft:sweet_berry_bush + - minecraft:cocoa + glazed_terracotta: + - minecraft:pink_glazed_terracotta + - minecraft:blue_glazed_terracotta + - minecraft:cyan_glazed_terracotta + - minecraft:magenta_glazed_terracotta + - minecraft:brown_glazed_terracotta + - minecraft:light_blue_glazed_terracotta + - minecraft:purple_glazed_terracotta + - minecraft:green_glazed_terracotta + - minecraft:orange_glazed_terracotta + - minecraft:gray_glazed_terracotta + - minecraft:black_glazed_terracotta + - minecraft:yellow_glazed_terracotta + - minecraft:light_gray_glazed_terracotta + - minecraft:white_glazed_terracotta + - minecraft:red_glazed_terracotta + - minecraft:lime_glazed_terracotta + ores: + - minecraft:nether_gold_ore + - minecraft:deepslate_gold_ore + - minecraft:lapis_ore + - minecraft:diamond_ore + - minecraft:redstone_ore + - minecraft:deepslate_copper_ore + - minecraft:deepslate_lapis_ore + - minecraft:iron_ore + - minecraft:deepslate_emerald_ore + - minecraft:deepslate_coal_ore + - minecraft:deepslate_iron_ore + - minecraft:nether_quartz_ore + - minecraft:deepslate_redstone_ore + - minecraft:emerald_ore + - minecraft:copper_ore + - minecraft:gold_ore + - minecraft:deepslate_diamond_ore + - minecraft:coal_ore + ore_type_block: + - minecraft:coal_block + - minecraft:diamond_block + - minecraft:emerald_block + - minecraft:gold_block + - minecraft:iron_block + - minecraft:lapis_block + - minecraft:quartz_block + - minecraft:redstone_block + - minecraft:netherite_block + stone_type: + - minecraft:stone + - cobblestone + - minecraft:mossy_cobblestone + - minecraft:infested_cobblestone + - minecraft:andesite + - minecraft:polished_andesite + - minecraft:diorite + - minecraft:polished_diorite + - minecraft:granite + - minecraft:polished_granite + - minecraft:bricks + - minecraft:nether_bricks + - minecraft:sandstone + - minecraft:chiseled_sandstone + - minecraft:smooth_sandstone + - minecraft:cut_sandstone + - minecraft:red_sandstone + - minecraft:chiseled_red_sandstone + - minecraft:cut_red_sandstone + - minecraft:smooth_red_sandstone + - minecraft:prismarine + - minecraft:prismarine_bricks + - minecraft:dark_prismarine + - minecraft:netherrack + - minecraft:end_stone + - minecraft:end_stone_bricks + - minecraft:purpur_block + - minecraft:purpur_pillar + - minecraft:basalt + - minecraft:polished_basalt + - minecraft:blackstone + - minecraft:polished_blackstone + - minecraft:chiseled_polished_blackstone + - minecraft:chiseled_nether_bricks + - minecraft:cracked_nether_bricks + - minecraft:quartz_bricks + storage_block: + - '#minecraft:shulker_boxes' + - minecraft:chest + - minecraft:ender_chest + - minecraft:trapped_chest + - minecraft:barrel + utility_block: + - minecraft:cartography_table + - minecraft:fletching_table + - minecraft:lectern + - minecraft:loom + - minecraft:stonecutter + - minecraft:grindstone + - minecraft:smithing_table + - minecraft:anvil + - minecraft:enchanting_table + - minecraft:jukebox + - minecraft:note_block + - minecraft:brewing_stand + - minecraft:cauldron + - minecraft:composter + - minecraft:respawn_anchor + - minecraft:lodestone + requires_axe: # Blocks which require an axe to break. + - minecraft:jungle_wood + - minecraft:dark_oak_sapling + - minecraft:birch_door + - minecraft:spruce_fence + - minecraft:warped_slab + - minecraft:oak_trapdoor + - minecraft:warped_wall_hanging_sign + - minecraft:birch_trapdoor + - minecraft:acacia_log + - minecraft:crimson_stairs + - minecraft:birch_planks + - minecraft:crimson_button + - minecraft:creaking_heart + - minecraft:chest + - minecraft:stripped_warped_stem + - minecraft:lime_banner + - minecraft:dark_oak_sign + - minecraft:fletching_table + - minecraft:stripped_acacia_log + - minecraft:cherry_pressure_plate + - minecraft:crimson_pressure_plate + - minecraft:spruce_wall_hanging_sign + - minecraft:oak_log + - minecraft:warped_hanging_sign + - minecraft:birch_slab + - minecraft:melon_stem + - minecraft:spruce_button + - minecraft:bamboo_mosaic_slab + - minecraft:stripped_crimson_hyphae + - minecraft:pale_oak_trapdoor + - minecraft:potatoes + - minecraft:spruce_log + - minecraft:big_dripleaf + - minecraft:cherry_sapling + - minecraft:green_wall_banner + - minecraft:acacia_fence + - minecraft:black_wall_banner + - minecraft:cyan_wall_banner + - minecraft:magenta_wall_banner + - minecraft:pale_oak_fence_gate + - minecraft:oak_sign + - minecraft:gray_wall_banner + - minecraft:oak_wood + - minecraft:acacia_slab + - minecraft:jungle_trapdoor + - minecraft:mangrove_log + - minecraft:dark_oak_button + - minecraft:birch_fence + - minecraft:cherry_wall_sign + - minecraft:mangrove_wall_sign + - minecraft:orange_wall_banner + - minecraft:cherry_planks + - minecraft:brown_mushroom_block + - minecraft:mangrove_trapdoor + - minecraft:stripped_warped_hyphae + - minecraft:bamboo_door + - minecraft:jungle_stairs + - minecraft:ladder + - minecraft:spruce_wood + - minecraft:acacia_button + - minecraft:crafting_table + - minecraft:crimson_fence + - minecraft:bamboo + - minecraft:pale_oak_fence + - minecraft:cherry_wall_hanging_sign + - minecraft:stripped_oak_log + - minecraft:cherry_stairs + - minecraft:oak_fence + - minecraft:cave_vines + - minecraft:yellow_banner + - minecraft:dark_oak_planks + - minecraft:jungle_slab + - minecraft:brown_wall_banner + - minecraft:pink_banner + - minecraft:jungle_wall_hanging_sign + - minecraft:bamboo_fence_gate + - minecraft:jungle_door + - minecraft:stripped_spruce_wood + - minecraft:cherry_sign + - minecraft:stripped_mangrove_log + - minecraft:acacia_sapling + - minecraft:birch_pressure_plate + - minecraft:acacia_wood + - minecraft:oak_door + - minecraft:bamboo_wall_hanging_sign + - minecraft:blue_wall_banner + - minecraft:crimson_door + - minecraft:oak_sapling + - minecraft:mangrove_hanging_sign + - minecraft:pale_oak_slab + - minecraft:stripped_dark_oak_wood + - minecraft:crimson_trapdoor + - minecraft:dark_oak_fence_gate + - minecraft:stripped_spruce_log + - minecraft:campfire + - minecraft:light_blue_wall_banner + - minecraft:pale_oak_log + - minecraft:azalea + - minecraft:acacia_hanging_sign + - minecraft:stripped_jungle_log + - minecraft:stripped_jungle_wood + - minecraft:red_banner + - minecraft:acacia_fence_gate + - minecraft:crimson_slab + - minecraft:dark_oak_pressure_plate + - minecraft:birch_log + - minecraft:chorus_flower + - minecraft:stripped_cherry_wood + - minecraft:cherry_fence + - minecraft:bamboo_wall_sign + - minecraft:bamboo_trapdoor + - minecraft:twisting_vines + - minecraft:pale_oak_wood + - minecraft:dark_oak_slab + - minecraft:bamboo_fence + - minecraft:spruce_pressure_plate + - minecraft:birch_wood + - minecraft:spruce_slab + - minecraft:stripped_mangrove_wood + - minecraft:spruce_planks + - minecraft:lily_pad + - minecraft:beehive + - minecraft:yellow_wall_banner + - minecraft:mangrove_fence + - minecraft:lectern + - minecraft:orange_banner + - minecraft:oak_stairs + - minecraft:acacia_door + - minecraft:white_banner + - minecraft:oak_pressure_plate + - minecraft:jungle_hanging_sign + - minecraft:weeping_vines + - minecraft:melon + - minecraft:jungle_sign + - minecraft:jungle_fence + - minecraft:beetroots + - minecraft:green_banner + - minecraft:red_mushroom + - minecraft:oak_hanging_sign + - minecraft:spruce_trapdoor + - minecraft:bee_nest + - minecraft:acacia_wall_hanging_sign + - minecraft:pale_oak_stairs + - minecraft:dark_oak_wall_hanging_sign + - minecraft:mangrove_planks + - minecraft:mangrove_wood + - minecraft:bamboo_block + - minecraft:acacia_sign + - minecraft:acacia_pressure_plate + - minecraft:dark_oak_wall_sign + - minecraft:light_gray_banner + - minecraft:pale_oak_sign + - minecraft:loom + - minecraft:smithing_table + - minecraft:bamboo_pressure_plate + - minecraft:wheat + - minecraft:warped_pressure_plate + - minecraft:purple_wall_banner + - minecraft:black_banner + - minecraft:bamboo_stairs + - minecraft:spruce_stairs + - minecraft:warped_trapdoor + - minecraft:stripped_cherry_log + - minecraft:pale_oak_sapling + - minecraft:cyan_banner + - minecraft:acacia_wall_sign + - minecraft:jungle_log + - minecraft:bamboo_button + - minecraft:birch_sapling + - minecraft:mangrove_pressure_plate + - minecraft:dark_oak_stairs + - minecraft:warped_stem + - minecraft:cocoa + - minecraft:pale_oak_door + - minecraft:bamboo_sign + - minecraft:crimson_sign + - minecraft:soul_campfire + - minecraft:purple_banner + - minecraft:light_blue_banner + - minecraft:magenta_banner + - minecraft:pink_wall_banner + - minecraft:birch_button + - minecraft:sugar_cane + - minecraft:pale_oak_pressure_plate + - minecraft:spruce_sign + - minecraft:composter + - minecraft:mangrove_slab + - minecraft:cherry_wood + - minecraft:cherry_fence_gate + - minecraft:pale_oak_planks + - minecraft:warped_sign + - minecraft:crimson_fungus + - minecraft:stripped_pale_oak_wood + - minecraft:stripped_bamboo_block + - minecraft:pale_oak_button + - minecraft:bamboo_planks + - minecraft:brown_banner + - minecraft:flowering_azalea + - minecraft:dark_oak_hanging_sign + - minecraft:mangrove_sign + - minecraft:white_wall_banner + - minecraft:acacia_trapdoor + - minecraft:mushroom_stem + - minecraft:brown_mushroom + - minecraft:blue_banner + - minecraft:jungle_button + - minecraft:crimson_hanging_sign + - minecraft:daylight_detector + - minecraft:jack_o_lantern + - minecraft:oak_fence_gate + - minecraft:oak_wall_sign + - minecraft:attached_pumpkin_stem + - minecraft:carved_pumpkin + - minecraft:crimson_fence_gate + - minecraft:pumpkin + - minecraft:dark_oak_log + - minecraft:oak_button + - minecraft:jungle_planks + - minecraft:jungle_sapling + - minecraft:warped_wall_sign + - minecraft:birch_stairs + - minecraft:dark_oak_trapdoor + - minecraft:cherry_door + - minecraft:jukebox + - minecraft:pale_oak_wall_hanging_sign + - minecraft:dark_oak_fence + - minecraft:spruce_door + - minecraft:birch_wall_hanging_sign + - minecraft:red_wall_banner + - minecraft:birch_fence_gate + - minecraft:chorus_plant + - minecraft:crimson_stem + - minecraft:mangrove_propagule + - minecraft:bamboo_slab + - minecraft:crimson_planks + - minecraft:stripped_acacia_wood + - minecraft:warped_hyphae + - minecraft:mangrove_fence_gate + - minecraft:birch_sign + - minecraft:sweet_berry_bush + - minecraft:mangrove_button + - minecraft:spruce_hanging_sign + - minecraft:jungle_fence_gate + - minecraft:oak_wall_hanging_sign + - minecraft:pale_oak_wall_sign + - minecraft:oak_slab + - minecraft:red_mushroom_block + - minecraft:birch_hanging_sign + - minecraft:spruce_wall_sign + - minecraft:jungle_wall_sign + - minecraft:birch_wall_sign + - minecraft:weeping_vines_plant + - minecraft:spore_blossom + - minecraft:warped_door + - minecraft:chiseled_bookshelf + - minecraft:nether_wart + - minecraft:acacia_stairs + - minecraft:small_dripleaf + - minecraft:bamboo_hanging_sign + - minecraft:stripped_birch_log + - minecraft:cherry_log + - minecraft:cherry_hanging_sign + - minecraft:mangrove_stairs + - minecraft:stripped_dark_oak_log + - minecraft:cherry_slab + - minecraft:spruce_sapling + - minecraft:stripped_oak_wood + - minecraft:pale_oak_hanging_sign + - minecraft:attached_melon_stem + - minecraft:bamboo_mosaic_stairs + - minecraft:oak_planks + - minecraft:warped_fence_gate + - minecraft:light_gray_wall_banner + - minecraft:stripped_crimson_stem + - minecraft:trapped_chest + - minecraft:big_dripleaf_stem + - minecraft:stripped_birch_wood + - minecraft:mangrove_roots + - minecraft:dark_oak_wood + - minecraft:scaffolding + - minecraft:warped_button + - minecraft:barrel + - minecraft:jungle_pressure_plate + - minecraft:warped_fence + - minecraft:bamboo_mosaic + - minecraft:cave_vines_plant + - minecraft:bookshelf + - minecraft:acacia_planks + - minecraft:twisting_vines_plant + - minecraft:mangrove_wall_hanging_sign + - minecraft:warped_planks + - minecraft:gray_banner + - minecraft:spruce_fence_gate + - minecraft:crimson_wall_hanging_sign + - minecraft:mangrove_door + - minecraft:pumpkin_stem + - minecraft:warped_stairs + - minecraft:cherry_button + - minecraft:cherry_trapdoor + - minecraft:note_block + - minecraft:cartography_table + - minecraft:dark_oak_door + - minecraft:stripped_pale_oak_log + - minecraft:carrots + - minecraft:crimson_hyphae + - minecraft:crimson_wall_sign + - minecraft:warped_fungus + - minecraft:lime_wall_banner + requires_pickaxe: # Blocks which require a pickaxe to break. + - '#minecraft:mineable/pickaxe' + requires_shovel: # Blocks which require a shovel to break. + - minecraft:mud + - minecraft:magenta_concrete_powder + - minecraft:light_blue_concrete_powder + - minecraft:yellow_concrete_powder + - minecraft:sand + - minecraft:snow_block + - minecraft:farmland + - minecraft:muddy_mangrove_roots + - minecraft:cyan_concrete_powder + - minecraft:green_concrete_powder + - minecraft:light_gray_concrete_powder + - minecraft:purple_concrete_powder + - minecraft:brown_concrete_powder + - minecraft:coarse_dirt + - minecraft:dirt + - minecraft:rooted_dirt + - minecraft:lime_concrete_powder + - minecraft:soul_sand + - minecraft:soul_soil + - minecraft:red_concrete_powder + - minecraft:white_concrete_powder + - minecraft:black_concrete_powder + - minecraft:dirt_path + - minecraft:blue_concrete_powder + - minecraft:snow + - minecraft:pink_concrete_powder + - minecraft:podzol + - minecraft:suspicious_gravel + - minecraft:red_sand + - minecraft:grass_block + - minecraft:clay + - minecraft:orange_concrete_powder + - minecraft:suspicious_sand + - minecraft:gray_concrete_powder + - minecraft:mycelium + requires_shears: # Blocks which require shears to break. + - minecraft:cobweb + - minecraft:tripwire + - minecraft:tnt + - minecraft:mushroom_stem + requires_hammer: # Blocks which require a hammer to place. + - '#minecraft:fence_gates' + - '#minecraft:terracotta' + - '#minecraft:shulker_boxes' + - '#minecraft:beds' + - '#minecraft:logs' + - '#minecraft:stairs' + - '#minecraft:slabs' + - '#minecraft:planks' + - '#minecraft:wooden_pressure_plates' + - '#minecraft:wooden_fences' + - '#minecraft:rails' + - '#minecraft:banners' + - '#minecraft:fences' + - '#minecraft:signs' + - '#survival_plus:glazed_terracotta' + - '#survival_plus:concrete' + - '#survival_plus:stone_type' + - '#survival_plus:cooking_block' + - '#survival_plus:storage_block' + - '#survival_plus:utility_block' + - '#survival_plus:ore_type_block' diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..3937fc1 --- /dev/null +++ b/src/main/resources/paper-plugin.yml @@ -0,0 +1,13 @@ +name: SurvivalPlus +version: '${version}' +main: tk.shanebee.survival.SurvivalPlugin +description: "A fun new way to change mechanics of Minecraft" +authors: [ShaneBee] +website: 'https://github.com/ShaneBeeStudios/SurvivalPlus' +bootstrapper: tk.shanebee.survival.SurvivalBootstrap +api-version: '1.21.4' +dependencies: + server: + PlaceholderAPI: + load: BEFORE + required: false diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml deleted file mode 100644 index a96e630..0000000 --- a/src/main/resources/plugin.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: SurvivalPlus -main: tk.shanebee.survival.Survival -authors: [FattyMieo, ShaneBee] -version: '${version}' -api-version: '1.15' -softdepend: - - PlaceholderAPI - - Multiverse-Core - - Oh_the_dungeons_youll_go From d21e4742f35b2f1b494bf5754ccc74c02887e948 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 16:59:54 -0800 Subject: [PATCH 041/133] Survival.java - rename to SurvivalPlugin --- .../survival/{Survival.java => SurvivalPlugin.java} | 10 +++++----- .../tk/shanebee/survival/commands/BaseCommand.java | 6 +++--- .../tk/shanebee/survival/commands/DataGenCommand.java | 4 ++-- .../tk/shanebee/survival/commands/GiveItemCommand.java | 4 ++-- .../tk/shanebee/survival/commands/HealCommand.java | 4 ++-- .../shanebee/survival/commands/NutritionCommand.java | 4 ++-- .../shanebee/survival/commands/PlayerDataCommand.java | 4 ++-- .../tk/shanebee/survival/commands/ReloadCommand.java | 4 ++-- .../tk/shanebee/survival/commands/StatCommand.java | 4 ++-- .../tk/shanebee/survival/commands/SurvivalCommand.java | 4 ++-- .../shanebee/survival/commands/ToggleChatCommand.java | 4 ++-- src/main/java/tk/shanebee/survival/config/Config.java | 6 +++--- src/main/java/tk/shanebee/survival/config/Lang.java | 6 +++--- .../tk/shanebee/survival/config/PlayerDataConfig.java | 6 +++--- .../java/tk/shanebee/survival/data/PlayerData.java | 4 ++-- .../java/tk/shanebee/survival/gui/NutritionGUI.java | 4 ++-- .../java/tk/shanebee/survival/item/ItemConfig.java | 4 ++-- .../survival/item/items/FireStrikerListen.java | 4 ++-- .../tk/shanebee/survival/listeners/EventManager.java | 6 +++--- .../shanebee/survival/listeners/block/BlockBreak.java | 4 ++-- .../shanebee/survival/listeners/block/BlockPlace.java | 4 ++-- .../survival/listeners/block/BurnoutTorches.java | 4 ++-- .../tk/shanebee/survival/listeners/block/Campfire.java | 6 +++--- .../tk/shanebee/survival/listeners/block/Chairs.java | 6 +++--- .../survival/listeners/block/SnowGeneration.java | 6 +++--- .../survival/listeners/block/WorkbenchShare.java | 6 +++--- .../survival/listeners/entity/ChestPigmen.java | 4 ++-- .../survival/listeners/entity/ChickenSpawn.java | 4 ++-- .../survival/listeners/entity/EntityDeath.java | 4 ++-- .../survival/listeners/entity/LivingSlime.java | 6 +++--- .../survival/listeners/entity/MerchantTrades.java | 4 ++-- .../survival/listeners/entity/PiglinBarter.java | 4 ++-- .../java/tk/shanebee/survival/listeners/item/Bow.java | 8 ++++---- .../survival/listeners/item/CompassWaypoint.java | 4 ++-- .../survival/listeners/item/FirestrikerClick.java | 4 ++-- .../survival/listeners/item/FoodDiversityConsume.java | 4 ++-- .../shanebee/survival/listeners/item/GiantBlade.java | 6 +++--- .../survival/listeners/item/GrapplingHook.java | 4 ++-- .../tk/shanebee/survival/listeners/item/MedicKit.java | 6 +++--- .../survival/listeners/item/ObsidianMaceWeakness.java | 4 ++-- .../shanebee/survival/listeners/item/RecurvedBow.java | 6 +++--- .../shanebee/survival/listeners/item/ShivPoison.java | 4 ++-- .../survival/listeners/item/ThirstListener.java | 6 +++--- .../shanebee/survival/listeners/item/TropicalFish.java | 4 ++-- .../tk/shanebee/survival/listeners/item/Valkyrie.java | 6 +++--- .../survival/listeners/item/WaterBottleCrafting.java | 6 +++--- .../tk/shanebee/survival/listeners/item/WaterBowl.java | 6 +++--- .../survival/listeners/player/EnergyChange.java | 6 +++--- .../survival/listeners/player/PlayerDataListener.java | 6 +++--- .../tk/shanebee/survival/listeners/server/Guide.java | 6 +++--- .../shanebee/survival/listeners/server/LocalChat.java | 4 ++-- .../survival/listeners/server/RecipeDiscovery.java | 6 +++--- .../listeners/server/ResourcePackListener.java | 4 ++-- .../tk/shanebee/survival/managers/BlockManager.java | 6 +++--- .../tk/shanebee/survival/managers/EffectManager.java | 6 +++--- .../tk/shanebee/survival/managers/MerchantManager.java | 4 ++-- .../tk/shanebee/survival/managers/Placeholders.java | 6 +++--- .../tk/shanebee/survival/managers/PlayerManager.java | 6 +++--- .../tk/shanebee/survival/managers/RecipeManager.java | 6 +++--- .../shanebee/survival/managers/ScoreBoardManager.java | 6 +++--- .../tk/shanebee/survival/managers/StatusManager.java | 4 ++-- .../java/tk/shanebee/survival/tasks/EnergyDrain.java | 4 ++-- .../tk/shanebee/survival/tasks/HealthBoardTask.java | 6 +++--- .../tk/shanebee/survival/tasks/NutrientsAlert.java | 4 ++-- .../tk/shanebee/survival/tasks/NutrientsDrain.java | 4 ++-- .../tk/shanebee/survival/tasks/NutrientsEffect.java | 4 ++-- .../java/tk/shanebee/survival/tasks/TaskManager.java | 4 ++-- .../java/tk/shanebee/survival/tasks/ThirstAlert.java | 4 ++-- .../java/tk/shanebee/survival/tasks/ThirstDrain.java | 4 ++-- .../tk/shanebee/survival/tasks/ThirstDrainHeat.java | 4 ++-- .../tk/shanebee/survival/tasks/ThirstDrainNether.java | 4 ++-- .../java/tk/shanebee/survival/tasks/WeatherTask.java | 4 ++-- .../survival/tasks/tool/BlazeSwordEffects.java | 6 +++--- .../shanebee/survival/tasks/tool/BlazeSwordSound.java | 6 +++--- .../tk/shanebee/survival/tasks/tool/GiantBlade.java | 6 +++--- .../tk/shanebee/survival/tasks/tool/ObsidianMace.java | 6 +++--- .../tk/shanebee/survival/tasks/tool/QuartzPickaxe.java | 6 +++--- .../java/tk/shanebee/survival/tasks/tool/Valkyrie.java | 6 +++--- src/main/java/tk/shanebee/survival/util/Utils.java | 6 +++--- 79 files changed, 198 insertions(+), 198 deletions(-) rename src/main/java/tk/shanebee/survival/{Survival.java => SurvivalPlugin.java} (97%) diff --git a/src/main/java/tk/shanebee/survival/Survival.java b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java similarity index 97% rename from src/main/java/tk/shanebee/survival/Survival.java rename to src/main/java/tk/shanebee/survival/SurvivalPlugin.java index 7bcde0c..0ec0f44 100644 --- a/src/main/java/tk/shanebee/survival/Survival.java +++ b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java @@ -40,13 +40,13 @@ import java.util.UUID; @SuppressWarnings("ConstantConditions") -public class Survival extends JavaPlugin implements Listener { +public class SurvivalPlugin extends JavaPlugin implements Listener { static { ConfigurationSerialization.registerClass(PlayerData.class); } - private static Survival instance; + private static SurvivalPlugin instance; // Lists & Maps private final List Rates = new ArrayList<>(); @@ -221,12 +221,12 @@ public void onDisable() { if (workbench != null && workbench.getType() == Material.CRAFTING_TABLE) { if (workbench.hasMetadata("shared_players")) - workbench.removeMetadata("shared_players", Survival.instance); + workbench.removeMetadata("shared_players", SurvivalPlugin.instance); else p.getOpenInventory().getTopInventory().clear(); p.closeInventory(); } - p.removeMetadata("shared_workbench", Survival.instance); + p.removeMetadata("shared_workbench", SurvivalPlugin.instance); } } } @@ -310,7 +310,7 @@ private void registerCommands() { /** Get instance of this plugin * @return Instance of this plugin */ - public static Survival getInstance() { + public static SurvivalPlugin getInstance() { return instance; } diff --git a/src/main/java/tk/shanebee/survival/commands/BaseCommand.java b/src/main/java/tk/shanebee/survival/commands/BaseCommand.java index 7f5d50d..90b5d53 100644 --- a/src/main/java/tk/shanebee/survival/commands/BaseCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/BaseCommand.java @@ -1,19 +1,19 @@ package tk.shanebee.survival.commands; import dev.jorel.commandapi.arguments.Argument; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.managers.PlayerManager; public abstract class BaseCommand { - protected final Survival plugin; + protected final SurvivalPlugin plugin; protected final Config config; protected final Lang lang; protected final PlayerManager playerManager; - public BaseCommand(Survival plugin) { + public BaseCommand(SurvivalPlugin plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); this.lang = plugin.getLang(); diff --git a/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java b/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java index 34a8976..e4c6bf4 100644 --- a/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java @@ -2,7 +2,7 @@ import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.generator.BlockTagFileGenerator; import tk.shanebee.survival.util.Utils; @@ -10,7 +10,7 @@ public class DataGenCommand extends BaseCommand { private final BlockTagFileGenerator blockTagFileGenerator; - public DataGenCommand(Survival plugin) { + public DataGenCommand(SurvivalPlugin plugin) { super(plugin); this.blockTagFileGenerator = new BlockTagFileGenerator(); } diff --git a/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java b/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java index 0c450bf..dec7b49 100644 --- a/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java @@ -15,7 +15,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Item; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; @@ -30,7 +30,7 @@ public class GiveItemCommand extends BaseCommand { private final List names = new ArrayList<>(); - public GiveItemCommand(Survival plugin) { + public GiveItemCommand(SurvivalPlugin plugin) { super(plugin); Items.allItemKeys().forEach(key -> this.names.add(key.value())); } diff --git a/src/main/java/tk/shanebee/survival/commands/HealCommand.java b/src/main/java/tk/shanebee/survival/commands/HealCommand.java index 7450dce..7691871 100644 --- a/src/main/java/tk/shanebee/survival/commands/HealCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/HealCommand.java @@ -6,7 +6,7 @@ import org.bukkit.attribute.Attribute; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.util.Utils; @@ -15,7 +15,7 @@ public class HealCommand extends BaseCommand { - public HealCommand(Survival plugin) { + public HealCommand(SurvivalPlugin plugin) { super(plugin); } diff --git a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java index 6547780..d3ea9dd 100644 --- a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java @@ -3,14 +3,14 @@ import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.gui.NutritionGUI; import tk.shanebee.survival.item.Nutrition; import tk.shanebee.survival.util.Utils; public class NutritionCommand extends BaseCommand{ - public NutritionCommand(Survival plugin) { + public NutritionCommand(SurvivalPlugin plugin) { super(plugin); } diff --git a/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java b/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java index 0b0daab..a2b8115 100644 --- a/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java @@ -6,7 +6,7 @@ import dev.jorel.commandapi.arguments.LiteralArgument; import dev.jorel.commandapi.arguments.MultiLiteralArgument; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.util.Utils; @@ -14,7 +14,7 @@ public class PlayerDataCommand extends BaseCommand { - public PlayerDataCommand(Survival plugin) { + public PlayerDataCommand(SurvivalPlugin plugin) { super(plugin); } diff --git a/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java b/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java index 71fb215..c29203a 100644 --- a/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java @@ -2,12 +2,12 @@ import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.util.Utils; public class ReloadCommand extends BaseCommand { - public ReloadCommand(Survival plugin) { + public ReloadCommand(SurvivalPlugin plugin) { super(plugin); } diff --git a/src/main/java/tk/shanebee/survival/commands/StatCommand.java b/src/main/java/tk/shanebee/survival/commands/StatCommand.java index 97bc01f..9aa5864 100644 --- a/src/main/java/tk/shanebee/survival/commands/StatCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/StatCommand.java @@ -10,7 +10,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.Info; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; @@ -25,7 +25,7 @@ public class StatCommand extends BaseCommand { private final List infoTooltips = new ArrayList<>(); private final List typeTooltips = new ArrayList<>(); - public StatCommand(Survival plugin) { + public StatCommand(SurvivalPlugin plugin) { super(plugin); setupInfos("all", "Manage all stats"); diff --git a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java index e0daf54..f07c548 100644 --- a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java @@ -1,14 +1,14 @@ package tk.shanebee.survival.commands; import dev.jorel.commandapi.CommandTree; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import java.util.ArrayList; import java.util.List; public class SurvivalCommand { - public SurvivalCommand(Survival plugin, String commandName) { + public SurvivalCommand(SurvivalPlugin plugin, String commandName) { List arguments = new ArrayList<>(); arguments.add(new GiveItemCommand(plugin)); diff --git a/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java b/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java index 3c0798f..0b97f7a 100644 --- a/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java @@ -7,7 +7,7 @@ import dev.jorel.commandapi.arguments.LiteralArgument; import dev.jorel.commandapi.arguments.StringArgument; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.util.Utils; @@ -18,7 +18,7 @@ public class ToggleChatCommand extends BaseCommand { private final List typeTooltips = new ArrayList<>(); - public ToggleChatCommand(Survival plugin) { + public ToggleChatCommand(SurvivalPlugin plugin) { super(plugin); setupInfos("global", "Set chat to global chat"); setupInfos("local", "Set chat to local chat"); diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index ec64e47..3ff5fa6 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -2,7 +2,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.util.Utils; import java.io.File; @@ -12,7 +12,7 @@ public class Config { - private final Survival plugin; + private final SurvivalPlugin plugin; private FileConfiguration settings; private File configFile; @@ -222,7 +222,7 @@ public class Config { // HIDDEN CONFIG public int RECIPE_DELAY; - public Config(Survival plugin) { + public Config(SurvivalPlugin plugin) { this.plugin = plugin; loadDefaultSettings(); } diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index df3b356..472b049 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -4,7 +4,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.util.Utils; import java.io.File; @@ -15,7 +15,7 @@ public class Lang { - private final Survival plugin; + private final SurvivalPlugin plugin; private final String langFilePath; private FileConfiguration lang; @@ -204,7 +204,7 @@ public class Lang { public String cmd_heal_by; public String cmd_heal_other; - public Lang(Survival main, String language) { + public Lang(SurvivalPlugin main, String language) { this.plugin = main; this.langFilePath = "lang_" + language + ".yml"; } diff --git a/src/main/java/tk/shanebee/survival/config/PlayerDataConfig.java b/src/main/java/tk/shanebee/survival/config/PlayerDataConfig.java index 5802b31..7ee6f5c 100644 --- a/src/main/java/tk/shanebee/survival/config/PlayerDataConfig.java +++ b/src/main/java/tk/shanebee/survival/config/PlayerDataConfig.java @@ -2,7 +2,7 @@ import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import java.io.File; @@ -10,10 +10,10 @@ public class PlayerDataConfig { - private final Survival plugin; + private final SurvivalPlugin plugin; private File playerDirectory = null; - public PlayerDataConfig(Survival plugin) { + public PlayerDataConfig(SurvivalPlugin plugin) { this.plugin = plugin; loadPlayerDirectory(); } diff --git a/src/main/java/tk/shanebee/survival/data/PlayerData.java b/src/main/java/tk/shanebee/survival/data/PlayerData.java index b128eea..ba0f308 100644 --- a/src/main/java/tk/shanebee/survival/data/PlayerData.java +++ b/src/main/java/tk/shanebee/survival/data/PlayerData.java @@ -7,7 +7,7 @@ import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.util.Math; @@ -25,7 +25,7 @@ @SerializableAs("PlayerData") public class PlayerData implements ConfigurationSerializable { - private final Config config = Survival.getInstance().getSurvivalConfig(); + private final Config config = SurvivalPlugin.getInstance().getSurvivalConfig(); private final UUID uuid; private int thirst; private Map compassMap = new HashMap<>(); diff --git a/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java b/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java index 132d430..73f6d2f 100644 --- a/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java +++ b/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java @@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Nutrition; import tk.shanebee.survival.util.Utils; @@ -28,7 +28,7 @@ public class NutritionGUI implements InventoryHolder, Listener { private final ItemStack LAST_PAGE_BUTTON; private final ItemStack NEXT_PAGE_BUTTON; - public NutritionGUI(Survival plugin) { + public NutritionGUI(SurvivalPlugin plugin) { this.lang = plugin.getLang(); Bukkit.getPluginManager().registerEvents(this, plugin); LAST_PAGE_BUTTON = getButton(Material.PAPER, Utils.getColoredString(lang.nutrition_gui_last_page)); diff --git a/src/main/java/tk/shanebee/survival/item/ItemConfig.java b/src/main/java/tk/shanebee/survival/item/ItemConfig.java index acf480d..4025dd6 100644 --- a/src/main/java/tk/shanebee/survival/item/ItemConfig.java +++ b/src/main/java/tk/shanebee/survival/item/ItemConfig.java @@ -2,7 +2,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.util.Utils; import java.io.File; @@ -12,7 +12,7 @@ public class ItemConfig { static ItemConfig INSTANCE; - private final Survival plugin = Survival.getInstance(); + private final SurvivalPlugin plugin = SurvivalPlugin.getInstance(); private FileConfiguration settings; private File configFile; diff --git a/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java b/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java index 603c18f..eb132be 100644 --- a/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java +++ b/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java @@ -16,7 +16,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; @@ -33,7 +33,7 @@ public class FireStrikerListen implements Runnable, InventoryHolder { private int burnTime; public FireStrikerListen(Player player, ItemStack item) { - Survival plugin = Survival.getInstance(); + SurvivalPlugin plugin = SurvivalPlugin.getInstance(); Lang lang = plugin.getLang(); this.inv = Bukkit.createInventory(this, InventoryType.FURNACE, Utils.getColoredString(lang.firestriker)); this.player = player; diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index ae71800..ad86d9d 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -2,7 +2,7 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.listeners.block.BlockBreak; import tk.shanebee.survival.listeners.block.BlockPlace; @@ -54,11 +54,11 @@ */ public class EventManager { - private final Survival plugin; + private final SurvivalPlugin plugin; private final int LOCAL_CHAT; private final Config config; - public EventManager(Survival plugin) { + public EventManager(SurvivalPlugin plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); this.LOCAL_CHAT = config.settings_local_chat_distance; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java index ca00f6e..a603a68 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java @@ -19,7 +19,7 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; @@ -34,7 +34,7 @@ public class BlockBreak implements Listener { private final Config settings; private final Lang lang; - public BlockBreak(Survival plugin) { + public BlockBreak(SurvivalPlugin plugin) { this.lang = plugin.getLang(); this.settings = plugin.getSurvivalConfig(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java index 07ceb84..cf1ad1a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java @@ -10,7 +10,7 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; @@ -25,7 +25,7 @@ public class BlockPlace implements Listener { private final Config config; private final Lang lang; - public BlockPlace(Survival plugin) { + public BlockPlace(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); this.lang = plugin.getLang(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java b/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java index d5c4cef..30916ec 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java @@ -20,7 +20,7 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.BlockManager; import tk.shanebee.survival.util.ItemUtils; @@ -37,7 +37,7 @@ public class BurnoutTorches implements Listener { private final BlockManager torchManager; - public BurnoutTorches(Survival plugin) { + public BurnoutTorches(SurvivalPlugin plugin) { this.torchManager = plugin.getBlockManager(); this.RELIGHTABLE = plugin.getSurvivalConfig().MECHANICS_BURNOUT_TORCH_RELIGHT; this.PERSISTENT_TORCHES = plugin.getSurvivalConfig().MECHANICS_BURNOUT_TORCH_PERSIST; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java index 8f1730c..d83fa21 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java @@ -12,16 +12,16 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; import java.util.Random; public class Campfire implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; - public Campfire(Survival plugin) { + public Campfire(SurvivalPlugin plugin) { this.plugin = plugin; } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java b/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java index ee04d95..4f07721 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java @@ -21,7 +21,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.util.Vector; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import java.util.ArrayList; @@ -29,10 +29,10 @@ public class Chairs implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; private final Config config; - public Chairs(Survival plugin) { + public Chairs(SurvivalPlugin plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java b/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java index b51de3a..27fc92e 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java @@ -7,13 +7,13 @@ import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.world.ChunkLoadEvent; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; public class SnowGeneration implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; - public SnowGeneration(Survival plugin) { + public SnowGeneration(SurvivalPlugin plugin) { this.plugin = plugin; } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java b/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java index c1efd6f..5d14a27 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java @@ -17,15 +17,15 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import java.util.*; public class WorkbenchShare implements Listener { - private Survival plugin; + private SurvivalPlugin plugin; - public WorkbenchShare(Survival plugin) { + public WorkbenchShare(SurvivalPlugin plugin) { this.plugin = plugin; } diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java index 2d4bb72..00e54fc 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java @@ -17,7 +17,7 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import java.util.ArrayList; import java.util.List; @@ -30,7 +30,7 @@ public class ChestPigmen implements Listener { private final AttributeModifier mod; - public ChestPigmen(Survival plugin) { + public ChestPigmen(SurvivalPlugin plugin) { this.goldItems = new ArrayList<>(); for (Material material : Registry.MATERIAL) { if (material.isItem() && material.getKey().toString().contains("gold")) { diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java index 189db9e..7d74c75 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java @@ -11,7 +11,7 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.player.PlayerEggThrowEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; @@ -24,7 +24,7 @@ public class ChickenSpawn implements Listener { private final boolean alwaysBaby; private final int babyTicks; - public ChickenSpawn(Survival plugin) { + public ChickenSpawn(SurvivalPlugin plugin) { Config config = plugin.getSurvivalConfig(); this.maxEggs = config.ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS; this.alwaysBaby = config.ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java b/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java index d027a5f..6e5b122 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java @@ -7,7 +7,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; @@ -19,7 +19,7 @@ public class EntityDeath implements Listener { private final Config config; private final int SUSPICIOUS_MEAT_CHANCE; - public EntityDeath(Survival plugin) { + public EntityDeath(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); this.SUSPICIOUS_MEAT_CHANCE = Math.max(0, this.config.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE); } diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java b/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java index 183d9a9..a617088 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java @@ -17,13 +17,13 @@ import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; public class LivingSlime implements Listener { - private Survival plugin; + private SurvivalPlugin plugin; - public LivingSlime(Survival plugin) { + public LivingSlime(SurvivalPlugin plugin) { this.plugin = plugin; } diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java b/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java index 9c456eb..3500b99 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java @@ -5,14 +5,14 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.Merchant; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.managers.MerchantManager; public class MerchantTrades implements Listener { private MerchantManager merchantManager; - public MerchantTrades(Survival plugin) { + public MerchantTrades(SurvivalPlugin plugin) { this.merchantManager = plugin.getMerchantManager(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java index c506cf4..d3c3238 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java @@ -9,7 +9,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionType; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; @@ -23,7 +23,7 @@ public class PiglinBarter implements Listener { private final boolean ALT_DROPS; private final Random RANDOM; - public PiglinBarter(Survival plugin) { + public PiglinBarter(SurvivalPlugin plugin) { Config config = plugin.getSurvivalConfig(); this.SLOW_ARMOR = config.MECHANICS_SLOW_ARMOR; this.THIRST_ENABLED = config.mechanics_thirst_enabled; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java b/src/main/java/tk/shanebee/survival/listeners/item/Bow.java index 3bbbda6..19ab925 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Bow.java @@ -10,7 +10,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.CrossbowMeta; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; @@ -18,7 +18,7 @@ public class Bow implements Listener { private Lang lang; - public Bow(Survival plugin) { + public Bow(SurvivalPlugin plugin) { this.lang = plugin.getLang(); } @@ -28,7 +28,7 @@ private void onShootWithoutArrows(EntityShootBowEvent event) { Player player = (Player) event.getEntity(); ItemStack mainHand = player.getInventory().getItemInMainHand(); if (event.getBow() != null && mainHand.getType() == event.getBow().getType()) { - if (Survival.getInstance().getPlayerManager().isArrowOffHand(player)) { + if (SurvivalPlugin.getInstance().getPlayerManager().isArrowOffHand(player)) { event.setCancelled(false); } else { if (mainHand.getType() != Material.CROSSBOW) { @@ -53,7 +53,7 @@ private void onLoadCrossbow(PlayerInteractEvent event) { if (mainHand.getType() == Material.CROSSBOW && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { if (event.getHand() == EquipmentSlot.OFF_HAND) return; if (mainHand.getItemMeta() != null && ((CrossbowMeta) mainHand.getItemMeta()).hasChargedProjectiles()) return; - if (!Survival.getInstance().getPlayerManager().isArrowOffHand(player)) { + if (!SurvivalPlugin.getInstance().getPlayerManager().isArrowOffHand(player)) { event.setCancelled(true); Utils.sendColoredMsg(player, lang.arrows_off_hand_crossbow); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java index ab3f865..c506c51 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java @@ -12,7 +12,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; @@ -24,7 +24,7 @@ public class CompassWaypoint implements Listener { private final Lang lang; private final PlayerManager playerManager; - public CompassWaypoint(Survival plugin) { + public CompassWaypoint(SurvivalPlugin plugin) { this.lang = plugin.getLang(); this.playerManager = plugin.getPlayerManager(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java index 28cec84..ac474dd 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java @@ -26,7 +26,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.item.items.FireStrikerListen; @@ -38,7 +38,7 @@ public class FirestrikerClick implements Listener { private final Lang lang; - public FirestrikerClick(Survival plugin) { + public FirestrikerClick(SurvivalPlugin plugin) { this.lang = plugin.getLang(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java b/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java index 81b45cc..717b962 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java @@ -14,7 +14,7 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.item.Nutrition; @@ -27,7 +27,7 @@ public class FoodDiversityConsume implements Listener { private final PlayerManager playerManager; private final int RESPAWN_PROTEIN, RESPAWN_CARBS, RESPAWN_SALTS; - public FoodDiversityConsume(Survival plugin) { + public FoodDiversityConsume(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); Config config = plugin.getSurvivalConfig(); RESPAWN_PROTEIN = config.mechanics_food_respawn_proteins; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java index 4e14cb0..4d05027 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java @@ -27,15 +27,15 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.util.Vector; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; public class GiantBlade implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; private final Lang lang; private final PlayerManager playerManager; - public GiantBlade(Survival plugin) { + public GiantBlade(SurvivalPlugin plugin) { this.plugin = plugin; this.lang = plugin.getLang(); this.playerManager = plugin.getPlayerManager(); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java index 37cb3e1..1827560 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java @@ -12,7 +12,7 @@ import org.bukkit.event.player.PlayerFishEvent.State; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; @@ -23,7 +23,7 @@ public class GrapplingHook implements Listener { private Lang lang; - public GrapplingHook(Survival plugin) { + public GrapplingHook(SurvivalPlugin plugin) { this.lang = plugin.getLang(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java index 70f8d05..abac8d7 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java @@ -12,7 +12,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; import tk.shanebee.survival.item.Items; @@ -24,11 +24,11 @@ public class MedicKit implements Listener { - private Survival plugin; + private SurvivalPlugin plugin; private Lang lang; private PlayerManager playerManager; - public MedicKit(Survival plugin) { + public MedicKit(SurvivalPlugin plugin) { this.plugin = plugin; this.lang = plugin.getLang(); this.playerManager = plugin.getPlayerManager(); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java b/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java index ff3c749..31edc8f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java @@ -11,7 +11,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.EffectManager; @@ -22,7 +22,7 @@ public class ObsidianMaceWeakness implements Listener { private EffectManager effectManager; private Config config; - public ObsidianMaceWeakness(Survival plugin) { + public ObsidianMaceWeakness(SurvivalPlugin plugin) { this.effectManager = plugin.getEffectManager(); this.config = plugin.getSurvivalConfig(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java b/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java index afcc467..0db95b7 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java @@ -9,7 +9,7 @@ import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.events.ShootRecurvedBowEvent; import tk.shanebee.survival.item.Item; import tk.shanebee.survival.item.Items; @@ -19,9 +19,9 @@ public class RecurvedBow implements Listener { - private Survival plugin; + private SurvivalPlugin plugin; - public RecurvedBow(Survival plugin) { + public RecurvedBow(SurvivalPlugin plugin) { this.plugin = plugin; } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java index 5e14ca9..2e9a9e5 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java @@ -15,7 +15,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; @@ -26,7 +26,7 @@ public class ShivPoison implements Listener { private Config config; - public ShivPoison(Survival plugin) { + public ShivPoison(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java index 3f91029..ea1fe76 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java @@ -20,7 +20,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; @@ -36,14 +36,14 @@ public class ThirstListener implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; private final Config config; private final Lang lang; private final PlayerManager playerManager; private final Random random = new Random(); private final double drain; - public ThirstListener(Survival plugin) { + public ThirstListener(SurvivalPlugin plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); this.lang = plugin.getLang(); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java b/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java index 895968e..328a67f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java @@ -11,7 +11,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerItemConsumeEvent; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; @@ -20,7 +20,7 @@ public class TropicalFish implements Listener { private final PlayerManager playerManager; private final Random random = new Random(); - public TropicalFish(Survival plugin) { + public TropicalFish(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java index d4e0462..493e960 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java @@ -22,14 +22,14 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; public class Valkyrie implements Listener { - private Survival plugin; + private SurvivalPlugin plugin; private Lang lang; - public Valkyrie(Survival plugin) { + public Valkyrie(SurvivalPlugin plugin) { this.plugin = plugin; this.lang = plugin.getLang(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java index 909d6bf..3dd5c03 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java @@ -16,7 +16,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionType; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; @@ -25,10 +25,10 @@ public class WaterBottleCrafting implements Listener { - private Survival plugin; + private SurvivalPlugin plugin; private Config config; - public WaterBottleCrafting(Survival plugin) { + public WaterBottleCrafting(SurvivalPlugin plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java index 6b34b47..a912ae4 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java @@ -10,18 +10,18 @@ import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.scheduler.BukkitScheduler; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.events.WaterBowlFillEvent; import tk.shanebee.survival.item.Items; public class WaterBowl implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; private final boolean thirstEnabled; private final boolean clayEnabled; private final BukkitScheduler scheduler = Bukkit.getScheduler(); - public WaterBowl(Survival plugin) { + public WaterBowl(SurvivalPlugin plugin) { this.plugin = plugin; this.thirstEnabled = plugin.getSurvivalConfig().mechanics_thirst_enabled; this.clayEnabled = plugin.getSurvivalConfig().RECIPES_CLAY; diff --git a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java index 1a1a4d9..4b52a1a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java @@ -12,7 +12,7 @@ import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.world.TimeSkipEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; @@ -23,13 +23,13 @@ public class EnergyChange implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; private final PlayerManager playerManager; private final Config config; private final Lang lang; private final double ENERGY_RESPAWN; - public EnergyChange(Survival plugin) { + public EnergyChange(SurvivalPlugin plugin) { this.plugin = plugin; this.playerManager = plugin.getPlayerManager(); this.config = plugin.getSurvivalConfig(); diff --git a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java index 673f4f6..32e9081 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java @@ -8,7 +8,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scheduler.BukkitScheduler; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.PlayerDataConfig; import tk.shanebee.survival.data.PlayerData; @@ -19,14 +19,14 @@ public class PlayerDataListener implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; private final PlayerManager playerManager; private final PlayerDataConfig playerDataConfig; private final ScoreBoardManager scoreboardManager; private final Config config; private final BukkitScheduler scheduler = Bukkit.getScheduler(); - public PlayerDataListener(Survival plugin) { + public PlayerDataListener(SurvivalPlugin plugin) { this.plugin = plugin; this.playerManager = plugin.getPlayerManager(); this.playerDataConfig = plugin.getPlayerDataConfig(); diff --git a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java b/src/main/java/tk/shanebee/survival/listeners/server/Guide.java index f622844..40c5d19 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/Guide.java @@ -9,18 +9,18 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; public class Guide implements Listener { - private Survival plugin; + private SurvivalPlugin plugin; private Lang lang; private Config config; - public Guide(Survival plugin) { + public Guide(SurvivalPlugin plugin) { this.plugin = plugin; this.lang = plugin.getLang(); this.config = plugin.getSurvivalConfig(); diff --git a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java index a35c577..ea556df 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java @@ -9,7 +9,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.config.Config; @@ -19,7 +19,7 @@ public class LocalChat implements Listener { private Config config; private PlayerManager playerManager; - public LocalChat(Survival plugin) { + public LocalChat(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); this.playerManager = plugin.getPlayerManager(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java index ce4cdb7..93ee46a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java @@ -13,16 +13,16 @@ import org.bukkit.event.inventory.FurnaceExtractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.RecipeManager.Recipes; public class RecipeDiscovery implements Listener { - private final Survival plugin; + private final SurvivalPlugin plugin; private final boolean UNLOCK_ALL; - public RecipeDiscovery(Survival plugin) { + public RecipeDiscovery(SurvivalPlugin plugin) { this.plugin = plugin; this.UNLOCK_ALL = plugin.getSurvivalConfig().SURVIVAL_UNLOCK_ALL_RECIPES; } diff --git a/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java b/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java index 9f27f3c..97c8487 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java @@ -6,7 +6,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerResourcePackStatusEvent; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; @@ -20,7 +20,7 @@ public class ResourcePackListener implements Listener { private final Component kickMessage; private final Component resourcePackMessage; - public ResourcePackListener(Survival plugin) { + public ResourcePackListener(SurvivalPlugin plugin) { Config config = plugin.getSurvivalConfig(); Lang lang = plugin.getLang(); this.resourcePackUrl = config.settings_resource_pack_url; diff --git a/src/main/java/tk/shanebee/survival/managers/BlockManager.java b/src/main/java/tk/shanebee/survival/managers/BlockManager.java index d2cf371..979409d 100644 --- a/src/main/java/tk/shanebee/survival/managers/BlockManager.java +++ b/src/main/java/tk/shanebee/survival/managers/BlockManager.java @@ -11,7 +11,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; @@ -22,14 +22,14 @@ public class BlockManager { - private final Survival plugin; + private final SurvivalPlugin plugin; private FileConfiguration data; private File data_file; private final Lang lang; private final int seconds; - public BlockManager(Survival plugin) { + public BlockManager(SurvivalPlugin plugin) { this.plugin = plugin; this.lang = plugin.getLang(); this.seconds = plugin.getSurvivalConfig().MECHANICS_BURNOUT_TORCH_TIME; diff --git a/src/main/java/tk/shanebee/survival/managers/EffectManager.java b/src/main/java/tk/shanebee/survival/managers/EffectManager.java index 7d5d1e9..78ae973 100644 --- a/src/main/java/tk/shanebee/survival/managers/EffectManager.java +++ b/src/main/java/tk/shanebee/survival/managers/EffectManager.java @@ -6,14 +6,14 @@ import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.tasks.tool.*; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.util.Utils; public class EffectManager { - private final Survival plugin; + private final SurvivalPlugin plugin; private final Config config; // Effect Tasks @@ -24,7 +24,7 @@ public class EffectManager { private QuartzPickaxe quartzPickaxe = null; private Valkyrie valkyrie = null; - public EffectManager(Survival plugin) { + public EffectManager(SurvivalPlugin plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); loadEffects(); diff --git a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java index 4bde4d8..0a5a1ed 100644 --- a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java +++ b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java @@ -5,7 +5,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Merchant; import org.bukkit.inventory.MerchantRecipe; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Item; import tk.shanebee.survival.item.Items; @@ -20,7 +20,7 @@ public class MerchantManager { private final Config config; - public MerchantManager(Survival plugin) { + public MerchantManager(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); } diff --git a/src/main/java/tk/shanebee/survival/managers/Placeholders.java b/src/main/java/tk/shanebee/survival/managers/Placeholders.java index a5e5480..967e5d1 100644 --- a/src/main/java/tk/shanebee/survival/managers/Placeholders.java +++ b/src/main/java/tk/shanebee/survival/managers/Placeholders.java @@ -2,17 +2,17 @@ import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; @SuppressWarnings("unused") public class Placeholders extends PlaceholderExpansion { - private final Survival plugin; + private final SurvivalPlugin plugin; private final PlayerManager playerManager; - public Placeholders(Survival plugin) { + public Placeholders(SurvivalPlugin plugin) { this.plugin = plugin; this.playerManager = plugin.getPlayerManager(); } diff --git a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java index fd8f93b..f55cd87 100644 --- a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java +++ b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java @@ -5,7 +5,7 @@ import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.event.Listener; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.config.PlayerDataConfig; @@ -22,7 +22,7 @@ /** * Manager for players - *

Get an instance of this class from {@link Survival#getPlayerManager()}

+ *

Get an instance of this class from {@link SurvivalPlugin#getPlayerManager()}

*/ public class PlayerManager implements Listener { @@ -33,7 +33,7 @@ public class PlayerManager implements Listener { // Store all the active PlayerData private final Map playerDataMap; - public PlayerManager(Survival plugin, Map playerDataMap) { + public PlayerManager(SurvivalPlugin plugin, Map playerDataMap) { this.playerDataMap = playerDataMap; this.lang = plugin.getLang(); this.playerDataConfig = plugin.getPlayerDataConfig(); diff --git a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java index 26a8c80..d746c4b 100644 --- a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java +++ b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java @@ -15,7 +15,7 @@ import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.SmokingRecipe; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.util.Utils; @@ -27,9 +27,9 @@ public class RecipeManager { private final Config config; - private final Survival plugin; + private final SurvivalPlugin plugin; - public RecipeManager(Survival plugin) { + public RecipeManager(SurvivalPlugin plugin) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); } diff --git a/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java b/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java index 2364a2d..18d6e4e 100644 --- a/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java +++ b/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java @@ -2,7 +2,7 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.HealthBoard; import tk.shanebee.survival.tasks.HealthBoardTask; @@ -12,11 +12,11 @@ public class ScoreBoardManager { - private final Survival plugin; + private final SurvivalPlugin plugin; private final Map healthBoardTaskMap = new HashMap<>(); private final Map boardMap = new HashMap<>(); - public ScoreBoardManager(Survival plugin) { + public ScoreBoardManager(SurvivalPlugin plugin) { this.plugin = plugin; } diff --git a/src/main/java/tk/shanebee/survival/managers/StatusManager.java b/src/main/java/tk/shanebee/survival/managers/StatusManager.java index 7ccecb8..194623c 100644 --- a/src/main/java/tk/shanebee/survival/managers/StatusManager.java +++ b/src/main/java/tk/shanebee/survival/managers/StatusManager.java @@ -1,7 +1,7 @@ package tk.shanebee.survival.managers; import org.bukkit.entity.Player; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; @@ -13,7 +13,7 @@ @Deprecated public class StatusManager { - private static PlayerManager playerManager = Survival.getInstance().getPlayerManager(); + private static PlayerManager playerManager = SurvivalPlugin.getInstance().getPlayerManager(); /** * Enums for Nutrient types diff --git a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java index 34fbf4e..9f5e276 100644 --- a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java @@ -9,7 +9,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; @@ -28,7 +28,7 @@ public class EnergyDrain extends BukkitRunnable { private final double absorb; private final double haste; - public EnergyDrain(Survival plugin) { + public EnergyDrain(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); this.config = plugin.getSurvivalConfig(); this.lang = plugin.getLang(); diff --git a/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java b/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java index 75861a2..2aa53e3 100644 --- a/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java +++ b/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java @@ -3,7 +3,7 @@ import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.data.HealthBoard; import tk.shanebee.survival.data.Info; @@ -14,7 +14,7 @@ public class HealthBoardTask extends BukkitRunnable { - private final Survival plugin; + private final SurvivalPlugin plugin; private final Config config; private final PlayerManager playerManager; private final Player player; @@ -27,7 +27,7 @@ public class HealthBoardTask extends BukkitRunnable { private boolean energyEnabled; private boolean nutrientsEnabled; - public HealthBoardTask(Survival plugin, Player player) { + public HealthBoardTask(SurvivalPlugin plugin, Player player) { this.plugin = plugin; this.config = plugin.getSurvivalConfig(); this.playerManager = plugin.getPlayerManager(); diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java b/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java index 82b99a8..b6f2d9f 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java +++ b/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java @@ -5,7 +5,7 @@ import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; @@ -16,7 +16,7 @@ class NutrientsAlert extends BukkitRunnable { private final Lang lang; private final PlayerManager playerManager; - NutrientsAlert(Survival plugin) { + NutrientsAlert(SurvivalPlugin plugin) { this.lang = plugin.getLang(); final int ALERT_INTERVAL = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; this.playerManager = plugin.getPlayerManager(); diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java b/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java index 1bdf08b..70b7d91 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java @@ -4,7 +4,7 @@ import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; @@ -13,7 +13,7 @@ class NutrientsDrain extends BukkitRunnable { private final PlayerManager playerManager; - NutrientsDrain(Survival plugin) { + NutrientsDrain(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); this.runTaskTimer(plugin, -1, 1); } diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java b/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java index b59e19f..783caf0 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java +++ b/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java @@ -10,7 +10,7 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.data.Nutrient; import tk.shanebee.survival.data.PlayerData; @@ -26,7 +26,7 @@ class NutrientsEffect extends BukkitRunnable { private PotionEffect PROTEIN_NORMAL = null; private PotionEffect PROTEIN_HARD = null; - NutrientsEffect(Survival plugin) { + NutrientsEffect(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); this.playerManager = plugin.getPlayerManager(); loadEffects(); diff --git a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java index 879b782..d8458c9 100644 --- a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java +++ b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java @@ -1,6 +1,6 @@ package tk.shanebee.survival.tasks; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; /** @@ -8,7 +8,7 @@ */ public class TaskManager { - public TaskManager(Survival plugin) { + public TaskManager(SurvivalPlugin plugin) { final int alertInterval = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; Config config = plugin.getSurvivalConfig(); if (config.mechanics_energy_enabled) { diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstAlert.java b/src/main/java/tk/shanebee/survival/tasks/ThirstAlert.java index 99aaee7..baab8f1 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstAlert.java +++ b/src/main/java/tk/shanebee/survival/tasks/ThirstAlert.java @@ -5,7 +5,7 @@ import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.config.Lang; @@ -15,7 +15,7 @@ class ThirstAlert extends BukkitRunnable { private final PlayerManager playerManager; private final Lang lang; - ThirstAlert(Survival plugin) { + ThirstAlert(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); this.lang = plugin.getLang(); final int ALERT_INTERVAL = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java b/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java index d07ffe7..9faaf06 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java @@ -6,7 +6,7 @@ import org.bukkit.damage.DamageType; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.managers.PlayerManager; @@ -16,7 +16,7 @@ class ThirstDrain extends BukkitRunnable { private final PlayerManager playerManager; private final double damageRate; - ThirstDrain(Survival plugin) { + ThirstDrain(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); this.damageRate = plugin.getSurvivalConfig().mechanics_thirst_damage_rate; this.runTaskTimer(plugin, 20, 20); diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java index fc982ed..7853a9a 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java +++ b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java @@ -6,7 +6,7 @@ import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.events.ThirstLevelChangeEvent; import tk.shanebee.survival.managers.PlayerManager; @@ -15,7 +15,7 @@ class ThirstDrainHeat extends BukkitRunnable { private final PlayerManager playerManager; - ThirstDrainHeat(Survival plugin) { + ThirstDrainHeat(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); this.runTaskTimer(plugin, 0, 20L * plugin.getSurvivalConfig().mechanics_thirst_heat_drain); } diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java index c66af64..48b9c14 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java +++ b/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java @@ -5,7 +5,7 @@ import org.bukkit.World.Environment; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.events.ThirstLevelChangeEvent; import tk.shanebee.survival.managers.PlayerManager; @@ -14,7 +14,7 @@ class ThirstDrainNether extends BukkitRunnable { private final PlayerManager playerManager; - ThirstDrainNether(Survival plugin) { + ThirstDrainNether(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); this.runTaskTimer(plugin, 0, 20L * plugin.getSurvivalConfig().mechanics_thirst_nether_drain); } diff --git a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java index e7489ce..e76023e 100644 --- a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java +++ b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java @@ -12,7 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Items; @@ -25,7 +25,7 @@ public class WeatherTask extends BukkitRunnable { private final double snowSpeed; private final double snowstormSpeed; - public WeatherTask(Survival plugin) { + public WeatherTask(SurvivalPlugin plugin) { Config config = plugin.getSurvivalConfig(); this.baseSpeed = config.MECHANICS_WEATHER_SPEED_BASE; this.rainSpeed = config.MECHANICS_WEATHER_SPEED_RAIN; diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java index de57b6c..5f2d732 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java @@ -6,15 +6,15 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; public class BlazeSwordEffects extends BukkitRunnable { - private final Survival plugin; + private final SurvivalPlugin plugin; private final PotionEffect FLAME; - public BlazeSwordEffects(Survival plugin) { + public BlazeSwordEffects(SurvivalPlugin plugin) { this.plugin = plugin; this.FLAME = new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 20, 0, false); this.runTaskTimer(plugin, 1, 10); diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java index 769ee08..9e758dc 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java @@ -4,16 +4,16 @@ import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; import java.util.Random; public class BlazeSwordSound extends BukkitRunnable { - private final Survival plugin; + private final SurvivalPlugin plugin; - public BlazeSwordSound(Survival plugin) { + public BlazeSwordSound(SurvivalPlugin plugin) { this.plugin = plugin; this.runTaskTimer(plugin, 1, 50); } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java b/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java index e0165b0..41c3be0 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java @@ -9,7 +9,7 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; import tk.shanebee.survival.item.Items; @@ -17,7 +17,7 @@ public class GiantBlade extends BukkitRunnable { - private final Survival plugin; + private final SurvivalPlugin plugin; private final PlayerManager playerManager; private final ImmutableSet MAIN_SET; private final ImmutableSet OFF_SET; @@ -25,7 +25,7 @@ public class GiantBlade extends BukkitRunnable { private final PotionEffect SLOW; private final PotionEffect JUMP; - public GiantBlade(Survival plugin) { + public GiantBlade(SurvivalPlugin plugin) { this.plugin = plugin; this.playerManager = plugin.getPlayerManager(); this.MAIN_SET = ImmutableSet.builder() diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java b/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java index 120fe9c..ee2b76f 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java @@ -6,14 +6,14 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; public class ObsidianMace extends BukkitRunnable { - private final Survival plugin; + private final SurvivalPlugin plugin; - public ObsidianMace(Survival plugin) { + public ObsidianMace(SurvivalPlugin plugin) { this.plugin = plugin; this.runTaskTimer(plugin, 1, 10); } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java b/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java index ded390e..91bd387 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java @@ -4,14 +4,14 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; public class QuartzPickaxe extends BukkitRunnable { - private final Survival plugin; + private final SurvivalPlugin plugin; - public QuartzPickaxe(Survival plugin) { + public QuartzPickaxe(SurvivalPlugin plugin) { this.plugin = plugin; this.runTaskTimer(plugin, 1, 10); } diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java index e8f1358..f9fa818 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java @@ -4,14 +4,14 @@ import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; public class Valkyrie extends BukkitRunnable { - private final Survival plugin; + private final SurvivalPlugin plugin; - public Valkyrie(Survival plugin) { + public Valkyrie(SurvivalPlugin plugin) { this.plugin = plugin; this.runTaskTimer(plugin, 1, 10); } diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 7903688..663d0b9 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -14,7 +14,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.metadata.Metadatable; -import tk.shanebee.survival.Survival; +import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import java.util.ArrayList; @@ -129,7 +129,7 @@ public static void sendColoredConsoleMsg(String msg) { * @param msg Message to log to console */ public static void log(String msg) { - Lang lang = Survival.getInstance().getLang(); + Lang lang = SurvivalPlugin.getInstance().getLang(); String prefix = "&7[&bSurvival&3Plus&7] "; if (lang != null) { prefix = lang.prefix; @@ -156,7 +156,7 @@ public static void log(String format, Object... objects) { * @param msg Message to log to console */ public static void logMini(String msg) { - Survival plugin = Survival.getInstance(); + SurvivalPlugin plugin = SurvivalPlugin.getInstance(); String prefix = "[SurvivalPlus] "; if (plugin != null && plugin.getLang() != null) { prefix = plugin.getLang().prefix; From dae724b9470dacdefbfd521fbc05ead8478b0ac9 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 19:33:42 -0800 Subject: [PATCH 042/133] legacy color code cleanup --- .../tk/shanebee/survival/SurvivalPlugin.java | 16 +- .../tk/shanebee/survival/config/Config.java | 8 +- .../tk/shanebee/survival/config/Lang.java | 14 +- .../shanebee/survival/gui/NutritionGUI.java | 25 +- .../java/tk/shanebee/survival/item/Item.java | 2 +- .../item/items/FireStrikerListen.java | 2 +- .../shanebee/survival/listeners/item/Bow.java | 8 +- .../listeners/item/FirestrikerClick.java | 20 +- .../survival/listeners/item/GiantBlade.java | 357 +++++++++--------- .../listeners/item/GrapplingHook.java | 201 +++++----- .../survival/listeners/item/MedicKit.java | 312 +++++++-------- .../listeners/item/ThirstListener.java | 2 +- .../survival/listeners/item/Valkyrie.java | 10 +- .../listeners/player/EnergyChange.java | 10 +- .../survival/listeners/server/Guide.java | 30 +- .../shanebee/survival/tasks/EnergyDrain.java | 10 +- .../java/tk/shanebee/survival/util/Utils.java | 89 +---- src/main/resources/lang_EN.yml | 95 +++-- 18 files changed, 566 insertions(+), 645 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java index 0ec0f44..a35178d 100644 --- a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java +++ b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java @@ -9,6 +9,7 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -289,14 +290,15 @@ public void loadSettings(CommandSender sender) { private void onServerReload(ServerLoadEvent e) { if (e.getType() == ServerLoadEvent.LoadType.RELOAD) { for (Player player : getServer().getOnlinePlayers()) { - Utils.sendColoredMsg(player, prefix + "DETECTED SERVER RELOAD"); - Utils.sendColoredMsg(player, " Recipes may have been impacted"); - Utils.sendColoredMsg(player, " Relog to update your recipes"); + Utils.sendColoredMini(player, prefix + "DETECTED SERVER RELOAD"); + Utils.sendColoredMini(player, " Recipes may have been impacted"); + Utils.sendColoredMini(player, " Relog to update your recipes"); } - Utils.sendColoredConsoleMsg(prefix + "DETECTED SERVER RELOAD"); - Utils.sendColoredConsoleMsg(" - Server reloads will impact recipes"); - Utils.sendColoredConsoleMsg(" - Players will need to relog to re-enable custom recipes"); - Utils.sendColoredConsoleMsg(" - A warning has been sent to each player that is online right now"); + ConsoleCommandSender console = Bukkit.getConsoleSender(); + Utils.sendColoredMini(console,prefix + "DETECTED SERVER RELOAD"); + Utils.sendColoredMini(console, " - Server reloads will impact recipes"); + Utils.sendColoredMini(console, " - Players will need to relog to re-enable custom recipes"); + Utils.sendColoredMini(console, " - A warning has been sent to each player that is online right now"); } } diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 3ff5fa6..861c39d 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -24,8 +24,8 @@ public class Config { public int settings_local_chat_distance; public boolean WELCOME_GUIDE_ENABLED; - public boolean WELCOME_GUIDE_NEW_PLAYERS; - public int WELCOME_GUIDE_DELAY; + public boolean welcome_guide_new_players; + public int welcome_guide_delay; // SURVIVAL public boolean SURVIVAL_ENABLED; @@ -287,8 +287,8 @@ private void loadSettings() { // WELCOME GUIDE this.WELCOME_GUIDE_ENABLED = settings.getBoolean("WelcomeGuide.Enabled"); - this.WELCOME_GUIDE_NEW_PLAYERS = settings.getBoolean("WelcomeGuide.NewPlayersOnly"); - this.WELCOME_GUIDE_DELAY = settings.getInt("WelcomeGuide.Delay"); + this.welcome_guide_new_players = settings.getBoolean("WelcomeGuide.NewPlayersOnly"); + this.welcome_guide_delay = settings.getInt("WelcomeGuide.Delay"); // SURVIVAL this.SURVIVAL_ENABLED = settings.getBoolean("Survival.Enabled"); diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index 472b049..4db8bb1 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -1,6 +1,5 @@ package tk.shanebee.survival.config; -import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -22,9 +21,6 @@ public class Lang { public String prefix; public String no_perm; public String survival_guide_msg; - public String survival_guide_click_msg; - public String survival_guide_hover_msg; - public String survival_guide_link; public String resource_pack_apply; public String resource_pack_fail_download; @@ -81,7 +77,7 @@ public class Lang { public String nutrition_gui_next_page; public String nutrition_gui_last_page; - public String healing; + public String healing_other; public String healing_self; public String keep; public String on_hand; @@ -224,9 +220,6 @@ public void loadLangFile(CommandSender sender) { prefix = lang.getString("prefix"); no_perm = lang.getString("no-perm"); survival_guide_msg = lang.getString("survival-guide-msg"); - survival_guide_click_msg = lang.getString("survival-guide-click-msg"); - survival_guide_hover_msg = lang.getString("survival-guide-hover-msg"); - survival_guide_link = lang.getString("survival-guide-link"); resource_pack_apply = lang.getString("resource-pack-apply"); resource_pack_fail_download = lang.getString("resource-pack-fail-download"); task_must_use_shovel = lang.getString("task-must-use-shovel"); @@ -276,7 +269,7 @@ public void loadLangFile(CommandSender sender) { nutrition_gui = lang.getString("nutrition-gui"); nutrition_gui_next_page = lang.getString("nutrition-gui-next-page"); nutrition_gui_last_page = lang.getString("nutrition-gui-last-page"); - healing = lang.getString("healing"); + healing_other = lang.getString("healing-other"); healing_self = lang.getString("healing-self"); keep = lang.getString("keep"); on_hand = lang.getString("on-hand"); @@ -418,8 +411,7 @@ private void matchConfig(FileConfiguration config, File file) { private void saveLang(YamlConfiguration lang, File file) { try { lang.save(file); - String prefix = lang.getString("prefix"); - Utils.sendColoredMsg(Bukkit.getConsoleSender(), prefix + "" + langFilePath + " Updated"); + Utils.logMini( "%s Updated", this.langFilePath); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java b/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java index 73f6d2f..a682d9a 100644 --- a/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java +++ b/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java @@ -1,5 +1,6 @@ package tk.shanebee.survival.gui; +import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -31,8 +32,8 @@ public class NutritionGUI implements InventoryHolder, Listener { public NutritionGUI(SurvivalPlugin plugin) { this.lang = plugin.getLang(); Bukkit.getPluginManager().registerEvents(this, plugin); - LAST_PAGE_BUTTON = getButton(Material.PAPER, Utils.getColoredString(lang.nutrition_gui_last_page)); - NEXT_PAGE_BUTTON = getButton(Material.PAPER, Utils.getColoredString(lang.nutrition_gui_next_page)); + LAST_PAGE_BUTTON = getButton(Material.PAPER, Utils.getMini(this.lang.nutrition_gui_last_page)); + NEXT_PAGE_BUTTON = getButton(Material.PAPER, Utils.getMini(this.lang.nutrition_gui_next_page)); } @NotNull @@ -54,7 +55,7 @@ public void openInventory(Player player, int page) { listSize = nutritions.size() - p; rows = listSize > 45 ? 6 : (int) Math.ceil((double) listSize / 9) + 1; } - this.inv = Bukkit.createInventory(this, rows * 9, Utils.getColoredString(lang.nutrition_gui)); + this.inv = Bukkit.createInventory(this, rows * 9, Utils.getMini(this.lang.nutrition_gui)); for (int i = 0; i < (Math.min(listSize, pages ? 45 : 54)); i++) { Nutrition nutrition = nutritions.get(i + p); @@ -69,11 +70,12 @@ public void openInventory(Player player, int page) { player.openInventory(inv); } - private ItemStack getButton(Material material, String name) { + @SuppressWarnings("SameParameterValue") + private ItemStack getButton(Material material, Component name) { ItemStack itemStack = new ItemStack(material); ItemMeta meta = itemStack.getItemMeta(); assert meta != null; - meta.setDisplayName(Utils.getColoredString(name)); + meta.displayName(name); itemStack.setItemMeta(meta); return itemStack; } @@ -83,12 +85,13 @@ private ItemStack getItemStack(Nutrition nutrition) { ItemMeta meta = item.getItemMeta(); assert meta != null; - List lore = meta.getLore() != null ? meta.getLore() : new ArrayList<>(); - lore.add(" "); - lore.add(Utils.getColoredString("&2" + lang.carbohydrates + ": &7" + nutrition.getCarbs())); - lore.add(Utils.getColoredString("&4" + lang.protein + ": &7" + nutrition.getProteins())); - lore.add(Utils.getColoredString("&5" + lang.vitamins + ": &7" + nutrition.getVitamins())); - meta.setLore(lore); + List oldLore = meta.lore(); + List lore = oldLore != null ? oldLore : new ArrayList<>(); + lore.add(Component.empty()); + lore.add(Utils.getMini("<#A0E853>%s: %s", this.lang.carbohydrates, nutrition.getCarbs())); + lore.add(Utils.getMini("<#CE784D>%s: %s", this.lang.protein, nutrition.getProteins())); + lore.add(Utils.getMini("<#53DDE8>%s: %s", this.lang.vitamins, nutrition.getVitamins())); + meta.lore(lore); item.setItemMeta(meta); return item; diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index aecae8e..4682361 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -60,7 +60,7 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod itemStack.setData(DataComponentTypes.ITEM_NAME, MINI.deserialize(itemName)); } } else if (!vanillaModel) { - Utils.log("&cFailed to load item name for item &r'&b" + key + "&r'"); + Utils.logMini("Failed to load item name for item '" + key + "'"); } List lore = ITEM_CONFIG.getLore(key); diff --git a/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java b/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java index eb132be..5630b70 100644 --- a/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java +++ b/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java @@ -35,7 +35,7 @@ public class FireStrikerListen implements Runnable, InventoryHolder { public FireStrikerListen(Player player, ItemStack item) { SurvivalPlugin plugin = SurvivalPlugin.getInstance(); Lang lang = plugin.getLang(); - this.inv = Bukkit.createInventory(this, InventoryType.FURNACE, Utils.getColoredString(lang.firestriker)); + this.inv = Bukkit.createInventory(this, InventoryType.FURNACE, Utils.getMini(lang.firestriker)); this.player = player; this.item = item; this.MAX_COOK_TIME = plugin.getSurvivalConfig().ITEM_FIRESTRIKER_COOK_TIME; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java b/src/main/java/tk/shanebee/survival/listeners/item/Bow.java index 19ab925..706730f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Bow.java @@ -33,13 +33,13 @@ private void onShootWithoutArrows(EntityShootBowEvent event) { } else { if (mainHand.getType() != Material.CROSSBOW) { event.setCancelled(true); - Utils.sendColoredMsg(player, lang.arrows_off_hand); + Utils.sendColoredMini(player, lang.arrows_off_hand); player.updateInventory(); } } } else { event.setCancelled(true); - Utils.sendColoredMsg(player, lang.bow_main_hand); + Utils.sendColoredMini(player, lang.bow_main_hand); player.updateInventory(); } } @@ -55,12 +55,12 @@ private void onLoadCrossbow(PlayerInteractEvent event) { if (mainHand.getItemMeta() != null && ((CrossbowMeta) mainHand.getItemMeta()).hasChargedProjectiles()) return; if (!SurvivalPlugin.getInstance().getPlayerManager().isArrowOffHand(player)) { event.setCancelled(true); - Utils.sendColoredMsg(player, lang.arrows_off_hand_crossbow); + Utils.sendColoredMini(player, lang.arrows_off_hand_crossbow); } } else if (offHand.getType() == Material.CROSSBOW) { if (event.getHand() == EquipmentSlot.HAND) return; event.setCancelled(true); - Utils.sendColoredMsg(player, lang.bow_main_hand); + Utils.sendColoredMini(player, lang.bow_main_hand); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java index ac474dd..cff4699 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java @@ -27,19 +27,14 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.item.items.FireStrikerListen; -import tk.shanebee.survival.util.Utils; import java.util.Random; public class FirestrikerClick implements Listener { - private final Lang lang; - public FirestrikerClick(SurvivalPlugin plugin) { - this.lang = plugin.getLang(); } @EventHandler @@ -134,7 +129,7 @@ private boolean ignite(Player igniter, Location loc) { loc.add(0.5, 0.5, 0.5); BlockIgniteEvent igniteEvent = new BlockIgniteEvent(loc.getBlock(), - IgniteCause.FLINT_AND_STEEL, igniter); + IgniteCause.FLINT_AND_STEEL, igniter); Bukkit.getServer().getPluginManager().callEvent(igniteEvent); if (igniteEvent.isCancelled()) { return false; @@ -143,7 +138,7 @@ private boolean ignite(Player igniter, Location loc) { BlockState blockState = loc.getBlock().getState(); BlockPlaceEvent placeEvent = new BlockPlaceEvent(loc.getBlock(), - blockState, loc.getBlock(), igniter.getInventory().getItemInMainHand(), igniter, true, EquipmentSlot.HAND); + blockState, loc.getBlock(), igniter.getInventory().getItemInMainHand(), igniter, true, EquipmentSlot.HAND); Bukkit.getServer().getPluginManager().callEvent(placeEvent); if (placeEvent.isCancelled() || !placeEvent.canBuild()) { @@ -160,19 +155,16 @@ private boolean ignite(Player igniter, Location loc) { @EventHandler private void onCloseInventory(InventoryCloseEvent event) { - if (event.getView().getTitle().equalsIgnoreCase(Utils.getColoredString(lang.firestriker))) { - Inventory inv = event.getInventory(); - if (inv.getHolder() instanceof FireStrikerListen) { - ((FireStrikerListen) inv.getHolder()).close(); - } + Inventory inv = event.getInventory(); + if (inv.getHolder() instanceof FireStrikerListen fireStriker) { + fireStriker.close(); } } @EventHandler(priority = EventPriority.HIGHEST) private void onAttack(EntityDamageByEntityEvent event) { if (event.isCancelled()) return; - if (event.getDamager() instanceof Player && event.getEntity() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { - Player player = (Player) event.getDamager(); + if (event.getDamager() instanceof Player player && event.getEntity() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { ItemStack item = player.getInventory().getItemInMainHand(); if (Items.FIRESTRIKER.is(item)) { ItemMeta meta = item.getItemMeta(); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java index 4d05027..b6a19e7 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java @@ -1,18 +1,12 @@ package tk.shanebee.survival.listeners.item; -import java.util.Collection; -import java.util.Random; - +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.Sound; import org.bukkit.block.Block; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; -import org.bukkit.*; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -23,184 +17,193 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; - import tk.shanebee.survival.SurvivalPlugin; +import tk.shanebee.survival.config.Lang; +import tk.shanebee.survival.data.PlayerData; +import tk.shanebee.survival.data.Stat; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.managers.PlayerManager; +import tk.shanebee.survival.util.Utils; + +import java.util.Collection; +import java.util.Random; public class GiantBlade implements Listener { - private final SurvivalPlugin plugin; - private final Lang lang; - private final PlayerManager playerManager; - - public GiantBlade(SurvivalPlugin plugin) { - this.plugin = plugin; - this.lang = plugin.getLang(); - this.playerManager = plugin.getPlayerManager(); - } - - @EventHandler(priority = EventPriority.HIGHEST) - private void onAttack(EntityDamageByEntityEvent event) { - if (event.isCancelled()) return; - if (event.getEntity() instanceof Player) { - Player player = (Player) event.getEntity(); + private final SurvivalPlugin plugin; + private final Lang lang; + private final PlayerManager playerManager; + + public GiantBlade(SurvivalPlugin plugin) { + this.plugin = plugin; + this.lang = plugin.getLang(); + this.playerManager = plugin.getPlayerManager(); + } + + @EventHandler(priority = EventPriority.HIGHEST) + private void onAttack(EntityDamageByEntityEvent event) { + if (event.isCancelled()) return; + if (event.getEntity() instanceof Player player) { if (Utils.isCitizensNPC(player)) return; - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack offItem = player.getInventory().getItemInOffHand(); + PlayerData playerData = playerManager.getPlayerData(player); + ItemStack offItem = player.getInventory().getItemInOffHand(); ItemMeta offItemMeta = offItem.getItemMeta(); assert offItemMeta != null; - if (playerData.getStat(Stat.DUAL_WIELD) == 1) { - event.setCancelled(true); - return; - } - - Random rand = new Random(); - - if (Items.ENDER_GIANT_BLADE.is(offItem)) { - if (event.getDamager() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { - LivingEntity enemy = (LivingEntity) event.getDamager(); - enemy.damage(event.getDamage() * 40 / 100, player); - } - - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ((Damageable) offItemMeta).setDamage(((Damageable) offItemMeta).getDamage() + 1); - offItem.setItemMeta(offItemMeta); - } - - if (((Damageable) offItemMeta).getDamage() >= offItem.getType().getMaxDurability()) { - player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInOffHand(null); - } - } - } - } - - //To prevent double messages send to player. - - @EventHandler - private void onItemClick(PlayerInteractEvent event) { - Player player = event.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack mainItem = player.getInventory().getItemInMainHand(); - ItemStack offItem = player.getInventory().getItemInOffHand(); - ItemMeta mainItemMeta = mainItem.getItemMeta(); - ItemMeta offItemMeta = offItem.getItemMeta();; - assert mainItemMeta != null; - assert offItemMeta != null; - - if (Items.ENDER_GIANT_BLADE.is(mainItem)) { - if (playerData.getStat(Stat.DUAL_WIELD) == 0) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) { + if (playerData.getStat(Stat.DUAL_WIELD) == 1) { + event.setCancelled(true); + return; + } + + Random rand = new Random(); + + if (Items.ENDER_GIANT_BLADE.is(offItem)) { + if (event.getDamager() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { + LivingEntity enemy = (LivingEntity) event.getDamager(); + enemy.damage(event.getDamage() * 40 / 100, player); + } + + int chance_reduceDur = rand.nextInt(10) + 1; + if (chance_reduceDur == 1) { + ((Damageable) offItemMeta).setDamage(((Damageable) offItemMeta).getDamage() + 1); + offItem.setItemMeta(offItemMeta); + } + + if (((Damageable) offItemMeta).getDamage() >= offItem.getType().getMaxDurability()) { + player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + player.getInventory().setItemInOffHand(null); + } + } + } + } + + //To prevent double messages send to player. + + @EventHandler + private void onItemClick(PlayerInteractEvent event) { + Player player = event.getPlayer(); + PlayerData playerData = playerManager.getPlayerData(player); + ItemStack mainItem = player.getInventory().getItemInMainHand(); + ItemStack offItem = player.getInventory().getItemInOffHand(); + ItemMeta mainItemMeta = mainItem.getItemMeta(); + ItemMeta offItemMeta = offItem.getItemMeta(); + ; + assert mainItemMeta != null; + assert offItemMeta != null; + + if (Items.ENDER_GIANT_BLADE.is(mainItem)) { + if (playerData.getStat(Stat.DUAL_WIELD) == 0) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) { Block clickedBlock = event.getClickedBlock(); // Prevent giant blade for turning dirt/grass into farmland - if (clickedBlock != null && (clickedBlock.getType() == Material.GRASS_BLOCK || clickedBlock.getType() == Material.DIRT)) { - event.setCancelled(true); + if (clickedBlock != null && (clickedBlock.getType() == Material.GRASS_BLOCK || clickedBlock.getType() == Material.DIRT)) { + event.setCancelled(true); + } + if (event.getHand() != EquipmentSlot.HAND) return; // prevent double message + + if (player.isSprinting()) { + if (playerData.getStat(Stat.CHARGE) == 0) { + Random rand = new Random(); + + ChargeForward(player); + + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) + player.setFoodLevel(player.getFoodLevel() - 1); + + int chance_reduceDur = rand.nextInt(10) + 1; + if (chance_reduceDur == 1) { + ((Damageable) mainItemMeta).setDamage(((Damageable) mainItemMeta).getDamage() + 1); + mainItem.setItemMeta(mainItemMeta); + } + + if (((Damageable) mainItemMeta).getDamage() >= mainItem.getType().getMaxDurability()) { + player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + player.getInventory().setItemInMainHand(null); + } + player.updateInventory(); + } else { + Utils.sendColoredMini(player, "" + this.lang.charge_unable); + } } - if (event.getHand() != EquipmentSlot.HAND) return; // prevent double message - - if (player.isSprinting()) { - if (playerData.getStat(Stat.CHARGE) == 0) { - Random rand = new Random(); - - ChargeForward(player); - - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) - player.setFoodLevel(player.getFoodLevel() - 1); - - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ((Damageable) mainItemMeta).setDamage(((Damageable) mainItemMeta).getDamage() + 1); - mainItem.setItemMeta(mainItemMeta); - } - - if (((Damageable) mainItemMeta).getDamage() >= mainItem.getType().getMaxDurability()) { - player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInMainHand(null); - } - player.updateInventory(); - } else { - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.charge_unable)); - } - } - } - } else { - if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); - else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); - if (playerData.getStat(Stat.DUAL_WIELD_MSG) >= 2) { - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.ender_giant_blade_unable_duel)); - } - } - } else if (Items.ENDER_GIANT_BLADE.is(offItem)) { - if (playerData.getStat(Stat.DUAL_WIELD) != 0) { - if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); - else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); - if (playerData.getStat(Stat.DUAL_WIELD_MSG) >= 2) { - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.ender_giant_blade_unable_duel)); - } - } - } - playerData.setStat(Stat.DUAL_WIELD_MSG, 0); - } - - private void ChargeForward(Player player) { - PlayerData playerData = playerManager.getPlayerData(player); - player.sendMessage(ChatColor.BLUE + Utils.getColoredString(lang.charge)); - - playerData.setStat(Stat.CHARGE, 1); - - - Location loc = player.getLocation(); - if (loc.getPitch() < 0) - loc.setPitch(0); - - Vector vel = loc.getDirection(); - - Vector newVel = vel.multiply(3); - - player.setVelocity(newVel); - - final Player chargingPlayer = player; - playerData.setStat(Stat.CHARGING, 8); - - final Runnable task = new Runnable() { - public void run() { - damageNearbyEnemies(chargingPlayer); - - Random rand = new Random(); - chargingPlayer.getLocation().getWorld().playSound(chargingPlayer.getLocation(), Sound.ENTITY_SHULKER_BULLET_HIT, 1.5F, rand.nextFloat() * 0.4F + 0.8F); - Utils.spawnParticle(chargingPlayer.getLocation(), Particle.EXPLOSION, 10, 0, 0, 0); - - int times = playerData.getStat(Stat.CHARGING); - if (--times > 1) - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 1L); - playerData.setStat(Stat.CHARGING, times); - } - }; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - playerData.setStat(Stat.CHARGE, 0); - chargingPlayer.sendMessage(ChatColor.GREEN + Utils.getColoredString(lang.charge_ready)); - }, 100L); - } - - private void damageNearbyEnemies(Player player) { - Collection enemies = player.getLocation().getWorld().getNearbyEntities(player.getLocation(), 2, 2, 2); - for (Entity e : enemies) { - if (e instanceof LivingEntity && e != player) { - LivingEntity enemy = (LivingEntity) e; - enemy.damage(8, player); - } - } - } + } + } else { + if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) + playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); + else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) + playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); + if (playerData.getStat(Stat.DUAL_WIELD_MSG) >= 2) { + Utils.sendColoredMini(player, "" + lang.ender_giant_blade_unable_duel); + } + } + } else if (Items.ENDER_GIANT_BLADE.is(offItem)) { + if (playerData.getStat(Stat.DUAL_WIELD) != 0) { + if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) + playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); + else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) + playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); + if (playerData.getStat(Stat.DUAL_WIELD_MSG) >= 2) { + Utils.sendColoredMini(player, "" + this.lang.ender_giant_blade_unable_duel); + } + } + } + playerData.setStat(Stat.DUAL_WIELD_MSG, 0); + } + + private void ChargeForward(Player player) { + PlayerData playerData = playerManager.getPlayerData(player); + Utils.sendColoredMini(player, "" + this.lang.charge); + + playerData.setStat(Stat.CHARGE, 1); + + + Location loc = player.getLocation(); + if (loc.getPitch() < 0) + loc.setPitch(0); + + Vector vel = loc.getDirection(); + + Vector newVel = vel.multiply(3); + + player.setVelocity(newVel); + + final Player chargingPlayer = player; + playerData.setStat(Stat.CHARGING, 8); + + final Runnable task = new Runnable() { + public void run() { + damageNearbyEnemies(chargingPlayer); + + Random rand = new Random(); + chargingPlayer.getLocation().getWorld().playSound(chargingPlayer.getLocation(), Sound.ENTITY_SHULKER_BULLET_HIT, 1.5F, rand.nextFloat() * 0.4F + 0.8F); + Utils.spawnParticle(chargingPlayer.getLocation(), Particle.EXPLOSION, 10, 0, 0, 0); + + int times = playerData.getStat(Stat.CHARGING); + if (--times > 1) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 1L); + playerData.setStat(Stat.CHARGING, times); + } + }; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + playerData.setStat(Stat.CHARGE, 0); + Utils.sendColoredMini(chargingPlayer, this.lang.charge_ready); + }, 100L); + } + + private void damageNearbyEnemies(Player player) { + Collection enemies = player.getLocation().getWorld().getNearbyEntities(player.getLocation(), 2, 2, 2); + for (Entity e : enemies) { + if (e instanceof LivingEntity enemy && e != player) { + enemy.damage(8, player); + } + } + } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java index 1827560..35277c2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java @@ -1,6 +1,5 @@ package tk.shanebee.survival.listeners.item; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -21,105 +20,105 @@ public class GrapplingHook implements Listener { - private Lang lang; - - public GrapplingHook(SurvivalPlugin plugin) { - this.lang = plugin.getLang(); - } - - @EventHandler - private void onPlayerFish(PlayerFishEvent event) { - Player p = event.getPlayer(); - ItemStack mainHand = p.getInventory().getItemInMainHand(); - ItemStack offHand = p.getInventory().getItemInOffHand(); - - if (mainHand.getType() == Material.FISHING_ROD) { - p.getInventory().getItemInOffHand(); - if (offHand.getType() == Material.AIR) { - - if (Items.GRAPPLING_HOOK.is(mainHand)) { - if (event.getState() == State.IN_GROUND) { - List nearbyEntities = p.getNearbyEntities(50, 50, 50); - - Entity hook = null; - - for (Entity e : nearbyEntities) // loop through entities - { - if (e.getType() == EntityType.FISHING_BOBBER) //Hook found - { - hook = e; - break; - } - } - - if (hook != null) { - Location hookLoc = hook.getLocation(); - Location playerLoc = p.getLocation(); - - playerLoc.setY(playerLoc.getY() + 0.5); - - - Vector vector = hookLoc.toVector().subtract(playerLoc.toVector()); - if (vector.getY() > 0) - vector.setY(Math.sqrt(vector.getY())); - - p.teleport(playerLoc); - p.setVelocity(vector.multiply(0.5)); - } - } else if (event.getState() == State.CAUGHT_ENTITY) { - if (event.getCaught() != null) { - Location playerLoc = p.getLocation(); - Location entityLoc = event.getCaught().getLocation(); - - playerLoc.setY(playerLoc.getY() + 0.5); - entityLoc.setY(entityLoc.getY() + 0.5); - - if (event.getCaught().getType() != EntityType.ITEM) { - Vector vector = entityLoc.toVector().subtract(playerLoc.toVector()); - if (vector.getY() > 0) - vector.setY(Math.sqrt(vector.getY()) * 4); - - p.teleport(playerLoc); - p.setVelocity(vector.multiply(0.5).multiply(0.25)); - } - - Vector reverseVector = playerLoc.toVector().subtract(entityLoc.toVector()); - - if (reverseVector.getY() > 0) - reverseVector.setY(Math.sqrt(reverseVector.getY())); - - if (event.getCaught().getType() != EntityType.ITEM) { - event.getCaught().teleport(entityLoc); - event.getCaught().setVelocity(reverseVector.multiply(0.5).multiply(0.125)); - } else { - if (reverseVector.getY() > 0) - reverseVector.setY(Math.sqrt(reverseVector.getY()) * 0.5); - - event.getCaught().teleport(entityLoc); - event.getCaught().setVelocity(reverseVector.multiply(0.5).multiply(0.00625)); - } - } - } else if (event.getState() == State.BITE || event.getState() == State.CAUGHT_FISH) { - event.setCancelled(true); - p.updateInventory(); - } - } - } else { - event.setCancelled(true); - if (Items.GRAPPLING_HOOK.is(mainHand)) - p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.grappling_off_hand)); - else - p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.fishing_off_hand)); - p.updateInventory(); - } - } else { - event.setCancelled(true); - if (Items.GRAPPLING_HOOK.is(offHand)) - p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.grappling_main_hand)); - else - p.sendMessage(ChatColor.RED + Utils.getColoredString(lang.fishing_main_hand)); - p.updateInventory(); - } - } + private final Lang lang; + + public GrapplingHook(SurvivalPlugin plugin) { + this.lang = plugin.getLang(); + } + + @EventHandler + private void onPlayerFish(PlayerFishEvent event) { + Player player = event.getPlayer(); + ItemStack mainHand = player.getInventory().getItemInMainHand(); + ItemStack offHand = player.getInventory().getItemInOffHand(); + + if (mainHand.getType() == Material.FISHING_ROD) { + player.getInventory().getItemInOffHand(); + if (offHand.getType() == Material.AIR) { + + if (Items.GRAPPLING_HOOK.is(mainHand)) { + if (event.getState() == State.IN_GROUND) { + List nearbyEntities = player.getNearbyEntities(50, 50, 50); + + Entity hook = null; + + for (Entity e : nearbyEntities) // loop through entities + { + if (e.getType() == EntityType.FISHING_BOBBER) //Hook found + { + hook = e; + break; + } + } + + if (hook != null) { + Location hookLoc = hook.getLocation(); + Location playerLoc = player.getLocation(); + + playerLoc.setY(playerLoc.getY() + 0.5); + + + Vector vector = hookLoc.toVector().subtract(playerLoc.toVector()); + if (vector.getY() > 0) + vector.setY(Math.sqrt(vector.getY())); + + player.teleport(playerLoc); + player.setVelocity(vector.multiply(0.5)); + } + } else if (event.getState() == State.CAUGHT_ENTITY) { + if (event.getCaught() != null) { + Location playerLoc = player.getLocation(); + Location entityLoc = event.getCaught().getLocation(); + + playerLoc.setY(playerLoc.getY() + 0.5); + entityLoc.setY(entityLoc.getY() + 0.5); + + if (event.getCaught().getType() != EntityType.ITEM) { + Vector vector = entityLoc.toVector().subtract(playerLoc.toVector()); + if (vector.getY() > 0) + vector.setY(Math.sqrt(vector.getY()) * 4); + + player.teleport(playerLoc); + player.setVelocity(vector.multiply(0.5).multiply(0.25)); + } + + Vector reverseVector = playerLoc.toVector().subtract(entityLoc.toVector()); + + if (reverseVector.getY() > 0) + reverseVector.setY(Math.sqrt(reverseVector.getY())); + + if (event.getCaught().getType() != EntityType.ITEM) { + event.getCaught().teleport(entityLoc); + event.getCaught().setVelocity(reverseVector.multiply(0.5).multiply(0.125)); + } else { + if (reverseVector.getY() > 0) + reverseVector.setY(Math.sqrt(reverseVector.getY()) * 0.5); + + event.getCaught().teleport(entityLoc); + event.getCaught().setVelocity(reverseVector.multiply(0.5).multiply(0.00625)); + } + } + } else if (event.getState() == State.BITE || event.getState() == State.CAUGHT_FISH) { + event.setCancelled(true); + player.updateInventory(); + } + } + } else { + event.setCancelled(true); + if (Items.GRAPPLING_HOOK.is(mainHand)) + Utils.sendColoredMini(player, "" + this.lang.grappling_off_hand); + else + Utils.sendColoredMini(player, "" + this.lang.fishing_off_hand); + player.updateInventory(); + } + } else { + event.setCancelled(true); + if (Items.GRAPPLING_HOOK.is(offHand)) + Utils.sendColoredMini(player, "" + this.lang.grappling_main_hand); + else + Utils.sendColoredMini(player, "" + this.lang.fishing_main_hand); + player.updateInventory(); + } + } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java index abac8d7..5b01181 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java @@ -1,6 +1,10 @@ package tk.shanebee.survival.listeners.item; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -13,171 +17,167 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import tk.shanebee.survival.SurvivalPlugin; +import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.util.Utils; import java.util.Random; public class MedicKit implements Listener { - private SurvivalPlugin plugin; - private Lang lang; - private PlayerManager playerManager; - - public MedicKit(SurvivalPlugin plugin) { - this.plugin = plugin; - this.lang = plugin.getLang(); - this.playerManager = plugin.getPlayerManager(); - } - - - - @EventHandler(priority = EventPriority.HIGHEST) - private void onDamaged(EntityDamageByEntityEvent event) { - if (event.isCancelled()) return; - if (event.getEntity() instanceof Player) { - Player player = (Player) event.getEntity(); - PlayerData playerData = playerManager.getPlayerData(player); - playerData.setStat(Stat.HEALING, 0); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - private void onClickEntity(PlayerInteractEntityEvent event) { - if (event.isCancelled()) return; - final Player player = event.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - final ItemStack mainItem = player.getInventory().getItemInMainHand(); - - if (Items.MEDIC_KIT.is(mainItem)) { - if (playerData.getStat(Stat.HEALING) <= 0) { - if (!player.isSneaking()) { - if (event.getRightClicked() instanceof Player) { - final Player healed = (Player) event.getRightClicked(); - PlayerData healedData = playerManager.getPlayerData(healed); - - if (healedData.getStat(Stat.HEALING) <= 0) { - if (player.getLocation().distance(healed.getLocation()) <= 4) { - playerData.setStat(Stat.HEALING, 1); - healedData.setStat(Stat.HEALING, 1); - healed.teleport(playerManager.lookAt(healed.getLocation(), player.getLocation())); - player.sendMessage(Utils.getColoredString(lang.healing) + ChatColor.RESET + healed.getDisplayName() + Utils.getColoredString(lang.keep) + ChatColor.DARK_GREEN + Utils.getColoredString(lang.medical_kit) + Utils.getColoredString(lang.on_hand)); - healed.sendMessage(Utils.getColoredString(lang.being_healed) + ChatColor.RESET + player.getDisplayName() + Utils.getColoredString(lang.stay_still)); - - playerData.setStat(Stat.HEAL_TIMES, 5); - final Runnable task = new Runnable() { - public void run() { - int times = playerData.getStat(Stat.HEAL_TIMES); - if (player.getInventory().getItemInMainHand().getType() == Material.CLOCK && player.getLocation().distance(healed.getLocation()) <= 4 && playerData.getStat(Stat.HEALING) > 0 && healedData.getStat(Stat.HEALING) > 0) { - if (times-- > 0) { - player.teleport(playerManager.lookAt(player.getLocation(), healed.getLocation())); - - Random rand = new Random(); - - player.removePotionEffect(PotionEffectType.SLOWNESS); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); - player.removePotionEffect(PotionEffectType.JUMP_BOOST); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); - - healed.getWorld().playSound(healed.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - healed.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); - - Location particleLoc = healed.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); - playerData.setStat(Stat.HEAL_TIMES, times); - } else { - playerData.setStat(Stat.HEALING, 0); - healedData.setStat(Stat.HEALING, 0); - - player.sendMessage(ChatColor.DARK_GREEN + Utils.getColoredString(lang.healing_complete)); - healed.sendMessage(ChatColor.DARK_GREEN + Utils.getColoredString(lang.healing_complete)); - - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } - } else { - playerData.setStat(Stat.HEALING, 0); - healedData.setStat(Stat.HEALING, 0); - - player.sendMessage(ChatColor.DARK_RED + Utils.getColoredString(lang.healing_interrupted)); - healed.sendMessage(ChatColor.DARK_RED + Utils.getColoredString(lang.healing_interrupted)); - - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } - } - }; - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); - } - } - } - } - } - } - } - - @EventHandler - private void onSelfClick(PlayerInteractEvent event) { - if (event.hasItem() && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { - final Player player = event.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (Items.MEDIC_KIT.is(mainItem)) { - if (playerData.getStat(Stat.HEALING) <= 0) { - if (player.isSneaking()) { - playerData.setStat(Stat.HEALING, 1); - player.sendMessage(Utils.getColoredString(lang.healing_self) + Utils.getColoredString(lang.keep) + ChatColor.DARK_GREEN + Utils.getColoredString(lang.medical_kit) + Utils.getColoredString(lang.on_hand)); - - playerData.setStat(Stat.HEAL_TIMES, 5); - final Runnable task = new Runnable() { - public void run() { - int times = playerData.getStat(Stat.HEAL_TIMES); - if (Items.MEDIC_KIT.is(player.getInventory().getItemInMainHand()) && playerData.getStat(Stat.HEALING) > 0) { - if (times-- > 0) { - Random rand = new Random(); - - player.removePotionEffect(PotionEffectType.SLOWNESS); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); - player.removePotionEffect(PotionEffectType.JUMP_BOOST); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); - - player.getWorld().playSound(player.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); - - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); - playerData.setStat(Stat.HEAL_TIMES, times); - } else { - playerData.setStat(Stat.HEALING, 0); - - player.sendMessage(ChatColor.DARK_GREEN + Utils.getColoredString(lang.healing_complete)); - - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } - } else { - playerData.setStat(Stat.HEALING, 0); - - player.sendMessage(ChatColor.DARK_RED + Utils.getColoredString(lang.healing_interrupted)); - - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } - } - }; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); - } - } - } - } - } + private final SurvivalPlugin plugin; + private final Lang lang; + private final PlayerManager playerManager; + + public MedicKit(SurvivalPlugin plugin) { + this.plugin = plugin; + this.lang = plugin.getLang(); + this.playerManager = plugin.getPlayerManager(); + } + + + @EventHandler(priority = EventPriority.HIGHEST) + private void onDamaged(EntityDamageByEntityEvent event) { + if (event.isCancelled()) return; + if (event.getEntity() instanceof Player player) { + PlayerData playerData = playerManager.getPlayerData(player); + playerData.setStat(Stat.HEALING, 0); + } + } + + @SuppressWarnings("deprecation") + @EventHandler(priority = EventPriority.HIGHEST) + private void onClickEntity(PlayerInteractEntityEvent event) { + if (event.isCancelled()) return; + final Player player = event.getPlayer(); + PlayerData playerData = playerManager.getPlayerData(player); + final ItemStack mainItem = player.getInventory().getItemInMainHand(); + + if (!Items.MEDIC_KIT.is(mainItem)) return; + if (playerData.getStat(Stat.HEALING) > 0) return; + if (player.isSneaking()) return; + if (!(event.getRightClicked() instanceof Player healed)) return; + if (player.getLocation().distance(healed.getLocation()) > 4) return; + + PlayerData healedData = playerManager.getPlayerData(healed); + + if (healedData.getStat(Stat.HEALING) > 0) return; + + playerData.setStat(Stat.HEALING, 1); + healedData.setStat(Stat.HEALING, 1); + healed.teleport(playerManager.lookAt(healed.getLocation(), player.getLocation())); + + Utils.sendColoredMini(player, lang.healing_other, healed.getDisplayName()); + Utils.sendColoredMini(healed, lang.being_healed, player.getDisplayName()); + + playerData.setStat(Stat.HEAL_TIMES, 5); + final Runnable task = new Runnable() { + public void run() { + int times = playerData.getStat(Stat.HEAL_TIMES); + if (player.getInventory().getItemInMainHand().getType() == Material.CLOCK && player.getLocation().distance(healed.getLocation()) <= 4 && playerData.getStat(Stat.HEALING) > 0 && healedData.getStat(Stat.HEALING) > 0) { + if (times-- > 0) { + player.teleport(playerManager.lookAt(player.getLocation(), healed.getLocation())); + + Random rand = new Random(); + + player.removePotionEffect(PotionEffectType.SLOWNESS); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); + player.removePotionEffect(PotionEffectType.JUMP_BOOST); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); + + healed.getWorld().playSound(healed.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + healed.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); + + Location particleLoc = healed.getLocation(); + particleLoc.setY(particleLoc.getY() + 1); + Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); + playerData.setStat(Stat.HEAL_TIMES, times); + } else { + playerData.setStat(Stat.HEALING, 0); + healedData.setStat(Stat.HEALING, 0); + + Utils.sendColoredMini(player, lang.healing_complete); + Utils.sendColoredMini(healed, lang.healing_complete); + + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); + } + } else { + playerData.setStat(Stat.HEALING, 0); + healedData.setStat(Stat.HEALING, 0); + + Utils.sendColoredMini(player, lang.healing_interrupted); + Utils.sendColoredMini(healed, lang.healing_interrupted); + + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); + } + } + }; + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); + } + + @EventHandler + private void onSelfClick(PlayerInteractEvent event) { + if (event.hasItem() && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { + final Player player = event.getPlayer(); + PlayerData playerData = playerManager.getPlayerData(player); + ItemStack mainItem = player.getInventory().getItemInMainHand(); + if (Items.MEDIC_KIT.is(mainItem)) { + if (playerData.getStat(Stat.HEALING) <= 0) { + if (player.isSneaking()) { + playerData.setStat(Stat.HEALING, 1); + + Utils.sendColoredMini(player, lang.healing_self); + + playerData.setStat(Stat.HEAL_TIMES, 5); + final Runnable task = new Runnable() { + public void run() { + int times = playerData.getStat(Stat.HEAL_TIMES); + if (Items.MEDIC_KIT.is(player.getInventory().getItemInMainHand()) && playerData.getStat(Stat.HEALING) > 0) { + if (times-- > 0) { + Random rand = new Random(); + + player.removePotionEffect(PotionEffectType.SLOWNESS); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); + player.removePotionEffect(PotionEffectType.JUMP_BOOST); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); + + player.getWorld().playSound(player.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + player.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); + + Location particleLoc = player.getLocation(); + particleLoc.setY(particleLoc.getY() + 1); + Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); + playerData.setStat(Stat.HEAL_TIMES, times); + } else { + playerData.setStat(Stat.HEALING, 0); + + Utils.sendColoredMini(player, lang.healing_complete); + + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); + } + } else { + playerData.setStat(Stat.HEALING, 0); + + Utils.sendColoredMini(player, lang.healing_interrupted); + + player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); + } + } + }; + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); + } + } + } + } + } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java index ea1fe76..739c5eb 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java @@ -86,7 +86,7 @@ private void onConsume(PlayerItemConsumeEvent event) { change = config.mechanics_thirst_rep_hot_milk; player.damage(2); player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 0)); - Utils.sendColoredMsg(player, lang.hot_milk_drink); + Utils.sendColoredMini(player, lang.hot_milk_drink); } else if (Items.WATER_BOWL.is(item)) { event.setCancelled(true); change = handleWaterBowl(player); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java index 493e960..7d1f877 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java @@ -26,8 +26,8 @@ public class Valkyrie implements Listener { - private SurvivalPlugin plugin; - private Lang lang; + private final SurvivalPlugin plugin; + private final Lang lang; public Valkyrie(SurvivalPlugin plugin) { this.plugin = plugin; @@ -66,7 +66,7 @@ private void onItemClick(PlayerInteractEvent event) { } player.updateInventory(); } else { - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.lack_of_energy)); + Utils.sendColoredMini(player,"" + this.lang.lack_of_energy); } } } @@ -76,7 +76,7 @@ private void onItemClick(PlayerInteractEvent event) { else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); if (playerData.getStat(Stat.DUAL_WIELD_MSG) == 2) { - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.valkyrie_axe_unable_dual)); + Utils.sendColoredMini(player,"" + this.lang.valkyrie_axe_unable_dual); } } } @@ -118,7 +118,7 @@ private void onAttack(EntityDamageByEntityEvent event) { } player.updateInventory(); } else { - player.sendMessage(ChatColor.RED + Utils.getColoredString(lang.lack_of_energy)); + Utils.sendColoredMini(player,"" + this.lang.lack_of_energy); } } } diff --git a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java index 4b52a1a..e6ce894 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java @@ -101,15 +101,15 @@ private void onEnergyDrop(EnergyLevelChangeEvent event) { double newLevel = playerData.getEnergy(); if (targetMatch(10.0, level, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_10); + Utils.sendColoredMini(player, lang.energy_level_10); } else if (targetMatch(6.5, level, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_6_5); + Utils.sendColoredMini(player, lang.energy_level_6_5); } else if (targetMatch(3.5, level, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_3_5); + Utils.sendColoredMini(player, lang.energy_level_3_5); } else if (targetMatch(2, level, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_2); + Utils.sendColoredMini(player, lang.energy_level_2); } else if (targetMatch(1, level, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_1); + Utils.sendColoredMini(player, lang.energy_level_1); } } } diff --git a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java b/src/main/java/tk/shanebee/survival/listeners/server/Guide.java index 40c5d19..0b8de7d 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/Guide.java @@ -1,9 +1,5 @@ package tk.shanebee.survival.listeners.server; -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -16,9 +12,9 @@ public class Guide implements Listener { - private SurvivalPlugin plugin; - private Lang lang; - private Config config; + private final SurvivalPlugin plugin; + private final Lang lang; + private final Config config; public Guide(SurvivalPlugin plugin) { this.plugin = plugin; @@ -28,17 +24,19 @@ public Guide(SurvivalPlugin plugin) { @EventHandler private void onJoin(PlayerJoinEvent e) { - if (e.getPlayer().hasPlayedBefore() && config.WELCOME_GUIDE_NEW_PLAYERS) return; - int delay = config.WELCOME_GUIDE_DELAY; + if (e.getPlayer().hasPlayedBefore() && this.config.welcome_guide_new_players) return; + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { Player player = e.getPlayer(); - TextComponent msg = new TextComponent(Utils.getColoredString(lang.survival_guide_msg)); - TextComponent link = new TextComponent(Utils.getColoredString(lang.survival_guide_click_msg)); - link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, lang.survival_guide_link)); - link.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, - new ComponentBuilder(Utils.getColoredString(lang.survival_guide_hover_msg)).create())); - player.spigot().sendMessage(msg, link); - }, 20 * delay); + +// Component component = Utils.getMini(this.lang.survival_guide_msg); +// Component hover = Utils.getMini(this.lang.survival_guide_hover_msg); +// Component link = Utils.getMini(this.lang.survival_guide_click_msg) +// .hoverEvent(HoverEvent.showText(hover)) +// .clickEvent(ClickEvent.openUrl(this.lang.survival_guide_link)); +// player.sendMessage(component); + Utils.sendColoredMini(player, this.lang.survival_guide_msg); + }, 20L * this.config.welcome_guide_delay); } } diff --git a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java index 9f5e276..364e396 100644 --- a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java @@ -64,15 +64,15 @@ public void run() { double newLevel = playerData.getEnergy(); if (config.MECHANICS_ENERGY_WARNING) { if (targetMatch(10.0, oldLevel, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_10); + Utils.sendColoredMini(player, lang.energy_level_10); } else if (targetMatch(6.5, oldLevel, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_6_5); + Utils.sendColoredMini(player, lang.energy_level_6_5); } else if (targetMatch(3.5, oldLevel, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_3_5); + Utils.sendColoredMini(player, lang.energy_level_3_5); } else if (targetMatch(2, oldLevel, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_2); + Utils.sendColoredMini(player, lang.energy_level_2); } else if (targetMatch(1, oldLevel, newLevel)) { - Utils.sendColoredMsg(player, lang.energy_level_1); + Utils.sendColoredMini(player, lang.energy_level_1); } } effects(player, playerData); diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index 663d0b9..cb7feb4 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.util; +import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -15,7 +15,6 @@ import org.bukkit.entity.Player; import org.bukkit.metadata.Metadatable; import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; import java.util.ArrayList; import java.util.List; @@ -85,73 +84,28 @@ public static List getDrops(Material material, Boolean grown) { return mat; } - /** - * Send a colored string to a Player - *

- * Does not require ChatColor methods - *

- * - * @param player The player to send a colored string to - * @param msg The string to send including color codes - */ - public static void sendColoredMsg(CommandSender player, String msg) { - player.sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - public static void sendColoredMini(CommandSender player, String format, Object... args) { - String f = String.format(format, args); - player.sendMessage(MINI_MESSAGE.deserialize(f)); - } - public static Component getMini(String format, Object... args) { String msg = args != null ? String.format(format, args) : format; return MINI_MESSAGE.deserialize(msg); } - public static String reverseComponent(Component component) { - return COMPONENT_SERIALIZER.serialize(component); - } - - /** - * Send a colored console message - *

This will NOT include plugin prefix

- * - * @param msg Message to send - */ - public static void sendColoredConsoleMsg(String msg) { - Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', msg)); - } - - /** - * Log a message to console - *

This will include plugin prefix

- * - * @param msg Message to log to console - */ - public static void log(String msg) { - Lang lang = SurvivalPlugin.getInstance().getLang(); - String prefix = "&7[&bSurvival&3Plus&7] "; - if (lang != null) { - prefix = lang.prefix; - } - sendColoredConsoleMsg(prefix + msg); + public static void sendColoredMini(Audience receiver, String format, Object... args) { + String f = String.format(format, args); + receiver.sendMessage(MINI_MESSAGE.deserialize(f)); } /** - * Log a formatted message to console - *

Formatted in the same style as {@link String#format(String, Object...)} - *
This will include plugin prefix

+ * Convert a component into a string * - * @param format Message format - * @param objects Objects in format + * @param component Component to convert + * @return String version of component */ - public static void log(String format, Object... objects) { - log(String.format(format, objects)); + public static String reverseComponent(Component component) { + return COMPONENT_SERIALIZER.serialize(component); } /** - * Log a message to console - *

This will include plugin prefix

+ * Log a prefixed message to console * * @param msg Message to log to console */ @@ -165,9 +119,8 @@ public static void logMini(String msg) { } /** - * Log a formatted message to console + * Log a prefixed formatted message to console *

Formatted in the same style as {@link String#format(String, Object...)} - *
This will include plugin prefix

* * @param format Message format * @param objects Objects in format @@ -176,26 +129,6 @@ public static void logMini(String format, Object... objects) { logMini(String.format(format, objects)); } - /** - * Gets a colored string - * - * @param string The string including color codes/HEX color codes - * @return Returns a formatted string - */ - public static String getColoredString(String string) { - if (isRunningMinecraft(1, 16)) { - Matcher matcher = HEX_PATTERN.matcher(string); - while (matcher.find()) { - final net.md_5.bungee.api.ChatColor hexColor = net.md_5.bungee.api.ChatColor.of(matcher.group().substring(1, matcher.group().length() - 1)); - final String before = string.substring(0, matcher.start()); - final String after = string.substring(matcher.end()); - string = before + hexColor + after; - matcher = HEX_PATTERN.matcher(string); - } - } - return net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', string); - } - /** * Spawn a particle at a location for all players * diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index 10d7795..2bd99f4 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -1,13 +1,14 @@ # SurvivalPlus Language File -#################### -# Language: English (EN) -# Authors: FattyMieo, ShaneBee -# Date: 28/4/2016 (Refreshed 13/3/2019) #################### # # Edit this file to your liking # +# This file supports MiniMessage formatting +# See the website for more info: https://docs.advntr.dev/minimessage/format +# +# Using legacy color codes with '&' or '§' are not supported and will error +# #################### #################### @@ -19,10 +20,7 @@ no-perm: "You do not have permission to perform this command" # When a player joins, they will see this message which links them to a guide to help get them started # IF you want, you can create your own guide and change the link -survival-guide-msg: "&6Our server changes a bunch of vanilla Minecraft mechanics, &6To see our survival guide " -survival-guide-click-msg: "Click Here" -survival-guide-hover-msg: "Click for Guide" -survival-guide-link: "https://bitbucket.org/ShaneBeeStudios/SurvivalPlus/wiki/Getting-Started" +survival-guide-msg: "<#E2E238>Our server changes a bunch of vanilla Minecraft mechanics, to see our survival guide Click Here" resource-pack-apply: "Please apply the requested Resource Pack." resource-pack-fail-download: "Failed to download resource pack, talk to server owner!" @@ -46,9 +44,9 @@ lack-of-energy: "Lack of energy, unable to spin." arrows-off-hand: "You must have arrows in your off hand." arrows-off-hand-crossbow: "You must load arrows from your off hand." bow-main-hand: "You must use a bow with your main hand." -recurved-bow: "&3Bow" -recurved-crossbow: "&3Crossbow" -recurved: "&7Recurved" +recurved-bow: "Bow" +recurved-crossbow: "Crossbow" +recurved: "Recurved" fishing-off-hand: "You must use a fishing pole with an empty off hand." fishing-main-hand: "You must use a fishing pole with your main hand." @@ -82,19 +80,20 @@ carbohydrates-lack: "Eat your grains and sugar." vitamins-lack: "Eat your vegetables and fruit." protein-lack: "Eat your meat, poultry, and dairy." +healing-other: "Healing %s, heep Medic Kit on hand." healing: "Healing " -healing-self: "Healing &ryourself" +healing-self: "Healing yourself, keep Medic Kit on hand." keep: ", keep " on-hand: " on hand." being-healed: "You are being healed by " stay-still: ", stay still." -healing-complete: "Healing complete." -healing-interrupted: "Healing interrupted." +healing-complete: "Healing complete." +healing-interrupted: "Healing interrupted." # Energy Level -energy-level-10: "&6You are starting to feel a little tired." -energy-level-6-5: "&6You are starting to feel a little worn out and weak." -energy-level-3-5: "&eYou are starting to feel a little nauseous, maybe it's time to get some sleep." +energy-level-10: "You are starting to feel a little tired." +energy-level-6-5: "You are starting to feel a little worn out and weak." +energy-level-3-5: "You are starting to feel a little nauseous, maybe it's time to get some sleep." energy-level-2: "You are starting to feel really sick, you should get some rest." energy-level-1: "Your lack of sleep is really taking a toll on you." @@ -111,17 +110,17 @@ attack-speed: "Attack Speed" attack-damage: "Attack Damage" right-click-sprinting: "Right Click when sprinting:" right-click-sneaking: "Right Click when sneaking:" -decrease-hunger-value: "&7> Decreases hunger value" +decrease-hunger-value: " Decreases hunger value" hatchet: "Hatchet" mattock: "Mattock" firestriker: "Firestriker" firestriker-damaged: "Damaged Firestriker" -firestriker-lore: "&7Right-Click to burn things||Sneak-Right-Click for portable smelter||&7 -Put smeltable into input slot||&7 -Click output slot to smelt" +firestriker-lore: "Right-Click to burn things||Sneak-Right-Click for portable smelter|| -Put smeltable into input slot|| -Click output slot to smelt" shiv: "Shiv" poisoned-enemy: "Poisoned: Poison enemy on hit" -poisoned-retain: "Poisoning Effect &7retains" -reduce-50: "&7> Reduce chance by 50%" +poisoned-retain: "Poisoning Effect retains" +reduce-50: " Reduce chance by 50%" grappling-hook: "Grappling Hook" hammer: "Hammer" @@ -130,30 +129,30 @@ workbench: "Workbench" valkyrie-axe: "Valkyrie's Axe" valkyrie-axe-unable-dual: "Unable to dual-wield with Valkyrie's Axe" valkyrie-axe-spin: "Spin: Spin your axe in a circle to attack all nearby enemies!" -valkyrie-axe-cooldown: "&7> Cooldown: 1 second" +valkyrie-axe-cooldown: " Cooldown: 1 second" quartz-breaker: "Quartz Breaker" -haste: "&eHaste" +haste: "Haste" obsidian-mace: "Obsidian Mace" -cripple-hit: "&dCripple: Enemies hit become &8weakened" +cripple-hit: "Cripple: Enemies hit become weakened" drain-hit: "Drain: Gain 2 hearts per hit" -exhausted-slow: "&8Exhausted: Slowness II" -expire-disarm: "&7> Expires after disarming for 5 seconds" -knockback-resistance: "&9+50% Knockback Resistance" +exhausted-slow: "Exhausted: Slowness II" +expire-disarm: " Expires after disarming for 5 seconds" +knockback-resistance: "+50% Knockback Resistance" ender-giant-blade: "Ender Giant Blade" ender-giant-blade-unable-duel: "Unable to dual-wield with the Ender Giant Blade" ender-giant-blade-charge: "Charge: Sprint forward, attack enemies in the way" -ender-giant-blade-cooldown: "&7> Cooldown: 5 seconds" -half-shield-resistance: "Half-Shield: Gains &4Resistance II" -reflecting-coming: "&7> Reflecting incoming damage by 40%" +ender-giant-blade-cooldown: " Cooldown: 5 seconds" +half-shield-resistance: "Half-Shield: Gains Resistance II" +reflecting-coming: " Reflecting incoming damage by 40%" blaze-sword: "Blaze Sword" -blaze-sword-fire-resistance: "&6Fire Resistance" +blaze-sword-fire-resistance: "Fire Resistance" blaze-sword-fiery: "Fiery: -3 Hearts" -blaze-sword-spread-fire: "&6Spread fire on the ground" -blaze-sword-cost: "&7> Costs 1 Durability" +blaze-sword-spread-fire: "Spread fire on the ground" +blaze-sword-cost: " Costs 1 Durability" reinforced-boots: "Reinforced Leather Boots" reinforced-tunic: "Reinforced Leather Tunic" @@ -169,23 +168,23 @@ fermented-skin: "Fermented Skin" medical-kit: "Medical Kit" water-bowl: "Water Bowl" -suspicious-meat: "&eSuspicious Meat" +suspicious-meat: "Suspicious Meat" # Water bottle names, lore and color # I used this site to get the RGB color codes: # http://minecraft.tools/en/potion.php dirty-water: "Water Bottle" -dirty-water-lore: "&7Dirty" +dirty-water-lore: "Dirty" dirty-water-color: 12769874 clean-water: "Water Bottle" -clean-water-lore: "&7Clean" +clean-water-lore: "Clean" clean-water-color: 1213666 purified-water: "Water Bottle" -purified-water-lore: "&7Purified" +purified-water-lore: "Purified" purified-water-color: 0x00FFFF coffee-bean-name: "Coffee Bean" -coffee-name: "&3Coffee" +coffee-name: "Coffee" coffee-color: 9461779 cold-milk-name: "Cold Milk" cold-milk-color: 16250871 @@ -194,22 +193,22 @@ hot-milk-color: 15456977 hot-milk-drink: "OUCH, that was hot!" breeding-egg-name: "Breeding Egg" -flint_sickle: "&8Flint Sickle" -stone_sickle: "&7Stone Sickle" -iron_sickle: "&3Iron Sickle" +flint_sickle: "Flint Sickle" +stone_sickle: "Stone Sickle" +iron_sickle: "Iron Sickle" diamond_sickle: "Diamond Sickle" campfire-name: "Campfire" -campfire-lore: "Unlit||&7Hit with a stick a few times||&7to light the campfire" +campfire-lore: "Unlit||Hit with a stick a few times||to light the campfire" -bee-helmet-name: '&6Beekeeper Helmet' -bee-chest-name: '&6Beekeeper Chestplate' -bee-legs-name: '&6Beekeeper Leggings' -bee-boots-name: '&6Beekeeper Boots' +bee-helmet-name: 'Beekeeper Helmet' +bee-chest-name: 'Beekeeper Chestplate' +bee-legs-name: 'Beekeeper Leggings' +bee-boots-name: 'Beekeeper Boots' bee-suit-lore: 'Prevent bee stings' -snow-boots-name: '&x&9&E&9Snow Boots' +snow-boots-name: 'Snow Boots' snow-boots-lore: 'Move quicker in snow' -rain-boots-name: '&x&D&6&E&7&0&3Rain Boots' +rain-boots-name: 'Rain Boots' rain-boots-lore: 'Move quicker in rain' #################### From a710dc14a82fe1111450f4fe39c4f8f44dbe41f1 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 20:23:32 -0800 Subject: [PATCH 043/133] more lang cleanup --- .../tk/shanebee/survival/config/Lang.java | 376 ++++++------------ .../survival/listeners/item/MedicKit.java | 2 +- src/main/resources/items.yml | 21 + src/main/resources/lang_EN.yml | 93 +---- 4 files changed, 136 insertions(+), 356 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index 4db8bb1..90371ba 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -32,8 +32,6 @@ public class Lang { public String task_must_use_shear; public String task_must_use_hammer; - public String no_rename; - public String period; public String charge; public String charge_ready; public String charge_unable; @@ -42,9 +40,6 @@ public class Lang { public String arrows_off_hand; public String arrows_off_hand_crossbow; public String bow_main_hand; - public String recurved_bow; - public String recurved_crossbow; - public String recurved; public String fishing_off_hand; public String fishing_main_hand; @@ -53,12 +48,8 @@ public class Lang { public String compass_waypoint_set; public String compass_waypoint_get; public String compass_waypoint_unset; - public List compass_lore; - public String players_only; public String toggle_chat_local; public String toggle_chat_global; - public String toggle_chat_disabled; - public String invalid_arg; public String starved_eat; public String dehydrated_drink; @@ -79,10 +70,7 @@ public class Lang { public String healing_other; public String healing_self; - public String keep; - public String on_hand; - public String being_healed; - public String stay_still; + public String healing_being_healed; public String healing_complete; public String healing_interrupted; @@ -91,47 +79,19 @@ public class Lang { public String energy_level_3_5; public String energy_level_2; public String energy_level_1; - /* - public String energized; - public String sleepy; - public String overworked; - public String distressed; - public String collapsed_1; - public String collapsed_2; - public String feeling_sleepy_1; - public String feeling_sleepy_2; - public String feeling_sleepy_3; - public String energy_rising; - */ - - public String locked; - public String missing_component; - public String in_main_hand; - public String in_off_hand; - public String attack_speed; - public String attack_damage; public String right_click_sprinting; public String right_click_sneaking; public String decrease_hunger_value; - public String hatchet; - public String mattock; public String firestriker; - public String firestriker_lore; - public String shiv; public String poisoned_enemy; public String poisoned_retain; public String reduce_50; - public String grappling_hook; - public String hammer; - public String workbench; - public String valkyrie_axe; public String valkyrie_axe_unable_dual; public String valkyrie_axe_spin; public String valkyrie_axe_cooldown; public String quartz_breaker; public String haste; - public String obsidian_mace; public String cripple_hit; public String drain_hit; public String exhausted_slow; @@ -143,58 +103,11 @@ public class Lang { public String ender_giant_blade_cooldown; public String half_shield_resistance; public String reflecting_coming; - public String blaze_sword; public String blaze_sword_fire_resistance; public String blaze_sword_fiery; public String blaze_sword_spread_fire; public String blaze_sword_cost; - public String reinforced_boots; - public String reinforced_tunic; - public String reinforced_pants; - public String reinforced_hat; - public String golden_sabatons; - public String golden_guard; - public String golden_greaves; - public String golden_crown; - public String fermented_skin; - public String suspicious_meat; - public String medical_kit; - public String water_bowl; - public String dirty_water; - public String dirty_water_lore; - public int dirty_water_color; - public String clean_water; - public String clean_water_lore; - public int clean_water_color; - public String purified_water; - public String purified_water_lore; - public int purified_water_color; - public String coffee_bean_name; - public String coffee_name; - public int coffee_color; - public String cold_milk_name; - public int cold_milk_color; - public String hot_milk_name; - public int hot_milk_color; public String hot_milk_drink; - public String breeding_egg_name; - - public String flint_sickle; - public String stone_sickle; - public String iron_sickle; - public String diamond_sickle; - public String campfire_name; - public String campfire_lore; - - public String bee_helmet_name; - public String bee_chest_name; - public String bee_legs_name; - public String bee_boots_name; - public String bee_suit_lore; - public String snow_boots_name; - public String snow_boots_lore; - public String rain_boots_name; - public String rain_boots_lore; public String cmd_heal_self; public String cmd_heal_by; @@ -205,180 +118,117 @@ public Lang(SurvivalPlugin main, String language) { this.langFilePath = "lang_" + language + ".yml"; } - public void loadLangFile(CommandSender sender) { - String loaded; - File lang_file = new File(plugin.getDataFolder(), langFilePath); - if (!lang_file.exists()) { - plugin.saveResource(langFilePath, true); - loaded = "New " + langFilePath + " created"; - } else { - loaded = "" + langFilePath + " loaded"; - matchConfig(YamlConfiguration.loadConfiguration(lang_file), lang_file); - } - lang = YamlConfiguration.loadConfiguration(lang_file); - - prefix = lang.getString("prefix"); - no_perm = lang.getString("no-perm"); - survival_guide_msg = lang.getString("survival-guide-msg"); - resource_pack_apply = lang.getString("resource-pack-apply"); - resource_pack_fail_download = lang.getString("resource-pack-fail-download"); - task_must_use_shovel = lang.getString("task-must-use-shovel"); - task_must_use_axe = lang.getString("task-must-use-axe"); - task_must_use_pick = lang.getString("task-must-use-pick"); - task_must_use_sickle = lang.getString("task-must-use-sickle"); - task_must_use_shear = lang.getString("task-must-use-shear"); - task_must_use_hammer = lang.getString("task-must-use-hammer"); - no_rename = lang.getString("no-rename"); - period = lang.getString("period"); - charge = lang.getString("charge"); - charge_ready = lang.getString("charge-ready"); - charge_unable = lang.getString("charge-unable"); - lack_of_energy = lang.getString("lack-of-energy"); - arrows_off_hand = lang.getString("arrows-off-hand"); - arrows_off_hand_crossbow = lang.getString("arrows-off-hand-crossbow"); - bow_main_hand = lang.getString("bow-main-hand"); - recurved_bow = lang.getString("recurved-bow"); - recurved_crossbow = lang.getString("recurved-crossbow"); - recurved = lang.getString("recurved"); - fishing_off_hand = lang.getString("fishing-off-hand"); - fishing_main_hand = lang.getString("fishing-main-hand"); - grappling_off_hand = lang.getString("grappling-off-hand"); - grappling_main_hand = lang.getString("grappling-main-hand"); - compass_waypoint_set = lang.getString("compass-waypoint-set"); - compass_waypoint_get = lang.getString("compass-waypoint-get"); - compass_waypoint_unset = lang.getString("compass-waypoint-unset"); - compass_lore = lang.getStringList("compass-lore"); - players_only = lang.getString("players-only"); - toggle_chat_local = lang.getString("toggle-chat-local"); - toggle_chat_global = lang.getString("toggle-chat-global"); - toggle_chat_disabled = lang.getString("toggle-chat-disabled"); - invalid_arg = lang.getString("invalid-arg"); - starved_eat = lang.getString("starved-eat"); - dehydrated_drink = lang.getString("dehydrated-drink"); - healthboard_title = lang.getString("healthboard-title"); - hunger = lang.getString("hunger"); - thirst = lang.getString("thirst"); - energy = lang.getString("energy"); - nutrients = lang.getString("nutrients"); - carbohydrates = lang.getString("carbohydrates"); - carbohydrates_lack = lang.getString("carbohydrates-lack"); - protein = lang.getString("protein"); - protein_lack = lang.getString("protein-lack"); - vitamins = lang.getString("vitamins"); - vitamins_lack = lang.getString("vitamins-lack"); - nutrition_gui = lang.getString("nutrition-gui"); - nutrition_gui_next_page = lang.getString("nutrition-gui-next-page"); - nutrition_gui_last_page = lang.getString("nutrition-gui-last-page"); - healing_other = lang.getString("healing-other"); - healing_self = lang.getString("healing-self"); - keep = lang.getString("keep"); - on_hand = lang.getString("on-hand"); - being_healed = lang.getString("being-healed"); - stay_still = lang.getString("stay-still"); - healing_complete = lang.getString("healing-complete"); - healing_interrupted = lang.getString("healing-interrupted"); - energy_level_10 = lang.getString("energy-level-10"); - energy_level_6_5 = lang.getString("energy-level-6-5"); - energy_level_3_5 = lang.getString("energy-level-3-5"); - energy_level_2 = lang.getString("energy-level-2"); - energy_level_1 = lang.getString("energy-level-1"); - locked = lang.getString("locked"); - missing_component = lang.getString("missing-component"); - in_main_hand = lang.getString("in-main-hand"); - in_off_hand = lang.getString("in-off-hand"); - attack_speed = lang.getString("attack-speed"); - attack_damage = lang.getString("attack-damage"); - right_click_sneaking = lang.getString("right-click-sneaking"); - right_click_sprinting = lang.getString("right-click-sprinting"); - decrease_hunger_value = lang.getString("decrease-hunger-value"); - hatchet = lang.getString("hatchet"); - mattock = lang.getString("mattock"); - firestriker = lang.getString("firestriker"); - firestriker_lore = lang.getString("firestriker-lore"); - shiv = lang.getString("shiv"); - poisoned_enemy = lang.getString("poisoned-enemy"); - poisoned_retain = lang.getString("poisoned-retain"); - reduce_50 = lang.getString("reduce-50"); - grappling_hook = lang.getString("grappling-hook"); - hammer = lang.getString("hammer"); - workbench = lang.getString("workbench"); - valkyrie_axe = lang.getString("valkyrie-axe"); - valkyrie_axe_unable_dual = lang.getString("valkyrie-axe-unable-dual"); - valkyrie_axe_spin = lang.getString("valkyrie-axe-spin"); - valkyrie_axe_cooldown = lang.getString("valkyrie-axe-cooldown"); - quartz_breaker = lang.getString("quartz-breaker"); - haste = lang.getString("haste"); - obsidian_mace = lang.getString("obsidian-mace"); - cripple_hit = lang.getString("cripple-hit"); - drain_hit = lang.getString("drain-hit"); - exhausted_slow = lang.getString("exhausted-slow"); - expire_disarm = lang.getString("expire-disarm"); - knockback_resistance = lang.getString("knockback-resistance"); - ender_giant_blade = lang.getString("ender-giant-blade"); - ender_giant_blade_unable_duel = lang.getString("ender-giant-blade-unable-duel"); - ender_giant_blade_charge = lang.getString("ender-giant-blade-charge"); - ender_giant_blade_cooldown = lang.getString("ender-giant-blade-cooldown"); - half_shield_resistance = lang.getString("half-shield-resistance"); - reflecting_coming = lang.getString("reflecting-coming"); - blaze_sword = lang.getString("blaze-sword"); - blaze_sword_fire_resistance = lang.getString("blaze-sword-fire-resistance"); - blaze_sword_fiery = lang.getString("blaze-sword-fiery"); - blaze_sword_spread_fire = lang.getString("blaze-sword-spread-fire"); - blaze_sword_cost = lang.getString("blaze-sword-cost"); - reinforced_boots = lang.getString("reinforced-boots"); - reinforced_tunic = lang.getString("reinforced-tunic"); - reinforced_pants = lang.getString("reinforced-pants"); - reinforced_hat = lang.getString("reinforced-hat"); - golden_sabatons = lang.getString("golden-sabatons"); - golden_guard = lang.getString("golden-guard"); - golden_greaves = lang.getString("golden-greaves"); - golden_crown = lang.getString("golden-crown"); - fermented_skin = lang.getString("fermented-skin"); - suspicious_meat = lang.getString("suspicious-meat"); - medical_kit = lang.getString("medical-kit"); - water_bowl = lang.getString("water-bowl"); - dirty_water = lang.getString("dirty-water"); - dirty_water_lore = lang.getString("dirty-water-lore"); - dirty_water_color = lang.getInt("dirty-water-color"); - clean_water = lang.getString("clean-water"); - clean_water_lore = lang.getString("clean-water-lore"); - clean_water_color = lang.getInt("clean-water-color"); - purified_water = lang.getString("purified-water"); - purified_water_lore = lang.getString("purified-water-lore"); - purified_water_color = lang.getInt("purified-water-color"); - coffee_bean_name = lang.getString("coffee-bean-name"); - coffee_name = lang.getString("coffee-name"); - coffee_color = lang.getInt("coffee-color"); - cold_milk_name = lang.getString("cold-milk-name"); - cold_milk_color = lang.getInt("cold-milk-color"); - hot_milk_name = lang.getString("hot-milk-name"); - hot_milk_color = lang.getInt("hot-milk-color"); - hot_milk_drink = lang.getString("hot-milk-drink"); - breeding_egg_name = lang.getString("breeding-egg-name"); - - flint_sickle = lang.getString("flint_sickle"); - stone_sickle = lang.getString("stone_sickle"); - iron_sickle = lang.getString("iron_sickle"); - diamond_sickle = lang.getString("diamond_sickle"); - campfire_name = lang.getString("campfire-name"); - campfire_lore = lang.getString("campfire-lore"); - - bee_helmet_name = lang.getString("bee-helmet-name"); - bee_chest_name = lang.getString("bee-chest-name"); - bee_legs_name = lang.getString("bee-legs-name"); - bee_boots_name = lang.getString("bee-boots-name"); - bee_suit_lore = lang.getString("bee-suit-lore"); - snow_boots_name = lang.getString("snow-boots-name"); - snow_boots_lore = lang.getString("snow-boots-lore"); - rain_boots_name = lang.getString("rain-boots-name"); - rain_boots_lore = lang.getString("rain-boots-lore"); - - cmd_heal_self = lang.getString("cmd-heal-self"); - cmd_heal_by = lang.getString("cmd-heal-by"); - cmd_heal_other = lang.getString("cmd-heal-other"); - - Utils.sendColoredMini(sender, prefix + loaded); - } +// public void loadLangFile(CommandSender sender) { +// String loaded; +// File lang_file = new File(plugin.getDataFolder(), langFilePath); +// if (!lang_file.exists()) { +// plugin.saveResource(langFilePath, true); +// loaded = "New " + langFilePath + " created"; +// } else { +// loaded = "" + langFilePath + " loaded"; +// matchConfig(YamlConfiguration.loadConfiguration(lang_file), lang_file); +// } +// lang = YamlConfiguration.loadConfiguration(lang_file); +// +// prefix = lang.getString("prefix"); +// no_perm = lang.getString("no-perm"); +// survival_guide_msg = lang.getString("survival-guide-msg"); +// resource_pack_apply = lang.getString("resource-pack-apply"); +// resource_pack_fail_download = lang.getString("resource-pack-fail-download"); +// task_must_use_shovel = lang.getString("task-must-use-shovel"); +// task_must_use_axe = lang.getString("task-must-use-axe"); +// task_must_use_pick = lang.getString("task-must-use-pick"); +// task_must_use_sickle = lang.getString("task-must-use-sickle"); +// task_must_use_shear = lang.getString("task-must-use-shear"); +// task_must_use_hammer = lang.getString("task-must-use-hammer"); +// no_rename = lang.getString("no-rename"); +// period = lang.getString("period"); +// charge = lang.getString("charge"); +// charge_ready = lang.getString("charge-ready"); +// charge_unable = lang.getString("charge-unable"); +// lack_of_energy = lang.getString("lack-of-energy"); +// arrows_off_hand = lang.getString("arrows-off-hand"); +// arrows_off_hand_crossbow = lang.getString("arrows-off-hand-crossbow"); +// bow_main_hand = lang.getString("bow-main-hand"); +// recurved_bow = lang.getString("recurved-bow"); +// recurved_crossbow = lang.getString("recurved-crossbow"); +// recurved = lang.getString("recurved"); +// fishing_off_hand = lang.getString("fishing-off-hand"); +// fishing_main_hand = lang.getString("fishing-main-hand"); +// grappling_off_hand = lang.getString("grappling-off-hand"); +// grappling_main_hand = lang.getString("grappling-main-hand"); +// compass_waypoint_set = lang.getString("compass-waypoint-set"); +// compass_waypoint_get = lang.getString("compass-waypoint-get"); +// compass_waypoint_unset = lang.getString("compass-waypoint-unset"); +// compass_lore = lang.getStringList("compass-lore"); +// players_only = lang.getString("players-only"); +// toggle_chat_local = lang.getString("toggle-chat-local"); +// toggle_chat_global = lang.getString("toggle-chat-global"); +// toggle_chat_disabled = lang.getString("toggle-chat-disabled"); +// invalid_arg = lang.getString("invalid-arg"); +// starved_eat = lang.getString("starved-eat"); +// dehydrated_drink = lang.getString("dehydrated-drink"); +// healthboard_title = lang.getString("healthboard-title"); +// hunger = lang.getString("hunger"); +// thirst = lang.getString("thirst"); +// energy = lang.getString("energy"); +// nutrients = lang.getString("nutrients"); +// carbohydrates = lang.getString("carbohydrates"); +// carbohydrates_lack = lang.getString("carbohydrates-lack"); +// protein = lang.getString("protein"); +// protein_lack = lang.getString("protein-lack"); +// vitamins = lang.getString("vitamins"); +// vitamins_lack = lang.getString("vitamins-lack"); +// nutrition_gui = lang.getString("nutrition-gui"); +// nutrition_gui_next_page = lang.getString("nutrition-gui-next-page"); +// nutrition_gui_last_page = lang.getString("nutrition-gui-last-page"); +// healing_other = lang.getString("healing-other"); +// healing_self = lang.getString("healing-self"); +// healing_being_healed = lang.getString("healing-being-healed"); +// healing_complete = lang.getString("healing-complete"); +// healing_interrupted = lang.getString("healing-interrupted"); +// energy_level_10 = lang.getString("energy-level-10"); +// energy_level_6_5 = lang.getString("energy-level-6-5"); +// energy_level_3_5 = lang.getString("energy-level-3-5"); +// energy_level_2 = lang.getString("energy-level-2"); +// energy_level_1 = lang.getString("energy-level-1"); +// locked = lang.getString("locked"); +// missing_component = lang.getString("missing-component"); +// right_click_sneaking = lang.getString("right-click-sneaking"); +// right_click_sprinting = lang.getString("right-click-sprinting"); +// decrease_hunger_value = lang.getString("decrease-hunger-value"); +// firestriker = lang.getString("firestriker"); +// poisoned_enemy = lang.getString("poisoned-enemy"); +// poisoned_retain = lang.getString("poisoned-retain"); +// reduce_50 = lang.getString("reduce-50"); +// valkyrie_axe_unable_dual = lang.getString("valkyrie-axe-unable-dual"); +// valkyrie_axe_spin = lang.getString("valkyrie-axe-spin"); +// valkyrie_axe_cooldown = lang.getString("valkyrie-axe-cooldown"); +// quartz_breaker = lang.getString("quartz-breaker"); +// haste = lang.getString("haste"); +// cripple_hit = lang.getString("cripple-hit"); +// drain_hit = lang.getString("drain-hit"); +// exhausted_slow = lang.getString("exhausted-slow"); +// expire_disarm = lang.getString("expire-disarm"); +// knockback_resistance = lang.getString("knockback-resistance"); +// ender_giant_blade = lang.getString("ender-giant-blade"); +// ender_giant_blade_unable_duel = lang.getString("ender-giant-blade-unable-duel"); +// ender_giant_blade_charge = lang.getString("ender-giant-blade-charge"); +// ender_giant_blade_cooldown = lang.getString("ender-giant-blade-cooldown"); +// half_shield_resistance = lang.getString("half-shield-resistance"); +// reflecting_coming = lang.getString("reflecting-coming"); +// blaze_sword_fire_resistance = lang.getString("blaze-sword-fire-resistance"); +// blaze_sword_fiery = lang.getString("blaze-sword-fiery"); +// blaze_sword_spread_fire = lang.getString("blaze-sword-spread-fire"); +// blaze_sword_cost = lang.getString("blaze-sword-cost"); +// hot_milk_drink = lang.getString("hot-milk-drink"); +// +// cmd_heal_self = lang.getString("cmd-heal-self"); +// cmd_heal_by = lang.getString("cmd-heal-by"); +// cmd_heal_other = lang.getString("cmd-heal-other"); +// +// Utils.sendColoredMini(sender, prefix + loaded); +// } // Used to update config @SuppressWarnings("ConstantConditions") @@ -411,7 +261,7 @@ private void matchConfig(FileConfiguration config, File file) { private void saveLang(YamlConfiguration lang, File file) { try { lang.save(file); - Utils.logMini( "%s Updated", this.langFilePath); + Utils.logMini("%s Updated", this.langFilePath); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java index 5b01181..b167406 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java @@ -71,7 +71,7 @@ private void onClickEntity(PlayerInteractEntityEvent event) { healed.teleport(playerManager.lookAt(healed.getLocation(), player.getLocation())); Utils.sendColoredMini(player, lang.healing_other, healed.getDisplayName()); - Utils.sendColoredMini(healed, lang.being_healed, player.getDisplayName()); + Utils.sendColoredMini(healed, lang.healing_being_healed, player.getDisplayName()); playerData.setStat(Stat.HEAL_TIMES, 5); final Runnable task = new Runnable() { diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index f71dd1a..83c707c 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -41,6 +41,11 @@ items: - '<#17DA4F> See coords of waypoint' firestriker: name: "Firestriker" + lore: + - "Right-Click to burn things" + - "Sneak-Right-Click for portable smelter" + - " - Put smeltable into input slot" + - " - Click output slot to smelt" repair_cost: 0 repair_percent: 0.0 grappling_hook: @@ -123,10 +128,14 @@ items: # ARMOR snow_boots: name: "Snow Boots" + lore: + - 'Move quicker in snow' repair_cost: 1 repair_percent: 0.97 rain_boots: name: "Rain Boots" + lore: + - 'Move quicker in rain' repair_cost: 1 repair_percent: 0.97 diamond_helmet: @@ -195,21 +204,29 @@ items: repair_percent: 1.0 beekeeper_helmet: name: "Beekeeper Helmet" + lore: + - 'Prevent bee stings' repair_cost: 0 repair_percent: 1.0 color: 16777215 beekeeper_chestplate: name: "Beekeeper Chestplate" + lore: + - 'Prevent bee stings' repair_cost: 0 repair_percent: 1.0 color: 16777215 beekeeper_leggings: name: "Beekeeper Leggings" + lore: + - 'Prevent bee stings' repair_cost: 0 repair_percent: 1.0 color: 16777215 beekeeper_boots: name: "Beekeeper Boots" + lore: + - 'Prevent bee stings' repair_cost: 0 repair_percent: 1.0 color: 16777215 @@ -233,6 +250,10 @@ items: # BLOCKS unlit_campfire: name: "Campfire" + lore: + - "Unlit" + - "Hit with a stick a few times" + - "to light the campfire" workbench: name: "Workbench" diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index 2bd99f4..222ddbf 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -32,9 +32,6 @@ task-must-use-shear: "You must use shears to cut this." task-must-use-hammer: "You must use a hammer to construct this." task-must-use-sickle: "You must use a sickle to harvest this." -no-rename: "You cannot rename or repair this " -period: "." - charge: "CHARGE!" charge-ready: "Ready to charge!" charge-unable: "Unable to charge immediately." @@ -44,9 +41,6 @@ lack-of-energy: "Lack of energy, unable to spin." arrows-off-hand: "You must have arrows in your off hand." arrows-off-hand-crossbow: "You must load arrows from your off hand." bow-main-hand: "You must use a bow with your main hand." -recurved-bow: "Bow" -recurved-crossbow: "Crossbow" -recurved: "Recurved" fishing-off-hand: "You must use a fishing pole with an empty off hand." fishing-main-hand: "You must use a fishing pole with your main hand." @@ -57,11 +51,8 @@ compass-waypoint-set: "Compass has pointed at %s" compass-waypoint-get: "You are %s blocks away from your waypoint at %s" compass-waypoint-unset: "You do not have a waypoint set for this world." -players-only: "Works on players only." toggle-chat-local: "Toggled to Local Chat." toggle-chat-global: "Toggled to Global Chat." -toggle-chat-disabled: "Chat toggle has been disabled on this server." -invalid-arg: "Invalid Arguments." starved-eat: "You are starving, eat some food." dehydrated-drink: "You are dehydrated, drink some water." @@ -81,12 +72,8 @@ vitamins-lack: "Eat your vegetables and fruit." protein-lack: "Eat your meat, poultry, and dairy." healing-other: "Healing %s, heep Medic Kit on hand." -healing: "Healing " healing-self: "Healing yourself, keep Medic Kit on hand." -keep: ", keep " -on-hand: " on hand." -being-healed: "You are being healed by " -stay-still: ", stay still." +healing-being-healed: "You are being healed by %s" healing-complete: "Healing complete." healing-interrupted: "Healing interrupted." @@ -97,36 +84,18 @@ energy-level-3-5: "You are starting to feel a little nauseous, maybe it' energy-level-2: "You are starting to feel really sick, you should get some rest." energy-level-1: "Your lack of sleep is really taking a toll on you." -locked: "Locked" -missing-component: "Missing Component" - #################### # Item Details #################### -in-main-hand: "When in main hand:" -in-off-hand: "When in off hand:" -attack-speed: "Attack Speed" -attack-damage: "Attack Damage" right-click-sprinting: "Right Click when sprinting:" right-click-sneaking: "Right Click when sneaking:" decrease-hunger-value: " Decreases hunger value" -hatchet: "Hatchet" -mattock: "Mattock" -firestriker: "Firestriker" -firestriker-damaged: "Damaged Firestriker" -firestriker-lore: "Right-Click to burn things||Sneak-Right-Click for portable smelter|| -Put smeltable into input slot|| -Click output slot to smelt" -shiv: "Shiv" poisoned-enemy: "Poisoned: Poison enemy on hit" poisoned-retain: "Poisoning Effect retains" reduce-50: " Reduce chance by 50%" -grappling-hook: "Grappling Hook" -hammer: "Hammer" -workbench: "Workbench" - -valkyrie-axe: "Valkyrie's Axe" valkyrie-axe-unable-dual: "Unable to dual-wield with Valkyrie's Axe" valkyrie-axe-spin: "Spin: Spin your axe in a circle to attack all nearby enemies!" valkyrie-axe-cooldown: " Cooldown: 1 second" @@ -134,83 +103,23 @@ valkyrie-axe-cooldown: " Cooldown: 1 second" quartz-breaker: "Quartz Breaker" haste: "Haste" -obsidian-mace: "Obsidian Mace" cripple-hit: "Cripple: Enemies hit become weakened" drain-hit: "Drain: Gain 2 hearts per hit" exhausted-slow: "Exhausted: Slowness II" expire-disarm: " Expires after disarming for 5 seconds" knockback-resistance: "+50% Knockback Resistance" -ender-giant-blade: "Ender Giant Blade" ender-giant-blade-unable-duel: "Unable to dual-wield with the Ender Giant Blade" ender-giant-blade-charge: "Charge: Sprint forward, attack enemies in the way" ender-giant-blade-cooldown: " Cooldown: 5 seconds" half-shield-resistance: "Half-Shield: Gains Resistance II" reflecting-coming: " Reflecting incoming damage by 40%" -blaze-sword: "Blaze Sword" blaze-sword-fire-resistance: "Fire Resistance" blaze-sword-fiery: "Fiery: -3 Hearts" blaze-sword-spread-fire: "Spread fire on the ground" blaze-sword-cost: " Costs 1 Durability" -reinforced-boots: "Reinforced Leather Boots" -reinforced-tunic: "Reinforced Leather Tunic" -reinforced-pants: "Reinforced Leather Trousers" -reinforced-hat: "Reinforced Leather Hat" - -golden-sabatons: "Golden Sabatons" -golden-guard: "Golden Guard" -golden-greaves: "Golden Greaves" -golden-crown: "Golden Crown" - -fermented-skin: "Fermented Skin" -medical-kit: "Medical Kit" -water-bowl: "Water Bowl" - -suspicious-meat: "Suspicious Meat" - -# Water bottle names, lore and color -# I used this site to get the RGB color codes: -# http://minecraft.tools/en/potion.php -dirty-water: "Water Bottle" -dirty-water-lore: "Dirty" -dirty-water-color: 12769874 -clean-water: "Water Bottle" -clean-water-lore: "Clean" -clean-water-color: 1213666 -purified-water: "Water Bottle" -purified-water-lore: "Purified" -purified-water-color: 0x00FFFF - -coffee-bean-name: "Coffee Bean" -coffee-name: "Coffee" -coffee-color: 9461779 -cold-milk-name: "Cold Milk" -cold-milk-color: 16250871 -hot-milk-name: "Hot Milk" -hot-milk-color: 15456977 -hot-milk-drink: "OUCH, that was hot!" -breeding-egg-name: "Breeding Egg" - -flint_sickle: "Flint Sickle" -stone_sickle: "Stone Sickle" -iron_sickle: "Iron Sickle" -diamond_sickle: "Diamond Sickle" - -campfire-name: "Campfire" -campfire-lore: "Unlit||Hit with a stick a few times||to light the campfire" - -bee-helmet-name: 'Beekeeper Helmet' -bee-chest-name: 'Beekeeper Chestplate' -bee-legs-name: 'Beekeeper Leggings' -bee-boots-name: 'Beekeeper Boots' -bee-suit-lore: 'Prevent bee stings' -snow-boots-name: 'Snow Boots' -snow-boots-lore: 'Move quicker in snow' -rain-boots-name: 'Rain Boots' -rain-boots-lore: 'Move quicker in rain' - #################### # Commands #################### From ceeab7b65bc8ddeda6619fb0ae623ec0a8b5bd81 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sat, 15 Feb 2025 20:27:09 -0800 Subject: [PATCH 044/133] lang - forgot to re-enable the loading --- .../tk/shanebee/survival/config/Lang.java | 211 +++++++++--------- 1 file changed, 100 insertions(+), 111 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/tk/shanebee/survival/config/Lang.java index 90371ba..427cc4d 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/tk/shanebee/survival/config/Lang.java @@ -118,117 +118,106 @@ public Lang(SurvivalPlugin main, String language) { this.langFilePath = "lang_" + language + ".yml"; } -// public void loadLangFile(CommandSender sender) { -// String loaded; -// File lang_file = new File(plugin.getDataFolder(), langFilePath); -// if (!lang_file.exists()) { -// plugin.saveResource(langFilePath, true); -// loaded = "New " + langFilePath + " created"; -// } else { -// loaded = "" + langFilePath + " loaded"; -// matchConfig(YamlConfiguration.loadConfiguration(lang_file), lang_file); -// } -// lang = YamlConfiguration.loadConfiguration(lang_file); -// -// prefix = lang.getString("prefix"); -// no_perm = lang.getString("no-perm"); -// survival_guide_msg = lang.getString("survival-guide-msg"); -// resource_pack_apply = lang.getString("resource-pack-apply"); -// resource_pack_fail_download = lang.getString("resource-pack-fail-download"); -// task_must_use_shovel = lang.getString("task-must-use-shovel"); -// task_must_use_axe = lang.getString("task-must-use-axe"); -// task_must_use_pick = lang.getString("task-must-use-pick"); -// task_must_use_sickle = lang.getString("task-must-use-sickle"); -// task_must_use_shear = lang.getString("task-must-use-shear"); -// task_must_use_hammer = lang.getString("task-must-use-hammer"); -// no_rename = lang.getString("no-rename"); -// period = lang.getString("period"); -// charge = lang.getString("charge"); -// charge_ready = lang.getString("charge-ready"); -// charge_unable = lang.getString("charge-unable"); -// lack_of_energy = lang.getString("lack-of-energy"); -// arrows_off_hand = lang.getString("arrows-off-hand"); -// arrows_off_hand_crossbow = lang.getString("arrows-off-hand-crossbow"); -// bow_main_hand = lang.getString("bow-main-hand"); -// recurved_bow = lang.getString("recurved-bow"); -// recurved_crossbow = lang.getString("recurved-crossbow"); -// recurved = lang.getString("recurved"); -// fishing_off_hand = lang.getString("fishing-off-hand"); -// fishing_main_hand = lang.getString("fishing-main-hand"); -// grappling_off_hand = lang.getString("grappling-off-hand"); -// grappling_main_hand = lang.getString("grappling-main-hand"); -// compass_waypoint_set = lang.getString("compass-waypoint-set"); -// compass_waypoint_get = lang.getString("compass-waypoint-get"); -// compass_waypoint_unset = lang.getString("compass-waypoint-unset"); -// compass_lore = lang.getStringList("compass-lore"); -// players_only = lang.getString("players-only"); -// toggle_chat_local = lang.getString("toggle-chat-local"); -// toggle_chat_global = lang.getString("toggle-chat-global"); -// toggle_chat_disabled = lang.getString("toggle-chat-disabled"); -// invalid_arg = lang.getString("invalid-arg"); -// starved_eat = lang.getString("starved-eat"); -// dehydrated_drink = lang.getString("dehydrated-drink"); -// healthboard_title = lang.getString("healthboard-title"); -// hunger = lang.getString("hunger"); -// thirst = lang.getString("thirst"); -// energy = lang.getString("energy"); -// nutrients = lang.getString("nutrients"); -// carbohydrates = lang.getString("carbohydrates"); -// carbohydrates_lack = lang.getString("carbohydrates-lack"); -// protein = lang.getString("protein"); -// protein_lack = lang.getString("protein-lack"); -// vitamins = lang.getString("vitamins"); -// vitamins_lack = lang.getString("vitamins-lack"); -// nutrition_gui = lang.getString("nutrition-gui"); -// nutrition_gui_next_page = lang.getString("nutrition-gui-next-page"); -// nutrition_gui_last_page = lang.getString("nutrition-gui-last-page"); -// healing_other = lang.getString("healing-other"); -// healing_self = lang.getString("healing-self"); -// healing_being_healed = lang.getString("healing-being-healed"); -// healing_complete = lang.getString("healing-complete"); -// healing_interrupted = lang.getString("healing-interrupted"); -// energy_level_10 = lang.getString("energy-level-10"); -// energy_level_6_5 = lang.getString("energy-level-6-5"); -// energy_level_3_5 = lang.getString("energy-level-3-5"); -// energy_level_2 = lang.getString("energy-level-2"); -// energy_level_1 = lang.getString("energy-level-1"); -// locked = lang.getString("locked"); -// missing_component = lang.getString("missing-component"); -// right_click_sneaking = lang.getString("right-click-sneaking"); -// right_click_sprinting = lang.getString("right-click-sprinting"); -// decrease_hunger_value = lang.getString("decrease-hunger-value"); -// firestriker = lang.getString("firestriker"); -// poisoned_enemy = lang.getString("poisoned-enemy"); -// poisoned_retain = lang.getString("poisoned-retain"); -// reduce_50 = lang.getString("reduce-50"); -// valkyrie_axe_unable_dual = lang.getString("valkyrie-axe-unable-dual"); -// valkyrie_axe_spin = lang.getString("valkyrie-axe-spin"); -// valkyrie_axe_cooldown = lang.getString("valkyrie-axe-cooldown"); -// quartz_breaker = lang.getString("quartz-breaker"); -// haste = lang.getString("haste"); -// cripple_hit = lang.getString("cripple-hit"); -// drain_hit = lang.getString("drain-hit"); -// exhausted_slow = lang.getString("exhausted-slow"); -// expire_disarm = lang.getString("expire-disarm"); -// knockback_resistance = lang.getString("knockback-resistance"); -// ender_giant_blade = lang.getString("ender-giant-blade"); -// ender_giant_blade_unable_duel = lang.getString("ender-giant-blade-unable-duel"); -// ender_giant_blade_charge = lang.getString("ender-giant-blade-charge"); -// ender_giant_blade_cooldown = lang.getString("ender-giant-blade-cooldown"); -// half_shield_resistance = lang.getString("half-shield-resistance"); -// reflecting_coming = lang.getString("reflecting-coming"); -// blaze_sword_fire_resistance = lang.getString("blaze-sword-fire-resistance"); -// blaze_sword_fiery = lang.getString("blaze-sword-fiery"); -// blaze_sword_spread_fire = lang.getString("blaze-sword-spread-fire"); -// blaze_sword_cost = lang.getString("blaze-sword-cost"); -// hot_milk_drink = lang.getString("hot-milk-drink"); -// -// cmd_heal_self = lang.getString("cmd-heal-self"); -// cmd_heal_by = lang.getString("cmd-heal-by"); -// cmd_heal_other = lang.getString("cmd-heal-other"); -// -// Utils.sendColoredMini(sender, prefix + loaded); -// } + public void loadLangFile(CommandSender sender) { + String loaded; + File lang_file = new File(plugin.getDataFolder(), langFilePath); + if (!lang_file.exists()) { + plugin.saveResource(langFilePath, true); + loaded = "New " + langFilePath + " created"; + } else { + loaded = "" + langFilePath + " loaded"; + matchConfig(YamlConfiguration.loadConfiguration(lang_file), lang_file); + } + lang = YamlConfiguration.loadConfiguration(lang_file); + + prefix = lang.getString("prefix"); + no_perm = lang.getString("no-perm"); + survival_guide_msg = lang.getString("survival-guide-msg"); + resource_pack_apply = lang.getString("resource-pack-apply"); + resource_pack_fail_download = lang.getString("resource-pack-fail-download"); + task_must_use_shovel = lang.getString("task-must-use-shovel"); + task_must_use_axe = lang.getString("task-must-use-axe"); + task_must_use_pick = lang.getString("task-must-use-pick"); + task_must_use_sickle = lang.getString("task-must-use-sickle"); + task_must_use_shear = lang.getString("task-must-use-shear"); + task_must_use_hammer = lang.getString("task-must-use-hammer"); + charge = lang.getString("charge"); + charge_ready = lang.getString("charge-ready"); + charge_unable = lang.getString("charge-unable"); + lack_of_energy = lang.getString("lack-of-energy"); + arrows_off_hand = lang.getString("arrows-off-hand"); + arrows_off_hand_crossbow = lang.getString("arrows-off-hand-crossbow"); + bow_main_hand = lang.getString("bow-main-hand"); + fishing_off_hand = lang.getString("fishing-off-hand"); + fishing_main_hand = lang.getString("fishing-main-hand"); + grappling_off_hand = lang.getString("grappling-off-hand"); + grappling_main_hand = lang.getString("grappling-main-hand"); + compass_waypoint_set = lang.getString("compass-waypoint-set"); + compass_waypoint_get = lang.getString("compass-waypoint-get"); + compass_waypoint_unset = lang.getString("compass-waypoint-unset"); + toggle_chat_local = lang.getString("toggle-chat-local"); + toggle_chat_global = lang.getString("toggle-chat-global"); + starved_eat = lang.getString("starved-eat"); + dehydrated_drink = lang.getString("dehydrated-drink"); + healthboard_title = lang.getString("healthboard-title"); + hunger = lang.getString("hunger"); + thirst = lang.getString("thirst"); + energy = lang.getString("energy"); + nutrients = lang.getString("nutrients"); + carbohydrates = lang.getString("carbohydrates"); + carbohydrates_lack = lang.getString("carbohydrates-lack"); + protein = lang.getString("protein"); + protein_lack = lang.getString("protein-lack"); + vitamins = lang.getString("vitamins"); + vitamins_lack = lang.getString("vitamins-lack"); + nutrition_gui = lang.getString("nutrition-gui"); + nutrition_gui_next_page = lang.getString("nutrition-gui-next-page"); + nutrition_gui_last_page = lang.getString("nutrition-gui-last-page"); + healing_other = lang.getString("healing-other"); + healing_self = lang.getString("healing-self"); + healing_being_healed = lang.getString("healing-being-healed"); + healing_complete = lang.getString("healing-complete"); + healing_interrupted = lang.getString("healing-interrupted"); + energy_level_10 = lang.getString("energy-level-10"); + energy_level_6_5 = lang.getString("energy-level-6-5"); + energy_level_3_5 = lang.getString("energy-level-3-5"); + energy_level_2 = lang.getString("energy-level-2"); + energy_level_1 = lang.getString("energy-level-1"); + right_click_sneaking = lang.getString("right-click-sneaking"); + right_click_sprinting = lang.getString("right-click-sprinting"); + decrease_hunger_value = lang.getString("decrease-hunger-value"); + firestriker = lang.getString("firestriker"); + poisoned_enemy = lang.getString("poisoned-enemy"); + poisoned_retain = lang.getString("poisoned-retain"); + reduce_50 = lang.getString("reduce-50"); + valkyrie_axe_unable_dual = lang.getString("valkyrie-axe-unable-dual"); + valkyrie_axe_spin = lang.getString("valkyrie-axe-spin"); + valkyrie_axe_cooldown = lang.getString("valkyrie-axe-cooldown"); + quartz_breaker = lang.getString("quartz-breaker"); + haste = lang.getString("haste"); + cripple_hit = lang.getString("cripple-hit"); + drain_hit = lang.getString("drain-hit"); + exhausted_slow = lang.getString("exhausted-slow"); + expire_disarm = lang.getString("expire-disarm"); + knockback_resistance = lang.getString("knockback-resistance"); + ender_giant_blade = lang.getString("ender-giant-blade"); + ender_giant_blade_unable_duel = lang.getString("ender-giant-blade-unable-duel"); + ender_giant_blade_charge = lang.getString("ender-giant-blade-charge"); + ender_giant_blade_cooldown = lang.getString("ender-giant-blade-cooldown"); + half_shield_resistance = lang.getString("half-shield-resistance"); + reflecting_coming = lang.getString("reflecting-coming"); + blaze_sword_fire_resistance = lang.getString("blaze-sword-fire-resistance"); + blaze_sword_fiery = lang.getString("blaze-sword-fiery"); + blaze_sword_spread_fire = lang.getString("blaze-sword-spread-fire"); + blaze_sword_cost = lang.getString("blaze-sword-cost"); + hot_milk_drink = lang.getString("hot-milk-drink"); + + cmd_heal_self = lang.getString("cmd-heal-self"); + cmd_heal_by = lang.getString("cmd-heal-by"); + cmd_heal_other = lang.getString("cmd-heal-other"); + + Utils.sendColoredMini(sender, prefix + loaded); + } // Used to update config @SuppressWarnings("ConstantConditions") From a2e5c83af3ef77584a19e00399da98e9c3d46b7c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 16 Feb 2025 00:24:04 -0800 Subject: [PATCH 045/133] Firestriker revamp --- .../FireStrikerGUI.java} | 93 +++++---- .../java/tk/shanebee/survival/item/Item.java | 1 + .../tk/shanebee/survival/item/ItemConfig.java | 24 +++ .../java/tk/shanebee/survival/item/Items.java | 2 +- .../item/items/tools/FireStriker.java | 24 +-- .../survival/listeners/EventManager.java | 4 +- .../listeners/item/FirestrikerClick.java | 178 ------------------ .../listeners/item/FirestrikerListener.java | 169 +++++++++++++++++ .../tk/shanebee/survival/util/ItemUtils.java | 37 +++- src/main/resources/items.yml | 10 +- 10 files changed, 303 insertions(+), 239 deletions(-) rename src/main/java/tk/shanebee/survival/{item/items/FireStrikerListen.java => gui/FireStrikerGUI.java} (66%) delete mode 100644 src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java create mode 100644 src/main/java/tk/shanebee/survival/listeners/item/FirestrikerListener.java diff --git a/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java b/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java similarity index 66% rename from src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java rename to src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java index 5630b70..c4fbeb8 100644 --- a/src/main/java/tk/shanebee/survival/item/items/FireStrikerListen.java +++ b/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java @@ -1,50 +1,63 @@ -package tk.shanebee.survival.item.items; +package tk.shanebee.survival.gui; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.InventoryView; -import org.bukkit.inventory.InventoryView.Property; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.FurnaceView; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; +import tk.shanebee.survival.util.ItemUtils; -public class FireStrikerListen implements Runnable, InventoryHolder { +import java.util.Random; + +@SuppressWarnings("UnstableApiUsage") +public class FireStrikerGUI implements Runnable, InventoryHolder { + + public static @Nullable FireStrikerGUI create(Player player, ItemStack itemStack) { + FireStrikerGUI fireStrikerGUI = new FireStrikerGUI(player, itemStack); + if (fireStrikerGUI.burnTime > 0) return fireStrikerGUI; + return null; + } private final int id; + private final FurnaceView furnaceView; private final Inventory inv; private final Player player; - private final ItemStack item; + private final ItemStack firestrikerItemStack; + private final Random random = new Random(); - private final int MAX_COOK_TIME; + private final int maxCookTime; + private final int maxBurnTime; private int cookTime; private int burnTime; - public FireStrikerListen(Player player, ItemStack item) { + private FireStrikerGUI(Player player, ItemStack itemStack) { SurvivalPlugin plugin = SurvivalPlugin.getInstance(); - Lang lang = plugin.getLang(); - this.inv = Bukkit.createInventory(this, InventoryType.FURNACE, Utils.getMini(lang.firestriker)); + this.furnaceView = MenuType.FURNACE.create(player, ItemUtils.getItemNameComponent(itemStack)); + this.inv = this.furnaceView.getTopInventory(); this.player = player; - this.item = item; - this.MAX_COOK_TIME = plugin.getSurvivalConfig().ITEM_FIRESTRIKER_COOK_TIME; + this.firestrikerItemStack = itemStack; + this.maxCookTime = plugin.getSurvivalConfig().ITEM_FIRESTRIKER_COOK_TIME; this.cookTime = 0; - ItemMeta itemMeta = item.getItemMeta(); + ItemMeta itemMeta = itemStack.getItemMeta(); assert itemMeta != null; - this.burnTime = 8 - (((Damageable) itemMeta).getDamage() / 7); + this.maxBurnTime = Items.FIRESTRIKER.getMaxCooks(); + this.burnTime = ItemUtils.getDurability(itemStack); this.id = Bukkit.getScheduler().runTaskTimer(plugin, this, 0, 1).getTaskId(); } @@ -55,7 +68,7 @@ public void run() { private void tick() { if (canCook() && canBurn()) { - if (cookTime < MAX_COOK_TIME) { + if (cookTime < maxCookTime) { cookTime++; } else { cook(); @@ -77,11 +90,9 @@ private void tick() { } private void updateFuel() { - ItemStack fuel = inv.getItem(1); + ItemStack fuel = this.inv.getItem(1); if (fuel != null && Items.FIRESTRIKER.is(fuel)) { - Damageable meta = ((Damageable) fuel.getItemMeta()); - assert meta != null; - burnTime = 8 - (meta.getDamage() / 7); + this.burnTime = this.maxBurnTime - ItemUtils.getDurability(fuel); } } @@ -91,20 +102,20 @@ private boolean canBurn() { } private void burn() { - ItemStack fuel = inv.getItem(1); - assert fuel != null; - ItemMeta itemMeta = fuel.getItemMeta(); - assert itemMeta != null; + ItemStack fuelItemStack = this.inv.getItem(1); + assert fuelItemStack != null; + ItemMeta itemMeta = fuelItemStack.getItemMeta(); int damage = ((Damageable) itemMeta).getDamage(); - damage += 7; - if (damage <= 52) { + damage++; + if (damage < this.maxBurnTime) { ((Damageable) itemMeta).setDamage(damage); - fuel.setItemMeta(itemMeta); - inv.setItem(1, fuel); - burnTime--; + fuelItemStack.setItemMeta(itemMeta); + this.inv.setItem(1, fuelItemStack); + this.burnTime--; } else { - inv.setItem(1, null); - burnTime = 0; + this.inv.setItem(1, null); + this.player.getWorld().playSound(this.player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); + this.burnTime = 0; } } @@ -152,17 +163,15 @@ private void cook() { inv.setItem(0, input); } + @SuppressWarnings("UnstableApiUsage") private void updateView() { - InventoryView view = player.getOpenInventory(); - view.setProperty(Property.COOK_TIME, cookTime); - view.setProperty(Property.TICKS_FOR_CURRENT_SMELTING, MAX_COOK_TIME); - view.setProperty(Property.BURN_TIME, burnTime); - view.setProperty(Property.TICKS_FOR_CURRENT_FUEL, 8); + this.furnaceView.setCookTime(this.cookTime, this.maxCookTime); + this.furnaceView.setBurnTime(this.burnTime, 8); } public void open() { - inv.setItem(1, this.item); - player.openInventory(inv); + inv.setItem(1, this.firestrikerItemStack); + player.openInventory(this.furnaceView); } public void close() { @@ -214,7 +223,11 @@ private Material getOutput(Material material) { @Override public @NotNull Inventory getInventory() { - return inv; + return this.inv; + } + + public FurnaceView getFurnaceView() { + return this.furnaceView; } } diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index 4682361..3cf03fe 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -63,6 +63,7 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod Utils.logMini("Failed to load item name for item '" + key + "'"); } + // Lore List lore = ITEM_CONFIG.getLore(key); if (lore != null && !lore.isEmpty()) { List loreComponents = new ArrayList<>(); diff --git a/src/main/java/tk/shanebee/survival/item/ItemConfig.java b/src/main/java/tk/shanebee/survival/item/ItemConfig.java index 4025dd6..d8992e5 100644 --- a/src/main/java/tk/shanebee/survival/item/ItemConfig.java +++ b/src/main/java/tk/shanebee/survival/item/ItemConfig.java @@ -103,6 +103,30 @@ public int getColor(String key) { return 0; } + public int getInt(String itemKey, String valueKey, int defaultValue) { + String path = "items." + itemKey + "." + valueKey; + if (this.settings.contains(path)) { + return this.settings.getInt(path); + } + return defaultValue; + } + + public double getDouble(String itemKey, String valueKey, double defaultValue) { + String path = "items." + itemKey + "." + valueKey; + if (this.settings.contains(path)) { + return this.settings.getDouble(path); + } + return defaultValue; + } + + public String getString(String itemKey, String valueKey, String defaultValue) { + String path = "items." + itemKey + "." + valueKey; + if (this.settings.contains(path)) { + return this.settings.getString(path); + } + return defaultValue; + } + void save() { try { settings.save(configFile); diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/tk/shanebee/survival/item/Items.java index 17c0a5c..5b360bc 100644 --- a/src/main/java/tk/shanebee/survival/item/Items.java +++ b/src/main/java/tk/shanebee/survival/item/Items.java @@ -59,7 +59,7 @@ public class Items { public static final Item MATTOCK = new Mattock(); public static final Item SHIV = new Shiv(); public static final Item HAMMER = new Hammer(); - public static final Item FIRESTRIKER = new FireStriker(); + public static final FireStriker FIRESTRIKER = new FireStriker(); public static final Item GRAPPLING_HOOK = new GrapplingHook(); public static final Item COMPASS = new Compass(); public static final Item FLINT_SICKLE = new Sickle("flint", Material.FLINT); diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java b/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java index 1d50154..90b043e 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java @@ -1,13 +1,9 @@ package tk.shanebee.survival.item.items.tools; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.attribute.AttributeModifier.Operation; -import org.bukkit.inventory.EquipmentSlotGroup; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.RecipeChoice; @@ -18,16 +14,16 @@ @SuppressWarnings("UnstableApiUsage") public class FireStriker extends Item { + private final int maxCooks; + public FireStriker() { - ItemStack itemStack = ItemType.WOODEN_SHOVEL.createItemStack(); + ItemStack itemStack = ItemType.STICK.createItemStack(); + this.maxCooks = ITEM_CONFIG.getInt("firestriker", "max_cooks", 8); + itemStack.setData(DataComponentTypes.MAX_DAMAGE, this.maxCooks); + itemStack.setData(DataComponentTypes.DAMAGE, 0); + itemStack.setData(DataComponentTypes.MAX_STACK_SIZE, 1); ItemMeta itemMeta = itemStack.getItemMeta(); - float firestriker_spd = 4f; - - AttributeModifier i_firestrikerSpeed = new AttributeModifier(BASE_ATTACK_SPEED, firestriker_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_firestrikerSpeed); - - itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); itemStack.setItemMeta(itemMeta); setupDefaults("firestriker", itemStack); } @@ -40,4 +36,8 @@ public void registerRecipe() { Bukkit.addRecipe(recipe); } + public int getMaxCooks() { + return this.maxCooks; + } + } diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index ad86d9d..c16a89f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -25,7 +25,7 @@ import tk.shanebee.survival.listeners.item.CauldronWaterBottle; import tk.shanebee.survival.listeners.item.CompassWaypoint; import tk.shanebee.survival.listeners.item.CookieHealthBoost; -import tk.shanebee.survival.listeners.item.FirestrikerClick; +import tk.shanebee.survival.listeners.item.FirestrikerListener; import tk.shanebee.survival.listeners.item.FoodDiversityConsume; import tk.shanebee.survival.listeners.item.GiantBlade; import tk.shanebee.survival.listeners.item.GrapplingHook; @@ -73,7 +73,7 @@ public void registerEvents() { if (config.SURVIVAL_ENABLED) { pm.registerEvents(new BlockBreak(plugin), this.plugin); pm.registerEvents(new BlockPlace(plugin), this.plugin); - pm.registerEvents(new FirestrikerClick(plugin), this.plugin); + pm.registerEvents(new FirestrikerListener(plugin), this.plugin); pm.registerEvents(new ShivPoison(this.plugin), this.plugin); pm.registerEvents(new WaterBowl(plugin), this.plugin); pm.registerEvents(new Campfire(plugin), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java deleted file mode 100644 index cff4699..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerClick.java +++ /dev/null @@ -1,178 +0,0 @@ -package tk.shanebee.survival.listeners.item; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.Tag; -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.block.data.Lightable; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockIgniteEvent; -import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.item.items.FireStrikerListen; - -import java.util.Random; - -public class FirestrikerClick implements Listener { - - public FirestrikerClick(SurvivalPlugin plugin) { - } - - @EventHandler - private void onItemClick(PlayerInteractEvent event) { - if (event.hasItem()) { - Player player = event.getPlayer(); - Block clickedBlock = event.getClickedBlock(); - ItemStack tool = event.getItem(); - Action action = event.getAction(); - if (clickedBlock == null || tool == null) return; - - Material clickedBlockType = clickedBlock.getType(); - Material toolType = tool.getType(); - if (Items.FIRESTRIKER.is(tool)) { - if (player.isSneaking()) { - if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) { - Random rand = new Random(); - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ITEM_SHOVEL_FLATTEN, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - - event.setCancelled(true); - FireStrikerListen fireStriker = new FireStrikerListen(player, tool.clone()); - fireStriker.open(); - tool.setAmount(0); - player.updateInventory(); - } - } else { - if (action == Action.RIGHT_CLICK_BLOCK) { - switch (clickedBlockType) { - case ENCHANTING_TABLE: - case ANVIL: - case BREWING_STAND: - case SPRUCE_DOOR: - case BIRCH_DOOR: - case OAK_DOOR: - case JUNGLE_DOOR: - case ACACIA_DOOR: - case DARK_OAK_DOOR: - case IRON_DOOR: - case TRAPPED_CHEST: - case CHEST: - case NOTE_BLOCK: - case IRON_TRAPDOOR: - case FURNACE: - case HOPPER: - case CRAFTING_TABLE: - case DROPPER: - case DISPENSER: - case REDSTONE_WALL_TORCH: - case REDSTONE_TORCH: - return; - default: - } - if (Tag.BEDS.isTagged(clickedBlockType)) return; - if (Tag.FENCE_GATES.isTagged(clickedBlockType)) return; - if (Tag.TRAPDOORS.isTagged(clickedBlockType)) return; - if (clickedBlockType == Material.CAMPFIRE) { - Lightable camp = ((Lightable) clickedBlock.getBlockData()); - if (camp.isLit()) return; - camp.setLit(true); - clickedBlock.setBlockData(camp); - } - // Cancel turning grass block into grass path - if (clickedBlockType == Material.GRASS_BLOCK) { - event.setCancelled(true); - } - Location loc = clickedBlock.getRelative(event.getBlockFace()).getLocation(); - if (ignite(player, loc)) { - Random rand = new Random(); - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ITEM_SHOVEL_FLATTEN, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - - ItemMeta meta = tool.getItemMeta(); - ((Damageable) meta).setDamage(((Damageable) meta).getDamage() + 7); - tool.setItemMeta(meta); - if (((Damageable) tool.getItemMeta()).getDamage() >= 56) { - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - if (player.getInventory().getItemInMainHand().getType() == toolType) - player.getInventory().setItemInMainHand(null); - else if (player.getInventory().getItemInOffHand().getType() == toolType) - player.getInventory().setItemInOffHand(null); - } - player.updateInventory(); - } - } - } - } - } - } - - private boolean ignite(Player igniter, Location loc) { - Random rand = new Random(); - - loc.add(0.5, 0.5, 0.5); - - BlockIgniteEvent igniteEvent = new BlockIgniteEvent(loc.getBlock(), - IgniteCause.FLINT_AND_STEEL, igniter); - Bukkit.getServer().getPluginManager().callEvent(igniteEvent); - if (igniteEvent.isCancelled()) { - return false; - } - - BlockState blockState = loc.getBlock().getState(); - - BlockPlaceEvent placeEvent = new BlockPlaceEvent(loc.getBlock(), - blockState, loc.getBlock(), igniter.getInventory().getItemInMainHand(), igniter, true, EquipmentSlot.HAND); - Bukkit.getServer().getPluginManager().callEvent(placeEvent); - - if (placeEvent.isCancelled() || !placeEvent.canBuild()) { - placeEvent.getBlockPlaced().getState().setType(Material.AIR); - return false; - } - - - loc.getWorld().playSound(loc, Sound.ITEM_FLINTANDSTEEL_USE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - loc.getBlock().setType(Material.FIRE); - - return true; - } - - @EventHandler - private void onCloseInventory(InventoryCloseEvent event) { - Inventory inv = event.getInventory(); - if (inv.getHolder() instanceof FireStrikerListen fireStriker) { - fireStriker.close(); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - private void onAttack(EntityDamageByEntityEvent event) { - if (event.isCancelled()) return; - if (event.getDamager() instanceof Player player && event.getEntity() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { - ItemStack item = player.getInventory().getItemInMainHand(); - if (Items.FIRESTRIKER.is(item)) { - ItemMeta meta = item.getItemMeta(); - assert meta != null; - ((Damageable) meta).setDamage(((Damageable) meta).getDamage() - 2); - item.setItemMeta(meta); - } - } - } - -} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerListener.java b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerListener.java new file mode 100644 index 0000000..e4cc8c1 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerListener.java @@ -0,0 +1,169 @@ +package tk.shanebee.survival.listeners.item; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.Tag; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.data.Lightable; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; +import tk.shanebee.survival.SurvivalPlugin; +import tk.shanebee.survival.gui.FireStrikerGUI; +import tk.shanebee.survival.item.Items; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +public class FirestrikerListener implements Listener { + + private final Map firestrikerViewMap = new HashMap<>(); + private final Random random = new Random(); + + @SuppressWarnings("unused") + public FirestrikerListener(SurvivalPlugin plugin) { + } + + @EventHandler + private void onItemClick(PlayerInteractEvent event) { + if (event.hasItem()) { + Player player = event.getPlayer(); + ItemStack tool = event.getItem(); + Action action = event.getAction(); + EquipmentSlot hand = event.getHand(); + if (tool == null || hand == null) return; + + if (Items.FIRESTRIKER.is(tool)) { + if (player.isSneaking() && (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK)) { + event.setCancelled(true); + FireStrikerGUI fireStriker = FireStrikerGUI.create(player, tool.clone()); + if (fireStriker != null) { + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ITEM_AXE_WAX_OFF, 5.0F, this.random.nextFloat() * 0.4F + 0.8F); + this.firestrikerViewMap.put(fireStriker.getFurnaceView(), fireStriker); + fireStriker.open(); + tool.setAmount(0); + player.updateInventory(); + } else { + tool.setAmount(0); + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 5.0F, this.random.nextFloat() * 0.4F + 0.8F); + } + } else if (action == Action.RIGHT_CLICK_BLOCK) { + Block clickedBlock = event.getClickedBlock(); + if (clickedBlock == null) return; + + Material blockType = clickedBlock.getType(); + switch (blockType) { + case ENCHANTING_TABLE: + case ANVIL: + case BREWING_STAND: + case TRAPPED_CHEST: + case CHEST: + case NOTE_BLOCK: + case FURNACE: + case HOPPER: + case CRAFTING_TABLE: + case DROPPER: + case DISPENSER: + case REDSTONE_WALL_TORCH: + case REDSTONE_TORCH: + return; + } + if (Tag.BEDS.isTagged(blockType)) return; + if (Tag.FENCE_GATES.isTagged(blockType)) return; + if (Tag.DOORS.isTagged(blockType)) return; + if (Tag.TRAPDOORS.isTagged(blockType)) return; + if (blockType == Material.CAMPFIRE || blockType == Material.SOUL_CAMPFIRE) { + Lightable campfire = ((Lightable) clickedBlock.getBlockData()); + if (!campfire.isLit()) { + player.swingHand(hand); + campfire.setLit(true); + clickedBlock.setBlockData(campfire); + damageItem(player, tool); + } + return; + } + Location loc = clickedBlock.getRelative(event.getBlockFace()).getLocation(); + if (ignite(player, loc)) { + player.swingHand(hand); + damageItem(player, tool); + } + } + } + } + } + + private boolean ignite(Player igniter, Location loc) { + Random rand = new Random(); + + loc.add(0.5, 0.5, 0.5); + + BlockIgniteEvent igniteEvent = new BlockIgniteEvent(loc.getBlock(), IgniteCause.FLINT_AND_STEEL, igniter); + if (!igniteEvent.callEvent()) { + return false; + } + + BlockState blockState = loc.getBlock().getState(); + + BlockPlaceEvent placeEvent = new BlockPlaceEvent(loc.getBlock(), + blockState, loc.getBlock(), igniter.getInventory().getItemInMainHand(), igniter, true, EquipmentSlot.HAND); + Bukkit.getServer().getPluginManager().callEvent(placeEvent); + + if (placeEvent.isCancelled() || !placeEvent.canBuild()) { + placeEvent.getBlockPlaced().getState().setType(Material.AIR); + return false; + } + + + loc.getWorld().playSound(loc, Sound.ITEM_FLINTANDSTEEL_USE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); + loc.getBlock().setType(Material.FIRE); + + return true; + } + + private void damageItem(Player player, ItemStack itemStack) { + if (player.damageItemStack(itemStack, 1).isEmpty()) { + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 5.0F, this.random.nextFloat() * 0.4F + 0.8F); + } + } + + @EventHandler + private void onCloseInventory(InventoryCloseEvent event) { + HumanEntity player = event.getPlayer(); + InventoryView openInventory = player.getOpenInventory(); + FireStrikerGUI fireStrikerGUI = this.firestrikerViewMap.get(openInventory); + if (fireStrikerGUI != null) { + fireStrikerGUI.close(); + this.firestrikerViewMap.remove(openInventory); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + private void onAttack(EntityDamageByEntityEvent event) { + if (event.isCancelled()) return; + if (event.getDamager() instanceof Player player && event.getEntity() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { + ItemStack itemStack = player.getInventory().getItemInMainHand(); + if (Items.FIRESTRIKER.is(itemStack)) { + player.damageItemStack(itemStack, 1); + } + } + } + +} diff --git a/src/main/java/tk/shanebee/survival/util/ItemUtils.java b/src/main/java/tk/shanebee/survival/util/ItemUtils.java index e764a55..5a6ccf5 100644 --- a/src/main/java/tk/shanebee/survival/util/ItemUtils.java +++ b/src/main/java/tk/shanebee/survival/util/ItemUtils.java @@ -1,5 +1,7 @@ package tk.shanebee.survival.util; +import io.papermc.paper.datacomponent.DataComponentTypes; +import net.kyori.adventure.text.Component; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; @@ -7,6 +9,7 @@ /** * Utility methods for {@link ItemStack ItemStacks} */ +@SuppressWarnings("UnstableApiUsage") public class ItemUtils { /** @@ -29,8 +32,38 @@ public static void setDurability(ItemStack item, int durability) { * @return The durability of the ItemStack */ public static int getDurability(ItemStack item) { - assert item.getItemMeta() != null; - return ((Damageable) item.getItemMeta()).getDamage(); + if (item.hasData(DataComponentTypes.MAX_DAMAGE) && item.hasData(DataComponentTypes.DAMAGE)) { + Integer maxDamage = item.getData(DataComponentTypes.MAX_DAMAGE); + Integer damage = item.getData(DataComponentTypes.DAMAGE); + assert maxDamage != null; + assert damage != null; + return maxDamage - damage; + } + return 0; + } + + @SuppressWarnings({"UnstableApiUsage", "deprecation"}) + public static String getItemName(ItemStack itemStack) { + if (itemStack.hasData(DataComponentTypes.CUSTOM_NAME)) { + Component data = itemStack.getData(DataComponentTypes.CUSTOM_NAME); + if (data != null) return Utils.reverseComponent(data); + } else if (itemStack.hasData(DataComponentTypes.ITEM_NAME)) { + Component data = itemStack.getData(DataComponentTypes.ITEM_NAME); + if (data != null) return Utils.reverseComponent(data); + } + return itemStack.getItemMeta().getDisplayName(); + } + + @SuppressWarnings("UnstableApiUsage") + public static Component getItemNameComponent(ItemStack itemStack) { + if (itemStack.hasData(DataComponentTypes.CUSTOM_NAME)) { + Component data = itemStack.getData(DataComponentTypes.CUSTOM_NAME); + if (data != null) return data; + } else if (itemStack.hasData(DataComponentTypes.ITEM_NAME)) { + Component data = itemStack.getData(DataComponentTypes.ITEM_NAME); + if (data != null) return data; + } + return itemStack.getItemMeta().displayName(); } } diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 83c707c..4bad2ff 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -42,12 +42,14 @@ items: firestriker: name: "Firestriker" lore: - - "Right-Click to burn things" - - "Sneak-Right-Click for portable smelter" - - " - Put smeltable into input slot" - - " - Click output slot to smelt" + - "Right-Click to burn things" + - " - You can also light campfires" + - "Sneak-Right-Click to smelt things" + - " - Put a smeltable item into input slot" + - " - Keep it open and watch it cook" repair_cost: 0 repair_percent: 0.0 + max_cooks: 10 grappling_hook: name: "Grappling Hook" repair_cost: 0 From 49f99ebc013d7216d8ab0ab5da71eef3f274de4d Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 16 Feb 2025 01:33:49 -0800 Subject: [PATCH 046/133] more cleanup --- .../tk/shanebee/survival/config/Config.java | 224 +++++------ .../survival/listeners/EventManager.java | 24 +- .../survival/listeners/block/BlockBreak.java | 10 +- .../listeners/entity/PiglinBarter.java | 2 +- .../listeners/item/ObsidianMaceWeakness.java | 2 +- .../survival/listeners/item/ShivPoison.java | 2 +- .../survival/listeners/item/WaterBowl.java | 2 +- .../listeners/player/PlayerDataListener.java | 2 +- .../survival/listeners/server/LocalChat.java | 2 +- .../listeners/server/RecipeDiscovery.java | 23 +- .../survival/managers/EffectManager.java | 10 +- .../survival/managers/MerchantManager.java | 8 +- .../survival/managers/RecipeManager.java | 360 +++++++++--------- .../shanebee/survival/tasks/TaskManager.java | 2 +- 14 files changed, 331 insertions(+), 342 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 861c39d..99ce2aa 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -28,24 +28,24 @@ public class Config { public int welcome_guide_delay; // SURVIVAL - public boolean SURVIVAL_ENABLED; + public boolean survival_enabled; public boolean SURVIVAL_LIMITED_CRAFTING; - public boolean SURVIVAL_UNLOCK_ALL_RECIPES; - public boolean SURVIVAL_REMOVE_WOOD_TOOLS; - public boolean SURVIVAL_TORCH; + public boolean survival_unlock_all_recipes; + public boolean survival_remove_wood_tools; + public boolean survival_torch; public boolean SURVIVAL_UPDATE_MERCHANT_TRADES; - public boolean BREAK_ONLY_WITH_SICKLE; + public boolean break_only_with_sickle; public boolean BREAK_ONLY_WITH_SHOVEL; public boolean BREAK_ONLY_WITH_AXE; public boolean BREAK_ONLY_WITH_PICKAXE; public boolean BREAK_ONLY_WITH_SHEARS; public boolean PLACE_ONLY_WITH_HAMMER; - public boolean SURVIVAL_SICKLE_FLINT; - public boolean SURVIVAL_SICKLE_STONE; - public boolean SURVIVAL_SICKLE_IRON; - public boolean SURVIVAL_SICKLE_DIAMOND; + public boolean survival_sickle_flint; + public boolean survival_sickle_stone; + public boolean survival_sickle_iron; + public boolean survival_sickle_diamond; public double DROP_RATE_STICK; public double DROP_RATE_FLINT; @@ -64,25 +64,25 @@ public class Config { public double MECHANICS_ENERGY_REFRESH_RATE_BED; public double MECHANICS_ENERGY_REFRESH_RATE_CHAIR; public double MECHANICS_ENERGY_EXHAUSTION; - public boolean MECHANICS_ENERGY_COFFEE_ENABLED; + public boolean mechanics_energy_coffee_enabled; public boolean MECHANICS_ENERGY_ABSORPTION; public boolean MECHANICS_ENERGY_HASTE; - public boolean MECHANICS_SLOW_ARMOR; - public boolean MECHANICS_REINFORCED_ARMOR; + public boolean mechanics_slow_armor; + public boolean mechanics_reinforced_armor; public boolean MECHANICS_BOW; - public boolean MECHANICS_RECURVED_BOW; - public boolean MECHANICS_GRAPPLING_HOOK; - public boolean MECHANICS_MEDIC_KIT; - public boolean MECHANICS_REDUCED_IRON_NUGGET; - public boolean MECHANICS_REDUCED_GOLD_NUGGET; + public boolean mechanics_recurved_bow; + public boolean mechanics_grappling_hook; + public boolean mechanics_medic_kit; + public boolean mechanics_reduced_iron_nugget; + public boolean mechanics_reduced_gold_nugget; public boolean mechanics_status_scoreboard; public int MECHANICS_ALERT_INTERVAL; public boolean MECHANICS_RAW_MEAT_HUNGER; - public boolean MECHANICS_EMPTY_POTION; - public boolean MECHANICS_POISON_POTATO; + public boolean mechanics_empty_potion; + public boolean mechanics_poison_potato; public boolean MECHANICS_COOKIE_BOOST; public boolean MECHANICS_BEET_STRENGTH; @@ -140,16 +140,16 @@ public class Config { public int mechanics_hunger_start_amount; public int mechanics_hunger_respawn_amount; - public boolean MECHANICS_COMPASS_WAYPOINT; + public boolean mechanics_compass_waypoint; public boolean MECHANICS_COMPASS_WAYPOINT_WORLDS; public boolean MECHANICS_CLOWN_FISH; - public boolean MECHANICS_FERMENTED_SKIN; + public boolean mechanics_fermented_skin; public boolean MECHANICS_LIVING_SLIME; - public boolean MECHANICS_SNOWBALL_REVAMP; + public boolean mechanics_snowball_revamp; public boolean MECHANICS_SNOW_GEN_REVAMP; - public boolean MECHANICS_FARMING_PRODUCTS_COOKIE; - public boolean MECHANICS_FARMING_PRODUCTS_BREAD; + public boolean mechanics_farming_products_cookie; + public boolean mechanics_farming_products_bread; public boolean MECHANICS_CHAIRS_ENABLED; public int MECHANICS_CHAIRS_MAX_WIDTH; @@ -161,7 +161,7 @@ public class Config { public boolean MECHANICS_BURNOUT_TORCH_DROP; public boolean MECHANICS_BURNOUT_TORCH_PERSIST; - public boolean MECHANICS_WEATHER_ENABLED; + public boolean mechanics_weather_enabled; public double MECHANICS_WEATHER_SPEED_BASE; public double MECHANICS_WEATHER_SPEED_RAIN; public double MECHANICS_WEATHER_SPEED_STORM; @@ -175,7 +175,7 @@ public class Config { public boolean ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED; public int ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS; public double ENTITY_MECHANICS_PIGMEN_CHEST_SPEED; - public boolean ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED; + public boolean entity_mechanics_beekeeper_suit_enabled; public boolean ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED; public int ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE; public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED; @@ -186,38 +186,38 @@ public class Config { public boolean ENTITY_MECHANICS_PIGLIN_ALT_DROP; // RECIPES - public boolean RECIPES_SADDLE; - public boolean RECIPES_NAME_TAG; - public boolean RECIPES_PACKED_ICE; - public boolean RECIPES_LEATHER_BARD; - public boolean RECIPES_IRON_BARD; - public boolean RECIPES_GOLD_BARD; - public boolean RECIPES_DIAMOND_BARD; - public boolean RECIPES_CLAY_BRICK; - public boolean RECIPES_QUARTZ_BLOCK; - public boolean RECIPES_WOOL_STRING; - public boolean RECIPES_WEB_STRING; - public boolean RECIPES_ICE; - public boolean RECIPES_CLAY; - public boolean RECIPES_DIORITE; - public boolean RECIPES_GRANITE; - public boolean RECIPES_ANDESITE; - public boolean RECIPES_GRAVEL; - public boolean RECIPES_SLIMEBALL; - public boolean RECIPES_COBWEB; - public boolean RECIPES_SAPLING_STICK; - public boolean RECIPES_FISHING_ROD; - public boolean RECIPES_FURNACE; - public boolean RECIPES_WORKBENCH; + public boolean recipes_saddle; + public boolean recipes_name_tag; + public boolean recipes_packed_ice; + public boolean recipes_leather_bard; + public boolean recipes_iron_bard; + public boolean recipes_gold_bard; + public boolean recipes_diamond_bard; + public boolean recipes_clay_brick; + public boolean recipes_quartz_block; + public boolean recipes_wool_string; + public boolean recipes_web_string; + public boolean recipes_ice; + public boolean recipes_clay; + public boolean recipes_diorite; + public boolean recipes_granite; + public boolean recipes_andesite; + public boolean recipes_gravel; + public boolean recipes_slimeball; + public boolean recipes_cobweb; + public boolean recipes_sapling_stick; + public boolean recipes_fishing_rod; + public boolean recipes_furnace; + public boolean recipes_workbench; // LEGENDARY TOOLS - public boolean LEGENDARY_VALKYRIE; - public boolean LEGENDARY_QUARTZPICKAXE; - public boolean LEGENDARY_OBSIDIAN_MACE; - public boolean LEGENDARY_GIANTBLADE; - public boolean LEGENDARY_BLAZESWORD; - public boolean LEGENDARY_NOTCH_APPLE; - public boolean LEGENDARY_GOLDARMORBUFF; + public boolean legendary_valkyrie; + public boolean legendary_quartzpickaxe; + public boolean legendary_obsidian_mace; + public boolean legendary_giantblade; + public boolean legendary_blazesword; + public boolean legendary_notch_apple; + public boolean legendary_goldarmorbuff; // HIDDEN CONFIG public int RECIPE_DELAY; @@ -291,24 +291,24 @@ private void loadSettings() { this.welcome_guide_delay = settings.getInt("WelcomeGuide.Delay"); // SURVIVAL - this.SURVIVAL_ENABLED = settings.getBoolean("Survival.Enabled"); + this.survival_enabled = settings.getBoolean("Survival.Enabled"); this.SURVIVAL_LIMITED_CRAFTING = settings.getBoolean("Survival.LimitedCrafting"); - this.SURVIVAL_UNLOCK_ALL_RECIPES = settings.getBoolean("Survival.Unlock-all-recipes-on-join"); - this.SURVIVAL_REMOVE_WOOD_TOOLS = settings.getBoolean("Survival.Remove-Wooden-Tools"); - this.SURVIVAL_TORCH = settings.getBoolean("Survival.Torch"); + this.survival_unlock_all_recipes = settings.getBoolean("Survival.Unlock-all-recipes-on-join"); + this.survival_remove_wood_tools = settings.getBoolean("Survival.Remove-Wooden-Tools"); + this.survival_torch = settings.getBoolean("Survival.Torch"); this.SURVIVAL_UPDATE_MERCHANT_TRADES = settings.getBoolean("Survival.UpdateMerchantTrades"); - this.BREAK_ONLY_WITH_SICKLE = settings.getBoolean("Survival.BreakOnlyWith.Sickle"); + this.break_only_with_sickle = settings.getBoolean("Survival.BreakOnlyWith.Sickle"); this.BREAK_ONLY_WITH_SHOVEL = settings.getBoolean("Survival.BreakOnlyWith.Shovel"); this.BREAK_ONLY_WITH_AXE = settings.getBoolean("Survival.BreakOnlyWith.Axe"); this.BREAK_ONLY_WITH_PICKAXE = settings.getBoolean("Survival.BreakOnlyWith.Pickaxe"); this.BREAK_ONLY_WITH_SHEARS = settings.getBoolean("Survival.BreakOnlyWith.Shears"); this.PLACE_ONLY_WITH_HAMMER = settings.getBoolean("Survival.PlaceOnlyWith.Hammer"); - this.SURVIVAL_SICKLE_FLINT = settings.getBoolean("Survival.Sickles.Flint"); - this.SURVIVAL_SICKLE_STONE = settings.getBoolean("Survival.Sickles.Stone"); - this.SURVIVAL_SICKLE_IRON = settings.getBoolean("Survival.Sickles.Iron"); - this.SURVIVAL_SICKLE_DIAMOND = settings.getBoolean("Survival.Sickles.Diamond"); + this.survival_sickle_flint = settings.getBoolean("Survival.Sickles.Flint"); + this.survival_sickle_stone = settings.getBoolean("Survival.Sickles.Stone"); + this.survival_sickle_iron = settings.getBoolean("Survival.Sickles.Iron"); + this.survival_sickle_diamond = settings.getBoolean("Survival.Sickles.Diamond"); this.DROP_RATE_STICK = settings.getDouble("Survival.DropRate.Stick"); this.DROP_RATE_FLINT = settings.getDouble("Survival.DropRate.Flint"); @@ -325,25 +325,25 @@ private void loadSettings() { this.MECHANICS_ENERGY_REFRESH_RATE_BED = settings.getDouble("Mechanics.Energy.sleeping-refresh-rate"); this.MECHANICS_ENERGY_REFRESH_RATE_CHAIR = settings.getDouble("Mechanics.Energy.chair-refresh-rate"); this.MECHANICS_ENERGY_EXHAUSTION = settings.getDouble("Mechanics.Energy.exhaustion"); - this.MECHANICS_ENERGY_COFFEE_ENABLED = settings.getBoolean("Mechanics.Energy.coffee"); + this.mechanics_energy_coffee_enabled = settings.getBoolean("Mechanics.Energy.coffee"); this.MECHANICS_ENERGY_ABSORPTION = settings.getBoolean("Mechanics.Energy.absorption"); this.MECHANICS_ENERGY_HASTE = settings.getBoolean("Mechanics.Energy.haste"); - this.MECHANICS_SLOW_ARMOR = settings.getBoolean("Mechanics.SlowArmor"); - this.MECHANICS_REINFORCED_ARMOR = settings.getBoolean("Mechanics.ReinforcedLeatherArmor"); + this.mechanics_slow_armor = settings.getBoolean("Mechanics.SlowArmor"); + this.mechanics_reinforced_armor = settings.getBoolean("Mechanics.ReinforcedLeatherArmor"); this.MECHANICS_BOW = settings.getBoolean("Mechanics.Bow"); - this.MECHANICS_RECURVED_BOW = settings.getBoolean("Mechanics.RecurveBow"); - this.MECHANICS_GRAPPLING_HOOK = settings.getBoolean("Mechanics.GrapplingHook"); - this.MECHANICS_MEDIC_KIT = settings.getBoolean("Mechanics.MedicalKit"); - this.MECHANICS_REDUCED_IRON_NUGGET = settings.getBoolean("Mechanics.ReducedIronNugget"); - this.MECHANICS_REDUCED_GOLD_NUGGET = settings.getBoolean("Mechanics.ReducedGoldNugget"); + this.mechanics_recurved_bow = settings.getBoolean("Mechanics.RecurveBow"); + this.mechanics_grappling_hook = settings.getBoolean("Mechanics.GrapplingHook"); + this.mechanics_medic_kit = settings.getBoolean("Mechanics.MedicalKit"); + this.mechanics_reduced_iron_nugget = settings.getBoolean("Mechanics.ReducedIronNugget"); + this.mechanics_reduced_gold_nugget = settings.getBoolean("Mechanics.ReducedGoldNugget"); this.mechanics_status_scoreboard = settings.getBoolean("Mechanics.StatusScoreboard"); this.MECHANICS_ALERT_INTERVAL = settings.getInt("Mechanics.AlertInterval"); this.MECHANICS_RAW_MEAT_HUNGER = settings.getBoolean("Mechanics.RawMeatHunger"); - this.MECHANICS_EMPTY_POTION = settings.getBoolean("Mechanics.EmptyPotions"); - this.MECHANICS_POISON_POTATO = settings.getBoolean("Mechanics.PoisonousPotato"); + this.mechanics_empty_potion = settings.getBoolean("Mechanics.EmptyPotions"); + this.mechanics_poison_potato = settings.getBoolean("Mechanics.PoisonousPotato"); this.MECHANICS_COOKIE_BOOST = settings.getBoolean("Mechanics.CookieHealthBoost"); this.MECHANICS_BEET_STRENGTH = settings.getBoolean("Mechanics.BeetrootStrength"); @@ -404,17 +404,17 @@ private void loadSettings() { this.mechanics_hunger_start_amount = settings.getInt("Mechanics.Hunger.Starting-Amount"); this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); - this.MECHANICS_COMPASS_WAYPOINT = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); + this.mechanics_compass_waypoint = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); this.MECHANICS_COMPASS_WAYPOINT_WORLDS = settings.getBoolean("Mechanics.CompassWaypoint.per-world"); this.MECHANICS_CLOWN_FISH = settings.getBoolean("Mechanics.Clownfish"); - this.MECHANICS_FERMENTED_SKIN = settings.getBoolean("Mechanics.FermentedSkin"); + this.mechanics_fermented_skin = settings.getBoolean("Mechanics.FermentedSkin"); this.MECHANICS_LIVING_SLIME = settings.getBoolean("Mechanics.LivingSlime"); - this.MECHANICS_SNOWBALL_REVAMP = settings.getBoolean("Mechanics.SnowballRevamp"); + this.mechanics_snowball_revamp = settings.getBoolean("Mechanics.SnowballRevamp"); this.MECHANICS_SNOW_GEN_REVAMP = settings.getBoolean("Mechanics.SnowGenerationRevamp"); - this.MECHANICS_FARMING_PRODUCTS_COOKIE = settings.getBoolean("Mechanics.FarmingProducts.Cookie"); - this.MECHANICS_FARMING_PRODUCTS_BREAD = settings.getBoolean("Mechanics.FarmingProducts.Bread"); + this.mechanics_farming_products_cookie = settings.getBoolean("Mechanics.FarmingProducts.Cookie"); + this.mechanics_farming_products_bread = settings.getBoolean("Mechanics.FarmingProducts.Bread"); this.MECHANICS_CHAIRS_ENABLED = settings.getBoolean("Mechanics.Chairs.Enabled"); this.MECHANICS_CHAIRS_MAX_WIDTH = settings.getInt("Mechanics.Chairs.MaxChairWidth"); @@ -426,7 +426,7 @@ private void loadSettings() { this.MECHANICS_BURNOUT_TORCH_DROP = settings.getBoolean("Mechanics.BurnoutTorches.DropTorch"); this.MECHANICS_BURNOUT_TORCH_PERSIST = settings.getBoolean("Mechanics.BurnoutTorches.PersistentTorches"); - this.MECHANICS_WEATHER_ENABLED = settings.getBoolean("Mechanics.Weather.Enabled"); + this.mechanics_weather_enabled = settings.getBoolean("Mechanics.Weather.Enabled"); this.MECHANICS_WEATHER_SPEED_BASE = settings.getDouble("Mechanics.Weather.speed.base"); this.MECHANICS_WEATHER_SPEED_RAIN = settings.getDouble("Mechanics.Weather.speed.rain"); this.MECHANICS_WEATHER_SPEED_STORM = settings.getDouble("Mechanics.Weather.speed.storm"); @@ -440,7 +440,7 @@ private void loadSettings() { this.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); this.ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS = settings.getInt("Entity-Mechanics.zombified-piglin-chests.distance"); this.ENTITY_MECHANICS_PIGMEN_CHEST_SPEED = settings.getDouble("Entity-Mechanics.zombified-piglin-chests.speed-modifier"); - this.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED = settings.getBoolean("Entity-Mechanics.beekeeper-suit.enabled"); + this.entity_mechanics_beekeeper_suit_enabled = settings.getBoolean("Entity-Mechanics.beekeeper-suit.enabled"); this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); this.ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED = settings.getBoolean("Entity-Mechanics.chicken-breeding.enabled"); @@ -451,38 +451,38 @@ private void loadSettings() { this.ENTITY_MECHANICS_PIGLIN_ALT_DROP = settings.getBoolean("Entity-Mechanics.piglin-barter.alternate-bartering"); // RECIPES - this.RECIPES_SADDLE = settings.getBoolean("Recipes.Saddle"); - this.RECIPES_NAME_TAG = settings.getBoolean("Recipes.Nametag"); - this.RECIPES_PACKED_ICE = settings.getBoolean("Recipes.PackedIce"); - this.RECIPES_LEATHER_BARD = settings.getBoolean("Recipes.LeatherBard"); - this.RECIPES_IRON_BARD = settings.getBoolean("Recipes.IronBard"); - this.RECIPES_GOLD_BARD = settings.getBoolean("Recipes.GoldBard"); - this.RECIPES_DIAMOND_BARD = settings.getBoolean("Recipes.DiamondBard"); - this.RECIPES_CLAY_BRICK = settings.getBoolean("Recipes.ClayBrick"); - this.RECIPES_QUARTZ_BLOCK = settings.getBoolean("Recipes.QuartzBlock"); - this.RECIPES_WOOL_STRING = settings.getBoolean("Recipes.WoolString"); - this.RECIPES_WEB_STRING = settings.getBoolean("Recipes.WebString"); - this.RECIPES_ICE = settings.getBoolean("Recipes.Ice"); - this.RECIPES_CLAY = settings.getBoolean("Recipes.Clay"); - this.RECIPES_DIORITE = settings.getBoolean("Recipes.Diorite"); - this.RECIPES_GRANITE = settings.getBoolean("Recipes.Granite"); - this.RECIPES_ANDESITE = settings.getBoolean("Recipes.Andesite"); - this.RECIPES_GRAVEL = settings.getBoolean("Recipes.Gravel"); - this.RECIPES_SLIMEBALL = settings.getBoolean("Recipes.Slimeball"); - this.RECIPES_COBWEB = settings.getBoolean("Recipes.Cobweb"); - this.RECIPES_SAPLING_STICK = settings.getBoolean("Recipes.SaplingToSticks"); - this.RECIPES_FISHING_ROD = settings.getBoolean("Recipes.FishingRod"); - this.RECIPES_FURNACE = settings.getBoolean("Recipes.Furnace"); - this.RECIPES_WORKBENCH = settings.getBoolean("Recipes.Workbench"); + this.recipes_saddle = settings.getBoolean("Recipes.Saddle"); + this.recipes_name_tag = settings.getBoolean("Recipes.Nametag"); + this.recipes_packed_ice = settings.getBoolean("Recipes.PackedIce"); + this.recipes_leather_bard = settings.getBoolean("Recipes.LeatherBard"); + this.recipes_iron_bard = settings.getBoolean("Recipes.IronBard"); + this.recipes_gold_bard = settings.getBoolean("Recipes.GoldBard"); + this.recipes_diamond_bard = settings.getBoolean("Recipes.DiamondBard"); + this.recipes_clay_brick = settings.getBoolean("Recipes.ClayBrick"); + this.recipes_quartz_block = settings.getBoolean("Recipes.QuartzBlock"); + this.recipes_wool_string = settings.getBoolean("Recipes.WoolString"); + this.recipes_web_string = settings.getBoolean("Recipes.WebString"); + this.recipes_ice = settings.getBoolean("Recipes.Ice"); + this.recipes_clay = settings.getBoolean("Recipes.Clay"); + this.recipes_diorite = settings.getBoolean("Recipes.Diorite"); + this.recipes_granite = settings.getBoolean("Recipes.Granite"); + this.recipes_andesite = settings.getBoolean("Recipes.Andesite"); + this.recipes_gravel = settings.getBoolean("Recipes.Gravel"); + this.recipes_slimeball = settings.getBoolean("Recipes.Slimeball"); + this.recipes_cobweb = settings.getBoolean("Recipes.Cobweb"); + this.recipes_sapling_stick = settings.getBoolean("Recipes.SaplingToSticks"); + this.recipes_fishing_rod = settings.getBoolean("Recipes.FishingRod"); + this.recipes_furnace = settings.getBoolean("Recipes.Furnace"); + this.recipes_workbench = settings.getBoolean("Recipes.Workbench"); // LEGENDARY ITEMS - this.LEGENDARY_VALKYRIE = settings.getBoolean("LegendaryItems.ValkyrieAxe"); - this.LEGENDARY_QUARTZPICKAXE = settings.getBoolean("LegendaryItems.QuartzPickaxe"); - this.LEGENDARY_OBSIDIAN_MACE = settings.getBoolean("LegendaryItems.ObsidianMace"); - this.LEGENDARY_GIANTBLADE = settings.getBoolean("LegendaryItems.GiantBlade"); - this.LEGENDARY_BLAZESWORD = settings.getBoolean("LegendaryItems.BlazeSword"); - this.LEGENDARY_NOTCH_APPLE = settings.getBoolean("LegendaryItems.NotchApple"); - this.LEGENDARY_GOLDARMORBUFF = settings.getBoolean("LegendaryItems.GoldArmorBuff"); + this.legendary_valkyrie = settings.getBoolean("LegendaryItems.ValkyrieAxe"); + this.legendary_quartzpickaxe = settings.getBoolean("LegendaryItems.QuartzPickaxe"); + this.legendary_obsidian_mace = settings.getBoolean("LegendaryItems.ObsidianMace"); + this.legendary_giantblade = settings.getBoolean("LegendaryItems.GiantBlade"); + this.legendary_blazesword = settings.getBoolean("LegendaryItems.BlazeSword"); + this.legendary_notch_apple = settings.getBoolean("LegendaryItems.NotchApple"); + this.legendary_goldarmorbuff = settings.getBoolean("LegendaryItems.GoldArmorBuff"); // HIDDEN CONFIG this.RECIPE_DELAY = settings.getInt("recipe-delay", 0); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index c16a89f..b7b266a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -70,7 +70,7 @@ public void registerEvents() { pm.registerEvents(new RecipeDiscovery(plugin), this.plugin); Bukkit.getPluginManager().registerEvents(new PlayerDataListener(this.plugin), this.plugin); - if (config.SURVIVAL_ENABLED) { + if (config.survival_enabled) { pm.registerEvents(new BlockBreak(plugin), this.plugin); pm.registerEvents(new BlockPlace(plugin), this.plugin); pm.registerEvents(new FirestrikerListener(plugin), this.plugin); @@ -81,21 +81,21 @@ public void registerEvents() { } if (config.MECHANICS_BOW) pm.registerEvents(new Bow(plugin), this.plugin); - if (config.MECHANICS_GRAPPLING_HOOK) + if (config.mechanics_grappling_hook) pm.registerEvents(new GrapplingHook(plugin), this.plugin); - if (config.LEGENDARY_OBSIDIAN_MACE) + if (config.legendary_obsidian_mace) pm.registerEvents(new ObsidianMaceWeakness(plugin), this.plugin); - if (config.LEGENDARY_VALKYRIE) + if (config.legendary_valkyrie) pm.registerEvents(new Valkyrie(plugin), this.plugin); - if (config.LEGENDARY_GIANTBLADE) + if (config.legendary_giantblade) pm.registerEvents(new GiantBlade(plugin), this.plugin); - if (config.LEGENDARY_BLAZESWORD) + if (config.legendary_blazesword) pm.registerEvents(new BlazeSword(), this.plugin); if (LOCAL_CHAT > -1) pm.registerEvents(new LocalChat(plugin), this.plugin); - if (config.MECHANICS_COMPASS_WAYPOINT) + if (config.mechanics_compass_waypoint) pm.registerEvents(new CompassWaypoint(this.plugin), this.plugin); - if (config.MECHANICS_MEDIC_KIT) + if (config.mechanics_medic_kit) pm.registerEvents(new MedicKit(plugin), this.plugin); pm.registerEvents(new WaterBottleCrafting(plugin), this.plugin); @@ -111,7 +111,7 @@ public void registerEvents() { if (config.mechanics_thirst_purify_water) pm.registerEvents(new CauldronWaterBottle(), this.plugin); } - if (config.MECHANICS_POISON_POTATO) + if (config.mechanics_poison_potato) pm.registerEvents(new PoisonousPotato(), this.plugin); if (config.MECHANICS_SHARED_WORKBENCH) pm.registerEvents(new WorkbenchShare(plugin), this.plugin); @@ -129,9 +129,9 @@ public void registerEvents() { pm.registerEvents(new EnergyChange(plugin), this.plugin); if (config.mechanics_food_diversity_enabled) pm.registerEvents(new FoodDiversityConsume(plugin), this.plugin); - if (config.MECHANICS_RECURVED_BOW) + if (config.mechanics_recurved_bow) pm.registerEvents(new RecurvedBow(plugin), this.plugin); - if (config.MECHANICS_SNOWBALL_REVAMP) + if (config.mechanics_snowball_revamp) pm.registerEvents(new SnowballThrow(), this.plugin); if (config.MECHANICS_SNOW_GEN_REVAMP) pm.registerEvents(new SnowGeneration(plugin), this.plugin); @@ -146,7 +146,7 @@ public void registerEvents() { if (config.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED) pm.registerEvents(new ChestPigmen(this.plugin), this.plugin); - if (config.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED) { + if (config.entity_mechanics_beekeeper_suit_enabled) { Bukkit.getPluginManager().registerEvents(new BeeKeeperSuit(), this.plugin); } if (config.SURVIVAL_UPDATE_MERCHANT_TRADES) { diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java index a603a68..eb4a146 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java @@ -106,7 +106,7 @@ private void onBlockBreak(BlockBreakEvent event) { } } - if (settings.BREAK_ONLY_WITH_SICKLE) { + if (settings.break_only_with_sickle) { if (BlockTags.FARMABLE.isTagged(material)) { if (!Items.Tags.SICKLES.isTagged(tool)) { event.setCancelled(true); @@ -174,7 +174,7 @@ private void onBlockBreak(BlockBreakEvent event) { event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5,0.1,0.5), new ItemStack(Material.STICK)); } } - if (settings.RECIPES_WORKBENCH && material == Material.CRAFTING_TABLE && !event.isCancelled()) { + if (settings.recipes_workbench && material == Material.CRAFTING_TABLE && !event.isCancelled()) { event.setDropItems(false); ItemStack workbench = Items.WORKBENCH.getItemStack(); block.getWorld().dropItem(block.getLocation(), workbench); @@ -191,7 +191,7 @@ private void onBlockBreak(BlockBreakEvent event) { @EventHandler private void onHarvest(PlayerInteractEvent e) { if (e.isCancelled()) return; - if (!settings.BREAK_ONLY_WITH_SICKLE) return; + if (!settings.break_only_with_sickle) return; if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK) return; Player player = e.getPlayer(); @@ -266,7 +266,7 @@ private void onHarvest(PlayerInteractEvent e) { @EventHandler private void onWaterBreakCrops(BlockPhysicsEvent event) { - if (!settings.BREAK_ONLY_WITH_SICKLE) return; + if (!settings.break_only_with_sickle) return; if (event.getSourceBlock().getType() == Material.WATER) { Material type = event.getBlock().getType(); if (BlockTags.FARMABLE.isTagged(type)) { @@ -280,7 +280,7 @@ private void onWaterBreakCrops(BlockPhysicsEvent event) { @EventHandler(priority = EventPriority.HIGHEST) private void onTrample(PlayerInteractEvent event) { if (event.isCancelled()) return; - if (!settings.BREAK_ONLY_WITH_SICKLE) return; + if (!settings.break_only_with_sickle) return; if (event.getAction() == Action.PHYSICAL) { if (event.getClickedBlock() == null) return; if (event.getClickedBlock().getType() == Material.FARMLAND) { diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java index d3c3238..70e1555 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java @@ -25,7 +25,7 @@ public class PiglinBarter implements Listener { public PiglinBarter(SurvivalPlugin plugin) { Config config = plugin.getSurvivalConfig(); - this.SLOW_ARMOR = config.MECHANICS_SLOW_ARMOR; + this.SLOW_ARMOR = config.mechanics_slow_armor; this.THIRST_ENABLED = config.mechanics_thirst_enabled; this.DROP_WATER = config.ENTITY_MECHANICS_PIGLIN_DROP_WATER; this.ALT_DROPS = config.ENTITY_MECHANICS_PIGLIN_ALT_DROP; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java b/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java index 31edc8f..06c24cf 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java @@ -45,7 +45,7 @@ private void onAttack(EntityDamageByEntityEvent event) { // Prevent obsidian mace turning dirt/grass block into farmland @EventHandler private void onInteractBlock(PlayerInteractEvent event) { - if (!this.config.LEGENDARY_OBSIDIAN_MACE) return; + if (!this.config.legendary_obsidian_mace) return; if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { ItemStack tool = event.getItem(); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java index 2e9a9e5..8688f26 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java @@ -80,7 +80,7 @@ private void onInteractBlock(PlayerInteractEvent event) { ItemStack tool = event.getItem(); if (event.getClickedBlock() == null || tool == null) return; - if (config.SURVIVAL_ENABLED && Items.SHIV.is(tool)) { + if (config.survival_enabled && Items.SHIV.is(tool)) { switch (event.getClickedBlock().getType()) { case DIRT: case GRASS_BLOCK: diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java index a912ae4..1cde0b7 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java @@ -24,7 +24,7 @@ public class WaterBowl implements Listener { public WaterBowl(SurvivalPlugin plugin) { this.plugin = plugin; this.thirstEnabled = plugin.getSurvivalConfig().mechanics_thirst_enabled; - this.clayEnabled = plugin.getSurvivalConfig().RECIPES_CLAY; + this.clayEnabled = plugin.getSurvivalConfig().recipes_clay; } @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java index 32e9081..13c2521 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java @@ -47,7 +47,7 @@ private void onJoin(PlayerJoinEvent event) { scoreboardManager.setupScoreboard(player); // Appears you can only set a compass target after a delay - if (config.MECHANICS_COMPASS_WAYPOINT) { + if (config.mechanics_compass_waypoint) { this.scheduler.runTaskLater(this.plugin, () -> { Location waypoint = playerData.getCompassWaypoint(player.getWorld()); player.setCompassTarget(Objects.requireNonNullElseGet(waypoint, () -> player.getWorld().getSpawnLocation())); diff --git a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java index ea556df..830c331 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java @@ -31,7 +31,7 @@ private void onChat(AsyncPlayerChatEvent event) { PlayerData playerData = playerManager.getPlayerData(player); String msg = event.getMessage(); - if (config.LEGENDARY_GOLDARMORBUFF) { + if (config.legendary_goldarmorbuff) { if (player.getInventory().getHelmet() != null) { if (player.getInventory().getHelmet().getType() == Material.GOLDEN_HELMET) { event.setCancelled(false); diff --git a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java index 93ee46a..0a4e5d2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java @@ -20,11 +20,11 @@ public class RecipeDiscovery implements Listener { private final SurvivalPlugin plugin; - private final boolean UNLOCK_ALL; + private final boolean unlockAllRecipes; public RecipeDiscovery(SurvivalPlugin plugin) { this.plugin = plugin; - this.UNLOCK_ALL = plugin.getSurvivalConfig().SURVIVAL_UNLOCK_ALL_RECIPES; + this.unlockAllRecipes = plugin.getSurvivalConfig().survival_unlock_all_recipes; } // When a player first joins, give them a few recipes after 10 seconds @@ -32,7 +32,7 @@ public RecipeDiscovery(SurvivalPlugin plugin) { private void onFirstJoin(PlayerJoinEvent e) { Player player = e.getPlayer(); Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (this.UNLOCK_ALL) { + if (this.unlockAllRecipes) { this.plugin.getRecipeManager().unlockAllRecipes(player); } else { player.discoverRecipes(Recipes.HATCHET.getKeys()); @@ -46,15 +46,14 @@ private void onFirstJoin(PlayerJoinEvent e) { player.discoverRecipes(Recipes.WATER_BOTTLES.getKeys()); } player.discoverRecipe(NamespacedKey.minecraft("bowl")); - }, 200); + }, 100); } // When a player picks up items, unlock different item based recipes @EventHandler private void onPickupItems(EntityPickupItemEvent e) { - if (this.UNLOCK_ALL) return; - if (!(e.getEntity() instanceof Player)) return; - Player player = ((Player) e.getEntity()); + if (this.unlockAllRecipes) return; + if (!(e.getEntity() instanceof Player player)) return; Material item = e.getItem().getItemStack().getType(); if (item == Material.DIAMOND) { player.discoverRecipes(Recipes.DIAMOND_BOOTS.getKeys()); @@ -114,7 +113,7 @@ private void onPickupItems(EntityPickupItemEvent e) { // When a player smelts items, unlock different item based recipes @EventHandler private void onFurnaceExtract(FurnaceExtractEvent event) { - if (this.UNLOCK_ALL) return; + if (this.unlockAllRecipes) return; Player player = event.getPlayer(); if (event.getItemType() == Material.IRON_INGOT) { player.discoverRecipes(Recipes.IRON_BOOTS.getKeys()); @@ -140,7 +139,7 @@ private void onFurnaceExtract(FurnaceExtractEvent event) { // When a player breaks a block, unlock different item based recipes @EventHandler private void onPlayerBreakBlock(BlockBreakEvent e) { - if (this.UNLOCK_ALL) return; + if (this.unlockAllRecipes) return; Player player = e.getPlayer(); Material item = e.getBlock().getType(); if (e.isCancelled()) return; @@ -162,9 +161,9 @@ private void onPlayerBreakBlock(BlockBreakEvent e) { // When a player crafts an item, unlock different item based recipes @EventHandler private void onCraft(CraftItemEvent e) { - if (this.UNLOCK_ALL) return; - if (!(e.getWhoClicked() instanceof Player)) return; - Player player = ((Player) e.getWhoClicked()); + if (this.unlockAllRecipes) return; + if (!(e.getWhoClicked() instanceof Player player)) return; + ItemStack result = e.getRecipe().getResult(); if (Items.FIRESTRIKER.is(result)) { player.discoverRecipes(Recipes.TORCH.getKeys()); diff --git a/src/main/java/tk/shanebee/survival/managers/EffectManager.java b/src/main/java/tk/shanebee/survival/managers/EffectManager.java index 78ae973..508e072 100644 --- a/src/main/java/tk/shanebee/survival/managers/EffectManager.java +++ b/src/main/java/tk/shanebee/survival/managers/EffectManager.java @@ -31,17 +31,17 @@ public EffectManager(SurvivalPlugin plugin) { } private void loadEffects() { - if (config.LEGENDARY_BLAZESWORD) { + if (config.legendary_blazesword) { this.blazeSwordEffects = new BlazeSwordEffects(plugin); this.blazeSwordSound = new BlazeSwordSound(plugin); } - if (config.LEGENDARY_GIANTBLADE) + if (config.legendary_giantblade) this.giantBlade = new GiantBlade(plugin); - if (config.LEGENDARY_OBSIDIAN_MACE) + if (config.legendary_obsidian_mace) this.obsidianMace = new ObsidianMace(plugin); - if (config.LEGENDARY_VALKYRIE) + if (config.legendary_valkyrie) this.valkyrie = new Valkyrie(plugin); - if (config.LEGENDARY_QUARTZPICKAXE) + if (config.legendary_quartzpickaxe) this.quartzPickaxe = new QuartzPickaxe(plugin); } diff --git a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java index 0a5a1ed..d9cbace 100644 --- a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java +++ b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java @@ -51,7 +51,7 @@ private boolean canUpdate(Material material) { case CHAINMAIL_CHESTPLATE: case CHAINMAIL_LEGGINGS: case CHAINMAIL_BOOTS: - return this.config.MECHANICS_REINFORCED_ARMOR; + return this.config.mechanics_reinforced_armor; case IRON_HELMET: case IRON_CHESTPLATE: case IRON_LEGGINGS: @@ -60,11 +60,11 @@ private boolean canUpdate(Material material) { case DIAMOND_CHESTPLATE: case DIAMOND_LEGGINGS: case DIAMOND_BOOTS: - return this.config.MECHANICS_SLOW_ARMOR; + return this.config.mechanics_slow_armor; case STONE_HOE: - return this.config.SURVIVAL_SICKLE_STONE; + return this.config.survival_sickle_stone; case DIAMOND_HOE: - return this.config.SURVIVAL_SICKLE_DIAMOND; + return this.config.survival_sickle_diamond; } return false; } diff --git a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java index d746c4b..f73aaba 100644 --- a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java +++ b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java @@ -3,7 +3,6 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; -import org.bukkit.Server; import org.bukkit.Tag; import org.bukkit.entity.Player; import org.bukkit.inventory.BlastingRecipe; @@ -27,10 +26,8 @@ public class RecipeManager { private final Config config; - private final SurvivalPlugin plugin; public RecipeManager(SurvivalPlugin plugin) { - this.plugin = plugin; this.config = plugin.getSurvivalConfig(); } @@ -39,17 +36,17 @@ public RecipeManager(SurvivalPlugin plugin) { */ public void loadCustomRecipes() { removeRecipes(); - Server server = plugin.getServer(); - // NOTCH APPLE RECIPE - ShapedRecipe notchApple = new ShapedRecipe(new NamespacedKey(plugin, "enchanted_golden_apple"), new ItemStack(Material.ENCHANTED_GOLDEN_APPLE, 1)); + + // ENCHANTED GOLDEN APPLE RECIPE + ShapedRecipe notchApple = new ShapedRecipe(Utils.getNamespacedKey("enchanted_golden_apple"), new ItemStack(Material.ENCHANTED_GOLDEN_APPLE, 1)); notchApple.shape("@@@", "@*@", "@@@"); notchApple.setIngredient('@', Material.GOLD_BLOCK); - notchApple.setIngredient('*', Material.APPLE); + notchApple.setIngredient('*', Material.GOLDEN_APPLE); // SADDLE RECIPE - ShapedRecipe saddle = new ShapedRecipe(new NamespacedKey(plugin, "saddle"), new ItemStack(Material.SADDLE, 1)); + ShapedRecipe saddle = new ShapedRecipe(Utils.getNamespacedKey("saddle"), new ItemStack(Material.SADDLE, 1)); saddle.shape("@@@", "*-*", "= ="); @@ -60,7 +57,7 @@ public void loadCustomRecipes() { // NAMETAG RECIPE - ShapedRecipe nametag = new ShapedRecipe(new NamespacedKey(plugin, "nametag"), new ItemStack(Material.NAME_TAG, 1)); + ShapedRecipe nametag = new ShapedRecipe(Utils.getNamespacedKey("nametag"), new ItemStack(Material.NAME_TAG, 1)); nametag.shape(" -@", " *-", "* "); @@ -70,15 +67,15 @@ public void loadCustomRecipes() { // PACKED ICE RECIPE - ShapedRecipe packedIce1 = new ShapedRecipe(new NamespacedKey(plugin, "packed_ice"), new ItemStack(Material.PACKED_ICE, 1)); + ShapedRecipe packedIce1 = new ShapedRecipe(Utils.getNamespacedKey("packed_ice"), new ItemStack(Material.PACKED_ICE, 1)); packedIce1.shape("@@ ", "@@ "); packedIce1.setIngredient('@', Material.ICE); // ICE RECIPE - ShapedRecipe ice = new ShapedRecipe(new NamespacedKey(plugin, "ice1"), new ItemStack(Material.ICE, 1)); - ShapelessRecipe ice2 = new ShapelessRecipe(new NamespacedKey(plugin, "ice2"), new ItemStack(Material.ICE, 4)); + ShapedRecipe ice = new ShapedRecipe(Utils.getNamespacedKey("ice1"), new ItemStack(Material.ICE, 1)); + ShapelessRecipe ice2 = new ShapelessRecipe(Utils.getNamespacedKey("ice2"), new ItemStack(Material.ICE, 4)); ice.shape("@@@", "@*@", "@@@"); @@ -89,7 +86,7 @@ public void loadCustomRecipes() { // IRON HORSE ARMOR RECIPE - ShapedRecipe iron_horse_armor = new ShapedRecipe(new NamespacedKey(plugin, "iron_horse_armor"), new ItemStack(Material.IRON_HORSE_ARMOR, 1)); + ShapedRecipe iron_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("iron_horse_armor"), new ItemStack(Material.IRON_HORSE_ARMOR, 1)); iron_horse_armor.shape(" @", "#-#", "= ="); @@ -100,7 +97,7 @@ public void loadCustomRecipes() { // GOLD HORSE ARMOR RECIPE - ShapedRecipe goldHorse1 = new ShapedRecipe(new NamespacedKey(plugin, "gold_horse_armor"), new ItemStack(Material.GOLDEN_HORSE_ARMOR, 1)); + ShapedRecipe goldHorse1 = new ShapedRecipe(Utils.getNamespacedKey("gold_horse_armor"), new ItemStack(Material.GOLDEN_HORSE_ARMOR, 1)); goldHorse1.shape(" @", "#-#", "= ="); @@ -111,7 +108,7 @@ public void loadCustomRecipes() { // DIAMOND HORSE ARMOR RECIPE - ShapedRecipe diamond_horse_armor = new ShapedRecipe(new NamespacedKey(plugin, "diamond_horse_armor"), new ItemStack(Material.DIAMOND_HORSE_ARMOR, 1)); + ShapedRecipe diamond_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("diamond_horse_armor"), new ItemStack(Material.DIAMOND_HORSE_ARMOR, 1)); diamond_horse_armor.shape(" H", "@-@", "B B"); @@ -122,7 +119,7 @@ public void loadCustomRecipes() { // LEATHER HORSE ARMOR RECIPE - ShapedRecipe leather_horse_armor = new ShapedRecipe(new NamespacedKey(plugin, "leather_horse_armor"), new ItemStack(Material.LEATHER_HORSE_ARMOR, 1)); + ShapedRecipe leather_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("leather_horse_armor"), new ItemStack(Material.LEATHER_HORSE_ARMOR, 1)); leather_horse_armor.shape(" C", "ABA", "A A"); @@ -132,26 +129,26 @@ public void loadCustomRecipes() { // CLAY BRICK RECIPE - ShapelessRecipe clayBrick = new ShapelessRecipe(new NamespacedKey(plugin, "clay_brick"), new ItemStack(Material.BRICK, 4)); + ShapelessRecipe clayBrick = new ShapelessRecipe(Utils.getNamespacedKey("clay_brick"), new ItemStack(Material.BRICK, 4)); clayBrick.addIngredient(Material.BRICKS); // QUARTZ BLOCK RECIPE - ShapelessRecipe quartz = new ShapelessRecipe(new NamespacedKey(plugin, "quartz"), new ItemStack(Material.QUARTZ, 4)); + ShapelessRecipe quartz = new ShapelessRecipe(Utils.getNamespacedKey("quartz"), new ItemStack(Material.QUARTZ, 4)); quartz.addIngredient(Material.QUARTZ_BLOCK); // STRING RECIPE - ShapelessRecipe woolString = new ShapelessRecipe(new NamespacedKey(plugin, "string1"), new ItemStack(Material.STRING, 4)); - ShapelessRecipe string = new ShapelessRecipe(new NamespacedKey(plugin, "string2"), new ItemStack(Material.STRING, 2)); + ShapelessRecipe woolString = new ShapelessRecipe(Utils.getNamespacedKey("string1"), new ItemStack(Material.STRING, 4)); + ShapelessRecipe string = new ShapelessRecipe(Utils.getNamespacedKey("string2"), new ItemStack(Material.STRING, 2)); woolString.addIngredient(new RecipeChoice.MaterialChoice(Tag.WOOL)); string.addIngredient(Material.COBWEB); // FURNACE RECIPE - ShapedRecipe furnace = new ShapedRecipe(new NamespacedKey(plugin, "furnace"), new ItemStack(Material.FURNACE, 1)); + ShapedRecipe furnace = new ShapedRecipe(NamespacedKey.minecraft("furnace"), new ItemStack(Material.FURNACE, 1)); furnace.shape("@@@", "@*@", "@@@"); @@ -160,7 +157,7 @@ public void loadCustomRecipes() { // CHEST RECIPE - ShapedRecipe chest = new ShapedRecipe(new NamespacedKey(plugin, "chest"), new ItemStack(Material.CHEST, 1)); + ShapedRecipe chest = new ShapedRecipe(Utils.getNamespacedKey("chest"), new ItemStack(Material.CHEST, 1)); chest.shape("@@@", "@#@", "@@@"); @@ -169,7 +166,7 @@ public void loadCustomRecipes() { // CLAY RECIPE - ShapedRecipe clay = new ShapedRecipe(new NamespacedKey(plugin, "clay"), new ItemStack(Material.CLAY, 1)); + ShapedRecipe clay = new ShapedRecipe(Utils.getNamespacedKey("clay"), new ItemStack(Material.CLAY, 1)); clay.shape(" ", "123", " "); clay.setIngredient('1', Material.DIRT); @@ -178,28 +175,28 @@ public void loadCustomRecipes() { // DIORITE RECIPE - ShapelessRecipe diorite = new ShapelessRecipe(new NamespacedKey(plugin, "diorite"), new ItemStack(Material.DIORITE, 1)); + ShapelessRecipe diorite = new ShapelessRecipe(Utils.getNamespacedKey("diorite"), new ItemStack(Material.DIORITE, 1)); diorite.addIngredient(new RecipeChoice.MaterialChoice(Material.BONE_MEAL, Material.WHITE_DYE)); diorite.addIngredient(Material.COBBLESTONE); // GRANITE RECIPE - ShapelessRecipe granite = new ShapelessRecipe(new NamespacedKey(plugin, "granite"), new ItemStack(Material.GRANITE, 1)); + ShapelessRecipe granite = new ShapelessRecipe(Utils.getNamespacedKey("granite"), new ItemStack(Material.GRANITE, 1)); granite.addIngredient(Material.NETHERRACK); granite.addIngredient(Material.COBBLESTONE); // ANDESITE RECIPE - ShapelessRecipe andesite = new ShapelessRecipe(new NamespacedKey(plugin, "andesite"), new ItemStack(Material.ANDESITE, 1)); + ShapelessRecipe andesite = new ShapelessRecipe(Utils.getNamespacedKey("andesite"), new ItemStack(Material.ANDESITE, 1)); andesite.addIngredient(Material.GRAVEL); andesite.addIngredient(Material.COBBLESTONE); // GRAVEL RECIPE - ShapedRecipe gravel = new ShapedRecipe(new NamespacedKey(plugin, "gravel"), new ItemStack(Material.GRAVEL, 2)); + ShapedRecipe gravel = new ShapedRecipe(NamespacedKey.minecraft("gravel"), new ItemStack(Material.GRAVEL, 2)); gravel.shape("@B", "B@"); @@ -207,8 +204,8 @@ public void loadCustomRecipes() { gravel.setIngredient('B', Material.COBBLESTONE); // TORCH RECIPE - ShapedRecipe torch1 = new ShapedRecipe(new NamespacedKey(plugin, "torch1"), new ItemStack(Material.TORCH, 8)); - ShapedRecipe torch2 = new ShapedRecipe(new NamespacedKey(plugin, "torch2"), new ItemStack(Material.TORCH, 16)); + ShapedRecipe torch1 = new ShapedRecipe(Utils.getNamespacedKey("torch1"), new ItemStack(Material.TORCH, 8)); + ShapedRecipe torch2 = new ShapedRecipe(Utils.getNamespacedKey("torch2"), new ItemStack(Material.TORCH, 16)); torch1.shape("AAA", "ABA", "AAA"); torch1.setIngredient('B', Items.FIRESTRIKER.getItemStack()); @@ -223,13 +220,13 @@ public void loadCustomRecipes() { // FLINT RECIPE - ShapelessRecipe flint = new ShapelessRecipe(new NamespacedKey(plugin, "flint"), new ItemStack(Material.FLINT, 1)); + ShapelessRecipe flint = new ShapelessRecipe(NamespacedKey.minecraft("flint"), new ItemStack(Material.FLINT, 1)); flint.addIngredient(Material.GRAVEL); // FERMENTED SPIDER EYE RECIPE - ShapelessRecipe fermented_spider_eye = new ShapelessRecipe(new NamespacedKey(plugin, "fermented_spider_eye"), + ShapelessRecipe fermented_spider_eye = new ShapelessRecipe(Utils.getNamespacedKey("fermented_spider_eye"), new ItemStack(Material.FERMENTED_SPIDER_EYE, 1)); fermented_spider_eye.addIngredient(Material.SPIDER_EYE); @@ -238,7 +235,7 @@ public void loadCustomRecipes() { // POISONOUS POTATO RECIPE - ShapelessRecipe poisonousPotato = new ShapelessRecipe(new NamespacedKey(plugin, "poisonous_potato"), + ShapelessRecipe poisonousPotato = new ShapelessRecipe(Utils.getNamespacedKey("poisonous_potato"), new ItemStack(Material.POISONOUS_POTATO, 1)); poisonousPotato.addIngredient(Material.POTATO); @@ -246,13 +243,13 @@ public void loadCustomRecipes() { // GLASS BOTTLE RECIPE - ShapelessRecipe glassBottle = new ShapelessRecipe(new NamespacedKey(plugin, "glass_bottle"), new ItemStack(Material.GLASS_BOTTLE, 1)); + ShapelessRecipe glassBottle = new ShapelessRecipe(Utils.getNamespacedKey("glass_bottle"), new ItemStack(Material.GLASS_BOTTLE, 1)); glassBottle.addIngredient(Material.POTION); // BOWL RECIPE - ShapedRecipe bowl = new ShapedRecipe(new NamespacedKey(plugin, "bowl"), new ItemStack(Material.BOWL, 1)); + ShapedRecipe bowl = new ShapedRecipe(Utils.getNamespacedKey("bowl"), new ItemStack(Material.BOWL, 1)); bowl.shape(" ", " 1"); bowl.setIngredient('1', Items.WATER_BOWL.getItemStack()); @@ -269,7 +266,7 @@ public void loadCustomRecipes() { // FISHING ROD RECIPE - ShapedRecipe fishing_rod = new ShapedRecipe(new NamespacedKey(plugin, "fishing_rod"), new ItemStack(Material.FISHING_ROD, 1)); + ShapedRecipe fishing_rod = new ShapedRecipe(Utils.getNamespacedKey("fishing_rod"), new ItemStack(Material.FISHING_ROD, 1)); fishing_rod.shape("1- ", "1 -", "1@*"); @@ -280,36 +277,36 @@ public void loadCustomRecipes() { // IRON INGOT RECIPE - ShapedRecipe ironIngot = new ShapedRecipe(new NamespacedKey(plugin, "iron_ingot"), new ItemStack(Material.IRON_INGOT, 1)); + ShapedRecipe ironIngot = new ShapedRecipe(Utils.getNamespacedKey("iron_ingot"), new ItemStack(Material.IRON_INGOT, 1)); ironIngot.shape("@@", "@@"); ironIngot.setIngredient('@', Material.IRON_NUGGET); // IRON NUGGET RECIPE - ShapelessRecipe ironNugget = new ShapelessRecipe(new NamespacedKey(plugin, "iron_nugget"), new ItemStack(Material.IRON_NUGGET, 4)); + ShapelessRecipe ironNugget = new ShapelessRecipe(Utils.getNamespacedKey("iron_nugget"), new ItemStack(Material.IRON_NUGGET, 4)); ironNugget.addIngredient(Material.IRON_INGOT); // GOLD INGOT RECIPE - ShapedRecipe goldIngot = new ShapedRecipe(new NamespacedKey(plugin, "gold_ingot"), new ItemStack(Material.GOLD_INGOT, 1)); + ShapedRecipe goldIngot = new ShapedRecipe(Utils.getNamespacedKey("gold_ingot"), new ItemStack(Material.GOLD_INGOT, 1)); goldIngot.shape("@@", "@@"); goldIngot.setIngredient('@', Material.GOLD_NUGGET); // GOLD NUGGET RECIPE - ShapelessRecipe goldNugget = new ShapelessRecipe(new NamespacedKey(plugin, "gold_nugget"), new ItemStack(Material.GOLD_NUGGET, 4)); + ShapelessRecipe goldNugget = new ShapelessRecipe(Utils.getNamespacedKey("gold_nugget"), new ItemStack(Material.GOLD_NUGGET, 4)); goldNugget.addIngredient(Material.GOLD_INGOT); // SMELTING RECIPES - FurnaceRecipe smelt_ironIngot = new FurnaceRecipe(new NamespacedKey(plugin, "furnace_iron_ingot"), + FurnaceRecipe smelt_ironIngot = new FurnaceRecipe(Utils.getNamespacedKey("furnace_iron_ingot"), new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 400); - FurnaceRecipe smelt_goldIngot = new FurnaceRecipe(new NamespacedKey(plugin, "furnace_gold_ingot"), + FurnaceRecipe smelt_goldIngot = new FurnaceRecipe(Utils.getNamespacedKey("furnace_gold_ingot"), new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 400); - BlastingRecipe blast_ironIngot = new BlastingRecipe(new NamespacedKey(plugin, "blast_iron_ingot"), + BlastingRecipe blast_ironIngot = new BlastingRecipe(Utils.getNamespacedKey("blast_iron_ingot"), new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 100); - BlastingRecipe blast_goldIngot = new BlastingRecipe(new NamespacedKey(plugin, "blast_gold_ingot"), + BlastingRecipe blast_goldIngot = new BlastingRecipe(Utils.getNamespacedKey("blast_gold_ingot"), new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 100); // BREAD RECIPE - ShapedRecipe bread = new ShapedRecipe(new NamespacedKey(plugin, "bread"), new ItemStack(Material.BREAD, 2)); + ShapedRecipe bread = new ShapedRecipe(Utils.getNamespacedKey("bread"), new ItemStack(Material.BREAD, 2)); bread.shape(" E ", "WWW"); @@ -318,7 +315,7 @@ public void loadCustomRecipes() { // COOKIE RECIPE - ShapedRecipe cookie = new ShapedRecipe(new NamespacedKey(plugin, "cookie"), new ItemStack(Material.COOKIE, 8)); + ShapedRecipe cookie = new ShapedRecipe(Utils.getNamespacedKey("cookie"), new ItemStack(Material.COOKIE, 8)); cookie.shape(" E ", "WCW", " S "); @@ -329,157 +326,155 @@ public void loadCustomRecipes() { // SLIME BALL RECIPE - ShapelessRecipe slimeball = new ShapelessRecipe(new NamespacedKey(plugin, "slimeball"), new ItemStack(Material.SLIME_BALL, 1)); + ShapelessRecipe slimeball = new ShapelessRecipe(Utils.getNamespacedKey("slimeball"), new ItemStack(Material.SLIME_BALL, 1)); slimeball.addIngredient(Material.MILK_BUCKET); slimeball.addIngredient(8, Material.VINE); // COBWEB RECIPE - ShapelessRecipe cobweb = new ShapelessRecipe(new NamespacedKey(plugin, "cobweb"), new ItemStack(Material.COBWEB, 1)); + ShapelessRecipe cobweb = new ShapelessRecipe(Utils.getNamespacedKey("cobweb"), new ItemStack(Material.COBWEB, 1)); cobweb.addIngredient(Material.SLIME_BALL); cobweb.addIngredient(2, Material.STRING); // SAPLING RECIPE - ShapelessRecipe stick = new ShapelessRecipe(new NamespacedKey(plugin, "stick"), new ItemStack(Material.STICK, 4)); + ShapelessRecipe stick = new ShapelessRecipe(Utils.getNamespacedKey("stick"), new ItemStack(Material.STICK, 4)); stick.addIngredient(new RecipeChoice.MaterialChoice(Tag.SAPLINGS)); // BEEKEEPER RECIPES - - if (config.ENTITY_MECHANICS_BEEKEEPER_SUIT_ENABLED) { + if (this.config.entity_mechanics_beekeeper_suit_enabled) { Items.BEEKEEPER_HELMET.registerRecipe(); Items.BEEKEEPER_CHESTPLATE.registerRecipe(); Items.BEEKEEPER_LEGGINGS.registerRecipe(); Items.BEEKEEPER_BOOTS.registerRecipe(); } - if (config.MECHANICS_WEATHER_ENABLED) { + if (this.config.mechanics_weather_enabled) { Items.SNOW_BOOTS.registerRecipe(); Items.RAIN_BOOTS.registerRecipe(); } - //Add recipes - if (config.SURVIVAL_ENABLED) { + if (this.config.survival_enabled) { Items.HATCHET.registerRecipe(); Items.MATTOCK.registerRecipe(); Items.SHIV.registerRecipe(); Items.HAMMER.registerRecipe(); Items.FIRESTRIKER.registerRecipe(); - plugin.getServer().addRecipe(chest); - plugin.getServer().addRecipe(flint); + Bukkit.addRecipe(chest); + Bukkit.addRecipe(flint); Items.CAMPFIRE.registerRecipe(); - if (config.BREAK_ONLY_WITH_SICKLE) { - if (config.SURVIVAL_SICKLE_FLINT) + if (this.config.break_only_with_sickle) { + if (this.config.survival_sickle_flint) Items.FLINT_SICKLE.registerRecipe(); - if (config.SURVIVAL_SICKLE_STONE) + if (this.config.survival_sickle_stone) Items.STONE_SICKLE.registerRecipe(); - if (config.SURVIVAL_SICKLE_IRON) + if (this.config.survival_sickle_iron) Items.IRON_SICKLE.registerRecipe(); - if (config.SURVIVAL_SICKLE_DIAMOND) + if (this.config.survival_sickle_diamond) Items.DIAMOND_SICKLE.registerRecipe(); } - if (config.RECIPES_WORKBENCH) { + if (this.config.recipes_workbench) { Items.WORKBENCH.registerRecipe(); } - if (config.RECIPES_FURNACE) { - plugin.getServer().addRecipe(furnace); + if (this.config.recipes_furnace) { + Bukkit.addRecipe(furnace); } } - if (config.SURVIVAL_TORCH) { - plugin.getServer().addRecipe(torch1); - plugin.getServer().addRecipe(torch2); + if (this.config.survival_torch) { + Bukkit.addRecipe(torch1); + Bukkit.addRecipe(torch2); } - if (config.RECIPES_WEB_STRING) - plugin.getServer().addRecipe(string); - if (config.RECIPES_SAPLING_STICK) { - plugin.getServer().addRecipe(stick); + if (this.config.recipes_web_string) + Bukkit.addRecipe(string); + if (this.config.recipes_sapling_stick) { + Bukkit.addRecipe(stick); } - if (config.LEGENDARY_VALKYRIE) { + if (this.config.legendary_valkyrie) { Items.VALKYRIES_AXE.registerRecipe(); } - if (config.LEGENDARY_QUARTZPICKAXE) { + if (this.config.legendary_quartzpickaxe) { Items.QUARTZ_PICKAXE.registerRecipe(); } - if (config.LEGENDARY_OBSIDIAN_MACE) { + if (this.config.legendary_obsidian_mace) { Items.OBSIDIAN_MACE.registerRecipe(); } - if (config.LEGENDARY_GIANTBLADE) { + if (this.config.legendary_giantblade) { Items.ENDER_GIANT_BLADE.registerRecipe(); } - if (config.LEGENDARY_BLAZESWORD) { + if (this.config.legendary_blazesword) { Items.BLAZE_SWORD.registerRecipe(); } - if (config.LEGENDARY_NOTCH_APPLE) - plugin.getServer().addRecipe(notchApple); - if (config.RECIPES_SADDLE) - plugin.getServer().addRecipe(saddle); - if (config.RECIPES_NAME_TAG) { - plugin.getServer().addRecipe(nametag); - } - if (config.RECIPES_PACKED_ICE) { - plugin.getServer().addRecipe(packedIce1); - plugin.getServer().addRecipe(ice2); - } - if (config.RECIPES_IRON_BARD) { - plugin.getServer().addRecipe(iron_horse_armor); - } - if (config.RECIPES_GOLD_BARD) { - plugin.getServer().addRecipe(goldHorse1); - } - if (config.RECIPES_DIAMOND_BARD) { - plugin.getServer().addRecipe(diamond_horse_armor); - } - if (config.RECIPES_LEATHER_BARD) { - plugin.getServer().addRecipe(leather_horse_armor); - } - if (config.RECIPES_CLAY_BRICK) - plugin.getServer().addRecipe(clayBrick); - if (config.RECIPES_QUARTZ_BLOCK) - plugin.getServer().addRecipe(quartz); - if (config.RECIPES_WOOL_STRING) - plugin.getServer().addRecipe(woolString); - if (config.RECIPES_ICE) - plugin.getServer().addRecipe(ice); - if (config.RECIPES_CLAY) - plugin.getServer().addRecipe(clay); - if (config.RECIPES_DIORITE) - plugin.getServer().addRecipe(diorite); - if (config.RECIPES_GRANITE) - plugin.getServer().addRecipe(granite); - if (config.RECIPES_ANDESITE) - plugin.getServer().addRecipe(andesite); - if (config.RECIPES_GRAVEL) { - plugin.getServer().addRecipe(gravel); - } - if (config.MECHANICS_FERMENTED_SKIN) { + if (this.config.legendary_notch_apple) + Bukkit.addRecipe(notchApple); + if (this.config.recipes_saddle) + Bukkit.addRecipe(saddle); + if (this.config.recipes_name_tag) { + Bukkit.addRecipe(nametag); + } + if (this.config.recipes_packed_ice) { + Bukkit.addRecipe(packedIce1); + Bukkit.addRecipe(ice2); + } + if (this.config.recipes_iron_bard) { + Bukkit.addRecipe(iron_horse_armor); + } + if (this.config.recipes_gold_bard) { + Bukkit.addRecipe(goldHorse1); + } + if (this.config.recipes_diamond_bard) { + Bukkit.addRecipe(diamond_horse_armor); + } + if (this.config.recipes_leather_bard) { + Bukkit.addRecipe(leather_horse_armor); + } + if (this.config.recipes_clay_brick) + Bukkit.addRecipe(clayBrick); + if (this.config.recipes_quartz_block) + Bukkit.addRecipe(quartz); + if (this.config.recipes_wool_string) + Bukkit.addRecipe(woolString); + if (this.config.recipes_ice) + Bukkit.addRecipe(ice); + if (this.config.recipes_clay) + Bukkit.addRecipe(clay); + if (this.config.recipes_diorite) + Bukkit.addRecipe(diorite); + if (this.config.recipes_granite) + Bukkit.addRecipe(granite); + if (this.config.recipes_andesite) + Bukkit.addRecipe(andesite); + if (this.config.recipes_gravel) { + Bukkit.addRecipe(gravel); + } + if (this.config.mechanics_fermented_skin) { Items.FERMENTED_SKIN.registerRecipe(); } - if (config.MECHANICS_POISON_POTATO) - plugin.getServer().addRecipe(poisonousPotato); - if (config.MECHANICS_EMPTY_POTION) { - plugin.getServer().addRecipe(glassBottle); - plugin.getServer().addRecipe(bowl); + if (this.config.mechanics_poison_potato) + Bukkit.addRecipe(poisonousPotato); + if (this.config.mechanics_empty_potion) { + Bukkit.addRecipe(glassBottle); + Bukkit.addRecipe(bowl); } - if (config.MECHANICS_REINFORCED_ARMOR) { + if (this.config.mechanics_reinforced_armor) { Items.REINFORCED_LEATHER_HELMET.registerRecipe(); Items.REINFORCED_LEATHER_TUNIC.registerRecipe(); Items.REINFORCED_LEATHER_TROUSERS.registerRecipe(); Items.REINFORCED_LEATHER_BOOTS.registerRecipe(); } - if (config.LEGENDARY_GOLDARMORBUFF) { + if (this.config.legendary_goldarmorbuff) { Items.GOLDEN_CROWN.registerRecipe(); Items.GOLDEN_GUARD.registerRecipe(); Items.GOLDEN_GREAVES.registerRecipe(); Items.GOLDEN_SABATONS.registerRecipe(); } - if (config.MECHANICS_SLOW_ARMOR) { + if (this.config.mechanics_slow_armor) { Items.IRON_BOOTS.registerRecipe(); Items.IRON_CHESTPLATE.registerRecipe(); Items.IRON_LEGGINGS.registerRecipe(); @@ -494,54 +489,54 @@ public void loadCustomRecipes() { Items.NETHERITE_HELMET.registerRecipe(); } - if (config.MECHANICS_MEDIC_KIT) { + if (this.config.mechanics_medic_kit) { Items.MEDIC_KIT.registerRecipe(); } - if (config.RECIPES_FISHING_ROD) { - plugin.getServer().addRecipe(fishing_rod); + if (this.config.recipes_fishing_rod) { + Bukkit.addRecipe(fishing_rod); } - if (config.MECHANICS_REDUCED_IRON_NUGGET) { - plugin.getServer().addRecipe(ironNugget); - plugin.getServer().addRecipe(ironIngot); - plugin.getServer().addRecipe(smelt_ironIngot); - plugin.getServer().addRecipe(blast_ironIngot); + if (this.config.mechanics_reduced_iron_nugget) { + Bukkit.addRecipe(ironNugget); + Bukkit.addRecipe(ironIngot); + Bukkit.addRecipe(smelt_ironIngot); + Bukkit.addRecipe(blast_ironIngot); } - if (config.MECHANICS_REDUCED_GOLD_NUGGET) { - plugin.getServer().addRecipe(goldNugget); - plugin.getServer().addRecipe(goldIngot); - plugin.getServer().addRecipe(smelt_goldIngot); - plugin.getServer().addRecipe(blast_goldIngot); + if (this.config.mechanics_reduced_gold_nugget) { + Bukkit.addRecipe(goldNugget); + Bukkit.addRecipe(goldIngot); + Bukkit.addRecipe(smelt_goldIngot); + Bukkit.addRecipe(blast_goldIngot); } - if (config.MECHANICS_FARMING_PRODUCTS_BREAD) - plugin.getServer().addRecipe(bread); - if (config.MECHANICS_FARMING_PRODUCTS_COOKIE) - plugin.getServer().addRecipe(cookie); - if (config.RECIPES_SLIMEBALL) - plugin.getServer().addRecipe(slimeball); - if (config.RECIPES_COBWEB) - plugin.getServer().addRecipe(cobweb); - if (config.MECHANICS_RECURVED_BOW) { + if (this.config.mechanics_farming_products_bread) + Bukkit.addRecipe(bread); + if (this.config.mechanics_farming_products_cookie) + Bukkit.addRecipe(cookie); + if (this.config.recipes_slimeball) + Bukkit.addRecipe(slimeball); + if (this.config.recipes_cobweb) + Bukkit.addRecipe(cobweb); + if (this.config.mechanics_recurved_bow) { Items.RECURVE_BOW.registerRecipe(); Items.RECURVE_CROSSBOW.registerRecipe(); } - if (config.MECHANICS_GRAPPLING_HOOK) + if (this.config.mechanics_grappling_hook) Items.GRAPPLING_HOOK.registerRecipe(); - if (config.mechanics_thirst_purify_water) { - plugin.getServer().addRecipe(clean_water_furnace); - plugin.getServer().addRecipe(clean_water_smoker); - plugin.getServer().addRecipe(clean_water_camp); + if (this.config.mechanics_thirst_purify_water) { + Bukkit.addRecipe(clean_water_furnace); + Bukkit.addRecipe(clean_water_smoker); + Bukkit.addRecipe(clean_water_camp); } - if (config.MECHANICS_ENERGY_COFFEE_ENABLED) { + if (this.config.mechanics_energy_coffee_enabled) { Items.COFFEE_BEAN.registerRecipe(); Items.COLD_MILK.registerRecipe(); Items.HOT_MILK.registerRecipe(); Items.COFFEE.registerRecipe(); } - if (config.MECHANICS_COMPASS_WAYPOINT) { + if (this.config.mechanics_compass_waypoint) { Items.COMPASS.registerRecipe(); } } @@ -551,7 +546,7 @@ public void loadCustomRecipes() { */ public enum Recipes { // CUSTOM TOOLS/ITEMS - HATCHET("hatchet1", "hatchet2"), + HATCHET("hatchet"), MATTOCK("mattock"), SHIV("shiv"), HAMMER("hammer"), @@ -656,7 +651,6 @@ public enum Recipes { Recipes(String... keys) { ArrayList list = new ArrayList<>(); for (String key : keys) { - assert false; list.add(Utils.getNamespacedKey(key)); } this.keys = list; @@ -677,40 +671,40 @@ private static Collection getAllKeys() { } private void removeRecipes() { - if (config.SURVIVAL_ENABLED) { + if (this.config.survival_enabled) { removeRecipeByKey("campfire"); removeRecipeByKey("chest"); - if (config.SURVIVAL_TORCH) { + if (this.config.survival_torch) { removeRecipeByKey("torch"); } - if (config.RECIPES_FURNACE) { + if (this.config.recipes_furnace) { removeRecipeByKey("furnace"); } - if (config.RECIPES_WORKBENCH) { + if (this.config.recipes_workbench) { removeRecipeByKey("crafting_table"); } } - if (config.SURVIVAL_REMOVE_WOOD_TOOLS) { + if (this.config.survival_remove_wood_tools) { removeRecipeByKey("wooden_sword"); removeRecipeByKey("wooden_hoe"); removeRecipeByKey("wooden_shovel"); removeRecipeByKey("wooden_pickaxe"); removeRecipeByKey("wooden_axe"); } - if (config.MECHANICS_REDUCED_IRON_NUGGET) { + if (this.config.mechanics_reduced_iron_nugget) { removeRecipeByKey("iron_ingot"); removeRecipeByKey("iron_ingot_from_nuggets"); removeRecipeByKey("iron_nugget"); removeRecipeByKey("iron_nugget_from_smelting"); } - if (config.MECHANICS_REDUCED_GOLD_NUGGET) { + if (this.config.mechanics_reduced_gold_nugget) { removeRecipeByKey("gold_ingot"); removeRecipeByKey("gold_ingot_from_nuggets"); removeRecipeByKey("gold_nugget"); removeRecipeByKey("gold_nugget_from_smelting"); } - if (config.MECHANICS_SLOW_ARMOR) { + if (this.config.mechanics_slow_armor) { removeRecipeByKey("diamond_helmet"); removeRecipeByKey("diamond_chestplate"); removeRecipeByKey("diamond_leggings"); @@ -720,56 +714,56 @@ private void removeRecipes() { removeRecipeByKey("iron_leggings"); removeRecipeByKey("iron_boots"); } - if (config.MECHANICS_SNOWBALL_REVAMP) { + if (this.config.mechanics_snowball_revamp) { removeRecipeByKey("snow"); removeRecipeByKey("snow_block"); } - if (config.MECHANICS_FARMING_PRODUCTS_COOKIE) { + if (this.config.mechanics_farming_products_cookie) { removeRecipeByKey("cookie"); } - if (config.MECHANICS_FARMING_PRODUCTS_BREAD) { + if (this.config.mechanics_farming_products_bread) { removeRecipeByKey("bread"); } - if (config.LEGENDARY_GOLDARMORBUFF) { + if (this.config.legendary_goldarmorbuff) { removeRecipeByKey("golden_helmet"); removeRecipeByKey("golden_chestplate"); removeRecipeByKey("golden_boots"); removeRecipeByKey("golden_leggings"); } - if (config.LEGENDARY_BLAZESWORD) { + if (this.config.legendary_blazesword) { removeRecipeByKey("golden_sword"); } - if (config.LEGENDARY_GIANTBLADE) { + if (this.config.legendary_giantblade) { removeRecipeByKey("golden_hoe"); } - if (config.LEGENDARY_QUARTZPICKAXE) { + if (this.config.legendary_quartzpickaxe) { removeRecipeByKey("golden_pickaxe"); } - if (config.LEGENDARY_OBSIDIAN_MACE) { + if (this.config.legendary_obsidian_mace) { removeRecipeByKey("golden_shovel"); } - if (config.LEGENDARY_VALKYRIE) { + if (this.config.legendary_valkyrie) { removeRecipeByKey("golden_axe"); } - if (config.RECIPES_GRANITE) { + if (this.config.recipes_granite) { removeRecipeByKey("granite"); } - if (config.RECIPES_ANDESITE) { + if (this.config.recipes_andesite) { removeRecipeByKey("andesite"); } - if (config.RECIPES_DIORITE) { + if (this.config.recipes_diorite) { removeRecipeByKey("diorite"); } - if (config.RECIPES_LEATHER_BARD) { + if (this.config.recipes_leather_bard) { removeRecipeByKey("leather_horse_armor"); } - if (config.RECIPES_FISHING_ROD) { + if (this.config.recipes_fishing_rod) { removeRecipeByKey("fishing_rod"); } - if (config.MECHANICS_COMPASS_WAYPOINT) { + if (this.config.mechanics_compass_waypoint) { removeRecipeByKey("compass"); } - if (config.RECIPES_PACKED_ICE) { + if (this.config.recipes_packed_ice) { removeRecipeByKey("packed_ice"); } } @@ -793,8 +787,4 @@ public void removeRecipeByKey(String recipeKey) { Bukkit.removeRecipe(NamespacedKey.minecraft(recipeKey)); } - private NamespacedKey key(String key) { - return new NamespacedKey(plugin, key); - } - } diff --git a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java index d8458c9..dd8e59e 100644 --- a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java +++ b/src/main/java/tk/shanebee/survival/tasks/TaskManager.java @@ -22,7 +22,7 @@ public TaskManager(SurvivalPlugin plugin) { } } - if (config.MECHANICS_WEATHER_ENABLED) { + if (config.mechanics_weather_enabled) { new WeatherTask(plugin); } // Thirst From 64b775bed8f37b27be5d030813b45af9f5eb58b0 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 16 Feb 2025 12:05:41 -0800 Subject: [PATCH 047/133] Recipes update --- .../java/tk/shanebee/survival/item/Item.java | 4 +- .../tk/shanebee/survival/item/Recipes.java | 448 ++++++++++++ .../survival/item/items/armor/ArmorPiece.java | 12 +- .../item/items/armor/BeekeeperPiece.java | 13 +- .../survival/item/items/armor/RainBoots.java | 15 +- .../item/items/armor/ReinforcedPiece.java | 18 +- .../survival/item/items/armor/SnowBoots.java | 6 +- .../survival/item/items/blocks/Campfire.java | 5 +- .../survival/item/items/blocks/Workbench.java | 6 +- .../survival/item/items/drinks/Coffee.java | 9 +- .../survival/item/items/drinks/ColdMilk.java | 6 +- .../survival/item/items/drinks/HotMilk.java | 7 +- .../item/items/legendary/BlazeSword.java | 6 +- .../item/items/legendary/EnderGiantBlade.java | 7 +- .../item/items/legendary/ObsidianMace.java | 19 +- .../item/items/legendary/QuartzPickaxe.java | 7 +- .../item/items/legendary/ValkyriesAxe.java | 6 +- .../survival/item/items/misc/CoffeeBean.java | 7 +- .../item/items/misc/FermentedSkin.java | 6 +- .../survival/item/items/tools/Compass.java | 6 +- .../item/items/tools/FireStriker.java | 6 +- .../item/items/tools/GrapplingHook.java | 6 +- .../survival/item/items/tools/Hammer.java | 6 +- .../survival/item/items/tools/Hatchet.java | 6 +- .../survival/item/items/tools/Mattock.java | 6 +- .../survival/item/items/tools/MedicKit.java | 6 +- .../survival/item/items/tools/RecurveBow.java | 6 +- .../item/items/tools/RecurveCrossbow.java | 6 +- .../survival/item/items/tools/Shiv.java | 21 +- .../survival/item/items/tools/Sickle.java | 6 +- .../listeners/server/RecipeDiscovery.java | 187 +++-- .../survival/managers/RecipeManager.java | 653 +----------------- 32 files changed, 659 insertions(+), 869 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/item/Recipes.java diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index 3cf03fe..86a4579 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -6,6 +6,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; @@ -91,7 +92,8 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod Items.ALL_ITEMS.put(this.key, this); } - public void registerRecipe() { + public Recipe getRecipe() { + return null; } public boolean is(ItemStack itemStack) { diff --git a/src/main/java/tk/shanebee/survival/item/Recipes.java b/src/main/java/tk/shanebee/survival/item/Recipes.java new file mode 100644 index 0000000..1d556ab --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/Recipes.java @@ -0,0 +1,448 @@ +package tk.shanebee.survival.item; + +import org.bukkit.Bukkit; +import org.bukkit.Keyed; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Tag; +import org.bukkit.entity.Player; +import org.bukkit.inventory.BlastingRecipe; +import org.bukkit.inventory.CampfireRecipe; +import org.bukkit.inventory.FurnaceRecipe; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.ShapedRecipe; +import org.bukkit.inventory.ShapelessRecipe; +import org.bukkit.inventory.SmokingRecipe; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.util.Utils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; + +/** + * Enums of all custom recipes + */ +public class Recipes { + + private static final Collection ALL_RECIPE_KEYS = new HashSet<>(); + private static boolean INITIALIZED = false; + + // CUSTOM TOOLS/ITEMS + public static Recipes HATCHET; + public static Recipes MATTOCK; + public static Recipes SHIV; + public static Recipes HAMMER; + public static Recipes WORKBENCH; + public static Recipes FIRESTRIKER; + public static Recipes VALKYRIES_AXE; + public static Recipes QUARTZ_PICKAXE; + public static Recipes OBSIDIAN_MACE; + public static Recipes ENDER_GIANT_BLADE; + public static Recipes BLAZE_SWORD; + public static Recipes FERMENTED_SKIN; + public static Recipes MEDIC_KIT; + public static Recipes REINFORCED_LEATHER_BOOTS; + public static Recipes REINFORCED_LEATHER_CHESTPLATE; + public static Recipes REINFORCED_LEATHER_LEGGINGS; + public static Recipes REINFORCED_LEATHER_HELMET; + public static Recipes GOLD_SABATONS; + public static Recipes GOLD_GUARD; + public static Recipes GOLD_GREAVES; + public static Recipes GOLD_CROWN; + public static Recipes RECURVED_BOW; + public static Recipes RECURVED_CROSSBOW; + public static Recipes UNLIT_CAMPFIRE; + public static Recipes FLINT_SICKLE; + public static Recipes STONE_SICKLE; + public static Recipes IRON_SICKLE; + public static Recipes DIAMOND_SICKLE; + public static Recipes GRAPPLING_HOOK; + public static Recipes CLEAN_WATER_BOTTLES; + public static Recipes COFFEE_BEAN; + public static Recipes COLD_MILK; + public static Recipes HOT_MILK; + public static Recipes COFFEE; + public static Recipes BEEKEEPER_SUIT; + public static Recipes SNOW_BOOTS; + public static Recipes RAIN_BOOTS; + + // VANILLA ITEMS + public static Recipes ENCHANTED_GOLDEN_APPLE; + public static Recipes SADDLE; + public static Recipes NAMETAG; + public static Recipes STRING_FROM_WEB; + public static Recipes STRING_FROM_WOOL; + public static Recipes IRON_HORSE_ARMOR; + public static Recipes GOLD_HORSE_ARMOR; + public static Recipes DIAMOND_HORSE_ARMOR; + public static Recipes LEATHER_HORSE_ARMOR; + public static Recipes TORCH; + public static Recipes FLINT; + public static Recipes FERMENTED_SPIDER_EYE; + public static Recipes POISONOUS_POTATO; + public static Recipes GLASS_BOTTLE; + public static Recipes BOWL; + public static Recipes FISHING_ROD; + public static Recipes IRON_INGOT; + public static Recipes IRON_NUGGET; + public static Recipes GOLD_INGOT; + public static Recipes GOLD_NUGGET; + public static Recipes BREAD; + public static Recipes COOKIE; + public static Recipes SLIMEBALL; + public static Recipes COBWEB; + public static Recipes STICK; + public static Recipes IRON_BOOTS; + public static Recipes IRON_LEGGINGS; + public static Recipes IRON_CHESTPLATE; + public static Recipes IRON_HELMET; + public static Recipes DIAMOND_BOOTS; + public static Recipes DIAMOND_LEGGINGS; + public static Recipes DIAMOND_CHESTPLATE; + public static Recipes DIAMOND_HELMET; + public static Recipes NETHERITE_BOOTS; + public static Recipes NETHERITE_LEGGINGS; + public static Recipes NETHERITE_CHESTPLATE; + public static Recipes NETHERITE_HELMET; + public static Recipes COMPASS; + + // VANILLA BLOCKS + public static Recipes CLAY_BRICK; + public static Recipes QUARTZ; + public static Recipes FURNACE; + public static Recipes CHEST; + public static Recipes CLAY; + public static Recipes DIORITE; + public static Recipes ANDESITE; + public static Recipes GRANITE; + public static Recipes GRAVEL; + public static Recipes ICE; + public static Recipes PACKED_ICE; + + // SMELTING RECIPES + public static Recipes FURNACE_IRON_INGOT; + public static Recipes FURNACE_GOLD_INGOT; + public static Recipes BLAST_IRON_INGOT; + public static Recipes BLAST_GOLD_INGOT; + + private static Recipes register(boolean register, Recipe... recipes) { + return new Recipes(register, recipes); + } + + public static void init(Config config) { + if (INITIALIZED) { + throw new IllegalStateException("Recipes already initialized"); + } + INITIALIZED = true; + BEEKEEPER_SUIT = register(config.entity_mechanics_beekeeper_suit_enabled, Items.BEEKEEPER_HELMET.getRecipe(), Items.BEEKEEPER_CHESTPLATE.getRecipe(), Items.BEEKEEPER_LEGGINGS.getRecipe(), Items.BEEKEEPER_BOOTS.getRecipe()); + HATCHET = register(config.survival_enabled, Items.HATCHET.getRecipe()); + MATTOCK = register(config.survival_enabled, Items.MATTOCK.getRecipe()); + SHIV = register(config.survival_enabled, Items.SHIV.getRecipe()); + HAMMER = register(config.survival_enabled, Items.HAMMER.getRecipe()); + FIRESTRIKER = register(config.survival_enabled, Items.FIRESTRIKER.getRecipe()); + FLINT_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_flint, Items.FLINT_SICKLE.getRecipe()); + STONE_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_stone, Items.STONE_SICKLE.getRecipe()); + IRON_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_iron, Items.IRON_SICKLE.getRecipe()); + DIAMOND_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_diamond, Items.DIAMOND_SICKLE.getRecipe()); + WORKBENCH = register(config.survival_enabled && config.recipes_workbench, Items.WORKBENCH.getRecipe()); + VALKYRIES_AXE = register(config.legendary_valkyrie, Items.VALKYRIES_AXE.getRecipe()); + QUARTZ_PICKAXE = register(config.legendary_quartzpickaxe, Items.QUARTZ_PICKAXE.getRecipe()); + OBSIDIAN_MACE = register(config.legendary_obsidian_mace, Items.OBSIDIAN_MACE.getRecipe()); + ENDER_GIANT_BLADE = register(config.legendary_giantblade, Items.ENDER_GIANT_BLADE.getRecipe()); + BLAZE_SWORD = register(config.legendary_blazesword, Items.BLAZE_SWORD.getRecipe()); + SNOW_BOOTS = register(config.mechanics_weather_enabled, Items.SNOW_BOOTS.getRecipe()); + RAIN_BOOTS = register(config.mechanics_weather_enabled, Items.RAIN_BOOTS.getRecipe()); + FERMENTED_SKIN = register(config.mechanics_fermented_skin, Items.FERMENTED_SKIN.getRecipe()); + REINFORCED_LEATHER_HELMET = register(config.mechanics_reinforced_armor, Items.REINFORCED_LEATHER_HELMET.getRecipe()); + REINFORCED_LEATHER_CHESTPLATE = register(config.mechanics_reinforced_armor, Items.REINFORCED_LEATHER_TUNIC.getRecipe()); + REINFORCED_LEATHER_LEGGINGS = register(config.mechanics_reinforced_armor, Items.REINFORCED_LEATHER_TROUSERS.getRecipe()); + REINFORCED_LEATHER_BOOTS = register(config.mechanics_reinforced_armor, Items.REINFORCED_LEATHER_BOOTS.getRecipe()); + GOLD_CROWN = register(config.legendary_goldarmorbuff, Items.GOLDEN_CROWN.getRecipe()); + GOLD_GUARD = register(config.legendary_goldarmorbuff, Items.GOLDEN_GUARD.getRecipe()); + GOLD_GREAVES = register(config.legendary_goldarmorbuff, Items.GOLDEN_GREAVES.getRecipe()); + GOLD_SABATONS = register(config.legendary_goldarmorbuff, Items.GOLDEN_SABATONS.getRecipe()); + IRON_HELMET = register(config.mechanics_slow_armor, Items.IRON_HELMET.getRecipe()); + IRON_CHESTPLATE = register(config.mechanics_slow_armor, Items.IRON_CHESTPLATE.getRecipe()); + IRON_LEGGINGS = register(config.mechanics_slow_armor, Items.IRON_LEGGINGS.getRecipe()); + IRON_BOOTS = register(config.mechanics_slow_armor, Items.IRON_BOOTS.getRecipe()); + DIAMOND_HELMET = register(config.mechanics_slow_armor, Items.DIAMOND_HELMET.getRecipe()); + DIAMOND_CHESTPLATE = register(config.mechanics_slow_armor, Items.DIAMOND_CHESTPLATE.getRecipe()); + DIAMOND_LEGGINGS = register(config.mechanics_slow_armor, Items.DIAMOND_LEGGINGS.getRecipe()); + DIAMOND_BOOTS = register(config.mechanics_slow_armor, Items.DIAMOND_BOOTS.getRecipe()); + // TODO discovery for netherite + NETHERITE_HELMET = register(config.mechanics_slow_armor, Items.NETHERITE_HELMET.getRecipe()); + NETHERITE_CHESTPLATE = register(config.mechanics_slow_armor, Items.NETHERITE_CHESTPLATE.getRecipe()); + NETHERITE_LEGGINGS = register(config.mechanics_slow_armor, Items.NETHERITE_LEGGINGS.getRecipe()); + NETHERITE_BOOTS = register(config.mechanics_slow_armor, Items.NETHERITE_BOOTS.getRecipe()); + MEDIC_KIT = register(config.mechanics_medic_kit, Items.MEDIC_KIT.getRecipe()); + RECURVED_BOW = register(config.mechanics_recurved_bow, Items.RECURVE_BOW.getRecipe()); + RECURVED_CROSSBOW = register(config.mechanics_recurved_bow, Items.RECURVE_CROSSBOW.getRecipe()); + UNLIT_CAMPFIRE = register(true, Items.CAMPFIRE.getRecipe());// TODO config?!?! + GRAPPLING_HOOK = register(config.mechanics_grappling_hook, Items.GRAPPLING_HOOK.getRecipe()); + COFFEE_BEAN = register(config.mechanics_energy_coffee_enabled, Items.COFFEE_BEAN.getRecipe()); + COLD_MILK = register(config.mechanics_energy_coffee_enabled, Items.COLD_MILK.getRecipe()); + HOT_MILK = register(config.mechanics_energy_coffee_enabled, Items.HOT_MILK.getRecipe()); + COFFEE = register(config.mechanics_energy_coffee_enabled, Items.COFFEE.getRecipe()); + COMPASS = register(config.mechanics_compass_waypoint, Items.COMPASS.getRecipe()); + + ShapedRecipe notchApple = new ShapedRecipe(Utils.getNamespacedKey("enchanted_golden_apple"), new ItemStack(Material.ENCHANTED_GOLDEN_APPLE, 1)); + notchApple.shape("@@@", "@*@", "@@@"); + notchApple.setIngredient('@', Material.GOLD_BLOCK); + notchApple.setIngredient('*', Material.GOLDEN_APPLE); + ENCHANTED_GOLDEN_APPLE = register(config.legendary_notch_apple, notchApple); + + ShapedRecipe saddle = new ShapedRecipe(Utils.getNamespacedKey("saddle"), new ItemStack(Material.SADDLE, 1)); + saddle.shape("@@@", "*-*", "= ="); + saddle.setIngredient('@', Material.LEATHER); + saddle.setIngredient('*', Material.LEAD); + saddle.setIngredient('-', Material.IRON_INGOT); + saddle.setIngredient('=', Material.IRON_NUGGET); + SADDLE = register(config.recipes_saddle, saddle); + + ShapedRecipe nametag = new ShapedRecipe(Utils.getNamespacedKey("nametag"), new ItemStack(Material.NAME_TAG, 1)); + nametag.shape(" -@", " *-", "* "); + nametag.setIngredient('@', Material.STRING); + nametag.setIngredient('-', Material.IRON_INGOT); + nametag.setIngredient('*', Material.PAPER); + NAMETAG = register(config.recipes_name_tag, nametag); + + ShapedRecipe packedIce = new ShapedRecipe(Utils.getNamespacedKey("packed_ice"), new ItemStack(Material.PACKED_ICE, 1)); + packedIce.shape("@@ ", "@@ "); + packedIce.setIngredient('@', Material.ICE); + PACKED_ICE = register(config.recipes_packed_ice, packedIce); + + + ShapedRecipe ice = new ShapedRecipe(Utils.getNamespacedKey("ice1"), new ItemStack(Material.ICE, 1)); + ShapelessRecipe ice2 = new ShapelessRecipe(Utils.getNamespacedKey("ice2"), new ItemStack(Material.ICE, 4)); + ice.shape("@@@", "@*@", "@@@"); + ice.setIngredient('@', Material.SNOWBALL); + ice.setIngredient('*', Material.WATER_BUCKET); + ice2.addIngredient(Material.PACKED_ICE); + ICE = register(config.recipes_ice, ice, ice2); + + ShapedRecipe iron_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("iron_horse_armor"), new ItemStack(Material.IRON_HORSE_ARMOR, 1)); + iron_horse_armor.shape(" @", "#-#", "= ="); + iron_horse_armor.setIngredient('#', Material.IRON_BLOCK); + iron_horse_armor.setIngredient('@', Material.IRON_INGOT); + iron_horse_armor.setIngredient('-', Material.LEATHER_HORSE_ARMOR); + iron_horse_armor.setIngredient('=', Material.IRON_NUGGET); + IRON_HORSE_ARMOR = register(config.recipes_iron_bard, iron_horse_armor); + + ShapedRecipe gold_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("gold_horse_armor"), new ItemStack(Material.GOLDEN_HORSE_ARMOR, 1)); + gold_horse_armor.shape(" @", "#-#", "= ="); + gold_horse_armor.setIngredient('#', Material.GOLD_BLOCK); + gold_horse_armor.setIngredient('@', Material.GOLD_INGOT); + gold_horse_armor.setIngredient('-', Material.LEATHER_HORSE_ARMOR); + gold_horse_armor.setIngredient('=', Material.GOLD_NUGGET); + GOLD_HORSE_ARMOR = register(config.recipes_gold_bard, gold_horse_armor); + + ShapedRecipe diamond_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("diamond_horse_armor"), new ItemStack(Material.DIAMOND_HORSE_ARMOR, 1)); + diamond_horse_armor.shape(" H", "@-@", "B B"); + diamond_horse_armor.setIngredient('@', Material.DIAMOND); + diamond_horse_armor.setIngredient('-', Material.IRON_HORSE_ARMOR); + diamond_horse_armor.setIngredient('H', Material.DIAMOND_HELMET); + diamond_horse_armor.setIngredient('B', Material.DIAMOND_BOOTS); + DIAMOND_HORSE_ARMOR = register(config.recipes_diamond_bard, diamond_horse_armor); + + ShapedRecipe leather_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("leather_horse_armor"), new ItemStack(Material.LEATHER_HORSE_ARMOR, 1)); + leather_horse_armor.shape(" C", "ABA", "A A"); + leather_horse_armor.setIngredient('A', Material.LEATHER); + leather_horse_armor.setIngredient('B', Material.SADDLE); + leather_horse_armor.setIngredient('C', Material.LEATHER_HELMET); + LEATHER_HORSE_ARMOR = register(config.recipes_leather_bard, leather_horse_armor); + + ShapelessRecipe clay_brick = new ShapelessRecipe(Utils.getNamespacedKey("clay_brick"), new ItemStack(Material.BRICK, 4)); + clay_brick.addIngredient(Material.BRICKS); + CLAY_BRICK = register(config.recipes_clay_brick, clay_brick); + + ShapelessRecipe quartz = new ShapelessRecipe(Utils.getNamespacedKey("quartz"), new ItemStack(Material.QUARTZ, 4)); + quartz.addIngredient(Material.QUARTZ_BLOCK); + QUARTZ = register(config.recipes_quartz_block, quartz); + + ShapelessRecipe string_from_wool = new ShapelessRecipe(Utils.getNamespacedKey("string_from_wool"), new ItemStack(Material.STRING, 4)); + ShapelessRecipe string_from_cobweb = new ShapelessRecipe(Utils.getNamespacedKey("string_from_cobweb"), new ItemStack(Material.STRING, 2)); + string_from_wool.addIngredient(new RecipeChoice.MaterialChoice(Tag.WOOL)); + string_from_cobweb.addIngredient(Material.COBWEB); + STRING_FROM_WEB = register(config.recipes_web_string, string_from_cobweb); + STRING_FROM_WOOL = register(config.recipes_wool_string, string_from_wool); + + ShapedRecipe furnace = new ShapedRecipe(Utils.getNamespacedKey("furnace"), new ItemStack(Material.FURNACE, 1)); + furnace.shape("@@@", "@*@", "@@@"); + furnace.setIngredient('@', Material.BRICK); + furnace.setIngredient('*', Items.FIRESTRIKER.getItemStack()); + FURNACE = register(config.survival_enabled && config.recipes_furnace, furnace); + + ShapedRecipe chest = new ShapedRecipe(Utils.getNamespacedKey("chest"), new ItemStack(Material.CHEST, 1)); + chest.shape("@@@", "@#@", "@@@"); + chest.setIngredient('@', new RecipeChoice.MaterialChoice(Tag.PLANKS)); + chest.setIngredient('#', Material.IRON_INGOT); + CHEST = register(config.survival_enabled, chest); + + ShapedRecipe clay = new ShapedRecipe(Utils.getNamespacedKey("clay"), new ItemStack(Material.CLAY, 1)); + clay.shape(" ", "123", " "); + clay.setIngredient('1', Material.DIRT); + clay.setIngredient('2', Material.SAND); + clay.setIngredient('3', Items.WATER_BOWL.getItemStack()); + CLAY = register(config.recipes_clay, clay); + + ShapelessRecipe diorite = new ShapelessRecipe(Utils.getNamespacedKey("diorite"), new ItemStack(Material.DIORITE, 1)); + diorite.addIngredient(new RecipeChoice.MaterialChoice(Material.BONE_MEAL, Material.WHITE_DYE)); + diorite.addIngredient(Material.COBBLESTONE); + DIORITE = register(config.recipes_diorite, diorite); + + ShapelessRecipe granite = new ShapelessRecipe(Utils.getNamespacedKey("granite"), new ItemStack(Material.GRANITE, 1)); + granite.addIngredient(Material.NETHERRACK); + granite.addIngredient(Material.COBBLESTONE); + GRANITE = register(config.recipes_granite, granite); + + ShapelessRecipe andesite = new ShapelessRecipe(Utils.getNamespacedKey("andesite"), new ItemStack(Material.ANDESITE, 1)); + andesite.addIngredient(Material.GRAVEL); + andesite.addIngredient(Material.COBBLESTONE); + ANDESITE = register(config.recipes_andesite, andesite); + + ShapedRecipe gravel = new ShapedRecipe(NamespacedKey.minecraft("gravel"), new ItemStack(Material.GRAVEL, 2)); + gravel.shape("@B", "B@"); + gravel.setIngredient('@', Material.SAND); + gravel.setIngredient('B', Material.COBBLESTONE); + GRAVEL = register(config.recipes_gravel, gravel); + + ShapedRecipe torch_from_firestriker = new ShapedRecipe(Utils.getNamespacedKey("torch_from_firestriker"), new ItemStack(Material.TORCH, 8)); + ShapedRecipe torch = new ShapedRecipe(Utils.getNamespacedKey("torch"), new ItemStack(Material.TORCH, 16)); + torch_from_firestriker.shape("AAA", "ABA", "AAA"); + torch_from_firestriker.setIngredient('B', Items.FIRESTRIKER.getItemStack()); + torch_from_firestriker.setIngredient('A', Material.STICK); + torch_from_firestriker.setGroup("torch"); + + torch.shape("ACA", "ABA", "AAA"); + torch.setIngredient('C', new RecipeChoice.MaterialChoice(Tag.ITEMS_COALS)); + torch.setIngredient('B', Items.FIRESTRIKER.getItemStack()); + torch.setIngredient('A', Material.STICK); + torch.setGroup("torch"); + TORCH = register(config.survival_torch, torch_from_firestriker, torch); + + ShapelessRecipe flint = new ShapelessRecipe(NamespacedKey.minecraft("flint"), new ItemStack(Material.FLINT, 1)); + flint.addIngredient(Material.GRAVEL); + FLINT = register(config.survival_enabled, flint); + + ShapelessRecipe fermented_spider_eye = new ShapelessRecipe(Utils.getNamespacedKey("fermented_spider_eye"), new ItemStack(Material.FERMENTED_SPIDER_EYE, 1)); + fermented_spider_eye.addIngredient(Material.SPIDER_EYE); + fermented_spider_eye.addIngredient(Material.SUGAR); + fermented_spider_eye.addIngredient(new RecipeChoice.MaterialChoice(Material.RED_MUSHROOM, Material.BROWN_MUSHROOM)); + FERMENTED_SPIDER_EYE = register(config.mechanics_fermented_skin, fermented_spider_eye); // TODO not sure about the config here + + ShapelessRecipe poisonousPotato = new ShapelessRecipe(Utils.getNamespacedKey("poisonous_potato"), new ItemStack(Material.POISONOUS_POTATO, 1)); + poisonousPotato.addIngredient(Material.POTATO); + poisonousPotato.addIngredient(new RecipeChoice.MaterialChoice(Material.BONE_MEAL, Material.WHITE_DYE)); + POISONOUS_POTATO = register(config.mechanics_poison_potato, poisonousPotato); + + ShapelessRecipe glassBottle = new ShapelessRecipe(Utils.getNamespacedKey("glass_bottle"), new ItemStack(Material.GLASS_BOTTLE, 1)); + glassBottle.addIngredient(Material.POTION); + GLASS_BOTTLE = register(config.mechanics_empty_potion, glassBottle); + + ShapedRecipe bowl = new ShapedRecipe(Utils.getNamespacedKey("bowl"), new ItemStack(Material.BOWL, 1)); + bowl.shape(" ", " 1"); + bowl.setIngredient('1', Items.WATER_BOWL.getItemStack()); + BOWL = register(config.mechanics_empty_potion, bowl); + + FurnaceRecipe clean_water_furnace = new FurnaceRecipe(Utils.getNamespacedKey("clean_water_furnace"), + Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 600); + SmokingRecipe clean_water_smoker = new SmokingRecipe(Utils.getNamespacedKey("clean_water_smoker"), + Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 300); + CampfireRecipe clean_water_camp = new CampfireRecipe(Utils.getNamespacedKey("clean_water_campfire"), + Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 2400); + CLEAN_WATER_BOTTLES = register(config.mechanics_thirst_purify_water, clean_water_camp, clean_water_smoker, clean_water_furnace); + + ShapedRecipe fishing_rod = new ShapedRecipe(Utils.getNamespacedKey("fishing_rod"), new ItemStack(Material.FISHING_ROD, 1)); + fishing_rod.shape("1- ", "1 -", "1@*"); + fishing_rod.setIngredient('1', Material.STICK); + fishing_rod.setIngredient('@', Material.IRON_INGOT); + fishing_rod.setIngredient('-', Material.STRING); + fishing_rod.setIngredient('*', Material.FEATHER); + FISHING_ROD = register(config.recipes_fishing_rod, fishing_rod); + + ShapedRecipe iron_ingot = new ShapedRecipe(Utils.getNamespacedKey("iron_ingot"), new ItemStack(Material.IRON_INGOT, 1)); + iron_ingot.shape("@@", "@@"); + iron_ingot.setIngredient('@', Material.IRON_NUGGET); + IRON_INGOT = register(config.mechanics_reduced_iron_nugget, iron_ingot); + + ShapelessRecipe iron_nugget = new ShapelessRecipe(Utils.getNamespacedKey("iron_nugget"), new ItemStack(Material.IRON_NUGGET, 4)); + iron_nugget.addIngredient(Material.IRON_INGOT); + IRON_NUGGET = register(config.mechanics_reduced_iron_nugget, iron_nugget); + + ShapedRecipe gold_ingot = new ShapedRecipe(Utils.getNamespacedKey("gold_ingot"), new ItemStack(Material.GOLD_INGOT, 1)); + gold_ingot.shape("@@", "@@"); + gold_ingot.setIngredient('@', Material.GOLD_NUGGET); + GOLD_INGOT = register(config.mechanics_reduced_gold_nugget, gold_ingot); + + ShapelessRecipe gold_nugget = new ShapelessRecipe(Utils.getNamespacedKey("gold_nugget"), new ItemStack(Material.GOLD_NUGGET, 4)); + gold_nugget.addIngredient(Material.GOLD_INGOT); + GOLD_NUGGET = register(config.mechanics_reduced_gold_nugget, gold_nugget); + + FurnaceRecipe smelt_ironIngot = new FurnaceRecipe(Utils.getNamespacedKey("furnace_iron_ingot"), + new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 400); + FurnaceRecipe smelt_goldIngot = new FurnaceRecipe(Utils.getNamespacedKey("furnace_gold_ingot"), + new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 400); + BlastingRecipe blast_ironIngot = new BlastingRecipe(Utils.getNamespacedKey("blast_iron_ingot"), + new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 100); + BlastingRecipe blast_goldIngot = new BlastingRecipe(Utils.getNamespacedKey("blast_gold_ingot"), + new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 100); + FURNACE_IRON_INGOT = register(config.mechanics_reduced_iron_nugget, smelt_ironIngot); + FURNACE_GOLD_INGOT = register(config.mechanics_reduced_gold_nugget, smelt_goldIngot); + BLAST_IRON_INGOT = register(config.mechanics_reduced_iron_nugget, blast_ironIngot); + BLAST_GOLD_INGOT = register(config.mechanics_reduced_gold_nugget, blast_goldIngot); + + ShapedRecipe bread = new ShapedRecipe(Utils.getNamespacedKey("bread"), new ItemStack(Material.BREAD, 2)); + bread.shape(" E ", "WWW"); + bread.setIngredient('E', Material.EGG); + bread.setIngredient('W', Material.WHEAT); + BREAD = register(config.mechanics_farming_products_bread, bread); + + ShapedRecipe cookie = new ShapedRecipe(Utils.getNamespacedKey("cookie"), new ItemStack(Material.COOKIE, 8)); + cookie.shape(" E ", "WCW", " S "); + cookie.setIngredient('E', Material.EGG); + cookie.setIngredient('W', Material.WHEAT); + cookie.setIngredient('S', Material.SUGAR); + cookie.setIngredient('C', Material.COCOA_BEANS); + COOKIE = register(config.mechanics_farming_products_cookie, cookie); + + ShapelessRecipe slimeball = new ShapelessRecipe(Utils.getNamespacedKey("slimeball"), new ItemStack(Material.SLIME_BALL, 1)); + slimeball.addIngredient(Material.MILK_BUCKET); + slimeball.addIngredient(8, Material.VINE); + SLIMEBALL = register(config.recipes_slimeball, slimeball); + + ShapelessRecipe cobweb = new ShapelessRecipe(Utils.getNamespacedKey("cobweb"), new ItemStack(Material.COBWEB, 1)); + cobweb.addIngredient(Material.SLIME_BALL); + cobweb.addIngredient(2, Material.STRING); + COBWEB = register(config.recipes_cobweb, cobweb); + + ShapelessRecipe stick = new ShapelessRecipe(Utils.getNamespacedKey("stick"), new ItemStack(Material.STICK, 4)); + stick.addIngredient(new RecipeChoice.MaterialChoice(Tag.SAPLINGS)); + STICK = register(config.recipes_sapling_stick, stick); + } + + private final Collection keys; + + Recipes(boolean register, Recipe... recipes) { + ArrayList list = new ArrayList<>(); + for (Recipe recipe : recipes) { + if (recipe instanceof Keyed keyedRecipe) { + list.add(keyedRecipe.getKey()); + ALL_RECIPE_KEYS.add(keyedRecipe.getKey()); + if (register) Bukkit.addRecipe(recipe); + } + } + this.keys = list; + } + + public void unlock(Player player) { + player.discoverRecipes(this.keys); + } + + public static Collection getAllRecipeKeys() { + return ALL_RECIPE_KEYS; + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java index f0822fa..c9db170 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java @@ -1,6 +1,5 @@ package tk.shanebee.survival.item.items.armor; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Registry; @@ -10,6 +9,7 @@ import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -55,7 +55,7 @@ public ArmorPiece(ArmorType armorType, ArmorMaterial armorMaterial, double armor @SuppressWarnings({"DataFlowIssue", "deprecation"}) @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); if (this.armorMaterial == ArmorMaterial.GOLDEN && this.armorType == ArmorType.HELMET) { @@ -65,14 +65,14 @@ public void registerRecipe() { recipe.shape(this.armorType.shape); } recipe.setIngredient('#', this.armorMaterial.recipeMaterial.asMaterial()); - Bukkit.addRecipe(recipe); + return recipe; } public enum ArmorType { HELMET("helmet", "crown", EquipmentSlotGroup.HEAD, "###", "# #"), - CHESTPLATE("chestplate", "guard",EquipmentSlotGroup.CHEST, "# #", "###", "###"), - LEGGINGS("leggings", "greaves",EquipmentSlotGroup.LEGS, "###", "# #", "# #"), - BOOTS("boots", "sabatons",EquipmentSlotGroup.FEET, "# #", "# #"); + CHESTPLATE("chestplate", "guard", EquipmentSlotGroup.CHEST, "# #", "###", "###"), + LEGGINGS("leggings", "greaves", EquipmentSlotGroup.LEGS, "###", "# #", "# #"), + BOOTS("boots", "sabatons", EquipmentSlotGroup.FEET, "# #", "# #"); private final String key; private final String name; diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java index 3f585f3..e10710a 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.armor; -import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.LeatherArmorMeta; import tk.shanebee.survival.item.Item; @@ -32,7 +32,7 @@ public BeekeeperPiece(ArmorType armorType) { } @Override - public void registerRecipe() { + public Recipe getRecipe() { switch (this.armorType) { case HELMET -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); @@ -40,7 +40,7 @@ public void registerRecipe() { recipe.setIngredient('1', Material.HONEYCOMB); recipe.setIngredient('2', Material.IRON_INGOT); recipe.setIngredient('3', Material.LEATHER); - Bukkit.addRecipe(recipe); + return recipe; } case CHESTPLATE -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); @@ -48,7 +48,7 @@ public void registerRecipe() { recipe.setIngredient('1', Material.HONEYCOMB); recipe.setIngredient('2', Material.IRON_INGOT); recipe.setIngredient('3', Material.LEATHER); - Bukkit.addRecipe(recipe); + return recipe; } case LEGGINGS -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); @@ -56,16 +56,17 @@ public void registerRecipe() { recipe.setIngredient('1', Material.HONEYCOMB); recipe.setIngredient('2', Material.IRON_INGOT); recipe.setIngredient('3', Material.LEATHER); - Bukkit.addRecipe(recipe); + return recipe; } case BOOTS -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" ", "1 1", "3 3"); recipe.setIngredient('1', Material.HONEYCOMB); recipe.setIngredient('3', Material.LEATHER); - Bukkit.addRecipe(recipe); + return recipe; } } + return null; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java index bf3fbed..4be8ec5 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java @@ -2,11 +2,11 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; -import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -23,13 +23,12 @@ public RainBoots() { } @Override - public void registerRecipe() { - ShapedRecipe rainBoots = new ShapedRecipe(this.recipeKey, this.getItemStack()); - rainBoots.shape("ili"); - rainBoots.setIngredient('i', Material.IRON_INGOT); - rainBoots.setIngredient('l', Material.LEATHER_BOOTS); - Bukkit.addRecipe(rainBoots); - + public Recipe getRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("ili"); + recipe.setIngredient('i', Material.IRON_INGOT); + recipe.setIngredient('l', Material.LEATHER_BOOTS); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java index 0e7620b..c6327c4 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java @@ -3,16 +3,15 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Equippable; import net.kyori.adventure.key.Key; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.attribute.AttributeModifier.Operation; import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -40,37 +39,38 @@ public ReinforcedPiece(ArmorType armorType) { } @Override - public void registerRecipe() { - switch (this.armorType) { + public Recipe getRecipe() { + return switch (this.armorType) { case HELMET -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("@*@"); recipe.setIngredient('@', Material.IRON_INGOT); recipe.setIngredient('*', Material.LEATHER_HELMET); - Bukkit.addRecipe(recipe); + yield recipe; } case CHESTPLATE -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" @ ", "@*@", " @ "); recipe.setIngredient('@', Material.IRON_INGOT); recipe.setIngredient('*', Material.LEATHER_CHESTPLATE); - Bukkit.addRecipe(recipe); + yield recipe; } case LEGGINGS -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" @ ", "@*@", " @ "); recipe.setIngredient('@', Material.IRON_INGOT); recipe.setIngredient('*', Material.LEATHER_LEGGINGS); - Bukkit.addRecipe(recipe); + yield recipe; } case BOOTS -> { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("@*@"); recipe.setIngredient('@', Material.IRON_INGOT); recipe.setIngredient('*', Material.LEATHER_BOOTS); - Bukkit.addRecipe(recipe); + yield recipe; } - } + default -> throw new IllegalStateException("Unexpected value: " + this.armorType); + }; } private String key() { diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java index e94d94b..5acab99 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java @@ -2,11 +2,11 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; -import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -22,12 +22,12 @@ public SnowBoots() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("dld"); recipe.setIngredient('d', Material.DIAMOND); recipe.setIngredient('l', Material.LEATHER_BOOTS); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java b/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java index 805f7eb..0c8237b 100644 --- a/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java +++ b/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java @@ -6,6 +6,7 @@ import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice.MaterialChoice; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.BlockDataMeta; @@ -25,14 +26,14 @@ public Campfire() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" s ", "scs", "lll"); recipe.setIngredient('s', Material.STICK); recipe.setIngredient('c', new MaterialChoice(Tag.ITEMS_COALS)); recipe.setIngredient('l', new MaterialChoice(Tag.LOGS)); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java b/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java index 3b82486..fec70e7 100644 --- a/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java +++ b/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.blocks; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; import tk.shanebee.survival.item.Item; @@ -19,14 +19,14 @@ public Workbench() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapelessRecipe recipe = new ShapelessRecipe(this.recipeKey, this.getItemStack()); recipe.addIngredient(new RecipeChoice.MaterialChoice(Tag.LOGS)); recipe.addIngredient(Material.LEATHER); recipe.addIngredient(Material.STRING); recipe.addIngredient(Items.HAMMER.getItemStack()); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java index 5cc4dd6..31ac643 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java @@ -1,11 +1,10 @@ package tk.shanebee.survival.item.items.drinks; -import org.bukkit.Bukkit; -import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; @@ -27,15 +26,15 @@ public Coffee() { } @Override - public void registerRecipe() { - ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack(2)); + public Recipe getRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack(2)); recipe.shape(" ", "12 ", "34 "); recipe.setIngredient('1', new RecipeChoice.ExactChoice(Items.COFFEE_BEAN.getItemStack())); recipe.setIngredient('2', Material.COCOA_BEANS); recipe.setIngredient('3', new RecipeChoice.ExactChoice(Items.HOT_MILK.getItemStack())); recipe.setIngredient('4', new RecipeChoice.ExactChoice(Items.PURIFIED_WATER.getItemStack())); - Bukkit.addRecipe(recipe); + return recipe; // TODO maybe a brewer recipe? } diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java index e1faafb..fd7b3f6 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java @@ -1,11 +1,11 @@ package tk.shanebee.survival.item.items.drinks; -import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; @@ -26,13 +26,13 @@ public ColdMilk() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" ", "12 ", " "); recipe.setIngredient('1', Material.MILK_BUCKET); recipe.setIngredient('2', Material.GLASS_BOTTLE); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java index 5c72ed1..ccce1c2 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.drinks; -import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.SmokingRecipe; import org.bukkit.inventory.meta.ItemMeta; @@ -26,10 +26,9 @@ public HotMilk() { } @Override - public void registerRecipe() { - SmokingRecipe recipe = new SmokingRecipe(this.recipeKey, this.getItemStack(), + public Recipe getRecipe() { + return new SmokingRecipe(this.recipeKey, this.getItemStack(), new RecipeChoice.ExactChoice(Items.COLD_MILK.getItemStack()), 0, 200); - Bukkit.addRecipe(recipe); } } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java b/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java index be871e2..9e127b8 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; @@ -11,6 +10,7 @@ import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -44,14 +44,14 @@ public BlazeSword() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe blaze_sword = new ShapedRecipe(this.recipeKey, this.getItemStack()); blaze_sword.shape("BgB", "BgB", "BbB"); blaze_sword.setIngredient('g', Material.GOLD_INGOT); blaze_sword.setIngredient('b', Material.BLAZE_ROD); blaze_sword.setIngredient('B', Material.BLAZE_POWDER); - Bukkit.addRecipe(blaze_sword); + return blaze_sword; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java b/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java index f20f513..ab55af0 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.attribute.Attribute; @@ -11,6 +10,7 @@ import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; @@ -44,7 +44,7 @@ public EnderGiantBlade() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" dd", "Ded", "pD "); @@ -53,8 +53,7 @@ public void registerRecipe() { recipe.setIngredient('d', Material.DIAMOND); recipe.setIngredient('D', Material.DIAMOND_BLOCK); recipe.setIngredient('p', new RecipeChoice.MaterialChoice(Tag.PLANKS)); - - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java b/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java index c6d9a51..6e86c5a 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; @@ -11,6 +10,7 @@ import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -45,16 +45,13 @@ public ObsidianMace() { } @Override - public void registerRecipe() { - ShapedRecipe obsidian_mace = new ShapedRecipe(this.recipeKey, this.getItemStack()); - - obsidian_mace.shape(" oo", " eo", "s "); - - obsidian_mace.setIngredient('o', Material.OBSIDIAN); - obsidian_mace.setIngredient('e', Material.END_CRYSTAL); - obsidian_mace.setIngredient('s', Material.STICK); - Bukkit.addRecipe(obsidian_mace); - + public Recipe getRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape(" oo", " eo", "s "); + recipe.setIngredient('o', Material.OBSIDIAN); + recipe.setIngredient('e', Material.END_CRYSTAL); + recipe.setIngredient('s', Material.STICK); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java b/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java index 7c1d875..f437bb6 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -10,6 +9,7 @@ import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -40,7 +40,7 @@ public QuartzPickaxe() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("qDd", "De ", "d s"); @@ -49,8 +49,7 @@ public void registerRecipe() { recipe.setIngredient('D', Material.DIAMOND_BLOCK); recipe.setIngredient('s', Material.STICK); recipe.setIngredient('e', Material.DRAGON_EGG); - - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java b/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java index 50c6f94..d2cce11 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java +++ b/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -10,6 +9,7 @@ import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -35,13 +35,13 @@ public ValkyriesAxe() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("ddd", "dnd", " s "); recipe.setIngredient('d', Material.DIAMOND); recipe.setIngredient('n', Material.NETHER_STAR); recipe.setIngredient('s', Material.STICK); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java b/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java index 53b5bae..94ce01c 100644 --- a/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java +++ b/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java @@ -1,9 +1,9 @@ package tk.shanebee.survival.item.items.misc; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.SmokingRecipe; import tk.shanebee.survival.item.Item; @@ -16,10 +16,9 @@ public CoffeeBean() { } @Override - public void registerRecipe() { - SmokingRecipe recipe = new SmokingRecipe(this.recipeKey, this.getItemStack(), + public Recipe getRecipe() { + return new SmokingRecipe(this.recipeKey, this.getItemStack(), Material.COCOA_BEANS, 0, 200); - Bukkit.addRecipe(recipe); } } diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java b/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java index d5a03c8..35910e5 100644 --- a/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java +++ b/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java @@ -1,9 +1,9 @@ package tk.shanebee.survival.item.items.misc; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; import tk.shanebee.survival.item.Item; @@ -18,12 +18,12 @@ public FermentedSkin() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapelessRecipe recipe = new ShapelessRecipe(this.recipeKey, this.getItemStack()); recipe.addIngredient(Material.ROTTEN_FLESH); recipe.addIngredient(Material.SUGAR); recipe.addIngredient(new RecipeChoice.MaterialChoice(Material.BROWN_MUSHROOM, Material.RED_MUSHROOM)); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java b/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java index cfbee92..7b832a0 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java @@ -1,9 +1,9 @@ package tk.shanebee.survival.item.items.tools; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -16,12 +16,12 @@ public Compass() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" i ", "iri", " i "); recipe.setIngredient('i', Material.IRON_INGOT); recipe.setIngredient('r', Material.REDSTONE); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java b/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java index 90b043e..c43b7b0 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java @@ -1,11 +1,11 @@ package tk.shanebee.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.meta.ItemMeta; @@ -29,11 +29,11 @@ public FireStriker() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapelessRecipe recipe = new ShapelessRecipe(this.recipeKey, this.getItemStack()); recipe.addIngredient(Material.FLINT); recipe.addIngredient(new RecipeChoice.MaterialChoice(Tag.ITEMS_COALS)); - Bukkit.addRecipe(recipe); + return recipe; } public int getMaxCooks() { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java b/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java index 92a1393..58d0210 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java @@ -1,9 +1,9 @@ package tk.shanebee.survival.item.items.tools; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -16,14 +16,14 @@ public GrapplingHook() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" i ", "fsf", " i "); recipe.setIngredient('f', Material.FISHING_ROD); recipe.setIngredient('s', Material.STRING); recipe.setIngredient('i', Material.IRON_INGOT); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java b/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java index 388a568..af54584 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -22,12 +22,12 @@ public Hammer() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("c ", "sc"); recipe.setIngredient('c', Material.COBBLESTONE); recipe.setIngredient('s', Material.STICK); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java b/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java index 2f18b80..2ecbad7 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -18,12 +18,12 @@ public Hatchet() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("ff", " s"); recipe.setIngredient('f', Material.FLINT); recipe.setIngredient('s', Material.STICK); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java b/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java index f6e142c..d272212 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java @@ -1,11 +1,11 @@ package tk.shanebee.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -20,14 +20,14 @@ public Mattock() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("fp", "sf"); recipe.setIngredient('f', Material.FLINT); recipe.setIngredient('p', new RecipeChoice.MaterialChoice(Tag.PLANKS)); recipe.setIngredient('s', Material.STICK); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java b/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java index bc86398..b57fa97 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java @@ -1,9 +1,9 @@ package tk.shanebee.survival.item.items.tools; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -16,7 +16,7 @@ public MedicKit() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" g ", "fgp", " g "); @@ -25,7 +25,7 @@ public void registerRecipe() { recipe.setIngredient('f', Material.FEATHER); recipe.setIngredient('g', Material.GLISTERING_MELON_SLICE); recipe.setIngredient('p', Material.PAPER); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java index 341145d..c9b1e3d 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.tools; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -21,7 +21,7 @@ public RecurveBow() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" @1", "#^1", " @1"); @@ -29,7 +29,7 @@ public void registerRecipe() { recipe.setIngredient('#', Material.PISTON); recipe.setIngredient('@', Material.IRON_INGOT); recipe.setIngredient('1', Material.STRING); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java index 80d850e..ecf6333 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.tools; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -21,7 +21,7 @@ public RecurveCrossbow() { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape(" 12", "342", " 12"); @@ -29,7 +29,7 @@ public void registerRecipe() { recipe.setIngredient('2', Material.PHANTOM_MEMBRANE); recipe.setIngredient('3', Material.PISTON); recipe.setIngredient('4', Material.CROSSBOW); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java b/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java index af6bfb8..e283e23 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -9,6 +8,7 @@ import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; @@ -36,17 +36,14 @@ public Shiv() { } @Override - public void registerRecipe() { - ShapedRecipe shiv = new ShapedRecipe(this.recipeKey, this.getItemStack()); - - shiv.shape("*f", "se"); - - shiv.setIngredient('f', Material.FLINT); - shiv.setIngredient('s', Material.STICK); - shiv.setIngredient('*', Material.STRING); - shiv.setIngredient('e', Material.SPIDER_EYE); - - Bukkit.addRecipe(shiv); + public Recipe getRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + recipe.shape("*f", "se"); + recipe.setIngredient('f', Material.FLINT); + recipe.setIngredient('s', Material.STICK); + recipe.setIngredient('*', Material.STRING); + recipe.setIngredient('e', Material.SPIDER_EYE); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java b/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java index ea96fea..c863bc7 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java @@ -1,10 +1,10 @@ package tk.shanebee.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; @@ -21,14 +21,14 @@ public Sickle(String typeKey, Material recipeMaterial) { } @Override - public void registerRecipe() { + public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); recipe.shape("oof", " s", " s "); recipe.setIngredient('o', this.recipeMaterial); recipe.setIngredient('f', Material.FLINT); recipe.setIngredient('s', Material.STICK); - Bukkit.addRecipe(recipe); + return recipe; } } diff --git a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java index 0a4e5d2..d3c2173 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java @@ -15,7 +15,7 @@ import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.RecipeManager.Recipes; +import tk.shanebee.survival.item.Recipes; public class RecipeDiscovery implements Listener { @@ -35,15 +35,15 @@ private void onFirstJoin(PlayerJoinEvent e) { if (this.unlockAllRecipes) { this.plugin.getRecipeManager().unlockAllRecipes(player); } else { - player.discoverRecipes(Recipes.HATCHET.getKeys()); - player.discoverRecipes(Recipes.MATTOCK.getKeys()); - player.discoverRecipes(Recipes.SHIV.getKeys()); - player.discoverRecipes(Recipes.HAMMER.getKeys()); - player.discoverRecipes(Recipes.GLASS_BOTTLE.getKeys()); - player.discoverRecipes(Recipes.STICK.getKeys()); - player.discoverRecipes(Recipes.BREAD.getKeys()); - player.discoverRecipes(Recipes.STRING.getKeys()); - player.discoverRecipes(Recipes.WATER_BOTTLES.getKeys()); + Recipes.HATCHET.unlock(player); + Recipes.MATTOCK.unlock(player); + Recipes.SHIV.unlock(player); + Recipes.HAMMER.unlock(player); + Recipes.GLASS_BOTTLE.unlock(player); + Recipes.STICK.unlock(player); + Recipes.BREAD.unlock(player); + Recipes.STRING_FROM_WEB.unlock(player); + Recipes.CLEAN_WATER_BOTTLES.unlock(player); } player.discoverRecipe(NamespacedKey.minecraft("bowl")); }, 100); @@ -56,57 +56,57 @@ private void onPickupItems(EntityPickupItemEvent e) { if (!(e.getEntity() instanceof Player player)) return; Material item = e.getItem().getItemStack().getType(); if (item == Material.DIAMOND) { - player.discoverRecipes(Recipes.DIAMOND_BOOTS.getKeys()); - player.discoverRecipes(Recipes.DIAMOND_CHESTPLATE.getKeys()); - player.discoverRecipes(Recipes.DIAMOND_LEGGINGS.getKeys()); - player.discoverRecipes(Recipes.DIAMOND_HELMET.getKeys()); - player.discoverRecipes(Recipes.DIAMOND_HORSE_ARMOR.getKeys()); - player.discoverRecipes(Recipes.VALKYRIES_AXE.getKeys()); - player.discoverRecipes(Recipes.QUARTZ_PICKAXE.getKeys()); - player.discoverRecipes(Recipes.ENDER_GIANT_BLADE.getKeys()); - player.discoverRecipes(Recipes.DIAMOND_SICKLE.getKeys()); + Recipes.DIAMOND_BOOTS.unlock(player); + Recipes.DIAMOND_CHESTPLATE.unlock(player); + Recipes.DIAMOND_LEGGINGS.unlock(player); + Recipes.DIAMOND_HELMET.unlock(player); + Recipes.DIAMOND_HORSE_ARMOR.unlock(player); + Recipes.VALKYRIES_AXE.unlock(player); + Recipes.QUARTZ_PICKAXE.unlock(player); + Recipes.ENDER_GIANT_BLADE.unlock(player); + Recipes.DIAMOND_SICKLE.unlock(player); } else if (item == Material.FLINT) { - player.discoverRecipes(Recipes.FIRESTRIKER.getKeys()); - player.discoverRecipes(Recipes.GRAVEL.getKeys()); - player.discoverRecipes(Recipes.FLINT_SICKLE.getKeys()); + Recipes.FIRESTRIKER.unlock(player); + Recipes.GRAVEL.unlock(player); + Recipes.FLINT_SICKLE.unlock(player); } else if (item == Material.FEATHER) { - player.discoverRecipes(Recipes.MEDIC_KIT.getKeys()); - player.discoverRecipes(Recipes.FISHING_ROD.getKeys()); + Recipes.MEDIC_KIT.unlock(player); + Recipes.FISHING_ROD.unlock(player); } else if (item == Material.BLAZE_POWDER || item == Material.BLAZE_ROD) { - player.discoverRecipes(Recipes.BLAZE_SWORD.getKeys()); + Recipes.BLAZE_SWORD.unlock(player); } else if (item == Material.LEATHER) { - player.discoverRecipes(Recipes.SADDLE.getKeys()); - player.discoverRecipes(Recipes.LEATHER_HORSE_ARMOR.getKeys()); + Recipes.SADDLE.unlock(player); + Recipes.LEATHER_HORSE_ARMOR.unlock(player); } else if (item == Material.GRAVEL) { - player.discoverRecipes(Recipes.FLINT.getKeys()); + Recipes.FLINT.unlock(player); } else if (item == Material.ROTTEN_FLESH) { - player.discoverRecipes(Recipes.FERMENTED_SKIN.getKeys()); + Recipes.FERMENTED_SKIN.unlock(player); } else if (item == Material.STRING) { - player.discoverRecipes(Recipes.COBWEB.getKeys()); - player.discoverRecipes(Recipes.RECURVED_BOW.getKeys()); + Recipes.COBWEB.unlock(player); + Recipes.RECURVED_BOW.unlock(player); } else if (item == Material.SPIDER_EYE) { - player.discoverRecipes(Recipes.FERMENTED_SPIDER_EYE.getKeys()); + Recipes.FERMENTED_SPIDER_EYE.unlock(player); } else if (item == Material.POTATO) { - player.discoverRecipes(Recipes.POISONOUS_POTATO.getKeys()); + Recipes.POISONOUS_POTATO.unlock(player); } else if (item == Material.COBBLESTONE) { - player.discoverRecipes(Recipes.ANDESITE.getKeys()); - player.discoverRecipes(Recipes.DIORITE.getKeys()); - player.discoverRecipes(Recipes.GRANITE.getKeys()); - player.discoverRecipes(Recipes.STONE_SICKLE.getKeys()); + Recipes.ANDESITE.unlock(player); + Recipes.DIORITE.unlock(player); + Recipes.GRANITE.unlock(player); + Recipes.STONE_SICKLE.unlock(player); } else if (item == Material.QUARTZ) { - player.discoverRecipes(Recipes.QUARTZ.getKeys()); + Recipes.QUARTZ.unlock(player); } else if (item == Material.DIRT) { - player.discoverRecipes(Recipes.CLAY.getKeys()); + Recipes.CLAY.unlock(player); } else if (item == Material.EGG) { - player.discoverRecipes(Recipes.COOKIE.getKeys()); + Recipes.COOKIE.unlock(player); } else if (Items.WATER_BOWL.is(e.getItem().getItemStack())) { - player.discoverRecipes(Recipes.BOWL.getKeys()); + Recipes.BOWL.unlock(player); } else if (item == Material.VINE) { - player.discoverRecipes(Recipes.SLIMEBALL.getKeys()); + Recipes.SLIMEBALL.unlock(player); } else if (item == Material.REDSTONE) { - player.discoverRecipes(Recipes.COMPASS.getKeys()); + Recipes.COMPASS.unlock(player); } else if (item == Material.HONEYCOMB) { - player.discoverRecipes(Recipes.BEEKEEPER_SUIT.getKeys()); + Recipes.BEEKEEPER_SUIT.unlock(player); } } @@ -116,23 +116,23 @@ private void onFurnaceExtract(FurnaceExtractEvent event) { if (this.unlockAllRecipes) return; Player player = event.getPlayer(); if (event.getItemType() == Material.IRON_INGOT) { - player.discoverRecipes(Recipes.IRON_BOOTS.getKeys()); - player.discoverRecipes(Recipes.IRON_CHESTPLATE.getKeys()); - player.discoverRecipes(Recipes.IRON_HELMET.getKeys()); - player.discoverRecipes(Recipes.IRON_LEGGINGS.getKeys()); - player.discoverRecipes(Recipes.IRON_HORSE_ARMOR.getKeys()); - player.discoverRecipes(Recipes.IRON_INGOT.getKeys()); - player.discoverRecipes(Recipes.IRON_SICKLE.getKeys()); - player.discoverRecipes(Recipes.IRON_NUGGET.getKeys()); + Recipes.IRON_BOOTS.unlock(player); + Recipes.IRON_CHESTPLATE.unlock(player); + Recipes.IRON_HELMET.unlock(player); + Recipes.IRON_LEGGINGS.unlock(player); + Recipes.IRON_HORSE_ARMOR.unlock(player); + Recipes.IRON_INGOT.unlock(player); + Recipes.IRON_SICKLE.unlock(player); + Recipes.IRON_NUGGET.unlock(player); } else if (event.getItemType() == Material.GOLD_INGOT) { - player.discoverRecipes(Recipes.GOLD_NUGGET.getKeys()); - player.discoverRecipes(Recipes.GOLD_INGOT.getKeys()); - player.discoverRecipes(Recipes.GOLD_CROWN.getKeys()); - player.discoverRecipes(Recipes.GOLD_GREAVES.getKeys()); - player.discoverRecipes(Recipes.GOLD_GUARD.getKeys()); - player.discoverRecipes(Recipes.GOLD_SABATONS.getKeys()); - player.discoverRecipes(Recipes.GOLD_HORSE_ARMOR.getKeys()); - player.discoverRecipes(Recipes.ENCHANTED_GOLDEN_APPLE.getKeys()); + Recipes.GOLD_NUGGET.unlock(player); + Recipes.GOLD_INGOT.unlock(player); + Recipes.GOLD_CROWN.unlock(player); + Recipes.GOLD_GREAVES.unlock(player); + Recipes.GOLD_GUARD.unlock(player); + Recipes.GOLD_SABATONS.unlock(player); + Recipes.GOLD_HORSE_ARMOR.unlock(player); + Recipes.ENCHANTED_GOLDEN_APPLE.unlock(player); } } @@ -141,20 +141,17 @@ private void onFurnaceExtract(FurnaceExtractEvent event) { private void onPlayerBreakBlock(BlockBreakEvent e) { if (this.unlockAllRecipes) return; Player player = e.getPlayer(); - Material item = e.getBlock().getType(); + Material blockType = e.getBlock().getType(); if (e.isCancelled()) return; - if (Tag.LOGS.isTagged(item)) { - player.discoverRecipes(Recipes.WORKBENCH.getKeys()); - player.discoverRecipe(NamespacedKey.minecraft("crafting_table")); //unlocks vanilla recipe if custom workbench recipe is set to false - player.discoverRecipes(Recipes.CHEST.getKeys()); - player.discoverRecipes(Recipes.UNLIT_CAMPFIRE.getKeys()); - } else if (item == Material.OBSIDIAN) { - player.discoverRecipes(Recipes.OBSIDIAN_MACE.getKeys()); - } else if (item == Material.ICE || item == Material.BLUE_ICE || item == Material.FROSTED_ICE || item == Material.PACKED_ICE) { - player.discoverRecipes(Recipes.ICE.getKeys()); - player.discoverRecipes(Recipes.PACKED_ICE.getKeys()); - } else if (item == Material.STONE) { - player.discoverRecipe(NamespacedKey.minecraft("furnace")); //unlocks vanilla recipe if custom furnace recipe is set to false + if (Tag.LOGS.isTagged(blockType)) { + Recipes.WORKBENCH.unlock(player); + Recipes.CHEST.unlock(player); + Recipes.UNLIT_CAMPFIRE.unlock(player); + } else if (blockType == Material.OBSIDIAN) { + Recipes.OBSIDIAN_MACE.unlock(player); + } else if (blockType == Material.ICE || blockType == Material.BLUE_ICE || blockType == Material.FROSTED_ICE || blockType == Material.PACKED_ICE) { + Recipes.ICE.unlock(player); + Recipes.PACKED_ICE.unlock(player); } } @@ -166,37 +163,37 @@ private void onCraft(CraftItemEvent e) { ItemStack result = e.getRecipe().getResult(); if (Items.FIRESTRIKER.is(result)) { - player.discoverRecipes(Recipes.TORCH.getKeys()); - player.discoverRecipes(Recipes.FURNACE.getKeys()); + Recipes.TORCH.unlock(player); + Recipes.FURNACE.unlock(player); } else if (result.getType() == Material.FURNACE) { - player.discoverRecipes(Recipes.FURNACE_GOLD_INGOT.getKeys()); - player.discoverRecipes(Recipes.FURNACE_IRON_INGOT.getKeys()); + Recipes.FURNACE_GOLD_INGOT.unlock(player); + Recipes.FURNACE_IRON_INGOT.unlock(player); } else if (result.getType() == Material.BLAST_FURNACE) { - player.discoverRecipes(Recipes.BLAST_GOLD_INGOT.getKeys()); - player.discoverRecipes(Recipes.BLAST_IRON_INGOT.getKeys()); + Recipes.BLAST_GOLD_INGOT.unlock(player); + Recipes.BLAST_IRON_INGOT.unlock(player); } else if (result.getType() == Material.CROSSBOW) { - player.discoverRecipes(Recipes.RECURVED_CROSSBOW.getKeys()); + Recipes.RECURVED_CROSSBOW.unlock(player); } else if (result.getType() == Material.LEATHER_HELMET || result.getType() == Material.LEATHER_CHESTPLATE - || result.getType() == Material.LEATHER_LEGGINGS || result.getType() == Material.LEATHER_BOOTS) { - player.discoverRecipes(Recipes.REINFORCED_LEATHER_HELMET.getKeys()); - player.discoverRecipes(Recipes.REINFORCED_LEATHER_CHESTPLATE.getKeys()); - player.discoverRecipes(Recipes.REINFORCED_LEATHER_LEGGINGS.getKeys()); - player.discoverRecipes(Recipes.REINFORCED_LEATHER_BOOTS.getKeys()); + || result.getType() == Material.LEATHER_LEGGINGS || result.getType() == Material.LEATHER_BOOTS) { + Recipes.REINFORCED_LEATHER_HELMET.unlock(player); + Recipes.REINFORCED_LEATHER_CHESTPLATE.unlock(player); + Recipes.REINFORCED_LEATHER_LEGGINGS.unlock(player); + Recipes.REINFORCED_LEATHER_BOOTS.unlock(player); } else if (result.getType() == Material.PAPER) { - player.discoverRecipes(Recipes.NAMETAG.getKeys()); - player.discoverRecipes(Recipes.MEDIC_KIT.getKeys()); + Recipes.NAMETAG.unlock(player); + Recipes.MEDIC_KIT.unlock(player); } else if (result.getType() == Material.STRING) { - player.discoverRecipes(Recipes.COBWEB.getKeys()); - player.discoverRecipes(Recipes.RECURVED_BOW.getKeys()); + Recipes.COBWEB.unlock(player); + Recipes.RECURVED_BOW.unlock(player); } else if (result.getType() == Material.BRICK || result.getType() == Material.BRICKS) { - player.discoverRecipes(Recipes.CLAY_BRICK.getKeys()); + Recipes.CLAY_BRICK.unlock(player); } else if (result.getType() == Material.FISHING_ROD) { - player.discoverRecipes(Recipes.GRAPPLING_HOOK.getKeys()); + Recipes.GRAPPLING_HOOK.unlock(player); } else if (result.getType() == Material.GLASS_BOTTLE) { - player.discoverRecipes(Recipes.COFFEE.getKeys()); - player.discoverRecipes(Recipes.COFFEE_BEAN.getKeys()); - player.discoverRecipes(Recipes.HOT_MILK.getKeys()); - player.discoverRecipes(Recipes.COLD_MILK.getKeys()); + Recipes.COFFEE.unlock(player); + Recipes.COFFEE_BEAN.unlock(player); + Recipes.HOT_MILK.unlock(player); + Recipes.COLD_MILK.unlock(player); } } diff --git a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java index f73aaba..0ad2a0f 100644 --- a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java +++ b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java @@ -1,28 +1,12 @@ package tk.shanebee.survival.managers; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.NamespacedKey; -import org.bukkit.Tag; import org.bukkit.entity.Player; -import org.bukkit.inventory.BlastingRecipe; -import org.bukkit.inventory.CampfireRecipe; -import org.bukkit.inventory.FurnaceRecipe; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.RecipeChoice; -import org.bukkit.inventory.RecipeChoice.ExactChoice; -import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.ShapelessRecipe; -import org.bukkit.inventory.SmokingRecipe; import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; +import tk.shanebee.survival.item.Recipes; -import java.util.ArrayList; -import java.util.Collection; - -@SuppressWarnings("DataFlowIssue") public class RecipeManager { private final Config config; @@ -36,638 +20,7 @@ public RecipeManager(SurvivalPlugin plugin) { */ public void loadCustomRecipes() { removeRecipes(); - - // ENCHANTED GOLDEN APPLE RECIPE - ShapedRecipe notchApple = new ShapedRecipe(Utils.getNamespacedKey("enchanted_golden_apple"), new ItemStack(Material.ENCHANTED_GOLDEN_APPLE, 1)); - notchApple.shape("@@@", "@*@", "@@@"); - - notchApple.setIngredient('@', Material.GOLD_BLOCK); - notchApple.setIngredient('*', Material.GOLDEN_APPLE); - - - // SADDLE RECIPE - ShapedRecipe saddle = new ShapedRecipe(Utils.getNamespacedKey("saddle"), new ItemStack(Material.SADDLE, 1)); - - saddle.shape("@@@", "*-*", "= ="); - - saddle.setIngredient('@', Material.LEATHER); - saddle.setIngredient('*', Material.LEAD); - saddle.setIngredient('-', Material.IRON_INGOT); - saddle.setIngredient('=', Material.IRON_NUGGET); - - - // NAMETAG RECIPE - ShapedRecipe nametag = new ShapedRecipe(Utils.getNamespacedKey("nametag"), new ItemStack(Material.NAME_TAG, 1)); - - nametag.shape(" -@", " *-", "* "); - - nametag.setIngredient('@', Material.STRING); - nametag.setIngredient('-', Material.IRON_INGOT); - nametag.setIngredient('*', Material.PAPER); - - - // PACKED ICE RECIPE - ShapedRecipe packedIce1 = new ShapedRecipe(Utils.getNamespacedKey("packed_ice"), new ItemStack(Material.PACKED_ICE, 1)); - - packedIce1.shape("@@ ", "@@ "); - packedIce1.setIngredient('@', Material.ICE); - - - // ICE RECIPE - ShapedRecipe ice = new ShapedRecipe(Utils.getNamespacedKey("ice1"), new ItemStack(Material.ICE, 1)); - ShapelessRecipe ice2 = new ShapelessRecipe(Utils.getNamespacedKey("ice2"), new ItemStack(Material.ICE, 4)); - - ice.shape("@@@", "@*@", "@@@"); - - ice.setIngredient('@', Material.SNOWBALL); - ice.setIngredient('*', Material.WATER_BUCKET); - - ice2.addIngredient(Material.PACKED_ICE); - - - // IRON HORSE ARMOR RECIPE - ShapedRecipe iron_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("iron_horse_armor"), new ItemStack(Material.IRON_HORSE_ARMOR, 1)); - - iron_horse_armor.shape(" @", "#-#", "= ="); - - iron_horse_armor.setIngredient('#', Material.IRON_BLOCK); - iron_horse_armor.setIngredient('@', Material.IRON_INGOT); - iron_horse_armor.setIngredient('-', Material.LEATHER_HORSE_ARMOR); - iron_horse_armor.setIngredient('=', Material.IRON_NUGGET); - - - // GOLD HORSE ARMOR RECIPE - ShapedRecipe goldHorse1 = new ShapedRecipe(Utils.getNamespacedKey("gold_horse_armor"), new ItemStack(Material.GOLDEN_HORSE_ARMOR, 1)); - - goldHorse1.shape(" @", "#-#", "= ="); - - goldHorse1.setIngredient('#', Material.GOLD_BLOCK); - goldHorse1.setIngredient('@', Material.GOLD_INGOT); - goldHorse1.setIngredient('-', Material.LEATHER_HORSE_ARMOR); - goldHorse1.setIngredient('=', Material.GOLD_NUGGET); - - - // DIAMOND HORSE ARMOR RECIPE - ShapedRecipe diamond_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("diamond_horse_armor"), new ItemStack(Material.DIAMOND_HORSE_ARMOR, 1)); - - diamond_horse_armor.shape(" H", "@-@", "B B"); - - diamond_horse_armor.setIngredient('@', Material.DIAMOND); - diamond_horse_armor.setIngredient('-', Material.IRON_HORSE_ARMOR); - diamond_horse_armor.setIngredient('H', Material.DIAMOND_HELMET); - diamond_horse_armor.setIngredient('B', Material.DIAMOND_BOOTS); - - - // LEATHER HORSE ARMOR RECIPE - ShapedRecipe leather_horse_armor = new ShapedRecipe(Utils.getNamespacedKey("leather_horse_armor"), new ItemStack(Material.LEATHER_HORSE_ARMOR, 1)); - - leather_horse_armor.shape(" C", "ABA", "A A"); - - leather_horse_armor.setIngredient('A', Material.LEATHER); - leather_horse_armor.setIngredient('B', Material.SADDLE); - leather_horse_armor.setIngredient('C', Material.LEATHER_HELMET); - - - // CLAY BRICK RECIPE - ShapelessRecipe clayBrick = new ShapelessRecipe(Utils.getNamespacedKey("clay_brick"), new ItemStack(Material.BRICK, 4)); - - clayBrick.addIngredient(Material.BRICKS); - - - // QUARTZ BLOCK RECIPE - ShapelessRecipe quartz = new ShapelessRecipe(Utils.getNamespacedKey("quartz"), new ItemStack(Material.QUARTZ, 4)); - - quartz.addIngredient(Material.QUARTZ_BLOCK); - - - // STRING RECIPE - ShapelessRecipe woolString = new ShapelessRecipe(Utils.getNamespacedKey("string1"), new ItemStack(Material.STRING, 4)); - ShapelessRecipe string = new ShapelessRecipe(Utils.getNamespacedKey("string2"), new ItemStack(Material.STRING, 2)); - - woolString.addIngredient(new RecipeChoice.MaterialChoice(Tag.WOOL)); - - string.addIngredient(Material.COBWEB); - // FURNACE RECIPE - ShapedRecipe furnace = new ShapedRecipe(NamespacedKey.minecraft("furnace"), new ItemStack(Material.FURNACE, 1)); - - furnace.shape("@@@", "@*@", "@@@"); - - furnace.setIngredient('@', Material.BRICK); - furnace.setIngredient('*', Items.FIRESTRIKER.getItemStack()); - - - // CHEST RECIPE - ShapedRecipe chest = new ShapedRecipe(Utils.getNamespacedKey("chest"), new ItemStack(Material.CHEST, 1)); - - chest.shape("@@@", "@#@", "@@@"); - - chest.setIngredient('@', new RecipeChoice.MaterialChoice(Tag.PLANKS)); - chest.setIngredient('#', Material.IRON_INGOT); - - - // CLAY RECIPE - ShapedRecipe clay = new ShapedRecipe(Utils.getNamespacedKey("clay"), new ItemStack(Material.CLAY, 1)); - - clay.shape(" ", "123", " "); - clay.setIngredient('1', Material.DIRT); - clay.setIngredient('2', Material.SAND); - clay.setIngredient('3', Items.WATER_BOWL.getItemStack()); - - - // DIORITE RECIPE - ShapelessRecipe diorite = new ShapelessRecipe(Utils.getNamespacedKey("diorite"), new ItemStack(Material.DIORITE, 1)); - - diorite.addIngredient(new RecipeChoice.MaterialChoice(Material.BONE_MEAL, Material.WHITE_DYE)); - diorite.addIngredient(Material.COBBLESTONE); - - - // GRANITE RECIPE - ShapelessRecipe granite = new ShapelessRecipe(Utils.getNamespacedKey("granite"), new ItemStack(Material.GRANITE, 1)); - - granite.addIngredient(Material.NETHERRACK); - granite.addIngredient(Material.COBBLESTONE); - - - // ANDESITE RECIPE - ShapelessRecipe andesite = new ShapelessRecipe(Utils.getNamespacedKey("andesite"), new ItemStack(Material.ANDESITE, 1)); - - andesite.addIngredient(Material.GRAVEL); - andesite.addIngredient(Material.COBBLESTONE); - - - // GRAVEL RECIPE - ShapedRecipe gravel = new ShapedRecipe(NamespacedKey.minecraft("gravel"), new ItemStack(Material.GRAVEL, 2)); - - gravel.shape("@B", "B@"); - - gravel.setIngredient('@', Material.SAND); - gravel.setIngredient('B', Material.COBBLESTONE); - - // TORCH RECIPE - ShapedRecipe torch1 = new ShapedRecipe(Utils.getNamespacedKey("torch1"), new ItemStack(Material.TORCH, 8)); - ShapedRecipe torch2 = new ShapedRecipe(Utils.getNamespacedKey("torch2"), new ItemStack(Material.TORCH, 16)); - - torch1.shape("AAA", "ABA", "AAA"); - torch1.setIngredient('B', Items.FIRESTRIKER.getItemStack()); - torch1.setIngredient('A', Material.STICK); - //torch1.setGroup("TORCH"); - - torch2.shape("ACA", "ABA", "AAA"); - torch2.setIngredient('C', new RecipeChoice.MaterialChoice(Tag.ITEMS_COALS)); - torch2.setIngredient('B', Items.FIRESTRIKER.getItemStack()); - torch2.setIngredient('A', Material.STICK); - //torch2.setGroup("TORCH"); - - - // FLINT RECIPE - ShapelessRecipe flint = new ShapelessRecipe(NamespacedKey.minecraft("flint"), new ItemStack(Material.FLINT, 1)); - - flint.addIngredient(Material.GRAVEL); - - - // FERMENTED SPIDER EYE RECIPE - ShapelessRecipe fermented_spider_eye = new ShapelessRecipe(Utils.getNamespacedKey("fermented_spider_eye"), - new ItemStack(Material.FERMENTED_SPIDER_EYE, 1)); - - fermented_spider_eye.addIngredient(Material.SPIDER_EYE); - fermented_spider_eye.addIngredient(Material.SUGAR); - fermented_spider_eye.addIngredient(new RecipeChoice.MaterialChoice(Material.RED_MUSHROOM, Material.BROWN_MUSHROOM)); - - - // POISONOUS POTATO RECIPE - ShapelessRecipe poisonousPotato = new ShapelessRecipe(Utils.getNamespacedKey("poisonous_potato"), - new ItemStack(Material.POISONOUS_POTATO, 1)); - - poisonousPotato.addIngredient(Material.POTATO); - poisonousPotato.addIngredient(new RecipeChoice.MaterialChoice(Material.BONE_MEAL, Material.WHITE_DYE)); - - - // GLASS BOTTLE RECIPE - ShapelessRecipe glassBottle = new ShapelessRecipe(Utils.getNamespacedKey("glass_bottle"), new ItemStack(Material.GLASS_BOTTLE, 1)); - - glassBottle.addIngredient(Material.POTION); - - - // BOWL RECIPE - ShapedRecipe bowl = new ShapedRecipe(Utils.getNamespacedKey("bowl"), new ItemStack(Material.BOWL, 1)); - - bowl.shape(" ", " 1"); - bowl.setIngredient('1', Items.WATER_BOWL.getItemStack()); - - // CLEAN WATER RECIPES - FurnaceRecipe clean_water_furnace = new FurnaceRecipe(NamespacedKey.fromString("survival_plus:clean_water_furnace"), - Items.CLEAN_WATER.getItemStack(), new ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 600); - - SmokingRecipe clean_water_smoker = new SmokingRecipe(NamespacedKey.fromString("survival_plus:clean_water_smoker"), - Items.CLEAN_WATER.getItemStack(), new ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 300); - - CampfireRecipe clean_water_camp = new CampfireRecipe(NamespacedKey.fromString("survival_plus:clean_water_campfire"), - Items.CLEAN_WATER.getItemStack(), new ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 2400); - - - // FISHING ROD RECIPE - ShapedRecipe fishing_rod = new ShapedRecipe(Utils.getNamespacedKey("fishing_rod"), new ItemStack(Material.FISHING_ROD, 1)); - - fishing_rod.shape("1- ", "1 -", "1@*"); - - fishing_rod.setIngredient('1', Material.STICK); - fishing_rod.setIngredient('@', Material.IRON_INGOT); - fishing_rod.setIngredient('-', Material.STRING); - fishing_rod.setIngredient('*', Material.FEATHER); - - - // IRON INGOT RECIPE - ShapedRecipe ironIngot = new ShapedRecipe(Utils.getNamespacedKey("iron_ingot"), new ItemStack(Material.IRON_INGOT, 1)); - ironIngot.shape("@@", "@@"); - ironIngot.setIngredient('@', Material.IRON_NUGGET); - - // IRON NUGGET RECIPE - ShapelessRecipe ironNugget = new ShapelessRecipe(Utils.getNamespacedKey("iron_nugget"), new ItemStack(Material.IRON_NUGGET, 4)); - ironNugget.addIngredient(Material.IRON_INGOT); - - // GOLD INGOT RECIPE - ShapedRecipe goldIngot = new ShapedRecipe(Utils.getNamespacedKey("gold_ingot"), new ItemStack(Material.GOLD_INGOT, 1)); - goldIngot.shape("@@", "@@"); - goldIngot.setIngredient('@', Material.GOLD_NUGGET); - - // GOLD NUGGET RECIPE - ShapelessRecipe goldNugget = new ShapelessRecipe(Utils.getNamespacedKey("gold_nugget"), new ItemStack(Material.GOLD_NUGGET, 4)); - goldNugget.addIngredient(Material.GOLD_INGOT); - - // SMELTING RECIPES - FurnaceRecipe smelt_ironIngot = new FurnaceRecipe(Utils.getNamespacedKey("furnace_iron_ingot"), - new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 400); - FurnaceRecipe smelt_goldIngot = new FurnaceRecipe(Utils.getNamespacedKey("furnace_gold_ingot"), - new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 400); - BlastingRecipe blast_ironIngot = new BlastingRecipe(Utils.getNamespacedKey("blast_iron_ingot"), - new ItemStack(Material.IRON_INGOT, 1), Material.IRON_ORE, 1, 100); - BlastingRecipe blast_goldIngot = new BlastingRecipe(Utils.getNamespacedKey("blast_gold_ingot"), - new ItemStack(Material.GOLD_INGOT, 1), Material.GOLD_ORE, 1, 100); - - - // BREAD RECIPE - ShapedRecipe bread = new ShapedRecipe(Utils.getNamespacedKey("bread"), new ItemStack(Material.BREAD, 2)); - - bread.shape(" E ", "WWW"); - - bread.setIngredient('E', Material.EGG); - bread.setIngredient('W', Material.WHEAT); - - - // COOKIE RECIPE - ShapedRecipe cookie = new ShapedRecipe(Utils.getNamespacedKey("cookie"), new ItemStack(Material.COOKIE, 8)); - - cookie.shape(" E ", "WCW", " S "); - - cookie.setIngredient('E', Material.EGG); - cookie.setIngredient('W', Material.WHEAT); - cookie.setIngredient('S', Material.SUGAR); - cookie.setIngredient('C', Material.COCOA_BEANS); - - - // SLIME BALL RECIPE - ShapelessRecipe slimeball = new ShapelessRecipe(Utils.getNamespacedKey("slimeball"), new ItemStack(Material.SLIME_BALL, 1)); - - slimeball.addIngredient(Material.MILK_BUCKET); - slimeball.addIngredient(8, Material.VINE); - - - // COBWEB RECIPE - ShapelessRecipe cobweb = new ShapelessRecipe(Utils.getNamespacedKey("cobweb"), new ItemStack(Material.COBWEB, 1)); - - cobweb.addIngredient(Material.SLIME_BALL); - cobweb.addIngredient(2, Material.STRING); - - - // SAPLING RECIPE - ShapelessRecipe stick = new ShapelessRecipe(Utils.getNamespacedKey("stick"), new ItemStack(Material.STICK, 4)); - - stick.addIngredient(new RecipeChoice.MaterialChoice(Tag.SAPLINGS)); - - - // BEEKEEPER RECIPES - if (this.config.entity_mechanics_beekeeper_suit_enabled) { - Items.BEEKEEPER_HELMET.registerRecipe(); - Items.BEEKEEPER_CHESTPLATE.registerRecipe(); - Items.BEEKEEPER_LEGGINGS.registerRecipe(); - Items.BEEKEEPER_BOOTS.registerRecipe(); - } - - if (this.config.mechanics_weather_enabled) { - Items.SNOW_BOOTS.registerRecipe(); - Items.RAIN_BOOTS.registerRecipe(); - } - - //Add recipes - if (this.config.survival_enabled) { - Items.HATCHET.registerRecipe(); - Items.MATTOCK.registerRecipe(); - Items.SHIV.registerRecipe(); - Items.HAMMER.registerRecipe(); - Items.FIRESTRIKER.registerRecipe(); - Bukkit.addRecipe(chest); - Bukkit.addRecipe(flint); - Items.CAMPFIRE.registerRecipe(); - if (this.config.break_only_with_sickle) { - if (this.config.survival_sickle_flint) - Items.FLINT_SICKLE.registerRecipe(); - if (this.config.survival_sickle_stone) - Items.STONE_SICKLE.registerRecipe(); - if (this.config.survival_sickle_iron) - Items.IRON_SICKLE.registerRecipe(); - if (this.config.survival_sickle_diamond) - Items.DIAMOND_SICKLE.registerRecipe(); - } - if (this.config.recipes_workbench) { - Items.WORKBENCH.registerRecipe(); - } - if (this.config.recipes_furnace) { - Bukkit.addRecipe(furnace); - } - } - if (this.config.survival_torch) { - Bukkit.addRecipe(torch1); - Bukkit.addRecipe(torch2); - } - if (this.config.recipes_web_string) - Bukkit.addRecipe(string); - if (this.config.recipes_sapling_stick) { - Bukkit.addRecipe(stick); - } - - if (this.config.legendary_valkyrie) { - Items.VALKYRIES_AXE.registerRecipe(); - } - if (this.config.legendary_quartzpickaxe) { - Items.QUARTZ_PICKAXE.registerRecipe(); - } - if (this.config.legendary_obsidian_mace) { - Items.OBSIDIAN_MACE.registerRecipe(); - } - if (this.config.legendary_giantblade) { - Items.ENDER_GIANT_BLADE.registerRecipe(); - } - if (this.config.legendary_blazesword) { - Items.BLAZE_SWORD.registerRecipe(); - } - if (this.config.legendary_notch_apple) - Bukkit.addRecipe(notchApple); - if (this.config.recipes_saddle) - Bukkit.addRecipe(saddle); - if (this.config.recipes_name_tag) { - Bukkit.addRecipe(nametag); - } - if (this.config.recipes_packed_ice) { - Bukkit.addRecipe(packedIce1); - Bukkit.addRecipe(ice2); - } - if (this.config.recipes_iron_bard) { - Bukkit.addRecipe(iron_horse_armor); - } - if (this.config.recipes_gold_bard) { - Bukkit.addRecipe(goldHorse1); - } - if (this.config.recipes_diamond_bard) { - Bukkit.addRecipe(diamond_horse_armor); - } - if (this.config.recipes_leather_bard) { - Bukkit.addRecipe(leather_horse_armor); - } - if (this.config.recipes_clay_brick) - Bukkit.addRecipe(clayBrick); - if (this.config.recipes_quartz_block) - Bukkit.addRecipe(quartz); - if (this.config.recipes_wool_string) - Bukkit.addRecipe(woolString); - if (this.config.recipes_ice) - Bukkit.addRecipe(ice); - if (this.config.recipes_clay) - Bukkit.addRecipe(clay); - if (this.config.recipes_diorite) - Bukkit.addRecipe(diorite); - if (this.config.recipes_granite) - Bukkit.addRecipe(granite); - if (this.config.recipes_andesite) - Bukkit.addRecipe(andesite); - if (this.config.recipes_gravel) { - Bukkit.addRecipe(gravel); - } - if (this.config.mechanics_fermented_skin) { - Items.FERMENTED_SKIN.registerRecipe(); - } - if (this.config.mechanics_poison_potato) - Bukkit.addRecipe(poisonousPotato); - if (this.config.mechanics_empty_potion) { - Bukkit.addRecipe(glassBottle); - Bukkit.addRecipe(bowl); - } - if (this.config.mechanics_reinforced_armor) { - Items.REINFORCED_LEATHER_HELMET.registerRecipe(); - Items.REINFORCED_LEATHER_TUNIC.registerRecipe(); - Items.REINFORCED_LEATHER_TROUSERS.registerRecipe(); - Items.REINFORCED_LEATHER_BOOTS.registerRecipe(); - } - if (this.config.legendary_goldarmorbuff) { - Items.GOLDEN_CROWN.registerRecipe(); - Items.GOLDEN_GUARD.registerRecipe(); - Items.GOLDEN_GREAVES.registerRecipe(); - Items.GOLDEN_SABATONS.registerRecipe(); - } - - if (this.config.mechanics_slow_armor) { - Items.IRON_BOOTS.registerRecipe(); - Items.IRON_CHESTPLATE.registerRecipe(); - Items.IRON_LEGGINGS.registerRecipe(); - Items.IRON_HELMET.registerRecipe(); - Items.DIAMOND_BOOTS.registerRecipe(); - Items.DIAMOND_CHESTPLATE.registerRecipe(); - Items.DIAMOND_LEGGINGS.registerRecipe(); - Items.DIAMOND_HELMET.registerRecipe(); - Items.NETHERITE_BOOTS.registerRecipe(); - Items.NETHERITE_CHESTPLATE.registerRecipe(); - Items.NETHERITE_LEGGINGS.registerRecipe(); - Items.NETHERITE_HELMET.registerRecipe(); - } - - if (this.config.mechanics_medic_kit) { - Items.MEDIC_KIT.registerRecipe(); - } - - if (this.config.recipes_fishing_rod) { - Bukkit.addRecipe(fishing_rod); - } - - if (this.config.mechanics_reduced_iron_nugget) { - Bukkit.addRecipe(ironNugget); - Bukkit.addRecipe(ironIngot); - Bukkit.addRecipe(smelt_ironIngot); - Bukkit.addRecipe(blast_ironIngot); - } - - if (this.config.mechanics_reduced_gold_nugget) { - Bukkit.addRecipe(goldNugget); - Bukkit.addRecipe(goldIngot); - Bukkit.addRecipe(smelt_goldIngot); - Bukkit.addRecipe(blast_goldIngot); - } - - if (this.config.mechanics_farming_products_bread) - Bukkit.addRecipe(bread); - if (this.config.mechanics_farming_products_cookie) - Bukkit.addRecipe(cookie); - if (this.config.recipes_slimeball) - Bukkit.addRecipe(slimeball); - if (this.config.recipes_cobweb) - Bukkit.addRecipe(cobweb); - if (this.config.mechanics_recurved_bow) { - Items.RECURVE_BOW.registerRecipe(); - Items.RECURVE_CROSSBOW.registerRecipe(); - } - if (this.config.mechanics_grappling_hook) - Items.GRAPPLING_HOOK.registerRecipe(); - if (this.config.mechanics_thirst_purify_water) { - Bukkit.addRecipe(clean_water_furnace); - Bukkit.addRecipe(clean_water_smoker); - Bukkit.addRecipe(clean_water_camp); - } - if (this.config.mechanics_energy_coffee_enabled) { - Items.COFFEE_BEAN.registerRecipe(); - Items.COLD_MILK.registerRecipe(); - Items.HOT_MILK.registerRecipe(); - Items.COFFEE.registerRecipe(); - } - if (this.config.mechanics_compass_waypoint) { - Items.COMPASS.registerRecipe(); - } - } - - /** - * Enums of all custom recipes - */ - public enum Recipes { - // CUSTOM TOOLS/ITEMS - HATCHET("hatchet"), - MATTOCK("mattock"), - SHIV("shiv"), - HAMMER("hammer"), - WORKBENCH("workbench"), - FIRESTRIKER("firestriker"), - VALKYRIES_AXE("valkyrie_axe"), - QUARTZ_PICKAXE("quartz_pickaxe"), - OBSIDIAN_MACE("obsidian_mace"), - ENDER_GIANT_BLADE("ender_giant_blade"), - BLAZE_SWORD("blaze_sword"), - FERMENTED_SKIN("fermented_skin"), - MEDIC_KIT("medic_kit"), - REINFORCED_LEATHER_BOOTS("reinforced_leather_boots"), - REINFORCED_LEATHER_CHESTPLATE("reinforced_leather_chestplate"), - REINFORCED_LEATHER_LEGGINGS("reinforced_leather_leggings"), - REINFORCED_LEATHER_HELMET("reinforced_leather_helmet"), - GOLD_SABATONS("gold_sabatons"), - GOLD_GUARD("gold_guard"), - GOLD_GREAVES("gold_greaves"), - GOLD_CROWN("gold_crown"), - RECURVED_BOW("recurved_bow"), - RECURVED_CROSSBOW("recurved_crossbow"), - UNLIT_CAMPFIRE("unlit_campfire"), - FLINT_SICKLE("flint_sickle"), - STONE_SICKLE("stone_sickle"), - IRON_SICKLE("iron_sickle"), - DIAMOND_SICKLE("diamond_sickle"), - GRAPPLING_HOOK("grappling_hook"), - WATER_BOTTLES("clean_water_furnace", "clean_water_smoker", "clean_water_campfire"), - COFFEE_BEAN("coffee_bean"), - COLD_MILK("cold_milk"), - HOT_MILK("hot_milk"), - COFFEE("coffee"), - BEEKEEPER_SUIT("beekeeper_helmet", "beekeeper_chestplate", "beekeeper_leggings", "beekeeper_boots"), - SNOW_BOOTS("snow_boots"), - RAIN_BOOTS("rain_boots"), - - // VANILLA ITEMS - ENCHANTED_GOLDEN_APPLE("enchanted_golden_apple"), - SADDLE("saddle"), - NAMETAG("nametag"), - STRING("string1", "string2"), - IRON_HORSE_ARMOR("iron_horse_armor"), - GOLD_HORSE_ARMOR("gold_horse_armor"), - DIAMOND_HORSE_ARMOR("diamond_horse_armor"), - LEATHER_HORSE_ARMOR("leather_horse_armor"), - TORCH("torch1", "torch2"), - FLINT("flint"), - FERMENTED_SPIDER_EYE("fermented_spider_eye"), - POISONOUS_POTATO("poisonous_potato"), - GLASS_BOTTLE("glass_bottle"), - BOWL("bowl"), - FISHING_ROD("fishing_rod"), - IRON_INGOT("iron_ingot"), - IRON_NUGGET("iron_nugget"), - GOLD_INGOT("gold_ingot"), - GOLD_NUGGET("gold_nugget"), - BREAD("bread"), - COOKIE("cookie"), - SLIMEBALL("slimeball"), - COBWEB("cobweb"), - STICK("stick"), - IRON_BOOTS("iron_boots"), - IRON_LEGGINGS("iron_leggings"), - IRON_CHESTPLATE("iron_chestplate"), - IRON_HELMET("iron_helmet"), - DIAMOND_BOOTS("diamond_boots"), - DIAMOND_LEGGINGS("diamond_leggings"), - DIAMOND_CHESTPLATE("diamond_chestplate"), - DIAMOND_HELMET("diamond_helmet"), - COMPASS("compass"), - - // VANILLA BLOCKS - CLAY_BRICK("clay_brick"), - QUARTZ("quartz"), - FURNACE("furnace"), - CHEST("chest"), - CLAY("clay"), - DIORITE("diorite"), - ANDESITE("andesite"), - GRANITE("granite"), - GRAVEL("gravel"), - ICE("ice1", "ice2"), - PACKED_ICE("packed_ice"), - - // SMELTING RECIPES - FURNACE_IRON_INGOT("furnace_iron_ingot"), - FURNACE_GOLD_INGOT("furnace_gold_ingot"), - BLAST_IRON_INGOT("blast_iron_ingot"), - BLAST_GOLD_INGOT("blast_gold_ingot"); - - private final Collection keys; - private static final Collection allKeys; - - static { - allKeys = new ArrayList<>(); - for (Recipes recipes : values()) { - allKeys.addAll(recipes.keys); - } - } - - Recipes(String... keys) { - ArrayList list = new ArrayList<>(); - for (String key : keys) { - list.add(Utils.getNamespacedKey(key)); - } - this.keys = list; - } - - /** - * Get the {@link NamespacedKey}s for this recipe - * - * @return NamespacedKeys for this recipe - */ - public Collection getKeys() { - return this.keys; - } - - private static Collection getAllKeys() { - return allKeys; - } + Recipes.init(this.config); } private void removeRecipes() { @@ -774,7 +127,7 @@ private void removeRecipes() { * @param player Player to unlock recipes for */ public void unlockAllRecipes(Player player) { - player.discoverRecipes(Recipes.getAllKeys()); + player.discoverRecipes(Recipes.getAllRecipeKeys()); } /** From 713d387c7db056bec99de69dbf7e9876bcdd0988 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 16 Feb 2025 12:55:40 -0800 Subject: [PATCH 048/133] WaterBowlListener - add campfire water bowl extinguish --- .../survival/listeners/EventManager.java | 4 +- ...{WaterBowl.java => WaterBowlListener.java} | 41 ++++++++++++++++++- 2 files changed, 41 insertions(+), 4 deletions(-) rename src/main/java/tk/shanebee/survival/listeners/item/{WaterBowl.java => WaterBowlListener.java} (56%) diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index b7b266a..544c4c6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -40,7 +40,7 @@ import tk.shanebee.survival.listeners.item.TropicalFish; import tk.shanebee.survival.listeners.item.Valkyrie; import tk.shanebee.survival.listeners.item.WaterBottleCrafting; -import tk.shanebee.survival.listeners.item.WaterBowl; +import tk.shanebee.survival.listeners.item.WaterBowlListener; import tk.shanebee.survival.listeners.player.EnergyChange; import tk.shanebee.survival.listeners.player.PlayerDataListener; import tk.shanebee.survival.listeners.server.Guide; @@ -75,7 +75,7 @@ public void registerEvents() { pm.registerEvents(new BlockPlace(plugin), this.plugin); pm.registerEvents(new FirestrikerListener(plugin), this.plugin); pm.registerEvents(new ShivPoison(this.plugin), this.plugin); - pm.registerEvents(new WaterBowl(plugin), this.plugin); + pm.registerEvents(new WaterBowlListener(plugin), this.plugin); pm.registerEvents(new Campfire(plugin), this.plugin); //pm.registerEvents(new Backpack(), this.plugin); needs to be reworked } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java similarity index 56% rename from src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java rename to src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java index 1cde0b7..3f08c33 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowl.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java @@ -3,25 +3,39 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.Tag; import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.data.Lightable; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitScheduler; import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.events.WaterBowlFillEvent; import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.util.Utils; -public class WaterBowl implements Listener { +import java.util.Random; + +public class WaterBowlListener implements Listener { private final SurvivalPlugin plugin; private final boolean thirstEnabled; private final boolean clayEnabled; private final BukkitScheduler scheduler = Bukkit.getScheduler(); + private final Random random = new Random(); - public WaterBowl(SurvivalPlugin plugin) { + public WaterBowlListener(SurvivalPlugin plugin) { this.plugin = plugin; this.thirstEnabled = plugin.getSurvivalConfig().mechanics_thirst_enabled; this.clayEnabled = plugin.getSurvivalConfig().recipes_clay; @@ -36,6 +50,29 @@ private void onConsume(PlayerItemConsumeEvent event) { } } + @EventHandler + private void onExtinguishCampfire(PlayerInteractEvent event) { + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + Block clickedBlock = event.getClickedBlock(); + ItemStack tool = event.getItem(); + EquipmentSlot hand = event.getHand(); + Player player = event.getPlayer(); + + if (clickedBlock == null) return; + if (!Tag.CAMPFIRES.isTagged(clickedBlock.getType())) return; + if (tool == null || !Items.WATER_BOWL.is(tool) || hand == null) return; + + if (!(clickedBlock.getBlockData() instanceof Lightable lightable)) return; + if (!lightable.isLit()) return; + + lightable.setLit(false); + clickedBlock.setBlockData(lightable); + player.swingHand(hand); + player.getInventory().setItem(hand, new ItemStack(Material.BOWL)); + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXTINGUISH_FIRE, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); + Utils.spawnParticle(clickedBlock.getLocation().add(0.5, 0.5, 0.5), Particle.FALLING_WATER, 100, 0.25, 0.2, 0.25); + } + @EventHandler private void onDrop(ItemSpawnEvent event) { if (event.isCancelled()) return; From c92bbe4c8f8072581ec8577e84f59ab6ae12a66b Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 16 Feb 2025 15:51:34 -0800 Subject: [PATCH 049/133] Medic Kit updates --- .../java/tk/shanebee/survival/item/Items.java | 2 +- .../survival/item/items/tools/MedicKit.java | 13 +- .../survival/listeners/item/MedicKit.java | 202 ++++++++---------- .../tk/shanebee/survival/util/ItemUtils.java | 14 ++ .../shanebee/survival/util/PlayerUtils.java | 41 ++++ .../java/tk/shanebee/survival/util/Utils.java | 5 +- src/main/resources/config.yml | 3 + src/main/resources/items.yml | 12 +- 8 files changed, 177 insertions(+), 115 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/util/PlayerUtils.java diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/tk/shanebee/survival/item/Items.java index 5b360bc..9d8a141 100644 --- a/src/main/java/tk/shanebee/survival/item/Items.java +++ b/src/main/java/tk/shanebee/survival/item/Items.java @@ -66,7 +66,7 @@ public class Items { public static final Item STONE_SICKLE = new Sickle("stone", Material.STONE); public static final Item IRON_SICKLE = new Sickle("iron", Material.IRON_INGOT); public static final Item DIAMOND_SICKLE = new Sickle("diamond", Material.DIAMOND); - public static final Item MEDIC_KIT = new MedicKit(); + public static final MedicKit MEDIC_KIT = new MedicKit(); public static final Item RECURVE_BOW = new RecurveBow(); public static final Item RECURVE_CROSSBOW = new RecurveCrossbow(); diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java b/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java index b57fa97..9ef7510 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java @@ -1,26 +1,29 @@ package tk.shanebee.survival.item.items.tools; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import tk.shanebee.survival.item.Item; +import tk.shanebee.survival.util.ItemUtils; @SuppressWarnings("UnstableApiUsage") public class MedicKit extends Item { public MedicKit() { - ItemStack itemStack = ItemType.CLOCK.createItemStack(); + ItemStack itemStack = ItemType.STICK.createItemStack(); + int maxHeals = ITEM_CONFIG.getInt("medic_kit", "max_heals", 10); + itemStack.setData(DataComponentTypes.MAX_DAMAGE, maxHeals); + itemStack.setData(DataComponentTypes.DAMAGE, 0); setupDefaults("medic_kit", itemStack); } @Override public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); - recipe.shape(" g ", "fgp", " g "); - recipe.setIngredient('g', Material.GOLD_INGOT); recipe.setIngredient('f', Material.FEATHER); recipe.setIngredient('g', Material.GLISTERING_MELON_SLICE); @@ -28,4 +31,8 @@ public Recipe getRecipe() { return recipe; } + public boolean canHeal(ItemStack itemStack) { + return ItemUtils.getDurability(itemStack) > 0; + } + } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java index b167406..025a774 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java @@ -1,10 +1,12 @@ package tk.shanebee.survival.listeners.item; +import io.papermc.paper.entity.LookAnchor; import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -13,24 +15,28 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; +import org.jetbrains.annotations.NotNull; import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.data.Stat; import tk.shanebee.survival.item.Items; import tk.shanebee.survival.managers.PlayerManager; +import tk.shanebee.survival.util.ItemUtils; +import tk.shanebee.survival.util.PlayerUtils; import tk.shanebee.survival.util.Utils; import java.util.Random; +@SuppressWarnings("BooleanMethodIsAlwaysInverted") public class MedicKit implements Listener { private final SurvivalPlugin plugin; private final Lang lang; private final PlayerManager playerManager; + private final Random random = new Random(); public MedicKit(SurvivalPlugin plugin) { this.plugin = plugin; @@ -38,12 +44,11 @@ public MedicKit(SurvivalPlugin plugin) { this.playerManager = plugin.getPlayerManager(); } - @EventHandler(priority = EventPriority.HIGHEST) private void onDamaged(EntityDamageByEntityEvent event) { if (event.isCancelled()) return; if (event.getEntity() instanceof Player player) { - PlayerData playerData = playerManager.getPlayerData(player); + PlayerData playerData = this.playerManager.getPlayerData(player); playerData.setStat(Stat.HEALING, 0); } } @@ -53,131 +58,112 @@ private void onDamaged(EntityDamageByEntityEvent event) { private void onClickEntity(PlayerInteractEntityEvent event) { if (event.isCancelled()) return; final Player player = event.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - final ItemStack mainItem = player.getInventory().getItemInMainHand(); + PlayerData playerData = this.playerManager.getPlayerData(player); + ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (!Items.MEDIC_KIT.is(mainItem)) return; + if (!Items.MEDIC_KIT.is(mainItem) || !Items.MEDIC_KIT.canHeal(mainItem)) return; if (playerData.getStat(Stat.HEALING) > 0) return; if (player.isSneaking()) return; - if (!(event.getRightClicked() instanceof Player healed)) return; - if (player.getLocation().distance(healed.getLocation()) > 4) return; + if (!(event.getRightClicked() instanceof Player patient)) return; + if (!canBeHealed(patient)) return; - PlayerData healedData = playerManager.getPlayerData(healed); + PlayerData patientData = this.playerManager.getPlayerData(patient); - if (healedData.getStat(Stat.HEALING) > 0) return; + if (patientData.getStat(Stat.HEALING) > 0) return; playerData.setStat(Stat.HEALING, 1); - healedData.setStat(Stat.HEALING, 1); - healed.teleport(playerManager.lookAt(healed.getLocation(), player.getLocation())); + patientData.setStat(Stat.HEALING, 1); - Utils.sendColoredMini(player, lang.healing_other, healed.getDisplayName()); - Utils.sendColoredMini(healed, lang.healing_being_healed, player.getDisplayName()); + Utils.sendColoredMini(player, this.lang.healing_other, patient.getDisplayName()); + Utils.sendColoredMini(patient, this.lang.healing_being_healed, player.getDisplayName()); - playerData.setStat(Stat.HEAL_TIMES, 5); - final Runnable task = new Runnable() { + Bukkit.getServer().getScheduler().runTaskLater(this.plugin, new Runnable() { + @Override public void run() { - int times = playerData.getStat(Stat.HEAL_TIMES); - if (player.getInventory().getItemInMainHand().getType() == Material.CLOCK && player.getLocation().distance(healed.getLocation()) <= 4 && playerData.getStat(Stat.HEALING) > 0 && healedData.getStat(Stat.HEALING) > 0) { - if (times-- > 0) { - player.teleport(playerManager.lookAt(player.getLocation(), healed.getLocation())); - - Random rand = new Random(); + heal(player, patient, playerData, patientData, this); + } + }, 20); + } - player.removePotionEffect(PotionEffectType.SLOWNESS); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); - player.removePotionEffect(PotionEffectType.JUMP_BOOST); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); + @EventHandler + private void onSelfClick(PlayerInteractEvent event) { + if (event.getHand() != EquipmentSlot.HAND) return; + if (event.hasItem() && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { + final Player player = event.getPlayer(); + ItemStack mainItem = player.getInventory().getItemInMainHand(); + if (!canBeHealed(player)) return; + if (!Items.MEDIC_KIT.is(mainItem) || !Items.MEDIC_KIT.canHeal(mainItem)) return; - healed.getWorld().playSound(healed.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - healed.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); + PlayerData playerData = this.playerManager.getPlayerData(player); + if (playerData.getStat(Stat.HEALING) > 0) return; + if (!player.isSneaking()) return; - Location particleLoc = healed.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); + playerData.setStat(Stat.HEALING, 1); + Utils.sendColoredMini(player, this.lang.healing_self); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); - playerData.setStat(Stat.HEAL_TIMES, times); - } else { - playerData.setStat(Stat.HEALING, 0); - healedData.setStat(Stat.HEALING, 0); + Bukkit.getServer().getScheduler().runTaskLater(this.plugin, new Runnable() { + @Override + public void run() { + heal(player, player, playerData, playerData, this); + } + }, 20); + } + } - Utils.sendColoredMini(player, lang.healing_complete); - Utils.sendColoredMini(healed, lang.healing_complete); + private void heal(@NotNull Player doctor, @NotNull Player patient, @NotNull PlayerData doctorData, @NotNull PlayerData patientData, @NotNull Runnable task) { + int times = doctorData.getStat(Stat.HEAL_TIMES); + boolean healingOther = doctor != patient; + ItemStack medicKitItemStack = doctor.getInventory().getItemInMainHand(); + if (Items.MEDIC_KIT.is(medicKitItemStack) && Items.MEDIC_KIT.canHeal(medicKitItemStack) && canBeHealed(patient)) { + World world = doctor.getWorld(); + if (healingOther) { + doctor.lookAt(patient, LookAnchor.EYES, LookAnchor.EYES); + patient.lookAt(doctor, LookAnchor.EYES, LookAnchor.EYES); + } + PlayerUtils.freezePlayer(doctor, true); + PlayerUtils.freezePlayer(patient, true); + float volume = healingOther ? (float) doctor.getLocation().distance(patient.getLocation()) : 1f; + world.playSound(doctor.getLocation(), Sound.ENTITY_BREEZE_CHARGE, volume, this.random.nextFloat() * 0.4F + 0.8F); - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } - } else { - playerData.setStat(Stat.HEALING, 0); - healedData.setStat(Stat.HEALING, 0); + healPlayer(patient, 2.0); + ItemUtils.damageItem(doctor, medicKitItemStack, 1); - Utils.sendColoredMini(player, lang.healing_interrupted); - Utils.sendColoredMini(healed, lang.healing_interrupted); + Utils.spawnParticle(patient.getLocation(), Particle.HAPPY_VILLAGER, 10, 0.25, 2, 0.25); + if (healingOther) { + Utils.spawnParticle(doctor.getLocation(), Particle.HAPPY_VILLAGER, 10, 0.25, 2, 0.25); + } - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } + // Repeat + Bukkit.getServer().getScheduler().runTaskLater(this.plugin, task, 20L); + doctorData.setStat(Stat.HEAL_TIMES, times); + } else { + doctorData.setStat(Stat.HEALING, 0); + if (healingOther) { + patientData.setStat(Stat.HEALING, 0); + Utils.sendColoredMini(patient, this.lang.healing_complete); + PlayerUtils.freezePlayer(patient, false); } - }; - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); + + Utils.sendColoredMini(doctor, this.lang.healing_complete); + PlayerUtils.freezePlayer(doctor, false); + + doctor.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); + } } - @EventHandler - private void onSelfClick(PlayerInteractEvent event) { - if (event.hasItem() && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { - final Player player = event.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (Items.MEDIC_KIT.is(mainItem)) { - if (playerData.getStat(Stat.HEALING) <= 0) { - if (player.isSneaking()) { - playerData.setStat(Stat.HEALING, 1); - - Utils.sendColoredMini(player, lang.healing_self); - - playerData.setStat(Stat.HEAL_TIMES, 5); - final Runnable task = new Runnable() { - public void run() { - int times = playerData.getStat(Stat.HEAL_TIMES); - if (Items.MEDIC_KIT.is(player.getInventory().getItemInMainHand()) && playerData.getStat(Stat.HEALING) > 0) { - if (times-- > 0) { - Random rand = new Random(); - - player.removePotionEffect(PotionEffectType.SLOWNESS); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true, false)); - player.removePotionEffect(PotionEffectType.JUMP_BOOST); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true, false)); - - player.getWorld().playSound(player.getLocation(), Sound.ENTITY_LEASH_KNOT_PLACE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.addPotionEffect(new PotionEffect(PotionEffectType.INSTANT_HEALTH, 1, 0)); - - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - Utils.spawnParticle(particleLoc, Particle.HAPPY_VILLAGER, 10, 0.5, 0.5, 0.5); - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 20L); - playerData.setStat(Stat.HEAL_TIMES, times); - } else { - playerData.setStat(Stat.HEALING, 0); - - Utils.sendColoredMini(player, lang.healing_complete); - - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } - } else { - playerData.setStat(Stat.HEALING, 0); - - Utils.sendColoredMini(player, lang.healing_interrupted); - - player.getInventory().removeItem(Items.MEDIC_KIT.getItemStack()); - } - } - }; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); - } - } - } + @SuppressWarnings("SameParameterValue") + private void healPlayer(Player player, double amount) { + AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH); + assert attribute != null; + if (attribute.getValue() - player.getHealth() > amount) { + player.setHealth(player.getHealth() + amount); } } + private boolean canBeHealed(Player player) { + AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH); + assert attribute != null; + return player.getHealth() < (attribute.getValue() * 0.9); + } } diff --git a/src/main/java/tk/shanebee/survival/util/ItemUtils.java b/src/main/java/tk/shanebee/survival/util/ItemUtils.java index 5a6ccf5..61058f6 100644 --- a/src/main/java/tk/shanebee/survival/util/ItemUtils.java +++ b/src/main/java/tk/shanebee/survival/util/ItemUtils.java @@ -2,16 +2,22 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.Component; +import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; +import java.util.Random; + /** * Utility methods for {@link ItemStack ItemStacks} */ @SuppressWarnings("UnstableApiUsage") public class ItemUtils { + private static final Random RANDOM = new Random(); + /** * Set the durability of an ItemStack * @@ -42,6 +48,14 @@ public static int getDurability(ItemStack item) { return 0; } + public static void damageItem(Player player, ItemStack item, int damage) { + player.damageItemStack(item, damage); + if (getDurability(item) <= 0) { + item.setAmount(0); + player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); + } + } + @SuppressWarnings({"UnstableApiUsage", "deprecation"}) public static String getItemName(ItemStack itemStack) { if (itemStack.hasData(DataComponentTypes.CUSTOM_NAME)) { diff --git a/src/main/java/tk/shanebee/survival/util/PlayerUtils.java b/src/main/java/tk/shanebee/survival/util/PlayerUtils.java new file mode 100644 index 0000000..ea2fe19 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/util/PlayerUtils.java @@ -0,0 +1,41 @@ +package tk.shanebee.survival.util; + +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +/** + * Utility methods for {@link Player Players} + */ +public class PlayerUtils { + + /** + * Freeze/Unfreeze a player + *

Prevents them from walking/jumping

+ * + * @param player Player to freeze + * @param freeze Whether to freeze or unfreeze + */ + public static void freezePlayer(@NotNull Player player, boolean freeze) { + AttributeInstance moveAttribute = player.getAttribute(Attribute.MOVEMENT_SPEED); + assert moveAttribute != null; + + if (freeze) { + moveAttribute.setBaseValue(0); + } else { + // Default player value from Minecraft + moveAttribute.setBaseValue(0.10000000149011612D); + } + + AttributeInstance jumpAttribute = player.getAttribute(Attribute.JUMP_STRENGTH); + assert jumpAttribute != null; + + if (freeze) { + jumpAttribute.setBaseValue(0); + } else { + jumpAttribute.setBaseValue(jumpAttribute.getDefaultValue()); + } + } + +} diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index cb7feb4..a758ef7 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -14,6 +14,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.metadata.Metadatable; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import tk.shanebee.survival.SurvivalPlugin; import java.util.ArrayList; @@ -89,7 +91,8 @@ public static Component getMini(String format, Object... args) { return MINI_MESSAGE.deserialize(msg); } - public static void sendColoredMini(Audience receiver, String format, Object... args) { + public static void sendColoredMini(@Nullable Audience receiver, @NotNull String format, Object... args) { + if (receiver == null) return; String f = String.format(format, args); receiver.sendMessage(MINI_MESSAGE.deserialize(f)); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 804be26..cdc0f2f 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -98,6 +98,9 @@ Mechanics: # Enables grappling hooks GrapplingHook: true # Enables the medical kit + # Players will be able to heal themselves and other players + # The items.yml file allows you to modify how many uses it has + # Each use (1 durability) will add 2 health points (1 heart) MedicalKit: true # Reduced recipes for iron/gold nuggets ReducedIronNugget: true diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 4bad2ff..6b2b4f2 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -3,9 +3,12 @@ # This file holds certain properties for custom items # Only change it if you know what you're doing +# This file supports MiniMessage formatting +# See the website for more info: https://docs.advntr.dev/minimessage/format +# +# Using legacy color codes '&' or '§' are not supported and will error + # --ITEMS-- -# model_data is the CustomModalData version of this item which represents the CustomModelData number in the resource pack -# If you are using a custom resource pack, you can change this number to match # repair_cost = The number of experience levels to add to the base level cost when repairing, combining, # or renaming this item with an anvil. Must be a non-negative integer, defaults to 0. @@ -70,6 +73,11 @@ items: name: "Medic Kit" repair_cost: 0 repair_percent: 0.0 + # The amount of times the medic kit can heal 1 heart + max_heals: 10 + lore: + - "<#38E29F>Right-Click a player to heal them" + - "<#38AEE2>Sneak-Right-Click to heal yourself" recurve_bow: name: "Recurve Bow" repair_cost: 1 From e5936cc3737e1065ce5825860b66c216f56ed025 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Sun, 16 Feb 2025 21:43:53 -0800 Subject: [PATCH 050/133] SuspiciousMeat - fix override --- .../tk/shanebee/survival/item/items/food/SuspiciousMeat.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java b/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java index cef5913..5e5e85b 100644 --- a/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java +++ b/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java @@ -24,9 +24,9 @@ public SuspiciousMeat() { } @Override - public ItemStack getItemStack() { + public ItemStack getItemStack(int amount) { // Add random effect when item is requested - ItemStack itemStack = super.getItemStack(); + ItemStack itemStack = super.getItemStack(amount); itemStack.setData(DataComponentTypes.SUSPICIOUS_STEW_EFFECTS, SuspiciousStewEffects.suspiciousStewEffects().add(getRandomEffect()).build()); return itemStack; } From 07c56ca74c62c9b728573b26d2728692153025bd Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 01:50:21 -0800 Subject: [PATCH 051/133] more water changes --- .../tk/shanebee/survival/config/Config.java | 14 -- .../java/tk/shanebee/survival/item/Item.java | 14 +- .../java/tk/shanebee/survival/item/Items.java | 34 ++++- .../tk/shanebee/survival/item/Recipes.java | 5 + .../survival/item/items/drinks/Coffee.java | 15 +-- .../survival/item/items/drinks/ColdMilk.java | 22 ++-- .../survival/item/items/drinks/DrinkItem.java | 61 +++++++++ .../survival/item/items/drinks/HotMilk.java | 28 ++-- .../survival/item/items/drinks/Water.java | 80 +++++++++--- .../survival/item/items/drinks/WaterBowl.java | 22 ---- .../survival/listeners/EventManager.java | 4 +- .../listeners/item/CauldronWaterBottle.java | 100 +++++++++------ .../listeners/item/ThirstListener.java | 120 +++++------------- .../listeners/item/WaterBottleCrafting.java | 98 -------------- .../listeners/item/WaterBottleListener.java | 61 +++++++++ .../listeners/item/WaterBowlListener.java | 41 ++++-- src/main/resources/config.yml | 9 +- src/main/resources/items.yml | 21 ++- .../survival_plus/items/clean_water.json | 2 +- .../assets/survival_plus/items/cold_milk.json | 2 +- .../survival_plus/items/dirty_water.json | 2 +- .../assets/survival_plus/items/hot_milk.json | 2 +- .../survival_plus/items/murky_water.json | 12 ++ .../survival_plus/items/purified_water.json | 2 +- .../survival_plus/items/salty_water.json | 12 ++ 25 files changed, 424 insertions(+), 359 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java delete mode 100644 src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java delete mode 100644 src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java create mode 100644 src/main/java/tk/shanebee/survival/listeners/item/WaterBottleListener.java create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/murky_water.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/salty_water.json diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 99ce2aa..1dc0af4 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -125,13 +125,6 @@ public class Config { public int mechanics_thirst_rep_beetroot_soup; public int mechanics_thirst_rep_melon_slice; public int mechanics_thirst_rep_mush_stew; - public int mechanics_thirst_rep_water_bowl; - public int mechanics_thirst_rep_dirty_water; - public int mechanics_thirst_rep_clean_water; - public int mechanics_thirst_rep_pure_water; - public int mechanics_thirst_rep_coffee; - public int mechanics_thirst_rep_cold_milk; - public int mechanics_thirst_rep_hot_milk; public int mechanics_thirst_rep_milk_bucket; public int mechanics_thirst_rep_water; public int mechanics_thirst_rep_honey_bottle; @@ -389,13 +382,6 @@ private void loadSettings() { this.mechanics_thirst_rep_beetroot_soup = settings.getInt("Mechanics.Thirst.replenish-level.beetroot-soup"); this.mechanics_thirst_rep_melon_slice = settings.getInt("Mechanics.Thirst.replenish-level.melon-slice"); this.mechanics_thirst_rep_mush_stew = settings.getInt("Mechanics.Thirst.replenish-level.mushroom-stew"); - this.mechanics_thirst_rep_water_bowl = settings.getInt("Mechanics.Thirst.replenish-level.water-bowl"); - this.mechanics_thirst_rep_dirty_water = settings.getInt("Mechanics.Thirst.replenish-level.dirty-water"); - this.mechanics_thirst_rep_clean_water = settings.getInt("Mechanics.Thirst.replenish-level.clean-water"); - this.mechanics_thirst_rep_pure_water = settings.getInt("Mechanics.Thirst.replenish-level.purified-water"); - this.mechanics_thirst_rep_coffee = settings.getInt("Mechanics.Thirst.replenish-level.coffee"); - this.mechanics_thirst_rep_cold_milk = settings.getInt("Mechanics.Thirst.replenish-level.cold-milk"); - this.mechanics_thirst_rep_hot_milk = settings.getInt("Mechanics.Thirst.replenish-level.hot-milk"); this.mechanics_thirst_rep_milk_bucket = settings.getInt("Mechanics.Thirst.replenish-level.milk-bucket"); this.mechanics_thirst_rep_honey_bottle = settings.getInt("Mechanics.Thirst.replenish-level.honey-bottle"); this.mechanics_thirst_rep_other_water = settings.getInt("Mechanics.Thirst.replenish-level.other-water"); diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index 86a4579..bafe678 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -1,9 +1,11 @@ package tk.shanebee.survival.item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.DyedItemColor; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Color; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; @@ -27,10 +29,12 @@ public abstract class Item { private Key key; protected NamespacedKey recipeKey; private ItemStack itemStack; + + @SuppressWarnings({"FieldCanBeLocal", "unused"}) private double repairPercent; // TODO figure this out public ItemStack getItemStack() { - return this.itemStack.clone(); + return getItemStack(1); } public ItemStack getItemStack(int amount) { @@ -51,6 +55,13 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod itemStack.setData(DataComponentTypes.ITEM_MODEL, this.key); } + // Color + int color = ITEM_CONFIG.getColor(key); + if (color != 0) { + DyedItemColor dyedItemColor = DyedItemColor.dyedItemColor(Color.fromRGB(color), false); + itemStack.setData(DataComponentTypes.DYED_COLOR, dyedItemColor); + } + // Item Name String itemName = ITEM_CONFIG.getName(key); if (itemName != null) { @@ -78,6 +89,7 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod int maxDamage = ITEM_CONFIG.getMaxDamage(key); if (maxDamage > 0) { itemStack.setData(DataComponentTypes.MAX_DAMAGE, maxDamage); + itemStack.setData(DataComponentTypes.DAMAGE, 0); } // Repair Cost diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/tk/shanebee/survival/item/Items.java index 9d8a141..a657f8f 100644 --- a/src/main/java/tk/shanebee/survival/item/Items.java +++ b/src/main/java/tk/shanebee/survival/item/Items.java @@ -3,6 +3,7 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.key.Key; import org.bukkit.Material; +import org.bukkit.block.Biome; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,7 +20,6 @@ import tk.shanebee.survival.item.items.drinks.ColdMilk; import tk.shanebee.survival.item.items.drinks.HotMilk; import tk.shanebee.survival.item.items.drinks.Water; -import tk.shanebee.survival.item.items.drinks.WaterBowl; import tk.shanebee.survival.item.items.food.SuspiciousMeat; import tk.shanebee.survival.item.items.legendary.BlazeSword; import tk.shanebee.survival.item.items.legendary.EnderGiantBlade; @@ -123,13 +123,15 @@ public class Items { public static final Item SUSPICIOUS_MEAT = new SuspiciousMeat(); // DRINKS - public static final Item DIRTY_WATER = new Water("dirty_water"); - public static final Item CLEAN_WATER = new Water("clean_water"); - public static final Item PURIFIED_WATER = new Water("purified_water"); + public static final Water DIRTY_WATER = Water.dirty(); + public static final Water CLEAN_WATER = Water.clean(); + public static final Water PURIFIED_WATER = Water.purified(); + public static final Water SALTY_WATER = Water.salty(); + public static final Water MURKY_WATER = Water.murky(); + public static final Water WATER_BOWL = Water.waterBowl(); public static final Item COFFEE = new Coffee(); public static final Item HOT_MILK = new HotMilk(); public static final Item COLD_MILK = new ColdMilk(); - public static final Item WATER_BOWL = new WaterBowl(); // TODO Experimental public static final Item PERSISTENT_TORCH = null; @@ -169,6 +171,24 @@ public static Item getFromStack(@NotNull ItemStack itemStack) { return null; } + /** + * Get a water bottle based on a biome + * + * @param biome Biome to check for bottle + * @return Water bottle based on biome + */ + public static Water getBiomeBasedWaterBottle(Biome biome) { + String string = biome.getKey().getKey(); + if (string.contains("ocean")) { + return Items.SALTY_WATER; + } else if (string.contains("swamp")) { + return Items.MURKY_WATER; + } else if (string.contains("lush")) { + return Items.PURIFIED_WATER; + } + return Items.DIRTY_WATER; + } + /** * Tags for different {@link Items} groups */ @@ -185,11 +205,11 @@ public enum Tags { /** * Any water bottle */ - WATER_BOTTLE(DIRTY_WATER, CLEAN_WATER, PURIFIED_WATER), + WATER_BOTTLE(DIRTY_WATER, MURKY_WATER, SALTY_WATER, CLEAN_WATER, PURIFIED_WATER), /** * Any drinkable item */ - DRINKABLE(DIRTY_WATER, CLEAN_WATER, PURIFIED_WATER, WATER_BOWL, + DRINKABLE(DIRTY_WATER, MURKY_WATER, SALTY_WATER, CLEAN_WATER, PURIFIED_WATER, WATER_BOWL, COLD_MILK, HOT_MILK, COFFEE), /** diff --git a/src/main/java/tk/shanebee/survival/item/Recipes.java b/src/main/java/tk/shanebee/survival/item/Recipes.java index 1d556ab..6a2ba84 100644 --- a/src/main/java/tk/shanebee/survival/item/Recipes.java +++ b/src/main/java/tk/shanebee/survival/item/Recipes.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.List; /** * Enums of all custom recipes @@ -437,6 +438,10 @@ public static void init(Config config) { this.keys = list; } + public List getKeys() { + return new ArrayList<>(this.keys); + } + public void unlock(Player player) { player.discoverRecipes(this.keys); } diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java index 31ac643..0af9f44 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java @@ -1,27 +1,18 @@ package tk.shanebee.survival.item.items.drinks; import org.bukkit.Material; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionType; -import tk.shanebee.survival.item.Item; import tk.shanebee.survival.item.Items; @SuppressWarnings("UnstableApiUsage") -public class Coffee extends Item { +public class Coffee extends DrinkItem { public Coffee() { - ItemStack itemStack = ItemType.POTION.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); - itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - itemStack.setItemMeta(itemMeta); + ItemStack itemStack = ItemType.STICK.createItemStack(); setupDefaults("coffee", itemStack); } @@ -35,8 +26,6 @@ public Recipe getRecipe() { recipe.setIngredient('3', new RecipeChoice.ExactChoice(Items.HOT_MILK.getItemStack())); recipe.setIngredient('4', new RecipeChoice.ExactChoice(Items.PURIFIED_WATER.getItemStack())); return recipe; - - // TODO maybe a brewer recipe? } } diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java index fd7b3f6..5a200d0 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java @@ -1,28 +1,22 @@ package tk.shanebee.survival.item.items.drinks; -import org.bukkit.Color; +import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import org.bukkit.Material; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionType; -import tk.shanebee.survival.item.Item; + +import java.util.List; @SuppressWarnings("UnstableApiUsage") -public class ColdMilk extends Item { +public class ColdMilk extends DrinkItem { public ColdMilk() { - ItemStack itemStack = ItemType.POTION.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); - ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor("cold_milk"))); - itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - itemStack.setItemMeta(itemMeta); - setupDefaults("cold_milk", itemStack); + ItemStack itemStack = ItemType.STICK.createItemStack(); + setupDefaults("cold_milk", itemStack, List.of( + ConsumeEffect.clearAllStatusEffects() + )); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java b/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java new file mode 100644 index 0000000..1bdbd7b --- /dev/null +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java @@ -0,0 +1,61 @@ +package tk.shanebee.survival.item.items.drinks; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.Consumable; +import io.papermc.paper.datacomponent.item.UseRemainder; +import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; +import io.papermc.paper.datacomponent.item.consumable.ItemUseAnimation; +import net.kyori.adventure.key.Key; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import tk.shanebee.survival.item.Item; + +import java.util.List; + +/** + * Represents a drinkable {@link Item} that has a thirst level + */ +@SuppressWarnings("UnstableApiUsage") +public abstract class DrinkItem extends Item { + + private int thirstLevel; + + @Override + protected void setupDefaults(String key, ItemStack itemStack) { + this.thirstLevel = ITEM_CONFIG.getInt(key, "thirst_level", 1); + super.setupDefaults(key, itemStack); + } + + @Override + protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaModel) { + this.thirstLevel = ITEM_CONFIG.getInt(key, "thirst_level", 1); + super.setupDefaults(key, itemStack, vanillaModel); + } + + protected void setupDefaults(String key, ItemStack itemStack, @NotNull List effects) { + setupDefaults(key, itemStack, effects, null); + } + + protected void setupDefaults(String key, ItemStack itemStack, @NotNull List effects, @Nullable ItemStack remainder) { + Consumable.Builder consumable = Consumable.consumable(); + consumable.hasConsumeParticles(false); + consumable.sound(Key.key("minecraft:entity.generic.drink")); + consumable.animation(ItemUseAnimation.DRINK); + if (!effects.isEmpty()) { + consumable.addEffects(effects); + } + + itemStack.setData(DataComponentTypes.CONSUMABLE, consumable.build()); + itemStack.setData(DataComponentTypes.MAX_STACK_SIZE, 1); + UseRemainder useRemainder = UseRemainder.useRemainder(remainder != null ? remainder : new ItemStack(Material.GLASS_BOTTLE)); + itemStack.setData(DataComponentTypes.USE_REMAINDER, useRemainder); + setupDefaults(key, itemStack); + } + + public int getThirstLevel() { + return this.thirstLevel; + } + +} diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java index ccce1c2..32f15af 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java @@ -1,28 +1,28 @@ package tk.shanebee.survival.item.items.drinks; -import org.bukkit.Color; -import org.bukkit.inventory.ItemFlag; +import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; +import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect.ApplyStatusEffects; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.SmokingRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionType; -import tk.shanebee.survival.item.Item; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import tk.shanebee.survival.item.Items; -public class HotMilk extends Item { +import java.util.List; + +@SuppressWarnings("UnstableApiUsage") +public class HotMilk extends DrinkItem { public HotMilk() { - ItemStack itemStack = ItemType.POTION.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); - ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor("hot_milk"))); - itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - itemStack.setItemMeta(itemMeta); - setupDefaults("hot_milk", itemStack); + ItemStack itemStack = ItemType.STICK.createItemStack(); + ApplyStatusEffects effects = ConsumeEffect.applyStatusEffects(List.of( + new PotionEffect(PotionEffectType.HUNGER, 100, 0, true, false, false), + new PotionEffect(PotionEffectType.INSTANT_DAMAGE, 1, 0, true, false, false)), + 1.0f); + setupDefaults("hot_milk", itemStack, List.of(effects)); } @Override diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java index 440d1e5..7c7d999 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java @@ -1,26 +1,76 @@ package tk.shanebee.survival.item.items.drinks; -import org.bukkit.Color; -import org.bukkit.inventory.ItemFlag; +import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionType; -import tk.shanebee.survival.item.Item; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.List; @SuppressWarnings("UnstableApiUsage") -public class Water extends Item { +public class Water extends DrinkItem { public Water(String key) { - ItemStack itemStack = ItemType.POTION.createItemStack(); - - ItemMeta itemMeta = itemStack.getItemMeta(); - ((PotionMeta) itemMeta).setBasePotionType(PotionType.WATER); - ((PotionMeta) itemMeta).setColor(Color.fromRGB(ITEM_CONFIG.getColor(key))); - itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - itemStack.setItemMeta(itemMeta); - setupDefaults(key, itemStack); + this(key, List.of()); + } + + public Water(String key, List effects) { + this(key, effects, null); + } + + public Water(String key, List effects, ItemStack remainder) { + ItemStack itemStack = ItemType.STICK.createItemStack(); + setupDefaults(key, itemStack, effects, remainder); + } + + public static Water dirty() { + PotionEffect poison = new PotionEffect(PotionEffectType.POISON, 100, 0); + PotionEffect nausea = new PotionEffect(PotionEffectType.NAUSEA, 200, 0); + return new Water("dirty_water", List.of( + ConsumeEffect.applyStatusEffects(List.of(poison), 0.5f), + ConsumeEffect.applyStatusEffects(List.of(nausea), 1.0f) + )); + } + + public static Water salty() { + PotionEffect hunger = new PotionEffect(PotionEffectType.HUNGER, 400, 0); + PotionEffect nausea = new PotionEffect(PotionEffectType.NAUSEA, 100, 0); + PotionEffect slowness = new PotionEffect(PotionEffectType.SLOWNESS, 400, 0); + return new Water("salty_water", List.of( + ConsumeEffect.applyStatusEffects(List.of(hunger), 0.75f), + ConsumeEffect.applyStatusEffects(List.of(nausea), 0.5f), + ConsumeEffect.applyStatusEffects(List.of(slowness), 0.5f) + )); + } + + public static Water murky() { + PotionEffect poison = new PotionEffect(PotionEffectType.POISON, 200, 2); + PotionEffect nausea = new PotionEffect(PotionEffectType.NAUSEA, 1000, 0); + PotionEffect weakness = new PotionEffect(PotionEffectType.WEAKNESS, 1000, 0); + PotionEffect slowness = new PotionEffect(PotionEffectType.SLOWNESS, 400, 0); + return new Water("murky_water", List.of( + ConsumeEffect.applyStatusEffects(List.of(poison), 0.8f), + ConsumeEffect.applyStatusEffects(List.of(nausea), 0.5f), + ConsumeEffect.applyStatusEffects(List.of(weakness), 1.0f), + ConsumeEffect.applyStatusEffects(List.of(slowness), 0.2f) + )); + } + + public static Water clean() { + return new Water("clean_water"); + } + + public static Water purified() { + PotionEffect health = new PotionEffect(PotionEffectType.HEALTH_BOOST, 100, 2); + return new Water("purified_water", List.of( + ConsumeEffect.applyStatusEffects(List.of(health), 0.5f) + )); + } + + public static Water waterBowl() { + return new Water("water_bowl", List.of(), new ItemStack(Material.BOWL)); } } diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java b/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java deleted file mode 100644 index d4a685e..0000000 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/WaterBowl.java +++ /dev/null @@ -1,22 +0,0 @@ -package tk.shanebee.survival.item.items.drinks; - -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.ItemType; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionType; -import tk.shanebee.survival.item.Item; - -@SuppressWarnings("UnstableApiUsage") -public class WaterBowl extends Item { - - public WaterBowl() { - ItemStack itemStack = ItemType.POTION.createItemStack(); - PotionMeta itemMeta = ((PotionMeta) itemStack.getItemMeta()); - itemMeta.setBasePotionType(PotionType.WATER); - itemMeta.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP); - itemStack.setItemMeta(itemMeta); - setupDefaults("water_bowl", itemStack); - } - -} diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index 544c4c6..48ec125 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -39,7 +39,7 @@ import tk.shanebee.survival.listeners.item.ThirstListener; import tk.shanebee.survival.listeners.item.TropicalFish; import tk.shanebee.survival.listeners.item.Valkyrie; -import tk.shanebee.survival.listeners.item.WaterBottleCrafting; +import tk.shanebee.survival.listeners.item.WaterBottleListener; import tk.shanebee.survival.listeners.item.WaterBowlListener; import tk.shanebee.survival.listeners.player.EnergyChange; import tk.shanebee.survival.listeners.player.PlayerDataListener; @@ -98,7 +98,7 @@ public void registerEvents() { if (config.mechanics_medic_kit) pm.registerEvents(new MedicKit(plugin), this.plugin); - pm.registerEvents(new WaterBottleCrafting(plugin), this.plugin); + pm.registerEvents(new WaterBottleListener(plugin), this.plugin); if (config.settings_resource_pack_enabled) { pm.registerEvents(new ResourcePackListener(plugin), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java b/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java index 9fe8ad2..76699c2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java @@ -1,6 +1,5 @@ package tk.shanebee.survival.listeners.item; -import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -12,54 +11,73 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import org.bukkit.material.Cauldron; +import org.bukkit.inventory.ItemType; import tk.shanebee.survival.item.Items; +@SuppressWarnings("UnstableApiUsage") public class CauldronWaterBottle implements Listener { - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.HIGHEST) - private void onItemClick(PlayerInteractEvent event) { - if (event.isCancelled()) return; - if (event.hasItem()) { - Player player = event.getPlayer(); - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (mainItem.getType() == Material.GLASS_BOTTLE) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (event.getClickedBlock().getType() == Material.CAULDRON) { - Levelled cauldron = (Levelled) (event.getClickedBlock().getBlockData()); - if (cauldron.getLevel() > 0) { - Block fire = event.getClickedBlock().getRelative(BlockFace.DOWN); - event.setCancelled(true); + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + private void onItemClick(PlayerInteractEvent event) { + if (!event.hasItem() || event.getAction() != Action.RIGHT_CLICK_BLOCK) return; - event.getClickedBlock().getState().setData(new Cauldron()); // TODO figure you out - cauldron.setLevel(cauldron.getLevel() - 1); - event.getClickedBlock().setBlockData(cauldron); + Player player = event.getPlayer(); - ItemStack waterBottle = Items.DIRTY_WATER.getItemStack(); + EquipmentSlot hand = event.getHand(); + ItemStack mainItem = player.getInventory().getItemInMainHand(); + Block clickedBlock = event.getClickedBlock(); + if (hand == null || clickedBlock == null) return; - if (fire.getType() == Material.FIRE) { - waterBottle = Items.PURIFIED_WATER.getItemStack(); - } - player.playSound(event.getClickedBlock().getLocation(), Sound.ITEM_BOTTLE_FILL, 1, 1); + Material clickedBlockType = clickedBlock.getType(); - if (mainItem.getAmount() > 1) { - mainItem.setAmount(mainItem.getAmount() - 1); - if (player.getInventory().firstEmpty() != -1) - player.getInventory().addItem(waterBottle); - else - player.getWorld().dropItem(player.getLocation(), waterBottle); - } else { - player.getInventory().setItemInMainHand(waterBottle); - } - } - } - } - } - } - } - } + // Click cauldron with bottle to extract water + if (clickedBlockType == Material.WATER_CAULDRON && mainItem.getType() == Material.GLASS_BOTTLE) { + event.setCancelled(true); + + Levelled cauldronData = (Levelled) clickedBlock.getBlockData(); + if (cauldronData.getLevel() == 1) { + clickedBlock.setType(Material.CAULDRON); + } else { + cauldronData.setLevel(cauldronData.getLevel() - 1); + clickedBlock.setBlockData(cauldronData); + } + + ItemStack waterBottle; + if (clickedBlock.getRelative(BlockFace.DOWN).getType() == Material.FIRE) { + waterBottle = Items.PURIFIED_WATER.getItemStack(); + } else { + waterBottle = Items.getBiomeBasedWaterBottle(clickedBlock.getBiome()).getItemStack(); + } + + player.playSound(clickedBlock.getLocation(), Sound.ITEM_BOTTLE_FILL, 1, 1); + + if (mainItem.getAmount() > 1) { + mainItem.setAmount(mainItem.getAmount() - 1); + if (player.getInventory().firstEmpty() != -1) + player.getInventory().addItem(waterBottle); + else + player.getWorld().dropItem(player.getLocation(), waterBottle); + } else { + player.getInventory().setItemInMainHand(waterBottle); + } + } + + // Click cauldron with water bottle to fill + else if (clickedBlockType == Material.WATER_CAULDRON || clickedBlockType == Material.CAULDRON && Items.Tags.WATER_BOTTLE.isTagged(mainItem)) { + if (clickedBlockType == Material.WATER_CAULDRON) { + Levelled cauldronData = (Levelled) clickedBlock.getBlockData(); + if (cauldronData.getLevel() >= cauldronData.getMaximumLevel()) return; + cauldronData.setLevel(cauldronData.getLevel() + 1); + clickedBlock.setBlockData(cauldronData); + } else { + clickedBlock.setType(Material.WATER_CAULDRON); + } + event.setCancelled(true); + mainItem.setAmount(0); + player.getInventory().addItem(ItemType.GLASS_BOTTLE.createItemStack()); + } + } } diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java index 739c5eb..4aa2981 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java @@ -3,7 +3,6 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Entity; -import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -14,21 +13,18 @@ import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.config.Config; import tk.shanebee.survival.config.Lang; import tk.shanebee.survival.data.PlayerData; import tk.shanebee.survival.events.ThirstLevelChangeEvent; +import tk.shanebee.survival.item.Item; import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.item.items.drinks.DrinkItem; import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.managers.StatusManager; -import tk.shanebee.survival.util.Utils; import java.util.ArrayList; import java.util.List; @@ -56,81 +52,36 @@ private void onConsume(PlayerItemConsumeEvent event) { if (event.isCancelled()) return; final Player player = event.getPlayer(); PlayerData playerData = playerManager.getPlayerData(player); - ItemStack item = event.getItem(); + ItemStack itemStack = event.getItem(); int change = 0; - switch (event.getItem().getType()) { - case POTION: - if (config.mechanics_thirst_purify_water) { - if (checkWaterBottle(item)) { - if (Items.DIRTY_WATER.is(item)) { - change = config.mechanics_thirst_rep_dirty_water; - Random rand = new Random(); - if (rand.nextInt(10) + 1 <= 5) { - player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); - } - } else if (Items.CLEAN_WATER.is(item)) { - change = config.mechanics_thirst_rep_clean_water; - Random rand = new Random(); - if (rand.nextInt(10) + 1 <= 2) { - player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); - } - } else if (Items.PURIFIED_WATER.is(item)) { - change = config.mechanics_thirst_rep_pure_water; - } else if (Items.COFFEE.is(item)) { - change = config.mechanics_thirst_rep_coffee; - } else if (Items.COLD_MILK.is(item)) { - change = config.mechanics_thirst_rep_cold_milk; - } else if (Items.HOT_MILK.is(item)) { - change = config.mechanics_thirst_rep_hot_milk; - player.damage(2); - player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 0)); - Utils.sendColoredMini(player, lang.hot_milk_drink); - } else if (Items.WATER_BOWL.is(item)) { - event.setCancelled(true); - change = handleWaterBowl(player); - } else { - change = config.mechanics_thirst_rep_other_water; - } + Item item = Items.getFromStack(itemStack); + if (item instanceof DrinkItem drinkItem) { + change = drinkItem.getThirstLevel(); + } else { + switch (event.getItem().getType()) { + case POTION: + if (config.mechanics_thirst_purify_water) { + change = config.mechanics_thirst_rep_other_water; + } else { + change = config.mechanics_thirst_rep_water; } - } else { - change = config.mechanics_thirst_rep_water; - } - break; - case MILK_BUCKET: - change = config.mechanics_thirst_rep_milk_bucket; - break; - case MELON_SLICE: - change = config.mechanics_thirst_rep_melon_slice; - break; - case MUSHROOM_STEW: - change = config.mechanics_thirst_rep_mush_stew; - break; - case HONEY_BOTTLE: - change = config.mechanics_thirst_rep_honey_bottle; - break; - case SUSPICIOUS_STEW: - if (Items.SUSPICIOUS_MEAT.is(item)) { - // Remove the bowl from the player's hand afterward - BukkitRunnable runnable = new BukkitRunnable() { - @Override - public void run() { - PlayerInventory inv = player.getInventory(); - if (inv.getItemInMainHand().getType() == Material.BOWL) { - inv.setItemInMainHand(null); - } else if (inv.getItemInOffHand().getType() == Material.BOWL) { - inv.setItemInOffHand(null); - } - } - }; - runnable.runTaskLater(plugin, 1); - return; - } + break; + case MILK_BUCKET: + change = config.mechanics_thirst_rep_milk_bucket; + break; + case MELON_SLICE: + change = config.mechanics_thirst_rep_melon_slice; + break; + case MUSHROOM_STEW: + change = config.mechanics_thirst_rep_mush_stew; + break; + case HONEY_BOTTLE: + change = config.mechanics_thirst_rep_honey_bottle; + break; + } } ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); - Bukkit.getPluginManager().callEvent(thirstEvent); - if (!thirstEvent.isCancelled()) { + if (thirstEvent.callEvent()) { playerData.setThirst(playerData.getThirst() + change); } @@ -142,19 +93,6 @@ public void run() { }, 1L); } - private int handleWaterBowl(Player player) { - int change = config.mechanics_thirst_rep_water_bowl; - player.getInventory().setItemInMainHand(new ItemStack(Material.BOWL)); - if (config.mechanics_thirst_purify_water) { - Random rand = new Random(); - if (rand.nextInt(10) + 1 <= 8) { - player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); - player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); - } - } - return change; - } - @EventHandler private void onExhaustionReached(EntityExhaustionEvent event) { Player player = (Player) event.getEntity(); @@ -181,7 +119,7 @@ private void onFish(PlayerFishEvent event) { if (event.isCancelled()) return; if (event.getState() == PlayerFishEvent.State.CAUGHT_FISH) { Entity caught = event.getCaught(); - if (caught instanceof Item item) { + if (caught instanceof org.bukkit.entity.Item item) { ItemStack stack = item.getItemStack(); if (stack.getType() == Material.POTION && checkWaterBottle(stack)) { item.setItemStack(Items.DIRTY_WATER.getItemStack()); diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java deleted file mode 100644 index 3dd5c03..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleCrafting.java +++ /dev/null @@ -1,98 +0,0 @@ -package tk.shanebee.survival.listeners.item; - -import org.bukkit.Bukkit; -import org.bukkit.FluidCollisionMode; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Waterlogged; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.CraftItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionType; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; - -import java.util.Objects; - - -public class WaterBottleCrafting implements Listener { - - private SurvivalPlugin plugin; - private Config config; - - public WaterBottleCrafting(SurvivalPlugin plugin) { - this.plugin = plugin; - this.config = plugin.getSurvivalConfig(); - } - - @EventHandler - private void onCraft(CraftItemEvent e) { - final Player player = (Player) e.getWhoClicked(); - final CraftingInventory inv = e.getInventory(); - - ItemStack[] bottles = inv.getMatrix(); - ItemStack result = inv.getResult(); - - if (result != null && result.getType() == Material.CLAY) { - for (int i = 0; i < bottles.length; i++) { - if (bottles[i] == null) continue; - if (bottles[i].getType() == Material.POTION) { - final int slot = i + 1; - Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> { - inv.setItem(slot, new ItemStack(Material.BOWL)); - player.updateInventory(); - }, 1); - } - } - } - } - - @EventHandler - private void onFillWaterBottle(PlayerInteractEvent e) { - if (!config.mechanics_thirst_purify_water) return; - Player player = e.getPlayer(); - ItemStack item = e.getItem(); - if (item != null && item.getType() == Material.GLASS_BOTTLE) { - Block targetBlock = player.getTargetBlockExact(5, FluidCollisionMode.ALWAYS); - if (targetBlock == null) return; - if (isWaterBlock(targetBlock)) { - e.setCancelled(true); - if (item.getAmount() > 1) { - if (!player.getInventory().addItem(Items.DIRTY_WATER.getItemStack()).isEmpty()) { - player.getWorld().dropItem(player.getLocation(), Items.DIRTY_WATER.getItemStack()); - } - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) - item.setAmount(item.getAmount() - 1); - } else { - if (player.getInventory().getItemInMainHand().getType() == item.getType()) - player.getInventory().setItemInMainHand(Items.DIRTY_WATER.getItemStack()); - else if (player.getInventory().getItemInOffHand().getType() == item.getType()) - player.getInventory().setItemInOffHand(Items.DIRTY_WATER.getItemStack()); - } - } - } - } - - private boolean isWaterBlock(Block block) { - if (block.getType() == Material.WATER) { - return true; - } - BlockData data = block.getBlockData(); - return data instanceof Waterlogged && ((Waterlogged) data).isWaterlogged(); - } - - private boolean checkWaterBottle(ItemStack bottle) { - - return ((PotionMeta) Objects.requireNonNull(bottle.getItemMeta())).getBasePotionData().getType() == PotionType.WATER; - - } - -} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleListener.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleListener.java new file mode 100644 index 0000000..2113693 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleListener.java @@ -0,0 +1,61 @@ +package tk.shanebee.survival.listeners.item; + +import org.bukkit.FluidCollisionMode; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.data.Waterlogged; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import tk.shanebee.survival.SurvivalPlugin; +import tk.shanebee.survival.config.Config; +import tk.shanebee.survival.item.Items; + + +public class WaterBottleListener implements Listener { + + private final Config config; + + public WaterBottleListener(SurvivalPlugin plugin) { + this.config = plugin.getSurvivalConfig(); + } + + @EventHandler // Fill a bottle resulting in a water bottle + private void onFillWaterBottle(PlayerInteractEvent event) { + if (!config.mechanics_thirst_purify_water) return; + Player player = event.getPlayer(); + ItemStack item = event.getItem(); + EquipmentSlot hand = event.getHand(); + Action action = event.getAction(); + if (action != Action.RIGHT_CLICK_AIR && action != Action.RIGHT_CLICK_BLOCK) return; + if (item == null || hand == null || item.getType() != Material.GLASS_BOTTLE) return; + + Block targetBlock = player.getTargetBlockExact(5, FluidCollisionMode.ALWAYS); + if (targetBlock == null || !isWaterBlock(targetBlock)) return; + event.setCancelled(true); + + ItemStack waterBottle = Items.getBiomeBasedWaterBottle(targetBlock.getBiome()).getItemStack(); + if (item.getAmount() > 1) { + if (!player.getInventory().addItem(waterBottle).isEmpty()) { + player.getWorld().dropItem(player.getLocation(), waterBottle); + } + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) + item.setAmount(item.getAmount() - 1); + } else { + player.getInventory().setItem(hand, waterBottle); + } + } + + private boolean isWaterBlock(Block block) { + if (block.getType() == Material.WATER) { + return true; + } + return block.getBlockData() instanceof Waterlogged waterlogged && waterlogged.isWaterlogged(); + } + +} diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java index 3f08c33..5f8c951 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java +++ b/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java @@ -1,6 +1,7 @@ package tk.shanebee.survival.listeners.item; import org.bukkit.Bukkit; +import org.bukkit.Keyed; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; @@ -11,18 +12,20 @@ import org.bukkit.block.data.Lightable; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.CraftingInventory; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitScheduler; +import org.bukkit.util.Vector; import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.events.WaterBowlFillEvent; import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.item.Recipes; import tk.shanebee.survival.util.Utils; import java.util.Random; @@ -41,16 +44,31 @@ public WaterBowlListener(SurvivalPlugin plugin) { this.clayEnabled = plugin.getSurvivalConfig().recipes_clay; } - @EventHandler(priority = EventPriority.HIGHEST) - private void onConsume(PlayerItemConsumeEvent event) { - if (this.thirstEnabled || event.isCancelled()) return; - - if (Items.WATER_BOWL.is(event.getItem())) { - event.setCancelled(true); + @EventHandler // Leave an empty bow in the crafting grid after crafting clay + private void onCraft(CraftItemEvent event) { + if (!(event.getRecipe() instanceof Keyed keyed) || !keyed.getKey().equals(Recipes.CLAY.getKeys().getFirst())) + return; + + final Player player = (Player) event.getWhoClicked(); + final CraftingInventory inventory = event.getInventory(); + + ItemStack[] ingredients = inventory.getMatrix(); + ItemStack result = inventory.getResult(); + + if (result != null && result.getType() == Material.CLAY) { + for (int i = 0; i < ingredients.length; i++) { + if (ingredients[i] != null && Items.WATER_BOWL.is(ingredients[i])) { + int slot = i + 1; + Bukkit.getServer().getScheduler().runTaskLater(this.plugin, () -> { + inventory.setItem(slot, new ItemStack(Material.BOWL)); + player.updateInventory(); + }, 1); + } + } } } - @EventHandler + @EventHandler // Extinguish a campfire private void onExtinguishCampfire(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block clickedBlock = event.getClickedBlock(); @@ -73,7 +91,7 @@ private void onExtinguishCampfire(PlayerInteractEvent event) { Utils.spawnParticle(clickedBlock.getLocation().add(0.5, 0.5, 0.5), Particle.FALLING_WATER, 100, 0.25, 0.2, 0.25); } - @EventHandler + @EventHandler // Drop bowl into water to fill bowl private void onDrop(ItemSpawnEvent event) { if (event.isCancelled()) return; if (!this.thirstEnabled && !this.clayEnabled) return; @@ -91,7 +109,8 @@ private void onDrop(ItemSpawnEvent event) { int amount = itemDrop.getItemStack().getAmount(); itemDrop.remove(); for (int i = 0; i < amount; i++) { - world.dropItem(itemLocation, Items.WATER_BOWL.getItemStack()); + world.dropItem(itemLocation, Items.WATER_BOWL.getItemStack(), item -> + item.setVelocity(new Vector(0, 0.2, 0))); } }, 20); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index cdc0f2f..2d28a45 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -205,20 +205,13 @@ Mechanics: # The amount of damage a player takes when their thirst level is empty damage-rate: 1.0 # The level of thirst that will be replenished when a player consumes this item + # Some item's replenish thirst levels are handled in the items.yml file replenish-level: beetroot-soup: 6 melon-slice: 6 mushroom-stew: 12 - water-bowl: 10 - coffee: 23 - cold-milk: 15 - hot-milk: 10 milk-bucket: 30 honey-bottle: 16 - # Only used if PurifyWater is enabled - dirty-water: 7 - clean-water: 14 - purified-water: 24 # This can be used for any other water bottle (such as custom ones or just vanilla water bottles) # If you do not want players to get thirst from other water bottles leave this at 0 other-water: 0 diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 6b2b4f2..e0a561d 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -268,25 +268,40 @@ items: name: "Workbench" # DRINKS - clean_water: - name: "Clean Water" - color: 1213666 dirty_water: name: "Dirty Water" + color: 0xA46F29 + thirst_level: 7 + salty_water: + name: "Salty Water" + color: 0x3DE294 + thirst_level: 3 + murky_water: + name: "Murky Water" color: 12769874 + thirst_level: 3 + clean_water: + name: "Clean Water" + color: 1213666 + thirst_level: 14 purified_water: name: "Purified Water" + thirst_level: 24 color: 0x00FFFF coffee: name: "Coffee" + thirst_level: 23 cold_milk: name: "Cold Milk" color: 16250871 + thirst_level: 15 hot_milk: name: "Hot Milk" color: 16110486 + thirst_level: 10 water_bowl: name: "Water Bowl" + thirst_level: 10 # FOOD suspicious_meat: diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json index 02f67bd..5233963 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/clean_water.json @@ -4,7 +4,7 @@ "model": "minecraft:item/potion", "tints": [ { - "type": "minecraft:potion", + "type": "minecraft:dye", "default": -13083194 } ] diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json b/src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json index deb22fd..3746592 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/cold_milk.json @@ -4,7 +4,7 @@ "model": "survival_plus:item/cold_milk", "tints": [ { - "type": "minecraft:potion", + "type": "minecraft:dye", "default": -13083194 } ] diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json index 02f67bd..5233963 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/dirty_water.json @@ -4,7 +4,7 @@ "model": "minecraft:item/potion", "tints": [ { - "type": "minecraft:potion", + "type": "minecraft:dye", "default": -13083194 } ] diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json b/src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json index a8ecf0c..f5b9b99 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/hot_milk.json @@ -4,7 +4,7 @@ "model": "survival_plus:item/hot_milk", "tints": [ { - "type": "minecraft:potion", + "type": "minecraft:dye", "default": -13083194 } ] diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/murky_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/murky_water.json new file mode 100644 index 0000000..5233963 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/murky_water.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "minecraft:item/potion", + "tints": [ + { + "type": "minecraft:dye", + "default": -13083194 + } + ] + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json index 02f67bd..5233963 100644 --- a/src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json +++ b/src/main/resources/resource-pack/assets/survival_plus/items/purified_water.json @@ -4,7 +4,7 @@ "model": "minecraft:item/potion", "tints": [ { - "type": "minecraft:potion", + "type": "minecraft:dye", "default": -13083194 } ] diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/salty_water.json b/src/main/resources/resource-pack/assets/survival_plus/items/salty_water.json new file mode 100644 index 0000000..5233963 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/salty_water.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "minecraft:model", + "model": "minecraft:item/potion", + "tints": [ + { + "type": "minecraft:dye", + "default": -13083194 + } + ] + } +} From ddc0f861b66e0b756c67d61bb28aaf2d7ce9ceb2 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 01:58:14 -0800 Subject: [PATCH 052/133] ItemConfig - move, and add match config --- .../survival/{item => config}/ItemConfig.java | 42 +++++++++++++++---- .../java/tk/shanebee/survival/item/Item.java | 1 + .../tk/shanebee/survival/item/Nutrition.java | 3 +- 3 files changed, 36 insertions(+), 10 deletions(-) rename src/main/java/tk/shanebee/survival/{item => config}/ItemConfig.java (74%) diff --git a/src/main/java/tk/shanebee/survival/item/ItemConfig.java b/src/main/java/tk/shanebee/survival/config/ItemConfig.java similarity index 74% rename from src/main/java/tk/shanebee/survival/item/ItemConfig.java rename to src/main/java/tk/shanebee/survival/config/ItemConfig.java index d8992e5..efedf2e 100644 --- a/src/main/java/tk/shanebee/survival/item/ItemConfig.java +++ b/src/main/java/tk/shanebee/survival/config/ItemConfig.java @@ -1,22 +1,25 @@ -package tk.shanebee.survival.item; +package tk.shanebee.survival.config; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import tk.shanebee.survival.SurvivalPlugin; +import tk.shanebee.survival.item.Nutrition; import tk.shanebee.survival.util.Utils; import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.List; public class ItemConfig { - static ItemConfig INSTANCE; + public static ItemConfig INSTANCE; private final SurvivalPlugin plugin = SurvivalPlugin.getInstance(); private FileConfiguration settings; private File configFile; - ItemConfig() { + public ItemConfig() { INSTANCE = this; loadDefaultSettings(); Nutrition.setup(); @@ -35,9 +38,30 @@ private void loadDefaultSettings() { } else { settings = YamlConfiguration.loadConfiguration(configFile); } + matchConfig(this.settings, this.configFile); } - int[] getNutritionValues(String key, int carbs, int proteins, int vitamins) { + private void matchConfig(FileConfiguration config, File file) { + try { + boolean hasUpdated = false; + InputStream is = plugin.getResource(file.getName()); + assert is != null; + InputStreamReader isr = new InputStreamReader(is); + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(isr); + for (String key : defConfig.getConfigurationSection("").getKeys(true)) { + if (!config.contains(key)) { + config.set(key, defConfig.get(key)); + hasUpdated = true; + } + } + if (hasUpdated) + config.save(file); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public int[] getNutritionValues(String key, int carbs, int proteins, int vitamins) { String path = "nutritions." + key + "."; String[] paths = new String[]{path + "carbs", path + "proteins", path + "vitamins"}; int[] nutritions = new int[]{carbs, proteins, vitamins}; @@ -59,11 +83,11 @@ int[] getNutritionValues(String key, int carbs, int proteins, int vitamins) { return nutritions; } - String getName(String key) { + public String getName(String key) { return this.settings.getString("items." + key + ".name"); } - List getLore(String key) { + public List getLore(String key) { String path = "items." + key + ".lore"; if (this.settings.contains(path)) { return this.settings.getStringList(path); @@ -71,7 +95,7 @@ List getLore(String key) { return null; } - int getMaxDamage(String key) { + public int getMaxDamage(String key) { String path = "items." + key + ".max_damage"; if (this.settings.contains(path)) { return this.settings.getInt(path); @@ -79,7 +103,7 @@ int getMaxDamage(String key) { return 0; } - int getRepairCost(String key) { + public int getRepairCost(String key) { String path = "items." + key + ".repair_cost"; if (this.settings.contains(path)) { return this.settings.getInt(path); @@ -87,7 +111,7 @@ int getRepairCost(String key) { return 0; } - double getRepairPercent(String key) { + public double getRepairPercent(String key) { String path = "items." + key + ".repair_percent"; if (this.settings.contains(path)) { return this.settings.getDouble(path); diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index bafe678..745baf1 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -9,6 +9,7 @@ import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; +import tk.shanebee.survival.config.ItemConfig; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; diff --git a/src/main/java/tk/shanebee/survival/item/Nutrition.java b/src/main/java/tk/shanebee/survival/item/Nutrition.java index 802594f..4b046a0 100644 --- a/src/main/java/tk/shanebee/survival/item/Nutrition.java +++ b/src/main/java/tk/shanebee/survival/item/Nutrition.java @@ -7,6 +7,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import tk.shanebee.survival.config.ItemConfig; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; @@ -21,7 +22,7 @@ @SuppressWarnings("unused") public class Nutrition implements Keyed { - static void setup() { + public static void setup() { } private static final Map NUTRITION_MAP = new LinkedHashMap<>(); From 377fed219a6bfdcc72b7a5cf8ee47b40cf51b50c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 02:33:35 -0800 Subject: [PATCH 053/133] Nutrition - update - add missing items - add a debug method and re-work the command a bit --- .../survival/commands/NutritionCommand.java | 19 ++------ .../tk/shanebee/survival/item/Nutrition.java | 44 ++++++++++++++++++- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java index d3ea9dd..4d3144f 100644 --- a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java @@ -6,9 +6,8 @@ import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.gui.NutritionGUI; import tk.shanebee.survival.item.Nutrition; -import tk.shanebee.survival.util.Utils; -public class NutritionCommand extends BaseCommand{ +public class NutritionCommand extends BaseCommand { public NutritionCommand(SurvivalPlugin plugin) { super(plugin); @@ -22,22 +21,12 @@ Argument register() { Player player = info.sender(); NutritionGUI gui = new NutritionGUI(this.plugin); gui.openInventory(player, 0); - }).then(LiteralArgument.literal("debug") + }) + .then(LiteralArgument.literal("debug") .withPermission(Permissions.COMMAND_NUTRITION_DEBUG) .executes(info -> { - itemTest(); + Nutrition.debug(); })); } - // Used for debugging edible items - private void itemTest() { - Nutrition.getAllNutritions().forEach(nutrition -> { - String key = nutrition.getKey().toString().replace(":", ":"); - String item = nutrition.getItemStack().toString().replace("{", "{").replace("}", "}"); - Utils.logMini("Nutrition%s:", nutrition.isCustom() ? "(&cCUSTOM)&7" : ""); - Utils.logMini(" - Key: %s", key); - Utils.logMini(" - Item: &e%s", item); - }); - } - } diff --git a/src/main/java/tk/shanebee/survival/item/Nutrition.java b/src/main/java/tk/shanebee/survival/item/Nutrition.java index 4b046a0..4e56aea 100644 --- a/src/main/java/tk/shanebee/survival/item/Nutrition.java +++ b/src/main/java/tk/shanebee/survival/item/Nutrition.java @@ -1,16 +1,20 @@ package tk.shanebee.survival.item; import com.google.common.base.Preconditions; +import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Keyed; import org.bukkit.Material; import org.bukkit.NamespacedKey; +import org.bukkit.Registry; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ItemType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import tk.shanebee.survival.config.ItemConfig; import tk.shanebee.survival.util.Utils; import java.util.ArrayList; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -41,6 +45,7 @@ public static void setup() { public static final Nutrition BEETROOT = register(0, 0, 35, Material.BEETROOT); public static final Nutrition DRIED_KELP = register(15, 50, 50, Material.DRIED_KELP); public static final Nutrition SWEET_BERRIES = register(40, 0, 60, Material.SWEET_BERRIES); + public static final Nutrition GLOW_BERRIES = register(40, 0, 60, Material.GLOW_BERRIES); // PREPARED FOODS public static final Nutrition BREAD = register(300, 25, 12, Material.BREAD); @@ -74,12 +79,13 @@ public static void setup() { public static final Nutrition SPIDER_EYE = register(0, 50, 0, Material.SPIDER_EYE); public static final Nutrition ROTTEN_FLESH = register(0, 25, 25, Material.ROTTEN_FLESH); public static final Nutrition MILK_BUCKET = register(0, 250, 0, Material.MILK_BUCKET); + public static final Nutrition HONEY_BOTTLE = register(17, 0, 60, Material.HONEY_BOTTLE); @NotNull private static Nutrition register(int carbs, int proteins, int vitamins, Material material) { String key = material.toString().toLowerCase(Locale.ROOT); int[] nutritions = ItemConfig.INSTANCE.getNutritionValues(key, carbs, proteins, vitamins); - NamespacedKey namespacedKey = Utils.getNamespacedKey( "nutrition_" + key); + NamespacedKey namespacedKey = Utils.getNamespacedKey("nutrition_" + key); ItemStack itemStack = new ItemStack(material); return register(namespacedKey, false, itemStack, nutritions[0], nutritions[1], nutritions[2]); } @@ -135,6 +141,42 @@ public static boolean unregister(@NotNull NamespacedKey key) { return false; } + @SuppressWarnings("UnstableApiUsage") + public static void debug() { + Nutrition.getAllNutritions().stream().sorted(Comparator.comparing(nutrition -> nutrition.getKey().toString())) + .forEach(nutrition -> { + String nutritionKey = nutrition.getKey().toString().replace(":", ":"); + String itemKey = nutrition.getItemStack().getType().getKey().toString().replace(":", ":"); + Utils.logMini("Nutrition%s:", nutrition.isCustom() ? "(CUSTOM)" : ""); + Utils.logMini(" - Key: %s", nutritionKey); + Utils.logMini(" - Item: %s", itemKey); + Utils.logMini(" - Values: Carbs: %s, Proteins: %s, Vitamins: %s", + nutrition.getCarbs(), nutrition.getProteins(), nutrition.getVitamins()); + }); + + List nutritionMaterials = new ArrayList<>(); + getAllNutritions().forEach(nutrition -> nutritionMaterials.add(nutrition.itemStack.getType())); + + Utils.logMini(" "); + Utils.logMini("Nutrition Materials Missing:"); + for (ItemType itemType : Registry.ITEM.stream().sorted(Comparator.comparing(itemType -> itemType.getKey().toString())).toList()) { + ItemStack itemStack = itemType.createItemStack(); + Material type = itemStack.getType(); + if (itemStack.hasData(DataComponentTypes.FOOD)) { + if (!nutritionMaterials.contains(type)) { + Utils.logMini(" - Nutrition missing for food item: %s", type.getKey().toString()); + } + } else if (itemStack.hasData(DataComponentTypes.CONSUMABLE)) { + if (!nutritionMaterials.contains(type)) { + Utils.logMini(" - <#F09616>Nutrition missing for consumable item: %s", type.getKey().toString()); + } + } else if (nutritionMaterials.contains(type)) { + if (type == Material.CAKE) continue; + Utils.logMini(" - Nutrition present for non food item: %s", type.getKey().toString()); + } + } + } + private final NamespacedKey key; private final boolean custom; private final int carbs; From 8b021b7989ccb7f4c5cd5771a1fdd0d1bfbdae35 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 02:38:05 -0800 Subject: [PATCH 054/133] Campfire - remove unused listener - this is handled by the item itself --- .../survival/listeners/block/Campfire.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java index d83fa21..6c9cac4 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.listeners.block; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -9,11 +8,9 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockCookEvent; -import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; import java.util.Random; @@ -25,21 +22,6 @@ public Campfire(SurvivalPlugin plugin) { this.plugin = plugin; } - // When placing a campfire, turn it off (Requiring a player to light it manually) - @EventHandler - private void onPlaceCampfire(BlockPlaceEvent event) { - if (event.getBlockPlaced().getType() != Material.CAMPFIRE) return; - if (Items.CAMPFIRE.is(event.getItemInHand())) { - Lightable camp = ((Lightable) event.getBlock().getBlockData()); - camp.setLit(false); - event.getBlock().setBlockData(camp); - - } else { - if (event.getPlayer().getGameMode() == GameMode.CREATIVE) return; - event.setCancelled(true); - } - } - // Hit an unlit campfire with a stick to light it @EventHandler private void lightFire(PlayerInteractEvent event) { From d23e1abb3c5584bbe6fc833982a5587eec303e72 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 02:48:56 -0800 Subject: [PATCH 055/133] LivingSlime - small cleanup --- .../listeners/entity/LivingSlime.java | 70 +++++++++---------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java b/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java index a617088..b51355d 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java @@ -1,10 +1,5 @@ package tk.shanebee.survival.listeners.entity; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import tk.shanebee.survival.util.Utils; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Particle; @@ -16,12 +11,16 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.inventory.ItemStack; - import tk.shanebee.survival.SurvivalPlugin; +import tk.shanebee.survival.util.Utils; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; public class LivingSlime implements Listener { - private SurvivalPlugin plugin; + private final SurvivalPlugin plugin; public LivingSlime(SurvivalPlugin plugin) { this.plugin = plugin; @@ -30,48 +29,45 @@ public LivingSlime(SurvivalPlugin plugin) { @EventHandler private void onGhastTearSlimeBlock(ItemSpawnEvent e) { if (e.getEntityType() == EntityType.ITEM) { - Item i = e.getEntity(); - if (i.getItemStack().getType() == Material.GHAST_TEAR) { - Bukkit.getScheduler().runTaskLater(plugin, initRunnable(i), 20); + Item itemEntity = e.getEntity(); + if (itemEntity.getItemStack().getType() == Material.GHAST_TEAR) { + Bukkit.getScheduler().runTaskLater(this.plugin, initRunnable(itemEntity), 20); } } } - private Runnable initRunnable(Item i) { - final Item f_i = i; + private Runnable initRunnable(Item itemEntity) { return () -> { List slimeBlocks = new ArrayList<>(); - slimeBlocks.add(f_i.getLocation().add(0, -1, 0).getBlock()); - slimeBlocks.add(f_i.getLocation().add(0, -1, 1).getBlock()); - slimeBlocks.add(f_i.getLocation().add(0, -1, -1).getBlock()); - slimeBlocks.add(f_i.getLocation().add(1, -1, 0).getBlock()); - slimeBlocks.add(f_i.getLocation().add(-1, -1, 0).getBlock()); - slimeBlocks.add(f_i.getLocation().add(0, 0, 1).getBlock()); - slimeBlocks.add(f_i.getLocation().add(0, 0, -1).getBlock()); - slimeBlocks.add(f_i.getLocation().add(1, 0, 0).getBlock()); - slimeBlocks.add(f_i.getLocation().add(-1, 0, 0).getBlock()); - slimeBlocks.add(f_i.getLocation().add(1, 0, 1).getBlock()); - slimeBlocks.add(f_i.getLocation().add(1, 0, -1).getBlock()); - slimeBlocks.add(f_i.getLocation().add(-1, 0, 1).getBlock()); - slimeBlocks.add(f_i.getLocation().add(-1, 0, -1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(0, -1, 0).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(0, -1, 1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(0, -1, -1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(1, -1, 0).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(-1, -1, 0).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(0, 0, 1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(0, 0, -1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(1, 0, 0).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(-1, 0, 0).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(1, 0, 1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(1, 0, -1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(-1, 0, 1).getBlock()); + slimeBlocks.add(itemEntity.getLocation().add(-1, 0, -1).getBlock()); - ItemStack i_f_i = f_i.getItemStack(); - Iterator it = slimeBlocks.iterator(); + ItemStack itemStack = itemEntity.getItemStack(); + Iterator blockIterator = slimeBlocks.iterator(); Block slimeBlock; - while (it.hasNext()) { - slimeBlock = it.next(); - if (slimeBlock != null && slimeBlock.getType() == Material.SLIME_BLOCK && f_i.isOnGround()) { - if (i_f_i.getAmount() > 1) - i_f_i.setAmount(i_f_i.getAmount() - 1); - else - f_i.remove(); + while (blockIterator.hasNext()) { + slimeBlock = blockIterator.next(); + if (slimeBlock != null && slimeBlock.getType() == Material.SLIME_BLOCK && itemEntity.isOnGround()) { + if (itemStack.getAmount() > 1) + itemStack.setAmount(itemStack.getAmount() - 1); - if (i_f_i.getAmount() <= 0) - f_i.remove(); + if (itemStack.getAmount() <= 0) + itemEntity.remove(); slimeBlock.setType(Material.AIR); - Slime slime = (Slime) f_i.getWorld().spawnEntity(slimeBlock.getLocation(), EntityType.SLIME); + Slime slime = itemEntity.getWorld().spawn(slimeBlock.getLocation(), Slime.class); slime.setSize(2); Utils.spawnParticle(slimeBlock.getLocation().add(0.5, 0.5, 0.5), Particle.CLOUD, 20, 0.5, 0.5, 0.5); From 15bf5431776f6efa9b277491d506592b67b856d6 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 02:54:57 -0800 Subject: [PATCH 056/133] MerchantManager - cleanup --- .../listeners/entity/MerchantTrades.java | 6 +- .../listeners/server/InventoryUpdate.java | 2 - .../survival/managers/ItemManager.java | 34 ----------- .../survival/managers/MerchantManager.java | 58 +++++++------------ .../tk/shanebee/survival/util/ItemUtils.java | 20 +++++++ 5 files changed, 44 insertions(+), 76 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/managers/ItemManager.java diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java b/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java index 3500b99..4234ddd 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java @@ -10,7 +10,7 @@ public class MerchantTrades implements Listener { - private MerchantManager merchantManager; + private final MerchantManager merchantManager; public MerchantTrades(SurvivalPlugin plugin) { this.merchantManager = plugin.getMerchantManager(); @@ -19,8 +19,8 @@ public MerchantTrades(SurvivalPlugin plugin) { @EventHandler private void onClickVillager(PlayerInteractEntityEvent event) { Entity entity = event.getRightClicked(); - if (entity instanceof Merchant) { - this.merchantManager.updateRecipes(entity); + if (entity instanceof Merchant merchant) { + this.merchantManager.updateRecipes(merchant); } } diff --git a/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java b/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java index 2d51d14..e45592b 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java @@ -10,8 +10,6 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.ItemManager; @SuppressWarnings("deprecation") public class InventoryUpdate implements Listener { diff --git a/src/main/java/tk/shanebee/survival/managers/ItemManager.java b/src/main/java/tk/shanebee/survival/managers/ItemManager.java deleted file mode 100644 index 2dbd70b..0000000 --- a/src/main/java/tk/shanebee/survival/managers/ItemManager.java +++ /dev/null @@ -1,34 +0,0 @@ -package tk.shanebee.survival.managers; - -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; - -import java.util.Map; - -/** - * Manager for custom SurvivalPlus items - */ -@SuppressWarnings({"ConstantConditions", "removal"}) -public class ItemManager { - - /** - * Apply the attributes from an {@link Items} to an existing ItemStack - * - * @param itemStack Current ItemStack to apply attributes to - * @param items Item to grab data from - */ - public static void applyAttribute(ItemStack itemStack, Item items) { - ItemStack from = items.getItemStack(); - ItemMeta metaTo = itemStack.getItemMeta(); - ItemMeta metaFrom = from.getItemMeta(); - Map enchants = metaTo.getEnchants(); - for (Enchantment enchantment : enchants.keySet()) { - metaFrom.addEnchant(enchantment, enchants.get(enchantment), true); - } - itemStack.setItemMeta(metaFrom); - } - -} diff --git a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java index d9cbace..0e73120 100644 --- a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java +++ b/src/main/java/tk/shanebee/survival/managers/MerchantManager.java @@ -1,7 +1,6 @@ package tk.shanebee.survival.managers; import org.bukkit.Material; -import org.bukkit.entity.Entity; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Merchant; import org.bukkit.inventory.MerchantRecipe; @@ -9,6 +8,7 @@ import tk.shanebee.survival.config.Config; import tk.shanebee.survival.item.Item; import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.util.ItemUtils; import java.util.HashMap; import java.util.Map; @@ -28,45 +28,29 @@ public MerchantManager(SurvivalPlugin plugin) { * Update a merchants recipes *

Replaces existing MerchantRecipes with ones that use custom {@link Items}

* - * @param entity Merchant to update + * @param merchant Merchant to update */ - public void updateRecipes(Entity entity) { - if (entity instanceof Merchant) { - Merchant merchant = ((Merchant) entity); - - for (int i = 0; i < merchant.getRecipes().size(); i++) { - MerchantRecipe merchantRecipe = merchant.getRecipe(i); - Material result = merchantRecipe.getResult().getType(); - Recipe recipe = Recipe.getByMaterial(result); - if (recipe != null && canUpdate(result)) { - merchant.setRecipe(i, recipe.updateRecipe(merchantRecipe)); - } + public void updateRecipes(Merchant merchant) { + for (int i = 0; i < merchant.getRecipes().size(); i++) { + MerchantRecipe merchantRecipe = merchant.getRecipe(i); + Material result = merchantRecipe.getResult().getType(); + Recipe recipe = Recipe.getByMaterial(result); + if (recipe != null && canUpdate(result)) { + merchant.setRecipe(i, recipe.updateRecipe(merchantRecipe)); } } } private boolean canUpdate(Material material) { - switch (material) { - case CHAINMAIL_HELMET: - case CHAINMAIL_CHESTPLATE: - case CHAINMAIL_LEGGINGS: - case CHAINMAIL_BOOTS: - return this.config.mechanics_reinforced_armor; - case IRON_HELMET: - case IRON_CHESTPLATE: - case IRON_LEGGINGS: - case IRON_BOOTS: - case DIAMOND_HELMET: - case DIAMOND_CHESTPLATE: - case DIAMOND_LEGGINGS: - case DIAMOND_BOOTS: - return this.config.mechanics_slow_armor; - case STONE_HOE: - return this.config.survival_sickle_stone; - case DIAMOND_HOE: - return this.config.survival_sickle_diamond; - } - return false; + return switch (material) { + case CHAINMAIL_HELMET, CHAINMAIL_CHESTPLATE, CHAINMAIL_LEGGINGS, CHAINMAIL_BOOTS -> + this.config.mechanics_reinforced_armor; + case IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS, DIAMOND_HELMET, DIAMOND_CHESTPLATE, + DIAMOND_LEGGINGS, DIAMOND_BOOTS -> this.config.mechanics_slow_armor; + case STONE_HOE -> this.config.survival_sickle_stone; + case DIAMOND_HOE -> this.config.survival_sickle_diamond; + default -> false; + }; } /** @@ -114,10 +98,10 @@ public enum Recipe { public MerchantRecipe updateRecipe(MerchantRecipe oldRecipe) { ItemStack old = oldRecipe.getResult().clone(); - ItemManager.applyAttribute(old, this.items); + ItemUtils.applyEnchantments(old, this.items); MerchantRecipe recipe = new MerchantRecipe(old, oldRecipe.getUses(), oldRecipe.getMaxUses(), - oldRecipe.hasExperienceReward(), oldRecipe.getVillagerExperience(), - oldRecipe.getPriceMultiplier()); + oldRecipe.hasExperienceReward(), oldRecipe.getVillagerExperience(), + oldRecipe.getPriceMultiplier()); recipe.setIngredients(oldRecipe.getIngredients()); return recipe; } diff --git a/src/main/java/tk/shanebee/survival/util/ItemUtils.java b/src/main/java/tk/shanebee/survival/util/ItemUtils.java index 61058f6..071ceae 100644 --- a/src/main/java/tk/shanebee/survival/util/ItemUtils.java +++ b/src/main/java/tk/shanebee/survival/util/ItemUtils.java @@ -3,11 +3,14 @@ import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.Component; import org.bukkit.Sound; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; +import tk.shanebee.survival.item.Item; +import java.util.Map; import java.util.Random; /** @@ -80,4 +83,21 @@ public static Component getItemNameComponent(ItemStack itemStack) { return itemStack.getItemMeta().displayName(); } + /** + * Apply the enchantments from an {@link Item} to an existing ItemStack + * + * @param itemStack Current ItemStack to apply enchantments to + * @param item Item to grab data from + */ + public static void applyEnchantments(ItemStack itemStack, Item item) { + ItemStack from = item.getItemStack(); + ItemMeta metaTo = itemStack.getItemMeta(); + ItemMeta metaFrom = from.getItemMeta(); + Map enchants = metaTo.getEnchants(); + for (Enchantment enchantment : enchants.keySet()) { + metaFrom.addEnchant(enchantment, enchants.get(enchantment), true); + } + itemStack.setItemMeta(metaFrom); + } + } From 4dfa80fbe50fc6f256d97fe9eb9b9b876ea66837 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 11:49:07 -0800 Subject: [PATCH 057/133] Energy updates --- .../tk/shanebee/survival/config/Config.java | 38 ++-- .../survival/listeners/EventManager.java | 2 +- .../listeners/player/EnergyChange.java | 172 ++++++++---------- .../shanebee/survival/tasks/EnergyDrain.java | 67 +++---- .../java/tk/shanebee/survival/util/Utils.java | 12 -- src/main/resources/config.yml | 5 +- 6 files changed, 125 insertions(+), 171 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 1dc0af4..e9f495d 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -52,21 +52,20 @@ public class Config { // MECHANICS public boolean MECHANICS_SHARED_WORKBENCH; - public boolean MECHANICS_PREVENT_NIGHT_SKIP; // ENERGY public boolean mechanics_energy_enabled; public double mechanics_energy_start; public double mechanics_energy_respawn; - public boolean MECHANICS_ENERGY_WARNING; - public double MECHANICS_ENERGY_DRAIN_RATE; - public double MECHANICS_ENERGY_DRAIN_COLD_RATE; - public double MECHANICS_ENERGY_REFRESH_RATE_BED; - public double MECHANICS_ENERGY_REFRESH_RATE_CHAIR; - public double MECHANICS_ENERGY_EXHAUSTION; + public boolean mechanics_energy_warning; + public double mechanics_energy_drain_rate; + public double mechanics_energy_drain_cold_rate; + public double mechanics_energy_refresh_rate_bed; + public double mechanics_energy_refresh_rate_chair; + public double mechanics_energy_exhaustion; public boolean mechanics_energy_coffee_enabled; - public boolean MECHANICS_ENERGY_ABSORPTION; - public boolean MECHANICS_ENERGY_HASTE; + public boolean mechanics_energy_absorption; + public boolean mechanics_energy_haste; public boolean mechanics_slow_armor; public boolean mechanics_reinforced_armor; @@ -144,7 +143,7 @@ public class Config { public boolean mechanics_farming_products_cookie; public boolean mechanics_farming_products_bread; - public boolean MECHANICS_CHAIRS_ENABLED; + public boolean mechanics_chairs_enabled; public int MECHANICS_CHAIRS_MAX_WIDTH; public List MECHANICS_CHAIRS_BLOCKS; @@ -308,19 +307,18 @@ private void loadSettings() { // MECHANICS this.MECHANICS_SHARED_WORKBENCH = settings.getBoolean("Mechanics.SharedWorkbench"); - this.MECHANICS_PREVENT_NIGHT_SKIP = settings.getBoolean("Mechanics.Prevent-Night-Skip"); this.mechanics_energy_enabled = settings.getBoolean("Mechanics.Energy.enabled"); this.mechanics_energy_start = settings.getDouble("Mechanics.Energy.start-level"); this.mechanics_energy_respawn = settings.getDouble("Mechanics.Energy.respawn-level"); - this.MECHANICS_ENERGY_WARNING = settings.getBoolean("Mechanics.Energy.warning"); - this.MECHANICS_ENERGY_DRAIN_RATE = settings.getDouble("Mechanics.Energy.drain-rate"); - this.MECHANICS_ENERGY_DRAIN_COLD_RATE = settings.getDouble("Mechanics.Energy.cold-drain-rate"); - this.MECHANICS_ENERGY_REFRESH_RATE_BED = settings.getDouble("Mechanics.Energy.sleeping-refresh-rate"); - this.MECHANICS_ENERGY_REFRESH_RATE_CHAIR = settings.getDouble("Mechanics.Energy.chair-refresh-rate"); - this.MECHANICS_ENERGY_EXHAUSTION = settings.getDouble("Mechanics.Energy.exhaustion"); + this.mechanics_energy_warning = settings.getBoolean("Mechanics.Energy.warning"); + this.mechanics_energy_drain_rate = settings.getDouble("Mechanics.Energy.drain-rate"); + this.mechanics_energy_drain_cold_rate = settings.getDouble("Mechanics.Energy.cold-drain-rate"); + this.mechanics_energy_refresh_rate_bed = settings.getDouble("Mechanics.Energy.sleeping-refresh-rate"); + this.mechanics_energy_refresh_rate_chair = settings.getDouble("Mechanics.Energy.chair-refresh-rate"); + this.mechanics_energy_exhaustion = settings.getDouble("Mechanics.Energy.exhaustion"); this.mechanics_energy_coffee_enabled = settings.getBoolean("Mechanics.Energy.coffee"); - this.MECHANICS_ENERGY_ABSORPTION = settings.getBoolean("Mechanics.Energy.absorption"); - this.MECHANICS_ENERGY_HASTE = settings.getBoolean("Mechanics.Energy.haste"); + this.mechanics_energy_absorption = settings.getBoolean("Mechanics.Energy.absorption"); + this.mechanics_energy_haste = settings.getBoolean("Mechanics.Energy.haste"); this.mechanics_slow_armor = settings.getBoolean("Mechanics.SlowArmor"); this.mechanics_reinforced_armor = settings.getBoolean("Mechanics.ReinforcedLeatherArmor"); @@ -402,7 +400,7 @@ private void loadSettings() { this.mechanics_farming_products_cookie = settings.getBoolean("Mechanics.FarmingProducts.Cookie"); this.mechanics_farming_products_bread = settings.getBoolean("Mechanics.FarmingProducts.Bread"); - this.MECHANICS_CHAIRS_ENABLED = settings.getBoolean("Mechanics.Chairs.Enabled"); + this.mechanics_chairs_enabled = settings.getBoolean("Mechanics.Chairs.Enabled"); this.MECHANICS_CHAIRS_MAX_WIDTH = settings.getInt("Mechanics.Chairs.MaxChairWidth"); this.MECHANICS_CHAIRS_BLOCKS = settings.getStringList("Mechanics.Chairs.AllowedBlocks"); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index 48ec125..f52001e 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -115,7 +115,7 @@ public void registerEvents() { pm.registerEvents(new PoisonousPotato(), this.plugin); if (config.MECHANICS_SHARED_WORKBENCH) pm.registerEvents(new WorkbenchShare(plugin), this.plugin); - if (config.MECHANICS_CHAIRS_ENABLED) + if (config.mechanics_chairs_enabled) pm.registerEvents(new Chairs(plugin), this.plugin); if (config.MECHANICS_COOKIE_BOOST) pm.registerEvents(new CookieHealthBoost(), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java index e6ce894..ae80e24 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java +++ b/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java @@ -1,15 +1,11 @@ package tk.shanebee.survival.listeners.player; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.FoodLevelChangeEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.entity.EntityExhaustionEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.world.TimeSkipEvent; import org.bukkit.inventory.ItemStack; import tk.shanebee.survival.SurvivalPlugin; @@ -23,120 +19,102 @@ public class EnergyChange implements Listener { - private final SurvivalPlugin plugin; - private final PlayerManager playerManager; - private final Config config; - private final Lang lang; - private final double ENERGY_RESPAWN; - - public EnergyChange(SurvivalPlugin plugin) { - this.plugin = plugin; - this.playerManager = plugin.getPlayerManager(); - this.config = plugin.getSurvivalConfig(); - this.lang = plugin.getLang(); - this.ENERGY_RESPAWN = config.mechanics_energy_respawn; - } - - @EventHandler - private void onRespawn(PlayerDeathEvent event) { - Player player = event.getEntity(); - if (Utils.isCitizensNPC(player)) return; - PlayerData playerData = playerManager.getPlayerData(player); - - double change = ENERGY_RESPAWN - playerData.getEnergy(); - EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, change, ENERGY_RESPAWN); - Bukkit.getPluginManager().callEvent(energyEvent); - if (energyEvent.isCancelled()) return; - playerData.setEnergy(ENERGY_RESPAWN); - } - - @EventHandler - private void onDrinkCoffee(PlayerItemConsumeEvent e) { - ItemStack item = e.getItem(); - Player player = e.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - - if (Items.COFFEE.is(item)) { - EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, 20.0 - playerData.getEnergy(), 20.0); - Bukkit.getPluginManager().callEvent(energyEvent); - if (energyEvent.isCancelled()) return; - playerData.setEnergy(20); - } - } - - // Removes empty water bottles from crafting grid when brewing coffee - @EventHandler - private void onCraftCoffee(CraftItemEvent e) { - if (Items.COFFEE.is(e.getRecipe().getResult())) { - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> e.getInventory().remove(Material.GLASS_BOTTLE), 2); - } - } - - // Decrease energy when player does exhaustive tasks - @EventHandler - private void onSaturationReached(FoodLevelChangeEvent event) { - double modifier = config.MECHANICS_ENERGY_EXHAUSTION; - if (modifier <= 0) return; - if (!(event.getEntity() instanceof Player)) return; - Player player = (Player) event.getEntity(); - if (event.getFoodLevel() > player.getFoodLevel()) return; - GameMode mode = player.getGameMode(); - if (mode == GameMode.SURVIVAL || mode == GameMode.ADVENTURE) { - PlayerData playerData = playerManager.getPlayerData(player); - EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, -modifier, playerData.getEnergy() - modifier); - Bukkit.getPluginManager().callEvent(energyEvent); - if (energyEvent.isCancelled()) return; - playerData.increaseEnergy(-modifier); + private final PlayerManager playerManager; + private final Config config; + private final Lang lang; + + public EnergyChange(SurvivalPlugin plugin) { + this.playerManager = plugin.getPlayerManager(); + this.config = plugin.getSurvivalConfig(); + this.lang = plugin.getLang(); + } + + @EventHandler // Reset energy on respawn + private void onRespawn(PlayerRespawnEvent event) { + if (event.getRespawnReason() != PlayerRespawnEvent.RespawnReason.DEATH) return; + + Player player = event.getPlayer(); + if (Utils.isCitizensNPC(player)) return; + PlayerData playerData = this.playerManager.getPlayerData(player); + + double respawnAmount = this.config.mechanics_energy_respawn; + double change = respawnAmount - playerData.getEnergy(); + EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, change, respawnAmount); + if (!energyEvent.callEvent()) return; + playerData.setEnergy(respawnAmount); + } + + @EventHandler // Give energy when drinking coffee + private void onDrinkCoffee(PlayerItemConsumeEvent event) { + ItemStack item = event.getItem(); + Player player = event.getPlayer(); + PlayerData playerData = this.playerManager.getPlayerData(player); + + if (Items.COFFEE.is(item)) { + EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, 20.0 - playerData.getEnergy(), 20.0); + if (!energyEvent.callEvent()) return; + playerData.setEnergy(20.0); } } - // Send messages when energy level decreases - @EventHandler + @EventHandler // Decrease energy when player does exhaustive tasks + private void onExhausted(EntityExhaustionEvent event) { + Player player = (Player) event.getEntity(); + + float exhaustion = event.getExhaustion(); + if (player.getExhaustion() + exhaustion < 4.0f) return; + + double modifier = this.config.mechanics_energy_exhaustion; + if (modifier <= 0) return; + + PlayerData playerData = playerManager.getPlayerData(player); + EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, -modifier, playerData.getEnergy() - modifier); + if (!energyEvent.callEvent()) return; + + playerData.increaseEnergy(-modifier); + } + + // Send messages when energy level decreases + @EventHandler(ignoreCancelled = true) private void onEnergyDrop(EnergyLevelChangeEvent event) { - if (!config.MECHANICS_ENERGY_WARNING) return; - if (event.getChanged() < 0) { + if (!this.config.mechanics_energy_warning) return; + if (event.getChanged() > 0) { Player player = event.getPlayer(); PlayerData playerData = playerManager.getPlayerData(player); double level = event.getEnergyLevel(); double newLevel = playerData.getEnergy(); - if (targetMatch(10.0, level, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_10); + if (targetMatch(10.0, level, newLevel)) { + Utils.sendColoredMini(player, this.lang.energy_level_10); } else if (targetMatch(6.5, level, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_6_5); + Utils.sendColoredMini(player, this.lang.energy_level_6_5); } else if (targetMatch(3.5, level, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_3_5); + Utils.sendColoredMini(player, this.lang.energy_level_3_5); } else if (targetMatch(2, level, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_2); + Utils.sendColoredMini(player, this.lang.energy_level_2); } else if (targetMatch(1, level, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_1); + Utils.sendColoredMini(player, this.lang.energy_level_1); } } } // Check if the change passed a certain amount private boolean targetMatch(double target, double level, double newLevel) { - return level <= target && newLevel > target; + return level <= target && newLevel > target; } - // Increase players energy when they wakeup after the night skips - // Or cancel the night skip event if true in config (forcing players to lay in bed and let energy increase) + // Increase players energy when they wake up after the night skips @EventHandler private void onSkipNight(TimeSkipEvent event) { - if (config.MECHANICS_PREVENT_NIGHT_SKIP) { - if (event.getSkipReason() == TimeSkipEvent.SkipReason.NIGHT_SKIP) { - event.setCancelled(true); - } - } else { - for (Player player : event.getWorld().getPlayers()) { - if (!player.isSleeping()) continue; - PlayerData playerData = playerManager.getPlayerData(player); - - EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, 20.0 - playerData.getEnergy(), 20.0); - Bukkit.getPluginManager().callEvent(energyEvent); - if (energyEvent.isCancelled()) return; - playerData.setEnergy(20); - } + if (event.getSkipReason() != TimeSkipEvent.SkipReason.NIGHT_SKIP) return; + + for (Player player : event.getWorld().getPlayers()) { + if (!player.isSleeping()) continue; + PlayerData playerData = this.playerManager.getPlayerData(player); + + EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, 20.0 - playerData.getEnergy(), 20.0); + if (!energyEvent.callEvent()) return; + playerData.setEnergy(20); } } diff --git a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java index 364e396..55e6a53 100644 --- a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java +++ b/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java @@ -3,6 +3,7 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.World.Environment; +import org.bukkit.block.Block; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -21,10 +22,6 @@ public class EnergyDrain extends BukkitRunnable { private final PlayerManager playerManager; private final Config config; private final Lang lang; - private final double drainRate; - private final double drainRateCold; - private final double increaseRateBed; - private final double increaseRateChair; private final double absorb; private final double haste; @@ -33,12 +30,8 @@ public EnergyDrain(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); this.lang = plugin.getLang(); - this.drainRate = config.MECHANICS_ENERGY_DRAIN_RATE; // amount of energy to drain every 5 seconds - this.drainRateCold = config.MECHANICS_ENERGY_DRAIN_COLD_RATE; // amount of energy to drain every 5 seconds - this.increaseRateBed = config.MECHANICS_ENERGY_REFRESH_RATE_BED; // amount of energy to gain every 5 seconds of sleeping - this.increaseRateChair = config.MECHANICS_ENERGY_REFRESH_RATE_CHAIR; // amount of energy to gain every 5 seconds of sitting in chair - this.absorb = config.MECHANICS_ENERGY_ABSORPTION ? 20 - (drainRate * 12) : 200; // Roughly 1 minute of absorption hearts after full energy - this.haste = config.MECHANICS_ENERGY_HASTE ? 20 - (drainRate * 25): 200; // Roughly 2 minutes of haste after full energy + this.absorb = this.config.mechanics_energy_absorption ? 20 - (this.config.mechanics_energy_drain_rate * 12) : 200; // Roughly 1 minute of absorption hearts after full energy + this.haste = this.config.mechanics_energy_haste ? 20 - (this.config.mechanics_energy_drain_rate * 25): 200; // Roughly 2 minutes of haste after full energy this.runTaskTimer(plugin, 5 * 20, 5 * 20); } @@ -48,31 +41,34 @@ public void run() { PlayerData playerData = playerManager.getPlayerData(player); GameMode mode = player.getGameMode(); if (mode == GameMode.SPECTATOR || mode == GameMode.CREATIVE) continue; + if (player.isSleeping()) { - playerData.increaseEnergy(this.increaseRateBed); + playerData.increaseEnergy(this.config.mechanics_energy_refresh_rate_bed); } else if (isSitting(player)) { - playerData.increaseEnergy(this.increaseRateChair); + playerData.increaseEnergy(this.config.mechanics_energy_refresh_rate_chair); } else { double oldLevel = playerData.getEnergy(); - double rate = this.drainRate; - if (this.drainRateCold > 0 && player.getWorld().getEnvironment() == Environment.NORMAL) { - if (player.getLocation().getBlock().getTemperature() < 0.15 && Utils.isAtHighest(player)) { - rate += drainRateCold; + double rate = this.config.mechanics_energy_drain_rate; + if (this.config.mechanics_energy_drain_cold_rate > 0 && player.getWorld().getEnvironment() == Environment.NORMAL) { + Block block = player.getLocation().getBlock(); + // In a cold biome and under direct sun or close to + if (block.getTemperature() < 0.15 && block.getLightFromSky() > 13) { + rate += this.config.mechanics_energy_drain_cold_rate; } } playerData.increaseEnergy(-rate); double newLevel = playerData.getEnergy(); - if (config.MECHANICS_ENERGY_WARNING) { + if (this.config.mechanics_energy_warning) { if (targetMatch(10.0, oldLevel, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_10); + Utils.sendColoredMini(player, this.lang.energy_level_10); } else if (targetMatch(6.5, oldLevel, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_6_5); + Utils.sendColoredMini(player, this.lang.energy_level_6_5); } else if (targetMatch(3.5, oldLevel, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_3_5); + Utils.sendColoredMini(player, this.lang.energy_level_3_5); } else if (targetMatch(2, oldLevel, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_2); + Utils.sendColoredMini(player, this.lang.energy_level_2); } else if (targetMatch(1, oldLevel, newLevel)) { - Utils.sendColoredMini(player, lang.energy_level_1); + Utils.sendColoredMini(player, this.lang.energy_level_1); } } effects(player, playerData); @@ -88,10 +84,8 @@ private boolean targetMatch(double target, double level, double newLevel) { // BAD EFFECTS private static final PotionEffect SICK_40; private static final PotionEffect SICK_120; - private static final PotionEffect BLIND_50; - private static final PotionEffect BLIND_120; - private static final PotionEffect NIGHT_10; - private static final PotionEffect NIGHT_120; + private static final PotionEffect DARK_50; + private static final PotionEffect DARK_120; private static final PotionEffect MINING_120; private static final PotionEffect MINING_120_2; private static final PotionEffect MINING_120_3; @@ -105,19 +99,19 @@ private boolean targetMatch(double target, double level, double newLevel) { static { SICK_40 = new PotionEffect(PotionEffectType.NAUSEA, 40, 0); SICK_120 = new PotionEffect(PotionEffectType.NAUSEA, 120, 0); - BLIND_50 = new PotionEffect(PotionEffectType.BLINDNESS, 50, 0); - BLIND_120 = new PotionEffect(PotionEffectType.BLINDNESS, 120, 0); - NIGHT_10 = new PotionEffect(PotionEffectType.NIGHT_VISION, 10, 0); - NIGHT_120 = new PotionEffect(PotionEffectType.NIGHT_VISION, 120, 0); + DARK_50 = new PotionEffect(PotionEffectType.DARKNESS, 50, 0); + DARK_120 = new PotionEffect(PotionEffectType.DARKNESS, 120, 0); MINING_120 = new PotionEffect(PotionEffectType.MINING_FATIGUE, 120, 0, false, false); MINING_120_2 = new PotionEffect(PotionEffectType.MINING_FATIGUE, 120, 1, false, false); MINING_120_3 = new PotionEffect(PotionEffectType.MINING_FATIGUE, 120, 2, false, false); SLOW_120 = new PotionEffect(PotionEffectType.SLOWNESS, 120, 0, false, false); - WITHER_100 = new PotionEffect(PotionEffectType.WITHER, 100, 0); - HASTE_120 = new PotionEffect(PotionEffectType.HASTE, 120, 0, false, false, true); + WITHER_100 = new PotionEffect(PotionEffectType.WITHER, 100, 0, false, true, false); + HASTE_120 = new PotionEffect(PotionEffectType.HASTE, 120, 0, false, false, false); ABSORPTION_500 = new PotionEffect(PotionEffectType.ABSORPTION, 500, 1, false, false); } + // TODO I want to eventually redo this. + // maybe with attributes instead? private void effects(Player player, PlayerData playerData) { double energy = playerData.getEnergy(); @@ -125,14 +119,12 @@ private void effects(Player player, PlayerData playerData) { player.addPotionEffect(WITHER_100); } else if (energy <= 2.0) { player.addPotionEffect(SICK_120); - player.addPotionEffect(NIGHT_120); - player.addPotionEffect(BLIND_120); + player.addPotionEffect(DARK_120); player.addPotionEffect(MINING_120_3); player.addPotionEffect(SLOW_120); } else if (energy <= 3.5) { player.addPotionEffect(SICK_40); - player.addPotionEffect(NIGHT_10); - player.addPotionEffect(BLIND_50); + player.addPotionEffect(DARK_50); player.addPotionEffect(MINING_120_3); } else if (energy <= 6.5) { player.addPotionEffect(MINING_120_3); @@ -150,8 +142,9 @@ private void effects(Player player, PlayerData playerData) { } } + @SuppressWarnings("deprecation") private boolean isSitting(Player player) { - if (!config.MECHANICS_CHAIRS_ENABLED) return false; + if (!this.config.mechanics_chairs_enabled) return false; Entity vehicle = player.getVehicle(); if (vehicle instanceof ArmorStand) { String name = vehicle.getCustomName(); diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/tk/shanebee/survival/util/Utils.java index a758ef7..04c69d0 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/tk/shanebee/survival/util/Utils.java @@ -262,16 +262,4 @@ public static NamespacedKey getNamespacedKey(String key) { return new NamespacedKey("survival_plus", key); } - /** - * Check if the player is at the highest block (exposed to sun) - * - * @param player Player to check - * @return True if player is exposed to sun - */ - public static boolean isAtHighest(Player player) { - Location location = player.getLocation(); - World world = player.getWorld(); - return location.getY() > world.getHighestBlockYAt(location); - } - } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2d28a45..9ef5526 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -82,9 +82,6 @@ Mechanics: # This is an experimental feature, I recommend not using it SharedWorkbench: false - # When enabled the night will not skip to day when players sleep - Prevent-Night-Skip: false - # When enabled, players will slow down when wearing heavy armor such as diamond or gold armor SlowArmor: true # Enables recipes for reinforced leather armor @@ -241,7 +238,7 @@ Mechanics: # (Will only work if chairs are enabled) chair-refresh-rate: 0.25 # Default (0.41) equivalent to 3 levels in 1 minute # Players doing exhaustive tasks (such as mining, running, jumping) will lose energy quicker - # Amount to drop per exhaustion reset (when the player's hunger bar drops) (set to 0 to disable) + # Amount to drop per exhaustion reset (set to 0 to disable) exhaustion: 0.15 # Enables coffee recipes and effects (Drink coffee to regain energy) coffee: true From 9b314b931045f465a2eb667a95b8fff253eda8ca Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 12:42:32 -0800 Subject: [PATCH 058/133] more thirst updates --- .../tk/shanebee/survival/config/Config.java | 32 ++-- .../tk/shanebee/survival/data/PlayerData.java | 14 +- .../events/ThirstLevelChangeEvent.java | 95 ++++++----- .../survival/item/items/drinks/DrinkItem.java | 8 +- .../listeners/item/ThirstListener.java | 72 +++------ .../survival/managers/PlayerManager.java | 2 +- .../survival/managers/StatusManager.java | 152 ------------------ src/main/resources/config.yml | 13 +- 8 files changed, 109 insertions(+), 279 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/managers/StatusManager.java diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index e9f495d..a9830fa 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -113,21 +113,21 @@ public class Config { // THIRST public boolean mechanics_thirst_enabled; - public int mechanics_thirst_starting_amount; - public int mechanics_thirst_respawn_amount; + public double mechanics_thirst_starting_amount; + public double mechanics_thirst_respawn_amount; public boolean mechanics_thirst_purify_water; public boolean mechanics_thirst_melt_snow; public double mechanics_thirst_drain_rate; public int mechanics_thirst_heat_drain; public int mechanics_thirst_nether_drain; public double mechanics_thirst_damage_rate; - public int mechanics_thirst_rep_beetroot_soup; - public int mechanics_thirst_rep_melon_slice; - public int mechanics_thirst_rep_mush_stew; - public int mechanics_thirst_rep_milk_bucket; - public int mechanics_thirst_rep_water; - public int mechanics_thirst_rep_honey_bottle; - public int mechanics_thirst_rep_other_water; + public double mechanics_thirst_rep_beetroot_soup; + public double mechanics_thirst_rep_melon_slice; + public double mechanics_thirst_rep_mush_stew; + public double mechanics_thirst_rep_milk_bucket; + public double mechanics_thirst_rep_water; + public double mechanics_thirst_rep_honey_bottle; + public double mechanics_thirst_rep_other_water; public int mechanics_hunger_start_amount; public int mechanics_hunger_respawn_amount; @@ -377,13 +377,13 @@ private void loadSettings() { this.mechanics_thirst_nether_drain = settings.getInt("Mechanics.Thirst.nether-drain"); this.mechanics_thirst_damage_rate = settings.getDouble("Mechanics.Thirst.damage-rate"); - this.mechanics_thirst_rep_beetroot_soup = settings.getInt("Mechanics.Thirst.replenish-level.beetroot-soup"); - this.mechanics_thirst_rep_melon_slice = settings.getInt("Mechanics.Thirst.replenish-level.melon-slice"); - this.mechanics_thirst_rep_mush_stew = settings.getInt("Mechanics.Thirst.replenish-level.mushroom-stew"); - this.mechanics_thirst_rep_milk_bucket = settings.getInt("Mechanics.Thirst.replenish-level.milk-bucket"); - this.mechanics_thirst_rep_honey_bottle = settings.getInt("Mechanics.Thirst.replenish-level.honey-bottle"); - this.mechanics_thirst_rep_other_water = settings.getInt("Mechanics.Thirst.replenish-level.other-water"); - this.mechanics_thirst_rep_water = settings.getInt("Mechanics.Thirst.replenish-level.water"); + this.mechanics_thirst_rep_beetroot_soup = settings.getDouble("Mechanics.Thirst.replenish-level.beetroot-soup"); + this.mechanics_thirst_rep_melon_slice = settings.getDouble("Mechanics.Thirst.replenish-level.melon-slice"); + this.mechanics_thirst_rep_mush_stew = settings.getDouble("Mechanics.Thirst.replenish-level.mushroom-stew"); + this.mechanics_thirst_rep_milk_bucket = settings.getDouble("Mechanics.Thirst.replenish-level.milk-bucket"); + this.mechanics_thirst_rep_honey_bottle = settings.getDouble("Mechanics.Thirst.replenish-level.honey-bottle"); + this.mechanics_thirst_rep_other_water = settings.getDouble("Mechanics.Thirst.replenish-level.other-water"); + this.mechanics_thirst_rep_water = settings.getDouble("Mechanics.Thirst.replenish-level.water"); this.mechanics_hunger_start_amount = settings.getInt("Mechanics.Hunger.Starting-Amount"); this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); diff --git a/src/main/java/tk/shanebee/survival/data/PlayerData.java b/src/main/java/tk/shanebee/survival/data/PlayerData.java index ba0f308..3eb7df8 100644 --- a/src/main/java/tk/shanebee/survival/data/PlayerData.java +++ b/src/main/java/tk/shanebee/survival/data/PlayerData.java @@ -27,7 +27,6 @@ public class PlayerData implements ConfigurationSerializable { private final Config config = SurvivalPlugin.getInstance().getSurvivalConfig(); private final UUID uuid; - private int thirst; private Map compassMap = new HashMap<>(); // Nutrients @@ -35,6 +34,7 @@ public class PlayerData implements ConfigurationSerializable { private int proteins; private int vitamins; private double energy; + private double thirst; // Dunno yet private boolean localChat = false; @@ -56,11 +56,11 @@ public class PlayerData implements ConfigurationSerializable { private boolean score_energy = true; private boolean score_nutrients = true; - public PlayerData(OfflinePlayer player, int thirst, int proteins, int carbs, int vitamins, double energy) { + public PlayerData(OfflinePlayer player, double thirst, int proteins, int carbs, int vitamins, double energy) { this(player.getUniqueId(), thirst, proteins, carbs, vitamins, energy); } - public PlayerData(UUID uuid, int thirst, int proteins, int carbs, int vitamins, double energy) { + public PlayerData(UUID uuid, double thirst, int proteins, int carbs, int vitamins, double energy) { this.uuid = uuid; this.thirst = thirst; this.proteins = proteins; @@ -92,8 +92,8 @@ public UUID getUuid() { * * @return Thirst of this data */ - public int getThirst() { - return thirst; + public double getThirst() { + return this.thirst; } /** @@ -101,7 +101,7 @@ public int getThirst() { * * @param thirst Level of thirst to set */ - public void setThirst(int thirst) { + public void setThirst(double thirst) { this.thirst = Math.clamp(thirst, 0, 40); } @@ -403,7 +403,7 @@ public Map serialize() { */ public static PlayerData deserialize(Map args) { UUID uuid = UUID.fromString(args.get("uuid").toString()); - int thirst = ((Integer) args.get("thirst")); + double thirst = getDouble(args, "thirst", 20.0); double energy = getDouble(args, "energy", 20.0); int proteins = ((Integer) args.get("nutrients.proteins")); int carbs = ((Integer) args.get("nutrients.carbs")); diff --git a/src/main/java/tk/shanebee/survival/events/ThirstLevelChangeEvent.java b/src/main/java/tk/shanebee/survival/events/ThirstLevelChangeEvent.java index 74e3506..091033d 100644 --- a/src/main/java/tk/shanebee/survival/events/ThirstLevelChangeEvent.java +++ b/src/main/java/tk/shanebee/survival/events/ThirstLevelChangeEvent.java @@ -4,6 +4,7 @@ import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; /** * Called when a player's thirst level changes @@ -11,57 +12,63 @@ @SuppressWarnings("unused") public class ThirstLevelChangeEvent extends Event implements Cancellable { - private final static HandlerList handlers = new HandlerList(); - private final Player player; - private final int thirst; - private final int changed; - private boolean isCancelled; + private final static HandlerList handlers = new HandlerList(); + private final Player player; + private final double thirst; + private final double changed; + private boolean isCancelled; - public ThirstLevelChangeEvent(Player player, int changed, int thirst) { - this.player = player; - this.changed = changed; - this.thirst = thirst; - this.isCancelled = false; - } + public ThirstLevelChangeEvent(Player player, double changed, double thirst) { + this.player = player; + this.changed = changed; + this.thirst = thirst; + this.isCancelled = false; + } - /** Get the player involved in this event - * @return The player involved in this event - */ - public Player getPlayer() { - return this.player; - } + /** + * Get the player involved in this event + * + * @return The player involved in this event + */ + public Player getPlayer() { + return this.player; + } - /** Get the new thirst level from the event - * @return The new thirst level from the event - */ - public int getThirst() { - return this.thirst; - } + /** + * Get the new thirst level from the event + * + * @return The new thirst level from the event + */ + public double getThirst() { + return this.thirst; + } - /** Get the level of thirst that was changed - * @return The level that was changed - */ - public int getChanged() { - return this.changed; - } + /** + * Get the level of thirst that was changed + * + * @return The level that was changed + */ + public double getChanged() { + return this.changed; + } - public static HandlerList getHandlerList() { - return handlers; - } + public static HandlerList getHandlerList() { + return handlers; + } - @Override - public HandlerList getHandlers() { - return handlers; - } + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } - @Override - public boolean isCancelled() { - return this.isCancelled; - } + @Override + public boolean isCancelled() { + return this.isCancelled; + } - @Override - public void setCancelled(boolean b) { - this.isCancelled = b; - } + @Override + public void setCancelled(boolean b) { + this.isCancelled = b; + } } diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java b/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java index 1bdbd7b..20feeb4 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java +++ b/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java @@ -20,17 +20,17 @@ @SuppressWarnings("UnstableApiUsage") public abstract class DrinkItem extends Item { - private int thirstLevel; + private double thirstLevel; @Override protected void setupDefaults(String key, ItemStack itemStack) { - this.thirstLevel = ITEM_CONFIG.getInt(key, "thirst_level", 1); + this.thirstLevel = ITEM_CONFIG.getDouble(key, "thirst_level", 1); super.setupDefaults(key, itemStack); } @Override protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaModel) { - this.thirstLevel = ITEM_CONFIG.getInt(key, "thirst_level", 1); + this.thirstLevel = ITEM_CONFIG.getDouble(key, "thirst_level", 1); super.setupDefaults(key, itemStack, vanillaModel); } @@ -54,7 +54,7 @@ protected void setupDefaults(String key, ItemStack itemStack, @NotNull List HUNGER_CHANGE = new ArrayList<>(); - @EventHandler private void onRespawn(PlayerRespawnEvent event) { + if (event.getRespawnReason() != PlayerRespawnEvent.RespawnReason.DEATH) return; Player player = event.getPlayer(); - if (HUNGER_CHANGE.contains(player)) { - HUNGER_CHANGE.remove(player); - - PlayerData playerData = playerManager.getPlayerData(player); - int thirst = config.mechanics_thirst_respawn_amount; - playerData.setThirst(thirst); - playerManager.getPlayerData(player).setThirst(thirst); - - int hunger = config.mechanics_hunger_respawn_amount; - Bukkit.getScheduler().runTaskLater(plugin, () -> StatusManager.setHunger(player, hunger), 1); - } - } + PlayerData playerData = playerManager.getPlayerData(player); + double thirst = config.mechanics_thirst_respawn_amount; + playerData.setThirst(thirst); + playerManager.getPlayerData(player).setThirst(thirst); - @EventHandler - private void onDeath(PlayerDeathEvent event) { - Player player = event.getEntity(); - if (!HUNGER_CHANGE.contains(player)) { - HUNGER_CHANGE.add(player); - } + double hunger = this.config.mechanics_hunger_respawn_amount; + Bukkit.getScheduler().runTaskLater(plugin, () -> playerData.setHunger(hunger), 1); } private boolean checkWaterBottle(ItemStack bottle) { diff --git a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java index f55cd87..625c098 100644 --- a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java +++ b/src/main/java/tk/shanebee/survival/managers/PlayerManager.java @@ -186,7 +186,7 @@ public Location lookAt(Location loc, Location lookat) { public List getThirstVisual(Player player) { PlayerData data = getPlayerData(player); - int thirst = data.getThirst(); + int thirst = (int) data.getThirst(); double grad = ((double) thirst / 40) - 1; // green - green - green - yellow - orange - red diff --git a/src/main/java/tk/shanebee/survival/managers/StatusManager.java b/src/main/java/tk/shanebee/survival/managers/StatusManager.java deleted file mode 100644 index 194623c..0000000 --- a/src/main/java/tk/shanebee/survival/managers/StatusManager.java +++ /dev/null @@ -1,152 +0,0 @@ -package tk.shanebee.survival.managers; - -import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.data.PlayerData; - -/** - * Manage a player's different status levels - * @deprecated Use {@link PlayerData} - */ -@SuppressWarnings({"unused", "WeakerAccess"}) -@Deprecated -public class StatusManager { - - private static PlayerManager playerManager = SurvivalPlugin.getInstance().getPlayerManager(); - - /** - * Enums for Nutrient types - */ - public enum Nutrients { - CARBS("Carbs"), - PROTEIN("Protein"), - SALTS("Salts"); - - private String name; - - Nutrients(String nutrient){ - name = nutrient; - } - - public String getName() { - return name; - } - - } - - /** Set the thirst level of a player - * @param player The player to set thirst for - * @param level The level of thirst to set (Max = 40) - */ - public static void setThirst(Player player, int level) { - PlayerData pd = playerManager.getPlayerData(player); - pd.setThirst(level); - } - - /** Get the thirst level of a player - * @param player The player to get a thirst level from - * @return The thirst level of this player - */ - public static int getThirst(Player player) { - PlayerData pd = playerManager.getPlayerData(player); - return pd.getThirst(); - } - - /** Add to the thirst level of a player - * @param player The player to add thirst to - * @param level The level of thirst to add - */ - public static void addThirst(Player player, int level) { - setThirst(player, getThirst(player) + level); - } - - /** Remove from the thirst level of a player - * @param player The player to remove thirst from - * @param level The level of thirst to remove - */ - public static void removeThirst(Player player, int level) { - setThirst(player, getThirst(player) - level); - } - - /** Set the nutrient levels of a player - * @param player The player to set nutrients for - * @param nutrient The nutrient to set - * @param level The level to set - */ - public static void setNutrients(Player player, Nutrients nutrient, int level) { - PlayerData pd = playerManager.getPlayerData(player); - switch (nutrient) { - case SALTS: - pd.setNutrient(Nutrient.VITAMINS, level); - break; - case CARBS: - pd.setNutrient(Nutrient.CARBS, level); - break; - case PROTEIN: - pd.setNutrient(Nutrient.PROTEIN, level); - } - } - - /** Get the nutrient levels of a player - * @param player The player to get nutrient levels for - * @param nutrient The nutrient to check - * @return The level of this nutrient - */ - public static int getNutrients(Player player, Nutrients nutrient) { - PlayerData pd = playerManager.getPlayerData(player); - switch (nutrient) { - case SALTS: - return pd.getNutrient(Nutrient.VITAMINS); - case CARBS: - return pd.getNutrient(Nutrient.CARBS); - case PROTEIN: - return pd.getNutrient(Nutrient.PROTEIN); - default: - return 0; - } - } - - /** Add to the nutrient levels of a player - * @param player The player to add nutrients for - * @param nutrient The nutrient to add to - * @param level The level to add - */ - public static void addNutrients(Player player, Nutrients nutrient, int level) { - setNutrients(player, nutrient, getNutrients(player, nutrient) + level); - } - - /** Remove from the nutrient levels of a player - * @param player The player to remove nutrients for - * @param nutrient The nutrient to remove from - * @param level The level to remove - */ - public static void removeNutrients(Player player, Nutrients nutrient, int level) { - setNutrients(player, nutrient, getNutrients(player, nutrient) - level); - } - - /** Set the hunger level of a player - *

- * NOTE: This level is a mixture of the player's food/saturation levels - *

- * @param player The player to set hunger level for - * @param level The level to set for the player - */ - public static void setHunger(Player player, int level) { - level = Math.min(level, 40); - player.setFoodLevel(Math.min(level, 20)); - player.setSaturation(level >= 21 ? level - 20 : 0); - } - - /** Get the hunger level of a player - *

- * NOTE: This level is a mixture of the player's food/saturation levels - *

- * @param player The player to get hunger level for - * @return The level of player's hunger - */ - public static int getHunger(Player player) { - return Math.round(player.getFoodLevel() + player.getSaturation()); - } - -} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9ef5526..6ac1274 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -178,17 +178,16 @@ Mechanics: Thirst: enabled: true # The level of thirst a player starts out with (max = 40) - starting-amount: 30 + starting-amount: 30.0 # The level of thirst a player gets after respawning (max = 40) - respawn-amount: 30 - # Enables 3 different levels of water (dirty, clean, purified) + respawn-amount: 30.0 + # Enables 5 different levels of water (dirty, salty, murky, clean, purified) purify-water: true # Unused (maybe for the future?!?!) melt-snow: true - # The rate at which a player's thirst level will drop (value from 0.01 -> 1.0) - # The player will lose thirst levels when they reach exhaustion - # This happens when the player does exhausting tasks such as running, mining, etc. - drain-rate: 1.0 + # The amount of thirst to drop when doing exhaustive tasks such as running, mining, etc. + # (When exhaustion reaches 4 and resets, this amount will be removed from the player's thirst) + drain-rate: 0.5 # If player is in a HOT biome, drain 1 extra thirst point every X seconds # This helps speed up thirst draining when a player is in a hot biome like the desert or savanna # (ex: at a rate of 30, thirst drops 2 points a minute, which means the player would lose all thirst in 20 minutes) From 3da28843dfec50c7dad42bf240ceac0c113ec36c Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 13:50:07 -0800 Subject: [PATCH 059/133] DebugCommand - move nutrion debug into this, create item debug --- .../survival/commands/DebugCommand.java | 34 ++++++++++++++ .../survival/commands/NutritionCommand.java | 8 +--- .../survival/commands/Permissions.java | 1 - .../survival/commands/SurvivalCommand.java | 1 + .../java/tk/shanebee/survival/item/Item.java | 7 +++ .../java/tk/shanebee/survival/item/Items.java | 47 ++++++++++++++++++- 6 files changed, 88 insertions(+), 10 deletions(-) create mode 100644 src/main/java/tk/shanebee/survival/commands/DebugCommand.java diff --git a/src/main/java/tk/shanebee/survival/commands/DebugCommand.java b/src/main/java/tk/shanebee/survival/commands/DebugCommand.java new file mode 100644 index 0000000..72c3de9 --- /dev/null +++ b/src/main/java/tk/shanebee/survival/commands/DebugCommand.java @@ -0,0 +1,34 @@ +package tk.shanebee.survival.commands; + +import dev.jorel.commandapi.CommandPermission; +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.LiteralArgument; +import tk.shanebee.survival.SurvivalPlugin; +import tk.shanebee.survival.item.Items; +import tk.shanebee.survival.item.Nutrition; + +public class DebugCommand extends BaseCommand{ + public DebugCommand(SurvivalPlugin plugin) { + super(plugin); + } + + @Override + Argument register() { + return LiteralArgument.literal("debug") + .withPermission(CommandPermission.OP) + .then(LiteralArgument.literal("nutrition") + .executes(info -> { + Nutrition.debug(); + })) + .then(LiteralArgument.literal("items") + .then(LiteralArgument.literal("create") + .executesPlayer(info -> { + Items.debug(info.sender()); + })) + .then(LiteralArgument.literal("remove") + .executes(info -> { + Items.debug(null); + }))); + } + +} diff --git a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java index 4d3144f..29e6f79 100644 --- a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java @@ -5,7 +5,6 @@ import org.bukkit.entity.Player; import tk.shanebee.survival.SurvivalPlugin; import tk.shanebee.survival.gui.NutritionGUI; -import tk.shanebee.survival.item.Nutrition; public class NutritionCommand extends BaseCommand { @@ -21,12 +20,7 @@ Argument register() { Player player = info.sender(); NutritionGUI gui = new NutritionGUI(this.plugin); gui.openInventory(player, 0); - }) - .then(LiteralArgument.literal("debug") - .withPermission(Permissions.COMMAND_NUTRITION_DEBUG) - .executes(info -> { - Nutrition.debug(); - })); + }); } } diff --git a/src/main/java/tk/shanebee/survival/commands/Permissions.java b/src/main/java/tk/shanebee/survival/commands/Permissions.java index 2853db9..4546daa 100644 --- a/src/main/java/tk/shanebee/survival/commands/Permissions.java +++ b/src/main/java/tk/shanebee/survival/commands/Permissions.java @@ -7,7 +7,6 @@ public class Permissions { static final String COMMAND_HEAL = getCommand("heal"); static final String COMMAND_HEAL_OTHERS = getCommand("heal.others"); static final String COMMAND_NUTRITION = getCommand("nutrition"); - static final String COMMAND_NUTRITION_DEBUG = getCommand("nutrition.debug"); static final String COMMAND_RELOAD = getCommand("reload"); static final String COMMAND_PLAYERDATA = getCommand("playerdata"); diff --git a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java index f07c548..f3f8699 100644 --- a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java +++ b/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java @@ -24,6 +24,7 @@ public SurvivalCommand(SurvivalPlugin plugin, String commandName) { // TODO comment out arguments.add(new DataGenCommand(plugin)); + arguments.add(new DebugCommand(plugin)); register(commandName, arguments); } diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/tk/shanebee/survival/item/Item.java index 745baf1..2e23d1c 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/tk/shanebee/survival/item/Item.java @@ -9,6 +9,7 @@ import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; +import org.jetbrains.annotations.Nullable; import tk.shanebee.survival.config.ItemConfig; import tk.shanebee.survival.util.Utils; @@ -30,6 +31,7 @@ public abstract class Item { private Key key; protected NamespacedKey recipeKey; private ItemStack itemStack; + private String name; @SuppressWarnings({"FieldCanBeLocal", "unused"}) private double repairPercent; // TODO figure this out @@ -75,6 +77,7 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod } else if (!vanillaModel) { Utils.logMini("Failed to load item name for item '" + key + "'"); } + this.name = itemName; // Lore List lore = ITEM_CONFIG.getLore(key); @@ -121,4 +124,8 @@ public Key getKey() { return this.key; } + public @Nullable String getName() { + return this.name; + } + } diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/tk/shanebee/survival/item/Items.java index a657f8f..87ddd1b 100644 --- a/src/main/java/tk/shanebee/survival/item/Items.java +++ b/src/main/java/tk/shanebee/survival/item/Items.java @@ -1,9 +1,15 @@ package tk.shanebee.survival.item; +import com.google.common.collect.Lists; import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.key.Key; +import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.block.Biome; +import org.bukkit.entity.Entity; +import org.bukkit.entity.ItemDisplay; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,8 +46,10 @@ import tk.shanebee.survival.item.items.tools.RecurveCrossbow; import tk.shanebee.survival.item.items.tools.Shiv; import tk.shanebee.survival.item.items.tools.Sickle; +import tk.shanebee.survival.util.Utils; -import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -52,7 +60,7 @@ @SuppressWarnings("UnstableApiUsage") public class Items { - static final Map ALL_ITEMS = new HashMap<>(); + static final Map ALL_ITEMS = new LinkedHashMap<>(); // TOOLS public static final Item HATCHET = new Hatchet(); @@ -189,6 +197,41 @@ public static Water getBiomeBasedWaterBottle(Biome biome) { return Items.DIRTY_WATER; } + private static final List DEBUG_DISPLAYS = Lists.newArrayList(); + + /** + * Spawn {@link ItemDisplay ItemDisplays} for each item at the provided player + *

Leaving player null will remove the previous spawned entities

+ * + * @param player Player to spawn at, or null to clear previous spawns + */ + public static void debug(@Nullable Player player) { + if (player == null) { + DEBUG_DISPLAYS.forEach(Entity::remove); + DEBUG_DISPLAYS.clear(); + return; + } + Location location = player.getLocation().getBlock().getLocation().clone().add(0, 1, 0); + + double x = 0; + double y = 0; + World world = player.getWorld(); + for (Item item : ALL_ITEMS.values()) { + Location loc = location.clone().add(x, y, 0); + ItemDisplay itemDisplay = world.spawn(loc, ItemDisplay.class, display -> { + display.setItemStack(item.getItemStack()); + display.customName(Utils.getMini(item.getName())); + display.setCustomNameVisible(true); + }); + DEBUG_DISPLAYS.add(itemDisplay); + x += 3; + if (x > 20) { + x = 0; + y += 1.5; + } + } + } + /** * Tags for different {@link Items} groups */ From 67336990637ccca4332452b0891040141c14ff17 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 13:53:26 -0800 Subject: [PATCH 060/133] InventoryUpdate.java - not used --- .../survival/listeners/EventManager.java | 2 - .../listeners/server/InventoryUpdate.java | 56 ------------------- 2 files changed, 58 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index f52001e..6a29a02 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -44,7 +44,6 @@ import tk.shanebee.survival.listeners.player.EnergyChange; import tk.shanebee.survival.listeners.player.PlayerDataListener; import tk.shanebee.survival.listeners.server.Guide; -import tk.shanebee.survival.listeners.server.InventoryUpdate; import tk.shanebee.survival.listeners.server.LocalChat; import tk.shanebee.survival.listeners.server.RecipeDiscovery; import tk.shanebee.survival.listeners.server.ResourcePackListener; @@ -141,7 +140,6 @@ public void registerEvents() { pm.registerEvents(new Guide(plugin), this.plugin); if (config.MECHANICS_BURNOUT_TORCH_ENABLED) // TODO experimental feature, not 100% sure about this pm.registerEvents(new BurnoutTorches(this.plugin), this.plugin); - pm.registerEvents(new InventoryUpdate(), this.plugin); if (config.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED) pm.registerEvents(new ChestPigmen(this.plugin), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java b/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java deleted file mode 100644 index e45592b..0000000 --- a/src/main/java/tk/shanebee/survival/listeners/server/InventoryUpdate.java +++ /dev/null @@ -1,56 +0,0 @@ -package tk.shanebee.survival.listeners.server; - -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryOpenEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; - -@SuppressWarnings("deprecation") -public class InventoryUpdate implements Listener { - - @EventHandler - private void onJoinUpdate(PlayerJoinEvent e) { // Update old items to new items - Inventory inv = e.getPlayer().getInventory(); - if (needsUpdate(inv)) { - itemCheck(inv); - } - } - - @EventHandler - private void onInventoryOpenUpdate(InventoryOpenEvent e) { // Update old items to new items - Inventory inv = e.getInventory(); - if (needsUpdate(inv)) { - itemCheck(inv); - } - } - - private void itemCheck(Inventory inv) { - for (int i = 0; i < inv.getSize(); i++) { - ItemStack item = inv.getItem(i); - if (item == null) continue; - } - } - - private void itemUpdate(Inventory inv, int slot, ItemStack oldItem, Item newItem) { - assert oldItem.getItemMeta() != null; - int damage = ((Damageable) oldItem.getItemMeta()).getDamage(); - ItemStack itemStack = newItem.getItemStack(); - ItemMeta meta = itemStack.getItemMeta(); - assert meta != null; - ((Damageable) meta).setDamage(damage); - itemStack.setItemMeta(meta); - inv.setItem(slot, itemStack); - } - - private boolean needsUpdate(Inventory inv) { - return inv.contains(Material.WOODEN_HOE) || inv.contains(Material.GOLDEN_PICKAXE) || inv.contains(Material.GOLDEN_AXE) || - inv.contains(Material.GOLDEN_SHOVEL) || inv.contains(Material.GOLDEN_HOE) || inv.contains(Material.GOLDEN_SWORD); - } - -} From 25a5bff87e7a9a0c90d31d8f638ce662109ee2de Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 14:04:09 -0800 Subject: [PATCH 061/133] PiglinBarter - cleanup --- .../tk/shanebee/survival/config/Config.java | 8 +-- .../listeners/entity/PiglinBarter.java | 51 ++++++++----------- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index a9830fa..d048cfa 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -174,8 +174,8 @@ public class Config { public int ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS; public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY; public int ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS; - public boolean ENTITY_MECHANICS_PIGLIN_DROP_WATER; - public boolean ENTITY_MECHANICS_PIGLIN_ALT_DROP; + public boolean entity_mechanics_piglin_drop_water; + public boolean entity_mechanics_piglin_alt_drop; // RECIPES public boolean recipes_saddle; @@ -431,8 +431,8 @@ private void loadSettings() { this.ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS = settings.getInt("Entity-Mechanics.chicken-breeding.max-eggs"); this.ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY = settings.getBoolean("Entity-Mechanics.chicken-breeding.always-baby"); this.ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS = settings.getInt("Entity-Mechanics.chicken-breeding.baby-ticks"); - this.ENTITY_MECHANICS_PIGLIN_DROP_WATER = settings.getBoolean("Entity-Mechanics.piglin-barter.drop-purified-water"); - this.ENTITY_MECHANICS_PIGLIN_ALT_DROP = settings.getBoolean("Entity-Mechanics.piglin-barter.alternate-bartering"); + this.entity_mechanics_piglin_drop_water = settings.getBoolean("Entity-Mechanics.piglin-barter.drop-purified-water"); + this.entity_mechanics_piglin_alt_drop = settings.getBoolean("Entity-Mechanics.piglin-barter.alternate-bartering"); // RECIPES this.recipes_saddle = settings.getBoolean("Recipes.Saddle"); diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java index 70e1555..a41d93d 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java @@ -17,19 +17,11 @@ public class PiglinBarter implements Listener { - private final boolean SLOW_ARMOR; - private final boolean THIRST_ENABLED; - private final boolean DROP_WATER; - private final boolean ALT_DROPS; - private final Random RANDOM; + private final Config config; + private final Random random = new Random(); public PiglinBarter(SurvivalPlugin plugin) { - Config config = plugin.getSurvivalConfig(); - this.SLOW_ARMOR = config.mechanics_slow_armor; - this.THIRST_ENABLED = config.mechanics_thirst_enabled; - this.DROP_WATER = config.ENTITY_MECHANICS_PIGLIN_DROP_WATER; - this.ALT_DROPS = config.ENTITY_MECHANICS_PIGLIN_ALT_DROP; - this.RANDOM = new Random(); + this.config = plugin.getSurvivalConfig(); } @EventHandler @@ -41,11 +33,11 @@ private void onPiglinDrop(EntityDropItemEvent event) { Material itemDropMaterial = itemDropStack.getType(); // If water bottle is dropped, let's change it - if (itemDropMaterial == Material.POTION && THIRST_ENABLED && DROP_WATER) { + if (itemDropMaterial == Material.POTION && this.config.mechanics_thirst_enabled && this.config.entity_mechanics_piglin_drop_water) { PotionMeta meta = ((PotionMeta) itemDropStack.getItemMeta()); assert meta != null; if (meta.getBasePotionType() == PotionType.WATER) { - if (RANDOM.nextFloat() < 0.25f) { + if (this.random.nextFloat() < 0.25f) { itemDrop.setItemStack(Items.PURIFIED_WATER.getItemStack()); } else { itemDrop.setItemStack(Items.CLEAN_WATER.getItemStack()); @@ -54,30 +46,31 @@ private void onPiglinDrop(EntityDropItemEvent event) { } } - // If alt drops are disabled let's get outta here - if (!ALT_DROPS) return; + // If alt drops are disabled let's get out of here + if (!this.config.entity_mechanics_piglin_alt_drop) return; // If slow armor is enabled let's always drop custom iron boots - if (itemDropMaterial == Material.IRON_BOOTS && SLOW_ARMOR) { + if (itemDropMaterial == Material.IRON_BOOTS && this.config.mechanics_slow_armor) { ItemStack boots = Items.IRON_BOOTS.getItemStack(); - boots.addEnchantment(Enchantment.SOUL_SPEED, RANDOM.nextInt(3) + 1); + boots.addEnchantment(Enchantment.SOUL_SPEED, this.random.nextInt(3) + 1); itemDrop.setItemStack(boots); return; } // If anything else we have some random drops - ItemStack altItem = switch (itemDropMaterial) { - case LEATHER -> Items.SUSPICIOUS_MEAT.getItemStack(); - case NETHER_BRICK -> Items.COFFEE_BEAN.getItemStack(RANDOM.nextInt(4) + 1); - case GRAVEL -> Items.FIRESTRIKER.getItemStack(); - case SOUL_SAND -> Items.CAMPFIRE.getItemStack(); - case POTION -> Items.MEDIC_KIT.getItemStack(); - case SPLASH_POTION -> Items.GRAPPLING_HOOK.getItemStack(); - case ENCHANTED_BOOK -> Items.RECURVE_CROSSBOW.getItemStack(); - default -> null; - }; - if (altItem != null && RANDOM.nextFloat() > 0.5f) { - itemDrop.setItemStack(altItem); + + if (this.random.nextFloat() > 0.5f) { + ItemStack altItem = switch (itemDropMaterial) { + case LEATHER -> Items.SUSPICIOUS_MEAT.getItemStack(); + case NETHER_BRICK -> Items.COFFEE_BEAN.getItemStack(this.random.nextInt(4) + 1); + case GRAVEL -> Items.FIRESTRIKER.getItemStack(); + case SOUL_SAND -> Items.CAMPFIRE.getItemStack(); + case POTION -> Items.MEDIC_KIT.getItemStack(); + case SPLASH_POTION -> Items.GRAPPLING_HOOK.getItemStack(); + case ENCHANTED_BOOK -> Items.RECURVE_CROSSBOW.getItemStack(); + default -> null; + }; + if (altItem != null) itemDrop.setItemStack(altItem); } } From 0554911d952de8e10aa6f37feb0a6bca2e93d4b7 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 14:18:00 -0800 Subject: [PATCH 062/133] ChickenSpawn - cleanup --- .../tk/shanebee/survival/config/Config.java | 12 +++++------ .../listeners/entity/ChickenSpawn.java | 21 +++++++------------ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index d048cfa..4bef324 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -171,9 +171,9 @@ public class Config { public boolean ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED; public int ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE; public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED; - public int ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS; - public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY; - public int ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS; + public int entity_mechanics_chicken_breeding_max_eggs; + public boolean entity_mechanics_chicken_breeding_always_baby; + public int entity_mechanics_chicken_breeding_baby_ticks; public boolean entity_mechanics_piglin_drop_water; public boolean entity_mechanics_piglin_alt_drop; @@ -428,9 +428,9 @@ private void loadSettings() { this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); this.ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED = settings.getBoolean("Entity-Mechanics.chicken-breeding.enabled"); - this.ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS = settings.getInt("Entity-Mechanics.chicken-breeding.max-eggs"); - this.ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY = settings.getBoolean("Entity-Mechanics.chicken-breeding.always-baby"); - this.ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS = settings.getInt("Entity-Mechanics.chicken-breeding.baby-ticks"); + this.entity_mechanics_chicken_breeding_max_eggs = settings.getInt("Entity-Mechanics.chicken-breeding.max-eggs"); + this.entity_mechanics_chicken_breeding_always_baby = settings.getBoolean("Entity-Mechanics.chicken-breeding.always-baby"); + this.entity_mechanics_chicken_breeding_baby_ticks = settings.getInt("Entity-Mechanics.chicken-breeding.baby-ticks"); this.entity_mechanics_piglin_drop_water = settings.getBoolean("Entity-Mechanics.piglin-barter.drop-purified-water"); this.entity_mechanics_piglin_alt_drop = settings.getBoolean("Entity-Mechanics.piglin-barter.alternate-bartering"); diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java index 7d74c75..e84d2f1 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java @@ -4,7 +4,6 @@ import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.entity.Chicken; -import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; @@ -19,21 +18,16 @@ public class ChickenSpawn implements Listener { + private final Config config; private final Random random = new Random(); - private final int maxEggs; - private final boolean alwaysBaby; - private final int babyTicks; public ChickenSpawn(SurvivalPlugin plugin) { - Config config = plugin.getSurvivalConfig(); - this.maxEggs = config.ENTITY_MECHANICS_CHICKEN_BREEDING_MAX_EGGS; - this.alwaysBaby = config.ENTITY_MECHANICS_CHICKEN_BREEDING_ALWAYS_BABY; - this.babyTicks = config.ENTITY_MECHANICS_CHICKEN_BREEDING_BABY_TICKS; + this.config = plugin.getSurvivalConfig(); } @EventHandler private void onChickenSpawn(CreatureSpawnEvent event) { - if (event.getEntityType() == EntityType.CHICKEN) { + if (event.getEntity() instanceof Chicken chicken) { SpawnReason reason = event.getSpawnReason(); if (reason == SpawnReason.BREEDING) { event.setCancelled(true); @@ -43,12 +37,12 @@ private void onChickenSpawn(CreatureSpawnEvent event) { world.dropItem(loc, getEgg()); world.playSound(loc, Sound.ENTITY_CHICKEN_EGG, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); } else if (reason == SpawnReason.EGG) { - Chicken chicken = ((Chicken) event.getEntity()); - if (this.alwaysBaby) { + int babyTicks = this.config.entity_mechanics_chicken_breeding_baby_ticks; + if (this.config.entity_mechanics_chicken_breeding_always_baby) { chicken.setBaby(); - chicken.setAge(-this.babyTicks); + chicken.setAge(-babyTicks); } else if (!chicken.isAdult()) { - chicken.setAge(-this.babyTicks); + chicken.setAge(-babyTicks); } } } @@ -63,6 +57,7 @@ private void onEggThrown(PlayerEggThrowEvent event) { } private ItemStack getEgg() { + int maxEggs = this.config.entity_mechanics_chicken_breeding_max_eggs; int ran = maxEggs > 1 ? this.random.nextInt(maxEggs) + 1 : 1; return Items.BREEDING_EGG.getItemStack(ran); } From d2706e77f234da4696f972110f48a462dec675ce Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 14:29:15 -0800 Subject: [PATCH 063/133] more config cleanup --- .../tk/shanebee/survival/SurvivalPlugin.java | 8 +- .../tk/shanebee/survival/config/Config.java | 108 +++++++++--------- .../tk/shanebee/survival/data/PlayerData.java | 2 +- .../tk/shanebee/survival/item/Recipes.java | 14 +-- .../survival/listeners/EventManager.java | 22 ++-- .../survival/listeners/block/BlockBreak.java | 70 +++++------- .../survival/listeners/block/BlockPlace.java | 2 +- .../survival/listeners/block/Chairs.java | 4 +- .../listeners/entity/ChestPigmen.java | 4 +- .../listeners/entity/EntityDeath.java | 6 +- .../survival/listeners/server/LocalChat.java | 2 +- .../survival/managers/EffectManager.java | 6 +- .../survival/managers/RecipeManager.java | 8 +- src/main/resources/config.yml | 3 +- 14 files changed, 124 insertions(+), 135 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java index a35178d..0350026 100644 --- a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java +++ b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java @@ -117,7 +117,7 @@ public void onEnable() { loadSettings(Bukkit.getConsoleSender()); for (World world : getServer().getWorlds()) { - world.setGameRule(GameRule.DO_LIMITED_CRAFTING, config.SURVIVAL_LIMITED_CRAFTING); + world.setGameRule(GameRule.DO_LIMITED_CRAFTING, this.config.survival_limited_crafting); } // LOAD RESOURCE PACK @@ -133,8 +133,8 @@ public void onEnable() { Utils.logMini("Resource Pack disabled"); } - Rates.add(config.DROP_RATE_FLINT); - Rates.add(config.DROP_RATE_STICK); + Rates.add(config.survival_drop_rate_flint); + Rates.add(config.survival_drop_rate_stick); Rates.add(config.mechanics_thirst_drain_rate); for (double i : Rates) { if (i <= 0) { @@ -214,7 +214,7 @@ public void onDisable() { playerDataLoader(false); //Avoid WorkbenchShare glitch - if (config.MECHANICS_SHARED_WORKBENCH) { + if (config.mechanics_shared_workbench) { for (Player p : Bukkit.getOnlinePlayers()) { if (p.hasMetadata("shared_workbench")) { Block workbench = (p.getMetadata("shared_workbench").get(0).value() instanceof Block) ? (Block) diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 4bef324..ba3cc24 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -29,29 +29,29 @@ public class Config { // SURVIVAL public boolean survival_enabled; - public boolean SURVIVAL_LIMITED_CRAFTING; + public boolean survival_limited_crafting; public boolean survival_unlock_all_recipes; public boolean survival_remove_wood_tools; public boolean survival_torch; - public boolean SURVIVAL_UPDATE_MERCHANT_TRADES; + public boolean survival_update_merchant_trades; public boolean break_only_with_sickle; - public boolean BREAK_ONLY_WITH_SHOVEL; - public boolean BREAK_ONLY_WITH_AXE; - public boolean BREAK_ONLY_WITH_PICKAXE; - public boolean BREAK_ONLY_WITH_SHEARS; - public boolean PLACE_ONLY_WITH_HAMMER; + public boolean survival_break_only_with_shovel; + public boolean survival_break_only_with_axe; + public boolean survival_break_only_with_pickaxe; + public boolean survival_break_only_with_shears; + public boolean survival_place_only_with_hammer; public boolean survival_sickle_flint; public boolean survival_sickle_stone; public boolean survival_sickle_iron; public boolean survival_sickle_diamond; - public double DROP_RATE_STICK; - public double DROP_RATE_FLINT; + public double survival_drop_rate_stick; + public double survival_drop_rate_flint; // MECHANICS - public boolean MECHANICS_SHARED_WORKBENCH; + public boolean mechanics_shared_workbench; // ENERGY public boolean mechanics_energy_enabled; @@ -79,11 +79,11 @@ public class Config { public boolean mechanics_status_scoreboard; public int MECHANICS_ALERT_INTERVAL; - public boolean MECHANICS_RAW_MEAT_HUNGER; + public boolean mechanics_raw_meat_hunger; public boolean mechanics_empty_potion; public boolean mechanics_poison_potato; - public boolean MECHANICS_COOKIE_BOOST; - public boolean MECHANICS_BEET_STRENGTH; + public boolean mechanics_cookie_boost; + public boolean mechanics_beet_strength; public boolean mechanics_food_diversity_enabled; public int mechanics_food_max_level; @@ -133,10 +133,10 @@ public class Config { public int mechanics_hunger_respawn_amount; public boolean mechanics_compass_waypoint; - public boolean MECHANICS_COMPASS_WAYPOINT_WORLDS; - public boolean MECHANICS_CLOWN_FISH; + public boolean mechanics_compass_waypoint_worlds; + public boolean mechanics_tropical_fish; public boolean mechanics_fermented_skin; - public boolean MECHANICS_LIVING_SLIME; + public boolean mechanics_living_slime; public boolean mechanics_snowball_revamp; public boolean MECHANICS_SNOW_GEN_REVAMP; @@ -144,7 +144,7 @@ public class Config { public boolean mechanics_farming_products_bread; public boolean mechanics_chairs_enabled; - public int MECHANICS_CHAIRS_MAX_WIDTH; + public int mechanics_chairs_max_width; public List MECHANICS_CHAIRS_BLOCKS; public boolean MECHANICS_BURNOUT_TORCH_ENABLED; @@ -164,13 +164,13 @@ public class Config { public int ITEM_FIRESTRIKER_COOK_TIME; // ENTITY MECHANICS - public boolean ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED; - public int ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS; - public double ENTITY_MECHANICS_PIGMEN_CHEST_SPEED; + public boolean entity_mechanics_pigmen_chest_enabled; + public int entity_mechanics_pigmen_chest_radius; + public double entity_mechanics_pigmen_chest_speed; public boolean entity_mechanics_beekeeper_suit_enabled; - public boolean ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED; - public int ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE; - public boolean ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED; + public boolean entity_mechanics_suspicious_meat_enabled; + public int entity_mechanics_suspicious_meat_chance; + public boolean entity_mechanics_chicken_breeding_enabled; public int entity_mechanics_chicken_breeding_max_eggs; public boolean entity_mechanics_chicken_breeding_always_baby; public int entity_mechanics_chicken_breeding_baby_ticks; @@ -204,12 +204,12 @@ public class Config { // LEGENDARY TOOLS public boolean legendary_valkyrie; - public boolean legendary_quartzpickaxe; + public boolean legendary_quartz_pickaxe; public boolean legendary_obsidian_mace; - public boolean legendary_giantblade; - public boolean legendary_blazesword; + public boolean legendary_giant_blade; + public boolean legendary_blaze_sword; public boolean legendary_notch_apple; - public boolean legendary_goldarmorbuff; + public boolean legendary_gold_armor_buff; // HIDDEN CONFIG public int RECIPE_DELAY; @@ -284,29 +284,29 @@ private void loadSettings() { // SURVIVAL this.survival_enabled = settings.getBoolean("Survival.Enabled"); - this.SURVIVAL_LIMITED_CRAFTING = settings.getBoolean("Survival.LimitedCrafting"); + this.survival_limited_crafting = settings.getBoolean("Survival.LimitedCrafting"); this.survival_unlock_all_recipes = settings.getBoolean("Survival.Unlock-all-recipes-on-join"); this.survival_remove_wood_tools = settings.getBoolean("Survival.Remove-Wooden-Tools"); this.survival_torch = settings.getBoolean("Survival.Torch"); - this.SURVIVAL_UPDATE_MERCHANT_TRADES = settings.getBoolean("Survival.UpdateMerchantTrades"); + this.survival_update_merchant_trades = settings.getBoolean("Survival.UpdateMerchantTrades"); this.break_only_with_sickle = settings.getBoolean("Survival.BreakOnlyWith.Sickle"); - this.BREAK_ONLY_WITH_SHOVEL = settings.getBoolean("Survival.BreakOnlyWith.Shovel"); - this.BREAK_ONLY_WITH_AXE = settings.getBoolean("Survival.BreakOnlyWith.Axe"); - this.BREAK_ONLY_WITH_PICKAXE = settings.getBoolean("Survival.BreakOnlyWith.Pickaxe"); - this.BREAK_ONLY_WITH_SHEARS = settings.getBoolean("Survival.BreakOnlyWith.Shears"); - this.PLACE_ONLY_WITH_HAMMER = settings.getBoolean("Survival.PlaceOnlyWith.Hammer"); + this.survival_break_only_with_shovel = settings.getBoolean("Survival.BreakOnlyWith.Shovel"); + this.survival_break_only_with_axe = settings.getBoolean("Survival.BreakOnlyWith.Axe"); + this.survival_break_only_with_pickaxe = settings.getBoolean("Survival.BreakOnlyWith.Pickaxe"); + this.survival_break_only_with_shears = settings.getBoolean("Survival.BreakOnlyWith.Shears"); + this.survival_place_only_with_hammer = settings.getBoolean("Survival.PlaceOnlyWith.Hammer"); this.survival_sickle_flint = settings.getBoolean("Survival.Sickles.Flint"); this.survival_sickle_stone = settings.getBoolean("Survival.Sickles.Stone"); this.survival_sickle_iron = settings.getBoolean("Survival.Sickles.Iron"); this.survival_sickle_diamond = settings.getBoolean("Survival.Sickles.Diamond"); - this.DROP_RATE_STICK = settings.getDouble("Survival.DropRate.Stick"); - this.DROP_RATE_FLINT = settings.getDouble("Survival.DropRate.Flint"); + this.survival_drop_rate_stick = settings.getDouble("Survival.DropRate.Stick"); + this.survival_drop_rate_flint = settings.getDouble("Survival.DropRate.Flint"); // MECHANICS - this.MECHANICS_SHARED_WORKBENCH = settings.getBoolean("Mechanics.SharedWorkbench"); + this.mechanics_shared_workbench = settings.getBoolean("Mechanics.SharedWorkbench"); this.mechanics_energy_enabled = settings.getBoolean("Mechanics.Energy.enabled"); this.mechanics_energy_start = settings.getDouble("Mechanics.Energy.start-level"); this.mechanics_energy_respawn = settings.getDouble("Mechanics.Energy.respawn-level"); @@ -332,11 +332,11 @@ private void loadSettings() { this.mechanics_status_scoreboard = settings.getBoolean("Mechanics.StatusScoreboard"); this.MECHANICS_ALERT_INTERVAL = settings.getInt("Mechanics.AlertInterval"); - this.MECHANICS_RAW_MEAT_HUNGER = settings.getBoolean("Mechanics.RawMeatHunger"); + this.mechanics_raw_meat_hunger = settings.getBoolean("Mechanics.RawMeatHunger"); this.mechanics_empty_potion = settings.getBoolean("Mechanics.EmptyPotions"); this.mechanics_poison_potato = settings.getBoolean("Mechanics.PoisonousPotato"); - this.MECHANICS_COOKIE_BOOST = settings.getBoolean("Mechanics.CookieHealthBoost"); - this.MECHANICS_BEET_STRENGTH = settings.getBoolean("Mechanics.BeetrootStrength"); + this.mechanics_cookie_boost = settings.getBoolean("Mechanics.CookieHealthBoost"); + this.mechanics_beet_strength = settings.getBoolean("Mechanics.BeetrootStrength"); this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); this.mechanics_food_max_level = settings.getInt("Mechanics.FoodDiversity.max-level"); @@ -389,10 +389,10 @@ private void loadSettings() { this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); this.mechanics_compass_waypoint = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); - this.MECHANICS_COMPASS_WAYPOINT_WORLDS = settings.getBoolean("Mechanics.CompassWaypoint.per-world"); - this.MECHANICS_CLOWN_FISH = settings.getBoolean("Mechanics.Clownfish"); + this.mechanics_compass_waypoint_worlds = settings.getBoolean("Mechanics.CompassWaypoint.per-world"); + this.mechanics_tropical_fish = settings.getBoolean("Mechanics.TropicalFish"); this.mechanics_fermented_skin = settings.getBoolean("Mechanics.FermentedSkin"); - this.MECHANICS_LIVING_SLIME = settings.getBoolean("Mechanics.LivingSlime"); + this.mechanics_living_slime = settings.getBoolean("Mechanics.LivingSlime"); this.mechanics_snowball_revamp = settings.getBoolean("Mechanics.SnowballRevamp"); this.MECHANICS_SNOW_GEN_REVAMP = settings.getBoolean("Mechanics.SnowGenerationRevamp"); @@ -401,7 +401,7 @@ private void loadSettings() { this.mechanics_farming_products_bread = settings.getBoolean("Mechanics.FarmingProducts.Bread"); this.mechanics_chairs_enabled = settings.getBoolean("Mechanics.Chairs.Enabled"); - this.MECHANICS_CHAIRS_MAX_WIDTH = settings.getInt("Mechanics.Chairs.MaxChairWidth"); + this.mechanics_chairs_max_width = settings.getInt("Mechanics.Chairs.MaxChairWidth"); this.MECHANICS_CHAIRS_BLOCKS = settings.getStringList("Mechanics.Chairs.AllowedBlocks"); this.MECHANICS_BURNOUT_TORCH_ENABLED = settings.getBoolean("Mechanics.BurnoutTorches.Enabled"); @@ -421,13 +421,13 @@ private void loadSettings() { this.ITEM_FIRESTRIKER_COOK_TIME = settings.getInt("Item-Mechanics.firestriker.cook-time"); // ENTITY MECHANICS - this.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); - this.ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS = settings.getInt("Entity-Mechanics.zombified-piglin-chests.distance"); - this.ENTITY_MECHANICS_PIGMEN_CHEST_SPEED = settings.getDouble("Entity-Mechanics.zombified-piglin-chests.speed-modifier"); + this.entity_mechanics_pigmen_chest_enabled = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); + this.entity_mechanics_pigmen_chest_radius = settings.getInt("Entity-Mechanics.zombified-piglin-chests.distance"); + this.entity_mechanics_pigmen_chest_speed = settings.getDouble("Entity-Mechanics.zombified-piglin-chests.speed-modifier"); this.entity_mechanics_beekeeper_suit_enabled = settings.getBoolean("Entity-Mechanics.beekeeper-suit.enabled"); - this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); - this.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); - this.ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED = settings.getBoolean("Entity-Mechanics.chicken-breeding.enabled"); + this.entity_mechanics_suspicious_meat_enabled = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); + this.entity_mechanics_suspicious_meat_chance = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); + this.entity_mechanics_chicken_breeding_enabled = settings.getBoolean("Entity-Mechanics.chicken-breeding.enabled"); this.entity_mechanics_chicken_breeding_max_eggs = settings.getInt("Entity-Mechanics.chicken-breeding.max-eggs"); this.entity_mechanics_chicken_breeding_always_baby = settings.getBoolean("Entity-Mechanics.chicken-breeding.always-baby"); this.entity_mechanics_chicken_breeding_baby_ticks = settings.getInt("Entity-Mechanics.chicken-breeding.baby-ticks"); @@ -461,12 +461,12 @@ private void loadSettings() { // LEGENDARY ITEMS this.legendary_valkyrie = settings.getBoolean("LegendaryItems.ValkyrieAxe"); - this.legendary_quartzpickaxe = settings.getBoolean("LegendaryItems.QuartzPickaxe"); + this.legendary_quartz_pickaxe = settings.getBoolean("LegendaryItems.QuartzPickaxe"); this.legendary_obsidian_mace = settings.getBoolean("LegendaryItems.ObsidianMace"); - this.legendary_giantblade = settings.getBoolean("LegendaryItems.GiantBlade"); - this.legendary_blazesword = settings.getBoolean("LegendaryItems.BlazeSword"); + this.legendary_giant_blade = settings.getBoolean("LegendaryItems.GiantBlade"); + this.legendary_blaze_sword = settings.getBoolean("LegendaryItems.BlazeSword"); this.legendary_notch_apple = settings.getBoolean("LegendaryItems.NotchApple"); - this.legendary_goldarmorbuff = settings.getBoolean("LegendaryItems.GoldArmorBuff"); + this.legendary_gold_armor_buff = settings.getBoolean("LegendaryItems.GoldArmorBuff"); // HIDDEN CONFIG this.RECIPE_DELAY = settings.getInt("recipe-delay", 0); diff --git a/src/main/java/tk/shanebee/survival/data/PlayerData.java b/src/main/java/tk/shanebee/survival/data/PlayerData.java index 3eb7df8..a76a61f 100644 --- a/src/main/java/tk/shanebee/survival/data/PlayerData.java +++ b/src/main/java/tk/shanebee/survival/data/PlayerData.java @@ -351,7 +351,7 @@ public void setInfoDisplayed(boolean hunger, boolean thirst, boolean energy, boo public void setCompassWaypoint(Location location) { World world = location.getWorld(); if (world == null) return; - if (!config.MECHANICS_COMPASS_WAYPOINT_WORLDS) { + if (!this.config.mechanics_compass_waypoint_worlds) { this.compassMap.clear(); } this.compassMap.put(world.getName(), location); diff --git a/src/main/java/tk/shanebee/survival/item/Recipes.java b/src/main/java/tk/shanebee/survival/item/Recipes.java index 6a2ba84..bc24fde 100644 --- a/src/main/java/tk/shanebee/survival/item/Recipes.java +++ b/src/main/java/tk/shanebee/survival/item/Recipes.java @@ -150,10 +150,10 @@ public static void init(Config config) { DIAMOND_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_diamond, Items.DIAMOND_SICKLE.getRecipe()); WORKBENCH = register(config.survival_enabled && config.recipes_workbench, Items.WORKBENCH.getRecipe()); VALKYRIES_AXE = register(config.legendary_valkyrie, Items.VALKYRIES_AXE.getRecipe()); - QUARTZ_PICKAXE = register(config.legendary_quartzpickaxe, Items.QUARTZ_PICKAXE.getRecipe()); + QUARTZ_PICKAXE = register(config.legendary_quartz_pickaxe, Items.QUARTZ_PICKAXE.getRecipe()); OBSIDIAN_MACE = register(config.legendary_obsidian_mace, Items.OBSIDIAN_MACE.getRecipe()); - ENDER_GIANT_BLADE = register(config.legendary_giantblade, Items.ENDER_GIANT_BLADE.getRecipe()); - BLAZE_SWORD = register(config.legendary_blazesword, Items.BLAZE_SWORD.getRecipe()); + ENDER_GIANT_BLADE = register(config.legendary_giant_blade, Items.ENDER_GIANT_BLADE.getRecipe()); + BLAZE_SWORD = register(config.legendary_blaze_sword, Items.BLAZE_SWORD.getRecipe()); SNOW_BOOTS = register(config.mechanics_weather_enabled, Items.SNOW_BOOTS.getRecipe()); RAIN_BOOTS = register(config.mechanics_weather_enabled, Items.RAIN_BOOTS.getRecipe()); FERMENTED_SKIN = register(config.mechanics_fermented_skin, Items.FERMENTED_SKIN.getRecipe()); @@ -161,10 +161,10 @@ public static void init(Config config) { REINFORCED_LEATHER_CHESTPLATE = register(config.mechanics_reinforced_armor, Items.REINFORCED_LEATHER_TUNIC.getRecipe()); REINFORCED_LEATHER_LEGGINGS = register(config.mechanics_reinforced_armor, Items.REINFORCED_LEATHER_TROUSERS.getRecipe()); REINFORCED_LEATHER_BOOTS = register(config.mechanics_reinforced_armor, Items.REINFORCED_LEATHER_BOOTS.getRecipe()); - GOLD_CROWN = register(config.legendary_goldarmorbuff, Items.GOLDEN_CROWN.getRecipe()); - GOLD_GUARD = register(config.legendary_goldarmorbuff, Items.GOLDEN_GUARD.getRecipe()); - GOLD_GREAVES = register(config.legendary_goldarmorbuff, Items.GOLDEN_GREAVES.getRecipe()); - GOLD_SABATONS = register(config.legendary_goldarmorbuff, Items.GOLDEN_SABATONS.getRecipe()); + GOLD_CROWN = register(config.legendary_gold_armor_buff, Items.GOLDEN_CROWN.getRecipe()); + GOLD_GUARD = register(config.legendary_gold_armor_buff, Items.GOLDEN_GUARD.getRecipe()); + GOLD_GREAVES = register(config.legendary_gold_armor_buff, Items.GOLDEN_GREAVES.getRecipe()); + GOLD_SABATONS = register(config.legendary_gold_armor_buff, Items.GOLDEN_SABATONS.getRecipe()); IRON_HELMET = register(config.mechanics_slow_armor, Items.IRON_HELMET.getRecipe()); IRON_CHESTPLATE = register(config.mechanics_slow_armor, Items.IRON_CHESTPLATE.getRecipe()); IRON_LEGGINGS = register(config.mechanics_slow_armor, Items.IRON_LEGGINGS.getRecipe()); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index 6a29a02..afd1010 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -86,9 +86,9 @@ public void registerEvents() { pm.registerEvents(new ObsidianMaceWeakness(plugin), this.plugin); if (config.legendary_valkyrie) pm.registerEvents(new Valkyrie(plugin), this.plugin); - if (config.legendary_giantblade) + if (config.legendary_giant_blade) pm.registerEvents(new GiantBlade(plugin), this.plugin); - if (config.legendary_blazesword) + if (config.legendary_blaze_sword) pm.registerEvents(new BlazeSword(), this.plugin); if (LOCAL_CHAT > -1) pm.registerEvents(new LocalChat(plugin), this.plugin); @@ -103,7 +103,7 @@ public void registerEvents() { pm.registerEvents(new ResourcePackListener(plugin), this.plugin); } - if (config.MECHANICS_RAW_MEAT_HUNGER) + if (config.mechanics_raw_meat_hunger) pm.registerEvents(new RawMeatHunger(), this.plugin); if (config.mechanics_thirst_enabled) { pm.registerEvents(new ThirstListener(this.plugin), this.plugin); @@ -112,17 +112,17 @@ public void registerEvents() { } if (config.mechanics_poison_potato) pm.registerEvents(new PoisonousPotato(), this.plugin); - if (config.MECHANICS_SHARED_WORKBENCH) + if (config.mechanics_shared_workbench) pm.registerEvents(new WorkbenchShare(plugin), this.plugin); if (config.mechanics_chairs_enabled) pm.registerEvents(new Chairs(plugin), this.plugin); - if (config.MECHANICS_COOKIE_BOOST) + if (config.mechanics_cookie_boost) pm.registerEvents(new CookieHealthBoost(), this.plugin); - if (config.MECHANICS_BEET_STRENGTH) + if (config.mechanics_beet_strength) pm.registerEvents(new BeetrootStrength(), this.plugin); - if (config.MECHANICS_CLOWN_FISH) + if (config.mechanics_tropical_fish) pm.registerEvents(new TropicalFish(this.plugin), this.plugin); - if (config.MECHANICS_LIVING_SLIME) + if (config.mechanics_living_slime) pm.registerEvents(new LivingSlime(plugin), this.plugin); if (config.mechanics_energy_enabled) pm.registerEvents(new EnergyChange(plugin), this.plugin); @@ -134,20 +134,20 @@ public void registerEvents() { pm.registerEvents(new SnowballThrow(), this.plugin); if (config.MECHANICS_SNOW_GEN_REVAMP) pm.registerEvents(new SnowGeneration(plugin), this.plugin); - if (config.ENTITY_MECHANICS_CHICKEN_BREEDING_ENABLED) + if (config.entity_mechanics_chicken_breeding_enabled) pm.registerEvents(new ChickenSpawn(this.plugin), this.plugin); if (config.WELCOME_GUIDE_ENABLED) pm.registerEvents(new Guide(plugin), this.plugin); if (config.MECHANICS_BURNOUT_TORCH_ENABLED) // TODO experimental feature, not 100% sure about this pm.registerEvents(new BurnoutTorches(this.plugin), this.plugin); - if (config.ENTITY_MECHANICS_PIGMEN_CHEST_ENABLED) + if (config.entity_mechanics_pigmen_chest_enabled) pm.registerEvents(new ChestPigmen(this.plugin), this.plugin); if (config.entity_mechanics_beekeeper_suit_enabled) { Bukkit.getPluginManager().registerEvents(new BeeKeeperSuit(), this.plugin); } - if (config.SURVIVAL_UPDATE_MERCHANT_TRADES) { + if (config.survival_update_merchant_trades) { pm.registerEvents(new MerchantTrades(this.plugin), this.plugin); } pm.registerEvents(new PiglinBarter(this.plugin), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java index eb4a146..131cd94 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java @@ -1,4 +1,3 @@ - package tk.shanebee.survival.listeners.block; import org.bukkit.Effect; @@ -31,12 +30,12 @@ public class BlockBreak implements Listener { - private final Config settings; + private final Config config; private final Lang lang; public BlockBreak(SurvivalPlugin plugin) { this.lang = plugin.getLang(); - this.settings = plugin.getSurvivalConfig(); + this.config = plugin.getSurvivalConfig(); } @EventHandler(priority = EventPriority.HIGHEST) @@ -51,12 +50,12 @@ private void onBlockBreak(BlockBreakEvent event) { if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { if (!Items.QUARTZ_PICKAXE.is(tool)) { - if (settings.BREAK_ONLY_WITH_SHOVEL) { + if (this.config.survival_break_only_with_shovel) { if (!Tag.ITEMS_SHOVELS.isTagged(tool.getType())) { if (BlockTags.REQUIRES_SHOVEL.isTagged(material)) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + lang.task_must_use_shovel); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_shovel); } //Flint if (material == Material.GRAVEL) { @@ -65,7 +64,7 @@ private void onBlockBreak(BlockBreakEvent event) { Random rand = new Random(); double chance = rand.nextDouble(); - if (chance <= settings.DROP_RATE_FLINT) + if (chance <= this.config.survival_drop_rate_flint) event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(Material.FLINT)); } } else { @@ -83,11 +82,11 @@ private void onBlockBreak(BlockBreakEvent event) { } } - if (settings.BREAK_ONLY_WITH_AXE && !Tag.ITEMS_AXES.isTagged(tool.getType())) { + if (this.config.survival_break_only_with_axe && !Tag.ITEMS_AXES.isTagged(tool.getType())) { if (BlockTags.REQUIRES_AXE.isTagged(material)) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + lang.task_must_use_axe); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_axe); } //Fix half door glitch @@ -98,19 +97,19 @@ private void onBlockBreak(BlockBreakEvent event) { block.getRelative(BlockFace.DOWN).getState().update(true); } } - if (settings.BREAK_ONLY_WITH_PICKAXE && !Tag.ITEMS_PICKAXES.isTagged(tool.getType())) { + if (this.config.survival_break_only_with_pickaxe && !Tag.ITEMS_PICKAXES.isTagged(tool.getType())) { if (BlockTags.REQUIRES_PICKAXE.isTagged(material)) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + lang.task_must_use_pick); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_pick); } } - if (settings.break_only_with_sickle) { + if (this.config.break_only_with_sickle) { if (BlockTags.FARMABLE.isTagged(material)) { if (!Items.Tags.SICKLES.isTagged(tool)) { event.setCancelled(true); - Utils.sendColoredMini(player, "" + lang.task_must_use_sickle); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_sickle); } else { event.setDropItems(false); Location loc = event.getBlock().getLocation(); @@ -142,7 +141,7 @@ private void onBlockBreak(BlockBreakEvent event) { if (drop == Material.PUMPKIN) { // prevent duping pumpkins random = 1; } - loc.getWorld().dropItemNaturally(loc.add(0.5,0.1,0.5), new ItemStack(drop, random)); + loc.getWorld().dropItemNaturally(loc.add(0.5, 0.1, 0.5), new ItemStack(drop, random)); } } if (tool.getType().getMaxDurability() < ItemUtils.getDurability(tool) + multiplier) { @@ -157,11 +156,11 @@ private void onBlockBreak(BlockBreakEvent event) { } if (!(tool.getType() == Material.SHEARS)) { - if (settings.BREAK_ONLY_WITH_SHEARS) { + if (this.config.survival_break_only_with_shears) { if (BlockTags.REQUIRES_SHEARS.isTagged(material)) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + lang.task_must_use_shear); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_shear); } } @@ -170,18 +169,18 @@ private void onBlockBreak(BlockBreakEvent event) { Random rand = new Random(); double chance = rand.nextDouble(); - if (chance <= settings.DROP_RATE_STICK) - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5,0.1,0.5), new ItemStack(Material.STICK)); + if (chance <= this.config.survival_drop_rate_stick) + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(Material.STICK)); } } - if (settings.recipes_workbench && material == Material.CRAFTING_TABLE && !event.isCancelled()) { + if (this.config.recipes_workbench && material == Material.CRAFTING_TABLE && !event.isCancelled()) { event.setDropItems(false); ItemStack workbench = Items.WORKBENCH.getItemStack(); block.getWorld().dropItem(block.getLocation(), workbench); } } else { if (BlockTags.ORE_TYPE_BLOCK.isTagged(material) || BlockTags.ORES.isTagged(material)) { - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5,0.1,0.5), new ItemStack(material)); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(material)); } } } @@ -191,9 +190,9 @@ private void onBlockBreak(BlockBreakEvent event) { @EventHandler private void onHarvest(PlayerInteractEvent e) { if (e.isCancelled()) return; - if (!settings.break_only_with_sickle) return; - if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_AIR - || e.getAction() == Action.LEFT_CLICK_BLOCK) return; + if (!this.config.break_only_with_sickle) return; + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK) + return; Player player = e.getPlayer(); Block block = e.getClickedBlock(); ItemStack tool = player.getInventory().getItemInMainHand(); @@ -208,7 +207,7 @@ private void onHarvest(PlayerInteractEvent e) { } if (!Items.Tags.SICKLES.isTagged(tool)) { e.setCancelled(true); - Utils.sendColoredMini(player, "" + lang.task_must_use_sickle); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_sickle); } else { if (bush.getAge() >= 2) { int berries = 0; @@ -225,26 +224,19 @@ private void onHarvest(PlayerInteractEvent e) { multiplier = 4; } else if (Items.STONE_SICKLE.is(tool)) { if (bush.getAge() == 2) { - if (random <= 4) - berries = 1; + if (random <= 4) berries = 1; } else if (bush.getAge() == 3) { - if (random <= 3) - berries = 1; - else - berries = 2; + if (random <= 3) berries = 1; + else berries = 2; } multiplier = 2; } else if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { if (bush.getAge() == 2) { - if (random <= 3) - berries = 1; - else - berries = 2; + if (random <= 3) berries = 1; + else berries = 2; } else if (bush.getAge() == 3) { - if (random <= 4) - berries = 2; - else - berries = 4; + if (random <= 4) berries = 2; + else berries = 4; } } if (berries != 0) @@ -266,7 +258,7 @@ private void onHarvest(PlayerInteractEvent e) { @EventHandler private void onWaterBreakCrops(BlockPhysicsEvent event) { - if (!settings.break_only_with_sickle) return; + if (!this.config.break_only_with_sickle) return; if (event.getSourceBlock().getType() == Material.WATER) { Material type = event.getBlock().getType(); if (BlockTags.FARMABLE.isTagged(type)) { @@ -280,7 +272,7 @@ private void onWaterBreakCrops(BlockPhysicsEvent event) { @EventHandler(priority = EventPriority.HIGHEST) private void onTrample(PlayerInteractEvent event) { if (event.isCancelled()) return; - if (!settings.break_only_with_sickle) return; + if (!this.config.break_only_with_sickle) return; if (event.getAction() == Action.PHYSICAL) { if (event.getClickedBlock() == null) return; if (event.getClickedBlock().getType() == Material.FARMLAND) { diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java index cf1ad1a..5315af6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java @@ -42,7 +42,7 @@ private void onBlockPlace(BlockPlaceEvent event) { Block block = event.getBlock(); if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - if (config.PLACE_ONLY_WITH_HAMMER) { + if (config.survival_place_only_with_hammer) { if (BlockTags.REQUIRES_HAMMER.isTagged(block.getType())) { if (Items.HAMMER.is(offTool)) { Random rand = new Random(); diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java b/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java index 4f07721..8c5a568 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java @@ -86,7 +86,7 @@ private void onPlayerInteract(PlayerInteractEvent event) { chairwidth += getChairWidth(block, BlockFace.SOUTH); } - if (chairwidth > config.MECHANICS_CHAIRS_MAX_WIDTH) + if (chairwidth > config.mechanics_chairs_max_width) return; // Sit-down process. @@ -239,7 +239,7 @@ private int getChairWidth(Block block, BlockFace face) { int width = 0; // Go through the blocks next to the clicked block and check if there are any further stairs. - for (int i = 1; i <= config.MECHANICS_CHAIRS_MAX_WIDTH; i++) { + for (int i = 1; i <= config.mechanics_chairs_max_width; i++) { Block relative = block.getRelative(face, i); if (plugin.getChairBlocks().contains(relative.getType()) && ((Stairs) relative.getBlockData()).getFacing() == ((Stairs) block.getBlockData()).getFacing()) diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java index 00e54fc..fc4aacc 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java @@ -37,8 +37,8 @@ public ChestPigmen(SurvivalPlugin plugin) { this.goldItems.add(material); } } - this.radius = plugin.getSurvivalConfig().ENTITY_MECHANICS_PIGMEN_CHEST_RADIUS; - double speedModifier = plugin.getSurvivalConfig().ENTITY_MECHANICS_PIGMEN_CHEST_SPEED; + this.radius = plugin.getSurvivalConfig().entity_mechanics_pigmen_chest_radius; + double speedModifier = plugin.getSurvivalConfig().entity_mechanics_pigmen_chest_speed; assert this.key != null; this.mod = speedModifier > 0 ? new AttributeModifier(this.key, speedModifier, Operation.ADD_SCALAR) : null; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java b/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java index 6e5b122..480f077 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java +++ b/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java @@ -17,21 +17,19 @@ public class EntityDeath implements Listener { private final Config config; - private final int SUSPICIOUS_MEAT_CHANCE; public EntityDeath(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); - this.SUSPICIOUS_MEAT_CHANCE = Math.max(0, this.config.ENTITY_MECHANICS_SUSPICIOUS_MEAT_CHANCE); } @EventHandler private void onEntityDeath(EntityDeathEvent event) { - if (!this.config.ENTITY_MECHANICS_SUSPICIOUS_MEAT_ENABLED) return; // May need to move if we add more items to drop in the future + if (!this.config.entity_mechanics_suspicious_meat_enabled) return; // May need to move if we add more items to drop in the future LivingEntity entity = event.getEntity(); Player killer = entity.getKiller(); if (killer != null) { int random = new Random().nextInt(100) + 1; - if (random > this.SUSPICIOUS_MEAT_CHANCE) return; + if (random > this.config.entity_mechanics_suspicious_meat_chance) return; switch (entity.getType()) { case ZOMBIE: case DROWNED: diff --git a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java index 830c331..36642cb 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java +++ b/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java @@ -31,7 +31,7 @@ private void onChat(AsyncPlayerChatEvent event) { PlayerData playerData = playerManager.getPlayerData(player); String msg = event.getMessage(); - if (config.legendary_goldarmorbuff) { + if (config.legendary_gold_armor_buff) { if (player.getInventory().getHelmet() != null) { if (player.getInventory().getHelmet().getType() == Material.GOLDEN_HELMET) { event.setCancelled(false); diff --git a/src/main/java/tk/shanebee/survival/managers/EffectManager.java b/src/main/java/tk/shanebee/survival/managers/EffectManager.java index 508e072..45f759f 100644 --- a/src/main/java/tk/shanebee/survival/managers/EffectManager.java +++ b/src/main/java/tk/shanebee/survival/managers/EffectManager.java @@ -31,17 +31,17 @@ public EffectManager(SurvivalPlugin plugin) { } private void loadEffects() { - if (config.legendary_blazesword) { + if (config.legendary_blaze_sword) { this.blazeSwordEffects = new BlazeSwordEffects(plugin); this.blazeSwordSound = new BlazeSwordSound(plugin); } - if (config.legendary_giantblade) + if (config.legendary_giant_blade) this.giantBlade = new GiantBlade(plugin); if (config.legendary_obsidian_mace) this.obsidianMace = new ObsidianMace(plugin); if (config.legendary_valkyrie) this.valkyrie = new Valkyrie(plugin); - if (config.legendary_quartzpickaxe) + if (config.legendary_quartz_pickaxe) this.quartzPickaxe = new QuartzPickaxe(plugin); } diff --git a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java index 0ad2a0f..bdf88f7 100644 --- a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java +++ b/src/main/java/tk/shanebee/survival/managers/RecipeManager.java @@ -77,19 +77,19 @@ private void removeRecipes() { if (this.config.mechanics_farming_products_bread) { removeRecipeByKey("bread"); } - if (this.config.legendary_goldarmorbuff) { + if (this.config.legendary_gold_armor_buff) { removeRecipeByKey("golden_helmet"); removeRecipeByKey("golden_chestplate"); removeRecipeByKey("golden_boots"); removeRecipeByKey("golden_leggings"); } - if (this.config.legendary_blazesword) { + if (this.config.legendary_blaze_sword) { removeRecipeByKey("golden_sword"); } - if (this.config.legendary_giantblade) { + if (this.config.legendary_giant_blade) { removeRecipeByKey("golden_hoe"); } - if (this.config.legendary_quartzpickaxe) { + if (this.config.legendary_quartz_pickaxe) { removeRecipeByKey("golden_pickaxe"); } if (this.config.legendary_obsidian_mace) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6ac1274..19b414d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -258,8 +258,7 @@ Mechanics: # Whether a player is able to set a point for each world per-world: true # Players can eat a tropical fish to teleport to their waypoint - # (Clownfish was the old type that's why this is still here) - Clownfish: true + TropicalFish: true # Enables fermented skin recipes FermentedSkin: true From 7ad7532387ff5177261a8dc2494b242d645ebad9 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 15:08:37 -0800 Subject: [PATCH 064/133] small chair update --- .../tk/shanebee/survival/SurvivalPlugin.java | 16 ------ .../tk/shanebee/survival/config/Config.java | 53 ++++++++++++++++++- .../survival/listeners/block/Chairs.java | 38 ++++++------- src/main/resources/config.yml | 25 ++------- 4 files changed, 72 insertions(+), 60 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java index 0350026..dc6c1a5 100644 --- a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java +++ b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java @@ -51,7 +51,6 @@ public class SurvivalPlugin extends JavaPlugin implements Listener { // Lists & Maps private final List Rates = new ArrayList<>(); - private final List chairBlocks = new ArrayList<>(); private Map playerDataMap = new HashMap<>(); // Configs @@ -275,14 +274,6 @@ public void loadSettings(CommandSender sender) { } this.lang.loadLangFile(sender); this.prefix = lang.prefix; - for (String type : config.MECHANICS_CHAIRS_BLOCKS) { - Material mat = Material.getMaterial(type); - if (mat != null) { - chairBlocks.add(mat); - } else { - Utils.logMini("Invalid chair block material: " + type); - } - } this.playerDataConfig = new PlayerDataConfig(this); } @@ -388,13 +379,6 @@ public void setSnowGenOption(boolean snowGenOption) { this.snowGenOption = snowGenOption; } - /** Get acceptable chair blocks - * @return List of chair blocks - */ - public List getChairBlocks() { - return chairBlocks; - } - public PlayerDataConfig getPlayerDataConfig() { return playerDataConfig; } diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index ba3cc24..1f21a2d 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -1,5 +1,10 @@ package tk.shanebee.survival.config; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.Tag; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import tk.shanebee.survival.SurvivalPlugin; @@ -8,8 +13,10 @@ import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.ArrayList; import java.util.List; +@SuppressWarnings("NullableProblems") public class Config { private final SurvivalPlugin plugin; @@ -145,7 +152,7 @@ public class Config { public boolean mechanics_chairs_enabled; public int mechanics_chairs_max_width; - public List MECHANICS_CHAIRS_BLOCKS; + public List mechanics_chairs_blocks; public boolean MECHANICS_BURNOUT_TORCH_ENABLED; public int MECHANICS_BURNOUT_TORCH_TIME; @@ -402,7 +409,7 @@ private void loadSettings() { this.mechanics_chairs_enabled = settings.getBoolean("Mechanics.Chairs.Enabled"); this.mechanics_chairs_max_width = settings.getInt("Mechanics.Chairs.MaxChairWidth"); - this.MECHANICS_CHAIRS_BLOCKS = settings.getStringList("Mechanics.Chairs.AllowedBlocks"); + this.mechanics_chairs_blocks = getChairBlocks(); this.MECHANICS_BURNOUT_TORCH_ENABLED = settings.getBoolean("Mechanics.BurnoutTorches.Enabled"); this.MECHANICS_BURNOUT_TORCH_TIME = settings.getInt("Mechanics.BurnoutTorches.BurnoutTime"); @@ -472,4 +479,46 @@ private void loadSettings() { this.RECIPE_DELAY = settings.getInt("recipe-delay", 0); } + private List getChairBlocks() { + List materials = new ArrayList<>(); + List allowedByStrings = settings.getStringList("Mechanics.Chairs.AllowedBlocks"); + for (String string : allowedByStrings) { + if (string.startsWith("#")) { + NamespacedKey key; + if (string.contains(":")) key = NamespacedKey.fromString(string.substring(1)); + else key = NamespacedKey.minecraft(string.substring(1)); + + if (key != null) { + Tag tag = Bukkit.getTag(Tag.REGISTRY_BLOCKS, key, Material.class); + if (tag != null) { + for (Material material : tag.getValues()) { + if (Tag.STAIRS.isTagged(material)) { + materials.add(material); + } else { + Utils.logMini("Invalid chair material: %s", key.toString()); + } + } + } + } + } else { + NamespacedKey key; + if (string.contains(":")) key = NamespacedKey.fromString(string); + else key = NamespacedKey.minecraft(string); + + if (key != null) { + Material material = Registry.MATERIAL.get(key); + if (material != null) { + if (Tag.STAIRS.isTagged(material)) { + materials.add(material); + } else { + Utils.logMini("Invalid chair material: %s", key.toString()); + } + } + + } + } + } + return materials; + } + } diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java b/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java index 8c5a568..fab5f65 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java +++ b/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java @@ -43,7 +43,7 @@ private void onPlayerInteract(PlayerInteractEvent event) { Block block = event.getClickedBlock(); assert block != null; - if (plugin.getChairBlocks().contains(block.getType())) { + if (this.config.mechanics_chairs_blocks.contains(block.getType())) { Player player = event.getPlayer(); Stairs stairs = (Stairs) block.getBlockData(); int chairwidth = 1; @@ -58,7 +58,7 @@ private void onPlayerInteract(PlayerInteractEvent event) { return; } - // Check for distance distance between player and chair. + // Check for distance between player and chair. if (player.getLocation().distance(block.getLocation().add(0.5, 0, 0.5)) > 2) return; @@ -86,7 +86,7 @@ private void onPlayerInteract(PlayerInteractEvent event) { chairwidth += getChairWidth(block, BlockFace.SOUTH); } - if (chairwidth > config.mechanics_chairs_max_width) + if (chairwidth > this.config.mechanics_chairs_max_width) return; // Sit-down process. @@ -152,7 +152,7 @@ public void run() { @EventHandler(priority = EventPriority.HIGHEST) private void onBlockBreak(BlockBreakEvent event) { if (event.isCancelled()) return; - if (plugin.getChairBlocks().contains(event.getBlock().getType())) { + if (this.config.mechanics_chairs_blocks.contains(event.getBlock().getType())) { ArmorStand drop = dropSeat(event.getBlock(), ((Stairs) event.getBlock().getBlockData())); for (Entity e : drop.getNearbyEntities(0.5, 0.5, 0.5)) { @@ -239,10 +239,10 @@ private int getChairWidth(Block block, BlockFace face) { int width = 0; // Go through the blocks next to the clicked block and check if there are any further stairs. - for (int i = 1; i <= config.mechanics_chairs_max_width; i++) { + for (int i = 1; i <= this.config.mechanics_chairs_max_width; i++) { Block relative = block.getRelative(face, i); - if (plugin.getChairBlocks().contains(relative.getType()) && ((Stairs) relative.getBlockData()).getFacing() == ((Stairs) block.getBlockData()).getFacing()) + if (this.config.mechanics_chairs_blocks.contains(relative.getType()) && ((Stairs) relative.getBlockData()).getFacing() == ((Stairs) block.getBlockData()).getFacing()) width++; else break; @@ -255,22 +255,16 @@ private boolean checkSign(Block block, BlockFace face) { // Go through the blocks next to the clicked block and check if are signs on the end. for (int i = 1; true; i++) { Block relative = block.getRelative(face, i); - if (!(plugin.getChairBlocks().contains(relative.getType())) || (block.getBlockData() instanceof Stairs && ((Stairs) relative.getBlockData()).getFacing() != ((Stairs) block.getBlockData()).getFacing())) { - if (Tag.SIGNS.isTagged(relative.getType())) return true; - switch (relative.getType()) { - case ITEM_FRAME: - case PAINTING: - case ACACIA_TRAPDOOR: - case BIRCH_TRAPDOOR: - case JUNGLE_TRAPDOOR: - case OAK_TRAPDOOR: - case SPRUCE_TRAPDOOR: - case DARK_OAK_TRAPDOOR: - case IRON_TRAPDOOR: - return true; - default: - return false; - } + if (!(this.config.mechanics_chairs_blocks.contains(relative.getType())) || + (block.getBlockData() instanceof Stairs && + ((Stairs) relative.getBlockData()).getFacing() != ((Stairs) block.getBlockData()).getFacing())) { + Material relativeType = relative.getType(); + if (Tag.SIGNS.isTagged(relativeType)) return true; + if (Tag.TRAPDOORS.isTagged(relativeType)) return true; + return switch (relativeType) { + case ITEM_FRAME, PAINTING -> true; + default -> false; + }; } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 19b414d..33bc1d9 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -280,26 +280,11 @@ Mechanics: Chairs: Enabled: true MaxChairWidth: 2 - # These must be Bukkit material Enums - # https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html + # Blocks that can be used as chairs + # Has to be a stair block + # Accepts Minecraft namespaced keys and tags AllowedBlocks: - - OAK_STAIRS - - SPRUCE_STAIRS - - JUNGLE_STAIRS - - BIRCH_STAIRS - - ACACIA_STAIRS - - DARK_OAK_STAIRS - - SANDSTONE_STAIRS - - COBBLESTONE_STAIRS - - BRICK_STAIRS - - STONE_BRICK_STAIRS - - NETHER_BRICK_STAIRS - - QUARTZ_STAIRS - - RED_SANDSTONE_STAIRS - - PURPUR_STAIRS - - PRISMARINE_STAIRS - - PRISMARINE_BRICK_STAIRS - - DARK_PRISMARINE_STAIRS + - '#minecraft:stairs' # EXPERIMENTAL FEATURE # DO NOT USE @@ -309,7 +294,7 @@ Mechanics: BurnoutTime: 60 # If burnout torches can be re-lit Relightable: true - # If non persistent torches will drop a torch when broken, if disabled will drop a stick + # If non-persistent torches will drop a torch when broken, if disabled will drop a stick DropTorch: true # If persistent torches are enabled PersistentTorches: true From 9e34388e0b9c27a60acba94a8e406ae9cfe3c070 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 15:26:29 -0800 Subject: [PATCH 065/133] More config cleanup --- .../tk/shanebee/survival/SurvivalPlugin.java | 41 ++++----------- .../tk/shanebee/survival/config/Config.java | 52 +++++++++---------- .../shanebee/survival/gui/FireStrikerGUI.java | 2 +- .../survival/listeners/EventManager.java | 2 +- .../shanebee/survival/tasks/WeatherTask.java | 25 +++------ 5 files changed, 46 insertions(+), 76 deletions(-) diff --git a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java index dc6c1a5..1ebc72f 100644 --- a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java +++ b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java @@ -34,13 +34,11 @@ import tk.shanebee.survival.util.BlockTags; import tk.shanebee.survival.util.Utils; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.UUID; -@SuppressWarnings("ConstantConditions") +@SuppressWarnings("UnstableApiUsage") public class SurvivalPlugin extends JavaPlugin implements Listener { static { @@ -49,8 +47,7 @@ public class SurvivalPlugin extends JavaPlugin implements Listener { private static SurvivalPlugin instance; - // Lists & Maps - private final List Rates = new ArrayList<>(); + // Lists & Map private Map playerDataMap = new HashMap<>(); // Configs @@ -132,21 +129,6 @@ public void onEnable() { Utils.logMini("Resource Pack disabled"); } - Rates.add(config.survival_drop_rate_flint); - Rates.add(config.survival_drop_rate_stick); - Rates.add(config.mechanics_thirst_drain_rate); - for (double i : Rates) { - if (i <= 0) { - Utils.logMini("Rate values cannot be zero or below! (Check config.yml) Plugin disabled."); - Bukkit.getPluginManager().disablePlugin(this); - return; - } else if (i > 1) { - Utils.logMini("Rate values cannot be above 1! (Check config.yml) Plugin disabled."); - Bukkit.getPluginManager().disablePlugin(this); - return; - } - } - // LOAD MANAGERS BlockTags.initialize(); blockManager = new BlockManager(this); @@ -174,12 +156,12 @@ public void onEnable() { // LOAD CUSTOM RECIPES // This is a helper for other plugins that wipe custom recipes - secret hidden config - if (config.RECIPE_DELAY > 0) { - Utils.logMini("Custom recipe loading delayed... will load in " + config.RECIPE_DELAY + " second[s]"); + if (config.recipe_delay > 0) { + Utils.logMini("Custom recipe loading delayed... will load in " + config.recipe_delay + " second[s]"); Bukkit.getScheduler().runTaskLater(this, () -> { this.recipeManager.loadCustomRecipes(); Utils.logMini("Custom recipes loaded"); - }, config.RECIPE_DELAY * 20L); + }, config.recipe_delay * 20L); } else { this.recipeManager.loadCustomRecipes(); @@ -193,7 +175,7 @@ public void onEnable() { Utils.logMini("Successfully loaded in " + (System.currentTimeMillis() - time) + " milliseconds"); // BETA WARNING - if (this.getDescription().getVersion().contains("Beta")) { + if (this.getPluginMeta().getVersion().contains("Beta")) { Utils.logMini("YOU ARE RUNNING A BETA VERSION, PLEASE USE WITH CAUTION!"); } } @@ -213,11 +195,11 @@ public void onDisable() { playerDataLoader(false); //Avoid WorkbenchShare glitch - if (config.mechanics_shared_workbench) { + if (this.config.mechanics_shared_workbench) { for (Player p : Bukkit.getOnlinePlayers()) { if (p.hasMetadata("shared_workbench")) { - Block workbench = (p.getMetadata("shared_workbench").get(0).value() instanceof Block) ? (Block) - p.getMetadata("shared_workbench").get(0).value() : null; + Block workbench = (p.getMetadata("shared_workbench").getFirst().value() instanceof Block) ? (Block) + p.getMetadata("shared_workbench").getFirst().value() : null; if (workbench != null && workbench.getType() == Material.CRAFTING_TABLE) { if (workbench.hasMetadata("shared_players")) @@ -266,11 +248,10 @@ private void playerDataLoader(boolean load) { public void loadSettings(CommandSender sender) { if (this.config == null) { this.config = new Config(this); - } else { - this.config.loadDefaultSettings(); } + this.config.loadDefaultSettings(); if (this.lang == null) { - this.lang = new Lang(this, config.LANG); + this.lang = new Lang(this, this.config.lang); } this.lang.loadLangFile(sender); this.prefix = lang.prefix; diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/tk/shanebee/survival/config/Config.java index 1f21a2d..822862d 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/tk/shanebee/survival/config/Config.java @@ -16,21 +16,20 @@ import java.util.ArrayList; import java.util.List; -@SuppressWarnings("NullableProblems") public class Config { private final SurvivalPlugin plugin; private FileConfiguration settings; private File configFile; - public String LANG; + public String lang; public String settings_resource_pack_url; public boolean settings_resource_pack_enabled; public int settings_local_chat_distance; - public boolean WELCOME_GUIDE_ENABLED; + public boolean welcome_guide_enabled; public boolean welcome_guide_new_players; public int welcome_guide_delay; @@ -161,14 +160,14 @@ public class Config { public boolean MECHANICS_BURNOUT_TORCH_PERSIST; public boolean mechanics_weather_enabled; - public double MECHANICS_WEATHER_SPEED_BASE; - public double MECHANICS_WEATHER_SPEED_RAIN; - public double MECHANICS_WEATHER_SPEED_STORM; - public double MECHANICS_WEATHER_SPEED_SNOW; - public double MECHANICS_WEATHER_SPEED_SNOWSTORM; + public double mechanics_weather_speed_base; + public double mechanics_weather_speed_rain; + public double mechanics_weather_speed_storm; + public double mechanics_weather_speed_snow; + public double mechanics_weather_speed_snowstorm; // ITEM MECHANICS - public int ITEM_FIRESTRIKER_COOK_TIME; + public int item_mechanics_firestriker_cook_time; // ENTITY MECHANICS public boolean entity_mechanics_pigmen_chest_enabled; @@ -219,25 +218,24 @@ public class Config { public boolean legendary_gold_armor_buff; // HIDDEN CONFIG - public int RECIPE_DELAY; + public int recipe_delay; public Config(SurvivalPlugin plugin) { this.plugin = plugin; - loadDefaultSettings(); } public void loadDefaultSettings() { - if (configFile == null) { - configFile = new File(plugin.getDataFolder(), "config.yml"); + if (this.configFile == null) { + this.configFile = new File(plugin.getDataFolder(), "config.yml"); } - if (!configFile.exists()) { - plugin.saveResource("config.yml", false); - settings = YamlConfiguration.loadConfiguration(configFile); + if (!this.configFile.exists()) { + this.plugin.saveResource("config.yml", false); + this.settings = YamlConfiguration.loadConfiguration(this.configFile); Utils.logMini("new config.yml created"); } else { - settings = YamlConfiguration.loadConfiguration(configFile); + this.settings = YamlConfiguration.loadConfiguration(this.configFile); } - matchConfig(settings, configFile); + matchConfig(this.settings, this.configFile); loadSettings(); Utils.logMini("config.yml loaded"); } @@ -277,7 +275,7 @@ public FileConfiguration getSettings() { private void loadSettings() { - this.LANG = settings.getString("Language"); + this.lang = settings.getString("Language"); // SETTINGS this.settings_resource_pack_enabled = settings.getBoolean("Settings.enable-resource-pack"); @@ -285,7 +283,7 @@ private void loadSettings() { this.settings_local_chat_distance = settings.getInt("settings.local-chat-distance"); // WELCOME GUIDE - this.WELCOME_GUIDE_ENABLED = settings.getBoolean("WelcomeGuide.Enabled"); + this.welcome_guide_enabled = settings.getBoolean("WelcomeGuide.Enabled"); this.welcome_guide_new_players = settings.getBoolean("WelcomeGuide.NewPlayersOnly"); this.welcome_guide_delay = settings.getInt("WelcomeGuide.Delay"); @@ -418,14 +416,14 @@ private void loadSettings() { this.MECHANICS_BURNOUT_TORCH_PERSIST = settings.getBoolean("Mechanics.BurnoutTorches.PersistentTorches"); this.mechanics_weather_enabled = settings.getBoolean("Mechanics.Weather.Enabled"); - this.MECHANICS_WEATHER_SPEED_BASE = settings.getDouble("Mechanics.Weather.speed.base"); - this.MECHANICS_WEATHER_SPEED_RAIN = settings.getDouble("Mechanics.Weather.speed.rain"); - this.MECHANICS_WEATHER_SPEED_STORM = settings.getDouble("Mechanics.Weather.speed.storm"); - this.MECHANICS_WEATHER_SPEED_SNOW = settings.getDouble("Mechanics.Weather.speed.snow"); - this.MECHANICS_WEATHER_SPEED_SNOWSTORM = settings.getDouble("Mechanics.Weather.speed.snowstorm"); + this.mechanics_weather_speed_base = settings.getDouble("Mechanics.Weather.speed.base"); + this.mechanics_weather_speed_rain = settings.getDouble("Mechanics.Weather.speed.rain"); + this.mechanics_weather_speed_storm = settings.getDouble("Mechanics.Weather.speed.storm"); + this.mechanics_weather_speed_snow = settings.getDouble("Mechanics.Weather.speed.snow"); + this.mechanics_weather_speed_snowstorm = settings.getDouble("Mechanics.Weather.speed.snowstorm"); // ITEM MECHANICS - this.ITEM_FIRESTRIKER_COOK_TIME = settings.getInt("Item-Mechanics.firestriker.cook-time"); + this.item_mechanics_firestriker_cook_time = settings.getInt("Item-Mechanics.firestriker.cook-time"); // ENTITY MECHANICS this.entity_mechanics_pigmen_chest_enabled = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); @@ -476,7 +474,7 @@ private void loadSettings() { this.legendary_gold_armor_buff = settings.getBoolean("LegendaryItems.GoldArmorBuff"); // HIDDEN CONFIG - this.RECIPE_DELAY = settings.getInt("recipe-delay", 0); + this.recipe_delay = settings.getInt("recipe-delay", 0); } private List getChairBlocks() { diff --git a/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java b/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java index c4fbeb8..7604178 100644 --- a/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java +++ b/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java @@ -50,7 +50,7 @@ private FireStrikerGUI(Player player, ItemStack itemStack) { this.inv = this.furnaceView.getTopInventory(); this.player = player; this.firestrikerItemStack = itemStack; - this.maxCookTime = plugin.getSurvivalConfig().ITEM_FIRESTRIKER_COOK_TIME; + this.maxCookTime = plugin.getSurvivalConfig().item_mechanics_firestriker_cook_time; this.cookTime = 0; ItemMeta itemMeta = itemStack.getItemMeta(); diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/tk/shanebee/survival/listeners/EventManager.java index afd1010..c229c39 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/tk/shanebee/survival/listeners/EventManager.java @@ -136,7 +136,7 @@ public void registerEvents() { pm.registerEvents(new SnowGeneration(plugin), this.plugin); if (config.entity_mechanics_chicken_breeding_enabled) pm.registerEvents(new ChickenSpawn(this.plugin), this.plugin); - if (config.WELCOME_GUIDE_ENABLED) + if (config.welcome_guide_enabled) pm.registerEvents(new Guide(plugin), this.plugin); if (config.MECHANICS_BURNOUT_TORCH_ENABLED) // TODO experimental feature, not 100% sure about this pm.registerEvents(new BurnoutTorches(this.plugin), this.plugin); diff --git a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java index e76023e..b64b9d7 100644 --- a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java +++ b/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java @@ -19,19 +19,10 @@ @SuppressWarnings("BooleanMethodIsAlwaysInverted") public class WeatherTask extends BukkitRunnable { - private final double baseSpeed; - private final double rainSpeed; - private final double stormSpeed; - private final double snowSpeed; - private final double snowstormSpeed; + private final Config config; public WeatherTask(SurvivalPlugin plugin) { - Config config = plugin.getSurvivalConfig(); - this.baseSpeed = config.MECHANICS_WEATHER_SPEED_BASE; - this.rainSpeed = config.MECHANICS_WEATHER_SPEED_RAIN; - this.stormSpeed = config.MECHANICS_WEATHER_SPEED_STORM; - this.snowSpeed = config.MECHANICS_WEATHER_SPEED_SNOW; - this.snowstormSpeed = config.MECHANICS_WEATHER_SPEED_SNOWSTORM; + this.config = plugin.getSurvivalConfig(); this.runTaskTimer(plugin, 20, 10); } @@ -47,18 +38,18 @@ private void handleWeather(Player player) { GameMode mode = player.getGameMode(); if (world.getEnvironment() == Environment.NORMAL && (mode == GameMode.SURVIVAL || mode == GameMode.ADVENTURE)) { if (isInSnowstorm(player) && !hasSnowBoots(player)) { - setWalkSpeed(player, this.snowstormSpeed); + setWalkSpeed(player, this.config.mechanics_weather_speed_snowstorm); } else if (isOnSnow(player) && !hasSnowBoots(player)) { - setWalkSpeed(player, this.snowSpeed); + setWalkSpeed(player, this.config.mechanics_weather_speed_snow); } else if (isInStorm(player) && !hasRainBoots(player)) { - setWalkSpeed(player, this.stormSpeed); + setWalkSpeed(player, this.config.mechanics_weather_speed_storm); } else if (player.isInRain() && !hasRainBoots(player)) { - setWalkSpeed(player, this.rainSpeed); + setWalkSpeed(player, this.config.mechanics_weather_speed_rain); } else { - setWalkSpeed(player, this.baseSpeed); + setWalkSpeed(player, this.config.mechanics_weather_speed_base); } } else { - setWalkSpeed(player, this.baseSpeed); + setWalkSpeed(player, this.config.mechanics_weather_speed_base); } } From c00c16fcce8a79ec4443a36300b162155ce93736 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 16:33:08 -0800 Subject: [PATCH 066/133] resource pack fixes --- .../survival/item/items/armor/ArmorPiece.java | 13 +++ .../survival_plus/items/coffee_bean.json | 6 ++ .../survival_plus/items/fermented_skin.json | 6 ++ .../survival_plus/items/golden_crown.json | 6 ++ .../survival_plus/items/golden_greaves.json | 89 ++++++++++++++++++ .../survival_plus/items/golden_guard.json | 89 ++++++++++++++++++ .../survival_plus/items/golden_sabatons.json | 89 ++++++++++++++++++ .../models/item/coffee_bean.json | 6 ++ .../models/item/fermented_skin.json | 6 ++ .../models/item/golden_crown.json | 6 ++ .../textures/item/coffee_bean.png | Bin 0 -> 2630 bytes .../textures/item/fermented_skin.png | Bin 0 -> 2776 bytes .../{golden_helmet.png => golden_crown.png} | Bin 13 files changed, 316 insertions(+) create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/coffee_bean.json create mode 100644 src/main/resources/resource-pack/assets/survival_plus/items/fermented_skin.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/items/golden_crown.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/items/golden_greaves.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/items/golden_guard.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/items/golden_sabatons.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/coffee_bean.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/fermented_skin.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/models/item/golden_crown.json create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/coffee_bean.png create mode 100755 src/main/resources/resource-pack/assets/survival_plus/textures/item/fermented_skin.png rename src/main/resources/resource-pack/assets/survival_plus/textures/item/{golden_helmet.png => golden_crown.png} (100%) diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java index c9db170..b2bc8cc 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java +++ b/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java @@ -1,11 +1,15 @@ package tk.shanebee.survival.item.items.armor; +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.Equippable; +import net.kyori.adventure.key.Key; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Registry; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; @@ -50,6 +54,15 @@ public ArmorPiece(ArmorType armorType, ArmorMaterial armorMaterial, double armor } itemStack.setItemMeta(itemMeta); + + // Golden crown override + if (armorMaterial == ArmorMaterial.GOLDEN && armorType == ArmorType.HELMET) { + itemStack.setData(DataComponentTypes.EQUIPPABLE, + Equippable.equippable(EquipmentSlot.HEAD) + .assetId(Key.key("survival_plus:gold")) + .build()); + } + setupDefaults(armorMaterial.getKey(armorType), itemStack, this.armorMaterial != ArmorMaterial.GOLDEN && this.armorMaterial != ArmorMaterial.LEATHER); } diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/coffee_bean.json b/src/main/resources/resource-pack/assets/survival_plus/items/coffee_bean.json new file mode 100644 index 0000000..bc82092 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/coffee_bean.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/coffee_bean" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/fermented_skin.json b/src/main/resources/resource-pack/assets/survival_plus/items/fermented_skin.json new file mode 100644 index 0000000..2de0686 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/fermented_skin.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/fermented_skin" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/golden_crown.json b/src/main/resources/resource-pack/assets/survival_plus/items/golden_crown.json new file mode 100755 index 0000000..6a858c9 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/golden_crown.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "survival_plus:item/golden_crown" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/golden_greaves.json b/src/main/resources/resource-pack/assets/survival_plus/items/golden_greaves.json new file mode 100755 index 0000000..59eba29 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/golden_greaves.json @@ -0,0 +1,89 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_quartz_trim" + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_iron_trim" + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_netherite_trim" + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_redstone_trim" + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_copper_trim" + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_gold_trim" + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_emerald_trim" + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_diamond_trim" + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_lapis_trim" + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_amethyst_trim" + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings_resin_trim" + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/golden_leggings" + }, + "property": "minecraft:trim_material" + } +} \ No newline at end of file diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/golden_guard.json b/src/main/resources/resource-pack/assets/survival_plus/items/golden_guard.json new file mode 100755 index 0000000..7478fd9 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/golden_guard.json @@ -0,0 +1,89 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_quartz_trim" + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_iron_trim" + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_netherite_trim" + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_redstone_trim" + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_copper_trim" + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_gold_trim" + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_emerald_trim" + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_diamond_trim" + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_lapis_trim" + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_amethyst_trim" + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate_resin_trim" + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/golden_chestplate" + }, + "property": "minecraft:trim_material" + } +} \ No newline at end of file diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/golden_sabatons.json b/src/main/resources/resource-pack/assets/survival_plus/items/golden_sabatons.json new file mode 100755 index 0000000..245b342 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/items/golden_sabatons.json @@ -0,0 +1,89 @@ +{ + "model": { + "type": "minecraft:select", + "cases": [ + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_quartz_trim" + }, + "when": "minecraft:quartz" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_iron_trim" + }, + "when": "minecraft:iron" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_netherite_trim" + }, + "when": "minecraft:netherite" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_redstone_trim" + }, + "when": "minecraft:redstone" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_copper_trim" + }, + "when": "minecraft:copper" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_gold_trim" + }, + "when": "minecraft:gold" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_emerald_trim" + }, + "when": "minecraft:emerald" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_diamond_trim" + }, + "when": "minecraft:diamond" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_lapis_trim" + }, + "when": "minecraft:lapis" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_amethyst_trim" + }, + "when": "minecraft:amethyst" + }, + { + "model": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots_resin_trim" + }, + "when": "minecraft:resin" + } + ], + "fallback": { + "type": "minecraft:model", + "model": "minecraft:item/golden_boots" + }, + "property": "minecraft:trim_material" + } +} \ No newline at end of file diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/coffee_bean.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/coffee_bean.json new file mode 100755 index 0000000..f860433 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/coffee_bean.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/coffee_bean" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/fermented_skin.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/fermented_skin.json new file mode 100755 index 0000000..fce998d --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/fermented_skin.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/fermented_skin" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/golden_crown.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/golden_crown.json new file mode 100755 index 0000000..2f2109b --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/golden_crown.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "survival_plus:item/golden_crown" + } +} diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/coffee_bean.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/coffee_bean.png new file mode 100755 index 0000000000000000000000000000000000000000..f7e7534aeea9c1b7f7252af4661d60437f88cbd2 GIT binary patch literal 2630 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 Uu()IC4GN;)+sV5g{_*ku0(E9J-T(jq literal 0 HcmV?d00001 diff --git a/src/main/resources/resource-pack/assets/survival_plus/textures/item/golden_helmet.png b/src/main/resources/resource-pack/assets/survival_plus/textures/item/golden_crown.png similarity index 100% rename from src/main/resources/resource-pack/assets/survival_plus/textures/item/golden_helmet.png rename to src/main/resources/resource-pack/assets/survival_plus/textures/item/golden_crown.png From 44b83a0c96d6e1bb03f873140f15bcb85f1d3d10 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 16:42:51 -0800 Subject: [PATCH 067/133] gradle.yml - add resource pack --- .github/workflows/gradle.yml | 70 +++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 6866a9d..3a11cc6 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -8,32 +8,52 @@ name: Java CI with Gradle on: - push: - branches: [ '**' ] - pull_request: - branches: [ '**' ] + push: + branches: + - master + - 'dev/**' + - 'update/**' + pull_request: permissions: - contents: read + contents: read jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 21 - uses: actions/setup-java@v4.2.1 - with: - java-version: '21' - distribution: 'temurin' - - name: Build with Gradle - uses: gradle/actions/setup-gradle@v3 - with: - arguments: build - - name: Upload a Build Artifact - uses: actions/upload-artifact@master - with: - # Artifact name - name: SurvivalPlus-Artifact - # A file, directory or wildcard pattern that describes what to upload - path: build/libs/SurvivalPlus*.jar + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v4.2.1 + with: + java-version: '21' + distribution: 'temurin' + - name: Build with Gradle + uses: gradle/actions/setup-gradle@v3 + with: + arguments: build + - name: Upload a Build Artifact + uses: actions/upload-artifact@master + with: + # Artifact name + name: SurvivalPlus-Plugin + # A file, directory or wildcard pattern that describes what to upload + path: build/libs/SurvivalPlus-*.jar + build_resource_pack: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v4.2.1 + with: + java-version: '21' + distribution: 'temurin' + - name: Build with Gradle + uses: gradle/actions/setup-gradle@v3 + with: + arguments: resourcepack + - name: Upload a Build Artifact + uses: actions/upload-artifact@master + with: + # A file, directory or wildcard pattern that describes what to upload + path: build/libs/SurvivalPlusResourcePack-*.zip From 76435e91daf8b7ae5c27dc2feec5996693d190e8 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 16:47:43 -0800 Subject: [PATCH 068/133] gradle.yml - apparently no name = "artifact" --- .github/workflows/gradle.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 3a11cc6..f79fdb5 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -55,5 +55,7 @@ jobs: - name: Upload a Build Artifact uses: actions/upload-artifact@master with: + # Artifact name + name: SurvivalPlus-ResourcePack # A file, directory or wildcard pattern that describes what to upload path: build/libs/SurvivalPlusResourcePack-*.zip From 4abb0a7f2591bc4ce349ca90b34acc1a87fbcf80 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 16:49:58 -0800 Subject: [PATCH 069/133] gradle.yml - rename first build --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index f79fdb5..9efa6f4 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -19,7 +19,7 @@ permissions: contents: read jobs: - build: + build_plugin: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From 84f6fcecfb1d7d925d3e44400b1d79e6db83b21e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 16:57:14 -0800 Subject: [PATCH 070/133] build.gradle.kts - some cleanup --- build.gradle.kts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 41e760d..dd7ce64 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,6 +3,15 @@ plugins { id("io.github.goooler.shadow") version "8.1.7" } +// Where this builds on the server +val serverLocation = "Skript/1-21-4" +// Version of SurvivalPlus +val projectVersion = "1.0.0" +// Minecraft version to build against +val minecraftVersion = "1.21.4" + +java.sourceCompatibility = JavaVersion.VERSION_21 + repositories { mavenCentral() mavenLocal() @@ -22,7 +31,7 @@ repositories { dependencies { // Paper - compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:${minecraftVersion}-R0.1-SNAPSHOT") // FastBoard implementation("fr.mrmicky:fastboard:2.1.3") @@ -34,13 +43,6 @@ dependencies { compileOnly("me.clip:placeholderapi:2.11.6") } -// Where this builds on the server -val serverLocation = "1-21-4" -// Version of SurvivalPlus -val projectVersion = "1.0.0" - -java.sourceCompatibility = JavaVersion.VERSION_21 - tasks { register("server", Copy::class) { dependsOn("shadowJar") @@ -66,10 +68,13 @@ tasks { } javadoc { options.encoding = Charsets.UTF_8.name() - exclude("com/shanebeestudios/core/plugin") + exclude("tk/shanebee/survival/SurvivalBootstrap.java") + exclude("tk/shanebee/survival/commands") + exclude("tk/shanebee/survival/listeners") + exclude("tk/shanebee/survival/tasks") (options as StandardJavadocDocletOptions).links( - "https://jd.papermc.io/paper/1.21.1/", - "https://jd.advntr.dev/api/4.17.0/" + "https://jd.papermc.io/paper/${minecraftVersion}/", + "https://jd.advntr.dev/api/4.18.0/" ) } From 5dabe8b294ab12c95460200385039d1aacee736a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 17:03:39 -0800 Subject: [PATCH 071/133] update bstats - use shade instead of class --- build.gradle.kts | 5 + .../tk/shanebee/survival/SurvivalPlugin.java | 5 +- .../tk/shanebee/survival/metrics/Metrics.java | 718 ------------------ 3 files changed, 7 insertions(+), 721 deletions(-) delete mode 100644 src/main/java/tk/shanebee/survival/metrics/Metrics.java diff --git a/build.gradle.kts b/build.gradle.kts index dd7ce64..474203d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -41,6 +41,10 @@ dependencies { // Papi compileOnly("me.clip:placeholderapi:2.11.6") + + // bStats + implementation("org.bstats:bstats-bukkit:3.0.2") + } tasks { @@ -81,6 +85,7 @@ tasks { shadowJar { relocate("fr.mrmicky.fastboard", "com.shanebeestudios.survival.api.fastboard") relocate("dev.jorel.commandapi", "com.shanebeestudios.survival.api.commandapi") + relocate("org.bstats.bukkit", "com.shanebeestudios.survival.api.metrics.bstats") archiveFileName = "SurvivalPlus-${projectVersion}.jar" } jar { diff --git a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java index 1ebc72f..3970ce7 100644 --- a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java +++ b/src/main/java/tk/shanebee/survival/SurvivalPlugin.java @@ -3,6 +3,7 @@ import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPIBukkitConfig; import dev.jorel.commandapi.exceptions.UnsupportedVersionException; +import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.GameRule; import org.bukkit.Material; @@ -29,7 +30,6 @@ import tk.shanebee.survival.managers.PlayerManager; import tk.shanebee.survival.managers.RecipeManager; import tk.shanebee.survival.managers.ScoreBoardManager; -import tk.shanebee.survival.metrics.Metrics; import tk.shanebee.survival.tasks.TaskManager; import tk.shanebee.survival.util.BlockTags; import tk.shanebee.survival.util.Utils; @@ -169,8 +169,7 @@ public void onEnable() { } // LOAD METRICS - Metrics metrics = new Metrics(this); - Utils.logMini("Metrics " + (metrics.isEnabled() ? "enabled" : "disabled")); + new Metrics(this, 24831); Utils.logMini("Successfully loaded in " + (System.currentTimeMillis() - time) + " milliseconds"); diff --git a/src/main/java/tk/shanebee/survival/metrics/Metrics.java b/src/main/java/tk/shanebee/survival/metrics/Metrics.java deleted file mode 100644 index 354eb6b..0000000 --- a/src/main/java/tk/shanebee/survival/metrics/Metrics.java +++ /dev/null @@ -1,718 +0,0 @@ -package tk.shanebee.survival.metrics; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import org.bukkit.Bukkit; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.ServicePriority; - -import javax.net.ssl.HttpsURLConnection; -import java.io.*; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.concurrent.Callable; -import java.util.logging.Level; -import java.util.zip.GZIPOutputStream; - -/** - * bStats collects some data for plugin authors. - *

- * Check out https://bStats.org/ to learn more about bStats! - */ -@SuppressWarnings({"WeakerAccess", "unused"}) -public class Metrics { - - static { - // You can use the property to disable the check in your test environment - if (System.getProperty("bstats.relocatecheck") == null || !System.getProperty("bstats.relocatecheck").equals("false")) { - // Maven's Relocate is clever and changes strings, too. So we have to use this little "trick" ... :D - final String defaultPackage = new String( - new byte[]{'o', 'r', 'g', '.', 'b', 's', 't', 'a', 't', 's', '.', 'b', 'u', 'k', 'k', 'i', 't'}); - final String examplePackage = new String(new byte[]{'y', 'o', 'u', 'r', '.', 'p', 'a', 'c', 'k', 'a', 'g', 'e'}); - // We want to make sure nobody just copy & pastes the example and use the wrong package names - if (Metrics.class.getPackage().getName().equals(defaultPackage) || Metrics.class.getPackage().getName().equals(examplePackage)) { - throw new IllegalStateException("bStats Metrics class has not been relocated correctly!"); - } - } - } - - // The version of this bStats class - public static final int B_STATS_VERSION = 1; - - // The url to which the data is sent - private static final String URL = "https://bStats.org/submitData/bukkit"; - - // Is bStats enabled on this server? - private boolean enabled; - - // Should failed requests be logged? - private static boolean logFailedRequests; - - // Should the sent data be logged? - private static boolean logSentData; - - // Should the response text be logged? - private static boolean logResponseStatusText; - - // The uuid of the server - private static String serverUUID; - - // The plugin - private final Plugin plugin; - - // A list with all custom charts - private final List charts = new ArrayList<>(); - - /** - * Class constructor. - * - * @param plugin The plugin which stats should be submitted. - */ - public Metrics(Plugin plugin) { - if (plugin == null) { - throw new IllegalArgumentException("Plugin cannot be null!"); - } - this.plugin = plugin; - - // Get the config file - File bStatsFolder = new File(plugin.getDataFolder().getParentFile(), "bStats"); - File configFile = new File(bStatsFolder, "config.yml"); - YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile); - - // Check if the config file exists - if (!config.isSet("serverUuid")) { - - // Add default values - config.addDefault("enabled", true); - // Every server gets it's unique random id. - config.addDefault("serverUuid", UUID.randomUUID().toString()); - // Should failed request be logged? - config.addDefault("logFailedRequests", false); - // Should the sent data be logged? - config.addDefault("logSentData", false); - // Should the response text be logged? - config.addDefault("logResponseStatusText", false); - - // Inform the server owners about bStats - config.options().header( - "bStats collects some data for plugin authors like how many servers are using their plugins.\n" + - "To honor their work, you should not disable it.\n" + - "This has nearly no effect on the server performance!\n" + - "Check out https://bStats.org/ to learn more :)" - ).copyDefaults(true); - try { - config.save(configFile); - } catch (IOException ignored) { } - } - - // Load the data - enabled = config.getBoolean("enabled", true); - serverUUID = config.getString("serverUuid"); - logFailedRequests = config.getBoolean("logFailedRequests", false); - logSentData = config.getBoolean("logSentData", false); - logResponseStatusText = config.getBoolean("logResponseStatusText", false); - - if (enabled) { - boolean found = false; - // Search for all other bStats Metrics classes to see if we are the first one - for (Class service : Bukkit.getServicesManager().getKnownServices()) { - try { - service.getField("B_STATS_VERSION"); // Our identifier :) - found = true; // We aren't the first - break; - } catch (NoSuchFieldException ignored) { } - } - // Register our service - Bukkit.getServicesManager().register(Metrics.class, this, plugin, ServicePriority.Normal); - if (!found) { - // We are the first! - startSubmitting(); - } - } - } - - /** - * Checks if bStats is enabled. - * - * @return Whether bStats is enabled or not. - */ - public boolean isEnabled() { - return enabled; - } - - /** - * Adds a custom chart. - * - * @param chart The chart to add. - */ - public void addCustomChart(CustomChart chart) { - if (chart == null) { - throw new IllegalArgumentException("Chart cannot be null!"); - } - charts.add(chart); - } - - /** - * Starts the Scheduler which submits our data every 30 minutes. - */ - private void startSubmitting() { - final Timer timer = new Timer(true); // We use a timer cause the Bukkit scheduler is affected by server lags - timer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - if (!plugin.isEnabled()) { // Plugin was disabled - timer.cancel(); - return; - } - // Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler - // Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;) - Bukkit.getScheduler().runTask(plugin, () -> submitData()); - } - }, 1000 * 60 * 5, 1000 * 60 * 30); - // Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start - // WARNING: Changing the frequency has no effect but your plugin WILL be blocked/deleted! - // WARNING: Just don't do it! - } - - /** - * Gets the plugin specific data. - * This method is called using Reflection. - * - * @return The plugin specific data. - */ - public JsonObject getPluginData() { - JsonObject data = new JsonObject(); - - String pluginName = plugin.getDescription().getName(); - String pluginVersion = plugin.getDescription().getVersion(); - - data.addProperty("pluginName", pluginName); // Append the name of the plugin - data.addProperty("pluginVersion", pluginVersion); // Append the version of the plugin - JsonArray customCharts = new JsonArray(); - for (CustomChart customChart : charts) { - // Add the data of the custom charts - JsonObject chart = customChart.getRequestJsonObject(); - if (chart == null) { // If the chart is null, we skip it - continue; - } - customCharts.add(chart); - } - data.add("customCharts", customCharts); - - return data; - } - - /** - * Gets the server specific data. - * - * @return The server specific data. - */ - private JsonObject getServerData() { - // Minecraft specific data - int playerAmount; - try { - // Around MC 1.8 the return type was changed to a collection from an array, - // This fixes java.lang.NoSuchMethodError: org.bukkit.Bukkit.getOnlinePlayers()Ljava/util/Collection; - Method onlinePlayersMethod = Class.forName("org.bukkit.Server").getMethod("getOnlinePlayers"); - playerAmount = onlinePlayersMethod.getReturnType().equals(Collection.class) - ? ((Collection) onlinePlayersMethod.invoke(Bukkit.getServer())).size() - : ((Player[]) onlinePlayersMethod.invoke(Bukkit.getServer())).length; - } catch (Exception e) { - playerAmount = Bukkit.getOnlinePlayers().size(); // Just use the new method if the Reflection failed - } - int onlineMode = Bukkit.getOnlineMode() ? 1 : 0; - String bukkitVersion = Bukkit.getVersion(); - String bukkitName = Bukkit.getName(); - - // OS/Java specific data - String javaVersion = System.getProperty("java.version"); - String osName = System.getProperty("os.name"); - String osArch = System.getProperty("os.arch"); - String osVersion = System.getProperty("os.version"); - int coreCount = Runtime.getRuntime().availableProcessors(); - - JsonObject data = new JsonObject(); - - data.addProperty("serverUUID", serverUUID); - - data.addProperty("playerAmount", playerAmount); - data.addProperty("onlineMode", onlineMode); - data.addProperty("bukkitVersion", bukkitVersion); - data.addProperty("bukkitName", bukkitName); - - data.addProperty("javaVersion", javaVersion); - data.addProperty("osName", osName); - data.addProperty("osArch", osArch); - data.addProperty("osVersion", osVersion); - data.addProperty("coreCount", coreCount); - - return data; - } - - /** - * Collects the data and sends it afterwards. - */ - private void submitData() { - final JsonObject data = getServerData(); - - JsonArray pluginData = new JsonArray(); - // Search for all other bStats Metrics classes to get their plugin data - for (Class service : Bukkit.getServicesManager().getKnownServices()) { - try { - service.getField("B_STATS_VERSION"); // Our identifier :) - - for (RegisteredServiceProvider provider : Bukkit.getServicesManager().getRegistrations(service)) { - try { - Object plugin = provider.getService().getMethod("getPluginData").invoke(provider.getProvider()); - if (plugin instanceof JsonObject) { - pluginData.add((JsonObject) plugin); - } else { // old bstats version compatibility - try { - Class jsonObjectJsonSimple = Class.forName("org.json.simple.JSONObject"); - if (plugin.getClass().isAssignableFrom(jsonObjectJsonSimple)) { - Method jsonStringGetter = jsonObjectJsonSimple.getDeclaredMethod("toJSONString"); - jsonStringGetter.setAccessible(true); - String jsonString = (String) jsonStringGetter.invoke(plugin); - JsonObject object = new JsonParser().parse(jsonString).getAsJsonObject(); - pluginData.add(object); - } - } catch (ClassNotFoundException e) { - // minecraft version 1.14+ - if (logFailedRequests) { - this.plugin.getLogger().log(Level.SEVERE, "Encountered unexpected exception", e); - } - continue; // continue looping since we cannot do any other thing. - } - } - } catch (NullPointerException | NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { } - } - } catch (NoSuchFieldException ignored) { } - } - - data.add("plugins", pluginData); - - // Create a new thread for the connection to the bStats server - new Thread(new Runnable() { - @Override - public void run() { - try { - // Send the data - sendData(plugin, data); - } catch (Exception e) { - // Something went wrong! :( - if (logFailedRequests) { - plugin.getLogger().log(Level.WARNING, "Could not submit plugin stats of " + plugin.getName(), e); - } - } - } - }).start(); - } - - /** - * Sends the data to the bStats server. - * - * @param plugin Any plugin. It's just used to get a logger instance. - * @param data The data to send. - * @throws Exception If the request failed. - */ - private static void sendData(Plugin plugin, JsonObject data) throws Exception { - if (data == null) { - throw new IllegalArgumentException("Data cannot be null!"); - } - if (Bukkit.isPrimaryThread()) { - throw new IllegalAccessException("This method must not be called from the main thread!"); - } - if (logSentData) { - plugin.getLogger().info("Sending data to bStats: " + data.toString()); - } - HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection(); - - // Compress the data to save bandwidth - byte[] compressedData = compress(data.toString()); - - // Add headers - connection.setRequestMethod("POST"); - connection.addRequestProperty("Accept", "application/json"); - connection.addRequestProperty("Connection", "close"); - connection.addRequestProperty("Content-Encoding", "gzip"); // We gzip our request - connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length)); - connection.setRequestProperty("Content-Type", "application/json"); // We send our data in JSON format - connection.setRequestProperty("User-Agent", "MC-Server/" + B_STATS_VERSION); - - // Send data - connection.setDoOutput(true); - DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); - outputStream.write(compressedData); - outputStream.flush(); - outputStream.close(); - - InputStream inputStream = connection.getInputStream(); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); - - StringBuilder builder = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - builder.append(line); - } - bufferedReader.close(); - if (logResponseStatusText) { - plugin.getLogger().info("Sent data to bStats and received response: " + builder.toString()); - } - } - - /** - * Gzips the given String. - * - * @param str The string to gzip. - * @return The gzipped String. - * @throws IOException If the compression failed. - */ - private static byte[] compress(final String str) throws IOException { - if (str == null) { - return null; - } - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - GZIPOutputStream gzip = new GZIPOutputStream(outputStream); - gzip.write(str.getBytes(StandardCharsets.UTF_8)); - gzip.close(); - return outputStream.toByteArray(); - } - - /** - * Represents a custom chart. - */ - public static abstract class CustomChart { - - // The id of the chart - final String chartId; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - */ - CustomChart(String chartId) { - if (chartId == null || chartId.isEmpty()) { - throw new IllegalArgumentException("ChartId cannot be null or empty!"); - } - this.chartId = chartId; - } - - private JsonObject getRequestJsonObject() { - JsonObject chart = new JsonObject(); - chart.addProperty("chartId", chartId); - try { - JsonObject data = getChartData(); - if (data == null) { - // If the data is null we don't send the chart. - return null; - } - chart.add("data", data); - } catch (Throwable t) { - if (logFailedRequests) { - Bukkit.getLogger().log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t); - } - return null; - } - return chart; - } - - protected abstract JsonObject getChartData() throws Exception; - - } - - /** - * Represents a custom simple pie. - */ - public static class SimplePie extends CustomChart { - - private final Callable callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public SimplePie(String chartId, Callable callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObject getChartData() throws Exception { - JsonObject data = new JsonObject(); - String value = callable.call(); - if (value == null || value.isEmpty()) { - // Null = skip the chart - return null; - } - data.addProperty("value", value); - return data; - } - } - - /** - * Represents a custom advanced pie. - */ - public static class AdvancedPie extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public AdvancedPie(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObject getChartData() throws Exception { - JsonObject data = new JsonObject(); - JsonObject values = new JsonObject(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() == 0) { - continue; // Skip this invalid - } - allSkipped = false; - values.addProperty(entry.getKey(), entry.getValue()); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - data.add("values", values); - return data; - } - } - - /** - * Represents a custom drilldown pie. - */ - public static class DrilldownPie extends CustomChart { - - private final Callable>> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public DrilldownPie(String chartId, Callable>> callable) { - super(chartId); - this.callable = callable; - } - - @Override - public JsonObject getChartData() throws Exception { - JsonObject data = new JsonObject(); - JsonObject values = new JsonObject(); - Map> map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean reallyAllSkipped = true; - for (Map.Entry> entryValues : map.entrySet()) { - JsonObject value = new JsonObject(); - boolean allSkipped = true; - for (Map.Entry valueEntry : map.get(entryValues.getKey()).entrySet()) { - value.addProperty(valueEntry.getKey(), valueEntry.getValue()); - allSkipped = false; - } - if (!allSkipped) { - reallyAllSkipped = false; - values.add(entryValues.getKey(), value); - } - } - if (reallyAllSkipped) { - // Null = skip the chart - return null; - } - data.add("values", values); - return data; - } - } - - /** - * Represents a custom single line chart. - */ - public static class SingleLineChart extends CustomChart { - - private final Callable callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public SingleLineChart(String chartId, Callable callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObject getChartData() throws Exception { - JsonObject data = new JsonObject(); - int value = callable.call(); - if (value == 0) { - // Null = skip the chart - return null; - } - data.addProperty("value", value); - return data; - } - - } - - /** - * Represents a custom multi line chart. - */ - public static class MultiLineChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public MultiLineChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObject getChartData() throws Exception { - JsonObject data = new JsonObject(); - JsonObject values = new JsonObject(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() == 0) { - continue; // Skip this invalid - } - allSkipped = false; - values.addProperty(entry.getKey(), entry.getValue()); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - data.add("values", values); - return data; - } - - } - - /** - * Represents a custom simple bar chart. - */ - public static class SimpleBarChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public SimpleBarChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObject getChartData() throws Exception { - JsonObject data = new JsonObject(); - JsonObject values = new JsonObject(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - for (Map.Entry entry : map.entrySet()) { - JsonArray categoryValues = new JsonArray(); - categoryValues.add(entry.getValue()); - values.add(entry.getKey(), categoryValues); - } - data.add("values", values); - return data; - } - - } - - /** - * Represents a custom advanced bar chart. - */ - public static class AdvancedBarChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public AdvancedBarChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected JsonObject getChartData() throws Exception { - JsonObject data = new JsonObject(); - JsonObject values = new JsonObject(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue().length == 0) { - continue; // Skip this invalid - } - allSkipped = false; - JsonArray categoryValues = new JsonArray(); - for (int categoryValue : entry.getValue()) { - categoryValues.add(categoryValue); - } - values.add(entry.getKey(), categoryValues); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - data.add("values", values); - return data; - } - } - -} From 94a6eb0aa550a7087d01e4f5ff32eaeee2ac2225 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 17:06:52 -0800 Subject: [PATCH 072/133] repackage --- build.gradle.kts | 8 +- .../survival/SurvivalBootstrap.java | 4 +- .../survival/SurvivalPlugin.java | 34 +++---- .../survival/commands/BaseCommand.java | 10 +- .../survival/commands/DataGenCommand.java | 8 +- .../survival/commands/DebugCommand.java | 8 +- .../survival/commands/GiveItemCommand.java | 10 +- .../survival/commands/HealCommand.java | 8 +- .../survival/commands/NutritionCommand.java | 6 +- .../survival/commands/Permissions.java | 2 +- .../survival/commands/PlayerDataCommand.java | 8 +- .../survival/commands/ReloadCommand.java | 6 +- .../survival/commands/StatCommand.java | 12 +-- .../survival/commands/SurvivalCommand.java | 4 +- .../survival/commands/ToggleChatCommand.java | 8 +- .../survival/config/Config.java | 6 +- .../survival/config/ItemConfig.java | 8 +- .../survival/config/Lang.java | 7 +- .../survival/config/PlayerDataConfig.java | 6 +- .../survival/data/HealthBoard.java | 4 +- .../shanebeestudios}/survival/data/Info.java | 2 +- .../survival/data/Nutrient.java | 2 +- .../survival/data/PlayerData.java | 11 ++- .../shanebeestudios}/survival/data/Stat.java | 2 +- .../events/EnergyLevelChangeEvent.java | 2 +- .../events/ShootRecurvedBowEvent.java | 6 +- .../events/ThirstLevelChangeEvent.java | 2 +- .../survival/events/WaterBowlFillEvent.java | 2 +- .../generator/BlockTagFileGenerator.java | 2 +- .../survival/generator/BlockTagGenerator.java | 4 +- .../survival/gui/FireStrikerGUI.java | 8 +- .../survival/gui/NutritionGUI.java | 10 +- .../shanebeestudios}/survival/item/Item.java | 6 +- .../shanebeestudios}/survival/item/Items.java | 70 +++++++------- .../survival/item/Nutrition.java | 6 +- .../survival/item/Recipes.java | 6 +- .../survival/item/items/armor/ArmorPiece.java | 4 +- .../item/items/armor/BeekeeperPiece.java | 8 +- .../survival/item/items/armor/RainBoots.java | 4 +- .../item/items/armor/ReinforcedPiece.java | 6 +- .../survival/item/items/armor/SnowBoots.java | 4 +- .../survival/item/items/blocks/Campfire.java | 4 +- .../survival/item/items/blocks/Workbench.java | 6 +- .../survival/item/items/drinks/Coffee.java | 4 +- .../survival/item/items/drinks/ColdMilk.java | 2 +- .../survival/item/items/drinks/DrinkItem.java | 4 +- .../survival/item/items/drinks/HotMilk.java | 4 +- .../survival/item/items/drinks/Water.java | 2 +- .../item/items/food/SuspiciousMeat.java | 4 +- .../item/items/legendary/BlazeSword.java | 4 +- .../item/items/legendary/EnderGiantBlade.java | 4 +- .../item/items/legendary/ObsidianMace.java | 4 +- .../item/items/legendary/QuartzPickaxe.java | 4 +- .../item/items/legendary/ValkyriesAxe.java | 4 +- .../survival/item/items/misc/BreedingEgg.java | 4 +- .../survival/item/items/misc/CoffeeBean.java | 4 +- .../item/items/misc/FermentedSkin.java | 4 +- .../survival/item/items/tools/Compass.java | 4 +- .../item/items/tools/FireStriker.java | 4 +- .../item/items/tools/GrapplingHook.java | 4 +- .../survival/item/items/tools/Hammer.java | 4 +- .../survival/item/items/tools/Hatchet.java | 4 +- .../survival/item/items/tools/Mattock.java | 4 +- .../survival/item/items/tools/MedicKit.java | 6 +- .../survival/item/items/tools/RecurveBow.java | 4 +- .../item/items/tools/RecurveCrossbow.java | 4 +- .../survival/item/items/tools/Shiv.java | 4 +- .../survival/item/items/tools/Sickle.java | 4 +- .../survival/listeners/EventManager.java | 92 +++++++++---------- .../survival/listeners/block/BlockBreak.java | 16 ++-- .../survival/listeners/block/BlockPlace.java | 16 ++-- .../listeners/block/BurnoutTorches.java | 10 +- .../survival/listeners/block/Campfire.java | 4 +- .../survival/listeners/block/Chairs.java | 6 +- .../listeners/block/SnowGeneration.java | 4 +- .../listeners/block/SnowballThrow.java | 2 +- .../listeners/block/WorkbenchShare.java | 4 +- .../listeners/entity/BeeKeeperSuit.java | 6 +- .../listeners/entity/ChestPigmen.java | 4 +- .../listeners/entity/ChickenSpawn.java | 8 +- .../listeners/entity/EntityDeath.java | 8 +- .../listeners/entity/LivingSlime.java | 6 +- .../listeners/entity/MerchantTrades.java | 6 +- .../listeners/entity/PiglinBarter.java | 8 +- .../listeners/item/BeetrootStrength.java | 2 +- .../survival/listeners/item/BlazeSword.java | 4 +- .../survival/listeners/item/Bow.java | 8 +- .../listeners/item/CauldronWaterBottle.java | 4 +- .../listeners/item/CompassWaypoint.java | 14 +-- .../listeners/item/CookieHealthBoost.java | 2 +- .../listeners/item/FirestrikerListener.java | 8 +- .../listeners/item/FoodDiversityConsume.java | 16 ++-- .../survival/listeners/item/GiantBlade.java | 16 ++-- .../listeners/item/GrapplingHook.java | 10 +- .../survival/listeners/item/MedicKit.java | 20 ++-- .../listeners/item/ObsidianMaceWeakness.java | 12 +-- .../listeners/item/PoisonousPotato.java | 2 +- .../listeners/item/RawMeatHunger.java | 2 +- .../survival/listeners/item/RecurvedBow.java | 12 +-- .../listeners/item/RepairCrafting.java | 17 +--- .../survival/listeners/item/ShivPoison.java | 10 +- .../listeners/item/StarBattleaxeWither.java | 4 +- .../listeners/item/ThirstListener.java | 18 ++-- .../survival/listeners/item/TropicalFish.java | 8 +- .../survival/listeners/item/Valkyrie.java | 14 +-- .../listeners/item/WaterBottleListener.java | 8 +- .../listeners/item/WaterBowlListener.java | 12 +-- .../listeners/player/EnergyChange.java | 18 ++-- .../listeners/player/PlayerDataListener.java | 14 +-- .../survival/listeners/server/Guide.java | 10 +- .../survival/listeners/server/LocalChat.java | 10 +- .../listeners/server/RecipeDiscovery.java | 8 +- .../server/ResourcePackListener.java | 10 +- .../survival/managers/BlockManager.java | 8 +- .../survival/managers/EffectManager.java | 87 ++++++++++++++++++ .../survival/managers/MerchantManager.java | 12 +-- .../survival/managers/Placeholders.java | 8 +- .../survival/managers/PlayerManager.java | 16 ++-- .../survival/managers/RecipeManager.java | 8 +- .../survival/managers/ScoreBoardManager.java | 8 +- .../survival/tasks/EnergyDrain.java | 14 +-- .../survival/tasks/HealthBoardTask.java | 14 +-- .../survival/tasks/NutrientsAlert.java | 12 +-- .../survival/tasks/NutrientsDrain.java | 10 +- .../survival/tasks/NutrientsEffect.java | 14 +-- .../survival/tasks/TaskManager.java | 6 +- .../survival/tasks/ThirstAlert.java | 10 +- .../survival/tasks/ThirstDrain.java | 8 +- .../survival/tasks/ThirstDrainHeat.java | 10 +- .../survival/tasks/ThirstDrainNether.java | 10 +- .../survival/tasks/WeatherTask.java | 8 +- .../tasks/tool/BlazeSwordEffects.java | 6 +- .../survival/tasks/tool/BlazeSwordSound.java | 6 +- .../survival/tasks/tool/GiantBlade.java | 12 +-- .../survival/tasks/tool/ObsidianMace.java | 6 +- .../survival/tasks/tool/QuartzPickaxe.java | 6 +- .../survival/tasks/tool/Valkyrie.java | 6 +- .../survival/util/BlockTags.java | 2 +- .../survival/util/Difficulty.java | 2 +- .../survival/util/ItemUtils.java | 4 +- .../shanebeestudios}/survival/util/Math.java | 2 +- .../survival/util/PlayerUtils.java | 2 +- .../shanebeestudios}/survival/util/Utils.java | 7 +- .../survival/util/Validate.java | 2 +- .../survival/managers/EffectManager.java | 80 ---------------- 145 files changed, 665 insertions(+), 676 deletions(-) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/SurvivalBootstrap.java (79%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/SurvivalPlugin.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/BaseCommand.java (66%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/DataGenCommand.java (77%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/DebugCommand.java (83%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/GiveItemCommand.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/HealCommand.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/NutritionCommand.java (80%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/Permissions.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/PlayerDataCommand.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/ReloadCommand.java (80%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/StatCommand.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/SurvivalCommand.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/commands/ToggleChatCommand.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/config/Config.java (99%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/config/ItemConfig.java (96%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/config/Lang.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/config/PlayerDataConfig.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/data/HealthBoard.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/data/Info.java (70%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/data/Nutrient.java (85%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/data/PlayerData.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/data/Stat.java (79%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/events/EnergyLevelChangeEvent.java (96%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/events/ShootRecurvedBowEvent.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/events/ThirstLevelChangeEvent.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/events/WaterBowlFillEvent.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/generator/BlockTagFileGenerator.java (99%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/generator/BlockTagGenerator.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/gui/FireStrikerGUI.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/gui/NutritionGUI.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/Item.java (96%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/Items.java (82%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/Nutrition.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/Recipes.java (99%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/armor/ArmorPiece.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/armor/BeekeeperPiece.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/armor/RainBoots.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/armor/ReinforcedPiece.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/armor/SnowBoots.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/blocks/Campfire.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/blocks/Workbench.java (85%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/drinks/Coffee.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/drinks/ColdMilk.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/drinks/DrinkItem.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/drinks/HotMilk.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/drinks/Water.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/food/SuspiciousMeat.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/legendary/BlazeSword.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/legendary/EnderGiantBlade.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/legendary/ObsidianMace.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/legendary/QuartzPickaxe.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/legendary/ValkyriesAxe.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/misc/BreedingEgg.java (75%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/misc/CoffeeBean.java (85%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/misc/FermentedSkin.java (89%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/Compass.java (87%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/FireStriker.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/GrapplingHook.java (88%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/Hammer.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/Hatchet.java (88%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/Mattock.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/MedicKit.java (88%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/RecurveBow.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/RecurveCrossbow.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/Shiv.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/item/items/tools/Sickle.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/EventManager.java (61%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/BlockBreak.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/BlockPlace.java (88%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/BurnoutTorches.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/Campfire.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/Chairs.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/SnowGeneration.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/SnowballThrow.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/block/WorkbenchShare.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/entity/BeeKeeperSuit.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/entity/ChestPigmen.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/entity/ChickenSpawn.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/entity/EntityDeath.java (87%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/entity/LivingSlime.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/entity/MerchantTrades.java (80%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/entity/PiglinBarter.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/BeetrootStrength.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/BlazeSword.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/Bow.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/CauldronWaterBottle.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/CompassWaypoint.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/CookieHealthBoost.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/FirestrikerListener.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/FoodDiversityConsume.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/GiantBlade.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/GrapplingHook.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/MedicKit.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/ObsidianMaceWeakness.java (86%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/PoisonousPotato.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/RawMeatHunger.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/RecurvedBow.java (88%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/RepairCrafting.java (88%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/ShivPoison.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/StarBattleaxeWither.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/ThirstListener.java (92%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/TropicalFish.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/Valkyrie.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/WaterBottleListener.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/item/WaterBowlListener.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/player/EnergyChange.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/player/PlayerDataListener.java (84%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/server/Guide.java (83%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/server/LocalChat.java (86%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/server/RecipeDiscovery.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/listeners/server/ResourcePackListener.java (90%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/managers/BlockManager.java (96%) create mode 100644 src/main/java/com/shanebeestudios/survival/managers/EffectManager.java rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/managers/MerchantManager.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/managers/Placeholders.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/managers/PlayerManager.java (96%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/managers/RecipeManager.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/managers/ScoreBoardManager.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/EnergyDrain.java (95%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/HealthBoardTask.java (93%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/NutrientsAlert.java (79%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/NutrientsDrain.java (76%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/NutrientsEffect.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/TaskManager.java (87%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/ThirstAlert.java (80%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/ThirstDrain.java (89%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/ThirstDrainHeat.java (83%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/ThirstDrainNether.java (81%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/WeatherTask.java (94%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/tool/BlazeSwordEffects.java (88%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/tool/BlazeSwordSound.java (84%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/tool/GiantBlade.java (91%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/tool/ObsidianMace.java (87%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/tool/QuartzPickaxe.java (82%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/tasks/tool/Valkyrie.java (83%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/util/BlockTags.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/util/Difficulty.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/util/ItemUtils.java (97%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/util/Math.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/util/PlayerUtils.java (96%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/util/Utils.java (98%) rename src/main/java/{tk/shanebee => com/shanebeestudios}/survival/util/Validate.java (87%) delete mode 100644 src/main/java/tk/shanebee/survival/managers/EffectManager.java diff --git a/build.gradle.kts b/build.gradle.kts index 474203d..7fc013d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -72,10 +72,10 @@ tasks { } javadoc { options.encoding = Charsets.UTF_8.name() - exclude("tk/shanebee/survival/SurvivalBootstrap.java") - exclude("tk/shanebee/survival/commands") - exclude("tk/shanebee/survival/listeners") - exclude("tk/shanebee/survival/tasks") + exclude("com/shanebeestudios/survival/SurvivalBootstrap.java") + exclude("com/shanebeestudios/survival/commands") + exclude("com/shanebeestudios/survival/listeners") + exclude("com/shanebeestudios/survival/tasks") (options as StandardJavadocDocletOptions).links( "https://jd.papermc.io/paper/${minecraftVersion}/", "https://jd.advntr.dev/api/4.18.0/" diff --git a/src/main/java/tk/shanebee/survival/SurvivalBootstrap.java b/src/main/java/com/shanebeestudios/survival/SurvivalBootstrap.java similarity index 79% rename from src/main/java/tk/shanebee/survival/SurvivalBootstrap.java rename to src/main/java/com/shanebeestudios/survival/SurvivalBootstrap.java index 52030f6..3df9810 100644 --- a/src/main/java/tk/shanebee/survival/SurvivalBootstrap.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalBootstrap.java @@ -1,9 +1,9 @@ -package tk.shanebee.survival; +package com.shanebeestudios.survival; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.bootstrap.PluginBootstrap; import org.jetbrains.annotations.NotNull; -import tk.shanebee.survival.generator.BlockTagGenerator; +import com.shanebeestudios.survival.generator.BlockTagGenerator; @SuppressWarnings({"UnstableApiUsage", "unused"}) public class SurvivalBootstrap implements PluginBootstrap { diff --git a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java similarity index 92% rename from src/main/java/tk/shanebee/survival/SurvivalPlugin.java rename to src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index 3970ce7..afbb021 100644 --- a/src/main/java/tk/shanebee/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival; +package com.shanebeestudios.survival; import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPIBukkitConfig; @@ -17,22 +17,22 @@ import org.bukkit.event.Listener; import org.bukkit.event.server.ServerLoadEvent; import org.bukkit.plugin.java.JavaPlugin; -import tk.shanebee.survival.commands.SurvivalCommand; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.config.PlayerDataConfig; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.listeners.EventManager; -import tk.shanebee.survival.managers.BlockManager; -import tk.shanebee.survival.managers.EffectManager; -import tk.shanebee.survival.managers.MerchantManager; -import tk.shanebee.survival.managers.Placeholders; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.managers.RecipeManager; -import tk.shanebee.survival.managers.ScoreBoardManager; -import tk.shanebee.survival.tasks.TaskManager; -import tk.shanebee.survival.util.BlockTags; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.commands.SurvivalCommand; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.config.PlayerDataConfig; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.listeners.EventManager; +import com.shanebeestudios.survival.managers.BlockManager; +import com.shanebeestudios.survival.managers.EffectManager; +import com.shanebeestudios.survival.managers.MerchantManager; +import com.shanebeestudios.survival.managers.Placeholders; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.managers.RecipeManager; +import com.shanebeestudios.survival.managers.ScoreBoardManager; +import com.shanebeestudios.survival.tasks.TaskManager; +import com.shanebeestudios.survival.util.BlockTags; +import com.shanebeestudios.survival.util.Utils; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/tk/shanebee/survival/commands/BaseCommand.java b/src/main/java/com/shanebeestudios/survival/commands/BaseCommand.java similarity index 66% rename from src/main/java/tk/shanebee/survival/commands/BaseCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/BaseCommand.java index 90b5d53..ba1b68e 100644 --- a/src/main/java/tk/shanebee/survival/commands/BaseCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/BaseCommand.java @@ -1,10 +1,10 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.arguments.Argument; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.managers.PlayerManager; public abstract class BaseCommand { diff --git a/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java b/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java similarity index 77% rename from src/main/java/tk/shanebee/survival/commands/DataGenCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java index e4c6bf4..d0be52b 100644 --- a/src/main/java/tk/shanebee/survival/commands/DataGenCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java @@ -1,10 +1,10 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.generator.BlockTagFileGenerator; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.generator.BlockTagFileGenerator; +import com.shanebeestudios.survival.util.Utils; public class DataGenCommand extends BaseCommand { diff --git a/src/main/java/tk/shanebee/survival/commands/DebugCommand.java b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java similarity index 83% rename from src/main/java/tk/shanebee/survival/commands/DebugCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java index 72c3de9..7c3039a 100644 --- a/src/main/java/tk/shanebee/survival/commands/DebugCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.CommandPermission; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.item.Nutrition; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.item.Nutrition; public class DebugCommand extends BaseCommand{ public DebugCommand(SurvivalPlugin plugin) { diff --git a/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java b/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java similarity index 94% rename from src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java index dec7b49..323abfd 100644 --- a/src/main/java/tk/shanebee/survival/commands/GiveItemCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.ArgumentSuggestions; @@ -15,10 +15,10 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/tk/shanebee/survival/commands/HealCommand.java b/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java similarity index 92% rename from src/main/java/tk/shanebee/survival/commands/HealCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/HealCommand.java index 7691871..f6832c5 100644 --- a/src/main/java/tk/shanebee/survival/commands/HealCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.EntitySelectorArgument; @@ -6,9 +6,9 @@ import org.bukkit.attribute.Attribute; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.util.Utils; import java.util.Collection; import java.util.StringJoiner; diff --git a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java b/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java similarity index 80% rename from src/main/java/tk/shanebee/survival/commands/NutritionCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java index 29e6f79..5b0de55 100644 --- a/src/main/java/tk/shanebee/survival/commands/NutritionCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java @@ -1,10 +1,10 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.gui.NutritionGUI; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.gui.NutritionGUI; public class NutritionCommand extends BaseCommand { diff --git a/src/main/java/tk/shanebee/survival/commands/Permissions.java b/src/main/java/com/shanebeestudios/survival/commands/Permissions.java similarity index 92% rename from src/main/java/tk/shanebee/survival/commands/Permissions.java rename to src/main/java/com/shanebeestudios/survival/commands/Permissions.java index 4546daa..9cd47df 100644 --- a/src/main/java/tk/shanebee/survival/commands/Permissions.java +++ b/src/main/java/com/shanebeestudios/survival/commands/Permissions.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; public class Permissions { diff --git a/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java b/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java similarity index 93% rename from src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java index a2b8115..874d5ba 100644 --- a/src/main/java/tk/shanebee/survival/commands/PlayerDataCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.DoubleArgument; @@ -6,9 +6,9 @@ import dev.jorel.commandapi.arguments.LiteralArgument; import dev.jorel.commandapi.arguments.MultiLiteralArgument; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.util.Utils; import java.util.Collection; diff --git a/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java b/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java similarity index 80% rename from src/main/java/tk/shanebee/survival/commands/ReloadCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java index c29203a..76a22b8 100644 --- a/src/main/java/tk/shanebee/survival/commands/ReloadCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java @@ -1,9 +1,9 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.util.Utils; public class ReloadCommand extends BaseCommand { diff --git a/src/main/java/tk/shanebee/survival/commands/StatCommand.java b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java similarity index 94% rename from src/main/java/tk/shanebee/survival/commands/StatCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/StatCommand.java index 9aa5864..d8b7531 100644 --- a/src/main/java/tk/shanebee/survival/commands/StatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.BukkitStringTooltip; import dev.jorel.commandapi.IStringTooltip; @@ -10,11 +10,11 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.Info; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.Info; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java b/src/main/java/com/shanebeestudios/survival/commands/SurvivalCommand.java similarity index 92% rename from src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/SurvivalCommand.java index f3f8699..829bb01 100644 --- a/src/main/java/tk/shanebee/survival/commands/SurvivalCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/SurvivalCommand.java @@ -1,7 +1,7 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.CommandTree; -import tk.shanebee.survival.SurvivalPlugin; +import com.shanebeestudios.survival.SurvivalPlugin; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java b/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java similarity index 90% rename from src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java rename to src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java index 0b97f7a..952eb69 100644 --- a/src/main/java/tk/shanebee/survival/commands/ToggleChatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.commands; +package com.shanebeestudios.survival.commands; import dev.jorel.commandapi.BukkitStringTooltip; import dev.jorel.commandapi.IStringTooltip; @@ -7,9 +7,9 @@ import dev.jorel.commandapi.arguments.LiteralArgument; import dev.jorel.commandapi.arguments.StringArgument; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java similarity index 99% rename from src/main/java/tk/shanebee/survival/config/Config.java rename to src/main/java/com/shanebeestudios/survival/config/Config.java index 822862d..160253c 100644 --- a/src/main/java/tk/shanebee/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.config; +package com.shanebeestudios.survival.config; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -7,8 +7,8 @@ import org.bukkit.Tag; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.util.Utils; import java.io.File; import java.io.InputStream; diff --git a/src/main/java/tk/shanebee/survival/config/ItemConfig.java b/src/main/java/com/shanebeestudios/survival/config/ItemConfig.java similarity index 96% rename from src/main/java/tk/shanebee/survival/config/ItemConfig.java rename to src/main/java/com/shanebeestudios/survival/config/ItemConfig.java index efedf2e..7419ba4 100644 --- a/src/main/java/tk/shanebee/survival/config/ItemConfig.java +++ b/src/main/java/com/shanebeestudios/survival/config/ItemConfig.java @@ -1,10 +1,10 @@ -package tk.shanebee.survival.config; +package com.shanebeestudios.survival.config; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Nutrition; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Nutrition; +import com.shanebeestudios.survival.util.Utils; import java.io.File; import java.io.IOException; diff --git a/src/main/java/tk/shanebee/survival/config/Lang.java b/src/main/java/com/shanebeestudios/survival/config/Lang.java similarity index 98% rename from src/main/java/tk/shanebee/survival/config/Lang.java rename to src/main/java/com/shanebeestudios/survival/config/Lang.java index 427cc4d..d660ec5 100644 --- a/src/main/java/tk/shanebee/survival/config/Lang.java +++ b/src/main/java/com/shanebeestudios/survival/config/Lang.java @@ -1,16 +1,15 @@ -package tk.shanebee.survival.config; +package com.shanebeestudios.survival.config; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.util.Utils; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.List; public class Lang { diff --git a/src/main/java/tk/shanebee/survival/config/PlayerDataConfig.java b/src/main/java/com/shanebeestudios/survival/config/PlayerDataConfig.java similarity index 92% rename from src/main/java/tk/shanebee/survival/config/PlayerDataConfig.java rename to src/main/java/com/shanebeestudios/survival/config/PlayerDataConfig.java index 7ee6f5c..783ac1f 100644 --- a/src/main/java/tk/shanebee/survival/config/PlayerDataConfig.java +++ b/src/main/java/com/shanebeestudios/survival/config/PlayerDataConfig.java @@ -1,9 +1,9 @@ -package tk.shanebee.survival.config; +package com.shanebeestudios.survival.config; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; import java.io.File; import java.io.IOException; diff --git a/src/main/java/tk/shanebee/survival/data/HealthBoard.java b/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java similarity index 97% rename from src/main/java/tk/shanebee/survival/data/HealthBoard.java rename to src/main/java/com/shanebeestudios/survival/data/HealthBoard.java index 44b270c..e7ca6e2 100644 --- a/src/main/java/tk/shanebee/survival/data/HealthBoard.java +++ b/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.data; +package com.shanebeestudios.survival.data; import fr.mrmicky.fastboard.adventure.FastBoard; import net.kyori.adventure.text.Component; @@ -7,7 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.scoreboard.Scoreboard; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.util.Validate; +import com.shanebeestudios.survival.util.Validate; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/data/Info.java b/src/main/java/com/shanebeestudios/survival/data/Info.java similarity index 70% rename from src/main/java/tk/shanebee/survival/data/Info.java rename to src/main/java/com/shanebeestudios/survival/data/Info.java index 226f51e..e317cd0 100644 --- a/src/main/java/tk/shanebee/survival/data/Info.java +++ b/src/main/java/com/shanebeestudios/survival/data/Info.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.data; +package com.shanebeestudios.survival.data; /** * Info for player scoreboards diff --git a/src/main/java/tk/shanebee/survival/data/Nutrient.java b/src/main/java/com/shanebeestudios/survival/data/Nutrient.java similarity index 85% rename from src/main/java/tk/shanebee/survival/data/Nutrient.java rename to src/main/java/com/shanebeestudios/survival/data/Nutrient.java index 4dc0f10..02eaa4a 100644 --- a/src/main/java/tk/shanebee/survival/data/Nutrient.java +++ b/src/main/java/com/shanebeestudios/survival/data/Nutrient.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.data; +package com.shanebeestudios.survival.data; /** * Player nutrient types diff --git a/src/main/java/tk/shanebee/survival/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/data/PlayerData.java similarity index 98% rename from src/main/java/tk/shanebee/survival/data/PlayerData.java rename to src/main/java/com/shanebeestudios/survival/data/PlayerData.java index a76a61f..ce2027c 100644 --- a/src/main/java/tk/shanebee/survival/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/data/PlayerData.java @@ -1,5 +1,6 @@ -package tk.shanebee.survival.data; +package com.shanebeestudios.survival.data; +import com.shanebeestudios.survival.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.OfflinePlayer; @@ -7,9 +8,9 @@ import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.util.Math; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.util.Math; import java.util.HashMap; import java.util.LinkedHashMap; @@ -19,7 +20,7 @@ /** * Holder of data for player - *

You can get an instance of PlayerData from {@link tk.shanebee.survival.managers.PlayerManager}

+ *

You can get an instance of PlayerData from {@link PlayerManager}

*/ @SuppressWarnings({"unused", "FieldCanBeLocal", "SameParameterValue"}) @SerializableAs("PlayerData") diff --git a/src/main/java/tk/shanebee/survival/data/Stat.java b/src/main/java/com/shanebeestudios/survival/data/Stat.java similarity index 79% rename from src/main/java/tk/shanebee/survival/data/Stat.java rename to src/main/java/com/shanebeestudios/survival/data/Stat.java index fcd54b5..031b3b1 100644 --- a/src/main/java/tk/shanebee/survival/data/Stat.java +++ b/src/main/java/com/shanebeestudios/survival/data/Stat.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.data; +package com.shanebeestudios.survival.data; /** * Player stat types diff --git a/src/main/java/tk/shanebee/survival/events/EnergyLevelChangeEvent.java b/src/main/java/com/shanebeestudios/survival/events/EnergyLevelChangeEvent.java similarity index 96% rename from src/main/java/tk/shanebee/survival/events/EnergyLevelChangeEvent.java rename to src/main/java/com/shanebeestudios/survival/events/EnergyLevelChangeEvent.java index 5d5a396..b4bb978 100644 --- a/src/main/java/tk/shanebee/survival/events/EnergyLevelChangeEvent.java +++ b/src/main/java/com/shanebeestudios/survival/events/EnergyLevelChangeEvent.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.events; +package com.shanebeestudios.survival.events; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; diff --git a/src/main/java/tk/shanebee/survival/events/ShootRecurvedBowEvent.java b/src/main/java/com/shanebeestudios/survival/events/ShootRecurvedBowEvent.java similarity index 91% rename from src/main/java/tk/shanebee/survival/events/ShootRecurvedBowEvent.java rename to src/main/java/com/shanebeestudios/survival/events/ShootRecurvedBowEvent.java index cbcb680..226ab86 100644 --- a/src/main/java/tk/shanebee/survival/events/ShootRecurvedBowEvent.java +++ b/src/main/java/com/shanebeestudios/survival/events/ShootRecurvedBowEvent.java @@ -1,12 +1,12 @@ -package tk.shanebee.survival.events; +package com.shanebeestudios.survival.events; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.Items; /** * Called when a player shoots a recurved bow/crossbow diff --git a/src/main/java/tk/shanebee/survival/events/ThirstLevelChangeEvent.java b/src/main/java/com/shanebeestudios/survival/events/ThirstLevelChangeEvent.java similarity index 97% rename from src/main/java/tk/shanebee/survival/events/ThirstLevelChangeEvent.java rename to src/main/java/com/shanebeestudios/survival/events/ThirstLevelChangeEvent.java index 091033d..12485bb 100644 --- a/src/main/java/tk/shanebee/survival/events/ThirstLevelChangeEvent.java +++ b/src/main/java/com/shanebeestudios/survival/events/ThirstLevelChangeEvent.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.events; +package com.shanebeestudios.survival.events; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; diff --git a/src/main/java/tk/shanebee/survival/events/WaterBowlFillEvent.java b/src/main/java/com/shanebeestudios/survival/events/WaterBowlFillEvent.java similarity index 95% rename from src/main/java/tk/shanebee/survival/events/WaterBowlFillEvent.java rename to src/main/java/com/shanebeestudios/survival/events/WaterBowlFillEvent.java index 802e1e5..1c1d403 100644 --- a/src/main/java/tk/shanebee/survival/events/WaterBowlFillEvent.java +++ b/src/main/java/com/shanebeestudios/survival/events/WaterBowlFillEvent.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.events; +package com.shanebeestudios.survival.events; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; diff --git a/src/main/java/tk/shanebee/survival/generator/BlockTagFileGenerator.java b/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java similarity index 99% rename from src/main/java/tk/shanebee/survival/generator/BlockTagFileGenerator.java rename to src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java index e85a081..f8bbf22 100644 --- a/src/main/java/tk/shanebee/survival/generator/BlockTagFileGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.generator; +package com.shanebeestudios.survival.generator; import org.bukkit.Material; import org.bukkit.NamespacedKey; diff --git a/src/main/java/tk/shanebee/survival/generator/BlockTagGenerator.java b/src/main/java/com/shanebeestudios/survival/generator/BlockTagGenerator.java similarity index 97% rename from src/main/java/tk/shanebee/survival/generator/BlockTagGenerator.java rename to src/main/java/com/shanebeestudios/survival/generator/BlockTagGenerator.java index 5ad7adf..b347cf6 100644 --- a/src/main/java/tk/shanebee/survival/generator/BlockTagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/generator/BlockTagGenerator.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.generator; +package com.shanebeestudios.survival.generator; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; @@ -15,7 +15,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.codehaus.plexus.util.FileUtils; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.util.Utils; import java.io.File; import java.io.IOException; diff --git a/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java b/src/main/java/com/shanebeestudios/survival/gui/FireStrikerGUI.java similarity index 97% rename from src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java rename to src/main/java/com/shanebeestudios/survival/gui/FireStrikerGUI.java index 7604178..6a70d97 100644 --- a/src/main/java/tk/shanebee/survival/gui/FireStrikerGUI.java +++ b/src/main/java/com/shanebeestudios/survival/gui/FireStrikerGUI.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.gui; +package com.shanebeestudios.survival.gui; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -17,9 +17,9 @@ import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.ItemUtils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.ItemUtils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java b/src/main/java/com/shanebeestudios/survival/gui/NutritionGUI.java similarity index 94% rename from src/main/java/tk/shanebee/survival/gui/NutritionGUI.java rename to src/main/java/com/shanebeestudios/survival/gui/NutritionGUI.java index a682d9a..2d5f205 100644 --- a/src/main/java/tk/shanebee/survival/gui/NutritionGUI.java +++ b/src/main/java/com/shanebeestudios/survival/gui/NutritionGUI.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.gui; +package com.shanebeestudios.survival.gui; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; @@ -12,10 +12,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.item.Nutrition; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.item.Nutrition; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/item/Item.java b/src/main/java/com/shanebeestudios/survival/item/Item.java similarity index 96% rename from src/main/java/tk/shanebee/survival/item/Item.java rename to src/main/java/com/shanebeestudios/survival/item/Item.java index 2e23d1c..9cab49d 100644 --- a/src/main/java/tk/shanebee/survival/item/Item.java +++ b/src/main/java/com/shanebeestudios/survival/item/Item.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item; +package com.shanebeestudios.survival.item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; @@ -10,8 +10,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.config.ItemConfig; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.config.ItemConfig; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/item/Items.java b/src/main/java/com/shanebeestudios/survival/item/Items.java similarity index 82% rename from src/main/java/tk/shanebee/survival/item/Items.java rename to src/main/java/com/shanebeestudios/survival/item/Items.java index 87ddd1b..68daa1d 100644 --- a/src/main/java/tk/shanebee/survival/item/Items.java +++ b/src/main/java/com/shanebeestudios/survival/item/Items.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item; +package com.shanebeestudios.survival.item; import com.google.common.collect.Lists; import io.papermc.paper.datacomponent.DataComponentTypes; @@ -13,40 +13,40 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.item.items.armor.ArmorPiece; -import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorMaterial; -import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorType; -import tk.shanebee.survival.item.items.armor.BeekeeperPiece; -import tk.shanebee.survival.item.items.armor.RainBoots; -import tk.shanebee.survival.item.items.armor.ReinforcedPiece; -import tk.shanebee.survival.item.items.armor.SnowBoots; -import tk.shanebee.survival.item.items.blocks.Campfire; -import tk.shanebee.survival.item.items.blocks.Workbench; -import tk.shanebee.survival.item.items.drinks.Coffee; -import tk.shanebee.survival.item.items.drinks.ColdMilk; -import tk.shanebee.survival.item.items.drinks.HotMilk; -import tk.shanebee.survival.item.items.drinks.Water; -import tk.shanebee.survival.item.items.food.SuspiciousMeat; -import tk.shanebee.survival.item.items.legendary.BlazeSword; -import tk.shanebee.survival.item.items.legendary.EnderGiantBlade; -import tk.shanebee.survival.item.items.legendary.ObsidianMace; -import tk.shanebee.survival.item.items.legendary.QuartzPickaxe; -import tk.shanebee.survival.item.items.legendary.ValkyriesAxe; -import tk.shanebee.survival.item.items.misc.BreedingEgg; -import tk.shanebee.survival.item.items.misc.CoffeeBean; -import tk.shanebee.survival.item.items.misc.FermentedSkin; -import tk.shanebee.survival.item.items.tools.Compass; -import tk.shanebee.survival.item.items.tools.FireStriker; -import tk.shanebee.survival.item.items.tools.GrapplingHook; -import tk.shanebee.survival.item.items.tools.Hammer; -import tk.shanebee.survival.item.items.tools.Hatchet; -import tk.shanebee.survival.item.items.tools.Mattock; -import tk.shanebee.survival.item.items.tools.MedicKit; -import tk.shanebee.survival.item.items.tools.RecurveBow; -import tk.shanebee.survival.item.items.tools.RecurveCrossbow; -import tk.shanebee.survival.item.items.tools.Shiv; -import tk.shanebee.survival.item.items.tools.Sickle; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.item.items.armor.ArmorPiece; +import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorMaterial; +import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorType; +import com.shanebeestudios.survival.item.items.armor.BeekeeperPiece; +import com.shanebeestudios.survival.item.items.armor.RainBoots; +import com.shanebeestudios.survival.item.items.armor.ReinforcedPiece; +import com.shanebeestudios.survival.item.items.armor.SnowBoots; +import com.shanebeestudios.survival.item.items.blocks.Campfire; +import com.shanebeestudios.survival.item.items.blocks.Workbench; +import com.shanebeestudios.survival.item.items.drinks.Coffee; +import com.shanebeestudios.survival.item.items.drinks.ColdMilk; +import com.shanebeestudios.survival.item.items.drinks.HotMilk; +import com.shanebeestudios.survival.item.items.drinks.Water; +import com.shanebeestudios.survival.item.items.food.SuspiciousMeat; +import com.shanebeestudios.survival.item.items.legendary.BlazeSword; +import com.shanebeestudios.survival.item.items.legendary.EnderGiantBlade; +import com.shanebeestudios.survival.item.items.legendary.ObsidianMace; +import com.shanebeestudios.survival.item.items.legendary.QuartzPickaxe; +import com.shanebeestudios.survival.item.items.legendary.ValkyriesAxe; +import com.shanebeestudios.survival.item.items.misc.BreedingEgg; +import com.shanebeestudios.survival.item.items.misc.CoffeeBean; +import com.shanebeestudios.survival.item.items.misc.FermentedSkin; +import com.shanebeestudios.survival.item.items.tools.Compass; +import com.shanebeestudios.survival.item.items.tools.FireStriker; +import com.shanebeestudios.survival.item.items.tools.GrapplingHook; +import com.shanebeestudios.survival.item.items.tools.Hammer; +import com.shanebeestudios.survival.item.items.tools.Hatchet; +import com.shanebeestudios.survival.item.items.tools.Mattock; +import com.shanebeestudios.survival.item.items.tools.MedicKit; +import com.shanebeestudios.survival.item.items.tools.RecurveBow; +import com.shanebeestudios.survival.item.items.tools.RecurveCrossbow; +import com.shanebeestudios.survival.item.items.tools.Shiv; +import com.shanebeestudios.survival.item.items.tools.Sickle; +import com.shanebeestudios.survival.util.Utils; import java.util.LinkedHashMap; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/item/Nutrition.java b/src/main/java/com/shanebeestudios/survival/item/Nutrition.java similarity index 98% rename from src/main/java/tk/shanebee/survival/item/Nutrition.java rename to src/main/java/com/shanebeestudios/survival/item/Nutrition.java index 4e56aea..2ffe26b 100644 --- a/src/main/java/tk/shanebee/survival/item/Nutrition.java +++ b/src/main/java/com/shanebeestudios/survival/item/Nutrition.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item; +package com.shanebeestudios.survival.item; import com.google.common.base.Preconditions; import io.papermc.paper.datacomponent.DataComponentTypes; @@ -10,8 +10,8 @@ import org.bukkit.inventory.ItemType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.config.ItemConfig; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.config.ItemConfig; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.Comparator; diff --git a/src/main/java/tk/shanebee/survival/item/Recipes.java b/src/main/java/com/shanebeestudios/survival/item/Recipes.java similarity index 99% rename from src/main/java/tk/shanebee/survival/item/Recipes.java rename to src/main/java/com/shanebeestudios/survival/item/Recipes.java index bc24fde..2b1ca9e 100644 --- a/src/main/java/tk/shanebee/survival/item/Recipes.java +++ b/src/main/java/com/shanebeestudios/survival/item/Recipes.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item; +package com.shanebeestudios.survival.item; import org.bukkit.Bukkit; import org.bukkit.Keyed; @@ -15,8 +15,8 @@ import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.SmokingRecipe; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java similarity index 98% rename from src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java rename to src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java index b2bc8cc..16f0381 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ArmorPiece.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.armor; +package com.shanebeestudios.survival.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Equippable; @@ -16,7 +16,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class ArmorPiece extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/BeekeeperPiece.java similarity index 91% rename from src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java rename to src/main/java/com/shanebeestudios/survival/item/items/armor/BeekeeperPiece.java index e10710a..c84ec02 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/BeekeeperPiece.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/armor/BeekeeperPiece.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.armor; +package com.shanebeestudios.survival.item.items.armor; import org.bukkit.Color; import org.bukkit.Material; @@ -7,9 +7,9 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.LeatherArmorMeta; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorMaterial; -import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorType; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorMaterial; +import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorType; @SuppressWarnings("UnstableApiUsage") public class BeekeeperPiece extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/RainBoots.java similarity index 90% rename from src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java rename to src/main/java/com/shanebeestudios/survival/item/items/armor/RainBoots.java index 4be8ec5..c12ed68 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/RainBoots.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/armor/RainBoots.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.armor; +package com.shanebeestudios.survival.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; @@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class RainBoots extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/ReinforcedPiece.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java rename to src/main/java/com/shanebeestudios/survival/item/items/armor/ReinforcedPiece.java index c6327c4..45c3f21 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/ReinforcedPiece.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/armor/ReinforcedPiece.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.armor; +package com.shanebeestudios.survival.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Equippable; @@ -14,8 +14,8 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.items.armor.ArmorPiece.ArmorType; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorType; @SuppressWarnings("UnstableApiUsage") public class ReinforcedPiece extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/SnowBoots.java similarity index 90% rename from src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java rename to src/main/java/com/shanebeestudios/survival/item/items/armor/SnowBoots.java index 5acab99..a5771a5 100644 --- a/src/main/java/tk/shanebee/survival/item/items/armor/SnowBoots.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/armor/SnowBoots.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.armor; +package com.shanebeestudios.survival.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; @@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class SnowBoots extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java b/src/main/java/com/shanebeestudios/survival/item/items/blocks/Campfire.java similarity index 92% rename from src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java rename to src/main/java/com/shanebeestudios/survival/item/items/blocks/Campfire.java index 0c8237b..e48ef3f 100644 --- a/src/main/java/tk/shanebee/survival/item/items/blocks/Campfire.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/blocks/Campfire.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.blocks; +package com.shanebeestudios.survival.item.items.blocks; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -11,7 +11,7 @@ import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.BlockDataMeta; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Campfire extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java b/src/main/java/com/shanebeestudios/survival/item/items/blocks/Workbench.java similarity index 85% rename from src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java rename to src/main/java/com/shanebeestudios/survival/item/items/blocks/Workbench.java index fec70e7..1b34e37 100644 --- a/src/main/java/tk/shanebee/survival/item/items/blocks/Workbench.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/blocks/Workbench.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.blocks; +package com.shanebeestudios.survival.item.items.blocks; import org.bukkit.Material; import org.bukkit.Tag; @@ -7,8 +7,8 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.Items; @SuppressWarnings("UnstableApiUsage") public class Workbench extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/Coffee.java similarity index 90% rename from src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java rename to src/main/java/com/shanebeestudios/survival/item/items/drinks/Coffee.java index 0af9f44..1882774 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Coffee.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/Coffee.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.drinks; +package com.shanebeestudios.survival.item.items.drinks; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -6,7 +6,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.item.Items; @SuppressWarnings("UnstableApiUsage") public class Coffee extends DrinkItem { diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/ColdMilk.java similarity index 94% rename from src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java rename to src/main/java/com/shanebeestudios/survival/item/items/drinks/ColdMilk.java index 5a200d0..0656a9e 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/ColdMilk.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/ColdMilk.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.drinks; +package com.shanebeestudios.survival.item.items.drinks; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import org.bukkit.Material; diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/DrinkItem.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java rename to src/main/java/com/shanebeestudios/survival/item/items/drinks/DrinkItem.java index 20feeb4..b18565e 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/DrinkItem.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/DrinkItem.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.drinks; +package com.shanebeestudios.survival.item.items.drinks; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Consumable; @@ -10,7 +10,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java similarity index 91% rename from src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java rename to src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java index 32f15af..edf971e 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/HotMilk.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.drinks; +package com.shanebeestudios.survival.item.items.drinks; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect.ApplyStatusEffects; @@ -9,7 +9,7 @@ import org.bukkit.inventory.SmokingRecipe; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.item.Items; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java similarity index 98% rename from src/main/java/tk/shanebee/survival/item/items/drinks/Water.java rename to src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java index 7c7d999..0d903bf 100644 --- a/src/main/java/tk/shanebee/survival/item/items/drinks/Water.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.drinks; +package com.shanebeestudios.survival.item.items.drinks; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import org.bukkit.Material; diff --git a/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java b/src/main/java/com/shanebeestudios/survival/item/items/food/SuspiciousMeat.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java rename to src/main/java/com/shanebeestudios/survival/item/items/food/SuspiciousMeat.java index 5e5e85b..21cf2b2 100644 --- a/src/main/java/tk/shanebee/survival/item/items/food/SuspiciousMeat.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/food/SuspiciousMeat.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.food; +package com.shanebeestudios.survival.item.items.food; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.SuspiciousStewEffects; @@ -6,7 +6,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java b/src/main/java/com/shanebeestudios/survival/item/items/legendary/BlazeSword.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java rename to src/main/java/com/shanebeestudios/survival/item/items/legendary/BlazeSword.java index 9e127b8..5e48ab7 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/BlazeSword.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/legendary/BlazeSword.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.legendary; +package com.shanebeestudios.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -13,7 +13,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class BlazeSword extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java b/src/main/java/com/shanebeestudios/survival/item/items/legendary/EnderGiantBlade.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java rename to src/main/java/com/shanebeestudios/survival/item/items/legendary/EnderGiantBlade.java index ab55af0..9d0840e 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/EnderGiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/legendary/EnderGiantBlade.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.legendary; +package com.shanebeestudios.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -14,7 +14,7 @@ import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class EnderGiantBlade extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java b/src/main/java/com/shanebeestudios/survival/item/items/legendary/ObsidianMace.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java rename to src/main/java/com/shanebeestudios/survival/item/items/legendary/ObsidianMace.java index 6e86c5a..cfadac5 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/ObsidianMace.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/legendary/ObsidianMace.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.legendary; +package com.shanebeestudios.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -13,7 +13,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class ObsidianMace extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java b/src/main/java/com/shanebeestudios/survival/item/items/legendary/QuartzPickaxe.java similarity index 95% rename from src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java rename to src/main/java/com/shanebeestudios/survival/item/items/legendary/QuartzPickaxe.java index f437bb6..e8f576a 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/QuartzPickaxe.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/legendary/QuartzPickaxe.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.legendary; +package com.shanebeestudios.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -12,7 +12,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class QuartzPickaxe extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java b/src/main/java/com/shanebeestudios/survival/item/items/legendary/ValkyriesAxe.java similarity index 93% rename from src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java rename to src/main/java/com/shanebeestudios/survival/item/items/legendary/ValkyriesAxe.java index d2cce11..09f3474 100644 --- a/src/main/java/tk/shanebee/survival/item/items/legendary/ValkyriesAxe.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/legendary/ValkyriesAxe.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.legendary; +package com.shanebeestudios.survival.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -12,7 +12,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class ValkyriesAxe extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java b/src/main/java/com/shanebeestudios/survival/item/items/misc/BreedingEgg.java similarity index 75% rename from src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java rename to src/main/java/com/shanebeestudios/survival/item/items/misc/BreedingEgg.java index 7fc0d2a..d4daf6b 100644 --- a/src/main/java/tk/shanebee/survival/item/items/misc/BreedingEgg.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/misc/BreedingEgg.java @@ -1,8 +1,8 @@ -package tk.shanebee.survival.item.items.misc; +package com.shanebeestudios.survival.item.items.misc; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class BreedingEgg extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java b/src/main/java/com/shanebeestudios/survival/item/items/misc/CoffeeBean.java similarity index 85% rename from src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java rename to src/main/java/com/shanebeestudios/survival/item/items/misc/CoffeeBean.java index 94ce01c..f55765d 100644 --- a/src/main/java/tk/shanebee/survival/item/items/misc/CoffeeBean.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/misc/CoffeeBean.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.item.items.misc; +package com.shanebeestudios.survival.item.items.misc; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.SmokingRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class CoffeeBean extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java b/src/main/java/com/shanebeestudios/survival/item/items/misc/FermentedSkin.java similarity index 89% rename from src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java rename to src/main/java/com/shanebeestudios/survival/item/items/misc/FermentedSkin.java index 35910e5..39c6379 100644 --- a/src/main/java/tk/shanebee/survival/item/items/misc/FermentedSkin.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/misc/FermentedSkin.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.misc; +package com.shanebeestudios.survival.item.items.misc; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -6,7 +6,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class FermentedSkin extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Compass.java similarity index 87% rename from src/main/java/tk/shanebee/survival/item/items/tools/Compass.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/Compass.java index 7b832a0..1d7c291 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Compass.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Compass.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Compass extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/FireStriker.java similarity index 92% rename from src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/FireStriker.java index c43b7b0..83213af 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/FireStriker.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/FireStriker.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -9,7 +9,7 @@ import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class FireStriker extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/GrapplingHook.java similarity index 88% rename from src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/GrapplingHook.java index 58d0210..3e958e7 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/GrapplingHook.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/GrapplingHook.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class GrapplingHook extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java similarity index 90% rename from src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java index af54584..29a2ac4 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Hammer.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -7,7 +7,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; public class Hammer extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java similarity index 88% rename from src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java index 2ecbad7..e914b0b 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Hatchet.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -6,7 +6,7 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Hatchet extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java similarity index 90% rename from src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java index d272212..a03627f 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Mattock.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -8,7 +8,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Mattock extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/MedicKit.java similarity index 88% rename from src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/MedicKit.java index 9ef7510..39e8fec 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/MedicKit.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/MedicKit.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -6,8 +6,8 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.util.ItemUtils; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.util.ItemUtils; @SuppressWarnings("UnstableApiUsage") public class MedicKit extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveBow.java similarity index 91% rename from src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveBow.java index c9b1e3d..74b7254 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveBow.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveBow.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -7,7 +7,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class RecurveBow extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveCrossbow.java similarity index 91% rename from src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveCrossbow.java index ecf6333..06ca599 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/RecurveCrossbow.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveCrossbow.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -7,7 +7,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class RecurveCrossbow extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java similarity index 94% rename from src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java index e283e23..7f38824 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Shiv.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -11,7 +11,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Shiv extends Item { diff --git a/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java similarity index 91% rename from src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java index c863bc7..7e97674 100644 --- a/src/main/java/tk/shanebee/survival/item/items/tools/Sickle.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.item.items.tools; +package com.shanebeestudios.survival.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -6,7 +6,7 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Sickle extends Item { diff --git a/src/main/java/tk/shanebee/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java similarity index 61% rename from src/main/java/tk/shanebee/survival/listeners/EventManager.java rename to src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index c229c39..330f74a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -1,52 +1,52 @@ -package tk.shanebee.survival.listeners; +package com.shanebeestudios.survival.listeners; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.listeners.block.BlockBreak; -import tk.shanebee.survival.listeners.block.BlockPlace; -import tk.shanebee.survival.listeners.block.BurnoutTorches; -import tk.shanebee.survival.listeners.block.Campfire; -import tk.shanebee.survival.listeners.block.Chairs; -import tk.shanebee.survival.listeners.block.SnowGeneration; -import tk.shanebee.survival.listeners.block.SnowballThrow; -import tk.shanebee.survival.listeners.block.WorkbenchShare; -import tk.shanebee.survival.listeners.entity.BeeKeeperSuit; -import tk.shanebee.survival.listeners.entity.ChestPigmen; -import tk.shanebee.survival.listeners.entity.ChickenSpawn; -import tk.shanebee.survival.listeners.entity.EntityDeath; -import tk.shanebee.survival.listeners.entity.LivingSlime; -import tk.shanebee.survival.listeners.entity.MerchantTrades; -import tk.shanebee.survival.listeners.entity.PiglinBarter; -import tk.shanebee.survival.listeners.item.BeetrootStrength; -import tk.shanebee.survival.listeners.item.BlazeSword; -import tk.shanebee.survival.listeners.item.Bow; -import tk.shanebee.survival.listeners.item.CauldronWaterBottle; -import tk.shanebee.survival.listeners.item.CompassWaypoint; -import tk.shanebee.survival.listeners.item.CookieHealthBoost; -import tk.shanebee.survival.listeners.item.FirestrikerListener; -import tk.shanebee.survival.listeners.item.FoodDiversityConsume; -import tk.shanebee.survival.listeners.item.GiantBlade; -import tk.shanebee.survival.listeners.item.GrapplingHook; -import tk.shanebee.survival.listeners.item.MedicKit; -import tk.shanebee.survival.listeners.item.ObsidianMaceWeakness; -import tk.shanebee.survival.listeners.item.PoisonousPotato; -import tk.shanebee.survival.listeners.item.RawMeatHunger; -import tk.shanebee.survival.listeners.item.RecurvedBow; -import tk.shanebee.survival.listeners.item.RepairCrafting; -import tk.shanebee.survival.listeners.item.ShivPoison; -import tk.shanebee.survival.listeners.item.ThirstListener; -import tk.shanebee.survival.listeners.item.TropicalFish; -import tk.shanebee.survival.listeners.item.Valkyrie; -import tk.shanebee.survival.listeners.item.WaterBottleListener; -import tk.shanebee.survival.listeners.item.WaterBowlListener; -import tk.shanebee.survival.listeners.player.EnergyChange; -import tk.shanebee.survival.listeners.player.PlayerDataListener; -import tk.shanebee.survival.listeners.server.Guide; -import tk.shanebee.survival.listeners.server.LocalChat; -import tk.shanebee.survival.listeners.server.RecipeDiscovery; -import tk.shanebee.survival.listeners.server.ResourcePackListener; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.listeners.block.BlockBreak; +import com.shanebeestudios.survival.listeners.block.BlockPlace; +import com.shanebeestudios.survival.listeners.block.BurnoutTorches; +import com.shanebeestudios.survival.listeners.block.Campfire; +import com.shanebeestudios.survival.listeners.block.Chairs; +import com.shanebeestudios.survival.listeners.block.SnowGeneration; +import com.shanebeestudios.survival.listeners.block.SnowballThrow; +import com.shanebeestudios.survival.listeners.block.WorkbenchShare; +import com.shanebeestudios.survival.listeners.entity.BeeKeeperSuit; +import com.shanebeestudios.survival.listeners.entity.ChestPigmen; +import com.shanebeestudios.survival.listeners.entity.ChickenSpawn; +import com.shanebeestudios.survival.listeners.entity.EntityDeath; +import com.shanebeestudios.survival.listeners.entity.LivingSlime; +import com.shanebeestudios.survival.listeners.entity.MerchantTrades; +import com.shanebeestudios.survival.listeners.entity.PiglinBarter; +import com.shanebeestudios.survival.listeners.item.BeetrootStrength; +import com.shanebeestudios.survival.listeners.item.BlazeSword; +import com.shanebeestudios.survival.listeners.item.Bow; +import com.shanebeestudios.survival.listeners.item.CauldronWaterBottle; +import com.shanebeestudios.survival.listeners.item.CompassWaypoint; +import com.shanebeestudios.survival.listeners.item.CookieHealthBoost; +import com.shanebeestudios.survival.listeners.item.FirestrikerListener; +import com.shanebeestudios.survival.listeners.item.FoodDiversityConsume; +import com.shanebeestudios.survival.listeners.item.GiantBlade; +import com.shanebeestudios.survival.listeners.item.GrapplingHook; +import com.shanebeestudios.survival.listeners.item.MedicKit; +import com.shanebeestudios.survival.listeners.item.ObsidianMaceWeakness; +import com.shanebeestudios.survival.listeners.item.PoisonousPotato; +import com.shanebeestudios.survival.listeners.item.RawMeatHunger; +import com.shanebeestudios.survival.listeners.item.RecurvedBow; +import com.shanebeestudios.survival.listeners.item.RepairCrafting; +import com.shanebeestudios.survival.listeners.item.ShivPoison; +import com.shanebeestudios.survival.listeners.item.ThirstListener; +import com.shanebeestudios.survival.listeners.item.TropicalFish; +import com.shanebeestudios.survival.listeners.item.Valkyrie; +import com.shanebeestudios.survival.listeners.item.WaterBottleListener; +import com.shanebeestudios.survival.listeners.item.WaterBowlListener; +import com.shanebeestudios.survival.listeners.player.EnergyChange; +import com.shanebeestudios.survival.listeners.player.PlayerDataListener; +import com.shanebeestudios.survival.listeners.server.Guide; +import com.shanebeestudios.survival.listeners.server.LocalChat; +import com.shanebeestudios.survival.listeners.server.RecipeDiscovery; +import com.shanebeestudios.survival.listeners.server.ResourcePackListener; /** * Internal use only diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java index 131cd94..a41e3b6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockBreak.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import org.bukkit.Effect; import org.bukkit.GameMode; @@ -18,13 +18,13 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.BlockTags; -import tk.shanebee.survival.util.ItemUtils; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.BlockTags; +import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.util.Utils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlace.java similarity index 88% rename from src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlace.java index 5315af6..619baf5 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BlockPlace.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlace.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import org.bukkit.GameMode; import org.bukkit.Sound; @@ -10,13 +10,13 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.BlockTags; -import tk.shanebee.survival.util.ItemUtils; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.BlockTags; +import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.util.Utils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BurnoutTorches.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/BurnoutTorches.java index 30916ec..a303196 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/BurnoutTorches.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BurnoutTorches.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import org.bukkit.GameMode; import org.bukkit.Location; @@ -20,10 +20,10 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.BlockManager; -import tk.shanebee.survival.util.ItemUtils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.BlockManager; +import com.shanebeestudios.survival.util.ItemUtils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java b/src/main/java/com/shanebeestudios/survival/listeners/block/Campfire.java similarity index 95% rename from src/main/java/tk/shanebee/survival/listeners/block/Campfire.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/Campfire.java index 6c9cac4..98429af 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Campfire.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/Campfire.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -10,7 +10,7 @@ import org.bukkit.event.block.BlockCookEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; +import com.shanebeestudios.survival.SurvivalPlugin; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java b/src/main/java/com/shanebeestudios/survival/listeners/block/Chairs.java similarity index 98% rename from src/main/java/tk/shanebee/survival/listeners/block/Chairs.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/Chairs.java index fab5f65..7dfa117 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/Chairs.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/Chairs.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -21,8 +21,8 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.util.Vector; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java b/src/main/java/com/shanebeestudios/survival/listeners/block/SnowGeneration.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/SnowGeneration.java index 27fc92e..a895421 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/SnowGeneration.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/SnowGeneration.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import org.bukkit.*; import org.bukkit.block.Block; @@ -7,7 +7,7 @@ import org.bukkit.event.block.BlockFormEvent; import org.bukkit.event.world.ChunkLoadEvent; -import tk.shanebee.survival.SurvivalPlugin; +import com.shanebeestudios.survival.SurvivalPlugin; public class SnowGeneration implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/block/SnowballThrow.java b/src/main/java/com/shanebeestudios/survival/listeners/block/SnowballThrow.java similarity index 98% rename from src/main/java/tk/shanebee/survival/listeners/block/SnowballThrow.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/SnowballThrow.java index 6ab851a..09b90c6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/SnowballThrow.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/SnowballThrow.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java b/src/main/java/com/shanebeestudios/survival/listeners/block/WorkbenchShare.java similarity index 98% rename from src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/WorkbenchShare.java index 5d14a27..92b3920 100644 --- a/src/main/java/tk/shanebee/survival/listeners/block/WorkbenchShare.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/WorkbenchShare.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.block; +package com.shanebeestudios.survival.listeners.block; import com.google.common.collect.ImmutableSet; import org.bukkit.Bukkit; @@ -17,7 +17,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import tk.shanebee.survival.SurvivalPlugin; +import com.shanebeestudios.survival.SurvivalPlugin; import java.util.*; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/BeeKeeperSuit.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/BeeKeeperSuit.java similarity index 93% rename from src/main/java/tk/shanebee/survival/listeners/entity/BeeKeeperSuit.java rename to src/main/java/com/shanebeestudios/survival/listeners/entity/BeeKeeperSuit.java index 91131eb..3db0899 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/BeeKeeperSuit.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/BeeKeeperSuit.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.entity; +package com.shanebeestudios.survival.listeners.entity; import org.bukkit.entity.Bee; import org.bukkit.entity.Entity; @@ -12,8 +12,8 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.inventory.PlayerInventory; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.Utils; public class BeeKeeperSuit implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/ChestPigmen.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java rename to src/main/java/com/shanebeestudios/survival/listeners/entity/ChestPigmen.java index fc4aacc..5b6a217 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChestPigmen.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/ChestPigmen.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.entity; +package com.shanebeestudios.survival.listeners.entity; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -17,7 +17,7 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; +import com.shanebeestudios.survival.SurvivalPlugin; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/ChickenSpawn.java similarity index 91% rename from src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java rename to src/main/java/com/shanebeestudios/survival/listeners/entity/ChickenSpawn.java index e84d2f1..1b89f4d 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/ChickenSpawn.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/ChickenSpawn.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.entity; +package com.shanebeestudios.survival.listeners.entity; import org.bukkit.Location; import org.bukkit.Sound; @@ -10,9 +10,9 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.player.PlayerEggThrowEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/EntityDeath.java similarity index 87% rename from src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java rename to src/main/java/com/shanebeestudios/survival/listeners/entity/EntityDeath.java index 480f077..23fd7a2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/EntityDeath.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/EntityDeath.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.entity; +package com.shanebeestudios.survival.listeners.entity; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; @@ -7,9 +7,9 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; import java.util.List; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/LivingSlime.java similarity index 94% rename from src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java rename to src/main/java/com/shanebeestudios/survival/listeners/entity/LivingSlime.java index b51355d..7970b07 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/LivingSlime.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/LivingSlime.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.entity; +package com.shanebeestudios.survival.listeners.entity; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -11,8 +11,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.Iterator; diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java similarity index 80% rename from src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java rename to src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java index 4234ddd..508db21 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/MerchantTrades.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java @@ -1,12 +1,12 @@ -package tk.shanebee.survival.listeners.entity; +package com.shanebeestudios.survival.listeners.entity; import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.Merchant; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.managers.MerchantManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.managers.MerchantManager; public class MerchantTrades implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java similarity index 93% rename from src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java rename to src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java index a41d93d..bbb85d1 100644 --- a/src/main/java/tk/shanebee/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.entity; +package com.shanebeestudios.survival.listeners.entity; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -9,9 +9,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionType; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/BeetrootStrength.java b/src/main/java/com/shanebeestudios/survival/listeners/item/BeetrootStrength.java similarity index 94% rename from src/main/java/tk/shanebee/survival/listeners/item/BeetrootStrength.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/BeetrootStrength.java index de99248..beb0703 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/BeetrootStrength.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/BeetrootStrength.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java b/src/main/java/com/shanebeestudios/survival/listeners/item/BlazeSword.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/BlazeSword.java index fe552ae..74477f2 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/BlazeSword.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/BlazeSword.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -18,7 +18,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.item.Items; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java b/src/main/java/com/shanebeestudios/survival/listeners/item/Bow.java similarity index 91% rename from src/main/java/tk/shanebee/survival/listeners/item/Bow.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/Bow.java index 706730f..882774f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Bow.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/Bow.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -10,9 +10,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.CrossbowMeta; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.util.Utils; public class Bow implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java b/src/main/java/com/shanebeestudios/survival/listeners/item/CauldronWaterBottle.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/CauldronWaterBottle.java index 76699c2..7c5da40 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CauldronWaterBottle.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/CauldronWaterBottle.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Material; import org.bukkit.Sound; @@ -14,7 +14,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.item.Items; @SuppressWarnings("UnstableApiUsage") public class CauldronWaterBottle implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java b/src/main/java/com/shanebeestudios/survival/listeners/item/CompassWaypoint.java similarity index 91% rename from src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/CompassWaypoint.java index c506c51..51ff0f6 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CompassWaypoint.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/CompassWaypoint.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Location; import org.bukkit.Material; @@ -12,12 +12,12 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.BlockTags; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.util.BlockTags; +import com.shanebeestudios.survival.util.Utils; public class CompassWaypoint implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/CookieHealthBoost.java b/src/main/java/com/shanebeestudios/survival/listeners/item/CookieHealthBoost.java similarity index 95% rename from src/main/java/tk/shanebee/survival/listeners/item/CookieHealthBoost.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/CookieHealthBoost.java index 19c7e4f..544590c 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/CookieHealthBoost.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/CookieHealthBoost.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/FirestrikerListener.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/item/FirestrikerListener.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/FirestrikerListener.java index e4cc8c1..f7eb29a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FirestrikerListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/FirestrikerListener.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -25,9 +25,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.gui.FireStrikerGUI; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.gui.FireStrikerGUI; +import com.shanebeestudios.survival.item.Items; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java b/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java similarity index 90% rename from src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java index 717b962..b35be18 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/FoodDiversityConsume.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.GameMode; import org.bukkit.Material; @@ -14,13 +14,13 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.item.Nutrition; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.item.Nutrition; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.util.Utils; public class FoodDiversityConsume implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java b/src/main/java/com/shanebeestudios/survival/listeners/item/GiantBlade.java similarity index 95% rename from src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/GiantBlade.java index b6a19e7..49fdb4f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/GiantBlade.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -22,13 +22,13 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.data.Stat; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.util.Utils; import java.util.Collection; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java b/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHook.java similarity index 95% rename from src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHook.java index 35277c2..c3e87ab 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/GrapplingHook.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHook.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Location; import org.bukkit.Material; @@ -11,10 +11,10 @@ import org.bukkit.event.player.PlayerFishEvent.State; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.Utils; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java b/src/main/java/com/shanebeestudios/survival/listeners/item/MedicKit.java similarity index 92% rename from src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/MedicKit.java index 025a774..2ed0d0c 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/MedicKit.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/MedicKit.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import io.papermc.paper.entity.LookAnchor; import org.bukkit.Bukkit; @@ -18,15 +18,15 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.ItemUtils; -import tk.shanebee.survival.util.PlayerUtils; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.data.Stat; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.util.PlayerUtils; +import com.shanebeestudios.survival.util.Utils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java b/src/main/java/com/shanebeestudios/survival/listeners/item/ObsidianMaceWeakness.java similarity index 86% rename from src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/ObsidianMaceWeakness.java index 06c24cf..761a354 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ObsidianMaceWeakness.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/ObsidianMaceWeakness.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; @@ -11,11 +11,11 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.EffectManager; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.EffectManager; +import com.shanebeestudios.survival.util.Utils; public class ObsidianMaceWeakness implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/PoisonousPotato.java b/src/main/java/com/shanebeestudios/survival/listeners/item/PoisonousPotato.java similarity index 94% rename from src/main/java/tk/shanebee/survival/listeners/item/PoisonousPotato.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/PoisonousPotato.java index d5f28a7..69a7a7f 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/PoisonousPotato.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/PoisonousPotato.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/RawMeatHunger.java b/src/main/java/com/shanebeestudios/survival/listeners/item/RawMeatHunger.java similarity index 95% rename from src/main/java/tk/shanebee/survival/listeners/item/RawMeatHunger.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/RawMeatHunger.java index e33b223..adc568c 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/RawMeatHunger.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/RawMeatHunger.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java b/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBow.java similarity index 88% rename from src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBow.java index 0db95b7..0c84305 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/RecurvedBow.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBow.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Sound; @@ -9,11 +9,11 @@ import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.events.ShootRecurvedBowEvent; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.events.ShootRecurvedBowEvent; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.Utils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/RepairCrafting.java b/src/main/java/com/shanebeestudios/survival/listeners/item/RepairCrafting.java similarity index 88% rename from src/main/java/tk/shanebee/survival/listeners/item/RepairCrafting.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/RepairCrafting.java index 115169f..9dbecb3 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/RepairCrafting.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/RepairCrafting.java @@ -1,21 +1,6 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; -import org.bukkit.Keyed; -import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.event.inventory.PrepareAnvilEvent; -import org.bukkit.event.inventory.PrepareItemCraftEvent; -import org.bukkit.inventory.AnvilInventory; -import org.bukkit.inventory.CraftingInventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; - -import java.util.ArrayList; -import java.util.List; public class RepairCrafting implements Listener { // TODO not sure we need this anymore?!?! diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java b/src/main/java/com/shanebeestudios/survival/listeners/item/ShivPoison.java similarity index 92% rename from src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/ShivPoison.java index 8688f26..b7c2c9e 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ShivPoison.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/ShivPoison.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Sound; import org.bukkit.entity.LivingEntity; @@ -15,10 +15,10 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.Utils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/StarBattleaxeWither.java b/src/main/java/com/shanebeestudios/survival/listeners/item/StarBattleaxeWither.java similarity index 93% rename from src/main/java/tk/shanebee/survival/listeners/item/StarBattleaxeWither.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/StarBattleaxeWither.java index fa42409..a68653e 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/StarBattleaxeWither.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/StarBattleaxeWither.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import java.util.Random; @@ -14,7 +14,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.util.Utils; public class StarBattleaxeWither implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java similarity index 92% rename from src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java index 4c273a9..e09ab82 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/ThirstListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -14,14 +14,14 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.events.ThirstLevelChangeEvent; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.item.items.drinks.DrinkItem; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.item.items.drinks.DrinkItem; +import com.shanebeestudios.survival.managers.PlayerManager; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java b/src/main/java/com/shanebeestudios/survival/listeners/item/TropicalFish.java similarity index 90% rename from src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/TropicalFish.java index 328a67f..23ee696 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/TropicalFish.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/TropicalFish.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import java.util.Random; @@ -11,9 +11,9 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerItemConsumeEvent; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; public class TropicalFish implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java b/src/main/java/com/shanebeestudios/survival/listeners/item/Valkyrie.java similarity index 94% rename from src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/Valkyrie.java index 7d1f877..5867fb9 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/Valkyrie.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/Valkyrie.java @@ -1,13 +1,13 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import java.util.Collection; import java.util.Random; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.data.Stat; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.util.Utils; import org.bukkit.*; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -22,7 +22,7 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.SurvivalPlugin; +import com.shanebeestudios.survival.SurvivalPlugin; public class Valkyrie implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBottleListener.java similarity index 91% rename from src/main/java/tk/shanebee/survival/listeners/item/WaterBottleListener.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/WaterBottleListener.java index 2113693..4997a3a 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBottleListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBottleListener.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.FluidCollisionMode; import org.bukkit.GameMode; @@ -12,9 +12,9 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; public class WaterBottleListener implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBowlListener.java similarity index 93% rename from src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/WaterBowlListener.java index 5f8c951..78514d5 100644 --- a/src/main/java/tk/shanebee/survival/listeners/item/WaterBowlListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBowlListener.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.item; +package com.shanebeestudios.survival.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Keyed; @@ -22,11 +22,11 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.util.Vector; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.events.WaterBowlFillEvent; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.item.Recipes; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.events.WaterBowlFillEvent; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.item.Recipes; +import com.shanebeestudios.survival.util.Utils; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java b/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java similarity index 90% rename from src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java rename to src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java index ae80e24..63d0f3e 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/EnergyChange.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.player; +package com.shanebeestudios.survival.listeners.player; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -8,14 +8,14 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.world.TimeSkipEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.events.EnergyLevelChangeEvent; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.events.EnergyLevelChangeEvent; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.util.Utils; public class EnergyChange implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java b/src/main/java/com/shanebeestudios/survival/listeners/player/PlayerDataListener.java similarity index 84% rename from src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java rename to src/main/java/com/shanebeestudios/survival/listeners/player/PlayerDataListener.java index 13c2521..d34e967 100644 --- a/src/main/java/tk/shanebee/survival/listeners/player/PlayerDataListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/player/PlayerDataListener.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.player; +package com.shanebeestudios.survival.listeners.player; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -8,12 +8,12 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scheduler.BukkitScheduler; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.PlayerDataConfig; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.managers.ScoreBoardManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.PlayerDataConfig; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.managers.ScoreBoardManager; import java.util.Objects; diff --git a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java b/src/main/java/com/shanebeestudios/survival/listeners/server/Guide.java similarity index 83% rename from src/main/java/tk/shanebee/survival/listeners/server/Guide.java rename to src/main/java/com/shanebeestudios/survival/listeners/server/Guide.java index 0b8de7d..bd7fd99 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/Guide.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/server/Guide.java @@ -1,14 +1,14 @@ -package tk.shanebee.survival.listeners.server; +package com.shanebeestudios.survival.listeners.server; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.util.Utils; public class Guide implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java b/src/main/java/com/shanebeestudios/survival/listeners/server/LocalChat.java similarity index 86% rename from src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java rename to src/main/java/com/shanebeestudios/survival/listeners/server/LocalChat.java index 36642cb..b7363ad 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/LocalChat.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/server/LocalChat.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.server; +package com.shanebeestudios.survival.listeners.server; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -9,10 +9,10 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Config; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.config.Config; public class LocalChat implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java b/src/main/java/com/shanebeestudios/survival/listeners/server/RecipeDiscovery.java similarity index 97% rename from src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java rename to src/main/java/com/shanebeestudios/survival/listeners/server/RecipeDiscovery.java index d3c2173..9fda464 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/RecipeDiscovery.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/server/RecipeDiscovery.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.server; +package com.shanebeestudios.survival.listeners.server; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -13,9 +13,9 @@ import org.bukkit.event.inventory.FurnaceExtractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.item.Recipes; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.item.Recipes; public class RecipeDiscovery implements Listener { diff --git a/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java b/src/main/java/com/shanebeestudios/survival/listeners/server/ResourcePackListener.java similarity index 90% rename from src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java rename to src/main/java/com/shanebeestudios/survival/listeners/server/ResourcePackListener.java index 97c8487..fbd0bbc 100644 --- a/src/main/java/tk/shanebee/survival/listeners/server/ResourcePackListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/server/ResourcePackListener.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.listeners.server; +package com.shanebeestudios.survival.listeners.server; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; @@ -6,10 +6,10 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerResourcePackStatusEvent; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.util.Utils; import java.util.UUID; diff --git a/src/main/java/tk/shanebee/survival/managers/BlockManager.java b/src/main/java/com/shanebeestudios/survival/managers/BlockManager.java similarity index 96% rename from src/main/java/tk/shanebee/survival/managers/BlockManager.java rename to src/main/java/com/shanebeestudios/survival/managers/BlockManager.java index 979409d..c449e08 100644 --- a/src/main/java/tk/shanebee/survival/managers/BlockManager.java +++ b/src/main/java/com/shanebeestudios/survival/managers/BlockManager.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.managers; +package com.shanebeestudios.survival.managers; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -11,9 +11,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.util.Utils; import java.io.File; import java.io.IOException; diff --git a/src/main/java/com/shanebeestudios/survival/managers/EffectManager.java b/src/main/java/com/shanebeestudios/survival/managers/EffectManager.java new file mode 100644 index 0000000..d3b0399 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/managers/EffectManager.java @@ -0,0 +1,87 @@ +package com.shanebeestudios.survival.managers; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.tasks.tool.BlazeSwordEffects; +import com.shanebeestudios.survival.tasks.tool.BlazeSwordSound; +import com.shanebeestudios.survival.tasks.tool.GiantBlade; +import com.shanebeestudios.survival.tasks.tool.ObsidianMace; +import com.shanebeestudios.survival.tasks.tool.QuartzPickaxe; +import com.shanebeestudios.survival.tasks.tool.Valkyrie; +import com.shanebeestudios.survival.util.Utils; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class EffectManager { + + private final SurvivalPlugin plugin; + private final Config config; + + // Effect Tasks + private BlazeSwordEffects blazeSwordEffects = null; + private BlazeSwordSound blazeSwordSound = null; + private GiantBlade giantBlade = null; + private ObsidianMace obsidianMace = null; + private QuartzPickaxe quartzPickaxe = null; + private Valkyrie valkyrie = null; + + public EffectManager(SurvivalPlugin plugin) { + this.plugin = plugin; + this.config = plugin.getSurvivalConfig(); + loadEffects(); + } + + private void loadEffects() { + if (config.legendary_blaze_sword) { + this.blazeSwordEffects = new BlazeSwordEffects(plugin); + this.blazeSwordSound = new BlazeSwordSound(plugin); + } + if (config.legendary_giant_blade) + this.giantBlade = new GiantBlade(plugin); + if (config.legendary_obsidian_mace) + this.obsidianMace = new ObsidianMace(plugin); + if (config.legendary_valkyrie) + this.valkyrie = new Valkyrie(plugin); + if (config.legendary_quartz_pickaxe) + this.quartzPickaxe = new QuartzPickaxe(plugin); + } + + /** + * Stop all effect tasks + */ + @SuppressWarnings("unused") + public void cancelTasks() { + if (blazeSwordEffects != null) + blazeSwordEffects.cancel(); + if (blazeSwordSound != null) + blazeSwordSound.cancel(); + if (giantBlade != null) + giantBlade.cancel(); + if (obsidianMace != null) + obsidianMace.cancel(); + if (quartzPickaxe != null) + quartzPickaxe.cancel(); + if (valkyrie != null) + valkyrie.cancel(); + } + + /** + * Apply obsidian mace effects to player and enemy + * + * @param player Player to apply Regeneration to + * @param enemy Enemy to apply weakness and slowness to + */ + public void applyObsidianMaceEffects(Player player, LivingEntity enemy) { + enemy.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 100, 0, false)); + enemy.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 100, 0, false)); + player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 48, 2, true)); + Location particleLoc = player.getLocation(); + particleLoc.setY(particleLoc.getY() + 2); + Utils.spawnParticle(particleLoc, Particle.HEART, 2, 0.5, 0.5, 0.5); + } + +} diff --git a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java b/src/main/java/com/shanebeestudios/survival/managers/MerchantManager.java similarity index 93% rename from src/main/java/tk/shanebee/survival/managers/MerchantManager.java rename to src/main/java/com/shanebeestudios/survival/managers/MerchantManager.java index 0e73120..bbcbf31 100644 --- a/src/main/java/tk/shanebee/survival/managers/MerchantManager.java +++ b/src/main/java/com/shanebeestudios/survival/managers/MerchantManager.java @@ -1,14 +1,14 @@ -package tk.shanebee.survival.managers; +package com.shanebeestudios.survival.managers; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Merchant; import org.bukkit.inventory.MerchantRecipe; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Item; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.util.ItemUtils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.ItemUtils; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/tk/shanebee/survival/managers/Placeholders.java b/src/main/java/com/shanebeestudios/survival/managers/Placeholders.java similarity index 95% rename from src/main/java/tk/shanebee/survival/managers/Placeholders.java rename to src/main/java/com/shanebeestudios/survival/managers/Placeholders.java index 967e5d1..2886e6c 100644 --- a/src/main/java/tk/shanebee/survival/managers/Placeholders.java +++ b/src/main/java/com/shanebeestudios/survival/managers/Placeholders.java @@ -1,10 +1,10 @@ -package tk.shanebee.survival.managers; +package com.shanebeestudios.survival.managers; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.data.PlayerData; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.data.PlayerData; @SuppressWarnings("unused") public class Placeholders extends PlaceholderExpansion { diff --git a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java b/src/main/java/com/shanebeestudios/survival/managers/PlayerManager.java similarity index 96% rename from src/main/java/tk/shanebee/survival/managers/PlayerManager.java rename to src/main/java/com/shanebeestudios/survival/managers/PlayerManager.java index 625c098..986d952 100644 --- a/src/main/java/tk/shanebee/survival/managers/PlayerManager.java +++ b/src/main/java/com/shanebeestudios/survival/managers/PlayerManager.java @@ -1,17 +1,17 @@ -package tk.shanebee.survival.managers; +package com.shanebeestudios.survival.managers; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.event.Listener; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.config.PlayerDataConfig; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.config.PlayerDataConfig; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java b/src/main/java/com/shanebeestudios/survival/managers/RecipeManager.java similarity index 95% rename from src/main/java/tk/shanebee/survival/managers/RecipeManager.java rename to src/main/java/com/shanebeestudios/survival/managers/RecipeManager.java index bdf88f7..8c8df5a 100644 --- a/src/main/java/tk/shanebee/survival/managers/RecipeManager.java +++ b/src/main/java/com/shanebeestudios/survival/managers/RecipeManager.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.managers; +package com.shanebeestudios.survival.managers; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Recipes; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Recipes; public class RecipeManager { diff --git a/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java b/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java similarity index 91% rename from src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java rename to src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java index 18d6e4e..b117392 100644 --- a/src/main/java/tk/shanebee/survival/managers/ScoreBoardManager.java +++ b/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java @@ -1,10 +1,10 @@ -package tk.shanebee.survival.managers; +package com.shanebeestudios.survival.managers; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.HealthBoard; -import tk.shanebee.survival.tasks.HealthBoardTask; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.HealthBoard; +import com.shanebeestudios.survival.tasks.HealthBoardTask; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java b/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java similarity index 95% rename from src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java rename to src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java index 55e6a53..367a381 100644 --- a/src/main/java/tk/shanebee/survival/tasks/EnergyDrain.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -10,12 +10,12 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.config.Lang; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.util.Utils; public class EnergyDrain extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java b/src/main/java/com/shanebeestudios/survival/tasks/HealthBoardTask.java similarity index 93% rename from src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java rename to src/main/java/com/shanebeestudios/survival/tasks/HealthBoardTask.java index 2aa53e3..1d10e6e 100644 --- a/src/main/java/tk/shanebee/survival/tasks/HealthBoardTask.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/HealthBoardTask.java @@ -1,14 +1,14 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.data.HealthBoard; -import tk.shanebee.survival.data.Info; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.HealthBoard; +import com.shanebeestudios.survival.data.Info; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; import java.util.List; diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsAlert.java similarity index 79% rename from src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java rename to src/main/java/com/shanebeestudios/survival/tasks/NutrientsAlert.java index b6f2d9f..af8bc65 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsAlert.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsAlert.java @@ -1,15 +1,15 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Lang; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.config.Lang; class NutrientsAlert extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java similarity index 76% rename from src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java rename to src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java index 70b7d91..008eea6 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsDrain.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java @@ -1,13 +1,13 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; class NutrientsDrain extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java similarity index 94% rename from src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java rename to src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java index 783caf0..200981d 100644 --- a/src/main/java/tk/shanebee/survival/tasks/NutrientsEffect.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -10,12 +10,12 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.data.Nutrient; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.util.Utils; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.util.Utils; class NutrientsEffect extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java b/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java similarity index 87% rename from src/main/java/tk/shanebee/survival/tasks/TaskManager.java rename to src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java index dd8e59e..71b505d 100644 --- a/src/main/java/tk/shanebee/survival/tasks/TaskManager.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java @@ -1,7 +1,7 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; /** * Internal task manager diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstAlert.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstAlert.java similarity index 80% rename from src/main/java/tk/shanebee/survival/tasks/ThirstAlert.java rename to src/main/java/com/shanebeestudios/survival/tasks/ThirstAlert.java index baab8f1..13898d8 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstAlert.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/ThirstAlert.java @@ -1,14 +1,14 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; -import tk.shanebee.survival.config.Lang; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.config.Lang; class ThirstAlert extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrain.java similarity index 89% rename from src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java rename to src/main/java/com/shanebeestudios/survival/tasks/ThirstDrain.java index 9faaf06..3afdd2a 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrain.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrain.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -6,9 +6,9 @@ import org.bukkit.damage.DamageType; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.managers.PlayerManager; @SuppressWarnings("UnstableApiUsage") class ThirstDrain extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainHeat.java similarity index 83% rename from src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java rename to src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainHeat.java index 7853a9a..f8d1152 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainHeat.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainHeat.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -6,10 +6,10 @@ import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.events.ThirstLevelChangeEvent; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.managers.PlayerManager; class ThirstDrainHeat extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainNether.java similarity index 81% rename from src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java rename to src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainNether.java index 48b9c14..34fc3c8 100644 --- a/src/main/java/tk/shanebee/survival/tasks/ThirstDrainNether.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainNether.java @@ -1,14 +1,14 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.World.Environment; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.events.ThirstLevelChangeEvent; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.managers.PlayerManager; class ThirstDrainNether extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java b/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java similarity index 94% rename from src/main/java/tk/shanebee/survival/tasks/WeatherTask.java rename to src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java index b64b9d7..44bb391 100644 --- a/src/main/java/tk/shanebee/survival/tasks/WeatherTask.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks; +package com.shanebeestudios.survival.tasks; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -12,9 +12,9 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; @SuppressWarnings("BooleanMethodIsAlwaysInverted") public class WeatherTask extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java b/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordEffects.java similarity index 88% rename from src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java rename to src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordEffects.java index 5f2d732..3435620 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordEffects.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordEffects.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks.tool; +package com.shanebeestudios.survival.tasks.tool; import org.bukkit.Location; import org.bukkit.Particle; @@ -6,8 +6,8 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; public class BlazeSwordEffects extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java b/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordSound.java similarity index 84% rename from src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java rename to src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordSound.java index 9e758dc..c6599b5 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/BlazeSwordSound.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordSound.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.tasks.tool; +package com.shanebeestudios.survival.tasks.tool; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java b/src/main/java/com/shanebeestudios/survival/tasks/tool/GiantBlade.java similarity index 91% rename from src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java rename to src/main/java/com/shanebeestudios/survival/tasks/tool/GiantBlade.java index 41c3be0..d46260a 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/GiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/tool/GiantBlade.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks.tool; +package com.shanebeestudios.survival.tasks.tool; import com.google.common.collect.ImmutableSet; import org.bukkit.Location; @@ -9,11 +9,11 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.data.PlayerData; -import tk.shanebee.survival.data.Stat; -import tk.shanebee.survival.item.Items; -import tk.shanebee.survival.managers.PlayerManager; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.data.Stat; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.PlayerManager; public class GiantBlade extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java b/src/main/java/com/shanebeestudios/survival/tasks/tool/ObsidianMace.java similarity index 87% rename from src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java rename to src/main/java/com/shanebeestudios/survival/tasks/tool/ObsidianMace.java index ee2b76f..910f35f 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/ObsidianMace.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/tool/ObsidianMace.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.tasks.tool; +package com.shanebeestudios.survival.tasks.tool; import org.bukkit.Location; import org.bukkit.Particle; @@ -6,8 +6,8 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; public class ObsidianMace extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java b/src/main/java/com/shanebeestudios/survival/tasks/tool/QuartzPickaxe.java similarity index 82% rename from src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java rename to src/main/java/com/shanebeestudios/survival/tasks/tool/QuartzPickaxe.java index 91bd387..d43f99e 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/QuartzPickaxe.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/tool/QuartzPickaxe.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.tasks.tool; +package com.shanebeestudios.survival.tasks.tool; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; public class QuartzPickaxe extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java b/src/main/java/com/shanebeestudios/survival/tasks/tool/Valkyrie.java similarity index 83% rename from src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java rename to src/main/java/com/shanebeestudios/survival/tasks/tool/Valkyrie.java index f9fa818..217d9fe 100644 --- a/src/main/java/tk/shanebee/survival/tasks/tool/Valkyrie.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/tool/Valkyrie.java @@ -1,11 +1,11 @@ -package tk.shanebee.survival.tasks.tool; +package com.shanebeestudios.survival.tasks.tool; import org.bukkit.Location; import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.item.Items; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; public class Valkyrie extends BukkitRunnable { diff --git a/src/main/java/tk/shanebee/survival/util/BlockTags.java b/src/main/java/com/shanebeestudios/survival/util/BlockTags.java similarity index 97% rename from src/main/java/tk/shanebee/survival/util/BlockTags.java rename to src/main/java/com/shanebeestudios/survival/util/BlockTags.java index cd1b59a..ca21ca8 100644 --- a/src/main/java/tk/shanebee/survival/util/BlockTags.java +++ b/src/main/java/com/shanebeestudios/survival/util/BlockTags.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.util; +package com.shanebeestudios.survival.util; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/src/main/java/tk/shanebee/survival/util/Difficulty.java b/src/main/java/com/shanebeestudios/survival/util/Difficulty.java similarity index 98% rename from src/main/java/tk/shanebee/survival/util/Difficulty.java rename to src/main/java/com/shanebeestudios/survival/util/Difficulty.java index 878e8b5..b57e05f 100644 --- a/src/main/java/tk/shanebee/survival/util/Difficulty.java +++ b/src/main/java/com/shanebeestudios/survival/util/Difficulty.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.util; +package com.shanebeestudios.survival.util; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/src/main/java/tk/shanebee/survival/util/ItemUtils.java b/src/main/java/com/shanebeestudios/survival/util/ItemUtils.java similarity index 97% rename from src/main/java/tk/shanebee/survival/util/ItemUtils.java rename to src/main/java/com/shanebeestudios/survival/util/ItemUtils.java index 071ceae..f84fcdb 100644 --- a/src/main/java/tk/shanebee/survival/util/ItemUtils.java +++ b/src/main/java/com/shanebeestudios/survival/util/ItemUtils.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.util; +package com.shanebeestudios.survival.util; import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.Component; @@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import tk.shanebee.survival.item.Item; +import com.shanebeestudios.survival.item.Item; import java.util.Map; import java.util.Random; diff --git a/src/main/java/tk/shanebee/survival/util/Math.java b/src/main/java/com/shanebeestudios/survival/util/Math.java similarity index 98% rename from src/main/java/tk/shanebee/survival/util/Math.java rename to src/main/java/com/shanebeestudios/survival/util/Math.java index 7ac6301..2857523 100644 --- a/src/main/java/tk/shanebee/survival/util/Math.java +++ b/src/main/java/com/shanebeestudios/survival/util/Math.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.util; +package com.shanebeestudios.survival.util; /** * Simple math util methods diff --git a/src/main/java/tk/shanebee/survival/util/PlayerUtils.java b/src/main/java/com/shanebeestudios/survival/util/PlayerUtils.java similarity index 96% rename from src/main/java/tk/shanebee/survival/util/PlayerUtils.java rename to src/main/java/com/shanebeestudios/survival/util/PlayerUtils.java index ea2fe19..37dd1ad 100644 --- a/src/main/java/tk/shanebee/survival/util/PlayerUtils.java +++ b/src/main/java/com/shanebeestudios/survival/util/PlayerUtils.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.util; +package com.shanebeestudios.survival.util; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; diff --git a/src/main/java/tk/shanebee/survival/util/Utils.java b/src/main/java/com/shanebeestudios/survival/util/Utils.java similarity index 98% rename from src/main/java/tk/shanebee/survival/util/Utils.java rename to src/main/java/com/shanebeestudios/survival/util/Utils.java index 04c69d0..467be3e 100644 --- a/src/main/java/tk/shanebee/survival/util/Utils.java +++ b/src/main/java/com/shanebeestudios/survival/util/Utils.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.util; +package com.shanebeestudios.survival.util; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; @@ -10,17 +10,14 @@ import org.bukkit.NamespacedKey; import org.bukkit.Particle; import org.bukkit.Statistic; -import org.bukkit.World; -import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.metadata.Metadatable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import tk.shanebee.survival.SurvivalPlugin; +import com.shanebeestudios.survival.SurvivalPlugin; import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; import java.util.regex.Pattern; @SuppressWarnings({"WeakerAccess", "unused"}) diff --git a/src/main/java/tk/shanebee/survival/util/Validate.java b/src/main/java/com/shanebeestudios/survival/util/Validate.java similarity index 87% rename from src/main/java/tk/shanebee/survival/util/Validate.java rename to src/main/java/com/shanebeestudios/survival/util/Validate.java index 95819b0..e81679c 100644 --- a/src/main/java/tk/shanebee/survival/util/Validate.java +++ b/src/main/java/com/shanebeestudios/survival/util/Validate.java @@ -1,4 +1,4 @@ -package tk.shanebee.survival.util; +package com.shanebeestudios.survival.util; public abstract class Validate { diff --git a/src/main/java/tk/shanebee/survival/managers/EffectManager.java b/src/main/java/tk/shanebee/survival/managers/EffectManager.java deleted file mode 100644 index 45f759f..0000000 --- a/src/main/java/tk/shanebee/survival/managers/EffectManager.java +++ /dev/null @@ -1,80 +0,0 @@ -package tk.shanebee.survival.managers; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import tk.shanebee.survival.SurvivalPlugin; -import tk.shanebee.survival.tasks.tool.*; -import tk.shanebee.survival.config.Config; -import tk.shanebee.survival.util.Utils; - -public class EffectManager { - - private final SurvivalPlugin plugin; - private final Config config; - - // Effect Tasks - private BlazeSwordEffects blazeSwordEffects = null; - private BlazeSwordSound blazeSwordSound = null; - private GiantBlade giantBlade = null; - private ObsidianMace obsidianMace = null; - private QuartzPickaxe quartzPickaxe = null; - private Valkyrie valkyrie = null; - - public EffectManager(SurvivalPlugin plugin) { - this.plugin = plugin; - this.config = plugin.getSurvivalConfig(); - loadEffects(); - } - - private void loadEffects() { - if (config.legendary_blaze_sword) { - this.blazeSwordEffects = new BlazeSwordEffects(plugin); - this.blazeSwordSound = new BlazeSwordSound(plugin); - } - if (config.legendary_giant_blade) - this.giantBlade = new GiantBlade(plugin); - if (config.legendary_obsidian_mace) - this.obsidianMace = new ObsidianMace(plugin); - if (config.legendary_valkyrie) - this.valkyrie = new Valkyrie(plugin); - if (config.legendary_quartz_pickaxe) - this.quartzPickaxe = new QuartzPickaxe(plugin); - } - - /** - * Stop all effect tasks - */ - @SuppressWarnings("unused") - public void cancelTasks() { - if (blazeSwordEffects != null) - blazeSwordEffects.cancel(); - if (blazeSwordSound != null) - blazeSwordSound.cancel(); - if (giantBlade != null) - giantBlade.cancel(); - if (obsidianMace != null) - obsidianMace.cancel(); - if (quartzPickaxe != null) - quartzPickaxe.cancel(); - if (valkyrie != null) - valkyrie.cancel(); - } - - /** Apply obsidian mace effects to player and enemy - * @param player Player to apply Regeneration to - * @param enemy Enemy to apply weakness and slowness to - */ - public void applyObsidianMaceEffects(Player player, LivingEntity enemy) { - enemy.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 100, 0, false)); - enemy.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 100, 0, false)); - player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 48, 2, true)); - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 2); - Utils.spawnParticle(particleLoc, Particle.HEART, 2, 0.5, 0.5, 0.5); - } - -} From 2b34c745c73173ef45568de306d03f69d53c51fa Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 18:05:39 -0800 Subject: [PATCH 073/133] Javadoc update --- build.gradle.kts | 1 + .../survival/SurvivalPlugin.java | 12 ++++ .../survival/config/package-info.java | 4 ++ .../survival/data/package-info.java | 4 ++ .../survival/events/package-info.java | 4 ++ .../survival/generator/package-info.java | 4 ++ .../survival/gui/package-info.java | 4 ++ .../shanebeestudios/survival/item/Item.java | 38 +++++++++- .../shanebeestudios/survival/item/Items.java | 69 ++++++++++--------- .../survival/item/items/armor/ArmorPiece.java | 6 ++ .../item/items/armor/package-info.java | 4 ++ .../item/items/blocks/package-info.java | 4 ++ .../survival/item/items/drinks/HotMilk.java | 1 + .../survival/item/items/drinks/Water.java | 21 ++++++ .../item/items/drinks/package-info.java | 4 ++ .../item/items/food/package-info.java | 4 ++ .../item/items/legendary/package-info.java | 4 ++ .../item/items/misc/package-info.java | 4 ++ .../item/items/tools/package-info.java | 4 ++ .../survival/item/package-info.java | 4 ++ .../survival/managers/package-info.java | 4 ++ .../survival/package-info.java | 4 ++ .../survival/util/BlockTags.java | 56 ++++++++++++++- .../shanebeestudios/survival/util/Utils.java | 3 + .../survival/util/package-info.java | 4 ++ 25 files changed, 234 insertions(+), 37 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/config/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/data/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/events/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/generator/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/gui/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/item/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/managers/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/util/package-info.java diff --git a/build.gradle.kts b/build.gradle.kts index 7fc013d..6173550 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -76,6 +76,7 @@ tasks { exclude("com/shanebeestudios/survival/commands") exclude("com/shanebeestudios/survival/listeners") exclude("com/shanebeestudios/survival/tasks") + (options as CoreJavadocOptions).addBooleanOption("Xdoclint:none", true) (options as StandardJavadocDocletOptions).links( "https://jd.papermc.io/paper/${minecraftVersion}/", "https://jd.advntr.dev/api/4.18.0/" diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index afbb021..d005973 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -38,6 +38,9 @@ import java.util.Map; import java.util.UUID; +/** + * Main plugin class + */ @SuppressWarnings("UnstableApiUsage") public class SurvivalPlugin extends JavaPlugin implements Listener { @@ -69,6 +72,9 @@ public class SurvivalPlugin extends JavaPlugin implements Listener { private boolean loaded = true; private boolean snowGenOption = true; + /** + * @hidden + */ @Override public void onLoad() { try { @@ -82,6 +88,9 @@ public void onLoad() { } } + /** + * @hidden + */ public void onEnable() { instance = this; long time = System.currentTimeMillis(); @@ -179,6 +188,9 @@ public void onEnable() { } } + /** + * @hidden + */ public void onDisable() { if (!loaded) return; Utils.logMini("Shutting down"); diff --git a/src/main/java/com/shanebeestudios/survival/config/package-info.java b/src/main/java/com/shanebeestudios/survival/config/package-info.java new file mode 100644 index 0000000..f133ef9 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/config/package-info.java @@ -0,0 +1,4 @@ +/** + * Configs for the plugin + */ +package com.shanebeestudios.survival.config; diff --git a/src/main/java/com/shanebeestudios/survival/data/package-info.java b/src/main/java/com/shanebeestudios/survival/data/package-info.java new file mode 100644 index 0000000..34a794b --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/data/package-info.java @@ -0,0 +1,4 @@ +/** + * Classes for holding data + */ +package com.shanebeestudios.survival.data; diff --git a/src/main/java/com/shanebeestudios/survival/events/package-info.java b/src/main/java/com/shanebeestudios/survival/events/package-info.java new file mode 100644 index 0000000..5418686 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/events/package-info.java @@ -0,0 +1,4 @@ +/** + * {@link org.bukkit.event.Event Events} other plugins can listen to + */ +package com.shanebeestudios.survival.events; diff --git a/src/main/java/com/shanebeestudios/survival/generator/package-info.java b/src/main/java/com/shanebeestudios/survival/generator/package-info.java new file mode 100644 index 0000000..28af773 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/generator/package-info.java @@ -0,0 +1,4 @@ +/** + * Generators for generating data + */ +package com.shanebeestudios.survival.generator; diff --git a/src/main/java/com/shanebeestudios/survival/gui/package-info.java b/src/main/java/com/shanebeestudios/survival/gui/package-info.java new file mode 100644 index 0000000..95daeb0 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/gui/package-info.java @@ -0,0 +1,4 @@ +/** + * Represents GUIs used by the plugin + */ +package com.shanebeestudios.survival.gui; diff --git a/src/main/java/com/shanebeestudios/survival/item/Item.java b/src/main/java/com/shanebeestudios/survival/item/Item.java index 9cab49d..e2236cb 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Item.java +++ b/src/main/java/com/shanebeestudios/survival/item/Item.java @@ -1,5 +1,7 @@ package com.shanebeestudios.survival.item; +import com.shanebeestudios.survival.config.ItemConfig; +import com.shanebeestudios.survival.util.Utils; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; import net.kyori.adventure.key.Key; @@ -10,8 +12,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.config.ItemConfig; -import com.shanebeestudios.survival.util.Utils; import java.util.ArrayList; import java.util.List; @@ -36,10 +36,21 @@ public abstract class Item { @SuppressWarnings({"FieldCanBeLocal", "unused"}) private double repairPercent; // TODO figure this out + /** + * Get an ItemStack from this item + * + * @return Cloned ItemStack of this item + */ public ItemStack getItemStack() { return getItemStack(1); } + /** + * Get an ItemStack from this item + * + * @param amount Stack amount + * @return Cloned ItemStack of this item + */ public ItemStack getItemStack(int amount) { ItemStack clone = this.itemStack.clone(); clone.setAmount(amount); @@ -108,10 +119,21 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod Items.ALL_ITEMS.put(this.key, this); } - public Recipe getRecipe() { + /** + * Get the recipe of this item + * + * @return Recipe of this item if registered + */ + public @Nullable Recipe getRecipe() { return null; } + /** + * Check if an {@link ItemStack} matches this item + * + * @param itemStack ItemStack to compare + * @return True if the item matches + */ public boolean is(ItemStack itemStack) { if (itemStack.hasData(DataComponentTypes.ITEM_MODEL)) { Key data = itemStack.getData(DataComponentTypes.ITEM_MODEL); @@ -120,10 +142,20 @@ public boolean is(ItemStack itemStack) { return false; } + /** + * Get the {@link Key} of this item + * + * @return Key of this item + */ public Key getKey() { return this.key; } + /** + * Get the name of this item + * + * @return Name of item + */ public @Nullable String getName() { return this.name; } diff --git a/src/main/java/com/shanebeestudios/survival/item/Items.java b/src/main/java/com/shanebeestudios/survival/item/Items.java index 68daa1d..140a8f7 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Items.java +++ b/src/main/java/com/shanebeestudios/survival/item/Items.java @@ -55,7 +55,7 @@ import java.util.Set; /** - * Custom SurvivalPlus items + * Custom SurvivalPlus {@link Item Items} */ @SuppressWarnings("UnstableApiUsage") public class Items { @@ -86,35 +86,35 @@ public class Items { public static final Item BLAZE_SWORD = new BlazeSword(); // ARMOR - public static final Item REINFORCED_LEATHER_HELMET = new ReinforcedPiece(ArmorType.HELMET); - public static final Item REINFORCED_LEATHER_TUNIC = new ReinforcedPiece(ArmorType.CHESTPLATE); - public static final Item REINFORCED_LEATHER_TROUSERS = new ReinforcedPiece(ArmorType.LEGGINGS); - public static final Item REINFORCED_LEATHER_BOOTS = new ReinforcedPiece(ArmorType.BOOTS); - - public static final Item GOLDEN_CROWN = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.GOLDEN, 1.0, -0.0125); - public static final Item GOLDEN_GUARD = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.GOLDEN, 3.0, -0.02); - public static final Item GOLDEN_GREAVES = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.GOLDEN, 2.0, -0.02); - public static final Item GOLDEN_SABATONS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.GOLDEN, 1.0, -0.0125); - - public static final Item IRON_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.IRON, 2.0, -0.02); - public static final Item IRON_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.IRON, 6.0, -0.03); - public static final Item IRON_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.IRON, 5.0, -0.03); - public static final Item IRON_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.IRON, 2.0, -0.02); - - public static final Item DIAMOND_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.DIAMOND, 3, -0.02); - public static final Item DIAMOND_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.DIAMOND, 8, -0.03); - public static final Item DIAMOND_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.DIAMOND, 6, -0.03); - public static final Item DIAMOND_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.DIAMOND, 3, -0.02); - - public static final Item NETHERITE_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.NETHERITE, 3.0, -0.02, 3.0, 0.1); - public static final Item NETHERITE_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.NETHERITE, 8.0, -0.02, 3.0, 0.1); - public static final Item NETHERITE_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.NETHERITE, 6.0, -0.02, 3.0, 0.1); - public static final Item NETHERITE_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.NETHERITE, 3.0, -0.02, 3.0, 0.1); - - public static final Item BEEKEEPER_HELMET = new BeekeeperPiece(ArmorType.HELMET); - public static final Item BEEKEEPER_CHESTPLATE = new BeekeeperPiece(ArmorType.CHESTPLATE); - public static final Item BEEKEEPER_LEGGINGS = new BeekeeperPiece(ArmorType.LEGGINGS); - public static final Item BEEKEEPER_BOOTS = new BeekeeperPiece(ArmorType.BOOTS); + public static final ReinforcedPiece REINFORCED_LEATHER_HELMET = new ReinforcedPiece(ArmorType.HELMET); + public static final ReinforcedPiece REINFORCED_LEATHER_TUNIC = new ReinforcedPiece(ArmorType.CHESTPLATE); + public static final ReinforcedPiece REINFORCED_LEATHER_TROUSERS = new ReinforcedPiece(ArmorType.LEGGINGS); + public static final ReinforcedPiece REINFORCED_LEATHER_BOOTS = new ReinforcedPiece(ArmorType.BOOTS); + + public static final ArmorPiece GOLDEN_CROWN = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.GOLDEN, 1.0, -0.0125); + public static final ArmorPiece GOLDEN_GUARD = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.GOLDEN, 3.0, -0.02); + public static final ArmorPiece GOLDEN_GREAVES = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.GOLDEN, 2.0, -0.02); + public static final ArmorPiece GOLDEN_SABATONS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.GOLDEN, 1.0, -0.0125); + + public static final ArmorPiece IRON_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.IRON, 2.0, -0.02); + public static final ArmorPiece IRON_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.IRON, 6.0, -0.03); + public static final ArmorPiece IRON_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.IRON, 5.0, -0.03); + public static final ArmorPiece IRON_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.IRON, 2.0, -0.02); + + public static final ArmorPiece DIAMOND_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.DIAMOND, 3, -0.02); + public static final ArmorPiece DIAMOND_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.DIAMOND, 8, -0.03); + public static final ArmorPiece DIAMOND_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.DIAMOND, 6, -0.03); + public static final ArmorPiece DIAMOND_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.DIAMOND, 3, -0.02); + + public static final ArmorPiece NETHERITE_HELMET = new ArmorPiece(ArmorType.HELMET, ArmorMaterial.NETHERITE, 3.0, -0.02, 3.0, 0.1); + public static final ArmorPiece NETHERITE_CHESTPLATE = new ArmorPiece(ArmorType.CHESTPLATE, ArmorMaterial.NETHERITE, 8.0, -0.02, 3.0, 0.1); + public static final ArmorPiece NETHERITE_LEGGINGS = new ArmorPiece(ArmorType.LEGGINGS, ArmorMaterial.NETHERITE, 6.0, -0.02, 3.0, 0.1); + public static final ArmorPiece NETHERITE_BOOTS = new ArmorPiece(ArmorType.BOOTS, ArmorMaterial.NETHERITE, 3.0, -0.02, 3.0, 0.1); + + public static final BeekeeperPiece BEEKEEPER_HELMET = new BeekeeperPiece(ArmorType.HELMET); + public static final BeekeeperPiece BEEKEEPER_CHESTPLATE = new BeekeeperPiece(ArmorType.CHESTPLATE); + public static final BeekeeperPiece BEEKEEPER_LEGGINGS = new BeekeeperPiece(ArmorType.LEGGINGS); + public static final BeekeeperPiece BEEKEEPER_BOOTS = new BeekeeperPiece(ArmorType.BOOTS); public static final Item SNOW_BOOTS = new SnowBoots(); public static final Item RAIN_BOOTS = new RainBoots(); @@ -137,10 +137,13 @@ public class Items { public static final Water SALTY_WATER = Water.salty(); public static final Water MURKY_WATER = Water.murky(); public static final Water WATER_BOWL = Water.waterBowl(); - public static final Item COFFEE = new Coffee(); - public static final Item HOT_MILK = new HotMilk(); - public static final Item COLD_MILK = new ColdMilk(); + public static final Coffee COFFEE = new Coffee(); + public static final HotMilk HOT_MILK = new HotMilk(); + public static final ColdMilk COLD_MILK = new ColdMilk(); + /** + * Currently null, don't use + */ // TODO Experimental public static final Item PERSISTENT_TORCH = null; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java index 16f0381..72b38ed 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java @@ -81,6 +81,9 @@ public Recipe getRecipe() { return recipe; } + /** + * Types of armor pieces + */ public enum ArmorType { HELMET("helmet", "crown", EquipmentSlotGroup.HEAD, "###", "# #"), CHESTPLATE("chestplate", "guard", EquipmentSlotGroup.CHEST, "# #", "###", "###"), @@ -108,6 +111,9 @@ public EquipmentSlotGroup getSlotGroup() { } } + /** + * Material types of armor pieces + */ public enum ArmorMaterial { LEATHER("leather", null), GOLDEN("golden", ItemType.GOLD_INGOT), diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java new file mode 100644 index 0000000..31916aa --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java @@ -0,0 +1,4 @@ +/** + * Armor {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item.items.armor; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java new file mode 100644 index 0000000..65491a1 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java @@ -0,0 +1,4 @@ +/** + * Block {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item.items.blocks; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java index edf971e..f1b7286 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java @@ -13,6 +13,7 @@ import java.util.List; + @SuppressWarnings("UnstableApiUsage") public class HotMilk extends DrinkItem { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java index 0d903bf..0cf07a5 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java @@ -9,6 +9,9 @@ import java.util.List; +/** + * {@link com.shanebeestudios.survival.item.Item} class for water based drinks + */ @SuppressWarnings("UnstableApiUsage") public class Water extends DrinkItem { @@ -25,6 +28,9 @@ public Water(String key, List effects, ItemStack remainder) { setupDefaults(key, itemStack, effects, remainder); } + /** + * @hidden + */ public static Water dirty() { PotionEffect poison = new PotionEffect(PotionEffectType.POISON, 100, 0); PotionEffect nausea = new PotionEffect(PotionEffectType.NAUSEA, 200, 0); @@ -34,6 +40,9 @@ public static Water dirty() { )); } + /** + * @hidden + */ public static Water salty() { PotionEffect hunger = new PotionEffect(PotionEffectType.HUNGER, 400, 0); PotionEffect nausea = new PotionEffect(PotionEffectType.NAUSEA, 100, 0); @@ -45,6 +54,9 @@ public static Water salty() { )); } + /** + * @hidden + */ public static Water murky() { PotionEffect poison = new PotionEffect(PotionEffectType.POISON, 200, 2); PotionEffect nausea = new PotionEffect(PotionEffectType.NAUSEA, 1000, 0); @@ -58,10 +70,16 @@ public static Water murky() { )); } + /** + * @hidden + */ public static Water clean() { return new Water("clean_water"); } + /** + * @hidden + */ public static Water purified() { PotionEffect health = new PotionEffect(PotionEffectType.HEALTH_BOOST, 100, 2); return new Water("purified_water", List.of( @@ -69,6 +87,9 @@ public static Water purified() { )); } + /** + * @hidden + */ public static Water waterBowl() { return new Water("water_bowl", List.of(), new ItemStack(Material.BOWL)); } diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java new file mode 100644 index 0000000..3d344c8 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java @@ -0,0 +1,4 @@ +/** + * Drinkable {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item.items.drinks; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java new file mode 100644 index 0000000..66554fb --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java @@ -0,0 +1,4 @@ +/** + * Edible {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item.items.food; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java new file mode 100644 index 0000000..75f5885 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java @@ -0,0 +1,4 @@ +/** + * Legendary {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item.items.legendary; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java new file mode 100644 index 0000000..0e32e91 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java @@ -0,0 +1,4 @@ +/** + * Misc {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item.items.misc; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java new file mode 100644 index 0000000..7668a85 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java @@ -0,0 +1,4 @@ +/** + * Tool based {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item.items.tools; diff --git a/src/main/java/com/shanebeestudios/survival/item/package-info.java b/src/main/java/com/shanebeestudios/survival/item/package-info.java new file mode 100644 index 0000000..bdcc47d --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/package-info.java @@ -0,0 +1,4 @@ +/** + * Main package for {@link com.shanebeestudios.survival.item.Item Items} + */ +package com.shanebeestudios.survival.item; diff --git a/src/main/java/com/shanebeestudios/survival/managers/package-info.java b/src/main/java/com/shanebeestudios/survival/managers/package-info.java new file mode 100644 index 0000000..3e55077 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/managers/package-info.java @@ -0,0 +1,4 @@ +/** + * General managers for the plugin + */ +package com.shanebeestudios.survival.managers; diff --git a/src/main/java/com/shanebeestudios/survival/package-info.java b/src/main/java/com/shanebeestudios/survival/package-info.java new file mode 100644 index 0000000..2dcb282 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/package-info.java @@ -0,0 +1,4 @@ +/** + * Main plugin package + */ +package com.shanebeestudios.survival; diff --git a/src/main/java/com/shanebeestudios/survival/util/BlockTags.java b/src/main/java/com/shanebeestudios/survival/util/BlockTags.java index ca21ca8..84c254c 100644 --- a/src/main/java/com/shanebeestudios/survival/util/BlockTags.java +++ b/src/main/java/com/shanebeestudios/survival/util/BlockTags.java @@ -7,27 +7,81 @@ /** * Custom block tags + *

These are created in the `block-tags.yml` file

*/ @SuppressWarnings("unused") public class BlockTags { + private BlockTags() { + } + + private static boolean initialized = false; + + /** + * @hidden + */ public static void initialize() { + if (initialized) { + throw new IllegalStateException("BlockTags already initialized"); + } + initialized = true; } + /** + * Concrete blocks + */ public static Tag CONCRETE = getTag("concrete"); + /** + * Cooking blocks (furnace, smoker, blast furnace) + */ public static Tag COOKING_BLOCK = getTag("cooking_block"); + /** + * Blocks that are farmable + */ public static Tag FARMABLE = getTag("farmable"); + /** + * All glazed terracotta + */ public static Tag GLAZED_TERRACOTTA = getTag("glazed_terracotta"); + /** + * Ores + */ public static Tag ORES = getTag("ores"); + /** + * Blocks from ore blocks (such as diamond block, coal block, iron block) + */ public static Tag ORE_TYPE_BLOCK = getTag("ore_type_block"); + /** + * Blocks that represent stone types + */ public static Tag STONE_TYPE = getTag("stone_type"); + /** + * Blocks that can hold items + */ public static Tag STORAGE_BLOCK = getTag("storage_block"); + /** + * Blocks that a player can utilize + */ public static Tag UTILITY_BLOCK = getTag("utility_block"); - + /** + * Blocks that require an axe to break + */ public static Tag REQUIRES_AXE = getTag("requires_axe"); + /** + * Blocks that require a pickaxe to break + */ public static Tag REQUIRES_PICKAXE = getTag("requires_pickaxe"); + /** + * Blocks that require a shovel to break + */ public static Tag REQUIRES_SHOVEL = getTag("requires_shovel"); + /** + * Blocks that require shears to break + */ public static Tag REQUIRES_SHEARS = getTag("requires_shears"); + /** + * Blocks that require a hammer to build + */ public static Tag REQUIRES_HAMMER = getTag("requires_hammer"); private static Tag getTag(String key) { diff --git a/src/main/java/com/shanebeestudios/survival/util/Utils.java b/src/main/java/com/shanebeestudios/survival/util/Utils.java index 467be3e..9204dff 100644 --- a/src/main/java/com/shanebeestudios/survival/util/Utils.java +++ b/src/main/java/com/shanebeestudios/survival/util/Utils.java @@ -20,6 +20,9 @@ import java.util.List; import java.util.regex.Pattern; +/** + * General utility methods for the plugin + */ @SuppressWarnings({"WeakerAccess", "unused"}) public class Utils { diff --git a/src/main/java/com/shanebeestudios/survival/util/package-info.java b/src/main/java/com/shanebeestudios/survival/util/package-info.java new file mode 100644 index 0000000..478554b --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/util/package-info.java @@ -0,0 +1,4 @@ +/** + * General utility classes + */ +package com.shanebeestudios.survival.util; From 15a7f607cf72a226ef111fbe23a60d7ca6798d90 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 18:07:57 -0800 Subject: [PATCH 074/133] Validate.java - remove --- .../survival/data/HealthBoard.java | 5 ++--- .../shanebeestudios/survival/util/Validate.java | 16 ---------------- 2 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/util/Validate.java diff --git a/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java b/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java index e7ca6e2..8d622cf 100644 --- a/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java +++ b/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.data; +import com.google.common.base.Preconditions; import fr.mrmicky.fastboard.adventure.FastBoard; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -7,7 +8,6 @@ import org.bukkit.entity.Player; import org.bukkit.scoreboard.Scoreboard; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.util.Validate; import java.util.ArrayList; import java.util.List; @@ -58,7 +58,7 @@ public void setLine(int line, @Nullable String text) { } public void setLine(int line, @Nullable String text, String format) { - Validate.isBetween(line, 1, 15); + Preconditions.checkArgument(line >= 1 && line <= 15, "Line number must be between 1 and 15, found: " + line); if (text != null) { Component component = MINI_MESSAGE.deserialize(text); this.lines[line - 1] = component; @@ -80,7 +80,6 @@ public void setLine(int line, @Nullable String text, String format) { * @param line Line to delete (1 - 15) */ public void deleteLine(int line) { - Validate.isBetween(line, 1, 15); setLine(line, null); } diff --git a/src/main/java/com/shanebeestudios/survival/util/Validate.java b/src/main/java/com/shanebeestudios/survival/util/Validate.java deleted file mode 100644 index e81679c..0000000 --- a/src/main/java/com/shanebeestudios/survival/util/Validate.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.shanebeestudios.survival.util; - -public abstract class Validate { - - /** - * Validate if a value is between a min and max value - * - * @param value Value to validate - * @param min Min value amount - * @param max Max value amount - */ - public static void isBetween(int value, int min, int max) { - // - } - -} From 781fac2bedd379aa66e405bc32c6106a16568ae2 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 18:41:32 -0800 Subject: [PATCH 075/133] paper-plugin.yml --- src/main/resources/paper-plugin.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index 3937fc1..566d1d0 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -1,10 +1,10 @@ name: SurvivalPlus version: '${version}' -main: tk.shanebee.survival.SurvivalPlugin +main: com.shanebeestudios.survival.SurvivalPlugin description: "A fun new way to change mechanics of Minecraft" authors: [ShaneBee] website: 'https://github.com/ShaneBeeStudios/SurvivalPlus' -bootstrapper: tk.shanebee.survival.SurvivalBootstrap +bootstrapper: com.shanebeestudios.survival.SurvivalBootstrap api-version: '1.21.4' dependencies: server: From 01e58d0071b371fb551f3c2e68ef6a2b40ab0c3e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 18:43:08 -0800 Subject: [PATCH 076/133] build.gradle.kts - fix bstats shading --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6173550..b1b8a87 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -86,7 +86,7 @@ tasks { shadowJar { relocate("fr.mrmicky.fastboard", "com.shanebeestudios.survival.api.fastboard") relocate("dev.jorel.commandapi", "com.shanebeestudios.survival.api.commandapi") - relocate("org.bstats.bukkit", "com.shanebeestudios.survival.api.metrics.bstats") + relocate("org.bstats", "com.shanebeestudios.survival.api.metrics.bstats") archiveFileName = "SurvivalPlus-${projectVersion}.jar" } jar { From 76ffa6856c63d6b7768ed1eee05d0f49a4a8b1f5 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 18:48:23 -0800 Subject: [PATCH 077/133] Placeholders - small rework --- .../survival/SurvivalPlugin.java | 4 +- .../survival/commands/DebugCommand.java | 13 +- .../survival/data/Placeholders.java | 44 ++++++ .../survival/managers/PapiPlaceholders.java | 125 ++++++++++++++++++ .../survival/managers/Placeholders.java | 120 ----------------- 5 files changed, 180 insertions(+), 126 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/data/Placeholders.java create mode 100644 src/main/java/com/shanebeestudios/survival/managers/PapiPlaceholders.java delete mode 100644 src/main/java/com/shanebeestudios/survival/managers/Placeholders.java diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index d005973..f37d177 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -26,7 +26,7 @@ import com.shanebeestudios.survival.managers.BlockManager; import com.shanebeestudios.survival.managers.EffectManager; import com.shanebeestudios.survival.managers.MerchantManager; -import com.shanebeestudios.survival.managers.Placeholders; +import com.shanebeestudios.survival.managers.PapiPlaceholders; import com.shanebeestudios.survival.managers.PlayerManager; import com.shanebeestudios.survival.managers.RecipeManager; import com.shanebeestudios.survival.managers.ScoreBoardManager; @@ -154,7 +154,7 @@ public void onEnable() { // LOAD PLACEHOLDERS if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { - new Placeholders(this).register(); + new PapiPlaceholders(this).register(); Utils.logMini("PlaceholderAPI placeholders enabled"); } diff --git a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java index 7c3039a..29bf6e2 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java @@ -1,11 +1,12 @@ package com.shanebeestudios.survival.commands; -import dev.jorel.commandapi.CommandPermission; -import dev.jorel.commandapi.arguments.Argument; -import dev.jorel.commandapi.arguments.LiteralArgument; import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.Placeholders; import com.shanebeestudios.survival.item.Items; import com.shanebeestudios.survival.item.Nutrition; +import dev.jorel.commandapi.CommandPermission; +import dev.jorel.commandapi.arguments.Argument; +import dev.jorel.commandapi.arguments.LiteralArgument; public class DebugCommand extends BaseCommand{ public DebugCommand(SurvivalPlugin plugin) { @@ -28,7 +29,11 @@ Argument register() { .then(LiteralArgument.literal("remove") .executes(info -> { Items.debug(null); - }))); + }))) + .then(LiteralArgument.literal("placeholders") + .executes(info -> { + Placeholders.debug(); + })); } } diff --git a/src/main/java/com/shanebeestudios/survival/data/Placeholders.java b/src/main/java/com/shanebeestudios/survival/data/Placeholders.java new file mode 100644 index 0000000..89abf4b --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/data/Placeholders.java @@ -0,0 +1,44 @@ +package com.shanebeestudios.survival.data; + +import com.shanebeestudios.survival.util.Utils; + +public enum Placeholders { + PLAYER_HEALTH("player_health", "Player's health"), + PLAYER_HUNGER("player_hunger", "Player's hunger"), + PLAYER_SATURATION("player_saturation", "Player's saturation"), + PLAYER_HUNGER_TOTAL("player_hunger_total", "Player's total hunger (including saturation)"), + PLAYER_HUNGER_BAR_1("player_hunger_bar_1", "Shows player's hunger bar (hunger part)"), + PLAYER_HUNGER_BAR_2("player_hunger_bar_2", "Shows player's hunger bar (saturation part)"), + PLAYER_THIRST("player_thirst", "Player's thirst"), + PLAYER_THIRST_BAR_1("player_thirst_bar_1", "Shows player's thirst bar (top part - first half out of 40)"), + PLAYER_THIRST_BAR_2("player_thirst_bar_2", "Shows player's thirst bar (bottom part - second half out of 40)"), + PLAYER_ENERGY("player_energy", "Player's energy"), + PLAYER_ENERGY_BAR("player_energy_bar", "Shows player's energy bar"), + PLAYER_NUTRIENTS_CARBS("player_nutrients_carbs", "Player's nutrients carbs"), + PLAYER_NUTRIENTS_PROTEINS("player_nutrients_proteins", "Player's nutrients proteins"), + PLAYER_NUTRIENTS_VITAMINS("player_nutrients_vitamins", "Player's nutrients vitamins"), + PLAYER_NUTRIENTS_CARBS_BAR("player_nutrients_carbs_bar", "Shows player's nutrients carbs bar"), + PLAYER_NUTRIENTS_PROTEINS_BAR("player_nutrients_proteins_bar", "Shows player's nutrients proteins bar"), + PLAYER_NUTRIENTS_VITAMINS_BAR("player_nutrients_vitamins_bar", "Shows player's nutrients vitamins bar"), + ; + + private final String key; + private final String description; + + Placeholders(String key, String description) { + this.key = key; + this.description = description; + } + + public boolean is(String identifier) { + return identifier.equalsIgnoreCase(this.key); + } + + public static void debug() { + Utils.logMini("PAPI Placeholders:"); + for (Placeholders value : Placeholders.values()) { + Utils.logMini(" - 'survival_plus_%s' = '%s'", value.key, value.description); + } + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/managers/PapiPlaceholders.java b/src/main/java/com/shanebeestudios/survival/managers/PapiPlaceholders.java new file mode 100644 index 0000000..4b08a09 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/managers/PapiPlaceholders.java @@ -0,0 +1,125 @@ +package com.shanebeestudios.survival.managers; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.Placeholders; +import com.shanebeestudios.survival.data.Nutrient; +import com.shanebeestudios.survival.data.PlayerData; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +@SuppressWarnings({"unused", "UnstableApiUsage"}) +public class PapiPlaceholders extends PlaceholderExpansion { + + private final SurvivalPlugin plugin; + private final PlayerManager playerManager; + + public PapiPlaceholders(SurvivalPlugin plugin) { + this.plugin = plugin; + this.playerManager = plugin.getPlayerManager(); + } + + @Override + public boolean persist() { + return true; + } + + @Override + public boolean canRegister() { + return true; + } + + @Override + public @NotNull String getIdentifier() { + return "survival_plus"; + } + + @Override + public @NotNull String getAuthor() { + return plugin.getPluginMeta().getAuthors().toString(); + } + + @Override + public @NotNull String getVersion() { + return plugin.getPluginMeta().getVersion(); + } + + @Override + public String onPlaceholderRequest(Player player, @NotNull String identifier) { + PlayerData playerData = playerManager.getPlayerData(player); + + // Shows player's health, kinda useless but here it is + if (Placeholders.PLAYER_HEALTH.is(identifier)) { + return String.format("%.2f", player.getHealth()); + } + // Shows a player's total hunger (including saturation) + if (Placeholders.PLAYER_HUNGER_TOTAL.is(identifier)) { + return String.valueOf(player.getFoodLevel() + player.getSaturation()); + } + // Shows player's hunger + if (Placeholders.PLAYER_HUNGER.is(identifier)) { + return String.valueOf(player.getFoodLevel()); + } + // Shows player's saturation + if (Placeholders.PLAYER_SATURATION.is(identifier)) { + return String.valueOf(player.getSaturation()); + } + // Shows player's hunger bar (hunger part) + if (Placeholders.PLAYER_HUNGER_BAR_1.is(identifier)) { + return this.playerManager.getHungerVisual(player).get(1); + } + // Shows player's hunger bar (saturation part) + if (Placeholders.PLAYER_HUNGER_BAR_2.is(identifier)) { + return this.playerManager.getHungerVisual(player).get(2); + } + // Shows player's thirst + if (Placeholders.PLAYER_THIRST.is(identifier)) { + return String.valueOf(playerData.getThirst()); + } + // Shows player's thirst bar (top part - first half out of 40) + if (Placeholders.PLAYER_THIRST_BAR_1.is(identifier)) { + return this.playerManager.getThirstVisual(player).get(1); + } + // Shows player's thirst bar (bottom part - second half out of 40) + if (Placeholders.PLAYER_THIRST_BAR_2.is(identifier)) { + return this.playerManager.getThirstVisual(player).get(2); + } + // Shows player's energy level (as a number) + if (Placeholders.PLAYER_ENERGY.is(identifier)) { + return String.format("%.2f", playerData.getEnergy()); + } + // Shows player's energy level (as a colored bar) + if (Placeholders.PLAYER_ENERGY_BAR.is(identifier)) { + return this.playerManager.getEnergyVisual(player).get(1); + } + + // Shows player's nutrients bars ( ) + if (Placeholders.PLAYER_NUTRIENTS_CARBS_BAR.is(identifier)) { + List nutrientsVisual = this.playerManager.getNutrientsVisual(player); + return nutrientsVisual.get(0) + " " + nutrientsVisual.get(3); + } + if (Placeholders.PLAYER_NUTRIENTS_PROTEINS_BAR.is(identifier)) { + List nutrientsVisual = this.playerManager.getNutrientsVisual(player); + return nutrientsVisual.get(1) + " " + nutrientsVisual.get(4); + } + if (Placeholders.PLAYER_NUTRIENTS_VITAMINS_BAR.is(identifier)) { + List nutrientsVisual = this.playerManager.getNutrientsVisual(player); + return nutrientsVisual.get(2) + " " + nutrientsVisual.get(5); + } + + // Shows player's nutrients (just the ) + if (Placeholders.PLAYER_NUTRIENTS_CARBS.is(identifier)) { + return String.valueOf(playerData.getNutrient(Nutrient.CARBS)); + } + if (Placeholders.PLAYER_NUTRIENTS_PROTEINS.is(identifier)) { + return String.valueOf(playerData.getNutrient(Nutrient.PROTEIN)); + } + if (Placeholders.PLAYER_NUTRIENTS_VITAMINS.is(identifier)) { + return String.valueOf(playerData.getNutrient(Nutrient.VITAMINS)); + } + return null; + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/managers/Placeholders.java b/src/main/java/com/shanebeestudios/survival/managers/Placeholders.java deleted file mode 100644 index 2886e6c..0000000 --- a/src/main/java/com/shanebeestudios/survival/managers/Placeholders.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.shanebeestudios.survival.managers; - -import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.data.PlayerData; - -@SuppressWarnings("unused") -public class Placeholders extends PlaceholderExpansion { - - private final SurvivalPlugin plugin; - private final PlayerManager playerManager; - - public Placeholders(SurvivalPlugin plugin) { - this.plugin = plugin; - this.playerManager = plugin.getPlayerManager(); - } - - @Override - public boolean persist() { - return true; - } - - @Override - public boolean canRegister() { - return true; - } - - @Override - public String getIdentifier() { - return "survivalplus"; - } - - @Override - public String getAuthor() { - return plugin.getDescription().getAuthors().toString(); - } - - @Override - public String getVersion() { - return plugin.getDescription().getVersion(); - } - - @Override - public String onPlaceholderRequest(Player p, String identifier) { - PlayerData playerData = playerManager.getPlayerData(p); - - // Shows player's health, kinda useless but here it is - if (identifier.equalsIgnoreCase("player_health")) { - return String.format("%.2f", p.getHealth()); - } - // Shows a player's total hunger (including saturation) - if (identifier.equalsIgnoreCase("player_hunger_total")) { - return String.valueOf(p.getFoodLevel() + p.getSaturation()); - } - // Shows player's hunger - if (identifier.equalsIgnoreCase("player_hunger")) { - return String.valueOf(p.getFoodLevel()); - } - // Shows player's saturation - if (identifier.equalsIgnoreCase("player_saturation")) { - return String.valueOf(p.getSaturation()); - } - // Shows player's hunger bar (hunger part) - if (identifier.equalsIgnoreCase("player_hunger_bar_1")) { - return playerManager.getHungerVisual(p).get(1); - } - // Shows player's hunger bar (saturation part) - if (identifier.equalsIgnoreCase("player_hunger_bar_2")) { - return playerManager.getHungerVisual(p).get(2); - } - // Shows player's thirst - if (identifier.equalsIgnoreCase("player_thirst")) { - return String.valueOf(playerData.getThirst()); - } - // Shows player's thirst bar (top part - first half out of 40) - if (identifier.equalsIgnoreCase("player_thirst_bar_1")) { - return playerManager.getThirstVisual(p).get(1); - } - // Shows player's thirst bar (bottom part - second half out of 40) - if (identifier.equalsIgnoreCase("player_thirst_bar_2")) { - return playerManager.getThirstVisual(p).get(2); - } - // Shows player's fatigue // Deprecated - if (identifier.equalsIgnoreCase("player_fatigue")) { - return "0"; // removed - } - // Shows player's energy level (as a number) - if (identifier.equalsIgnoreCase("player_energy")) { - return String.format("%.2f", playerData.getEnergy()); - } - // Shows player's energy level (as a colored bar) - if (identifier.equalsIgnoreCase("player_energy_bar")) { - return playerManager.getEnergyVisual(p).get(1); - } - // Shows player's nutrients bars ( ) - if (identifier.equalsIgnoreCase("player_nutrients_carbs_bar")) { - return playerManager.getNutrientsVisual(p).get(0); - } - if (identifier.equalsIgnoreCase("player_nutrients_proteins_bar")) { - return playerManager.getNutrientsVisual(p).get(1); - } - if (identifier.equalsIgnoreCase("player_nutrients_salts_bar")) { - return playerManager.getNutrientsVisual(p).get(2); - } - // Shows player's nutrients (just the ) - if (identifier.equalsIgnoreCase("player_nutrients_carbs")) { - return String.valueOf(playerData.getNutrient(Nutrient.CARBS)); - } - if (identifier.equalsIgnoreCase("player_nutrients_proteins")) { - return String.valueOf(playerData.getNutrient(Nutrient.PROTEIN)); - } - if (identifier.equalsIgnoreCase("player_nutrients_salts")) { - return String.valueOf(playerData.getNutrient(Nutrient.VITAMINS)); - } - return null; - } - -} From b7a8cc56f327544719bf56f1db5f108e9e966f24 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 19:27:24 -0800 Subject: [PATCH 078/133] Permissions - small changes, add debug --- .../survival/commands/DataGenCommand.java | 1 + .../survival/commands/DebugCommand.java | 13 +++-- .../survival/commands/Permissions.java | 48 +++++++++++++++---- .../survival/commands/StatCommand.java | 1 + 4 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java b/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java index d0be52b..040ac96 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java @@ -18,6 +18,7 @@ public DataGenCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("datagen") + .withPermission(Permissions.COMMAND_DATA_GEN) .executes(info -> { this.blockTagFileGenerator.generateBlockTags(this.plugin.getDataFolder(), "generated/block-tags.yml"); Utils.sendColoredMini(info.sender(), "Finished generating block-tags.yml"); diff --git a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java index 29bf6e2..8e1751a 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java @@ -4,7 +4,6 @@ import com.shanebeestudios.survival.data.Placeholders; import com.shanebeestudios.survival.item.Items; import com.shanebeestudios.survival.item.Nutrition; -import dev.jorel.commandapi.CommandPermission; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; @@ -16,9 +15,9 @@ public DebugCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("debug") - .withPermission(CommandPermission.OP) + .withPermission(Permissions.COMMAND_DEBUG) .then(LiteralArgument.literal("nutrition") - .executes(info -> { + .executesConsole(info -> { Nutrition.debug(); })) .then(LiteralArgument.literal("items") @@ -27,12 +26,16 @@ Argument register() { Items.debug(info.sender()); })) .then(LiteralArgument.literal("remove") - .executes(info -> { + .executesPlayer(info -> { Items.debug(null); }))) .then(LiteralArgument.literal("placeholders") - .executes(info -> { + .executesConsole(info -> { Placeholders.debug(); + })) + .then(LiteralArgument.literal("permissions") + .executesConsole(info -> { + Permissions.debug(); })); } diff --git a/src/main/java/com/shanebeestudios/survival/commands/Permissions.java b/src/main/java/com/shanebeestudios/survival/commands/Permissions.java index 9cd47df..8c8f0b7 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/Permissions.java +++ b/src/main/java/com/shanebeestudios/survival/commands/Permissions.java @@ -1,17 +1,47 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.util.Utils; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; +import org.bukkit.util.permissions.DefaultPermissions; + +import java.util.LinkedHashMap; +import java.util.Map; + public class Permissions { - static final String COMMAND_CHAT = getCommand("chat"); - static final String COMMAND_GIVEITEM = getCommand("giveitem"); - static final String COMMAND_HEAL = getCommand("heal"); - static final String COMMAND_HEAL_OTHERS = getCommand("heal.others"); - static final String COMMAND_NUTRITION = getCommand("nutrition"); - static final String COMMAND_RELOAD = getCommand("reload"); - static final String COMMAND_PLAYERDATA = getCommand("playerdata"); + static final Map PERMISSIONS = new LinkedHashMap<>(); + + static final String COMMAND_CHAT = getCommand("chat", "Toggle global/local chat", PermissionDefault.TRUE); + static final String COMMAND_DATA_GEN = getCommand("datagen", "Generate stuff for configs, should not be used", PermissionDefault.OP); + static final String COMMAND_DEBUG = getCommand("debug", "Debug some internal things", PermissionDefault.OP); + static final String COMMAND_GIVEITEM = getCommand("giveitem", "Give a custom item", PermissionDefault.OP); + static final String COMMAND_HEAL = getCommand("heal", "Heal self", PermissionDefault.OP); + static final String COMMAND_HEAL_OTHERS = getCommand("heal.others", "Heal others", PermissionDefault.OP); + static final String COMMAND_NUTRITION = getCommand("nutrition", "Open nutrition GUI", PermissionDefault.TRUE); + static final String COMMAND_PLAYERDATA = getCommand("playerdata", "Adjust player data", PermissionDefault.OP); + static final String COMMAND_RELOAD = getCommand("reload", "Reload config files", PermissionDefault.OP); + static final String COMMAND_STATS = getCommand("stats", "Toggle stats", PermissionDefault.TRUE); + + private static String getCommand(String perm, String description, PermissionDefault defaultPermission) { + String stringPerm = "survivalplus.command." + perm; + Permission permission = DefaultPermissions.registerPermission(stringPerm, description, defaultPermission); + PERMISSIONS.put(stringPerm, permission); + return stringPerm; + } - private static String getCommand(String permission) { - return "survivalplus.command." + permission; + public static void debug() { + Utils.logMini("Permissions:"); + for (Map.Entry entry : PERMISSIONS.entrySet()) { + String color = switch (entry.getValue().getDefault()) { + case OP -> "yellow"; + case TRUE, NOT_OP -> "green"; + case FALSE -> "red"; + }; + Utils.logMini(" '<#F09616>%s':", entry.getKey()); + Utils.logMini(" Description: %s", entry.getValue().getDescription()); + Utils.logMini(" Default: <%s>%s", color, entry.getValue().getDefault().toString()); + } } } diff --git a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java index d8b7531..7ef996a 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java @@ -51,6 +51,7 @@ public StatCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("stats") + .withPermission(Permissions.COMMAND_STATS) .then(new StringArgument("info") .includeSuggestions(ArgumentSuggestions.stringsWithTooltips(this.infoTooltips)) .then(new StringArgument("type") From bf1858e11fd4b1df27521e04d398f9e3dc4ca312 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 19:39:29 -0800 Subject: [PATCH 079/133] BurnoutTorches.java - remove --- .../survival/SurvivalPlugin.java | 10 - .../survival/config/Config.java | 12 - .../survival/listeners/EventManager.java | 3 - .../listeners/block/BurnoutTorches.java | 220 ------------------ .../survival/managers/BlockManager.java | 186 --------------- src/main/resources/config.yml | 13 -- src/main/resources/data.yml | 2 - 7 files changed, 446 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/listeners/block/BurnoutTorches.java delete mode 100644 src/main/java/com/shanebeestudios/survival/managers/BlockManager.java delete mode 100644 src/main/resources/data.yml diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index f37d177..0fa267a 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -23,7 +23,6 @@ import com.shanebeestudios.survival.config.PlayerDataConfig; import com.shanebeestudios.survival.data.PlayerData; import com.shanebeestudios.survival.listeners.EventManager; -import com.shanebeestudios.survival.managers.BlockManager; import com.shanebeestudios.survival.managers.EffectManager; import com.shanebeestudios.survival.managers.MerchantManager; import com.shanebeestudios.survival.managers.PapiPlaceholders; @@ -59,7 +58,6 @@ public class SurvivalPlugin extends JavaPlugin implements Listener { private PlayerDataConfig playerDataConfig; // Managers - private BlockManager blockManager; private EffectManager effectManager; private ScoreBoardManager scoreBoardManager; private PlayerManager playerManager; @@ -140,7 +138,6 @@ public void onEnable() { // LOAD MANAGERS BlockTags.initialize(); - blockManager = new BlockManager(this); playerManager = new PlayerManager(this, playerDataMap); effectManager = new EffectManager(this); taskManager = new TaskManager(this); @@ -299,13 +296,6 @@ public static SurvivalPlugin getInstance() { return instance; } - /** Get the block manager - * @return Instance of the block manager - */ - public BlockManager getBlockManager() { - return this.blockManager; - } - /** Get the effect manager * @return Instance of the effect manager */ diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index 160253c..a830d49 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -153,12 +153,6 @@ public class Config { public int mechanics_chairs_max_width; public List mechanics_chairs_blocks; - public boolean MECHANICS_BURNOUT_TORCH_ENABLED; - public int MECHANICS_BURNOUT_TORCH_TIME; - public boolean MECHANICS_BURNOUT_TORCH_RELIGHT; - public boolean MECHANICS_BURNOUT_TORCH_DROP; - public boolean MECHANICS_BURNOUT_TORCH_PERSIST; - public boolean mechanics_weather_enabled; public double mechanics_weather_speed_base; public double mechanics_weather_speed_rain; @@ -409,12 +403,6 @@ private void loadSettings() { this.mechanics_chairs_max_width = settings.getInt("Mechanics.Chairs.MaxChairWidth"); this.mechanics_chairs_blocks = getChairBlocks(); - this.MECHANICS_BURNOUT_TORCH_ENABLED = settings.getBoolean("Mechanics.BurnoutTorches.Enabled"); - this.MECHANICS_BURNOUT_TORCH_TIME = settings.getInt("Mechanics.BurnoutTorches.BurnoutTime"); - this.MECHANICS_BURNOUT_TORCH_RELIGHT = settings.getBoolean("Mechanics.BurnoutTorches.Relightable"); - this.MECHANICS_BURNOUT_TORCH_DROP = settings.getBoolean("Mechanics.BurnoutTorches.DropTorch"); - this.MECHANICS_BURNOUT_TORCH_PERSIST = settings.getBoolean("Mechanics.BurnoutTorches.PersistentTorches"); - this.mechanics_weather_enabled = settings.getBoolean("Mechanics.Weather.Enabled"); this.mechanics_weather_speed_base = settings.getDouble("Mechanics.Weather.speed.base"); this.mechanics_weather_speed_rain = settings.getDouble("Mechanics.Weather.speed.rain"); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 330f74a..0ac818c 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -6,7 +6,6 @@ import com.shanebeestudios.survival.config.Config; import com.shanebeestudios.survival.listeners.block.BlockBreak; import com.shanebeestudios.survival.listeners.block.BlockPlace; -import com.shanebeestudios.survival.listeners.block.BurnoutTorches; import com.shanebeestudios.survival.listeners.block.Campfire; import com.shanebeestudios.survival.listeners.block.Chairs; import com.shanebeestudios.survival.listeners.block.SnowGeneration; @@ -138,8 +137,6 @@ public void registerEvents() { pm.registerEvents(new ChickenSpawn(this.plugin), this.plugin); if (config.welcome_guide_enabled) pm.registerEvents(new Guide(plugin), this.plugin); - if (config.MECHANICS_BURNOUT_TORCH_ENABLED) // TODO experimental feature, not 100% sure about this - pm.registerEvents(new BurnoutTorches(this.plugin), this.plugin); if (config.entity_mechanics_pigmen_chest_enabled) pm.registerEvents(new ChestPigmen(this.plugin), this.plugin); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BurnoutTorches.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BurnoutTorches.java deleted file mode 100644 index a303196..0000000 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BurnoutTorches.java +++ /dev/null @@ -1,220 +0,0 @@ -package com.shanebeestudios.survival.listeners.block; - -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.Directional; -import org.bukkit.block.data.Lightable; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPhysicsEvent; -import org.bukkit.event.block.BlockPistonExtendEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.BlockManager; -import com.shanebeestudios.survival.util.ItemUtils; - -import java.util.Random; - -public class BurnoutTorches implements Listener { - - // TODO Experimental Feature - - private final boolean RELIGHTABLE; - private final boolean PERSISTENT_TORCHES; - private final boolean DROP_TORCH; - - private final BlockManager torchManager; - - public BurnoutTorches(SurvivalPlugin plugin) { - this.torchManager = plugin.getBlockManager(); - this.RELIGHTABLE = plugin.getSurvivalConfig().MECHANICS_BURNOUT_TORCH_RELIGHT; - this.PERSISTENT_TORCHES = plugin.getSurvivalConfig().MECHANICS_BURNOUT_TORCH_PERSIST; - this.DROP_TORCH = plugin.getSurvivalConfig().MECHANICS_BURNOUT_TORCH_DROP; - } - - @EventHandler - private void onBlockUpdate(BlockPhysicsEvent e) { - Block block = e.getBlock(); - if (block.getType() == Material.REDSTONE_TORCH || block.getType() == Material.REDSTONE_WALL_TORCH) { - if (torchManager.isNonPersistent(block) && !((Lightable) block.getBlockData()).isLit()) { - e.setCancelled(true); - } - } - } - - @EventHandler - private void onRelight(PlayerInteractEvent e) { - if (!RELIGHTABLE) return; - Player player = e.getPlayer(); - ItemStack tool = player.getInventory().getItemInMainHand(); - Block block = e.getClickedBlock(); - if (block == null || (block.getType() != Material.REDSTONE_TORCH && block.getType() != Material.REDSTONE_WALL_TORCH)) - return; - if (!torchManager.isNonPersistent(block)) return; - if (tool.getType() != Material.FLINT_AND_STEEL && !Items.FIRESTRIKER.is(tool)) return; - if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; - e.setCancelled(true); - if (block.getType() == Material.REDSTONE_WALL_TORCH) { - BlockFace face = ((Directional) block.getBlockData()).getFacing(); - block.setType(Material.WALL_TORCH); - Directional dir = ((Directional) block.getBlockData()); - dir.setFacing(face); - block.setBlockData(dir); - } else { - block.setType(Material.TORCH); - } - Random rand = new Random(); - Location loc = block.getLocation(); - assert loc.getWorld() != null; - loc.getWorld().playSound(loc, Sound.ITEM_FLINTANDSTEEL_USE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - - if ((ItemUtils.getDurability(tool) + 1) < tool.getType().getMaxDurability()) - ItemUtils.setDurability(tool, ItemUtils.getDurability(tool) + 1); - else { - player.getInventory().setItemInMainHand(null); - assert player.getLocation().getWorld() != null; - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - } - torchManager.setNonPersistent(block); - torchManager.burnoutTorch(block); - } - - @EventHandler(priority = EventPriority.HIGH) - private void onPlaceTorch(BlockPlaceEvent e) { - if (e.isCancelled()) { // If another plugin cancels these, lets get outta here - return; - } - Block block = e.getBlock(); - ItemStack mainHand = e.getItemInHand(); - GameMode mode = e.getPlayer().getGameMode(); - if (mode != GameMode.SURVIVAL && mode != GameMode.ADVENTURE) { - return; - } - if (block.getType() == Material.TORCH || block.getType() == Material.WALL_TORCH) { - if (!Items.PERSISTENT_TORCH.is(mainHand)) { - torchManager.burnoutTorch(block); - torchManager.setNonPersistent(block); - } - } - } - - @EventHandler(priority = EventPriority.HIGH) - private void onBreakTorch(BlockBreakEvent e) { - if (e.isCancelled()) { // If another plugin cancels these, lets get outta here - return; - } - Block block = e.getBlock(); - Location loc = e.getBlock().getLocation(); - GameMode mode = e.getPlayer().getGameMode(); - assert loc.getWorld() != null; - /* - if (block.getType() == Material.REDSTONE_WALL_TORCH || block.getType() == Material.REDSTONE_TORCH) { - if (((Lightable) block.getBlockData()).isLit()) return; - e.setDropItems(false); - loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.STICK)); - torchManager.unsetNonPersistent(block); - } else if (block.getType() == Material.TORCH || block.getType() == Material.WALL_TORCH) { - if (PERSISTENT_TORCHES && !torchManager.isNonPersistent(block)) { - e.setDropItems(false); - loc.getWorld().dropItemNaturally(loc, ItemManager.get(Items.PERSISTENT_TORCH)); - } else { - torchManager.unsetNonPersistent(block); - if (!DROP_TORCH) { - e.setDropItems(false); - loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.STICK)); - } - } - } else { - for (BlockFace blockFace : BlockFace.values()) { - Block relative = block.getRelative(blockFace); - if (torchManager.isNonPersistent(relative)) { - relative.setType(Material.AIR); - dropTorch(relative); - } - } - } - */ - switch (block.getType()) { - case TORCH: - case WALL_TORCH: - case REDSTONE_TORCH: - case REDSTONE_WALL_TORCH: - if (mode != GameMode.SURVIVAL && mode != GameMode.ADVENTURE) { - if (torchManager.isNonPersistent(block)) { - torchManager.unsetNonPersistent(block); - } - return; - } - if (dropTorch(block)) { - e.setDropItems(false); - } - return; - default: - for (BlockFace blockFace : BlockFace.values()) { - Block relative = block.getRelative(blockFace); - if (torchManager.isNonPersistent(relative)) { - if (mode != GameMode.SURVIVAL && mode != GameMode.ADVENTURE) { - torchManager.unsetNonPersistent(relative); - continue; - } - if (dropTorch(relative)) { - relative.setType(Material.AIR); - } - } - } - } - } - - @EventHandler(priority = EventPriority.HIGH) - private void pistonExtend(BlockPistonExtendEvent event) { - if (event.isCancelled()) { - return; - } - for (Block block : event.getBlocks()) { - if (dropTorch(block)) { - block.setType(Material.AIR); - } - } - } - - private boolean dropTorch(Block block) { - Location loc = block.getLocation(); - World world = loc.getWorld(); - if (world == null) return false; - Material mat = block.getType(); - if (mat == Material.TORCH || mat == Material.WALL_TORCH) { - if (PERSISTENT_TORCHES && !torchManager.isNonPersistent(block)) { - world.dropItemNaturally(loc, Items.PERSISTENT_TORCH.getItemStack()); - } else if (DROP_TORCH) { - return false; - } else { - world.dropItemNaturally(loc, new ItemStack(Material.STICK)); - } - } else if (mat == Material.REDSTONE_TORCH || mat == Material.REDSTONE_WALL_TORCH) { - if (torchManager.isNonPersistent(block)) { - world.dropItemNaturally(loc, new ItemStack(Material.STICK)); - } else { - return false; - } - } else { - return false; - } - if (torchManager.isNonPersistent(block)) { - torchManager.unsetNonPersistent(block); - } - return true; - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/managers/BlockManager.java b/src/main/java/com/shanebeestudios/survival/managers/BlockManager.java deleted file mode 100644 index c449e08..0000000 --- a/src/main/java/com/shanebeestudios/survival/managers/BlockManager.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.shanebeestudios.survival.managers; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; -import org.bukkit.block.data.Directional; -import org.bukkit.block.data.Lightable; -import org.bukkit.command.CommandSender; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.util.Utils; - -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.Objects; - -public class BlockManager { - - private final SurvivalPlugin plugin; - private FileConfiguration data; - private File data_file; - private final Lang lang; - - private final int seconds; - - public BlockManager(SurvivalPlugin plugin) { - this.plugin = plugin; - this.lang = plugin.getLang(); - this.seconds = plugin.getSurvivalConfig().MECHANICS_BURNOUT_TORCH_TIME; - loadDataFile(plugin.getServer().getConsoleSender()); - toBurnout(); - } - - /** Sets a torch to burn out after a preset time (in config) - * @param block The torch to burn out - */ - public void burnoutTorch(Block block) { - burnoutTorch(block, seconds); - } - - /** - * Sets a torch to burn out after x seconds - * - * @param seconds The time to wait for burnout in seconds - * @param block The torch to burn out - */ - @SuppressWarnings("WeakerAccess") - public void burnoutTorch(Block block, int seconds) { - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - BlockData data = block.getBlockData(); - if (data.getMaterial() == Material.TORCH) - data = Material.REDSTONE_TORCH.createBlockData(); - else if (data.getMaterial() == Material.WALL_TORCH) { - BlockFace face = ((Directional) data).getFacing(); - data = Material.REDSTONE_WALL_TORCH.createBlockData(); - ((Directional) data).setFacing(face); - } else { - if (isNonPersistent(block)) - unsetNonPersistent(block); - return; - } - ((Lightable) data).setLit(false); - block.setBlockData(data); - }, 20L * seconds); - } - - private void loadDataFile(CommandSender sender) { - String loaded; - data_file = new File(plugin.getDataFolder(), "data.yml"); - if (!data_file.exists()) { - plugin.saveResource("data.yml", true); - loaded = "New data.yml created"; - } else { - loaded = "data.yml loaded"; - } - data = YamlConfiguration.loadConfiguration(data_file); - Utils.sendColoredMini(sender, lang.prefix + loaded); - } - - /** - * Adds a non-persistent torch to the data.yml file - * - * @param block The torch to make non-persistent - */ - public void setNonPersistent(Block block) { - List list = data.getStringList("NonPersistent Torches"); - long time = System.currentTimeMillis(); - time = time + (1000L * seconds); - list.add(locToString(block.getLocation()) + " time:" + time); - data.set("NonPersistent Torches", list); - try { - data.save(data_file); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Removes a non-persistent torch from the data.yml file - * - * @param block The torch to remove as non persistent - */ - public void unsetNonPersistent(Block block) { - List list = data.getStringList("NonPersistent Torches"); - for (Object string : list.toArray()) { - if (stringMatchLoc(((String) string), block.getLocation())) { - list.remove(string); - } - } - data.set("NonPersistent Torches", list); - try { - data.save(data_file); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Checks if a torch is non-persistent - * - * @param block The torch to check - * @return Whether it's persistent or not - */ - public boolean isNonPersistent(Block block) { - return containsLoc(block.getLocation()); - } - - private String locToString(Location loc) { - assert loc.getWorld() != null; - return ("world:" + loc.getWorld().getName() + " x:" + loc.getX() + " y:" + loc.getY() + " z:" + loc.getZ()) - .replace(".0", ""); - } - - private boolean stringMatchLoc(String string, Location location) { - String[] loc = string.split(" "); - assert location.getWorld() != null; - String world = location.getWorld().getName(); - String x = String.valueOf(location.getX()).replace(".0", ""); - String y = String.valueOf(location.getY()).replace(".0", ""); - String z = String.valueOf(location.getZ()).replace(".0", ""); - if (loc[0].equalsIgnoreCase("world:" + world)) { - if (loc[1].equalsIgnoreCase("x:" + x)) { - if (loc[2].equalsIgnoreCase("y:" + y)) { - return loc[3].equalsIgnoreCase("z:" + z); - } - } - } - return false; - } - - private boolean containsLoc(Location loc) { - List list = data.getStringList("NonPersistent Torches"); - for (String torch : list) { - if (stringMatchLoc(torch, loc)) - return true; - } - return false; - } - - private void toBurnout() { - Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> { - List list = data.getStringList("NonPersistent Torches"); - for (String string : list) { - String[] loc = string.split(" "); - long time = Long.parseLong(loc[4].replace("time:", "")); - if (time < System.currentTimeMillis()) { - String world = loc[0].replace("world:", ""); - int x = Integer.parseInt(loc[1].replace("x:", "")); - int y = Integer.parseInt(loc[2].replace("y:", "")); - int z = Integer.parseInt(loc[3].replace("z:", "")); - Block block = Objects.requireNonNull(Bukkit.getServer().getWorld(world)).getBlockAt(x, y, z); - if (block.getType() == Material.TORCH || block.getType() == Material.WALL_TORCH) { - burnoutTorch(block, 20); - } - } - } - }, 20 * 60, 20 * 60); - } - -} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 33bc1d9..5f71f2c 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -286,19 +286,6 @@ Mechanics: AllowedBlocks: - '#minecraft:stairs' - # EXPERIMENTAL FEATURE - # DO NOT USE - BurnoutTorches: - Enabled: false - # Time (in seconds) before torch will burn out - BurnoutTime: 60 - # If burnout torches can be re-lit - Relightable: true - # If non-persistent torches will drop a torch when broken, if disabled will drop a stick - DropTorch: true - # If persistent torches are enabled - PersistentTorches: true - # WEATHER MECHANICS # These mechanics change how weather affects the player Weather: diff --git a/src/main/resources/data.yml b/src/main/resources/data.yml deleted file mode 100644 index ea4434c..0000000 --- a/src/main/resources/data.yml +++ /dev/null @@ -1,2 +0,0 @@ -# SurvivalPlus Data Files -# DO NOT TOUCH \ No newline at end of file From 11a5e434a7eb1f23aab9a1b52906245540f0129e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Mon, 17 Feb 2025 23:12:33 -0800 Subject: [PATCH 080/133] more config updates --- .../survival/config/Config.java | 352 +++++++++--------- src/main/resources/config.yml | 216 +++++------ 2 files changed, 288 insertions(+), 280 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index a830d49..5da622c 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -268,206 +268,206 @@ public FileConfiguration getSettings() { } private void loadSettings() { - - this.lang = settings.getString("Language"); + this.lang = this.settings.getString("Language"); // SETTINGS - this.settings_resource_pack_enabled = settings.getBoolean("Settings.enable-resource-pack"); - this.settings_resource_pack_url = settings.getString("Settings.resource-pack-url"); - this.settings_local_chat_distance = settings.getInt("settings.local-chat-distance"); + this.settings_resource_pack_enabled = this.settings.getBoolean("settings.enable-resource-pack"); + this.settings_resource_pack_url = this.settings.getString("settings.resource-pack-url"); + this.settings_local_chat_distance = this.settings.getInt("settings.local-chat-distance"); // WELCOME GUIDE - this.welcome_guide_enabled = settings.getBoolean("WelcomeGuide.Enabled"); - this.welcome_guide_new_players = settings.getBoolean("WelcomeGuide.NewPlayersOnly"); - this.welcome_guide_delay = settings.getInt("WelcomeGuide.Delay"); + this.welcome_guide_enabled = this.settings.getBoolean("welcome-guide.enabled"); + this.welcome_guide_new_players = this.settings.getBoolean("welcome-guide.new-players-only"); + this.welcome_guide_delay = this.settings.getInt("welcome-guide.delay"); // SURVIVAL - this.survival_enabled = settings.getBoolean("Survival.Enabled"); - this.survival_limited_crafting = settings.getBoolean("Survival.LimitedCrafting"); - this.survival_unlock_all_recipes = settings.getBoolean("Survival.Unlock-all-recipes-on-join"); - this.survival_remove_wood_tools = settings.getBoolean("Survival.Remove-Wooden-Tools"); - this.survival_torch = settings.getBoolean("Survival.Torch"); - this.survival_update_merchant_trades = settings.getBoolean("Survival.UpdateMerchantTrades"); - - this.break_only_with_sickle = settings.getBoolean("Survival.BreakOnlyWith.Sickle"); - this.survival_break_only_with_shovel = settings.getBoolean("Survival.BreakOnlyWith.Shovel"); - this.survival_break_only_with_axe = settings.getBoolean("Survival.BreakOnlyWith.Axe"); - this.survival_break_only_with_pickaxe = settings.getBoolean("Survival.BreakOnlyWith.Pickaxe"); - this.survival_break_only_with_shears = settings.getBoolean("Survival.BreakOnlyWith.Shears"); - this.survival_place_only_with_hammer = settings.getBoolean("Survival.PlaceOnlyWith.Hammer"); - - this.survival_sickle_flint = settings.getBoolean("Survival.Sickles.Flint"); - this.survival_sickle_stone = settings.getBoolean("Survival.Sickles.Stone"); - this.survival_sickle_iron = settings.getBoolean("Survival.Sickles.Iron"); - this.survival_sickle_diamond = settings.getBoolean("Survival.Sickles.Diamond"); - - this.survival_drop_rate_stick = settings.getDouble("Survival.DropRate.Stick"); - this.survival_drop_rate_flint = settings.getDouble("Survival.DropRate.Flint"); + this.survival_enabled = this.settings.getBoolean("survival.enabled"); + this.survival_limited_crafting = this.settings.getBoolean("survival.LimitedCrafting"); // TODO remove + this.survival_unlock_all_recipes = this.settings.getBoolean("survival.unlock-all-recipes-on-join"); + this.survival_remove_wood_tools = this.settings.getBoolean("survival.remove-wooden-tools"); + this.survival_torch = this.settings.getBoolean("survival.torch"); // TODO move to recipes area?!?!? + this.survival_update_merchant_trades = this.settings.getBoolean("survival.update-merchant-trades"); + + this.break_only_with_sickle = this.settings.getBoolean("survival.break-only-with.sickle"); + this.survival_break_only_with_shovel = this.settings.getBoolean("survival.break-only-with.shovel"); + this.survival_break_only_with_axe = this.settings.getBoolean("survival.break-only-with.axe"); + this.survival_break_only_with_pickaxe = this.settings.getBoolean("survival.break-only-with.pickaxe"); + this.survival_break_only_with_shears = this.settings.getBoolean("survival.break-only-with.shears"); + this.survival_place_only_with_hammer = this.settings.getBoolean("survival.place-only_with.hammer"); + + this.survival_sickle_flint = this.settings.getBoolean("survival.sickles.flint"); + this.survival_sickle_stone = this.settings.getBoolean("survival.sickles.stone"); + this.survival_sickle_iron = this.settings.getBoolean("survival.sickles.iron"); + this.survival_sickle_diamond = this.settings.getBoolean("survival.sickles.diamond"); + + this.survival_drop_rate_stick = this.settings.getDouble("survival.drop-rate.stick"); + this.survival_drop_rate_flint = this.settings.getDouble("survival.drop-rate.flint"); // MECHANICS - this.mechanics_shared_workbench = settings.getBoolean("Mechanics.SharedWorkbench"); - this.mechanics_energy_enabled = settings.getBoolean("Mechanics.Energy.enabled"); - this.mechanics_energy_start = settings.getDouble("Mechanics.Energy.start-level"); - this.mechanics_energy_respawn = settings.getDouble("Mechanics.Energy.respawn-level"); - this.mechanics_energy_warning = settings.getBoolean("Mechanics.Energy.warning"); - this.mechanics_energy_drain_rate = settings.getDouble("Mechanics.Energy.drain-rate"); - this.mechanics_energy_drain_cold_rate = settings.getDouble("Mechanics.Energy.cold-drain-rate"); - this.mechanics_energy_refresh_rate_bed = settings.getDouble("Mechanics.Energy.sleeping-refresh-rate"); - this.mechanics_energy_refresh_rate_chair = settings.getDouble("Mechanics.Energy.chair-refresh-rate"); - this.mechanics_energy_exhaustion = settings.getDouble("Mechanics.Energy.exhaustion"); - this.mechanics_energy_coffee_enabled = settings.getBoolean("Mechanics.Energy.coffee"); - this.mechanics_energy_absorption = settings.getBoolean("Mechanics.Energy.absorption"); - this.mechanics_energy_haste = settings.getBoolean("Mechanics.Energy.haste"); - - this.mechanics_slow_armor = settings.getBoolean("Mechanics.SlowArmor"); - this.mechanics_reinforced_armor = settings.getBoolean("Mechanics.ReinforcedLeatherArmor"); - this.MECHANICS_BOW = settings.getBoolean("Mechanics.Bow"); - this.mechanics_recurved_bow = settings.getBoolean("Mechanics.RecurveBow"); - this.mechanics_grappling_hook = settings.getBoolean("Mechanics.GrapplingHook"); - this.mechanics_medic_kit = settings.getBoolean("Mechanics.MedicalKit"); - this.mechanics_reduced_iron_nugget = settings.getBoolean("Mechanics.ReducedIronNugget"); - this.mechanics_reduced_gold_nugget = settings.getBoolean("Mechanics.ReducedGoldNugget"); - - this.mechanics_status_scoreboard = settings.getBoolean("Mechanics.StatusScoreboard"); - this.MECHANICS_ALERT_INTERVAL = settings.getInt("Mechanics.AlertInterval"); - - this.mechanics_raw_meat_hunger = settings.getBoolean("Mechanics.RawMeatHunger"); - this.mechanics_empty_potion = settings.getBoolean("Mechanics.EmptyPotions"); - this.mechanics_poison_potato = settings.getBoolean("Mechanics.PoisonousPotato"); - this.mechanics_cookie_boost = settings.getBoolean("Mechanics.CookieHealthBoost"); - this.mechanics_beet_strength = settings.getBoolean("Mechanics.BeetrootStrength"); - - this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); - this.mechanics_food_max_level = settings.getInt("Mechanics.FoodDiversity.max-level"); - this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); - this.mechanics_food_start_carbs = settings.getInt("Mechanics.FoodDiversity.start-level.carbs"); - this.mechanics_food_start_vitamins = settings.getInt("Mechanics.FoodDiversity.start-level.vitamins"); - this.mechanics_food_start_protein = settings.getInt("Mechanics.FoodDiversity.start-level.proteins"); - this.mechanics_food_diversity_enabled = settings.getBoolean("Mechanics.FoodDiversity.enabled"); - this.mechanics_food_respawn_carbs = settings.getInt("Mechanics.FoodDiversity.respawn-level.carbs"); - this.mechanics_food_respawn_vitamins = settings.getInt("Mechanics.FoodDiversity.respawn-level.vitamins"); - this.mechanics_food_respawn_proteins = settings.getInt("Mechanics.FoodDiversity.respawn-level.proteins"); - this.mechanics_food_effects_carbs_ex_amp_easy = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.easy"); - this.mechanics_food_effects_carbs_ex_amp_medium = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.normal"); - this.mechanics_food_effects_carbs_ex_amp_hard = settings.getInt("Mechanics.FoodDiversity.effects.carbs.exhaustion-amplifier.hard"); - this.mechanics_food_effects_vitamins_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.exhaustion-amplifier"); - this.mechanics_food_effects_vitamins_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.effect"); - this.mechanics_food_effects_vitamins_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.amplifier"); - this.mechanics_food_effects_vitamins_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.normal.duration"); - this.mechanics_food_effects_vitamins_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.effect"); - this.mechanics_food_effects_vitamins_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.amplifier"); - this.mechanics_food_effects_vitamins_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.vitamins.status-effects.hard.duration"); - - this.mechanics_food_effects_protein_ex_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.exhaustion-amplifier"); - this.mechanics_food_effects_protein_se_normal_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.effect"); - this.mechanics_food_effects_protein_se_normal_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.amplifier"); - this.mechanics_food_effects_protein_se_normal_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.normal.duration"); - this.mechanics_food_effects_protein_se_hard_effect = settings.getString("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.effect"); - this.mechanics_food_effects_protein_se_hard_amp = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.amplifier"); - this.mechanics_food_effects_protein_se_hard_duration = settings.getInt("Mechanics.FoodDiversity.effects.proteins.status-effects.hard.duration"); - - this.mechanics_thirst_enabled = settings.getBoolean("Mechanics.Thirst.enabled"); - this.mechanics_thirst_starting_amount = settings.getInt("Mechanics.Thirst.starting-amount"); - this.mechanics_thirst_respawn_amount = settings.getInt("Mechanics.Thirst.respawn-amount"); - this.mechanics_thirst_purify_water = settings.getBoolean("Mechanics.Thirst.purify-water"); - this.mechanics_thirst_melt_snow = settings.getBoolean("Mechanics.Thirst.melt-snow"); - this.mechanics_thirst_drain_rate = settings.getDouble("Mechanics.Thirst.drain-rate"); - this.mechanics_thirst_heat_drain = settings.getInt("Mechanics.Thirst.heat-drain"); - this.mechanics_thirst_nether_drain = settings.getInt("Mechanics.Thirst.nether-drain"); - this.mechanics_thirst_damage_rate = settings.getDouble("Mechanics.Thirst.damage-rate"); - - this.mechanics_thirst_rep_beetroot_soup = settings.getDouble("Mechanics.Thirst.replenish-level.beetroot-soup"); - this.mechanics_thirst_rep_melon_slice = settings.getDouble("Mechanics.Thirst.replenish-level.melon-slice"); - this.mechanics_thirst_rep_mush_stew = settings.getDouble("Mechanics.Thirst.replenish-level.mushroom-stew"); - this.mechanics_thirst_rep_milk_bucket = settings.getDouble("Mechanics.Thirst.replenish-level.milk-bucket"); - this.mechanics_thirst_rep_honey_bottle = settings.getDouble("Mechanics.Thirst.replenish-level.honey-bottle"); - this.mechanics_thirst_rep_other_water = settings.getDouble("Mechanics.Thirst.replenish-level.other-water"); - this.mechanics_thirst_rep_water = settings.getDouble("Mechanics.Thirst.replenish-level.water"); - - this.mechanics_hunger_start_amount = settings.getInt("Mechanics.Hunger.Starting-Amount"); - this.mechanics_hunger_respawn_amount = settings.getInt("Mechanics.Hunger.Respawn-Amount"); - - this.mechanics_compass_waypoint = settings.getBoolean("Mechanics.CompassWaypoint.enabled"); - this.mechanics_compass_waypoint_worlds = settings.getBoolean("Mechanics.CompassWaypoint.per-world"); - this.mechanics_tropical_fish = settings.getBoolean("Mechanics.TropicalFish"); - this.mechanics_fermented_skin = settings.getBoolean("Mechanics.FermentedSkin"); - this.mechanics_living_slime = settings.getBoolean("Mechanics.LivingSlime"); - - this.mechanics_snowball_revamp = settings.getBoolean("Mechanics.SnowballRevamp"); - this.MECHANICS_SNOW_GEN_REVAMP = settings.getBoolean("Mechanics.SnowGenerationRevamp"); - - this.mechanics_farming_products_cookie = settings.getBoolean("Mechanics.FarmingProducts.Cookie"); - this.mechanics_farming_products_bread = settings.getBoolean("Mechanics.FarmingProducts.Bread"); - - this.mechanics_chairs_enabled = settings.getBoolean("Mechanics.Chairs.Enabled"); - this.mechanics_chairs_max_width = settings.getInt("Mechanics.Chairs.MaxChairWidth"); + this.mechanics_slow_armor = this.settings.getBoolean("mechanics.slow-armor"); + this.mechanics_reinforced_armor = this.settings.getBoolean("mechanics.reinforced-leather-armor"); + this.MECHANICS_BOW = this.settings.getBoolean("mechanics.bow"); + this.mechanics_recurved_bow = this.settings.getBoolean("mechanics.recurve-bow"); + this.mechanics_grappling_hook = this.settings.getBoolean("mechanics.grappling-hook"); + this.mechanics_medic_kit = this.settings.getBoolean("mechanics.medical-kit"); + this.mechanics_reduced_iron_nugget = this.settings.getBoolean("mechanics.reduced-iron-nugget"); + this.mechanics_reduced_gold_nugget = this.settings.getBoolean("mechanics.reduced-gold-nugget"); + + this.mechanics_status_scoreboard = this.settings.getBoolean("mechanics.status-scoreboard"); + this.MECHANICS_ALERT_INTERVAL = this.settings.getInt("mechanics.alert-interval"); + + this.mechanics_raw_meat_hunger = this.settings.getBoolean("mechanics.raw-meat-hunger"); + this.mechanics_empty_potion = this.settings.getBoolean("mechanics.empty-potions"); + this.mechanics_poison_potato = this.settings.getBoolean("mechanics.poisonous-potato"); + this.mechanics_cookie_boost = this.settings.getBoolean("mechanics.cookie-health-boost"); + this.mechanics_beet_strength = this.settings.getBoolean("mechanics.beetroot-strength"); + + this.mechanics_food_diversity_enabled = this.settings.getBoolean("mechanics.food-diversity.enabled"); + this.mechanics_food_max_level = this.settings.getInt("mechanics.food-diversity.max-level"); + this.mechanics_food_diversity_enabled = this.settings.getBoolean("mechanics.food-diversity.enabled"); + this.mechanics_food_start_carbs = this.settings.getInt("mechanics.food-diversity.start-level.carbs"); + this.mechanics_food_start_vitamins = this.settings.getInt("mechanics.food-diversity.start-level.vitamins"); + this.mechanics_food_start_protein = this.settings.getInt("mechanics.food-diversity.start-level.proteins"); + this.mechanics_food_diversity_enabled = this.settings.getBoolean("mechanics.food-diversity.enabled"); + this.mechanics_food_respawn_carbs = this.settings.getInt("mechanics.food-diversity.respawn-level.carbs"); + this.mechanics_food_respawn_vitamins = this.settings.getInt("mechanics.food-diversity.respawn-level.vitamins"); + this.mechanics_food_respawn_proteins = this.settings.getInt("mechanics.food-diversity.respawn-level.proteins"); + this.mechanics_food_effects_carbs_ex_amp_easy = this.settings.getInt("mechanics.food-diversity.effects.carbs.exhaustion-amplifier.easy"); + this.mechanics_food_effects_carbs_ex_amp_medium = this.settings.getInt("mechanics.food-diversity.effects.carbs.exhaustion-amplifier.normal"); + this.mechanics_food_effects_carbs_ex_amp_hard = this.settings.getInt("mechanics.food-diversity.effects.carbs.exhaustion-amplifier.hard"); + this.mechanics_food_effects_vitamins_ex_amp = this.settings.getInt("mechanics.food-diversity.effects.vitamins.exhaustion-amplifier"); + this.mechanics_food_effects_vitamins_se_normal_effect = this.settings.getString("mechanics.food-diversity.effects.vitamins.status-effects.normal.effect"); + this.mechanics_food_effects_vitamins_se_normal_amp = this.settings.getInt("mechanics.food-diversity.effects.vitamins.status-effects.normal.amplifier"); + this.mechanics_food_effects_vitamins_se_normal_duration = this.settings.getInt("mechanics.food-diversity.effects.vitamins.status-effects.normal.duration"); + this.mechanics_food_effects_vitamins_se_hard_effect = this.settings.getString("mechanics.food-diversity.effects.vitamins.status-effects.hard.effect"); + this.mechanics_food_effects_vitamins_se_hard_amp = this.settings.getInt("mechanics.food-diversity.effects.vitamins.status-effects.hard.amplifier"); + this.mechanics_food_effects_vitamins_se_hard_duration = this.settings.getInt("mechanics.food-diversity.effects.vitamins.status-effects.hard.duration"); + + this.mechanics_food_effects_protein_ex_amp = this.settings.getInt("mechanics.food-diversity.effects.proteins.exhaustion-amplifier"); + this.mechanics_food_effects_protein_se_normal_effect = this.settings.getString("mechanics.food-diversity.effects.proteins.status-effects.normal.effect"); + this.mechanics_food_effects_protein_se_normal_amp = this.settings.getInt("mechanics.food-diversity.effects.proteins.status-effects.normal.amplifier"); + this.mechanics_food_effects_protein_se_normal_duration = this.settings.getInt("mechanics.food-diversity.effects.proteins.status-effects.normal.duration"); + this.mechanics_food_effects_protein_se_hard_effect = this.settings.getString("mechanics.food-diversity.effects.proteins.status-effects.hard.effect"); + this.mechanics_food_effects_protein_se_hard_amp = this.settings.getInt("mechanics.food-diversity.effects.proteins.status-effects.hard.amplifier"); + this.mechanics_food_effects_protein_se_hard_duration = this.settings.getInt("mechanics.food-diversity.effects.proteins.status-effects.hard.duration"); + + this.mechanics_thirst_enabled = this.settings.getBoolean("mechanics.thirst.enabled"); + this.mechanics_thirst_starting_amount = this.settings.getInt("mechanics.thirst.starting-amount"); + this.mechanics_thirst_respawn_amount = this.settings.getInt("mechanics.thirst.respawn-amount"); + this.mechanics_thirst_purify_water = this.settings.getBoolean("mechanics.thirst.purify-water"); + this.mechanics_thirst_melt_snow = this.settings.getBoolean("mechanics.thirst.melt-snow"); + this.mechanics_thirst_drain_rate = this.settings.getDouble("mechanics.thirst.drain-rate"); + this.mechanics_thirst_heat_drain = this.settings.getInt("mechanics.thirst.heat-drain"); + this.mechanics_thirst_nether_drain = this.settings.getInt("mechanics.thirst.nether-drain"); + this.mechanics_thirst_damage_rate = this.settings.getDouble("mechanics.thirst.damage-rate"); + + this.mechanics_thirst_rep_beetroot_soup = this.settings.getDouble("mechanics.thirst.replenish-level.beetroot-soup"); + this.mechanics_thirst_rep_melon_slice = this.settings.getDouble("mechanics.thirst.replenish-level.melon-slice"); + this.mechanics_thirst_rep_mush_stew = this.settings.getDouble("mechanics.thirst.replenish-level.mushroom-stew"); + this.mechanics_thirst_rep_milk_bucket = this.settings.getDouble("mechanics.thirst.replenish-level.milk-bucket"); + this.mechanics_thirst_rep_honey_bottle = this.settings.getDouble("mechanics.thirst.replenish-level.honey-bottle"); + this.mechanics_thirst_rep_other_water = this.settings.getDouble("mechanics.thirst.replenish-level.other-water"); + this.mechanics_thirst_rep_water = this.settings.getDouble("mechanics.thirst.replenish-level.water"); + + this.mechanics_shared_workbench = this.settings.getBoolean("mechanics.shared-workbench"); + this.mechanics_energy_enabled = this.settings.getBoolean("mechanics.energy.enabled"); + this.mechanics_energy_start = this.settings.getDouble("mechanics.energy.start-level"); + this.mechanics_energy_respawn = this.settings.getDouble("mechanics.energy.respawn-level"); + this.mechanics_energy_warning = this.settings.getBoolean("mechanics.energy.warning"); + this.mechanics_energy_drain_rate = this.settings.getDouble("mechanics.energy.drain-rate"); + this.mechanics_energy_drain_cold_rate = this.settings.getDouble("mechanics.energy.cold-drain-rate"); + this.mechanics_energy_refresh_rate_bed = this.settings.getDouble("mechanics.energy.sleeping-refresh-rate"); + this.mechanics_energy_refresh_rate_chair = this.settings.getDouble("mechanics.energy.chair-refresh-rate"); + this.mechanics_energy_exhaustion = this.settings.getDouble("mechanics.energy.exhaustion"); + this.mechanics_energy_coffee_enabled = this.settings.getBoolean("mechanics.energy.coffee"); + this.mechanics_energy_absorption = this.settings.getBoolean("mechanics.energy.absorption"); + this.mechanics_energy_haste = this.settings.getBoolean("mechanics.energy.haste"); + + this.mechanics_hunger_start_amount = this.settings.getInt("mechanics.hunger.starting-amount"); + this.mechanics_hunger_respawn_amount = this.settings.getInt("mechanics.hunger.respawn-amount"); + + this.mechanics_compass_waypoint = this.settings.getBoolean("mechanics.compass-waypoint.enabled"); + this.mechanics_compass_waypoint_worlds = this.settings.getBoolean("mechanics.compass-waypoint.per-world"); + + this.mechanics_tropical_fish = this.settings.getBoolean("mechanics.tropical-fish"); + this.mechanics_fermented_skin = this.settings.getBoolean("mechanics.fermented-skin"); + this.mechanics_living_slime = this.settings.getBoolean("mechanics.living-slime"); + + this.mechanics_snowball_revamp = this.settings.getBoolean("mechanics.snowball-revamp"); + this.MECHANICS_SNOW_GEN_REVAMP = this.settings.getBoolean("mechanics.SnowGenerationRevamp"); + + this.mechanics_farming_products_cookie = this.settings.getBoolean("mechanics.farming-products.cookie"); + this.mechanics_farming_products_bread = this.settings.getBoolean("mechanics.farming-products.bread"); + + this.mechanics_chairs_enabled = this.settings.getBoolean("mechanics.chairs.enabled"); + this.mechanics_chairs_max_width = this.settings.getInt("mechanics.chairs.max-chair-width"); this.mechanics_chairs_blocks = getChairBlocks(); - this.mechanics_weather_enabled = settings.getBoolean("Mechanics.Weather.Enabled"); - this.mechanics_weather_speed_base = settings.getDouble("Mechanics.Weather.speed.base"); - this.mechanics_weather_speed_rain = settings.getDouble("Mechanics.Weather.speed.rain"); - this.mechanics_weather_speed_storm = settings.getDouble("Mechanics.Weather.speed.storm"); - this.mechanics_weather_speed_snow = settings.getDouble("Mechanics.Weather.speed.snow"); - this.mechanics_weather_speed_snowstorm = settings.getDouble("Mechanics.Weather.speed.snowstorm"); + this.mechanics_weather_enabled = this.settings.getBoolean("mechanics.weather.enabled"); + this.mechanics_weather_speed_base = this.settings.getDouble("mechanics.weather.speed.base"); + this.mechanics_weather_speed_rain = this.settings.getDouble("mechanics.weather.speed.rain"); + this.mechanics_weather_speed_storm = this.settings.getDouble("mechanics.weather.speed.storm"); + this.mechanics_weather_speed_snow = this.settings.getDouble("mechanics.weather.speed.snow"); + this.mechanics_weather_speed_snowstorm = this.settings.getDouble("mechanics.weather.speed.snowstorm"); // ITEM MECHANICS - this.item_mechanics_firestriker_cook_time = settings.getInt("Item-Mechanics.firestriker.cook-time"); + this.item_mechanics_firestriker_cook_time = this.settings.getInt("item-mechanics.firestriker.cook-time"); // ENTITY MECHANICS - this.entity_mechanics_pigmen_chest_enabled = settings.getBoolean("Entity-Mechanics.zombified-piglin-chests.enabled"); - this.entity_mechanics_pigmen_chest_radius = settings.getInt("Entity-Mechanics.zombified-piglin-chests.distance"); - this.entity_mechanics_pigmen_chest_speed = settings.getDouble("Entity-Mechanics.zombified-piglin-chests.speed-modifier"); - this.entity_mechanics_beekeeper_suit_enabled = settings.getBoolean("Entity-Mechanics.beekeeper-suit.enabled"); - this.entity_mechanics_suspicious_meat_enabled = settings.getBoolean("Entity-Mechanics.suspicious-meat.enabled"); - this.entity_mechanics_suspicious_meat_chance = settings.getInt("Entity-Mechanics.suspicious-meat.chance"); - this.entity_mechanics_chicken_breeding_enabled = settings.getBoolean("Entity-Mechanics.chicken-breeding.enabled"); - this.entity_mechanics_chicken_breeding_max_eggs = settings.getInt("Entity-Mechanics.chicken-breeding.max-eggs"); - this.entity_mechanics_chicken_breeding_always_baby = settings.getBoolean("Entity-Mechanics.chicken-breeding.always-baby"); - this.entity_mechanics_chicken_breeding_baby_ticks = settings.getInt("Entity-Mechanics.chicken-breeding.baby-ticks"); - this.entity_mechanics_piglin_drop_water = settings.getBoolean("Entity-Mechanics.piglin-barter.drop-purified-water"); - this.entity_mechanics_piglin_alt_drop = settings.getBoolean("Entity-Mechanics.piglin-barter.alternate-bartering"); + this.entity_mechanics_pigmen_chest_enabled = this.settings.getBoolean("entity-mechanics.zombified-piglin-chests.enabled"); + this.entity_mechanics_pigmen_chest_radius = this.settings.getInt("entity-mechanics.zombified-piglin-chests.distance"); + this.entity_mechanics_pigmen_chest_speed = this.settings.getDouble("entity-mechanics.zombified-piglin-chests.speed-modifier"); + this.entity_mechanics_beekeeper_suit_enabled = this.settings.getBoolean("entity-mechanics.beekeeper-suit.enabled"); + this.entity_mechanics_suspicious_meat_enabled = this.settings.getBoolean("entity-mechanics.suspicious-meat.enabled"); + this.entity_mechanics_suspicious_meat_chance = this.settings.getInt("entity-mechanics.suspicious-meat.chance"); + this.entity_mechanics_chicken_breeding_enabled = this.settings.getBoolean("entity-mechanics.chicken-breeding.enabled"); + this.entity_mechanics_chicken_breeding_max_eggs = this.settings.getInt("entity-mechanics.chicken-breeding.max-eggs"); + this.entity_mechanics_chicken_breeding_always_baby = this.settings.getBoolean("entity-mechanics.chicken-breeding.always-baby"); + this.entity_mechanics_chicken_breeding_baby_ticks = this.settings.getInt("entity-mechanics.chicken-breeding.baby-ticks"); + this.entity_mechanics_piglin_drop_water = this.settings.getBoolean("entity-mechanics.piglin-barter.drop-purified-water"); + this.entity_mechanics_piglin_alt_drop = this.settings.getBoolean("entity-mechanics.piglin-barter.alternate-bartering"); // RECIPES - this.recipes_saddle = settings.getBoolean("Recipes.Saddle"); - this.recipes_name_tag = settings.getBoolean("Recipes.Nametag"); - this.recipes_packed_ice = settings.getBoolean("Recipes.PackedIce"); - this.recipes_leather_bard = settings.getBoolean("Recipes.LeatherBard"); - this.recipes_iron_bard = settings.getBoolean("Recipes.IronBard"); - this.recipes_gold_bard = settings.getBoolean("Recipes.GoldBard"); - this.recipes_diamond_bard = settings.getBoolean("Recipes.DiamondBard"); - this.recipes_clay_brick = settings.getBoolean("Recipes.ClayBrick"); - this.recipes_quartz_block = settings.getBoolean("Recipes.QuartzBlock"); - this.recipes_wool_string = settings.getBoolean("Recipes.WoolString"); - this.recipes_web_string = settings.getBoolean("Recipes.WebString"); - this.recipes_ice = settings.getBoolean("Recipes.Ice"); - this.recipes_clay = settings.getBoolean("Recipes.Clay"); - this.recipes_diorite = settings.getBoolean("Recipes.Diorite"); - this.recipes_granite = settings.getBoolean("Recipes.Granite"); - this.recipes_andesite = settings.getBoolean("Recipes.Andesite"); - this.recipes_gravel = settings.getBoolean("Recipes.Gravel"); - this.recipes_slimeball = settings.getBoolean("Recipes.Slimeball"); - this.recipes_cobweb = settings.getBoolean("Recipes.Cobweb"); - this.recipes_sapling_stick = settings.getBoolean("Recipes.SaplingToSticks"); - this.recipes_fishing_rod = settings.getBoolean("Recipes.FishingRod"); - this.recipes_furnace = settings.getBoolean("Recipes.Furnace"); - this.recipes_workbench = settings.getBoolean("Recipes.Workbench"); + this.recipes_saddle = this.settings.getBoolean("recipes.saddle"); + this.recipes_name_tag = this.settings.getBoolean("recipes.nametag"); + this.recipes_packed_ice = this.settings.getBoolean("recipes.packed-ice"); + this.recipes_leather_bard = this.settings.getBoolean("recipes.leather-bard"); + this.recipes_iron_bard = this.settings.getBoolean("recipes.iron-bard"); + this.recipes_gold_bard = this.settings.getBoolean("recipes.gold-bard"); + this.recipes_diamond_bard = this.settings.getBoolean("recipes.diamond-bard"); + this.recipes_clay_brick = this.settings.getBoolean("recipes.clay-brick"); + this.recipes_quartz_block = this.settings.getBoolean("recipes.quartz-block"); + this.recipes_wool_string = this.settings.getBoolean("recipes.wool-string"); + this.recipes_web_string = this.settings.getBoolean("recipes.web-string"); + this.recipes_ice = this.settings.getBoolean("recipes.ice"); + this.recipes_clay = this.settings.getBoolean("recipes.clay"); + this.recipes_diorite = this.settings.getBoolean("recipes.diorite"); + this.recipes_granite = this.settings.getBoolean("recipes.granite"); + this.recipes_andesite = this.settings.getBoolean("recipes.andesite"); + this.recipes_gravel = this.settings.getBoolean("recipes.gravel"); + this.recipes_slimeball = this.settings.getBoolean("recipes.slimeball"); + this.recipes_cobweb = this.settings.getBoolean("recipes.cobweb"); + this.recipes_sapling_stick = this.settings.getBoolean("recipes.sapling-to-sticks"); + this.recipes_fishing_rod = this.settings.getBoolean("recipes.fishing-rod"); + this.recipes_furnace = this.settings.getBoolean("recipes.furnace"); + this.recipes_workbench = this.settings.getBoolean("recipes.workbench"); // LEGENDARY ITEMS - this.legendary_valkyrie = settings.getBoolean("LegendaryItems.ValkyrieAxe"); - this.legendary_quartz_pickaxe = settings.getBoolean("LegendaryItems.QuartzPickaxe"); - this.legendary_obsidian_mace = settings.getBoolean("LegendaryItems.ObsidianMace"); - this.legendary_giant_blade = settings.getBoolean("LegendaryItems.GiantBlade"); - this.legendary_blaze_sword = settings.getBoolean("LegendaryItems.BlazeSword"); - this.legendary_notch_apple = settings.getBoolean("LegendaryItems.NotchApple"); - this.legendary_gold_armor_buff = settings.getBoolean("LegendaryItems.GoldArmorBuff"); + this.legendary_valkyrie = this.settings.getBoolean("legendary-items.valkyrie-axe"); + this.legendary_quartz_pickaxe = this.settings.getBoolean("legendary-items.quartz-pickaxe"); + this.legendary_obsidian_mace = this.settings.getBoolean("legendary-items.obsidian-mace"); + this.legendary_giant_blade = this.settings.getBoolean("legendary-items.giant-blade"); + this.legendary_blaze_sword = this.settings.getBoolean("legendary-items.blaze-sword"); + this.legendary_notch_apple = this.settings.getBoolean("legendary-items.notch-apple"); + this.legendary_gold_armor_buff = this.settings.getBoolean("legendary-items.gold-armor-buff"); // HIDDEN CONFIG - this.recipe_delay = settings.getInt("recipe-delay", 0); + this.recipe_delay = this.settings.getInt("recipe-delay", 0); } private List getChairBlocks() { List materials = new ArrayList<>(); - List allowedByStrings = settings.getStringList("Mechanics.Chairs.AllowedBlocks"); + List allowedByStrings = this.settings.getStringList("mechanics.chairs.allowed-blocks"); for (String string : allowedByStrings) { if (string.startsWith("#")) { NamespacedKey key; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 5f71f2c..2fee7a4 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -8,7 +8,7 @@ # Language options are EN (English) Language: EN -Settings: +settings: # Enable the SurvivalPlus resource pack for players # You can disable this if you wish to supply it yourself enable-resource-pack: true @@ -20,111 +20,117 @@ Settings: local-chat-distance: -1 # When a player joins, they will get a link to a simple starter guide -WelcomeGuide: - Enabled: true +welcome-guide: + enabled: true # Only send to players the first time they log in - NewPlayersOnly: false + new-players-only: false # Delay in seconds until this message appears - Delay: 5 + delay: 5 -Survival: +survival: # When enabled, the basic custom SurvivalPlus items will be included in the game - Enabled: true + enabled: true # With this enabled, players will only be able to craft items which they have unlocked recipes for LimitedCrafting: false # If true, all custom recipes will be unlocked when a player joins - # If false, recipes will be unlocked as a player advances thru the game - Unlock-all-recipes-on-join: false + # If false, recipes will be unlocked as a player advances through the game + unlock-all-recipes-on-join: false # When enabled, all vanilla wooden tool recipes will be removed # This makes gameplay a little more difficult - Remove-Wooden-Tools: true + remove-wooden-tools: true # With these enabled, players will only be able to break most blocks with the correct tools - BreakOnlyWith: - Axe: true - Pickaxe: true - Shovel: true - Shears: true - Sickle: true + break-only-with: + axe: true + pickaxe: true + shovel: true + shears: true + sickle: true # Enable each sickle individually - # (note: if BreakOnlyWith.Sickle = false or Survival.Enabled = false, these will be ignored) - # (note: diamond and iron sickles rely on stone sickles in their recipe, so its best to leave stone enabled if diamond or iron are enabled) - Sickles: - Flint: true - Stone: true - Iron: true - Diamond: false - - # With this enabled, players will need a hammer in their off hand to place most buildable blocks - PlaceOnlyWith: - Hammer: true + # (note: if `break-only-with.sickle` = false or survival.enabled` = false, these will be ignored) + # (note: diamond and iron sickles rely on stone sickles in their recipe, so it's best to leave stone enabled if diamond or iron are enabled) + sickles: + flint: true + stone: true + iron: true + diamond: false + + # With this enabled, players will need a hammer in their off-hand to place most buildable blocks + place-only-with: + hammer: true # The rates at which items will drop (Value between 0.01 -> 1.0) - DropRate: + drop-rate: # Dropped when breaking gravel - Flint: 0.5 + flint: 0.5 # Dropped when breaking leaves - Stick: 0.25 + stick: 0.25 # Enables custom torch recipes - Torch: true + torch: true # Enables updating trade options for merchants (ie: Villagers) with custom items equivalent to the trade option # Ex: An armorer offers diamond chestplate -> diamond chestplate with the slowness attribute # Ex: A toolsmith offers diamond hoe -> diamond sickle - UpdateMerchantTrades: true + update-merchant-trades: true -Mechanics: +mechanics: # This is an experimental feature, I recommend not using it - SharedWorkbench: false + shared-workbench: false # When enabled, players will slow down when wearing heavy armor such as diamond or gold armor - SlowArmor: true + slow-armor: true + # Enables recipes for reinforced leather armor - ReinforcedLeatherArmor: true + reinforced-leather-armor: true # When enabled, players will only be able to shoot a bow/crossbow from their main hand # They will also need to have arrows in their offhand to shoot a bow/load a crossbow - Bow: true + bow: true + # Enables the recurved bow and crossbow - RecurveBow: true + recurve-bow: true + # Enables grappling hooks - GrapplingHook: true + grappling-hook: true + # Enables the medical kit # Players will be able to heal themselves and other players # The items.yml file allows you to modify how many uses it has # Each use (1 durability) will add 2 health points (1 heart) - MedicalKit: true + medical-kit: true + # Reduced recipes for iron/gold nuggets - ReducedIronNugget: true - ReducedGoldNugget: true + reduced-iron-nugget: true + reduced-gold-nugget: true # Shows the players different status levels in a scoreboard - StatusScoreboard: true + status-scoreboard: true + # Interval for alert messages [in seconds] (Currently used to warn players when thirst/nutrients are low) - AlertInterval: 20 + alert-interval: 20 # Applies hunger to players when eating raw meat - RawMeatHunger: true + raw-meat-hunger: true # Players can empty potions in a workbench - EmptyPotions: true + empty-potions: true # When consuming poisonous potatoes, apply a few extra effects to the player - PoisonousPotato: true + poisonous-potato: true # Eating cookies will boost a player's health - CookieHealthBoost: true + cookie-health-boost: true # Eating beetroots will boost a player's strength - BeetrootStrength: true + beetroot-strength: true # Players will need to eat a different variety of foods to stay nourished - FoodDiversity: + food-diversity: enabled: true # Max level for each nutritional value max-level: 1000 @@ -175,7 +181,7 @@ Mechanics: duration: 20 # When enabled, players will need to drink water to replenish their thirst levels - Thirst: + thirst: enabled: true # The level of thirst a player starts out with (max = 40) starting-amount: 30.0 @@ -215,7 +221,7 @@ Mechanics: water: 18 # Players will have an energy level out of 20, as it drops, players will get weak and suffer some bad effects - Energy: + energy: # With this enabled, players will need to sleep often or risk losing energy enabled: true # The amount of energy a player will start with (out of 20.0) @@ -246,50 +252,52 @@ Mechanics: # Player will get a few minutes of haste when their energy is high haste: true - Hunger: + hunger: # The level of hunger a player starts out with (max = 40)(this is a mixture of hunger and saturation) - Starting-Amount: 30 - # The level of hunger a player will receive after respawning after death (max = 40) - Respawn-Amount: 30 + starting-amount: 30 + # The level of hunger a player will receive after respawning post-death (max = 40) + respawn-amount: 30 # Players can set a waypoint to a location using a compass - CompassWaypoint: + compass-waypoint: enabled: true # Whether a player is able to set a point for each world per-world: true + # Players can eat a tropical fish to teleport to their waypoint - TropicalFish: true + tropical-fish: true # Enables fermented skin recipes - FermentedSkin: true + fermented-skin: true # Enables living slime - LivingSlime: true + living-slime: true # When a player throws a snowball it will place a snow layer on the ground - SnowballRevamp: true + snowball-revamp: true # Currently disabled, do not use!!! SnowGenerationRevamp: false - FarmingProducts: - Bread: true - Cookie: true + # Creates harder to craft recipes for these items + farming-products: + bread: true + cookie: true # Enables chairs and the blocks that can be used for chairs - Chairs: - Enabled: true - MaxChairWidth: 2 + chairs: + enabled: true + max-chair-width: 2 # Blocks that can be used as chairs # Has to be a stair block # Accepts Minecraft namespaced keys and tags - AllowedBlocks: + allowed-blocks: - '#minecraft:stairs' # WEATHER MECHANICS # These mechanics change how weather affects the player - Weather: - Enabled: false + weather: + enabled: false # Speed modifiers adjust player's speed based on weather speed: # This is the base speed (vanilla speed = 0.10) when a player is in normal conditions @@ -304,13 +312,13 @@ Mechanics: snowstorm: 0.05 # Mechanics that flow around items -Item-Mechanics: +item-mechanics: firestriker: # The amount of ticks it takes to cook/smelt an item with the FireStriker (default 100 ticks = 5 seconds) cook-time: 100 # Mechanics that flow around entities -Entity-Mechanics: +entity-mechanics: # When a player opens a chest in the nether, and it contains gold items, zombified piglins will attack the player zombified-piglin-chests: enabled: true @@ -350,37 +358,37 @@ Entity-Mechanics: # Enables custom recipes (Overrides vanilla recipes) # Disable these if you prefer to just use the vanilla recipes -Recipes: - Saddle: true - Nametag: true - PackedIce: true - LeatherBard: true - IronBard: true - GoldBard: true - DiamondBard: true - ClayBrick: true - QuartzBlock: true - WoolString: true - WebString: true - Ice: true - Clay: true - Diorite: false - Granite: false - Andesite: false - Gravel: true - Slimeball: true - Cobweb: true - SaplingToSticks: true - FishingRod: true - Furnace: true - Workbench: true +recipes: + saddle: true + nametag: true + packed-ice: true + leather-bard: true + iron-bard: true + gold-bard: true + diamond-bard: true + clay-brick: true + quartz-block: true + wool-string: true + web-string: true + ice: true + clay: true + diorite: false + granite: false + andesite: false + gravel: true + slimeball: true + cobweb: true + sapling-to-sticks: true + fishing-rod: true + furnace: true + workbench: true # Enables legendary items -LegendaryItems: - ValkyrieAxe: true - QuartzPickaxe: true - ObsidianMace: true - GiantBlade: true - BlazeSword: true - NotchApple: true - GoldArmorBuff: true +legendary-items: + valkyrie-axe: true + quartz-pickaxe: true + obsidian-mace: true + giant-blade: true + blaze-sword: true + notch-apple: true + gold-armor-buff: true From 02b4453e0d5919390c3c3baf9d14e3f12a485d6b Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 00:30:06 -0800 Subject: [PATCH 081/133] Thirst tweaks --- .../survival/config/Config.java | 10 +-- .../survival/data/PlayerData.java | 2 +- .../listeners/item/ThirstListener.java | 8 +++ .../survival/tasks/TaskManager.java | 8 +-- .../survival/tasks/ThirstDrain.java | 53 -------------- .../survival/tasks/ThirstDrainHeat.java | 42 ----------- .../survival/tasks/ThirstDrainNether.java | 39 ---------- .../survival/tasks/ThirstTask.java | 72 +++++++++++++++++++ src/main/resources/config.yml | 25 +++---- 9 files changed, 101 insertions(+), 158 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/tasks/ThirstDrain.java delete mode 100644 src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainHeat.java delete mode 100644 src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainNether.java create mode 100644 src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index 5da622c..bc6810a 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -124,9 +124,10 @@ public class Config { public boolean mechanics_thirst_purify_water; public boolean mechanics_thirst_melt_snow; public double mechanics_thirst_drain_rate; - public int mechanics_thirst_heat_drain; - public int mechanics_thirst_nether_drain; + public double mechanics_thirst_heat_drain_rate; + public double mechanics_thirst_nether_drain_rate; public double mechanics_thirst_damage_rate; + public double mechanics_thirst_rep_apple; public double mechanics_thirst_rep_beetroot_soup; public double mechanics_thirst_rep_melon_slice; public double mechanics_thirst_rep_mush_stew; @@ -357,10 +358,11 @@ private void loadSettings() { this.mechanics_thirst_purify_water = this.settings.getBoolean("mechanics.thirst.purify-water"); this.mechanics_thirst_melt_snow = this.settings.getBoolean("mechanics.thirst.melt-snow"); this.mechanics_thirst_drain_rate = this.settings.getDouble("mechanics.thirst.drain-rate"); - this.mechanics_thirst_heat_drain = this.settings.getInt("mechanics.thirst.heat-drain"); - this.mechanics_thirst_nether_drain = this.settings.getInt("mechanics.thirst.nether-drain"); + this.mechanics_thirst_heat_drain_rate = this.settings.getInt("mechanics.thirst.heat-drain-rate"); + this.mechanics_thirst_nether_drain_rate = this.settings.getInt("mechanics.thirst.nether-drain-rate"); this.mechanics_thirst_damage_rate = this.settings.getDouble("mechanics.thirst.damage-rate"); + this.mechanics_thirst_rep_apple = this.settings.getDouble("mechanics.thirst.replenish-level.apple"); this.mechanics_thirst_rep_beetroot_soup = this.settings.getDouble("mechanics.thirst.replenish-level.beetroot-soup"); this.mechanics_thirst_rep_melon_slice = this.settings.getDouble("mechanics.thirst.replenish-level.melon-slice"); this.mechanics_thirst_rep_mush_stew = this.settings.getDouble("mechanics.thirst.replenish-level.mushroom-stew"); diff --git a/src/main/java/com/shanebeestudios/survival/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/data/PlayerData.java index ce2027c..455c00a 100644 --- a/src/main/java/com/shanebeestudios/survival/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/data/PlayerData.java @@ -111,7 +111,7 @@ public void setThirst(double thirst) { * * @param thirst Level of thirst to add */ - public void increaseThirst(int thirst) { + public void increaseThirst(double thirst) { this.thirst = Math.clamp(this.thirst + thirst, 0, 40); } diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java index e09ab82..c4e7bd8 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java @@ -52,6 +52,12 @@ private void onConsume(PlayerItemConsumeEvent event) { change = drinkItem.getThirstLevel(); } else { switch (event.getItem().getType()) { + case APPLE: + change = this.config.mechanics_thirst_rep_apple; + break; + case BEETROOT_SOUP: + change = this.config.mechanics_thirst_rep_beetroot_soup; + break; case POTION: if (this.config.mechanics_thirst_purify_water) { change = this.config.mechanics_thirst_rep_other_water; @@ -73,6 +79,8 @@ private void onConsume(PlayerItemConsumeEvent event) { break; } } + if (change <= 0) return; + ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); if (thirstEvent.callEvent()) { playerData.setThirst(playerData.getThirst() + change); diff --git a/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java b/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java index 71b505d..1f9fefc 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java @@ -27,16 +27,10 @@ public TaskManager(SurvivalPlugin plugin) { } // Thirst if (config.mechanics_thirst_enabled) { - new ThirstDrain(plugin); + new ThirstTask(plugin); if (!config.mechanics_status_scoreboard && alertInterval > 0) { new ThirstAlert(plugin); } - } - if (config.mechanics_thirst_nether_drain > 0) { - new ThirstDrainNether(plugin); - } - if (config.mechanics_thirst_heat_drain > 0) { - new ThirstDrainHeat(plugin); } } diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrain.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrain.java deleted file mode 100644 index 3afdd2a..0000000 --- a/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrain.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.shanebeestudios.survival.tasks; - -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.damage.DamageSource; -import org.bukkit.damage.DamageType; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; - -@SuppressWarnings("UnstableApiUsage") -class ThirstDrain extends BukkitRunnable { - - private final PlayerManager playerManager; - private final double damageRate; - - ThirstDrain(SurvivalPlugin plugin) { - this.playerManager = plugin.getPlayerManager(); - this.damageRate = plugin.getSurvivalConfig().mechanics_thirst_damage_rate; - this.runTaskTimer(plugin, 20, 20); - } - - @Override - public void run() { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; - - // Damage player when thirst is too low - PlayerData playerData = playerManager.getPlayerData(player); - - if (playerData.getThirst() <= 0) { - DamageSource damageSource = DamageSource.builder(DamageType.DRY_OUT).build(); - switch (player.getWorld().getDifficulty()) { - case EASY: - if (player.getHealth() > 10) - player.damage(this.damageRate, damageSource); - break; - case NORMAL: - if (player.getHealth() > 1) - player.damage(this.damageRate, damageSource); - break; - case HARD: - player.damage(this.damageRate, damageSource); - break; - default: - } - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainHeat.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainHeat.java deleted file mode 100644 index f8d1152..0000000 --- a/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainHeat.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.shanebeestudios.survival.tasks; - -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.World.Environment; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; -import com.shanebeestudios.survival.managers.PlayerManager; - -class ThirstDrainHeat extends BukkitRunnable { - - private final PlayerManager playerManager; - - ThirstDrainHeat(SurvivalPlugin plugin) { - this.playerManager = plugin.getPlayerManager(); - this.runTaskTimer(plugin, 0, 20L * plugin.getSurvivalConfig().mechanics_thirst_heat_drain); - } - - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; - if (player.getWorld().getEnvironment() != Environment.NORMAL) continue; - Block block = player.getLocation().getBlock(); - if (block.getTemperature() < 1.0) continue; // Only hot biomes - if (block.getLightFromSky() < 15) continue; // Must be exposed to sunlight - - PlayerData playerData = this.playerManager.getPlayerData(player); - int change = 1; - // Call thirst level change event - ThirstLevelChangeEvent event = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); - if (event.callEvent()) { - playerData.increaseThirst(-change); - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainNether.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainNether.java deleted file mode 100644 index 34fc3c8..0000000 --- a/src/main/java/com/shanebeestudios/survival/tasks/ThirstDrainNether.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.shanebeestudios.survival.tasks; - -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.World.Environment; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; -import com.shanebeestudios.survival.managers.PlayerManager; - -class ThirstDrainNether extends BukkitRunnable { - - private final PlayerManager playerManager; - - ThirstDrainNether(SurvivalPlugin plugin) { - this.playerManager = plugin.getPlayerManager(); - this.runTaskTimer(plugin, 0, 20L * plugin.getSurvivalConfig().mechanics_thirst_nether_drain); - } - - @Override - public void run() { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; - if (player.getWorld().getEnvironment() != Environment.NETHER) continue; - - PlayerData playerData = playerManager.getPlayerData(player); - int change = 1; - // Call thirst level change event - ThirstLevelChangeEvent event = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) { - playerData.increaseThirst(-change); - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java new file mode 100644 index 0000000..fd9c2c6 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java @@ -0,0 +1,72 @@ +package com.shanebeestudios.survival.tasks; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.managers.PlayerManager; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.World.Environment; +import org.bukkit.block.Block; +import org.bukkit.damage.DamageSource; +import org.bukkit.damage.DamageType; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +@SuppressWarnings("UnstableApiUsage") +class ThirstTask extends BukkitRunnable { + + private final Config config; + private final PlayerManager playerManager; + private final DamageSource damageSource = DamageSource.builder(DamageType.DRY_OUT).build(); + + ThirstTask(SurvivalPlugin plugin) { + this.config = plugin.getSurvivalConfig(); + this.playerManager = plugin.getPlayerManager(); + this.runTaskTimer(plugin, 100, 100); + } + + @Override + public void run() { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; + PlayerData playerData = this.playerManager.getPlayerData(player); + Environment environment = player.getWorld().getEnvironment(); + if (environment == Environment.NORMAL) { + Block block = player.getLocation().getBlock(); + if (block.getTemperature() < 1.5) return; // Only hot biomes + if (block.getLightFromSky() < 14) return; // Must be exposed to sunlight + + drain(player, playerData, this.config.mechanics_thirst_heat_drain_rate); + } else if (environment == Environment.NETHER) { + drain(player, playerData, this.config.mechanics_thirst_nether_drain_rate); + } + // Damage player when thirst is too low + if (playerData.getThirst() <= 0) { + switch (player.getWorld().getDifficulty()) { + case EASY: + if (player.getHealth() > 10) + player.damage(this.config.mechanics_thirst_damage_rate, this.damageSource); + break; + case NORMAL: + if (player.getHealth() > 1) + player.damage(this.config.mechanics_thirst_damage_rate, this.damageSource); + break; + case HARD: + player.damage(this.config.mechanics_thirst_damage_rate, this.damageSource); + break; + } + } + } + } + + private void drain(Player player, PlayerData playerData, double change) { + // Call thirst level change event + ThirstLevelChangeEvent event = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); + if (event.callEvent()) { + playerData.increaseThirst(-change); + } + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2fee7a4..b316bb6 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -194,21 +194,22 @@ mechanics: # The amount of thirst to drop when doing exhaustive tasks such as running, mining, etc. # (When exhaustion reaches 4 and resets, this amount will be removed from the player's thirst) drain-rate: 0.5 - # If player is in a HOT biome, drain 1 extra thirst point every X seconds - # This helps speed up thirst draining when a player is in a hot biome like the desert or savanna - # (ex: at a rate of 30, thirst drops 2 points a minute, which means the player would lose all thirst in 20 minutes) - # If set to 0, this will be disabled - heat-drain: 30 - # If player is in the nether, drain 1 extra thirst point every X seconds - # This helps speed up thirst draining when a player is in the nether - # (ex: at a rate of 30, thirst drops 2 points a minute, which means the player would lose all thirst in 20 minutes) - # If set to 0, this will be disabled - nether-drain: 30 - # The amount of damage a player takes when their thirst level is empty + # The amount of thirst that will drop every 5 seconds in the heat + # Player needs to be in a hot biome where the temp exceeds 1.5 (eg: desert, savanna, badlands) and exposed to direct sunlight + # Default = 0.083 (This would take one 20-minute daylight cycle to drain thirst) + heat-drain-rate: 0.083 + # The amount of thirst that will drop every 5 seconds in the nether + # Default = 0.17 (This would take 10 minutes to drain thirst) + nether-drain-rate: 0.17 + # The amount of damage a player will take every 5 seconds when their thirst level is empty + # Easy mode = Will only damage if player's health > 10 (5 hearts) + # Normal mode = Will only damage if player's health > 1 (0.5 hearts) + # Hard mode = Will damage player no matter what (could kill) damage-rate: 1.0 # The level of thirst that will be replenished when a player consumes this item - # Some item's replenish thirst levels are handled in the items.yml file + # Custom items' replenish thirst levels are handled in the items.yml file replenish-level: + apple: 1 beetroot-soup: 6 melon-slice: 6 mushroom-stew: 12 From 734e862846453f6c4916d17386a64feca9c8b5d4 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 01:15:25 -0800 Subject: [PATCH 082/133] loot replacements --- .../survival/SurvivalPlugin.java | 14 ++-- .../survival/config/Config.java | 2 + .../survival/listeners/EventManager.java | 4 ++ .../listeners/block/LootTableListener.java | 27 +++++++ .../listeners/entity/MerchantTrades.java | 10 +-- ...{MerchantManager.java => LootManager.java} | 72 +++++++++++++------ src/main/resources/config.yml | 2 + 7 files changed, 98 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/listeners/block/LootTableListener.java rename src/main/java/com/shanebeestudios/survival/managers/{MerchantManager.java => LootManager.java} (58%) diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index 0fa267a..50f1f63 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -24,7 +24,7 @@ import com.shanebeestudios.survival.data.PlayerData; import com.shanebeestudios.survival.listeners.EventManager; import com.shanebeestudios.survival.managers.EffectManager; -import com.shanebeestudios.survival.managers.MerchantManager; +import com.shanebeestudios.survival.managers.LootManager; import com.shanebeestudios.survival.managers.PapiPlaceholders; import com.shanebeestudios.survival.managers.PlayerManager; import com.shanebeestudios.survival.managers.RecipeManager; @@ -62,7 +62,7 @@ public class SurvivalPlugin extends JavaPlugin implements Listener { private ScoreBoardManager scoreBoardManager; private PlayerManager playerManager; private TaskManager taskManager; - private MerchantManager merchantManager; + private LootManager lootManager; private RecipeManager recipeManager; // Other @@ -142,7 +142,7 @@ public void onEnable() { effectManager = new EffectManager(this); taskManager = new TaskManager(this); scoreBoardManager = new ScoreBoardManager(this); - merchantManager = new MerchantManager(this); + lootManager = new LootManager(this); recipeManager = new RecipeManager(this); // LOAD PLAYER DATA - (during a reload if players are still online) @@ -325,11 +325,11 @@ public TaskManager getTaskManager() { return this.taskManager; } - /** Get an instance of the merchant manager - * @return Instance of the merchant manager + /** Get an instance of the loot manager + * @return Instance of the loot manager */ - public MerchantManager getMerchantManager() { - return merchantManager; + public LootManager getLootManager() { + return lootManager; } /** Get an instance of the recipe manager diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index bc6810a..1397026 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -40,6 +40,7 @@ public class Config { public boolean survival_remove_wood_tools; public boolean survival_torch; public boolean survival_update_merchant_trades; + public boolean survival_update_loot_tables; public boolean break_only_with_sickle; public boolean survival_break_only_with_shovel; @@ -288,6 +289,7 @@ private void loadSettings() { this.survival_remove_wood_tools = this.settings.getBoolean("survival.remove-wooden-tools"); this.survival_torch = this.settings.getBoolean("survival.torch"); // TODO move to recipes area?!?!? this.survival_update_merchant_trades = this.settings.getBoolean("survival.update-merchant-trades"); + this.survival_update_loot_tables = this.settings.getBoolean("survival.update-loot-tables"); this.break_only_with_sickle = this.settings.getBoolean("survival.break-only-with.sickle"); this.survival_break_only_with_shovel = this.settings.getBoolean("survival.break-only-with.shovel"); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 0ac818c..5ca68d1 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.listeners; +import com.shanebeestudios.survival.listeners.block.LootTableListener; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; import com.shanebeestudios.survival.SurvivalPlugin; @@ -147,6 +148,9 @@ public void registerEvents() { if (config.survival_update_merchant_trades) { pm.registerEvents(new MerchantTrades(this.plugin), this.plugin); } + if (this.config.survival_update_loot_tables) { + pm.registerEvents(new LootTableListener(plugin), this.plugin); + } pm.registerEvents(new PiglinBarter(this.plugin), this.plugin); // Config handled within this event pm.registerEvents(new EntityDeath(this.plugin), this.plugin); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/LootTableListener.java b/src/main/java/com/shanebeestudios/survival/listeners/block/LootTableListener.java new file mode 100644 index 0000000..b53049a --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/LootTableListener.java @@ -0,0 +1,27 @@ +package com.shanebeestudios.survival.listeners.block; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.managers.LootManager; +import org.bukkit.block.Container; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.LootGenerateEvent; +import org.bukkit.inventory.InventoryHolder; + +public class LootTableListener implements Listener { + + private final LootManager lootManager; + + public LootTableListener(SurvivalPlugin plugin) { + this.lootManager = plugin.getLootManager(); + } + + @EventHandler + private void onLootGenerate(LootGenerateEvent event) { + InventoryHolder holder = event.getInventoryHolder(); + if (holder instanceof Container) { + this.lootManager.updateLoot(event.getLoot()); + } + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java index 508db21..1fbb9a8 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java @@ -1,26 +1,26 @@ package com.shanebeestudios.survival.listeners.entity; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.managers.LootManager; import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.Merchant; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.managers.MerchantManager; public class MerchantTrades implements Listener { - private final MerchantManager merchantManager; + private final LootManager lootManager; public MerchantTrades(SurvivalPlugin plugin) { - this.merchantManager = plugin.getMerchantManager(); + this.lootManager = plugin.getLootManager(); } @EventHandler private void onClickVillager(PlayerInteractEntityEvent event) { Entity entity = event.getRightClicked(); if (entity instanceof Merchant merchant) { - this.merchantManager.updateRecipes(merchant); + this.lootManager.updateMerchant(merchant); } } diff --git a/src/main/java/com/shanebeestudios/survival/managers/MerchantManager.java b/src/main/java/com/shanebeestudios/survival/managers/LootManager.java similarity index 58% rename from src/main/java/com/shanebeestudios/survival/managers/MerchantManager.java rename to src/main/java/com/shanebeestudios/survival/managers/LootManager.java index bbcbf31..8a7d22f 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/MerchantManager.java +++ b/src/main/java/com/shanebeestudios/survival/managers/LootManager.java @@ -1,26 +1,27 @@ package com.shanebeestudios.survival.managers; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Merchant; -import org.bukkit.inventory.MerchantRecipe; import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.config.Config; import com.shanebeestudios.survival.item.Item; import com.shanebeestudios.survival.item.Items; import com.shanebeestudios.survival.util.ItemUtils; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Merchant; +import org.bukkit.inventory.MerchantRecipe; import java.util.HashMap; +import java.util.List; import java.util.Map; /** * Manager for Merchant Recipes */ -public class MerchantManager { +public class LootManager { private final Config config; - public MerchantManager(SurvivalPlugin plugin) { + public LootManager(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); } @@ -30,13 +31,24 @@ public MerchantManager(SurvivalPlugin plugin) { * * @param merchant Merchant to update */ - public void updateRecipes(Merchant merchant) { + public void updateMerchant(Merchant merchant) { for (int i = 0; i < merchant.getRecipes().size(); i++) { MerchantRecipe merchantRecipe = merchant.getRecipe(i); Material result = merchantRecipe.getResult().getType(); - Recipe recipe = Recipe.getByMaterial(result); - if (recipe != null && canUpdate(result)) { - merchant.setRecipe(i, recipe.updateRecipe(merchantRecipe)); + LootReplacements lootReplacements = LootReplacements.getByMaterial(result); + if (lootReplacements != null && canUpdate(result)) { + merchant.setRecipe(i, lootReplacements.updateRecipe(merchantRecipe)); + } + } + } + + public void updateLoot(List loot) { + for (int i = 0; i < loot.size(); i++) { + ItemStack itemStack = loot.get(i); + Material type = itemStack.getType(); + LootReplacements replacement = LootReplacements.getByMaterial(type); + if (replacement != null && canUpdate(type)) { + loot.set(i, replacement.items.getItemStack()); } } } @@ -45,19 +57,29 @@ private boolean canUpdate(Material material) { return switch (material) { case CHAINMAIL_HELMET, CHAINMAIL_CHESTPLATE, CHAINMAIL_LEGGINGS, CHAINMAIL_BOOTS -> this.config.mechanics_reinforced_armor; - case IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS, DIAMOND_HELMET, DIAMOND_CHESTPLATE, - DIAMOND_LEGGINGS, DIAMOND_BOOTS -> this.config.mechanics_slow_armor; + case GOLDEN_HELMET, GOLDEN_CHESTPLATE, GOLDEN_LEGGINGS, GOLDEN_BOOTS, + IRON_HELMET, IRON_CHESTPLATE, IRON_LEGGINGS, IRON_BOOTS, + DIAMOND_HELMET, DIAMOND_CHESTPLATE, DIAMOND_LEGGINGS, DIAMOND_BOOTS, + NETHERITE_HELMET, NETHERITE_CHESTPLATE, NETHERITE_LEGGINGS, NETHERITE_BOOTS -> + this.config.mechanics_slow_armor; + case WOODEN_HOE -> this.config.survival_sickle_flint; + case IRON_HOE -> this.config.survival_sickle_iron; case STONE_HOE -> this.config.survival_sickle_stone; case DIAMOND_HOE -> this.config.survival_sickle_diamond; + case WOODEN_AXE, WOODEN_PICKAXE -> this.config.survival_enabled; default -> false; }; } /** - * Merchant recipes overrides - *

These will take vanilla recipes and replace them with custom {@link Items}s

+ * Loot/Merchant overrides + *

These will take vanilla LootTables/MerchantRecipes and replace them with custom {@link Items}s

*/ - public enum Recipe { + public enum LootReplacements { + GOLDEN_HELMET(Material.GOLDEN_HELMET, Items.GOLDEN_CROWN), + GOLDEN_CHESTPLATE(Material.GOLDEN_CHESTPLATE, Items.GOLDEN_GUARD), + GOLDEN_LEGGINGS(Material.GOLDEN_LEGGINGS, Items.GOLDEN_GREAVES), + GOLDEN_BOOTS(Material.GOLDEN_BOOTS, Items.GOLDEN_SABATONS), IRON_HELMET(Material.IRON_HELMET, Items.IRON_HELMET), IRON_CHESTPLATE(Material.IRON_CHESTPLATE, Items.IRON_CHESTPLATE), IRON_LEGGINGS(Material.IRON_LEGGINGS, Items.IRON_LEGGINGS), @@ -66,25 +88,33 @@ public enum Recipe { DIAMOND_CHESTPLATE(Material.DIAMOND_CHESTPLATE, Items.DIAMOND_CHESTPLATE), DIAMOND_LEGGINGS(Material.DIAMOND_LEGGINGS, Items.DIAMOND_LEGGINGS), DIAMOND_BOOTS(Material.DIAMOND_BOOTS, Items.DIAMOND_BOOTS), + NETHERITE_HELMET(Material.NETHERITE_HELMET, Items.NETHERITE_HELMET), + NETHERITE_CHESTPLATE(Material.NETHERITE_CHESTPLATE, Items.NETHERITE_CHESTPLATE), + NETHERITE_LEGGINGS(Material.NETHERITE_LEGGINGS, Items.NETHERITE_LEGGINGS), + NETHERITE_BOOTS(Material.NETHERITE_BOOTS, Items.NETHERITE_BOOTS), REINFORCED_LEATHER_HELMET(Material.CHAINMAIL_HELMET, Items.REINFORCED_LEATHER_HELMET), REINFORCED_LEATHER_TUNIC(Material.CHAINMAIL_CHESTPLATE, Items.REINFORCED_LEATHER_TUNIC), REINFORCED_LEATHER_TROUSERS(Material.CHAINMAIL_LEGGINGS, Items.REINFORCED_LEATHER_TROUSERS), REINFORCED_LEATHER_BOOTS(Material.CHAINMAIL_BOOTS, Items.REINFORCED_LEATHER_BOOTS), + FLINT_SICKLE(Material.WOODEN_HOE, Items.FLINT_SICKLE), STONE_SICKLE(Material.STONE_HOE, Items.STONE_SICKLE), - DIAMOND_SICKLE(Material.DIAMOND_HOE, Items.DIAMOND_SICKLE); + IRON_SICKLE(Material.IRON_HOE, Items.IRON_SICKLE), + DIAMOND_SICKLE(Material.DIAMOND_HOE, Items.DIAMOND_SICKLE), + HATCHET(Material.WOODEN_AXE, Items.HATCHET), + MATTOCK(Material.WOODEN_PICKAXE, Items.MATTOCK); private final Material material; private final Item items; - private static final Map recipeByMaterialMap; + private static final Map recipeByMaterialMap; static { recipeByMaterialMap = new HashMap<>(); - for (Recipe recipe : values()) { - recipeByMaterialMap.put(recipe.material, recipe); + for (LootReplacements lootReplacements : values()) { + recipeByMaterialMap.put(lootReplacements.material, lootReplacements); } } - Recipe(Material material, Item items) { + LootReplacements(Material material, Item items) { this.material = material; this.items = items; } @@ -112,7 +142,7 @@ public MerchantRecipe updateRecipe(MerchantRecipe oldRecipe) { * @param material Material to get recipe from * @return Recipe based on material */ - public static Recipe getByMaterial(Material material) { + public static LootReplacements getByMaterial(Material material) { if (recipeByMaterialMap.containsKey(material)) { return recipeByMaterialMap.get(material); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b316bb6..9921f56 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -77,6 +77,8 @@ survival: # Ex: An armorer offers diamond chestplate -> diamond chestplate with the slowness attribute # Ex: A toolsmith offers diamond hoe -> diamond sickle update-merchant-trades: true + # Same as above but for loot tables (Such as chests/barrels in villages) + update-loot-tables: true mechanics: # This is an experimental feature, I recommend not using it From a7e37a2450db0b799df8e271b96b9c0e76936fd6 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 02:07:53 -0800 Subject: [PATCH 083/133] Recurvedbow - some cleanup --- .../shanebeestudios/survival/item/Items.java | 8 +- .../survival/item/Recipes.java | 4 +- .../item/items/tools/RecurveCrossbow.java | 35 -------- .../{RecurveBow.java => RecurvedBow.java} | 23 +++--- .../item/items/tools/RecurvedCrossbow.java | 27 +++++++ .../survival/listeners/EventManager.java | 4 +- .../listeners/entity/PiglinBarter.java | 2 +- .../survival/listeners/item/RecurvedBow.java | 81 ------------------- .../listeners/item/RecurvedBowListener.java | 72 +++++++++++++++++ src/main/resources/items.yml | 8 +- .../{recurve_bow.json => recurved_bow.json} | 0 ...e_crossbow.json => recurved_crossbow.json} | 0 12 files changed, 125 insertions(+), 139 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveCrossbow.java rename src/main/java/com/shanebeestudios/survival/item/items/tools/{RecurveBow.java => RecurvedBow.java} (60%) create mode 100644 src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedCrossbow.java delete mode 100644 src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBow.java create mode 100644 src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBowListener.java rename src/main/resources/resource-pack/assets/survival_plus/items/{recurve_bow.json => recurved_bow.json} (100%) rename src/main/resources/resource-pack/assets/survival_plus/items/{recurve_crossbow.json => recurved_crossbow.json} (100%) diff --git a/src/main/java/com/shanebeestudios/survival/item/Items.java b/src/main/java/com/shanebeestudios/survival/item/Items.java index 140a8f7..9a6a89c 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Items.java +++ b/src/main/java/com/shanebeestudios/survival/item/Items.java @@ -42,8 +42,8 @@ import com.shanebeestudios.survival.item.items.tools.Hatchet; import com.shanebeestudios.survival.item.items.tools.Mattock; import com.shanebeestudios.survival.item.items.tools.MedicKit; -import com.shanebeestudios.survival.item.items.tools.RecurveBow; -import com.shanebeestudios.survival.item.items.tools.RecurveCrossbow; +import com.shanebeestudios.survival.item.items.tools.RecurvedBow; +import com.shanebeestudios.survival.item.items.tools.RecurvedCrossbow; import com.shanebeestudios.survival.item.items.tools.Shiv; import com.shanebeestudios.survival.item.items.tools.Sickle; import com.shanebeestudios.survival.util.Utils; @@ -75,8 +75,8 @@ public class Items { public static final Item IRON_SICKLE = new Sickle("iron", Material.IRON_INGOT); public static final Item DIAMOND_SICKLE = new Sickle("diamond", Material.DIAMOND); public static final MedicKit MEDIC_KIT = new MedicKit(); - public static final Item RECURVE_BOW = new RecurveBow(); - public static final Item RECURVE_CROSSBOW = new RecurveCrossbow(); + public static final RecurvedBow RECURVED_BOW = new RecurvedBow(); + public static final RecurvedCrossbow RECURVED_CROSSBOW = new RecurvedCrossbow(); // LEGENDARY TOOLS public static final Item VALKYRIES_AXE = new ValkyriesAxe(); diff --git a/src/main/java/com/shanebeestudios/survival/item/Recipes.java b/src/main/java/com/shanebeestudios/survival/item/Recipes.java index 2b1ca9e..d29da4a 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Recipes.java +++ b/src/main/java/com/shanebeestudios/survival/item/Recipes.java @@ -179,8 +179,8 @@ public static void init(Config config) { NETHERITE_LEGGINGS = register(config.mechanics_slow_armor, Items.NETHERITE_LEGGINGS.getRecipe()); NETHERITE_BOOTS = register(config.mechanics_slow_armor, Items.NETHERITE_BOOTS.getRecipe()); MEDIC_KIT = register(config.mechanics_medic_kit, Items.MEDIC_KIT.getRecipe()); - RECURVED_BOW = register(config.mechanics_recurved_bow, Items.RECURVE_BOW.getRecipe()); - RECURVED_CROSSBOW = register(config.mechanics_recurved_bow, Items.RECURVE_CROSSBOW.getRecipe()); + RECURVED_BOW = register(config.mechanics_recurved_bow, Items.RECURVED_BOW.getRecipe()); + RECURVED_CROSSBOW = register(config.mechanics_recurved_bow, Items.RECURVED_CROSSBOW.getRecipe()); UNLIT_CAMPFIRE = register(true, Items.CAMPFIRE.getRecipe());// TODO config?!?! GRAPPLING_HOOK = register(config.mechanics_grappling_hook, Items.GRAPPLING_HOOK.getRecipe()); COFFEE_BEAN = register(config.mechanics_energy_coffee_enabled, Items.COFFEE_BEAN.getRecipe()); diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveCrossbow.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveCrossbow.java deleted file mode 100644 index 06ca599..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveCrossbow.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.shanebeestudios.survival.item.items.tools; - -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.ItemType; -import org.bukkit.inventory.Recipe; -import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; - -@SuppressWarnings("UnstableApiUsage") -public class RecurveCrossbow extends Item { - - public RecurveCrossbow() { - ItemStack itemStack = ItemType.CROSSBOW.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.addEnchant(Enchantment.PUNCH, 1, true); - itemStack.setItemMeta(itemMeta); - setupDefaults("recurve_crossbow", itemStack); - } - - @Override - public Recipe getRecipe() { - ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); - - recipe.shape(" 12", "342", " 12"); - recipe.setIngredient('1', Material.DIAMOND); - recipe.setIngredient('2', Material.PHANTOM_MEMBRANE); - recipe.setIngredient('3', Material.PISTON); - recipe.setIngredient('4', Material.CROSSBOW); - return recipe; - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveBow.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedBow.java similarity index 60% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveBow.java rename to src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedBow.java index 74b7254..2684ae2 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurveBow.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedBow.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.item.items.tools; +import com.shanebeestudios.survival.item.Item; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; @@ -7,28 +8,30 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") -public class RecurveBow extends Item { +public class RecurvedBow extends Item { + + public RecurvedBow() { + this("recurved_bow", ItemType.BOW.createItemStack()); + } - public RecurveBow() { - ItemStack itemStack = ItemType.BOW.createItemStack(); + public RecurvedBow(String key, ItemStack itemStack) { ItemMeta itemMeta = itemStack.getItemMeta(); itemMeta.addEnchant(Enchantment.PUNCH, 1, true); itemStack.setItemMeta(itemMeta); - setupDefaults("recurve_bow", itemStack); + setupDefaults(key, itemStack); } @Override public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); - recipe.shape(" @1", "#^1", " @1"); - recipe.setIngredient('^', Material.BOW); - recipe.setIngredient('#', Material.PISTON); - recipe.setIngredient('@', Material.IRON_INGOT); - recipe.setIngredient('1', Material.STRING); + recipe.shape(" is", "pbs", " is"); + recipe.setIngredient('b', Material.BOW); + recipe.setIngredient('p', Material.PISTON); + recipe.setIngredient('i', Material.IRON_INGOT); + recipe.setIngredient('s', Material.STRING); return recipe; } diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedCrossbow.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedCrossbow.java new file mode 100644 index 0000000..da4e461 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedCrossbow.java @@ -0,0 +1,27 @@ +package com.shanebeestudios.survival.item.items.tools; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.ShapedRecipe; + +@SuppressWarnings("UnstableApiUsage") +public class RecurvedCrossbow extends RecurvedBow { + + public RecurvedCrossbow() { + super("recurved_crossbow", ItemType.CROSSBOW.createItemStack()); + } + + @Override + public Recipe getRecipe() { + ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); + + recipe.shape(" dm", "pcm", " dm"); + recipe.setIngredient('d', Material.DIAMOND); + recipe.setIngredient('m', Material.PHANTOM_MEMBRANE); + recipe.setIngredient('p', Material.PISTON); + recipe.setIngredient('c', Material.CROSSBOW); + return recipe; + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 5ca68d1..89e31d5 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -33,7 +33,7 @@ import com.shanebeestudios.survival.listeners.item.ObsidianMaceWeakness; import com.shanebeestudios.survival.listeners.item.PoisonousPotato; import com.shanebeestudios.survival.listeners.item.RawMeatHunger; -import com.shanebeestudios.survival.listeners.item.RecurvedBow; +import com.shanebeestudios.survival.listeners.item.RecurvedBowListener; import com.shanebeestudios.survival.listeners.item.RepairCrafting; import com.shanebeestudios.survival.listeners.item.ShivPoison; import com.shanebeestudios.survival.listeners.item.ThirstListener; @@ -129,7 +129,7 @@ public void registerEvents() { if (config.mechanics_food_diversity_enabled) pm.registerEvents(new FoodDiversityConsume(plugin), this.plugin); if (config.mechanics_recurved_bow) - pm.registerEvents(new RecurvedBow(plugin), this.plugin); + pm.registerEvents(new RecurvedBowListener(plugin), this.plugin); if (config.mechanics_snowball_revamp) pm.registerEvents(new SnowballThrow(), this.plugin); if (config.MECHANICS_SNOW_GEN_REVAMP) diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java index bbb85d1..28163c9 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java @@ -67,7 +67,7 @@ private void onPiglinDrop(EntityDropItemEvent event) { case SOUL_SAND -> Items.CAMPFIRE.getItemStack(); case POTION -> Items.MEDIC_KIT.getItemStack(); case SPLASH_POTION -> Items.GRAPPLING_HOOK.getItemStack(); - case ENCHANTED_BOOK -> Items.RECURVE_CROSSBOW.getItemStack(); + case ENCHANTED_BOOK -> Items.RECURVED_CROSSBOW.getItemStack(); default -> null; }; if (altItem != null) itemDrop.setItemStack(altItem); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBow.java b/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBow.java deleted file mode 100644 index 0c84305..0000000 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBow.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.shanebeestudios.survival.listeners.item; - -import org.bukkit.Bukkit; -import org.bukkit.Sound; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.events.ShootRecurvedBowEvent; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.Utils; - -import java.util.Random; - -public class RecurvedBow implements Listener { - - private SurvivalPlugin plugin; - - public RecurvedBow(SurvivalPlugin plugin) { - this.plugin = plugin; - } - - @EventHandler - private void onShoot(EntityShootBowEvent event) { - if (event.getEntity() instanceof Player) { - Player player = (Player) event.getEntity(); - if (Utils.isCitizensNPC(player)) return; - ItemStack mainItem = event.getBow(); - - assert mainItem != null; - if (Items.RECURVE_BOW.is(mainItem) || Items.RECURVE_CROSSBOW.is(mainItem)) { - Random rand = new Random(); - if (event.getForce() >= 1.0F) { - final Entity arrow = event.getProjectile(); - final Vector velocity = player.getLocation().getDirection().add(new Vector(0, 0.025, 0)).multiply(4); - Item item; - if (Items.RECURVE_BOW.is(mainItem)) { - item = Items.RECURVE_BOW; - } else { - item = Items.RECURVE_CROSSBOW; - } - // Call new ShootRecurvedBowEvent - ShootRecurvedBowEvent shootEvent = new ShootRecurvedBowEvent(player, mainItem, item); - Bukkit.getPluginManager().callEvent(shootEvent); - if (shootEvent.isCancelled()) { - event.setCancelled(true); - return; - } - - arrow.setVelocity(velocity); - - player.getWorld().playSound(player.getLocation(), Sound.BLOCK_LEVER_CLICK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getWorld().playSound(player.getLocation(), Sound.ENTITY_SHULKER_BULLET_HURT, 0.5F, rand.nextFloat() * 0.4F + 0.8F); - final Runnable task = new Runnable() { - int times = 4; - - public void run() { - if (!arrow.isOnGround()) { - arrow.setVelocity(velocity); - if (times-- > 0) - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, this, 5); - } - } - }; - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, task, -1); - } else { - event.setCancelled(true); - player.updateInventory(); - player.getWorld().playSound(player.getLocation(), Sound.BLOCK_LEVER_CLICK, 0.5F, rand.nextFloat() * 0.4F + 0.8F); - } - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBowListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBowListener.java new file mode 100644 index 0000000..5f8ea73 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBowListener.java @@ -0,0 +1,72 @@ +package com.shanebeestudios.survival.listeners.item; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.events.ShootRecurvedBowEvent; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.item.items.tools.RecurvedBow; +import com.shanebeestudios.survival.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import java.util.Random; + +public class RecurvedBowListener implements Listener { + + private final SurvivalPlugin plugin; + private final Random random = new Random(); + + public RecurvedBowListener(SurvivalPlugin plugin) { + this.plugin = plugin; + } + + @EventHandler + private void onShoot(EntityShootBowEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + if (Utils.isCitizensNPC(player)) return; + + ItemStack mainItem = event.getBow(); + + assert mainItem != null; + if (!(Items.getFromStack(mainItem) instanceof RecurvedBow recurvedBow)) return; + + if (event.getForce() >= 3F) { // Max = 3 + final Entity arrow = event.getProjectile(); + final Vector velocity = player.getLocation().getDirection().add(new Vector(0, 0.025, 0)).multiply(4); + // Call new ShootRecurvedBowEvent + ShootRecurvedBowEvent shootEvent = new ShootRecurvedBowEvent(player, mainItem, recurvedBow); + if (!shootEvent.callEvent()) { + event.setCancelled(true); + return; + } + + arrow.setVelocity(velocity); + + player.getWorld().playSound(player.getLocation(), Sound.BLOCK_LEVER_CLICK, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); + player.getWorld().playSound(player.getLocation(), Sound.ENTITY_SHULKER_BULLET_HURT, 0.5F, this.random.nextFloat() * 0.4F + 0.8F); + + Bukkit.getScheduler().runTask(this.plugin, new Runnable() { + int times = 4; + + public void run() { + if (!arrow.isOnGround()) { + arrow.setVelocity(velocity); + if (times-- > 0) + Bukkit.getScheduler().runTaskLater(plugin, this, 5); + } + } + }); + } else { + event.setCancelled(true); + player.updateInventory(); + player.getWorld().playSound(player.getLocation(), Sound.BLOCK_LEVER_CLICK, 0.5F, this.random.nextFloat() * 0.4F + 0.8F); + } + } + +} diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index e0a561d..86f6d44 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -78,12 +78,12 @@ items: lore: - "<#38E29F>Right-Click a player to heal them" - "<#38AEE2>Sneak-Right-Click to heal yourself" - recurve_bow: - name: "Recurve Bow" + recurved_bow: + name: "Recurved Bow" repair_cost: 1 repair_percent: 0.9 - recurve_crossbow: - name: "Recurve Crossbow" + recurved_crossbow: + name: "Recurved Crossbow" repair_cost: 2 repair_percent: 0.9 shiv: diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/recurve_bow.json b/src/main/resources/resource-pack/assets/survival_plus/items/recurved_bow.json similarity index 100% rename from src/main/resources/resource-pack/assets/survival_plus/items/recurve_bow.json rename to src/main/resources/resource-pack/assets/survival_plus/items/recurved_bow.json diff --git a/src/main/resources/resource-pack/assets/survival_plus/items/recurve_crossbow.json b/src/main/resources/resource-pack/assets/survival_plus/items/recurved_crossbow.json similarity index 100% rename from src/main/resources/resource-pack/assets/survival_plus/items/recurve_crossbow.json rename to src/main/resources/resource-pack/assets/survival_plus/items/recurved_crossbow.json From d681499cd78674620f2eddb4023bcbb70354fbf3 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 02:26:00 -0800 Subject: [PATCH 084/133] ThirstTask - fix accidental return skipping damage --- .../com/shanebeestudios/survival/tasks/ThirstTask.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java index fd9c2c6..fd4b9f1 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java @@ -35,10 +35,9 @@ public void run() { Environment environment = player.getWorld().getEnvironment(); if (environment == Environment.NORMAL) { Block block = player.getLocation().getBlock(); - if (block.getTemperature() < 1.5) return; // Only hot biomes - if (block.getLightFromSky() < 14) return; // Must be exposed to sunlight - - drain(player, playerData, this.config.mechanics_thirst_heat_drain_rate); + if (block.getTemperature() >= 1.5 && block.getLightLevel() >= 14) { + drain(player, playerData, this.config.mechanics_thirst_heat_drain_rate); + } } else if (environment == Environment.NETHER) { drain(player, playerData, this.config.mechanics_thirst_nether_drain_rate); } From 9a74b125775807859cc71d3786c3afc4b7f741f4 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 12:30:35 -0800 Subject: [PATCH 085/133] more item updates --- .../shanebeestudios/survival/item/Item.java | 18 +++++++++++ .../survival/item/items/tools/Hammer.java | 10 ++++-- .../survival/item/items/tools/Hatchet.java | 24 ++++++++++++-- .../survival/item/items/tools/Mattock.java | 30 +++++++++++++++--- .../survival/item/items/tools/Shiv.java | 23 ++++++-------- .../survival/item/items/tools/Sickle.java | 31 +++++++++++++++++-- src/main/resources/items.yml | 15 +++++---- 7 files changed, 119 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/item/Item.java b/src/main/java/com/shanebeestudios/survival/item/Item.java index e2236cb..5d0cc06 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Item.java +++ b/src/main/java/com/shanebeestudios/survival/item/Item.java @@ -4,11 +4,18 @@ import com.shanebeestudios.survival.util.Utils; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.set.RegistryKeySet; +import io.papermc.paper.registry.tag.TagKey; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Color; +import org.bukkit.Material; import org.bukkit.NamespacedKey; +import org.bukkit.Tag; +import org.bukkit.block.BlockType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.jetbrains.annotations.Nullable; @@ -119,6 +126,17 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod Items.ALL_ITEMS.put(this.key, this); } + @SuppressWarnings("NullableProblems") + protected RegistryKeySet getBlockTag(TagKey tagKey) { + return RegistryAccess.registryAccess().getRegistry(RegistryKey.BLOCK).getTag(tagKey); + } + + @SuppressWarnings("NullableProblems") + protected RegistryKeySet getBlockTag(Tag tag) { + TagKey tagKey = TagKey.create(RegistryKey.BLOCK, tag.key()); + return RegistryAccess.registryAccess().getRegistry(RegistryKey.BLOCK).getTag(tagKey); + } + /** * Get the recipe of this item * diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java index 29a2ac4..fedcbf6 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java @@ -1,23 +1,27 @@ package com.shanebeestudios.survival.item.items.tools; +import com.shanebeestudios.survival.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.Tool; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; public class Hammer extends Item { @SuppressWarnings("UnstableApiUsage") public Hammer() { - ItemStack itemStack = ItemType.WOODEN_SWORD.createItemStack(); + ItemStack itemStack = ItemType.WOODEN_AXE.createItemStack(); ItemMeta hammerMeta = itemStack.getItemMeta(); itemStack.setItemMeta(hammerMeta); - itemStack.unsetData(DataComponentTypes.REPAIRABLE); + itemStack.setData(DataComponentTypes.TOOL, Tool.tool() + .defaultMiningSpeed(0.0001f) + .build()); + setupDefaults("hammer", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java index e914b0b..05c8580 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java @@ -1,19 +1,39 @@ package com.shanebeestudios.survival.item.items.tools; +import com.shanebeestudios.survival.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; +import io.papermc.paper.datacomponent.item.Tool; +import io.papermc.paper.registry.keys.tags.BlockTypeTagKeys; +import net.kyori.adventure.util.TriState; import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Hatchet extends Item { public Hatchet() { ItemStack itemStack = ItemType.WOODEN_AXE.createItemStack(); - itemStack.unsetData(DataComponentTypes.REPAIRABLE); + + AttributeModifier attackDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + AttributeModifier attackSpeed = new AttributeModifier(BASE_ATTACK_SPEED, -3.5, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, attackDamage) + .addModifier(Attribute.ATTACK_SPEED, attackSpeed) + .build()); + + itemStack.setData(DataComponentTypes.TOOL, Tool.tool() + .defaultMiningSpeed(0.0001f) + .addRule(Tool.rule(getBlockTag(BlockTypeTagKeys.INCORRECT_FOR_WOODEN_TOOL), 0.0001f, TriState.FALSE)) + .addRule(Tool.rule(getBlockTag(BlockTypeTagKeys.LOGS), 0.35f, TriState.FALSE)) + .addRule(Tool.rule(getBlockTag(BlockTypeTagKeys.MINEABLE_AXE), 0.75f, TriState.TRUE)) + .build()); setupDefaults("hatchet", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java index a03627f..5480788 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java @@ -1,31 +1,51 @@ package com.shanebeestudios.survival.item.items.tools; +import com.shanebeestudios.survival.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; +import io.papermc.paper.datacomponent.item.Tool; +import io.papermc.paper.registry.keys.tags.BlockTypeTagKeys; +import net.kyori.adventure.util.TriState; import org.bukkit.Material; import org.bukkit.Tag; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; -import org.bukkit.inventory.RecipeChoice; +import org.bukkit.inventory.RecipeChoice.MaterialChoice; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Mattock extends Item { public Mattock() { ItemStack itemStack = ItemType.WOODEN_PICKAXE.createItemStack(); - itemStack.unsetData(DataComponentTypes.REPAIRABLE); + + AttributeModifier attackDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, 1, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + AttributeModifier attackSpeed = new AttributeModifier(BASE_ATTACK_SPEED, -3.5, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, attackDamage) + .addModifier(Attribute.ATTACK_SPEED, attackSpeed) + .build()); + + itemStack.setData(DataComponentTypes.TOOL, Tool.tool() + .defaultMiningSpeed(0.0001f) + .addRule(Tool.rule(getBlockTag(BlockTypeTagKeys.INCORRECT_FOR_WOODEN_TOOL), 0.0001f, TriState.FALSE)) + .addRule(Tool.rule(getBlockTag(BlockTypeTagKeys.BASE_STONE_OVERWORLD), 0.25f, TriState.TRUE)) + .addRule(Tool.rule(getBlockTag(BlockTypeTagKeys.MINEABLE_PICKAXE), 0.75f, TriState.TRUE)) + .build()); + setupDefaults("mattock", itemStack); } @Override public Recipe getRecipe() { ShapedRecipe recipe = new ShapedRecipe(this.recipeKey, this.getItemStack()); - recipe.shape("fp", "sf"); recipe.setIngredient('f', Material.FLINT); - recipe.setIngredient('p', new RecipeChoice.MaterialChoice(Tag.PLANKS)); + recipe.setIngredient('p', new MaterialChoice(Tag.PLANKS)); recipe.setIngredient('s', Material.STICK); return recipe; } diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java index 7f38824..ab727e0 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java @@ -1,6 +1,8 @@ package com.shanebeestudios.survival.item.items.tools; +import com.shanebeestudios.survival.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -10,28 +12,21 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Shiv extends Item { public Shiv() { - ItemStack itemStack = ItemType.WOODEN_HOE.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - - int shiv_dmg = 4; - float shiv_spd = 1.8f; - - AttributeModifier i_shivDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, shiv_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_shivDamage); + ItemStack itemStack = ItemType.WOODEN_SWORD.createItemStack(); - AttributeModifier i_shivSpeed = new AttributeModifier(BASE_ATTACK_SPEED, shiv_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_shivSpeed); + AttributeModifier attackDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, 3, Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND); + AttributeModifier attackSpeed = new AttributeModifier(BASE_ATTACK_SPEED, -2.2, Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND); - itemStack.setItemMeta(itemMeta); + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, attackDamage) + .addModifier(Attribute.ATTACK_SPEED, attackSpeed) + .build()); - itemStack.unsetData(DataComponentTypes.REPAIRABLE); setupDefaults("shiv", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java index 7e97674..9ae4345 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java @@ -1,12 +1,19 @@ package com.shanebeestudios.survival.item.items.tools; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.util.BlockTags; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; +import io.papermc.paper.datacomponent.item.Tool; +import net.kyori.adventure.util.TriState; import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; @SuppressWarnings("UnstableApiUsage") public class Sickle extends Item { @@ -16,7 +23,27 @@ public class Sickle extends Item { public Sickle(String typeKey, Material recipeMaterial) { this.recipeMaterial = recipeMaterial; ItemStack itemStack = ItemType.WOODEN_HOE.createItemStack(); - itemStack.unsetData(DataComponentTypes.ATTRIBUTE_MODIFIERS); + + double damage = switch (typeKey) { + case "stone" -> 0; + case "iron" -> 1.0; + case "diamond" -> 2.0; + default -> -0.5; + }; + + AttributeModifier attackDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, damage, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND); + AttributeModifier attackSpeed = new AttributeModifier(BASE_ATTACK_SPEED, -3, AttributeModifier.Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND); + + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, attackDamage) + .addModifier(Attribute.ATTACK_SPEED, attackSpeed) + .build()); + + itemStack.setData(DataComponentTypes.TOOL, Tool.tool() + .defaultMiningSpeed(0.0001f) + .addRule(Tool.rule(getBlockTag(BlockTags.FARMABLE), 1.0f, TriState.TRUE)) + .build()); + setupDefaults(typeKey + "_sickle", itemStack); } diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 86f6d44..371698c 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -59,14 +59,17 @@ items: repair_percent: 0.85 hammer: name: "Hammer" + max_damage: 50 repair_cost: 0 repair_percent: 0.85 hatchet: name: "Hatchet" + max_damage: 50 repair_cost: 0 repair_percent: 0.85 mattock: name: "Mattock" + max_damage: 50 repair_cost: 0 repair_percent: 0.85 medic_kit: @@ -97,20 +100,20 @@ items: repair_cost: 2 repair_percent: 0.85 max_damage: 1400 - flint_sickle: - name: "Flint Sickle" - repair_cost: 0 - repair_percent: 1.0 - max_damage: 700 iron_sickle: name: "Iron Sickle" repair_cost: 1 repair_percent: 0.9 - max_damage: 100 + max_damage: 300 stone_sickle: name: "Stone Sickle" repair_cost: 0 repair_percent: 1.0 + max_damage: 100 + flint_sickle: + name: "Flint Sickle" + repair_cost: 0 + repair_percent: 1.0 max_damage: 50 # LEGENDARY TOOLS From 6c6b1a3f5797b8a75f3088d116b8a629337021de Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 14:24:41 -0800 Subject: [PATCH 086/133] block breaking updates --- .../survival/config/Config.java | 4 +- .../generator/BlockTagFileGenerator.java | 92 +-- .../survival/item/Recipes.java | 8 +- .../survival/item/items/tools/Sickle.java | 2 +- .../survival/listeners/block/BlockBreak.java | 247 ++++--- .../survival/util/BlockTags.java | 8 +- src/main/resources/block-tags.yml | 619 ++++++++---------- 7 files changed, 442 insertions(+), 538 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index 1397026..0320a8e 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -42,7 +42,7 @@ public class Config { public boolean survival_update_merchant_trades; public boolean survival_update_loot_tables; - public boolean break_only_with_sickle; + public boolean survival_break_only_with_sickle; public boolean survival_break_only_with_shovel; public boolean survival_break_only_with_axe; public boolean survival_break_only_with_pickaxe; @@ -291,7 +291,7 @@ private void loadSettings() { this.survival_update_merchant_trades = this.settings.getBoolean("survival.update-merchant-trades"); this.survival_update_loot_tables = this.settings.getBoolean("survival.update-loot-tables"); - this.break_only_with_sickle = this.settings.getBoolean("survival.break-only-with.sickle"); + this.survival_break_only_with_sickle = this.settings.getBoolean("survival.break-only-with.sickle"); this.survival_break_only_with_shovel = this.settings.getBoolean("survival.break-only-with.shovel"); this.survival_break_only_with_axe = this.settings.getBoolean("survival.break-only-with.axe"); this.survival_break_only_with_pickaxe = this.settings.getBoolean("survival.break-only-with.pickaxe"); diff --git a/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java b/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java index f8bbf22..eb7a116 100644 --- a/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java @@ -1,5 +1,7 @@ package com.shanebeestudios.survival.generator; +import io.papermc.paper.registry.keys.tags.BlockTypeTagKeys; +import org.bukkit.Keyed; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Registry; @@ -12,6 +14,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; @SuppressWarnings({"UnstableApiUsage", "UnusedReturnValue"}) @@ -39,7 +42,6 @@ public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { createConcreteTag(blocks); createCookingBlockTag(blocks); - createFarmableTag(blocks); createGlazedTerracottaTag(blocks); createOresTag(blocks); createOreTypeBlockTag(blocks); @@ -51,6 +53,7 @@ public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { createRequiresPickaxeTag(blocks); createRequiresShovelTag(blocks); createRequiresShearsTag(blocks); + createRequiresSickleTag(blocks); createRequiresHammerTag(blocks); @@ -64,28 +67,30 @@ public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { private void createGlazedTerracottaTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - Registry.BLOCK.forEach(block -> { - NamespacedKey namespacedKey = block.getKey(); - String key = namespacedKey.getKey(); - if (key.endsWith("_glazed_terracotta")) blocks.add(namespacedKey.toString()); + Registry.BLOCK.stream().map(Keyed::getKey) + .sorted(Comparator.comparing(NamespacedKey::toString)) + .toList().forEach(namespacedKey -> { + String key = namespacedKey.toString(); + if (key.endsWith("_glazed_terracotta")) blocks.add(key); }); section.set("glazed_terracotta", blocks); } private void createConcreteTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - Registry.BLOCK.forEach(block -> { - NamespacedKey namespacedKey = block.getKey(); - String key = namespacedKey.getKey(); - if (key.endsWith("_concrete")) blocks.add(namespacedKey.toString()); - }); + Registry.BLOCK.stream().map(Keyed::getKey) + .sorted(Comparator.comparing(NamespacedKey::toString)) + .toList().forEach(namespacedKey -> { + String key = namespacedKey.toString(); + if (key.endsWith("_concrete")) blocks.add(key); + }); section.set("concrete", blocks); } private void createStoneTypeTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); blocks.add("minecraft:stone"); - blocks.add("cobblestone"); + blocks.add("minecraft:cobblestone"); blocks.add("minecraft:mossy_cobblestone"); blocks.add("minecraft:infested_cobblestone"); blocks.add("minecraft:andesite"); @@ -136,7 +141,7 @@ private void createCookingBlockTag(@NotNull ConfigurationSection section) { private void createStorageBlockTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - blocks.add("#minecraft:shulker_boxes"); + blocks.add("#" + BlockTypeTagKeys.SHULKER_BOXES.key()); blocks.add("minecraft:chest"); blocks.add("minecraft:ender_chest"); blocks.add("minecraft:trapped_chest"); @@ -186,37 +191,38 @@ private void createOreTypeBlockTag(@NotNull ConfigurationSection section) { private void createOresTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - Registry.BLOCK.forEach(block -> { - String key = block.getKey().toString(); - if (key.endsWith("_ore")) blocks.add(key); - }); + Registry.BLOCK.stream().map(Keyed::getKey) + .sorted(Comparator.comparing(NamespacedKey::toString)) + .toList().forEach(namespacedKey -> { + String key = namespacedKey.toString(); + if (key.endsWith("_ore")) blocks.add(key); + }); section.set("ores", blocks); } - private void createFarmableTag(@NotNull ConfigurationSection section) { + private void createRequiresSickleTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); + blocks.add("#" + BlockTypeTagKeys.CROPS.key()); + blocks.add("minecraft:melon"); - blocks.add("minecraft:melon_stem"); blocks.add("minecraft:pumpkin"); - blocks.add("minecraft:pumpkin_stem"); blocks.add("minecraft:chorus_flower"); blocks.add("minecraft:chorus_plant"); - blocks.add("minecraft:carrots"); - blocks.add("minecraft:potatoes"); - blocks.add("minecraft:beetroots"); - blocks.add("minecraft:wheat"); blocks.add("minecraft:sweet_berry_bush"); blocks.add("minecraft:cocoa"); - section.set("farmable", blocks); + section.set("requires_sickle", blocks); } private void createRequiresAxeTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - for (Material value : Tag.MINEABLE_AXE.getValues()) { - if (!Tag.REPLACEABLE.isTagged(value)) blocks.add(value.getKey().toString()); + for (Material value : Tag.MINEABLE_AXE.getValues().stream().sorted(Comparator.comparing(material -> material.getKey().toString())).toList()) { + if (Tag.REPLACEABLE.isTagged(value)) continue; + if (Tag.CROPS.isTagged(value)) continue; + if (Tag.SWORD_EFFICIENT.isTagged(value)) continue; + blocks.add(value.getKey().toString()); } section.set("requires_axe", blocks); section.setInlineComments("requires_axe", List.of("Blocks which require an axe to break.")); @@ -225,7 +231,7 @@ private void createRequiresAxeTag(@NotNull ConfigurationSection section) { private void createRequiresPickaxeTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - blocks.add("#minecraft:mineable/pickaxe"); + blocks.add("#" + BlockTypeTagKeys.MINEABLE_PICKAXE.key()); section.set("requires_pickaxe", blocks); section.setInlineComments("requires_pickaxe", List.of("Blocks which require a pickaxe to break.")); @@ -233,9 +239,7 @@ private void createRequiresPickaxeTag(@NotNull ConfigurationSection section) { private void createRequiresShovelTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - for (Material value : Tag.MINEABLE_SHOVEL.getValues()) { - if (value != Material.GRAVEL) blocks.add(value.getKey().toString()); - } + blocks.add("#" + BlockTypeTagKeys.MINEABLE_SHOVEL.key()); section.set("requires_shovel", blocks); section.setInlineComments("requires_shovel", List.of("Blocks which require a shovel to break.")); @@ -253,20 +257,20 @@ private void createRequiresShearsTag(@NotNull ConfigurationSection section) { private void createRequiresHammerTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); - blocks.add("#minecraft:fence_gates"); - blocks.add("#minecraft:terracotta"); - blocks.add("#minecraft:shulker_boxes"); - blocks.add("#minecraft:beds"); - blocks.add("#minecraft:logs"); - blocks.add("#minecraft:stairs"); - blocks.add("#minecraft:slabs"); - blocks.add("#minecraft:planks"); - blocks.add("#minecraft:wooden_pressure_plates"); - blocks.add("#minecraft:wooden_fences"); - blocks.add("#minecraft:rails"); - blocks.add("#minecraft:banners"); - blocks.add("#minecraft:fences"); - blocks.add("#minecraft:signs"); + blocks.add("#" + BlockTypeTagKeys.FENCE_GATES.key()); + blocks.add("#" + BlockTypeTagKeys.TERRACOTTA.key()); + blocks.add("#" + BlockTypeTagKeys.SHULKER_BOXES.key()); + blocks.add("#" + BlockTypeTagKeys.BEDS.key()); + blocks.add("#" + BlockTypeTagKeys.LOGS.key()); + blocks.add("#" + BlockTypeTagKeys.STAIRS.key()); + blocks.add("#" + BlockTypeTagKeys.SLABS.key()); + blocks.add("#" + BlockTypeTagKeys.PLANKS.key()); + blocks.add("#" + BlockTypeTagKeys.WOODEN_PRESSURE_PLATES.key()); + blocks.add("#" + BlockTypeTagKeys.WOODEN_FENCES.key()); + blocks.add("#" + BlockTypeTagKeys.RAILS.key()); + blocks.add("#" + BlockTypeTagKeys.BANNERS.key()); + blocks.add("#" + BlockTypeTagKeys.FENCES.key()); + blocks.add("#" + BlockTypeTagKeys.SIGNS.key()); blocks.add("#survival_plus:glazed_terracotta"); blocks.add("#survival_plus:concrete"); diff --git a/src/main/java/com/shanebeestudios/survival/item/Recipes.java b/src/main/java/com/shanebeestudios/survival/item/Recipes.java index d29da4a..db9726b 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Recipes.java +++ b/src/main/java/com/shanebeestudios/survival/item/Recipes.java @@ -144,10 +144,10 @@ public static void init(Config config) { SHIV = register(config.survival_enabled, Items.SHIV.getRecipe()); HAMMER = register(config.survival_enabled, Items.HAMMER.getRecipe()); FIRESTRIKER = register(config.survival_enabled, Items.FIRESTRIKER.getRecipe()); - FLINT_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_flint, Items.FLINT_SICKLE.getRecipe()); - STONE_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_stone, Items.STONE_SICKLE.getRecipe()); - IRON_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_iron, Items.IRON_SICKLE.getRecipe()); - DIAMOND_SICKLE = register(config.survival_enabled && config.break_only_with_sickle && config.survival_sickle_diamond, Items.DIAMOND_SICKLE.getRecipe()); + FLINT_SICKLE = register(config.survival_enabled && config.survival_break_only_with_sickle && config.survival_sickle_flint, Items.FLINT_SICKLE.getRecipe()); + STONE_SICKLE = register(config.survival_enabled && config.survival_break_only_with_sickle && config.survival_sickle_stone, Items.STONE_SICKLE.getRecipe()); + IRON_SICKLE = register(config.survival_enabled && config.survival_break_only_with_sickle && config.survival_sickle_iron, Items.IRON_SICKLE.getRecipe()); + DIAMOND_SICKLE = register(config.survival_enabled && config.survival_break_only_with_sickle && config.survival_sickle_diamond, Items.DIAMOND_SICKLE.getRecipe()); WORKBENCH = register(config.survival_enabled && config.recipes_workbench, Items.WORKBENCH.getRecipe()); VALKYRIES_AXE = register(config.legendary_valkyrie, Items.VALKYRIES_AXE.getRecipe()); QUARTZ_PICKAXE = register(config.legendary_quartz_pickaxe, Items.QUARTZ_PICKAXE.getRecipe()); diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java index 9ae4345..8a07bab 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java +++ b/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java @@ -41,7 +41,7 @@ public Sickle(String typeKey, Material recipeMaterial) { itemStack.setData(DataComponentTypes.TOOL, Tool.tool() .defaultMiningSpeed(0.0001f) - .addRule(Tool.rule(getBlockTag(BlockTags.FARMABLE), 1.0f, TriState.TRUE)) + .addRule(Tool.rule(getBlockTag(BlockTags.REQUIRES_SICKLE), 1.0f, TriState.TRUE)) .build()); setupDefaults(typeKey + "_sickle", itemStack); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java index a41e3b6..6355efc 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java @@ -1,5 +1,12 @@ package com.shanebeestudios.survival.listeners.block; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.util.BlockTags; +import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.util.Utils; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; @@ -18,13 +25,6 @@ import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.BlockTags; -import com.shanebeestudios.survival.util.ItemUtils; -import com.shanebeestudios.survival.util.Utils; import java.util.Random; @@ -38,151 +38,134 @@ public BlockBreak(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); } - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onBlockBreak(BlockBreakEvent event) { - if (event.isCancelled()) return; Player player = event.getPlayer(); + if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) return; ItemStack tool = player.getInventory().getItemInMainHand(); Block block = event.getBlock(); Material material = block.getType(); - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - if (!Items.QUARTZ_PICKAXE.is(tool)) { - if (this.config.survival_break_only_with_shovel) { - if (!Tag.ITEMS_SHOVELS.isTagged(tool.getType())) { - if (BlockTags.REQUIRES_SHOVEL.isTagged(material)) { - event.setCancelled(true); - player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_shovel); - } - //Flint - if (material == Material.GRAVEL) { - event.setDropItems(false); - - Random rand = new Random(); - double chance = rand.nextDouble(); + if (Items.QUARTZ_PICKAXE.is(tool)) { + // TODO figure out what this is about + if (BlockTags.ORE_TYPE_BLOCK.isTagged(material) || BlockTags.ORES.isTagged(material)) { + block.getWorld().dropItemNaturally(block.getLocation().add(0.5, 0.1, 0.5), new ItemStack(material)); + } + return; + } - if (chance <= this.config.survival_drop_rate_flint) - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(Material.FLINT)); - } - } else { - Block above = block.getRelative(BlockFace.UP); - switch (block.getType()) { - case GRASS_BLOCK: - case DIRT: - case PODZOL: - case COARSE_DIRT: - case FARMLAND: - if (BlockTags.FARMABLE.isTagged(above.getType())) { - above.setType(Material.AIR); - } - } - } - } + if (this.config.survival_break_only_with_shovel) { + if (!Tag.ITEMS_SHOVELS.isTagged(tool.getType())) { + // Gravel drop flint + if (material == Material.GRAVEL) { + event.setDropItems(false); - if (this.config.survival_break_only_with_axe && !Tag.ITEMS_AXES.isTagged(tool.getType())) { - if (BlockTags.REQUIRES_AXE.isTagged(material)) { - event.setCancelled(true); - player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_axe); - } + Random rand = new Random(); + double chance = rand.nextDouble(); - //Fix half door glitch - if (Tag.DOORS.isTagged(material)) { - if (block.getRelative(BlockFace.UP).getType() == material) - block.getRelative(BlockFace.UP).getState().update(true); - if (block.getRelative(BlockFace.DOWN).getType() == material) - block.getRelative(BlockFace.DOWN).getState().update(true); - } + if (chance <= this.config.survival_drop_rate_flint) + block.getWorld().dropItemNaturally(block.getLocation().add(0.5, 0.1, 0.5), new ItemStack(Material.FLINT)); + return; + } else if (BlockTags.REQUIRES_SHOVEL.isTagged(material)) { + event.setCancelled(true); + player.updateInventory(); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_shovel); + return; } - if (this.config.survival_break_only_with_pickaxe && !Tag.ITEMS_PICKAXES.isTagged(tool.getType())) { - if (BlockTags.REQUIRES_PICKAXE.isTagged(material)) { - event.setCancelled(true); - player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_pick); - } + } else if (this.config.survival_break_only_with_sickle) { + // Prevent bypassing sickle by breaking block below + Block above = block.getRelative(BlockFace.UP); + if (BlockTags.REQUIRES_SICKLE.isTagged(above.getType())) { + above.setType(Material.AIR); } + return; + } + } - if (this.config.break_only_with_sickle) { - if (BlockTags.FARMABLE.isTagged(material)) { - if (!Items.Tags.SICKLES.isTagged(tool)) { - event.setCancelled(true); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_sickle); - } else { - event.setDropItems(false); - Location loc = event.getBlock().getLocation(); - int random = 1; - int multiplier = 1; - boolean fullyGrown = true; + if (this.config.survival_break_only_with_sickle && BlockTags.REQUIRES_SICKLE.isTagged(material)) { + if (!Items.Tags.SICKLES.isTagged(tool)) { + event.setCancelled(true); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_sickle); + } else { + event.setDropItems(false); + Location loc = event.getBlock().getLocation(); + int random = 1; + int damageItemAmount = 1; + boolean isFullyGrown = true; - if (event.getBlock().getBlockData() instanceof Ageable crop) { - fullyGrown = crop.getAge() == crop.getMaximumAge(); - } + if (event.getBlock().getBlockData() instanceof Ageable ageable) { + isFullyGrown = ageable.getAge() == ageable.getMaximumAge(); + } - // Flint/Stone sickles drop a chance of 0-1 items (not grown) or 1-2 (grown) - if (Items.FLINT_SICKLE.is(tool)) { - multiplier = 4; - random = fullyGrown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); - } - if (Items.STONE_SICKLE.is(tool)) { - multiplier = 2; - random = fullyGrown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); - } - // Iron/Diamond sickles drop a chance of 1 (not grown) or 2-4 items (grown) - if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { - random = fullyGrown ? new Random().nextInt(2) + 3 : 1; - } + // Flint/Stone sickles drop a chance of 0-1 items (not grown) or 1-2 (grown) + if (Items.FLINT_SICKLE.is(tool)) { + damageItemAmount = 4; + random = isFullyGrown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); + } else if (Items.STONE_SICKLE.is(tool)) { + damageItemAmount = 2; + random = isFullyGrown ? new Random().nextInt(2) + 1 : new Random().nextInt(2); + } + // Iron/Diamond sickles drop a chance of 1 (not grown) or 2-4 items (grown) + else if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { + random = isFullyGrown ? new Random().nextInt(2) + 3 : 1; + } - for (Material drop : Utils.getDrops(material, fullyGrown)) { - if (drop != Material.AIR && random != 0) { - assert loc.getWorld() != null; - if (drop == Material.PUMPKIN) { // prevent duping pumpkins - random = 1; - } - loc.getWorld().dropItemNaturally(loc.add(0.5, 0.1, 0.5), new ItemStack(drop, random)); - } - } - if (tool.getType().getMaxDurability() < ItemUtils.getDurability(tool) + multiplier) { - player.getInventory().setItemInMainHand(null); - player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); - return; - } - ItemUtils.setDurability(tool, ItemUtils.getDurability(tool) + multiplier); - player.updateInventory(); + for (Material drop : Utils.getDrops(material, isFullyGrown)) { + if (drop != Material.AIR && random != 0) { + assert loc.getWorld() != null; + if (drop == Material.PUMPKIN) { // prevent duping pumpkins + random = 1; } + loc.getWorld().dropItemNaturally(loc.add(0.5, 0.1, 0.5), new ItemStack(drop, random)); } } + ItemUtils.damageItem(player, tool, damageItemAmount); + } + return; + } - if (!(tool.getType() == Material.SHEARS)) { - if (this.config.survival_break_only_with_shears) { - if (BlockTags.REQUIRES_SHEARS.isTagged(material)) { - event.setCancelled(true); - player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_shear); - } - } + if (this.config.survival_break_only_with_axe && !Tag.ITEMS_AXES.isTagged(tool.getType())) { + if (BlockTags.REQUIRES_AXE.isTagged(material)) { + event.setCancelled(true); + player.updateInventory(); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_axe); + return; + } + } - //Sticks - Maybe this should be removed since 1.14+ leaves drop sticks?!?!? - if (Tag.LEAVES.isTagged(material)) { - Random rand = new Random(); - double chance = rand.nextDouble(); + if (this.config.survival_break_only_with_pickaxe && !Tag.ITEMS_PICKAXES.isTagged(tool.getType())) { + if (BlockTags.REQUIRES_PICKAXE.isTagged(material)) { + event.setCancelled(true); + player.updateInventory(); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_pick); + return; + } + } - if (chance <= this.config.survival_drop_rate_stick) - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(Material.STICK)); - } - } - if (this.config.recipes_workbench && material == Material.CRAFTING_TABLE && !event.isCancelled()) { - event.setDropItems(false); - ItemStack workbench = Items.WORKBENCH.getItemStack(); - block.getWorld().dropItem(block.getLocation(), workbench); - } - } else { - if (BlockTags.ORE_TYPE_BLOCK.isTagged(material) || BlockTags.ORES.isTagged(material)) { - event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(material)); - } + if (this.config.survival_break_only_with_shears && tool.getType() != Material.SHEARS) { + //Sticks - Maybe this should be removed since 1.14+ leaves drop sticks?!?!? + if (Tag.LEAVES.isTagged(material)) { + Random rand = new Random(); + double chance = rand.nextDouble(); + + if (chance <= this.config.survival_drop_rate_stick) + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation().add(0.5, 0.1, 0.5), new ItemStack(Material.STICK)); + return; } + if (BlockTags.REQUIRES_SHEARS.isTagged(material)) { + event.setCancelled(true); + player.updateInventory(); + Utils.sendColoredMini(player, "" + this.lang.task_must_use_shear); + return; + } + } + + if (this.config.recipes_workbench && material == Material.CRAFTING_TABLE && !event.isCancelled()) { + event.setDropItems(false); + ItemStack workbench = Items.WORKBENCH.getItemStack(); + block.getWorld().dropItem(block.getLocation(), workbench); } } @@ -190,7 +173,7 @@ private void onBlockBreak(BlockBreakEvent event) { @EventHandler private void onHarvest(PlayerInteractEvent e) { if (e.isCancelled()) return; - if (!this.config.break_only_with_sickle) return; + if (!this.config.survival_break_only_with_sickle) return; if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK) return; Player player = e.getPlayer(); @@ -258,10 +241,10 @@ private void onHarvest(PlayerInteractEvent e) { @EventHandler private void onWaterBreakCrops(BlockPhysicsEvent event) { - if (!this.config.break_only_with_sickle) return; + if (!this.config.survival_break_only_with_sickle) return; if (event.getSourceBlock().getType() == Material.WATER) { Material type = event.getBlock().getType(); - if (BlockTags.FARMABLE.isTagged(type)) { + if (BlockTags.REQUIRES_SICKLE.isTagged(type)) { if (type == Material.MELON || type == Material.PUMPKIN) return; event.getBlock().setType(Material.AIR); } @@ -272,7 +255,7 @@ private void onWaterBreakCrops(BlockPhysicsEvent event) { @EventHandler(priority = EventPriority.HIGHEST) private void onTrample(PlayerInteractEvent event) { if (event.isCancelled()) return; - if (!this.config.break_only_with_sickle) return; + if (!this.config.survival_break_only_with_sickle) return; if (event.getAction() == Action.PHYSICAL) { if (event.getClickedBlock() == null) return; if (event.getClickedBlock().getType() == Material.FARMLAND) { diff --git a/src/main/java/com/shanebeestudios/survival/util/BlockTags.java b/src/main/java/com/shanebeestudios/survival/util/BlockTags.java index 84c254c..ddf70af 100644 --- a/src/main/java/com/shanebeestudios/survival/util/BlockTags.java +++ b/src/main/java/com/shanebeestudios/survival/util/BlockTags.java @@ -35,10 +35,6 @@ public static void initialize() { * Cooking blocks (furnace, smoker, blast furnace) */ public static Tag COOKING_BLOCK = getTag("cooking_block"); - /** - * Blocks that are farmable - */ - public static Tag FARMABLE = getTag("farmable"); /** * All glazed terracotta */ @@ -79,6 +75,10 @@ public static void initialize() { * Blocks that require shears to break */ public static Tag REQUIRES_SHEARS = getTag("requires_shears"); + /** + * Blocks that requires a sickle to break + */ + public static Tag REQUIRES_SICKLE = getTag("requires_sickle"); /** * Blocks that require a hammer to build */ diff --git a/src/main/resources/block-tags.yml b/src/main/resources/block-tags.yml index f17c1f6..5b85243 100644 --- a/src/main/resources/block-tags.yml +++ b/src/main/resources/block-tags.yml @@ -11,74 +11,69 @@ blocks: concrete: - minecraft:black_concrete - - minecraft:green_concrete - - minecraft:magenta_concrete - - minecraft:light_blue_concrete - - minecraft:gray_concrete - - minecraft:yellow_concrete - - minecraft:white_concrete + - minecraft:blue_concrete - minecraft:brown_concrete - - minecraft:lime_concrete - minecraft:cyan_concrete - - minecraft:blue_concrete - - minecraft:purple_concrete + - minecraft:gray_concrete + - minecraft:green_concrete + - minecraft:light_blue_concrete - minecraft:light_gray_concrete - - minecraft:red_concrete + - minecraft:lime_concrete + - minecraft:magenta_concrete - minecraft:orange_concrete - minecraft:pink_concrete + - minecraft:purple_concrete + - minecraft:red_concrete + - minecraft:white_concrete + - minecraft:yellow_concrete cooking_block: - minecraft:furnace - minecraft:blast_furnace - minecraft:smoker - farmable: + requires_sickle: + - '#minecraft:crops' - minecraft:melon - - minecraft:melon_stem - minecraft:pumpkin - - minecraft:pumpkin_stem - minecraft:chorus_flower - minecraft:chorus_plant - - minecraft:carrots - - minecraft:potatoes - - minecraft:beetroots - - minecraft:wheat - minecraft:sweet_berry_bush - minecraft:cocoa glazed_terracotta: - - minecraft:pink_glazed_terracotta + - minecraft:black_glazed_terracotta - minecraft:blue_glazed_terracotta - - minecraft:cyan_glazed_terracotta - - minecraft:magenta_glazed_terracotta - minecraft:brown_glazed_terracotta - - minecraft:light_blue_glazed_terracotta - - minecraft:purple_glazed_terracotta - - minecraft:green_glazed_terracotta - - minecraft:orange_glazed_terracotta + - minecraft:cyan_glazed_terracotta - minecraft:gray_glazed_terracotta - - minecraft:black_glazed_terracotta - - minecraft:yellow_glazed_terracotta + - minecraft:green_glazed_terracotta + - minecraft:light_blue_glazed_terracotta - minecraft:light_gray_glazed_terracotta - - minecraft:white_glazed_terracotta - - minecraft:red_glazed_terracotta - minecraft:lime_glazed_terracotta + - minecraft:magenta_glazed_terracotta + - minecraft:orange_glazed_terracotta + - minecraft:pink_glazed_terracotta + - minecraft:purple_glazed_terracotta + - minecraft:red_glazed_terracotta + - minecraft:white_glazed_terracotta + - minecraft:yellow_glazed_terracotta ores: - - minecraft:nether_gold_ore - - minecraft:deepslate_gold_ore - - minecraft:lapis_ore - - minecraft:diamond_ore - - minecraft:redstone_ore + - minecraft:coal_ore + - minecraft:copper_ore + - minecraft:deepslate_coal_ore - minecraft:deepslate_copper_ore - - minecraft:deepslate_lapis_ore - - minecraft:iron_ore + - minecraft:deepslate_diamond_ore - minecraft:deepslate_emerald_ore - - minecraft:deepslate_coal_ore + - minecraft:deepslate_gold_ore - minecraft:deepslate_iron_ore - - minecraft:nether_quartz_ore + - minecraft:deepslate_lapis_ore - minecraft:deepslate_redstone_ore + - minecraft:diamond_ore - minecraft:emerald_ore - - minecraft:copper_ore - minecraft:gold_ore - - minecraft:deepslate_diamond_ore - - minecraft:coal_ore + - minecraft:iron_ore + - minecraft:lapis_ore + - minecraft:nether_gold_ore + - minecraft:nether_quartz_ore + - minecraft:redstone_ore ore_type_block: - minecraft:coal_block - minecraft:diamond_block @@ -91,7 +86,7 @@ blocks: - minecraft:netherite_block stone_type: - minecraft:stone - - cobblestone + - minecraft:cobblestone - minecraft:mossy_cobblestone - minecraft:infested_cobblestone - minecraft:andesite @@ -150,352 +145,274 @@ blocks: - minecraft:respawn_anchor - minecraft:lodestone requires_axe: # Blocks which require an axe to break. - - minecraft:jungle_wood - - minecraft:dark_oak_sapling - - minecraft:birch_door - - minecraft:spruce_fence - - minecraft:warped_slab - - minecraft:oak_trapdoor - - minecraft:warped_wall_hanging_sign - - minecraft:birch_trapdoor + - minecraft:acacia_button + - minecraft:acacia_door + - minecraft:acacia_fence + - minecraft:acacia_fence_gate + - minecraft:acacia_hanging_sign - minecraft:acacia_log - - minecraft:crimson_stairs + - minecraft:acacia_planks + - minecraft:acacia_pressure_plate + - minecraft:acacia_sign + - minecraft:acacia_slab + - minecraft:acacia_stairs + - minecraft:acacia_trapdoor + - minecraft:acacia_wall_hanging_sign + - minecraft:acacia_wall_sign + - minecraft:acacia_wood + - minecraft:bamboo + - minecraft:bamboo_block + - minecraft:bamboo_button + - minecraft:bamboo_door + - minecraft:bamboo_fence + - minecraft:bamboo_fence_gate + - minecraft:bamboo_hanging_sign + - minecraft:bamboo_mosaic + - minecraft:bamboo_mosaic_slab + - minecraft:bamboo_mosaic_stairs + - minecraft:bamboo_planks + - minecraft:bamboo_pressure_plate + - minecraft:bamboo_sign + - minecraft:bamboo_slab + - minecraft:bamboo_stairs + - minecraft:bamboo_trapdoor + - minecraft:bamboo_wall_hanging_sign + - minecraft:bamboo_wall_sign + - minecraft:barrel + - minecraft:bee_nest + - minecraft:beehive + - minecraft:birch_button + - minecraft:birch_door + - minecraft:birch_fence + - minecraft:birch_fence_gate + - minecraft:birch_hanging_sign + - minecraft:birch_log - minecraft:birch_planks - - minecraft:crimson_button - - minecraft:creaking_heart - - minecraft:chest - - minecraft:stripped_warped_stem - - minecraft:lime_banner - - minecraft:dark_oak_sign - - minecraft:fletching_table - - minecraft:stripped_acacia_log - - minecraft:cherry_pressure_plate - - minecraft:crimson_pressure_plate - - minecraft:spruce_wall_hanging_sign - - minecraft:oak_log - - minecraft:warped_hanging_sign + - minecraft:birch_pressure_plate + - minecraft:birch_sign - minecraft:birch_slab - - minecraft:melon_stem - - minecraft:spruce_button - - minecraft:bamboo_mosaic_slab - - minecraft:stripped_crimson_hyphae - - minecraft:pale_oak_trapdoor - - minecraft:potatoes - - minecraft:spruce_log - - minecraft:big_dripleaf - - minecraft:cherry_sapling - - minecraft:green_wall_banner - - minecraft:acacia_fence + - minecraft:birch_stairs + - minecraft:birch_trapdoor + - minecraft:birch_wall_hanging_sign + - minecraft:birch_wall_sign + - minecraft:birch_wood + - minecraft:black_banner - minecraft:black_wall_banner - - minecraft:cyan_wall_banner - - minecraft:magenta_wall_banner - - minecraft:pale_oak_fence_gate - - minecraft:oak_sign - - minecraft:gray_wall_banner - - minecraft:oak_wood - - minecraft:acacia_slab - - minecraft:jungle_trapdoor - - minecraft:mangrove_log - - minecraft:dark_oak_button - - minecraft:birch_fence - - minecraft:cherry_wall_sign - - minecraft:mangrove_wall_sign - - minecraft:orange_wall_banner - - minecraft:cherry_planks + - minecraft:blue_banner + - minecraft:blue_wall_banner + - minecraft:bookshelf + - minecraft:brown_banner - minecraft:brown_mushroom_block - - minecraft:mangrove_trapdoor - - minecraft:stripped_warped_hyphae - - minecraft:bamboo_door - - minecraft:jungle_stairs - - minecraft:ladder - - minecraft:spruce_wood - - minecraft:acacia_button - - minecraft:crafting_table - - minecraft:crimson_fence - - minecraft:bamboo - - minecraft:pale_oak_fence - - minecraft:cherry_wall_hanging_sign - - minecraft:stripped_oak_log - - minecraft:cherry_stairs - - minecraft:oak_fence - - minecraft:cave_vines - - minecraft:yellow_banner - - minecraft:dark_oak_planks - - minecraft:jungle_slab - minecraft:brown_wall_banner - - minecraft:pink_banner - - minecraft:jungle_wall_hanging_sign - - minecraft:bamboo_fence_gate - - minecraft:jungle_door - - minecraft:stripped_spruce_wood + - minecraft:campfire + - minecraft:cartography_table + - minecraft:cherry_button + - minecraft:cherry_door + - minecraft:cherry_fence + - minecraft:cherry_fence_gate + - minecraft:cherry_hanging_sign + - minecraft:cherry_log + - minecraft:cherry_planks + - minecraft:cherry_pressure_plate - minecraft:cherry_sign - - minecraft:stripped_mangrove_log - - minecraft:acacia_sapling - - minecraft:birch_pressure_plate - - minecraft:acacia_wood - - minecraft:oak_door - - minecraft:bamboo_wall_hanging_sign - - minecraft:blue_wall_banner + - minecraft:cherry_slab + - minecraft:cherry_stairs + - minecraft:cherry_trapdoor + - minecraft:cherry_wall_hanging_sign + - minecraft:cherry_wall_sign + - minecraft:cherry_wood + - minecraft:chest + - minecraft:chiseled_bookshelf + - minecraft:composter + - minecraft:crafting_table + - minecraft:creaking_heart + - minecraft:crimson_button - minecraft:crimson_door - - minecraft:oak_sapling - - minecraft:mangrove_hanging_sign - - minecraft:pale_oak_slab - - minecraft:stripped_dark_oak_wood + - minecraft:crimson_fence + - minecraft:crimson_fence_gate + - minecraft:crimson_hanging_sign + - minecraft:crimson_hyphae + - minecraft:crimson_planks + - minecraft:crimson_pressure_plate + - minecraft:crimson_sign + - minecraft:crimson_slab + - minecraft:crimson_stairs + - minecraft:crimson_stem - minecraft:crimson_trapdoor + - minecraft:crimson_wall_hanging_sign + - minecraft:crimson_wall_sign + - minecraft:cyan_banner + - minecraft:cyan_wall_banner + - minecraft:dark_oak_button + - minecraft:dark_oak_door + - minecraft:dark_oak_fence - minecraft:dark_oak_fence_gate - - minecraft:stripped_spruce_log - - minecraft:campfire - - minecraft:light_blue_wall_banner - - minecraft:pale_oak_log - - minecraft:azalea - - minecraft:acacia_hanging_sign - - minecraft:stripped_jungle_log - - minecraft:stripped_jungle_wood - - minecraft:red_banner - - minecraft:acacia_fence_gate - - minecraft:crimson_slab + - minecraft:dark_oak_hanging_sign + - minecraft:dark_oak_log + - minecraft:dark_oak_planks - minecraft:dark_oak_pressure_plate - - minecraft:birch_log - - minecraft:chorus_flower - - minecraft:stripped_cherry_wood - - minecraft:cherry_fence - - minecraft:bamboo_wall_sign - - minecraft:bamboo_trapdoor - - minecraft:twisting_vines - - minecraft:pale_oak_wood + - minecraft:dark_oak_sign - minecraft:dark_oak_slab - - minecraft:bamboo_fence - - minecraft:spruce_pressure_plate - - minecraft:birch_wood - - minecraft:spruce_slab - - minecraft:stripped_mangrove_wood - - minecraft:spruce_planks - - minecraft:lily_pad - - minecraft:beehive - - minecraft:yellow_wall_banner - - minecraft:mangrove_fence - - minecraft:lectern - - minecraft:orange_banner - - minecraft:oak_stairs - - minecraft:acacia_door - - minecraft:white_banner - - minecraft:oak_pressure_plate - - minecraft:jungle_hanging_sign - - minecraft:weeping_vines - - minecraft:melon - - minecraft:jungle_sign - - minecraft:jungle_fence - - minecraft:beetroots - - minecraft:green_banner - - minecraft:red_mushroom - - minecraft:oak_hanging_sign - - minecraft:spruce_trapdoor - - minecraft:bee_nest - - minecraft:acacia_wall_hanging_sign - - minecraft:pale_oak_stairs + - minecraft:dark_oak_stairs + - minecraft:dark_oak_trapdoor - minecraft:dark_oak_wall_hanging_sign - - minecraft:mangrove_planks - - minecraft:mangrove_wood - - minecraft:bamboo_block - - minecraft:acacia_sign - - minecraft:acacia_pressure_plate - minecraft:dark_oak_wall_sign - - minecraft:light_gray_banner - - minecraft:pale_oak_sign - - minecraft:loom - - minecraft:smithing_table - - minecraft:bamboo_pressure_plate - - minecraft:wheat - - minecraft:warped_pressure_plate - - minecraft:purple_wall_banner - - minecraft:black_banner - - minecraft:bamboo_stairs - - minecraft:spruce_stairs - - minecraft:warped_trapdoor - - minecraft:stripped_cherry_log - - minecraft:pale_oak_sapling - - minecraft:cyan_banner - - minecraft:acacia_wall_sign + - minecraft:dark_oak_wood + - minecraft:daylight_detector + - minecraft:fletching_table + - minecraft:gray_banner + - minecraft:gray_wall_banner + - minecraft:green_banner + - minecraft:green_wall_banner + - minecraft:jukebox + - minecraft:jungle_button + - minecraft:jungle_door + - minecraft:jungle_fence + - minecraft:jungle_fence_gate + - minecraft:jungle_hanging_sign - minecraft:jungle_log - - minecraft:bamboo_button - - minecraft:birch_sapling - - minecraft:mangrove_pressure_plate - - minecraft:dark_oak_stairs - - minecraft:warped_stem - - minecraft:cocoa - - minecraft:pale_oak_door - - minecraft:bamboo_sign - - minecraft:crimson_sign - - minecraft:soul_campfire - - minecraft:purple_banner + - minecraft:jungle_planks + - minecraft:jungle_pressure_plate + - minecraft:jungle_sign + - minecraft:jungle_slab + - minecraft:jungle_stairs + - minecraft:jungle_trapdoor + - minecraft:jungle_wall_hanging_sign + - minecraft:jungle_wall_sign + - minecraft:jungle_wood + - minecraft:ladder + - minecraft:lectern - minecraft:light_blue_banner + - minecraft:light_blue_wall_banner + - minecraft:light_gray_banner + - minecraft:light_gray_wall_banner + - minecraft:lime_banner + - minecraft:lime_wall_banner + - minecraft:loom - minecraft:magenta_banner - - minecraft:pink_wall_banner - - minecraft:birch_button - - minecraft:sugar_cane - - minecraft:pale_oak_pressure_plate - - minecraft:spruce_sign - - minecraft:composter - - minecraft:mangrove_slab - - minecraft:cherry_wood - - minecraft:cherry_fence_gate - - minecraft:pale_oak_planks - - minecraft:warped_sign - - minecraft:crimson_fungus - - minecraft:stripped_pale_oak_wood - - minecraft:stripped_bamboo_block - - minecraft:pale_oak_button - - minecraft:bamboo_planks - - minecraft:brown_banner - - minecraft:flowering_azalea - - minecraft:dark_oak_hanging_sign + - minecraft:magenta_wall_banner + - minecraft:mangrove_button + - minecraft:mangrove_door + - minecraft:mangrove_fence + - minecraft:mangrove_fence_gate + - minecraft:mangrove_hanging_sign + - minecraft:mangrove_log + - minecraft:mangrove_planks + - minecraft:mangrove_pressure_plate + - minecraft:mangrove_roots - minecraft:mangrove_sign - - minecraft:white_wall_banner - - minecraft:acacia_trapdoor + - minecraft:mangrove_slab + - minecraft:mangrove_stairs + - minecraft:mangrove_trapdoor + - minecraft:mangrove_wall_hanging_sign + - minecraft:mangrove_wall_sign + - minecraft:mangrove_wood - minecraft:mushroom_stem - - minecraft:brown_mushroom - - minecraft:blue_banner - - minecraft:jungle_button - - minecraft:crimson_hanging_sign - - minecraft:daylight_detector - - minecraft:jack_o_lantern + - minecraft:note_block + - minecraft:oak_button + - minecraft:oak_door + - minecraft:oak_fence - minecraft:oak_fence_gate + - minecraft:oak_hanging_sign + - minecraft:oak_log + - minecraft:oak_planks + - minecraft:oak_pressure_plate + - minecraft:oak_sign + - minecraft:oak_slab + - minecraft:oak_stairs + - minecraft:oak_trapdoor + - minecraft:oak_wall_hanging_sign - minecraft:oak_wall_sign - - minecraft:attached_pumpkin_stem - - minecraft:carved_pumpkin - - minecraft:crimson_fence_gate - - minecraft:pumpkin - - minecraft:dark_oak_log - - minecraft:oak_button - - minecraft:jungle_planks - - minecraft:jungle_sapling - - minecraft:warped_wall_sign - - minecraft:birch_stairs - - minecraft:dark_oak_trapdoor - - minecraft:cherry_door - - minecraft:jukebox + - minecraft:oak_wood + - minecraft:orange_banner + - minecraft:orange_wall_banner + - minecraft:pale_oak_button + - minecraft:pale_oak_door + - minecraft:pale_oak_fence + - minecraft:pale_oak_fence_gate + - minecraft:pale_oak_hanging_sign + - minecraft:pale_oak_log + - minecraft:pale_oak_planks + - minecraft:pale_oak_pressure_plate + - minecraft:pale_oak_sign + - minecraft:pale_oak_slab + - minecraft:pale_oak_stairs + - minecraft:pale_oak_trapdoor - minecraft:pale_oak_wall_hanging_sign - - minecraft:dark_oak_fence - - minecraft:spruce_door - - minecraft:birch_wall_hanging_sign - - minecraft:red_wall_banner - - minecraft:birch_fence_gate - - minecraft:chorus_plant - - minecraft:crimson_stem - - minecraft:mangrove_propagule - - minecraft:bamboo_slab - - minecraft:crimson_planks - - minecraft:stripped_acacia_wood - - minecraft:warped_hyphae - - minecraft:mangrove_fence_gate - - minecraft:birch_sign - - minecraft:sweet_berry_bush - - minecraft:mangrove_button - - minecraft:spruce_hanging_sign - - minecraft:jungle_fence_gate - - minecraft:oak_wall_hanging_sign - minecraft:pale_oak_wall_sign - - minecraft:oak_slab + - minecraft:pale_oak_wood + - minecraft:pink_banner + - minecraft:pink_wall_banner + - minecraft:purple_banner + - minecraft:purple_wall_banner + - minecraft:red_banner - minecraft:red_mushroom_block - - minecraft:birch_hanging_sign + - minecraft:red_wall_banner + - minecraft:scaffolding + - minecraft:smithing_table + - minecraft:soul_campfire + - minecraft:spruce_button + - minecraft:spruce_door + - minecraft:spruce_fence + - minecraft:spruce_fence_gate + - minecraft:spruce_hanging_sign + - minecraft:spruce_log + - minecraft:spruce_planks + - minecraft:spruce_pressure_plate + - minecraft:spruce_sign + - minecraft:spruce_slab + - minecraft:spruce_stairs + - minecraft:spruce_trapdoor + - minecraft:spruce_wall_hanging_sign - minecraft:spruce_wall_sign - - minecraft:jungle_wall_sign - - minecraft:birch_wall_sign - - minecraft:weeping_vines_plant - - minecraft:spore_blossom - - minecraft:warped_door - - minecraft:chiseled_bookshelf - - minecraft:nether_wart - - minecraft:acacia_stairs - - minecraft:small_dripleaf - - minecraft:bamboo_hanging_sign + - minecraft:spruce_wood + - minecraft:stripped_acacia_log + - minecraft:stripped_acacia_wood + - minecraft:stripped_bamboo_block - minecraft:stripped_birch_log - - minecraft:cherry_log - - minecraft:cherry_hanging_sign - - minecraft:mangrove_stairs + - minecraft:stripped_birch_wood + - minecraft:stripped_cherry_log + - minecraft:stripped_cherry_wood + - minecraft:stripped_crimson_hyphae + - minecraft:stripped_crimson_stem - minecraft:stripped_dark_oak_log - - minecraft:cherry_slab - - minecraft:spruce_sapling + - minecraft:stripped_dark_oak_wood + - minecraft:stripped_jungle_log + - minecraft:stripped_jungle_wood + - minecraft:stripped_mangrove_log + - minecraft:stripped_mangrove_wood + - minecraft:stripped_oak_log - minecraft:stripped_oak_wood - - minecraft:pale_oak_hanging_sign - - minecraft:attached_melon_stem - - minecraft:bamboo_mosaic_stairs - - minecraft:oak_planks - - minecraft:warped_fence_gate - - minecraft:light_gray_wall_banner - - minecraft:stripped_crimson_stem + - minecraft:stripped_pale_oak_log + - minecraft:stripped_pale_oak_wood + - minecraft:stripped_spruce_log + - minecraft:stripped_spruce_wood + - minecraft:stripped_warped_hyphae + - minecraft:stripped_warped_stem - minecraft:trapped_chest - - minecraft:big_dripleaf_stem - - minecraft:stripped_birch_wood - - minecraft:mangrove_roots - - minecraft:dark_oak_wood - - minecraft:scaffolding - minecraft:warped_button - - minecraft:barrel - - minecraft:jungle_pressure_plate + - minecraft:warped_door - minecraft:warped_fence - - minecraft:bamboo_mosaic - - minecraft:cave_vines_plant - - minecraft:bookshelf - - minecraft:acacia_planks - - minecraft:twisting_vines_plant - - minecraft:mangrove_wall_hanging_sign + - minecraft:warped_fence_gate + - minecraft:warped_hanging_sign + - minecraft:warped_hyphae - minecraft:warped_planks - - minecraft:gray_banner - - minecraft:spruce_fence_gate - - minecraft:crimson_wall_hanging_sign - - minecraft:mangrove_door - - minecraft:pumpkin_stem + - minecraft:warped_pressure_plate + - minecraft:warped_sign + - minecraft:warped_slab - minecraft:warped_stairs - - minecraft:cherry_button - - minecraft:cherry_trapdoor - - minecraft:note_block - - minecraft:cartography_table - - minecraft:dark_oak_door - - minecraft:stripped_pale_oak_log - - minecraft:carrots - - minecraft:crimson_hyphae - - minecraft:crimson_wall_sign - - minecraft:warped_fungus - - minecraft:lime_wall_banner + - minecraft:warped_stem + - minecraft:warped_trapdoor + - minecraft:warped_wall_hanging_sign + - minecraft:warped_wall_sign + - minecraft:white_banner + - minecraft:white_wall_banner + - minecraft:yellow_banner + - minecraft:yellow_wall_banner requires_pickaxe: # Blocks which require a pickaxe to break. - '#minecraft:mineable/pickaxe' requires_shovel: # Blocks which require a shovel to break. - - minecraft:mud - - minecraft:magenta_concrete_powder - - minecraft:light_blue_concrete_powder - - minecraft:yellow_concrete_powder - - minecraft:sand - - minecraft:snow_block - - minecraft:farmland - - minecraft:muddy_mangrove_roots - - minecraft:cyan_concrete_powder - - minecraft:green_concrete_powder - - minecraft:light_gray_concrete_powder - - minecraft:purple_concrete_powder - - minecraft:brown_concrete_powder - - minecraft:coarse_dirt - - minecraft:dirt - - minecraft:rooted_dirt - - minecraft:lime_concrete_powder - - minecraft:soul_sand - - minecraft:soul_soil - - minecraft:red_concrete_powder - - minecraft:white_concrete_powder - - minecraft:black_concrete_powder - - minecraft:dirt_path - - minecraft:blue_concrete_powder - - minecraft:snow - - minecraft:pink_concrete_powder - - minecraft:podzol - - minecraft:suspicious_gravel - - minecraft:red_sand - - minecraft:grass_block - - minecraft:clay - - minecraft:orange_concrete_powder - - minecraft:suspicious_sand - - minecraft:gray_concrete_powder - - minecraft:mycelium + - '#minecraft:mineable/shovel' requires_shears: # Blocks which require shears to break. - minecraft:cobweb - minecraft:tripwire From 5afeb9197e6145c1d727d8ba0d2c69b57180f426 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 15:20:31 -0800 Subject: [PATCH 087/133] Delayed messages --- .../survival/SurvivalPlugin.java | 7 + .../survival/listeners/EventManager.java | 16 +-- ...lockBreak.java => BlockBreakListener.java} | 31 ++--- ...lockPlace.java => BlockPlaceListener.java} | 24 ++-- .../survival/listeners/item/Bow.java | 67 --------- .../survival/listeners/item/BowListener.java | 67 +++++++++ ...ngHook.java => GrapplingHookListener.java} | 24 ++-- .../survival/managers/MessageManager.java | 127 ++++++++++++++++++ 8 files changed, 249 insertions(+), 114 deletions(-) rename src/main/java/com/shanebeestudios/survival/listeners/block/{BlockBreak.java => BlockBreakListener.java} (90%) rename src/main/java/com/shanebeestudios/survival/listeners/block/{BlockPlace.java => BlockPlaceListener.java} (87%) delete mode 100644 src/main/java/com/shanebeestudios/survival/listeners/item/Bow.java create mode 100644 src/main/java/com/shanebeestudios/survival/listeners/item/BowListener.java rename src/main/java/com/shanebeestudios/survival/listeners/item/{GrapplingHook.java => GrapplingHookListener.java} (86%) create mode 100644 src/main/java/com/shanebeestudios/survival/managers/MessageManager.java diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index 50f1f63..37ce0e4 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival; +import com.shanebeestudios.survival.managers.MessageManager; import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPIBukkitConfig; import dev.jorel.commandapi.exceptions.UnsupportedVersionException; @@ -64,6 +65,7 @@ public class SurvivalPlugin extends JavaPlugin implements Listener { private TaskManager taskManager; private LootManager lootManager; private RecipeManager recipeManager; + private MessageManager messageManager; // Other private String prefix; @@ -144,6 +146,7 @@ public void onEnable() { scoreBoardManager = new ScoreBoardManager(this); lootManager = new LootManager(this); recipeManager = new RecipeManager(this); + this.messageManager = new MessageManager(this); // LOAD PLAYER DATA - (during a reload if players are still online) playerDataLoader(true); @@ -339,6 +342,10 @@ public RecipeManager getRecipeManager() { return recipeManager; } + public MessageManager getMessageManager() { + return this.messageManager; + } + /** Get the main SurvivalPlus config * @return SurvivalPlus config */ diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 89e31d5..17f01aa 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -5,8 +5,8 @@ import org.bukkit.plugin.PluginManager; import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.listeners.block.BlockBreak; -import com.shanebeestudios.survival.listeners.block.BlockPlace; +import com.shanebeestudios.survival.listeners.block.BlockBreakListener; +import com.shanebeestudios.survival.listeners.block.BlockPlaceListener; import com.shanebeestudios.survival.listeners.block.Campfire; import com.shanebeestudios.survival.listeners.block.Chairs; import com.shanebeestudios.survival.listeners.block.SnowGeneration; @@ -21,14 +21,14 @@ import com.shanebeestudios.survival.listeners.entity.PiglinBarter; import com.shanebeestudios.survival.listeners.item.BeetrootStrength; import com.shanebeestudios.survival.listeners.item.BlazeSword; -import com.shanebeestudios.survival.listeners.item.Bow; +import com.shanebeestudios.survival.listeners.item.BowListener; import com.shanebeestudios.survival.listeners.item.CauldronWaterBottle; import com.shanebeestudios.survival.listeners.item.CompassWaypoint; import com.shanebeestudios.survival.listeners.item.CookieHealthBoost; import com.shanebeestudios.survival.listeners.item.FirestrikerListener; import com.shanebeestudios.survival.listeners.item.FoodDiversityConsume; import com.shanebeestudios.survival.listeners.item.GiantBlade; -import com.shanebeestudios.survival.listeners.item.GrapplingHook; +import com.shanebeestudios.survival.listeners.item.GrapplingHookListener; import com.shanebeestudios.survival.listeners.item.MedicKit; import com.shanebeestudios.survival.listeners.item.ObsidianMaceWeakness; import com.shanebeestudios.survival.listeners.item.PoisonousPotato; @@ -70,8 +70,8 @@ public void registerEvents() { Bukkit.getPluginManager().registerEvents(new PlayerDataListener(this.plugin), this.plugin); if (config.survival_enabled) { - pm.registerEvents(new BlockBreak(plugin), this.plugin); - pm.registerEvents(new BlockPlace(plugin), this.plugin); + pm.registerEvents(new BlockBreakListener(plugin), this.plugin); + pm.registerEvents(new BlockPlaceListener(plugin), this.plugin); pm.registerEvents(new FirestrikerListener(plugin), this.plugin); pm.registerEvents(new ShivPoison(this.plugin), this.plugin); pm.registerEvents(new WaterBowlListener(plugin), this.plugin); @@ -79,9 +79,9 @@ public void registerEvents() { //pm.registerEvents(new Backpack(), this.plugin); needs to be reworked } if (config.MECHANICS_BOW) - pm.registerEvents(new Bow(plugin), this.plugin); + pm.registerEvents(new BowListener(plugin), this.plugin); if (config.mechanics_grappling_hook) - pm.registerEvents(new GrapplingHook(plugin), this.plugin); + pm.registerEvents(new GrapplingHookListener(plugin), this.plugin); if (config.legendary_obsidian_mace) pm.registerEvents(new ObsidianMaceWeakness(plugin), this.plugin); if (config.legendary_valkyrie) diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java index 6355efc..1807d70 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreak.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java @@ -2,8 +2,9 @@ import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.MessageManager; +import com.shanebeestudios.survival.managers.MessageManager.MessageType; import com.shanebeestudios.survival.util.BlockTags; import com.shanebeestudios.survival.util.ItemUtils; import com.shanebeestudios.survival.util.Utils; @@ -28,14 +29,14 @@ import java.util.Random; -public class BlockBreak implements Listener { +public class BlockBreakListener implements Listener { private final Config config; - private final Lang lang; + private final MessageManager messageManager; - public BlockBreak(SurvivalPlugin plugin) { - this.lang = plugin.getLang(); + public BlockBreakListener(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); + this.messageManager = plugin.getMessageManager(); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @@ -71,7 +72,7 @@ private void onBlockBreak(BlockBreakEvent event) { } else if (BlockTags.REQUIRES_SHOVEL.isTagged(material)) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_shovel); + this.messageManager.sendMessage(player, MessageType.REQUIRES_SHOVEL); return; } } else if (this.config.survival_break_only_with_sickle) { @@ -87,7 +88,7 @@ private void onBlockBreak(BlockBreakEvent event) { if (this.config.survival_break_only_with_sickle && BlockTags.REQUIRES_SICKLE.isTagged(material)) { if (!Items.Tags.SICKLES.isTagged(tool)) { event.setCancelled(true); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_sickle); + this.messageManager.sendMessage(player, MessageType.REQUIRES_SICKLE); } else { event.setDropItems(false); Location loc = event.getBlock().getLocation(); @@ -126,20 +127,20 @@ else if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { return; } - if (this.config.survival_break_only_with_axe && !Tag.ITEMS_AXES.isTagged(tool.getType())) { - if (BlockTags.REQUIRES_AXE.isTagged(material)) { + if (this.config.survival_break_only_with_axe && BlockTags.REQUIRES_AXE.isTagged(material)) { + if (!Tag.ITEMS_AXES.isTagged(tool.getType())) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_axe); + this.messageManager.sendMessage(player, MessageType.REQUIRES_AXE); return; } } - if (this.config.survival_break_only_with_pickaxe && !Tag.ITEMS_PICKAXES.isTagged(tool.getType())) { - if (BlockTags.REQUIRES_PICKAXE.isTagged(material)) { + if (this.config.survival_break_only_with_pickaxe && BlockTags.REQUIRES_PICKAXE.isTagged(material)) { + if (!Tag.ITEMS_PICKAXES.isTagged(tool.getType())) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_pick); + this.messageManager.sendMessage(player, MessageType.REQUIRES_PICKAXE); return; } } @@ -157,7 +158,7 @@ else if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { if (BlockTags.REQUIRES_SHEARS.isTagged(material)) { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_shear); + this.messageManager.sendMessage(player, MessageType.REQUIRES_SHEARS); return; } } @@ -190,7 +191,7 @@ private void onHarvest(PlayerInteractEvent e) { } if (!Items.Tags.SICKLES.isTagged(tool)) { e.setCancelled(true); - Utils.sendColoredMini(player, "" + this.lang.task_must_use_sickle); + this.messageManager.sendMessage(player, MessageType.REQUIRES_SICKLE); } else { if (bush.getAge() >= 2) { int berries = 0; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlace.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java similarity index 87% rename from src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlace.java rename to src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java index 619baf5..a8d4b99 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlace.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java @@ -1,5 +1,12 @@ package com.shanebeestudios.survival.listeners.block; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.MessageManager; +import com.shanebeestudios.survival.managers.MessageManager.MessageType; +import com.shanebeestudios.survival.util.BlockTags; +import com.shanebeestudios.survival.util.ItemUtils; import org.bukkit.GameMode; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -10,24 +17,17 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.BlockTags; -import com.shanebeestudios.survival.util.ItemUtils; -import com.shanebeestudios.survival.util.Utils; import java.util.Random; -public class BlockPlace implements Listener { +public class BlockPlaceListener implements Listener { private final Config config; - private final Lang lang; + private final MessageManager messageManager; - public BlockPlace(SurvivalPlugin plugin) { + public BlockPlaceListener(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); - this.lang = plugin.getLang(); + this.messageManager = plugin.getMessageManager(); } @SuppressWarnings("ConstantConditions") @@ -69,7 +69,7 @@ private void onBlockPlace(BlockPlaceEvent event) { } else { event.setCancelled(true); player.updateInventory(); - Utils.sendColoredMini(player, "" + lang.task_must_use_hammer); + this.messageManager.sendMessage(player, MessageType.REQUIRES_HAMMER); } } } diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/Bow.java b/src/main/java/com/shanebeestudios/survival/listeners/item/Bow.java deleted file mode 100644 index 882774f..0000000 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/Bow.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.shanebeestudios.survival.listeners.item; - -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.CrossbowMeta; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.util.Utils; - -public class Bow implements Listener { - - private Lang lang; - - public Bow(SurvivalPlugin plugin) { - this.lang = plugin.getLang(); - } - - @EventHandler - private void onShootWithoutArrows(EntityShootBowEvent event) { - if (event.getEntity() instanceof Player) { - Player player = (Player) event.getEntity(); - ItemStack mainHand = player.getInventory().getItemInMainHand(); - if (event.getBow() != null && mainHand.getType() == event.getBow().getType()) { - if (SurvivalPlugin.getInstance().getPlayerManager().isArrowOffHand(player)) { - event.setCancelled(false); - } else { - if (mainHand.getType() != Material.CROSSBOW) { - event.setCancelled(true); - Utils.sendColoredMini(player, lang.arrows_off_hand); - player.updateInventory(); - } - } - } else { - event.setCancelled(true); - Utils.sendColoredMini(player, lang.bow_main_hand); - player.updateInventory(); - } - } - } - - @EventHandler - private void onLoadCrossbow(PlayerInteractEvent event) { - Player player = event.getPlayer(); - ItemStack mainHand = player.getInventory().getItemInMainHand(); - ItemStack offHand = player.getInventory().getItemInOffHand(); - if (mainHand.getType() == Material.CROSSBOW && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { - if (event.getHand() == EquipmentSlot.OFF_HAND) return; - if (mainHand.getItemMeta() != null && ((CrossbowMeta) mainHand.getItemMeta()).hasChargedProjectiles()) return; - if (!SurvivalPlugin.getInstance().getPlayerManager().isArrowOffHand(player)) { - event.setCancelled(true); - Utils.sendColoredMini(player, lang.arrows_off_hand_crossbow); - } - } else if (offHand.getType() == Material.CROSSBOW) { - if (event.getHand() == EquipmentSlot.HAND) return; - event.setCancelled(true); - Utils.sendColoredMini(player, lang.bow_main_hand); - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/BowListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/BowListener.java new file mode 100644 index 0000000..8da8f5e --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/BowListener.java @@ -0,0 +1,67 @@ +package com.shanebeestudios.survival.listeners.item; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.managers.MessageManager; +import com.shanebeestudios.survival.managers.MessageManager.MessageType; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.CrossbowMeta; + +public class BowListener implements Listener { + + private final MessageManager messageManager; + + public BowListener(SurvivalPlugin plugin) { + this.messageManager = plugin.getMessageManager(); + } + + @EventHandler + private void onShootWithoutArrows(EntityShootBowEvent event) { + if (event.getEntity() instanceof Player player) { + ItemStack mainHand = player.getInventory().getItemInMainHand(); + if (event.getBow() != null && mainHand.getType() == event.getBow().getType()) { + if (SurvivalPlugin.getInstance().getPlayerManager().isArrowOffHand(player)) { + event.setCancelled(false); + } else { + if (mainHand.getType() != Material.CROSSBOW) { + event.setCancelled(true); + this.messageManager.sendMessage(player, MessageType.ARROWS_OFFHAND); + player.updateInventory(); + } + } + } else { + event.setCancelled(true); + this.messageManager.sendMessage(player, MessageType.BOW_MAIN_HAND); + player.updateInventory(); + } + } + } + + @EventHandler + private void onLoadCrossbow(PlayerInteractEvent event) { + Player player = event.getPlayer(); + ItemStack mainHand = player.getInventory().getItemInMainHand(); + ItemStack offHand = player.getInventory().getItemInOffHand(); + if (mainHand.getType() == Material.CROSSBOW && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { + if (event.getHand() == EquipmentSlot.OFF_HAND) return; + if (mainHand.getItemMeta() != null && ((CrossbowMeta) mainHand.getItemMeta()).hasChargedProjectiles()) + return; + if (!SurvivalPlugin.getInstance().getPlayerManager().isArrowOffHand(player)) { + event.setCancelled(true); + this.messageManager.sendMessage(player, MessageType.ARROWS_OFFHAND_CROSSBOW); + } + } else if (offHand.getType() == Material.CROSSBOW) { + if (event.getHand() == EquipmentSlot.HAND) return; + event.setCancelled(true); + this.messageManager.sendMessage(player, MessageType.BOW_MAIN_HAND); + } + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHook.java b/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHookListener.java similarity index 86% rename from src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHook.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHookListener.java index c3e87ab..a911869 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHook.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHookListener.java @@ -1,5 +1,9 @@ package com.shanebeestudios.survival.listeners.item; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.managers.MessageManager; +import com.shanebeestudios.survival.managers.MessageManager.MessageType; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -11,19 +15,15 @@ import org.bukkit.event.player.PlayerFishEvent.State; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.Utils; import java.util.List; -public class GrapplingHook implements Listener { +public class GrapplingHookListener implements Listener { - private final Lang lang; + private final MessageManager messageManager; - public GrapplingHook(SurvivalPlugin plugin) { - this.lang = plugin.getLang(); + public GrapplingHookListener(SurvivalPlugin plugin) { + this.messageManager = plugin.getMessageManager(); } @EventHandler @@ -106,17 +106,17 @@ private void onPlayerFish(PlayerFishEvent event) { } else { event.setCancelled(true); if (Items.GRAPPLING_HOOK.is(mainHand)) - Utils.sendColoredMini(player, "" + this.lang.grappling_off_hand); + this.messageManager.sendMessage(player, MessageType.GRAPPLING_HOOK_OFF_HAND); else - Utils.sendColoredMini(player, "" + this.lang.fishing_off_hand); + this.messageManager.sendMessage(player, MessageType.FISH_OFF_HAND); player.updateInventory(); } } else { event.setCancelled(true); if (Items.GRAPPLING_HOOK.is(offHand)) - Utils.sendColoredMini(player, "" + this.lang.grappling_main_hand); + this.messageManager.sendMessage(player, MessageType.GRAPPLING_HOOK_MAIN_HAND); else - Utils.sendColoredMini(player, "" + this.lang.fishing_main_hand); + this.messageManager.sendMessage(player, MessageType.FISH_MAIN_HAND); player.updateInventory(); } } diff --git a/src/main/java/com/shanebeestudios/survival/managers/MessageManager.java b/src/main/java/com/shanebeestudios/survival/managers/MessageManager.java new file mode 100644 index 0000000..594e4f4 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/managers/MessageManager.java @@ -0,0 +1,127 @@ +package com.shanebeestudios.survival.managers; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Manager for sending delayed messages to players + *

Messages are sent at most every 5 seconds, + * preventing players from being bombarded with the + * same message repeatedly

+ */ +public class MessageManager { + + public enum MessageType { + ARROWS_OFFHAND { + @Override + String getMessage(Lang lang) { + return "" + lang.arrows_off_hand; + } + }, + ARROWS_OFFHAND_CROSSBOW { + @Override + String getMessage(Lang lang) { + return "" + lang.arrows_off_hand_crossbow; + } + }, + BOW_MAIN_HAND { + @Override + String getMessage(Lang lang) { + return "" + lang.bow_main_hand; + } + }, + FISH_MAIN_HAND { + @Override + String getMessage(Lang lang) { + return "" + lang.fishing_main_hand; + } + }, + FISH_OFF_HAND { + @Override + String getMessage(Lang lang) { + return "" + lang.fishing_off_hand; + } + }, + GRAPPLING_HOOK_MAIN_HAND { + @Override + String getMessage(Lang lang) { + return "" + lang.grappling_main_hand; + } + }, + GRAPPLING_HOOK_OFF_HAND { + @Override + String getMessage(Lang lang) { + return "" + lang.grappling_off_hand; + } + }, + REQUIRES_AXE { + @Override + String getMessage(Lang lang) { + return "" + lang.task_must_use_axe; + } + }, + REQUIRES_HAMMER { + @Override + String getMessage(Lang lang) { + return "" + lang.task_must_use_hammer; + } + }, + REQUIRES_PICKAXE { + @Override + String getMessage(Lang lang) { + return "" + lang.task_must_use_pick; + } + }, + REQUIRES_SHEARS { + @Override + String getMessage(Lang lang) { + return "" + lang.task_must_use_shear; + } + }, + REQUIRES_SHOVEL { + @Override + String getMessage(Lang lang) { + return "" + lang.task_must_use_shovel; + } + }, + REQUIRES_SICKLE { + @Override + String getMessage(Lang lang) { + return "" + lang.task_must_use_sickle; + } + }; + + MessageType() { + } + + abstract String getMessage(Lang lang); + } + + private final Lang lang; + private final Map> messages = new HashMap<>(); + + public MessageManager(SurvivalPlugin plugin) { + this.lang = plugin.getLang(); + for (MessageType value : MessageType.values()) { + this.messages.put(value, new ArrayList<>()); + } + Bukkit.getScheduler().runTaskTimer(plugin, () -> + this.messages.forEach((key, playerList) -> playerList.clear()), + 100, 100); + } + + public void sendMessage(Player player, MessageType messageType) { + if (this.messages.get(messageType).contains(player)) return; + this.messages.get(messageType).add(player); + Utils.sendColoredMini(player, messageType.getMessage(this.lang)); + } + +} From fbaa408b8500c6403e66401e3d86ddda70257707 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 15:44:05 -0800 Subject: [PATCH 088/133] More cleanup --- .../survival/SurvivalPlugin.java | 499 +++++++++--------- .../survival/config/Config.java | 6 +- .../survival/data/PlayerData.java | 9 +- .../survival/listeners/EventManager.java | 176 +++--- .../listeners/block/SnowGeneration.java | 179 ------- .../survival/managers/ScoreBoardManager.java | 16 +- .../shanebeestudios/survival/util/Utils.java | 4 +- src/main/resources/config.yml | 3 - 8 files changed, 352 insertions(+), 540 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/listeners/block/SnowGeneration.java diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index 37ce0e4..830f8a6 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -1,23 +1,5 @@ package com.shanebeestudios.survival; -import com.shanebeestudios.survival.managers.MessageManager; -import dev.jorel.commandapi.CommandAPI; -import dev.jorel.commandapi.CommandAPIBukkitConfig; -import dev.jorel.commandapi.exceptions.UnsupportedVersionException; -import org.bstats.bukkit.Metrics; -import org.bukkit.Bukkit; -import org.bukkit.GameRule; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.configuration.serialization.ConfigurationSerialization; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.server.ServerLoadEvent; -import org.bukkit.plugin.java.JavaPlugin; import com.shanebeestudios.survival.commands.SurvivalCommand; import com.shanebeestudios.survival.config.Config; import com.shanebeestudios.survival.config.Lang; @@ -26,6 +8,7 @@ import com.shanebeestudios.survival.listeners.EventManager; import com.shanebeestudios.survival.managers.EffectManager; import com.shanebeestudios.survival.managers.LootManager; +import com.shanebeestudios.survival.managers.MessageManager; import com.shanebeestudios.survival.managers.PapiPlaceholders; import com.shanebeestudios.survival.managers.PlayerManager; import com.shanebeestudios.survival.managers.RecipeManager; @@ -33,6 +16,20 @@ import com.shanebeestudios.survival.tasks.TaskManager; import com.shanebeestudios.survival.util.BlockTags; import com.shanebeestudios.survival.util.Utils; +import dev.jorel.commandapi.CommandAPI; +import dev.jorel.commandapi.CommandAPIBukkitConfig; +import dev.jorel.commandapi.exceptions.UnsupportedVersionException; +import org.bstats.bukkit.Metrics; +import org.bukkit.Bukkit; +import org.bukkit.GameRule; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.serialization.ConfigurationSerialization; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; import java.util.HashMap; import java.util.Map; @@ -44,33 +41,31 @@ @SuppressWarnings("UnstableApiUsage") public class SurvivalPlugin extends JavaPlugin implements Listener { - static { - ConfigurationSerialization.registerClass(PlayerData.class); - } + static { + ConfigurationSerialization.registerClass(PlayerData.class); + } - private static SurvivalPlugin instance; + private static SurvivalPlugin INSTANCE; - // Lists & Map - private Map playerDataMap = new HashMap<>(); + // Lists & Map + private Map playerDataMap = new HashMap<>(); - // Configs - private Config config; - private Lang lang; - private PlayerDataConfig playerDataConfig; + // Configs + private Config config; + private Lang lang; + private PlayerDataConfig playerDataConfig; - // Managers - private EffectManager effectManager; - private ScoreBoardManager scoreBoardManager; - private PlayerManager playerManager; - private TaskManager taskManager; - private LootManager lootManager; - private RecipeManager recipeManager; + // Managers + private EffectManager effectManager; + private ScoreBoardManager scoreBoardManager; + private PlayerManager playerManager; + private TaskManager taskManager; + private LootManager lootManager; + private RecipeManager recipeManager; private MessageManager messageManager; - // Other - private String prefix; - private boolean loaded = true; - private boolean snowGenOption = true; + // Other + private boolean loaded = true; /** * @hidden @@ -91,66 +86,66 @@ public void onLoad() { /** * @hidden */ - public void onEnable() { - instance = this; - long time = System.currentTimeMillis(); + public void onEnable() { + INSTANCE = this; + long time = System.currentTimeMillis(); - // VERSION CHECK - if (!Utils.isRunningMinecraft(1, 16)) { - String ver = Bukkit.getServer().getBukkitVersion().split("-")[0]; + // VERSION CHECK + if (!Utils.isRunningMinecraft(1, 21, 4)) { Utils.logMini("-----------------------------------------------------------"); - Utils.logMini("Your version is not supported: " + ver); + Utils.logMini("Your version is not supported: " + Bukkit.getMinecraftVersion()); Utils.logMini("This plugin only works on Minecraft 1.16+"); Utils.logMini("-----------------------------------------------------------"); - loaded = false; - Bukkit.getPluginManager().disablePlugin(this); - return; - } + loaded = false; + Bukkit.getPluginManager().disablePlugin(this); + return; + } - // SPIGOT CHECK - if (!Utils.isRunningSpigot()) { + // PAPER CHECK + // This shouldn't really happen since we're using paper-plugin.yml + if (!Utils.isRunningPaper()) { Utils.logMini("-----------------------------------------------------------"); Utils.logMini("Your server software is not supported: " + Bukkit.getName()); - Utils.logMini("This plugin will only work on Spigot or Paper."); + Utils.logMini("This plugin will only work on Paper."); Utils.logMini("-----------------------------------------------------------"); loaded = false; Bukkit.getPluginManager().disablePlugin(this); return; } - // LOAD CONFIG FILES - loadSettings(Bukkit.getConsoleSender()); - - for (World world : getServer().getWorlds()) { - world.setGameRule(GameRule.DO_LIMITED_CRAFTING, this.config.survival_limited_crafting); - } - - // LOAD RESOURCE PACK - if (config.settings_resource_pack_enabled) { - if (config.settings_resource_pack_url.isEmpty()) { - Utils.logMini("Resource Pack is not set! Plugin disabling"); - Bukkit.getPluginManager().disablePlugin(this); - return; - } else { - Utils.logMini("Resource pack enabled"); - } - } else { + // LOAD CONFIG FILES + loadSettings(Bukkit.getConsoleSender()); + + for (World world : getServer().getWorlds()) { + world.setGameRule(GameRule.DO_LIMITED_CRAFTING, this.config.survival_limited_crafting); + } + + // LOAD RESOURCE PACK + if (this.config.settings_resource_pack_enabled) { + if (this.config.settings_resource_pack_url.isEmpty()) { + Utils.logMini("Resource Pack is not set! Plugin disabling"); + Bukkit.getPluginManager().disablePlugin(this); + return; + } else { + Utils.logMini("Resource pack enabled"); + } + } else { Utils.logMini("Resource Pack disabled"); } - // LOAD MANAGERS + // LOAD MANAGERS BlockTags.initialize(); - playerManager = new PlayerManager(this, playerDataMap); - effectManager = new EffectManager(this); - taskManager = new TaskManager(this); - scoreBoardManager = new ScoreBoardManager(this); - lootManager = new LootManager(this); - recipeManager = new RecipeManager(this); + this.playerManager = new PlayerManager(this, this.playerDataMap); + this.effectManager = new EffectManager(this); + this.taskManager = new TaskManager(this); + this.scoreBoardManager = new ScoreBoardManager(this); + this.lootManager = new LootManager(this); + this.recipeManager = new RecipeManager(this); this.messageManager = new MessageManager(this); - // LOAD PLAYER DATA - (during a reload if players are still online) - playerDataLoader(true); - scoreBoardManager.resetStatusScoreboard(config.mechanics_status_scoreboard); + // LOAD PLAYER DATA - (during a reload if players are still online) + playerDataLoader(true); + this.scoreBoardManager.resetStatusScoreboard(config.mechanics_status_scoreboard); // LOAD PLACEHOLDERS if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { @@ -158,105 +153,107 @@ public void onEnable() { Utils.logMini("PlaceholderAPI placeholders enabled"); } - // REGISTER EVENTS & COMMANDS - registerCommands(); - EventManager eventManager = new EventManager(this); - eventManager.registerEvents(); + // REGISTER EVENTS & COMMANDS + registerCommands(); + EventManager eventManager = new EventManager(this); + eventManager.registerEvents(); - // LOAD CUSTOM RECIPES - // This is a helper for other plugins that wipe custom recipes - secret hidden config - if (config.recipe_delay > 0) { - Utils.logMini("Custom recipe loading delayed... will load in " + config.recipe_delay + " second[s]"); - Bukkit.getScheduler().runTaskLater(this, () -> { + // LOAD CUSTOM RECIPES + // This is a helper for other plugins that wipe custom recipes - secret hidden config + if (this.config.recipe_delay > 0) { + Utils.logMini("Custom recipe loading delayed... will load in " + this.config.recipe_delay + " second[s]"); + Bukkit.getScheduler().runTaskLater(this, () -> { this.recipeManager.loadCustomRecipes(); Utils.logMini("Custom recipes loaded"); - }, config.recipe_delay * 20L); + }, this.config.recipe_delay * 20L); } else { this.recipeManager.loadCustomRecipes(); Utils.logMini("Custom recipes loaded"); } - // LOAD METRICS - new Metrics(this, 24831); + // LOAD METRICS + new Metrics(this, 24831); - Utils.logMini("Successfully loaded in " + (System.currentTimeMillis() - time) + " milliseconds"); + Utils.logMini("Successfully loaded in " + (System.currentTimeMillis() - time) + " milliseconds"); - // BETA WARNING - if (this.getPluginMeta().getVersion().contains("Beta")) { - Utils.logMini("YOU ARE RUNNING A BETA VERSION, PLEASE USE WITH CAUTION!"); - } - } + // BETA WARNING + if (this.getPluginMeta().getVersion().contains("Beta")) { + Utils.logMini("YOU ARE RUNNING A BETA VERSION, PLEASE USE WITH CAUTION!"); + } + } /** * @hidden */ - public void onDisable() { - if (!loaded) return; - Utils.logMini("Shutting down"); - getServer().getScheduler().cancelTasks(this); - //getServer().resetRecipes(); <-- why is this even here? - - // Remove limited crafting when server shuts down (important if server removes this plugin) - for (World world : getServer().getWorlds()) { - world.setGameRule(GameRule.DO_LIMITED_CRAFTING, false); - } - - // Unload player data (decrease chance of memory leak) - playerDataLoader(false); - - //Avoid WorkbenchShare glitch - if (this.config.mechanics_shared_workbench) { - for (Player p : Bukkit.getOnlinePlayers()) { - if (p.hasMetadata("shared_workbench")) { - Block workbench = (p.getMetadata("shared_workbench").getFirst().value() instanceof Block) ? (Block) - p.getMetadata("shared_workbench").getFirst().value() : null; - - if (workbench != null && workbench.getType() == Material.CRAFTING_TABLE) { - if (workbench.hasMetadata("shared_players")) - workbench.removeMetadata("shared_players", SurvivalPlugin.instance); - else - p.getOpenInventory().getTopInventory().clear(); - p.closeInventory(); - } - p.removeMetadata("shared_workbench", SurvivalPlugin.instance); - } - } - } - Utils.logMini("Successfully disabled"); - } - - private void playerDataLoader(boolean load) { - int size = Bukkit.getOnlinePlayers().size(); - if (load) { - // Load player data - if players are online (useful during reload) - for (Player player : Bukkit.getOnlinePlayers()) { - if (playerDataConfig.hasPlayerDataFile(player)) { - playerManager.loadPlayerData(player); + public void onDisable() { + if (!loaded) return; + Utils.logMini("Shutting down"); + getServer().getScheduler().cancelTasks(this); + //getServer().resetRecipes(); <-- why is this even here? + + // Remove limited crafting when server shuts down (important if server removes this plugin) + for (World world : getServer().getWorlds()) { + world.setGameRule(GameRule.DO_LIMITED_CRAFTING, false); + } + + // Unload player data (decrease chance of memory leak) + playerDataLoader(false); + + //Avoid WorkbenchShare glitch + if (this.config.mechanics_shared_workbench) { + for (Player p : Bukkit.getOnlinePlayers()) { + if (p.hasMetadata("shared_workbench")) { + Block workbench = (p.getMetadata("shared_workbench").getFirst().value() instanceof Block) ? (Block) + p.getMetadata("shared_workbench").getFirst().value() : null; + + if (workbench != null && workbench.getType() == Material.CRAFTING_TABLE) { + if (workbench.hasMetadata("shared_players")) + workbench.removeMetadata("shared_players", SurvivalPlugin.INSTANCE); + else + p.getOpenInventory().getTopInventory().clear(); + p.closeInventory(); + } + p.removeMetadata("shared_workbench", SurvivalPlugin.INSTANCE); + } + } + } + INSTANCE = null; + Utils.logMini("Successfully disabled"); + } + + private void playerDataLoader(boolean load) { + int size = Bukkit.getOnlinePlayers().size(); + if (load) { + // Load player data - if players are online (useful during reload) + for (Player player : Bukkit.getOnlinePlayers()) { + if (this.playerDataConfig.hasPlayerDataFile(player)) { + this.playerManager.loadPlayerData(player); } else { - playerManager.createNewPlayerData(player); + this.playerManager.createNewPlayerData(player); } - } - if (size > 0) { - Utils.logMini("Loading player data for " + size + " player" + (size != 1 ? "s" : "")); - } - } else { - // Unload player data - if players are still online - for (Player player : Bukkit.getOnlinePlayers()) { - playerManager.unloadPlayerData(player); - } - // Clear/delete player data map to prevent memory leaks - playerDataMap.clear(); - playerDataMap = null; - Utils.logMini("Unloading player data for " + size + " player" + (size != 1 ? "s" : "")); - } - } - - /** - * Load config settings - * @param sender The person/console loading config - */ - public void loadSettings(CommandSender sender) { + } + if (size > 0) { + Utils.logMini("Loading player data for " + size + " player" + (size != 1 ? "s" : "")); + } + } else { + // Unload player data - if players are still online + for (Player player : Bukkit.getOnlinePlayers()) { + playerManager.unloadPlayerData(player); + } + // Clear/delete player data map to prevent memory leaks + this.playerDataMap.clear(); + this.playerDataMap = null; + Utils.logMini("Unloading player data for " + size + " player" + (size != 1 ? "s" : "")); + } + } + + /** + * Load config settings + * + * @param sender The person/console loading config + */ + public void loadSettings(CommandSender sender) { if (this.config == null) { this.config = new Config(this); } @@ -264,111 +261,115 @@ public void loadSettings(CommandSender sender) { if (this.lang == null) { this.lang = new Lang(this, this.config.lang); } - this.lang.loadLangFile(sender); - this.prefix = lang.prefix; - this.playerDataConfig = new PlayerDataConfig(this); - } - - @EventHandler - private void onServerReload(ServerLoadEvent e) { - if (e.getType() == ServerLoadEvent.LoadType.RELOAD) { - for (Player player : getServer().getOnlinePlayers()) { - Utils.sendColoredMini(player, prefix + "DETECTED SERVER RELOAD"); - Utils.sendColoredMini(player, " Recipes may have been impacted"); - Utils.sendColoredMini(player, " Relog to update your recipes"); - } - ConsoleCommandSender console = Bukkit.getConsoleSender(); - Utils.sendColoredMini(console,prefix + "DETECTED SERVER RELOAD"); - Utils.sendColoredMini(console, " - Server reloads will impact recipes"); - Utils.sendColoredMini(console, " - Players will need to relog to re-enable custom recipes"); - Utils.sendColoredMini(console, " - A warning has been sent to each player that is online right now"); - } - } - - private void registerCommands() { + this.lang.loadLangFile(sender); + this.playerDataConfig = new PlayerDataConfig(this); + } + + private void registerCommands() { if (CommandAPI.isLoaded()) { CommandAPI.onEnable(); new SurvivalCommand(this, "survival"); } - } - - /** Get instance of this plugin - * @return Instance of this plugin - */ - public static SurvivalPlugin getInstance() { - return instance; - } - - /** Get the effect manager - * @return Instance of the effect manager - */ - public EffectManager getEffectManager() { - return this.effectManager; - } - - /** Get the scoreboard manager - * @return Instance of the scoreboard manager - */ - public ScoreBoardManager getScoreboardManager() { - return this.scoreBoardManager; - } - - /** Get the player manager - * @return Instance of the player manager - */ - public PlayerManager getPlayerManager() { - return this.playerManager; - } - - /** Get the task manager - * @return Instance of the task manager - */ - @SuppressWarnings("unused") - public TaskManager getTaskManager() { - return this.taskManager; - } - - /** Get an instance of the loot manager + } + + /** + * Get instance of this plugin + * + * @return Instance of this plugin + */ + public static SurvivalPlugin getInstance() { + return INSTANCE; + } + + /** + * Get the effect manager + * + * @return Instance of the effect manager + */ + public EffectManager getEffectManager() { + return this.effectManager; + } + + /** + * Get the scoreboard manager + * + * @return Instance of the scoreboard manager + */ + public ScoreBoardManager getScoreboardManager() { + return this.scoreBoardManager; + } + + /** + * Get the player manager + * + * @return Instance of the player manager + */ + public PlayerManager getPlayerManager() { + return this.playerManager; + } + + /** + * Get the task manager + * + * @return Instance of the task manager + */ + @SuppressWarnings("unused") + public TaskManager getTaskManager() { + return this.taskManager; + } + + /** + * Get an instance of the loot manager + * * @return Instance of the loot manager */ public LootManager getLootManager() { return lootManager; } - /** Get an instance of the recipe manager + /** + * Get an instance of the recipe manager + * * @return Instance of recipe manager */ public RecipeManager getRecipeManager() { return recipeManager; } + /** + * Get an instance of the message manager + * + * @return Instance of message manager + */ public MessageManager getMessageManager() { return this.messageManager; } - /** Get the main SurvivalPlus config - * @return SurvivalPlus config - */ - public Config getSurvivalConfig() { - return this.config; - } - - /** Get an instance of the language config - * @return Language config - */ - public Lang getLang() { - return lang; - } - - public boolean isSnowGenOption() { - return snowGenOption; - } - - public void setSnowGenOption(boolean snowGenOption) { - this.snowGenOption = snowGenOption; - } - - public PlayerDataConfig getPlayerDataConfig() { - return playerDataConfig; - } + /** + * Get the main SurvivalPlus config + * + * @return SurvivalPlus config + */ + public Config getSurvivalConfig() { + return this.config; + } + + /** + * Get an instance of the language config + * + * @return Language config + */ + public Lang getLang() { + return lang; + } + + /** + * Get an instance of the player data config + * + * @return Player data config + */ + public PlayerDataConfig getPlayerDataConfig() { + return playerDataConfig; + } + } diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index 0320a8e..069f49d 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -76,7 +76,7 @@ public class Config { public boolean mechanics_slow_armor; public boolean mechanics_reinforced_armor; - public boolean MECHANICS_BOW; + public boolean mechanics_bow; public boolean mechanics_recurved_bow; public boolean mechanics_grappling_hook; public boolean mechanics_medic_kit; @@ -146,7 +146,6 @@ public class Config { public boolean mechanics_fermented_skin; public boolean mechanics_living_slime; public boolean mechanics_snowball_revamp; - public boolean MECHANICS_SNOW_GEN_REVAMP; public boolean mechanics_farming_products_cookie; public boolean mechanics_farming_products_bread; @@ -309,7 +308,7 @@ private void loadSettings() { // MECHANICS this.mechanics_slow_armor = this.settings.getBoolean("mechanics.slow-armor"); this.mechanics_reinforced_armor = this.settings.getBoolean("mechanics.reinforced-leather-armor"); - this.MECHANICS_BOW = this.settings.getBoolean("mechanics.bow"); + this.mechanics_bow = this.settings.getBoolean("mechanics.bow"); this.mechanics_recurved_bow = this.settings.getBoolean("mechanics.recurve-bow"); this.mechanics_grappling_hook = this.settings.getBoolean("mechanics.grappling-hook"); this.mechanics_medic_kit = this.settings.getBoolean("mechanics.medical-kit"); @@ -398,7 +397,6 @@ private void loadSettings() { this.mechanics_living_slime = this.settings.getBoolean("mechanics.living-slime"); this.mechanics_snowball_revamp = this.settings.getBoolean("mechanics.snowball-revamp"); - this.MECHANICS_SNOW_GEN_REVAMP = this.settings.getBoolean("mechanics.SnowGenerationRevamp"); this.mechanics_farming_products_cookie = this.settings.getBoolean("mechanics.farming-products.cookie"); this.mechanics_farming_products_bread = this.settings.getBoolean("mechanics.farming-products.bread"); diff --git a/src/main/java/com/shanebeestudios/survival/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/data/PlayerData.java index 455c00a..1923a5a 100644 --- a/src/main/java/com/shanebeestudios/survival/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/data/PlayerData.java @@ -373,9 +373,7 @@ public Location getCompassWaypoint(World world) { } /** - * Internal serializer for yaml config - * - * @return Map for config + * @hidden */ @SuppressWarnings("NullableProblems") @Override @@ -397,10 +395,7 @@ public Map serialize() { } /** - * Internal deserializer for yaml config - * - * @param args Args from yaml config - * @return New PlayerData loaded from config + * @hidden */ public static PlayerData deserialize(Map args) { UUID uuid = UUID.fromString(args.get("uuid").toString()); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 17f01aa..1b0affd 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -1,15 +1,12 @@ package com.shanebeestudios.survival.listeners; -import com.shanebeestudios.survival.listeners.block.LootTableListener; -import org.bukkit.Bukkit; -import org.bukkit.plugin.PluginManager; import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.config.Config; import com.shanebeestudios.survival.listeners.block.BlockBreakListener; import com.shanebeestudios.survival.listeners.block.BlockPlaceListener; import com.shanebeestudios.survival.listeners.block.Campfire; import com.shanebeestudios.survival.listeners.block.Chairs; -import com.shanebeestudios.survival.listeners.block.SnowGeneration; +import com.shanebeestudios.survival.listeners.block.LootTableListener; import com.shanebeestudios.survival.listeners.block.SnowballThrow; import com.shanebeestudios.survival.listeners.block.WorkbenchShare; import com.shanebeestudios.survival.listeners.entity.BeeKeeperSuit; @@ -47,115 +44,112 @@ import com.shanebeestudios.survival.listeners.server.LocalChat; import com.shanebeestudios.survival.listeners.server.RecipeDiscovery; import com.shanebeestudios.survival.listeners.server.ResourcePackListener; +import org.bukkit.Bukkit; +import org.bukkit.plugin.PluginManager; /** * Internal use only */ public class EventManager { - private final SurvivalPlugin plugin; - private final int LOCAL_CHAT; - private final Config config; + private final SurvivalPlugin plugin; + private final Config config; - public EventManager(SurvivalPlugin plugin) { - this.plugin = plugin; - this.config = plugin.getSurvivalConfig(); - this.LOCAL_CHAT = config.settings_local_chat_distance; - } + public EventManager(SurvivalPlugin plugin) { + this.plugin = plugin; + this.config = plugin.getSurvivalConfig(); + } - public void registerEvents() { - PluginManager pm = plugin.getServer().getPluginManager(); - pm.registerEvents(this.plugin, this.plugin); - pm.registerEvents(new RecipeDiscovery(plugin), this.plugin); + public void registerEvents() { + PluginManager pluginManager = plugin.getServer().getPluginManager(); + pluginManager.registerEvents(this.plugin, this.plugin); + pluginManager.registerEvents(new RecipeDiscovery(this.plugin), this.plugin); Bukkit.getPluginManager().registerEvents(new PlayerDataListener(this.plugin), this.plugin); - if (config.survival_enabled) { - pm.registerEvents(new BlockBreakListener(plugin), this.plugin); - pm.registerEvents(new BlockPlaceListener(plugin), this.plugin); - pm.registerEvents(new FirestrikerListener(plugin), this.plugin); - pm.registerEvents(new ShivPoison(this.plugin), this.plugin); - pm.registerEvents(new WaterBowlListener(plugin), this.plugin); - pm.registerEvents(new Campfire(plugin), this.plugin); - //pm.registerEvents(new Backpack(), this.plugin); needs to be reworked - } - if (config.MECHANICS_BOW) - pm.registerEvents(new BowListener(plugin), this.plugin); - if (config.mechanics_grappling_hook) - pm.registerEvents(new GrapplingHookListener(plugin), this.plugin); - if (config.legendary_obsidian_mace) - pm.registerEvents(new ObsidianMaceWeakness(plugin), this.plugin); - if (config.legendary_valkyrie) - pm.registerEvents(new Valkyrie(plugin), this.plugin); - if (config.legendary_giant_blade) - pm.registerEvents(new GiantBlade(plugin), this.plugin); - if (config.legendary_blaze_sword) - pm.registerEvents(new BlazeSword(), this.plugin); - if (LOCAL_CHAT > -1) - pm.registerEvents(new LocalChat(plugin), this.plugin); - if (config.mechanics_compass_waypoint) - pm.registerEvents(new CompassWaypoint(this.plugin), this.plugin); - if (config.mechanics_medic_kit) - pm.registerEvents(new MedicKit(plugin), this.plugin); + if (this.config.survival_enabled) { + pluginManager.registerEvents(new BlockBreakListener(this.plugin), this.plugin); + pluginManager.registerEvents(new BlockPlaceListener(this.plugin), this.plugin); + pluginManager.registerEvents(new FirestrikerListener(this.plugin), this.plugin); + pluginManager.registerEvents(new ShivPoison(this.plugin), this.plugin); + pluginManager.registerEvents(new WaterBowlListener(this.plugin), this.plugin); + pluginManager.registerEvents(new Campfire(this.plugin), this.plugin); + } + if (this.config.mechanics_bow) + pluginManager.registerEvents(new BowListener(this.plugin), this.plugin); + if (this.config.mechanics_grappling_hook) + pluginManager.registerEvents(new GrapplingHookListener(this.plugin), this.plugin); + if (this.config.legendary_obsidian_mace) + pluginManager.registerEvents(new ObsidianMaceWeakness(this.plugin), this.plugin); + if (this.config.legendary_valkyrie) + pluginManager.registerEvents(new Valkyrie(this.plugin), this.plugin); + if (this.config.legendary_giant_blade) + pluginManager.registerEvents(new GiantBlade(this.plugin), this.plugin); + if (this.config.legendary_blaze_sword) + pluginManager.registerEvents(new BlazeSword(), this.plugin); + if (this.config.settings_local_chat_distance > -1) + pluginManager.registerEvents(new LocalChat(this.plugin), this.plugin); + if (this.config.mechanics_compass_waypoint) + pluginManager.registerEvents(new CompassWaypoint(this.plugin), this.plugin); + if (this.config.mechanics_medic_kit) + pluginManager.registerEvents(new MedicKit(this.plugin), this.plugin); - pm.registerEvents(new WaterBottleListener(plugin), this.plugin); + pluginManager.registerEvents(new WaterBottleListener(this.plugin), this.plugin); - if (config.settings_resource_pack_enabled) { - pm.registerEvents(new ResourcePackListener(plugin), this.plugin); + if (this.config.settings_resource_pack_enabled) { + pluginManager.registerEvents(new ResourcePackListener(this.plugin), this.plugin); } - if (config.mechanics_raw_meat_hunger) - pm.registerEvents(new RawMeatHunger(), this.plugin); - if (config.mechanics_thirst_enabled) { - pm.registerEvents(new ThirstListener(this.plugin), this.plugin); - if (config.mechanics_thirst_purify_water) - pm.registerEvents(new CauldronWaterBottle(), this.plugin); - } - if (config.mechanics_poison_potato) - pm.registerEvents(new PoisonousPotato(), this.plugin); - if (config.mechanics_shared_workbench) - pm.registerEvents(new WorkbenchShare(plugin), this.plugin); - if (config.mechanics_chairs_enabled) - pm.registerEvents(new Chairs(plugin), this.plugin); - if (config.mechanics_cookie_boost) - pm.registerEvents(new CookieHealthBoost(), this.plugin); - if (config.mechanics_beet_strength) - pm.registerEvents(new BeetrootStrength(), this.plugin); - if (config.mechanics_tropical_fish) - pm.registerEvents(new TropicalFish(this.plugin), this.plugin); - if (config.mechanics_living_slime) - pm.registerEvents(new LivingSlime(plugin), this.plugin); - if (config.mechanics_energy_enabled) - pm.registerEvents(new EnergyChange(plugin), this.plugin); - if (config.mechanics_food_diversity_enabled) - pm.registerEvents(new FoodDiversityConsume(plugin), this.plugin); - if (config.mechanics_recurved_bow) - pm.registerEvents(new RecurvedBowListener(plugin), this.plugin); - if (config.mechanics_snowball_revamp) - pm.registerEvents(new SnowballThrow(), this.plugin); - if (config.MECHANICS_SNOW_GEN_REVAMP) - pm.registerEvents(new SnowGeneration(plugin), this.plugin); - if (config.entity_mechanics_chicken_breeding_enabled) - pm.registerEvents(new ChickenSpawn(this.plugin), this.plugin); - if (config.welcome_guide_enabled) - pm.registerEvents(new Guide(plugin), this.plugin); + if (this.config.mechanics_raw_meat_hunger) + pluginManager.registerEvents(new RawMeatHunger(), this.plugin); + if (this.config.mechanics_thirst_enabled) { + pluginManager.registerEvents(new ThirstListener(this.plugin), this.plugin); + if (this.config.mechanics_thirst_purify_water) + pluginManager.registerEvents(new CauldronWaterBottle(), this.plugin); + } + if (this.config.mechanics_poison_potato) + pluginManager.registerEvents(new PoisonousPotato(), this.plugin); + if (this.config.mechanics_shared_workbench) + pluginManager.registerEvents(new WorkbenchShare(this.plugin), this.plugin); + if (this.config.mechanics_chairs_enabled) + pluginManager.registerEvents(new Chairs(this.plugin), this.plugin); + if (this.config.mechanics_cookie_boost) + pluginManager.registerEvents(new CookieHealthBoost(), this.plugin); + if (this.config.mechanics_beet_strength) + pluginManager.registerEvents(new BeetrootStrength(), this.plugin); + if (this.config.mechanics_tropical_fish) + pluginManager.registerEvents(new TropicalFish(this.plugin), this.plugin); + if (this.config.mechanics_living_slime) + pluginManager.registerEvents(new LivingSlime(this.plugin), this.plugin); + if (this.config.mechanics_energy_enabled) + pluginManager.registerEvents(new EnergyChange(this.plugin), this.plugin); + if (this.config.mechanics_food_diversity_enabled) + pluginManager.registerEvents(new FoodDiversityConsume(this.plugin), this.plugin); + if (this.config.mechanics_recurved_bow) + pluginManager.registerEvents(new RecurvedBowListener(this.plugin), this.plugin); + if (this.config.mechanics_snowball_revamp) + pluginManager.registerEvents(new SnowballThrow(), this.plugin); + if (this.config.entity_mechanics_chicken_breeding_enabled) + pluginManager.registerEvents(new ChickenSpawn(this.plugin), this.plugin); + if (this.config.welcome_guide_enabled) + pluginManager.registerEvents(new Guide(this.plugin), this.plugin); - if (config.entity_mechanics_pigmen_chest_enabled) - pm.registerEvents(new ChestPigmen(this.plugin), this.plugin); + if (this.config.entity_mechanics_pigmen_chest_enabled) + pluginManager.registerEvents(new ChestPigmen(this.plugin), this.plugin); - if (config.entity_mechanics_beekeeper_suit_enabled) { + if (this.config.entity_mechanics_beekeeper_suit_enabled) { Bukkit.getPluginManager().registerEvents(new BeeKeeperSuit(), this.plugin); } - if (config.survival_update_merchant_trades) { - pm.registerEvents(new MerchantTrades(this.plugin), this.plugin); + if (this.config.survival_update_merchant_trades) { + pluginManager.registerEvents(new MerchantTrades(this.plugin), this.plugin); } if (this.config.survival_update_loot_tables) { - pm.registerEvents(new LootTableListener(plugin), this.plugin); + pluginManager.registerEvents(new LootTableListener(this.plugin), this.plugin); } - pm.registerEvents(new PiglinBarter(this.plugin), this.plugin); + pluginManager.registerEvents(new PiglinBarter(this.plugin), this.plugin); // Config handled within this event - pm.registerEvents(new EntityDeath(this.plugin), this.plugin); - pm.registerEvents(new RepairCrafting(), this.plugin); + pluginManager.registerEvents(new EntityDeath(this.plugin), this.plugin); + pluginManager.registerEvents(new RepairCrafting(), this.plugin); - } + } } diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/SnowGeneration.java b/src/main/java/com/shanebeestudios/survival/listeners/block/SnowGeneration.java deleted file mode 100644 index a895421..0000000 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/SnowGeneration.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.shanebeestudios.survival.listeners.block; - -import org.bukkit.*; -import org.bukkit.block.Block; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockFormEvent; -import org.bukkit.event.world.ChunkLoadEvent; - -import com.shanebeestudios.survival.SurvivalPlugin; - -public class SnowGeneration implements Listener { - - private final SurvivalPlugin plugin; - - public SnowGeneration(SurvivalPlugin plugin) { - this.plugin = plugin; - } - - @EventHandler(ignoreCancelled = true) - private void chunkLoad(final ChunkLoadEvent event) { - if (plugin.isSnowGenOption()) { - if (event.isNewChunk()) { - Bukkit.getScheduler().runTask(plugin, () -> checkChunk(event.getChunk())); - } - } - } - - /** - * Internal usage, do not use - * - * @param chunk A chunk - */ - public void checkChunk(final Chunk chunk) { - final ChunkSnapshot chunkSnap = chunk.getChunkSnapshot(true, false, false); - - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - final int y = chunkSnap.getHighestBlockYAt(x, z); - - if (chunkSnap.getBlockType(x, y, z) == Material.SNOW) - - placeSnow(chunk, chunkSnap, x, y, z); - } - } - } - - @EventHandler(ignoreCancelled = true) - private void snowForm(final BlockFormEvent event) { - if (plugin.isSnowGenOption()) { - if (event.getNewState().getType() != Material.SNOW) - return; - - Bukkit.getScheduler().runTask(plugin, () -> placeSnow(event.getBlock())); - } - } - - private void placeSnow(final Block block) { - final Location loc = block.getLocation(); - final Chunk chunk = block.getChunk(); - - placeSnow(chunk, chunk.getChunkSnapshot(true, false, false), Math.abs((chunk.getX() * 16) - loc.getBlockX()), loc.getBlockY(), Math.abs((chunk.getZ() * 16) - loc.getBlockZ())); - } - - private void placeSnow(final Chunk chunk, final ChunkSnapshot chunkSnap, final int x, int y, final int z) { - if (y <= 1) - return; - - Material type = chunkSnap.getBlockType(x, --y, z); - - if (!(Tag.LEAVES.isTagged(type))) - return; - - Material lastType = type; - - while (true) { - type = chunkSnap.getBlockType(x, --y, z); - - switch (type) { - case AIR: // ignore air and snow - case SNOW: - break; - case OAK_LEAVES: - case BIRCH_LEAVES: - case JUNGLE_LEAVES: - case DARK_OAK_LEAVES: - case ACACIA_LEAVES: - case SPRUCE_LEAVES: // check leaves if they have air above them to place snow - { - if (lastType == Material.AIR) { - try { - chunk.getBlock(x, y + 1, z).setType(Material.SNOW); - } catch (Exception ignore) { - } - } - - break; - } - - // snowable blocks and the stop - case STONE: - case GRASS_BLOCK: - case DIRT: - case COBBLESTONE: - case BEDROCK: - case SAND: - case GRAVEL: - case GOLD_ORE: - case IRON_ORE: - case COAL_ORE: - case SPONGE: - case GLASS: - case LAPIS_ORE: - case LAPIS_BLOCK: - case DISPENSER: - case SANDSTONE: - case NOTE_BLOCK: -// case PISTON_BASE: -// case PISTON_STICKY_BASE: -// case PISTON_MOVING_PIECE: -// case PISTON_EXTENSION: - case GOLD_BLOCK: - case IRON_BLOCK: - case BRICK: - case TNT: - case BOOKSHELF: - case MOSSY_COBBLESTONE: - case OBSIDIAN: - case SPAWNER: - case DIAMOND_ORE: - case DIAMOND_BLOCK: - case CRAFTING_TABLE: - case FURNACE: -// case BURNING_FURNACE: - case REDSTONE_ORE: -// case ICE: - case SNOW_BLOCK: - case CLAY: - case JUKEBOX: - case PUMPKIN: - case NETHERRACK: - case SOUL_SAND: - case GLOWSTONE: -// case JACK_O_LANTERN: -// case SMOOTH_BRICK: - case MELON: - case NETHER_BRICK: - case END_STONE: - case REDSTONE_LAMP: - case EMERALD_BLOCK: - case EMERALD_ORE: { - setSnow(lastType, chunk, x, y, z); - return; - } - - default: // everything else stops - if (Tag.LOGS.isTagged(type) || - Tag.WOOL.isTagged(type) || - Tag.PLANKS.isTagged(type) || - Tag.SLABS.isTagged(type)) setSnow(lastType, chunk, x, y, z); - return; - } - - lastType = type; - } - } - - private void setSnow(Material mat, Chunk chunk, final int x, int y, final int z) { - - if (mat == Material.AIR) { - try { - chunk.getBlock(x, y + 1, z).setType(Material.SNOW); - } catch (Exception ignore) { - } - } - - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java b/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java index b117392..66daf65 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java +++ b/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java @@ -5,6 +5,7 @@ import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.data.HealthBoard; import com.shanebeestudios.survival.tasks.HealthBoardTask; +import org.jetbrains.annotations.ApiStatus; import java.util.HashMap; import java.util.Map; @@ -21,16 +22,17 @@ public ScoreBoardManager(SurvivalPlugin plugin) { } /** - * Sets up a scoreboard for a player - *

- * This is generally used internally - * - * @param player Player to set up a scoreboard for + * @hidden Should not be used outside this plugin */ + @ApiStatus.Internal public void setupScoreboard(Player player) { this.healthBoardTaskMap.put(player.getUniqueId(), new HealthBoardTask(this.plugin, player)); } + /** + * @hidden Should not be used outside this plugin + */ + @ApiStatus.Internal public void resetStatusScoreboard(boolean enabled) { for (Player player : Bukkit.getOnlinePlayers()) { if (enabled) { @@ -41,6 +43,10 @@ public void resetStatusScoreboard(boolean enabled) { } } + /** + * @hidden Should not be used outside this plugin + */ + @ApiStatus.Internal public void unloadScoreboard(Player player) { UUID uuid = player.getUniqueId(); if (this.healthBoardTaskMap.containsKey(uuid)) { diff --git a/src/main/java/com/shanebeestudios/survival/util/Utils.java b/src/main/java/com/shanebeestudios/survival/util/Utils.java index 9204dff..5da9c32 100644 --- a/src/main/java/com/shanebeestudios/survival/util/Utils.java +++ b/src/main/java/com/shanebeestudios/survival/util/Utils.java @@ -206,8 +206,8 @@ public static boolean isRunningMinecraft(int major, int minor, int revision) { return maj > major || min > minor || (min == minor && rev >= revision); } - public static boolean isRunningSpigot() { - return classExists("org.spigotmc.CustomTimingsHandler"); + public static boolean isRunningPaper() { + return classExists("io.papermc.paper.ServerBuildInfo"); } /** diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9921f56..7e2f725 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -279,9 +279,6 @@ mechanics: # When a player throws a snowball it will place a snow layer on the ground snowball-revamp: true - # Currently disabled, do not use!!! - SnowGenerationRevamp: false - # Creates harder to craft recipes for these items farming-products: bread: true From f0ee943c068d9b2745bd9e0d969e96a5ca2c2470 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 19:33:45 -0800 Subject: [PATCH 089/133] Config - fix some double values --- .../java/com/shanebeestudios/survival/config/Config.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index 069f49d..df36b57 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -354,13 +354,13 @@ private void loadSettings() { this.mechanics_food_effects_protein_se_hard_duration = this.settings.getInt("mechanics.food-diversity.effects.proteins.status-effects.hard.duration"); this.mechanics_thirst_enabled = this.settings.getBoolean("mechanics.thirst.enabled"); - this.mechanics_thirst_starting_amount = this.settings.getInt("mechanics.thirst.starting-amount"); - this.mechanics_thirst_respawn_amount = this.settings.getInt("mechanics.thirst.respawn-amount"); + this.mechanics_thirst_starting_amount = this.settings.getDouble("mechanics.thirst.starting-amount"); + this.mechanics_thirst_respawn_amount = this.settings.getDouble("mechanics.thirst.respawn-amount"); this.mechanics_thirst_purify_water = this.settings.getBoolean("mechanics.thirst.purify-water"); this.mechanics_thirst_melt_snow = this.settings.getBoolean("mechanics.thirst.melt-snow"); this.mechanics_thirst_drain_rate = this.settings.getDouble("mechanics.thirst.drain-rate"); - this.mechanics_thirst_heat_drain_rate = this.settings.getInt("mechanics.thirst.heat-drain-rate"); - this.mechanics_thirst_nether_drain_rate = this.settings.getInt("mechanics.thirst.nether-drain-rate"); + this.mechanics_thirst_heat_drain_rate = this.settings.getDouble("mechanics.thirst.heat-drain-rate"); + this.mechanics_thirst_nether_drain_rate = this.settings.getDouble("mechanics.thirst.nether-drain-rate"); this.mechanics_thirst_damage_rate = this.settings.getDouble("mechanics.thirst.damage-rate"); this.mechanics_thirst_rep_apple = this.settings.getDouble("mechanics.thirst.replenish-level.apple"); From 2b89d66777b9a52b5139b494914896de07aba017 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 19:44:46 -0800 Subject: [PATCH 090/133] Add a few permission bypasses - ref #22 --- .../survival/commands/DataGenCommand.java | 3 +- .../survival/commands/DebugCommand.java | 3 +- .../survival/commands/GiveItemCommand.java | 3 +- .../survival/commands/HealCommand.java | 5 +- .../survival/commands/NutritionCommand.java | 3 +- .../survival/commands/Permissions.java | 47 ------------ .../survival/commands/PlayerDataCommand.java | 3 +- .../survival/commands/ReloadCommand.java | 3 +- .../survival/commands/StatCommand.java | 3 +- .../survival/commands/ToggleChatCommand.java | 3 +- .../survival/data/Permissions.java | 71 +++++++++++++++++++ .../listeners/block/BlockBreakListener.java | 3 + .../listeners/block/BlockPlaceListener.java | 59 ++++++++------- .../listeners/item/ThirstListener.java | 7 ++ .../listeners/player/EnergyChange.java | 7 ++ .../survival/tasks/EnergyDrain.java | 3 + .../survival/tasks/NutrientsDrain.java | 3 + .../survival/tasks/NutrientsEffect.java | 2 + .../survival/tasks/ThirstTask.java | 4 ++ .../survival/tasks/WeatherTask.java | 2 + 20 files changed, 150 insertions(+), 87 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/commands/Permissions.java create mode 100644 src/main/java/com/shanebeestudios/survival/data/Permissions.java diff --git a/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java b/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java index 040ac96..aecf96a 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; import com.shanebeestudios.survival.SurvivalPlugin; @@ -18,7 +19,7 @@ public DataGenCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("datagen") - .withPermission(Permissions.COMMAND_DATA_GEN) + .withPermission(Permissions.COMMAND_DATA_GEN.permission()) .executes(info -> { this.blockTagFileGenerator.generateBlockTags(this.plugin.getDataFolder(), "generated/block-tags.yml"); Utils.sendColoredMini(info.sender(), "Finished generating block-tags.yml"); diff --git a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java index 8e1751a..1a1250e 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java @@ -1,6 +1,7 @@ package com.shanebeestudios.survival.commands; import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.data.Permissions; import com.shanebeestudios.survival.data.Placeholders; import com.shanebeestudios.survival.item.Items; import com.shanebeestudios.survival.item.Nutrition; @@ -15,7 +16,7 @@ public DebugCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("debug") - .withPermission(Permissions.COMMAND_DEBUG) + .withPermission(Permissions.COMMAND_DEBUG.permission()) .then(LiteralArgument.literal("nutrition") .executesConsole(info -> { Nutrition.debug(); diff --git a/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java b/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java index 323abfd..b07668c 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.ArgumentSuggestions; import dev.jorel.commandapi.arguments.EntitySelectorArgument; @@ -39,7 +40,7 @@ public GiveItemCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("giveitem") - .withPermission(Permissions.COMMAND_GIVEITEM) + .withPermission(Permissions.COMMAND_GIVEITEM.permission()) .then(new EntitySelectorArgument.ManyPlayers("players") .then(new StringArgument("item") .includeSuggestions(ArgumentSuggestions.strings(this.names)) diff --git a/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java b/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java index f6832c5..e8fb914 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.EntitySelectorArgument; import dev.jorel.commandapi.arguments.LiteralArgument; @@ -23,13 +24,13 @@ public HealCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("heal") - .withPermission(Permissions.COMMAND_HEAL) + .withPermission(Permissions.COMMAND_HEAL.permission()) .executesPlayer(info -> { heal(info.sender()); Utils.sendColoredMini(info.sender(), this.lang.cmd_heal_self); }) .then(new EntitySelectorArgument.ManyPlayers("players") - .withPermission(Permissions.COMMAND_HEAL_OTHERS) + .withPermission(Permissions.COMMAND_HEAL_OTHERS.permission()) .executes(info -> { CommandSender sender = info.sender(); Collection players = (Collection) info.args().get("players"); diff --git a/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java b/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java index 5b0de55..b783d23 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; import org.bukkit.entity.Player; @@ -15,7 +16,7 @@ public NutritionCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("nutrition") - .withPermission(Permissions.COMMAND_NUTRITION) + .withPermission(Permissions.COMMAND_NUTRITION.permission()) .executesPlayer(info -> { Player player = info.sender(); NutritionGUI gui = new NutritionGUI(this.plugin); diff --git a/src/main/java/com/shanebeestudios/survival/commands/Permissions.java b/src/main/java/com/shanebeestudios/survival/commands/Permissions.java deleted file mode 100644 index 8c8f0b7..0000000 --- a/src/main/java/com/shanebeestudios/survival/commands/Permissions.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.shanebeestudios.survival.commands; - -import com.shanebeestudios.survival.util.Utils; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; -import org.bukkit.util.permissions.DefaultPermissions; - -import java.util.LinkedHashMap; -import java.util.Map; - -public class Permissions { - - static final Map PERMISSIONS = new LinkedHashMap<>(); - - static final String COMMAND_CHAT = getCommand("chat", "Toggle global/local chat", PermissionDefault.TRUE); - static final String COMMAND_DATA_GEN = getCommand("datagen", "Generate stuff for configs, should not be used", PermissionDefault.OP); - static final String COMMAND_DEBUG = getCommand("debug", "Debug some internal things", PermissionDefault.OP); - static final String COMMAND_GIVEITEM = getCommand("giveitem", "Give a custom item", PermissionDefault.OP); - static final String COMMAND_HEAL = getCommand("heal", "Heal self", PermissionDefault.OP); - static final String COMMAND_HEAL_OTHERS = getCommand("heal.others", "Heal others", PermissionDefault.OP); - static final String COMMAND_NUTRITION = getCommand("nutrition", "Open nutrition GUI", PermissionDefault.TRUE); - static final String COMMAND_PLAYERDATA = getCommand("playerdata", "Adjust player data", PermissionDefault.OP); - static final String COMMAND_RELOAD = getCommand("reload", "Reload config files", PermissionDefault.OP); - static final String COMMAND_STATS = getCommand("stats", "Toggle stats", PermissionDefault.TRUE); - - private static String getCommand(String perm, String description, PermissionDefault defaultPermission) { - String stringPerm = "survivalplus.command." + perm; - Permission permission = DefaultPermissions.registerPermission(stringPerm, description, defaultPermission); - PERMISSIONS.put(stringPerm, permission); - return stringPerm; - } - - public static void debug() { - Utils.logMini("Permissions:"); - for (Map.Entry entry : PERMISSIONS.entrySet()) { - String color = switch (entry.getValue().getDefault()) { - case OP -> "yellow"; - case TRUE, NOT_OP -> "green"; - case FALSE -> "red"; - }; - Utils.logMini(" '<#F09616>%s':", entry.getKey()); - Utils.logMini(" Description: %s", entry.getValue().getDescription()); - Utils.logMini(" Default: <%s>%s", color, entry.getValue().getDefault().toString()); - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java b/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java index 874d5ba..8b231c7 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.DoubleArgument; import dev.jorel.commandapi.arguments.EntitySelectorArgument; @@ -22,7 +23,7 @@ public PlayerDataCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("playerdata") - .withPermission(Permissions.COMMAND_PLAYERDATA) + .withPermission(Permissions.COMMAND_PLAYERDATA.permission()) .then(new EntitySelectorArgument.ManyPlayers("players") .then(new MultiLiteralArgument("type", PlayerData.DataType.getNames()) .then(new MultiLiteralArgument("change", "add", "remove", "set") diff --git a/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java b/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java index 76a22b8..e6e0e2c 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; import com.shanebeestudios.survival.SurvivalPlugin; @@ -14,7 +15,7 @@ public ReloadCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("reload") - .withPermission(Permissions.COMMAND_RELOAD) + .withPermission(Permissions.COMMAND_RELOAD.permission()) .executes(info -> { this.plugin.loadSettings(info.sender()); Utils.sendColoredMini(info.sender(), this.lang.prefix + "Reload complete"); diff --git a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java index 7ef996a..e2c18c1 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.BukkitStringTooltip; import dev.jorel.commandapi.IStringTooltip; import dev.jorel.commandapi.arguments.Argument; @@ -51,7 +52,7 @@ public StatCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("stats") - .withPermission(Permissions.COMMAND_STATS) + .withPermission(Permissions.COMMAND_STATS.permission()) .then(new StringArgument("info") .includeSuggestions(ArgumentSuggestions.stringsWithTooltips(this.infoTooltips)) .then(new StringArgument("type") diff --git a/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java b/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java index 952eb69..036dcc8 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.commands; +import com.shanebeestudios.survival.data.Permissions; import dev.jorel.commandapi.BukkitStringTooltip; import dev.jorel.commandapi.IStringTooltip; import dev.jorel.commandapi.arguments.Argument; @@ -27,7 +28,7 @@ public ToggleChatCommand(SurvivalPlugin plugin) { @Override Argument register() { return LiteralArgument.literal("chat") - .withPermission(Permissions.COMMAND_CHAT) + .withPermission(Permissions.COMMAND_CHAT.permission()) //.then(new StringArgument("type") .then(new StringArgument("type") .replaceSuggestions(ArgumentSuggestions.stringsWithTooltips(this.typeTooltips)) diff --git a/src/main/java/com/shanebeestudios/survival/data/Permissions.java b/src/main/java/com/shanebeestudios/survival/data/Permissions.java new file mode 100644 index 0000000..0373637 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/data/Permissions.java @@ -0,0 +1,71 @@ +package com.shanebeestudios.survival.data; + +import com.shanebeestudios.survival.util.Utils; +import org.bukkit.command.CommandSender; +import org.bukkit.permissions.PermissionDefault; +import org.bukkit.util.permissions.DefaultPermissions; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class Permissions { + + public record Permission(String permission, org.bukkit.permissions.Permission bukkitPermission) { + + public boolean has(CommandSender sender) { + return sender.hasPermission(this.bukkitPermission.getName()); + } + } + + static final Map PERMISSIONS = new LinkedHashMap<>(); + + // Command permissions + public static final Permission COMMAND_CHAT = getCommand("chat", "Toggle global/local chat", PermissionDefault.TRUE); + public static final Permission COMMAND_DATA_GEN = getCommand("datagen", "Generate stuff for configs, should not be used", PermissionDefault.OP); + public static final Permission COMMAND_DEBUG = getCommand("debug", "Debug some internal things", PermissionDefault.OP); + public static final Permission COMMAND_GIVEITEM = getCommand("giveitem", "Give a custom item", PermissionDefault.OP); + public static final Permission COMMAND_HEAL = getCommand("heal", "Heal self", PermissionDefault.OP); + public static final Permission COMMAND_HEAL_OTHERS = getCommand("heal.others", "Heal others", PermissionDefault.OP); + public static final Permission COMMAND_NUTRITION = getCommand("nutrition", "Open nutrition GUI", PermissionDefault.TRUE); + public static final Permission COMMAND_PLAYERDATA = getCommand("playerdata", "Adjust player data", PermissionDefault.OP); + public static final Permission COMMAND_RELOAD = getCommand("reload", "Reload config files", PermissionDefault.OP); + public static final Permission COMMAND_STATS = getCommand("stats", "Toggle stats", PermissionDefault.TRUE); + + // Bypass permissions + public static final Permission BYPASS_STAT_ENERGY = getBypass("stat.energy", "Bypass energy stats"); + public static final Permission BYPASS_STAT_HUNGER = getBypass("stat.hunger", "Bypass hunger stats"); + public static final Permission BYPASS_STAT_NUTRITION = getBypass("stat.nutrition", "Bypass nutrition stats"); + public static final Permission BYPASS_REQUIRED_TOOLS = getBypass("required_tools", "Bypass required tools"); + public static final Permission BYPASS_STAT_THIRST = getBypass("stat.thirst", "Bypass thirst stats"); + public static final Permission BYPASS_WEATHER = getBypass("weather", "Bypass weather effects"); + + private static Permission getCommand(String perm, String description, PermissionDefault defaultPermission) { + return getBase("command", perm, description, defaultPermission); + } + + private static Permission getBypass(String perm, String description) { + return getBase("bypass", perm, description, PermissionDefault.FALSE); + } + + private static Permission getBase(String base, String perm, String description, PermissionDefault defaultPermission) { + String stringPerm = "survivalplus." + base + "." + perm; + org.bukkit.permissions.Permission bukkitPermission = DefaultPermissions.registerPermission(stringPerm, description, defaultPermission); + PERMISSIONS.put(stringPerm, bukkitPermission); + return new Permission(stringPerm, bukkitPermission); + } + + public static void debug() { + Utils.logMini("Permissions:"); + for (Map.Entry entry : PERMISSIONS.entrySet()) { + String color = switch (entry.getValue().getDefault()) { + case OP -> "yellow"; + case TRUE, NOT_OP -> "green"; + case FALSE -> "red"; + }; + Utils.logMini(" '<#F09616>%s':", entry.getKey()); + Utils.logMini(" Description: %s", entry.getValue().getDescription()); + Utils.logMini(" Default: <%s>%s", color, entry.getValue().getDefault().toString()); + } + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java index 1807d70..cc25de1 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java @@ -2,6 +2,7 @@ import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.Permissions; import com.shanebeestudios.survival.item.Items; import com.shanebeestudios.survival.managers.MessageManager; import com.shanebeestudios.survival.managers.MessageManager.MessageType; @@ -57,6 +58,8 @@ private void onBlockBreak(BlockBreakEvent event) { return; } + if (Permissions.BYPASS_REQUIRED_TOOLS.has(player)) return; + if (this.config.survival_break_only_with_shovel) { if (!Tag.ITEMS_SHOVELS.isTagged(tool.getType())) { // Gravel drop flint diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java index a8d4b99..bf4b53b 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java @@ -2,6 +2,7 @@ import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.Permissions; import com.shanebeestudios.survival.item.Items; import com.shanebeestudios.survival.managers.MessageManager; import com.shanebeestudios.survival.managers.MessageManager.MessageType; @@ -24,6 +25,7 @@ public class BlockPlaceListener implements Listener { private final Config config; private final MessageManager messageManager; + private final Random random = new Random(); public BlockPlaceListener(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); @@ -34,45 +36,42 @@ public BlockPlaceListener(SurvivalPlugin plugin) { @EventHandler(priority = EventPriority.HIGHEST) private void onBlockPlace(BlockPlaceEvent event) { if (event.isCancelled()) return; + if (!config.survival_place_only_with_hammer) return; + Player player = event.getPlayer(); + if (Permissions.BYPASS_REQUIRED_TOOLS.has(player)) return; + if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) return; ItemStack mainTool = player.getInventory().getItemInMainHand(); ItemStack offTool = player.getInventory().getItemInOffHand(); - Block block = event.getBlock(); - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - if (config.survival_place_only_with_hammer) { - if (BlockTags.REQUIRES_HAMMER.isTagged(block.getType())) { - if (Items.HAMMER.is(offTool)) { - Random rand = new Random(); - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ItemUtils.setDurability(offTool, ItemUtils.getDurability(offTool) + 1); - } + if (BlockTags.REQUIRES_HAMMER.isTagged(block.getType())) return; + + if (Items.HAMMER.is(offTool)) { + int chance_reduceDur = this.random.nextInt(10) + 1; + if (chance_reduceDur == 1) { + ItemUtils.setDurability(offTool, ItemUtils.getDurability(offTool) + 1); + } - if (ItemUtils.getDurability(offTool) >= offTool.getType().getMaxDurability()) { - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInOffHand(null); - } - } else if (Items.HAMMER.is(mainTool)) { - Random rand = new Random(); - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ItemUtils.setDurability(mainTool, ((Damageable) mainTool.getItemMeta()).getDamage() + 1); - } + if (ItemUtils.getDurability(offTool) >= offTool.getType().getMaxDurability()) { + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); + player.getInventory().setItemInOffHand(null); + } + } else if (Items.HAMMER.is(mainTool)) { + int chance_reduceDur = this.random.nextInt(10) + 1; + if (chance_reduceDur == 1) { + ItemUtils.setDurability(mainTool, ((Damageable) mainTool.getItemMeta()).getDamage() + 1); + } - if (ItemUtils.getDurability(mainTool) >= mainTool.getType().getMaxDurability()) { - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInMainHand(null); - } - } else { - event.setCancelled(true); - player.updateInventory(); - this.messageManager.sendMessage(player, MessageType.REQUIRES_HAMMER); - } - } + if (ItemUtils.getDurability(mainTool) >= mainTool.getType().getMaxDurability()) { + player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); + player.getInventory().setItemInMainHand(null); } + } else { + event.setCancelled(true); + player.updateInventory(); + this.messageManager.sendMessage(player, MessageType.REQUIRES_HAMMER); } } diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java index c4e7bd8..07a3eb3 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.listeners.item; +import com.shanebeestudios.survival.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -44,6 +45,8 @@ public ThirstListener(SurvivalPlugin plugin) { private void onConsume(PlayerItemConsumeEvent event) { if (event.isCancelled()) return; final Player player = event.getPlayer(); + if (Permissions.BYPASS_STAT_THIRST.has(player)) return; + PlayerData playerData = playerManager.getPlayerData(player); ItemStack itemStack = event.getItem(); double change = 0; @@ -97,6 +100,8 @@ private void onConsume(PlayerItemConsumeEvent event) { @EventHandler private void onExhaustionReached(EntityExhaustionEvent event) { Player player = (Player) event.getEntity(); + if (Permissions.BYPASS_STAT_THIRST.has(player)) return; + if (player.getExhaustion() >= 3.97) { // highest amount the event gets to (sometimes) PlayerData playerData = this.playerManager.getPlayerData(player); @@ -132,6 +137,8 @@ private void onFish(PlayerFishEvent event) { private void onRespawn(PlayerRespawnEvent event) { if (event.getRespawnReason() != PlayerRespawnEvent.RespawnReason.DEATH) return; Player player = event.getPlayer(); + if (Permissions.BYPASS_STAT_THIRST.has(player)) return; + PlayerData playerData = playerManager.getPlayerData(player); double thirst = config.mechanics_thirst_respawn_amount; playerData.setThirst(thirst); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java b/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java index 63d0f3e..441265e 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.listeners.player; +import com.shanebeestudios.survival.data.Permissions; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -35,6 +36,8 @@ private void onRespawn(PlayerRespawnEvent event) { Player player = event.getPlayer(); if (Utils.isCitizensNPC(player)) return; + if (Permissions.BYPASS_STAT_ENERGY.has(player)) return; + PlayerData playerData = this.playerManager.getPlayerData(player); double respawnAmount = this.config.mechanics_energy_respawn; @@ -48,6 +51,8 @@ private void onRespawn(PlayerRespawnEvent event) { private void onDrinkCoffee(PlayerItemConsumeEvent event) { ItemStack item = event.getItem(); Player player = event.getPlayer(); + if (Permissions.BYPASS_STAT_ENERGY.has(player)) return; + PlayerData playerData = this.playerManager.getPlayerData(player); if (Items.COFFEE.is(item)) { @@ -60,6 +65,7 @@ private void onDrinkCoffee(PlayerItemConsumeEvent event) { @EventHandler // Decrease energy when player does exhaustive tasks private void onExhausted(EntityExhaustionEvent event) { Player player = (Player) event.getEntity(); + if (Permissions.BYPASS_STAT_ENERGY.has(player)) return; float exhaustion = event.getExhaustion(); if (player.getExhaustion() + exhaustion < 4.0f) return; @@ -109,6 +115,7 @@ private void onSkipNight(TimeSkipEvent event) { if (event.getSkipReason() != TimeSkipEvent.SkipReason.NIGHT_SKIP) return; for (Player player : event.getWorld().getPlayers()) { + if (Permissions.BYPASS_STAT_ENERGY.has(player)) continue; if (!player.isSleeping()) continue; PlayerData playerData = this.playerManager.getPlayerData(player); diff --git a/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java b/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java index 367a381..0400864 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.tasks; +import com.shanebeestudios.survival.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.World.Environment; @@ -38,6 +39,8 @@ public EnergyDrain(SurvivalPlugin plugin) { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { + if (Permissions.BYPASS_STAT_ENERGY.has(player)) continue; + PlayerData playerData = playerManager.getPlayerData(player); GameMode mode = player.getGameMode(); if (mode == GameMode.SPECTATOR || mode == GameMode.CREATIVE) continue; diff --git a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java index 008eea6..81ad91c 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.tasks; +import com.shanebeestudios.survival.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.entity.Player; @@ -21,6 +22,8 @@ class NutrientsDrain extends BukkitRunnable { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { + if (Permissions.BYPASS_STAT_NUTRITION.has(player)) continue; + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { if (player.getExhaustion() >= 4) { PlayerData playerData = playerManager.getPlayerData(player); diff --git a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java index 200981d..2e1594b 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.tasks; +import com.shanebeestudios.survival.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.NamespacedKey; @@ -36,6 +37,7 @@ class NutrientsEffect extends BukkitRunnable { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { + if (Permissions.BYPASS_STAT_NUTRITION.has(player)) continue; if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; World world = player.getWorld(); diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java b/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java index fd4b9f1..709191c 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java @@ -2,6 +2,7 @@ import com.shanebeestudios.survival.SurvivalPlugin; import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.Permissions; import com.shanebeestudios.survival.data.PlayerData; import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; import com.shanebeestudios.survival.managers.PlayerManager; @@ -30,7 +31,10 @@ class ThirstTask extends BukkitRunnable { @Override public void run() { for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (Permissions.BYPASS_STAT_THIRST.has(player)) continue; + if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; + PlayerData playerData = this.playerManager.getPlayerData(player); Environment environment = player.getWorld().getEnvironment(); if (environment == Environment.NORMAL) { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java b/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java index 44bb391..41b8528 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.tasks; +import com.shanebeestudios.survival.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; @@ -29,6 +30,7 @@ public WeatherTask(SurvivalPlugin plugin) { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { + if (Permissions.BYPASS_WEATHER.has(player)) continue; handleWeather(player); } } From ddaff1855cfd177f4701210550bd2fcd316e804a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 18 Feb 2025 23:58:33 -0800 Subject: [PATCH 091/133] PlayerDataCommand - add get - this is technically supported with the stats command, but thought it was nice --- .../survival/commands/PlayerDataCommand.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java b/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java index 8b231c7..6f751d3 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java @@ -26,6 +26,27 @@ Argument register() { .withPermission(Permissions.COMMAND_PLAYERDATA.permission()) .then(new EntitySelectorArgument.ManyPlayers("players") .then(new MultiLiteralArgument("type", PlayerData.DataType.getNames()) + .then(LiteralArgument.literal("get") + .executes(info -> { + Collection players = (Collection) info.args().get("players"); + String type = info.args().getByClass("type", String.class); + PlayerData.DataType dataType = PlayerData.DataType.getByName(type); + if (dataType == null) { + return; + } + assert players != null; + players.forEach(player -> { + PlayerData playerData = this.playerManager.getPlayerData(player); + if (playerData == null) { + Utils.sendColoredMini(info.sender(), "Invalid player data for " + player.getName()); + return; + } + + double data = playerData.getData(dataType); + Utils.sendColoredMini(info.sender(), "Data: %s = %.2f", type, data); + }); + + })) .then(new MultiLiteralArgument("change", "add", "remove", "set") .then(new DoubleArgument("amount") .executes(info -> { From a1a4e867435f09f30f98862328d09b8992e88063 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 00:17:52 -0800 Subject: [PATCH 092/133] StatCommand - add color --- .../survival/commands/StatCommand.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java index e2c18c1..fbf5193 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java @@ -85,10 +85,13 @@ private void showStat(@NotNull Player player, @Nullable Info info) { PlayerData playerData = this.playerManager.getPlayerData(player); String message = switch (info) { - case HUNGER -> String.format("%s: %s", this.lang.hunger, playerData.getHunger()); - case THIRST -> String.format("%s: %s", this.lang.thirst, playerData.getThirst()); - case ENERGY -> String.format("Energy: %.2f", playerData.getEnergy()); - case NUTRIENTS -> String.format("%s: %s = %s, %s = %s, %s = %s", + case HUNGER -> String.format("%s: %.2f", this.lang.hunger, playerData.getHunger()); + case THIRST -> String.format("%s: %.2f", this.lang.thirst, playerData.getThirst()); + case ENERGY -> String.format("%s: %.2f", this.lang.energy, playerData.getEnergy()); + case NUTRIENTS -> String.format("%s: " + + "<#A0E853>%s = %s, " + + "<#CE784D>%s = %s, " + + "<#53DDE8>%s = %s", this.lang.nutrients, this.lang.carbohydrates, playerData.getNutrient(Nutrient.CARBS), @@ -96,6 +99,10 @@ private void showStat(@NotNull Player player, @Nullable Info info) { playerData.getNutrient(Nutrient.PROTEIN), this.lang.vitamins, playerData.getNutrient(Nutrient.VITAMINS)); + + //nutrients.add("<#A0E853>" + this.lang.carbohydrates); + // nutrients.add("<#CE784D>" + this.lang.protein); + // nutrients.add("<#53DDE8>" + this.lang.vitamins); }; Utils.sendColoredMini(player, message); From 63dcbc4ddf02095804b1311df465f55a98d8d75a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 01:06:14 -0800 Subject: [PATCH 093/133] More thirst changes --- .../survival/listeners/EventManager.java | 16 +- .../listeners/item/DrinkableItemListener.java | 87 ++++++++++ .../listeners/item/ThirstListener.java | 160 ------------------ .../listeners/item/WaterBottleListener.java | 61 ------- ...Bottle.java => WaterPurifiedListener.java} | 72 +++++++- .../listeners/player/ThirstListener.java | 67 ++++++++ 6 files changed, 231 insertions(+), 232 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/listeners/item/DrinkableItemListener.java delete mode 100644 src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java delete mode 100644 src/main/java/com/shanebeestudios/survival/listeners/item/WaterBottleListener.java rename src/main/java/com/shanebeestudios/survival/listeners/item/{CauldronWaterBottle.java => WaterPurifiedListener.java} (54%) create mode 100644 src/main/java/com/shanebeestudios/survival/listeners/player/ThirstListener.java diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 1b0affd..8f211dc 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -19,9 +19,9 @@ import com.shanebeestudios.survival.listeners.item.BeetrootStrength; import com.shanebeestudios.survival.listeners.item.BlazeSword; import com.shanebeestudios.survival.listeners.item.BowListener; -import com.shanebeestudios.survival.listeners.item.CauldronWaterBottle; import com.shanebeestudios.survival.listeners.item.CompassWaypoint; import com.shanebeestudios.survival.listeners.item.CookieHealthBoost; +import com.shanebeestudios.survival.listeners.item.DrinkableItemListener; import com.shanebeestudios.survival.listeners.item.FirestrikerListener; import com.shanebeestudios.survival.listeners.item.FoodDiversityConsume; import com.shanebeestudios.survival.listeners.item.GiantBlade; @@ -33,10 +33,10 @@ import com.shanebeestudios.survival.listeners.item.RecurvedBowListener; import com.shanebeestudios.survival.listeners.item.RepairCrafting; import com.shanebeestudios.survival.listeners.item.ShivPoison; -import com.shanebeestudios.survival.listeners.item.ThirstListener; +import com.shanebeestudios.survival.listeners.player.ThirstListener; import com.shanebeestudios.survival.listeners.item.TropicalFish; import com.shanebeestudios.survival.listeners.item.Valkyrie; -import com.shanebeestudios.survival.listeners.item.WaterBottleListener; +import com.shanebeestudios.survival.listeners.item.WaterPurifiedListener; import com.shanebeestudios.survival.listeners.item.WaterBowlListener; import com.shanebeestudios.survival.listeners.player.EnergyChange; import com.shanebeestudios.survival.listeners.player.PlayerDataListener; @@ -92,19 +92,17 @@ public void registerEvents() { pluginManager.registerEvents(new CompassWaypoint(this.plugin), this.plugin); if (this.config.mechanics_medic_kit) pluginManager.registerEvents(new MedicKit(this.plugin), this.plugin); - - pluginManager.registerEvents(new WaterBottleListener(this.plugin), this.plugin); - if (this.config.settings_resource_pack_enabled) { pluginManager.registerEvents(new ResourcePackListener(this.plugin), this.plugin); } - if (this.config.mechanics_raw_meat_hunger) pluginManager.registerEvents(new RawMeatHunger(), this.plugin); if (this.config.mechanics_thirst_enabled) { pluginManager.registerEvents(new ThirstListener(this.plugin), this.plugin); - if (this.config.mechanics_thirst_purify_water) - pluginManager.registerEvents(new CauldronWaterBottle(), this.plugin); + pluginManager.registerEvents(new DrinkableItemListener(this.plugin), this.plugin); + if (this.config.mechanics_thirst_purify_water) { + pluginManager.registerEvents(new WaterPurifiedListener(this.plugin), this.plugin); + } } if (this.config.mechanics_poison_potato) pluginManager.registerEvents(new PoisonousPotato(), this.plugin); diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/DrinkableItemListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/DrinkableItemListener.java new file mode 100644 index 0000000..dc450d6 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/DrinkableItemListener.java @@ -0,0 +1,87 @@ +package com.shanebeestudios.survival.listeners.item; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.item.items.drinks.DrinkItem; +import com.shanebeestudios.survival.managers.PlayerManager; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; + +public class DrinkableItemListener implements Listener { + + private final SurvivalPlugin plugin; + private final Config config; + private final PlayerManager playerManager; + + public DrinkableItemListener(SurvivalPlugin plugin) { + this.plugin = plugin; + this.config = plugin.getSurvivalConfig(); + this.playerManager = plugin.getPlayerManager(); + } + + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + private void onConsume(PlayerItemConsumeEvent event) { + final Player player = event.getPlayer(); + if (Permissions.BYPASS_STAT_THIRST.has(player)) return; + + PlayerData playerData = playerManager.getPlayerData(player); + ItemStack itemStack = event.getItem(); + double change = 0; + Item item = Items.getFromStack(itemStack); + if (item instanceof DrinkItem drinkItem) { + change = drinkItem.getThirstLevel(); + } else { + switch (event.getItem().getType()) { + case APPLE: + change = this.config.mechanics_thirst_rep_apple; + break; + case BEETROOT_SOUP: + change = this.config.mechanics_thirst_rep_beetroot_soup; + break; + case POTION: + if (this.config.mechanics_thirst_purify_water) { + change = this.config.mechanics_thirst_rep_other_water; + } else { + change = this.config.mechanics_thirst_rep_water; + } + break; + case MILK_BUCKET: + change = this.config.mechanics_thirst_rep_milk_bucket; + break; + case MELON_SLICE: + change = this.config.mechanics_thirst_rep_melon_slice; + break; + case MUSHROOM_STEW: + change = this.config.mechanics_thirst_rep_mush_stew; + break; + case HONEY_BOTTLE: + change = this.config.mechanics_thirst_rep_honey_bottle; + break; + } + } + if (change <= 0) return; + + ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); + if (thirstEvent.callEvent()) { + playerData.setThirst(playerData.getThirst() + change); + } + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + if (!this.config.mechanics_status_scoreboard) { + player.sendMessage(this.plugin.getPlayerManager().getHungerVisual(player).get(1) + this.plugin.getPlayerManager().getHungerVisual(player).get(2) + " " + plugin.getPlayerManager().getHungerVisual(player).get(0).toUpperCase()); + player.sendMessage(this.plugin.getPlayerManager().getThirstVisual(player).get(1) + this.plugin.getPlayerManager().getThirstVisual(player).get(2) + " " + plugin.getPlayerManager().getThirstVisual(player).get(0).toUpperCase()); + } + }, 1L); + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java deleted file mode 100644 index 07a3eb3..0000000 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/ThirstListener.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.shanebeestudios.survival.listeners.item; - -import com.shanebeestudios.survival.data.Permissions; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityExhaustionEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerItemConsumeEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.item.items.drinks.DrinkItem; -import com.shanebeestudios.survival.managers.PlayerManager; - -import java.util.Random; - -public class ThirstListener implements Listener { - - private final SurvivalPlugin plugin; - private final Config config; - private final PlayerManager playerManager; - private final Random random = new Random(); - private final double drain; - - public ThirstListener(SurvivalPlugin plugin) { - this.plugin = plugin; - this.config = plugin.getSurvivalConfig(); - this.playerManager = plugin.getPlayerManager(); - this.drain = config.mechanics_thirst_drain_rate; - } - - @EventHandler(priority = EventPriority.HIGHEST) - private void onConsume(PlayerItemConsumeEvent event) { - if (event.isCancelled()) return; - final Player player = event.getPlayer(); - if (Permissions.BYPASS_STAT_THIRST.has(player)) return; - - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack itemStack = event.getItem(); - double change = 0; - Item item = Items.getFromStack(itemStack); - if (item instanceof DrinkItem drinkItem) { - change = drinkItem.getThirstLevel(); - } else { - switch (event.getItem().getType()) { - case APPLE: - change = this.config.mechanics_thirst_rep_apple; - break; - case BEETROOT_SOUP: - change = this.config.mechanics_thirst_rep_beetroot_soup; - break; - case POTION: - if (this.config.mechanics_thirst_purify_water) { - change = this.config.mechanics_thirst_rep_other_water; - } else { - change = this.config.mechanics_thirst_rep_water; - } - break; - case MILK_BUCKET: - change = this.config.mechanics_thirst_rep_milk_bucket; - break; - case MELON_SLICE: - change = this.config.mechanics_thirst_rep_melon_slice; - break; - case MUSHROOM_STEW: - change = this.config.mechanics_thirst_rep_mush_stew; - break; - case HONEY_BOTTLE: - change = this.config.mechanics_thirst_rep_honey_bottle; - break; - } - } - if (change <= 0) return; - - ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); - if (thirstEvent.callEvent()) { - playerData.setThirst(playerData.getThirst() + change); - } - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (!config.mechanics_status_scoreboard) { - player.sendMessage(plugin.getPlayerManager().getHungerVisual(player).get(1) + plugin.getPlayerManager().getHungerVisual(player).get(2) + " " + plugin.getPlayerManager().getHungerVisual(player).get(0).toUpperCase()); - player.sendMessage(plugin.getPlayerManager().getThirstVisual(player).get(1) + plugin.getPlayerManager().getThirstVisual(player).get(2) + " " + plugin.getPlayerManager().getThirstVisual(player).get(0).toUpperCase()); - } - }, 1L); - } - - @EventHandler - private void onExhaustionReached(EntityExhaustionEvent event) { - Player player = (Player) event.getEntity(); - if (Permissions.BYPASS_STAT_THIRST.has(player)) return; - - if (player.getExhaustion() >= 3.97) { // highest amount the event gets to (sometimes) - PlayerData playerData = this.playerManager.getPlayerData(player); - - int change = this.random.nextDouble() <= this.drain ? 1 : 0; - - // Prevent calling thirst event if there is no change - if (change == 0) return; - - // Call thirst level change event - ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); - if (thirstEvent.callEvent()) { - playerData.increaseThirst(-change); - } - } - } - - - @EventHandler // if player catches a water bottle/potion give them dirty water instead - private void onFish(PlayerFishEvent event) { - if (event.isCancelled() || !config.mechanics_thirst_purify_water) return; - if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) return; - - Entity caught = event.getCaught(); - if (caught instanceof org.bukkit.entity.Item item) { - ItemStack stack = item.getItemStack(); - if (stack.getType() == Material.POTION && checkWaterBottle(stack)) { - item.setItemStack(Items.getBiomeBasedWaterBottle(caught.getLocation().getBlock().getBiome()).getItemStack()); - } - } - } - - @EventHandler - private void onRespawn(PlayerRespawnEvent event) { - if (event.getRespawnReason() != PlayerRespawnEvent.RespawnReason.DEATH) return; - Player player = event.getPlayer(); - if (Permissions.BYPASS_STAT_THIRST.has(player)) return; - - PlayerData playerData = playerManager.getPlayerData(player); - double thirst = config.mechanics_thirst_respawn_amount; - playerData.setThirst(thirst); - playerManager.getPlayerData(player).setThirst(thirst); - - double hunger = this.config.mechanics_hunger_respawn_amount; - Bukkit.getScheduler().runTaskLater(plugin, () -> playerData.setHunger(hunger), 1); - } - - private boolean checkWaterBottle(ItemStack bottle) { - ItemMeta meta = bottle.getItemMeta(); - assert meta != null; - return switch (((PotionMeta) meta).getBasePotionType()) { - case WATER, MUNDANE, THICK, AWKWARD -> true; - case null, default -> false; - }; - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBottleListener.java b/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBottleListener.java deleted file mode 100644 index 4997a3a..0000000 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBottleListener.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.shanebeestudios.survival.listeners.item; - -import org.bukkit.FluidCollisionMode; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.data.Waterlogged; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Items; - - -public class WaterBottleListener implements Listener { - - private final Config config; - - public WaterBottleListener(SurvivalPlugin plugin) { - this.config = plugin.getSurvivalConfig(); - } - - @EventHandler // Fill a bottle resulting in a water bottle - private void onFillWaterBottle(PlayerInteractEvent event) { - if (!config.mechanics_thirst_purify_water) return; - Player player = event.getPlayer(); - ItemStack item = event.getItem(); - EquipmentSlot hand = event.getHand(); - Action action = event.getAction(); - if (action != Action.RIGHT_CLICK_AIR && action != Action.RIGHT_CLICK_BLOCK) return; - if (item == null || hand == null || item.getType() != Material.GLASS_BOTTLE) return; - - Block targetBlock = player.getTargetBlockExact(5, FluidCollisionMode.ALWAYS); - if (targetBlock == null || !isWaterBlock(targetBlock)) return; - event.setCancelled(true); - - ItemStack waterBottle = Items.getBiomeBasedWaterBottle(targetBlock.getBiome()).getItemStack(); - if (item.getAmount() > 1) { - if (!player.getInventory().addItem(waterBottle).isEmpty()) { - player.getWorld().dropItem(player.getLocation(), waterBottle); - } - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) - item.setAmount(item.getAmount() - 1); - } else { - player.getInventory().setItem(hand, waterBottle); - } - } - - private boolean isWaterBlock(Block block) { - if (block.getType() == Material.WATER) { - return true; - } - return block.getBlockData() instanceof Waterlogged waterlogged && waterlogged.isWaterlogged(); - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/CauldronWaterBottle.java b/src/main/java/com/shanebeestudios/survival/listeners/item/WaterPurifiedListener.java similarity index 54% rename from src/main/java/com/shanebeestudios/survival/listeners/item/CauldronWaterBottle.java rename to src/main/java/com/shanebeestudios/survival/listeners/item/WaterPurifiedListener.java index 7c5da40..2e8d09c 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/CauldronWaterBottle.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/WaterPurifiedListener.java @@ -1,23 +1,91 @@ package com.shanebeestudios.survival.listeners.item; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.item.Items; +import org.bukkit.FluidCollisionMode; +import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.Levelled; +import org.bukkit.block.data.Waterlogged; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; -import com.shanebeestudios.survival.item.Items; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; + @SuppressWarnings("UnstableApiUsage") -public class CauldronWaterBottle implements Listener { +public class WaterPurifiedListener implements Listener { + + @SuppressWarnings("unused") + public WaterPurifiedListener(SurvivalPlugin plugin) { + } + + @EventHandler // Fill a bottle resulting in a water bottle + private void onFillWaterBottle(PlayerInteractEvent event) { + Player player = event.getPlayer(); + ItemStack item = event.getItem(); + EquipmentSlot hand = event.getHand(); + Action action = event.getAction(); + if (action != Action.RIGHT_CLICK_AIR && action != Action.RIGHT_CLICK_BLOCK) return; + if (item == null || hand == null || item.getType() != Material.GLASS_BOTTLE) return; + + Block targetBlock = player.getTargetBlockExact(5, FluidCollisionMode.ALWAYS); + if (targetBlock == null || !isWaterBlock(targetBlock)) return; + event.setCancelled(true); + + ItemStack waterBottle = Items.getBiomeBasedWaterBottle(targetBlock.getBiome()).getItemStack(); + if (item.getAmount() > 1) { + if (!player.getInventory().addItem(waterBottle).isEmpty()) { + player.getWorld().dropItem(player.getLocation(), waterBottle); + } + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) + item.setAmount(item.getAmount() - 1); + } else { + player.getInventory().setItem(hand, waterBottle); + } + } + + @EventHandler // if player catches a water bottle/potion give them dirty water instead + private void onFish(PlayerFishEvent event) { + if (event.isCancelled()) return; + if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) return; + + Entity caught = event.getCaught(); + if (caught instanceof org.bukkit.entity.Item item) { + ItemStack stack = item.getItemStack(); + if (stack.getType() == Material.POTION && checkWaterBottle(stack)) { + item.setItemStack(Items.getBiomeBasedWaterBottle(caught.getLocation().getBlock().getBiome()).getItemStack()); + } + } + } + + private boolean checkWaterBottle(ItemStack bottle) { + ItemMeta meta = bottle.getItemMeta(); + assert meta != null; + return switch (((PotionMeta) meta).getBasePotionType()) { + case WATER, MUNDANE, THICK, AWKWARD -> true; + case null, default -> false; + }; + } + + private boolean isWaterBlock(Block block) { + if (block.getType() == Material.WATER) { + return true; + } + return block.getBlockData() instanceof Waterlogged waterlogged && waterlogged.isWaterlogged(); + } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onItemClick(PlayerInteractEvent event) { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/player/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/listeners/player/ThirstListener.java new file mode 100644 index 0000000..dc2563b --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/listeners/player/ThirstListener.java @@ -0,0 +1,67 @@ +package com.shanebeestudios.survival.listeners.player; + +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.managers.PlayerManager; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityExhaustionEvent; +import org.bukkit.event.player.PlayerRespawnEvent; + +public class ThirstListener implements Listener { + + private final SurvivalPlugin plugin; + private final Config config; + private final PlayerManager playerManager; + + public ThirstListener(SurvivalPlugin plugin) { + this.plugin = plugin; + this.config = plugin.getSurvivalConfig(); + this.playerManager = plugin.getPlayerManager(); + } + + @EventHandler + private void onExhaustionReached(EntityExhaustionEvent event) { + Player player = (Player) event.getEntity(); + if (Permissions.BYPASS_STAT_THIRST.has(player)) return; + + float exhaustion = event.getExhaustion(); + if (player.getExhaustion() + exhaustion < 4.0f) return; + + PlayerData playerData = this.playerManager.getPlayerData(player); + + double change = this.config.mechanics_thirst_drain_rate; + + // Prevent calling thirst event if there is no change + if (change == 0) return; + + // Call thirst level change event + ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); + if (thirstEvent.callEvent()) { + playerData.increaseThirst(-change); + } + } + + + @EventHandler + private void onRespawn(PlayerRespawnEvent event) { + if (event.getRespawnReason() != PlayerRespawnEvent.RespawnReason.DEATH) return; + + Player player = event.getPlayer(); + if (Permissions.BYPASS_STAT_THIRST.has(player)) return; + + PlayerData playerData = this.playerManager.getPlayerData(player); + double thirst = this.config.mechanics_thirst_respawn_amount; + playerData.setThirst(thirst); + this.playerManager.getPlayerData(player).setThirst(thirst); + + double hunger = this.config.mechanics_hunger_respawn_amount; + Bukkit.getScheduler().runTaskLater(this.plugin, () -> playerData.setHunger(hunger), 1); + } + +} From 619059042ec4541c2142c45234ee02d1af7b9287 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 01:18:25 -0800 Subject: [PATCH 094/133] config.yml - fix line --- src/main/resources/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7e2f725..1274a86 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -241,7 +241,8 @@ mechanics: # Setting to 0 will disable this cold-drain-rate: 0.015 # Every 5 seconds a player spends in bed, the level of energy to increase - sleeping-refresh-rate: 0.83 # Default (0.83) equivalent to 10 levels in 1 minute + # Default (0.83) equivalent to 10 levels in 1 minute + sleeping-refresh-rate: 0.83 # Every 5 seconds a player spends sitting in a chair, the level of energy to increase # (Will only work if chairs are enabled) chair-refresh-rate: 0.25 # Default (0.41) equivalent to 3 levels in 1 minute From a7a50d41b1801f132fd149cb8c83c5ae62f28577 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 02:37:43 -0800 Subject: [PATCH 095/133] switch nutrient task to listener --- .../listeners/item/FoodDiversityConsume.java | 16 ++++++++ .../survival/tasks/NutrientsDrain.java | 39 ------------------- .../survival/tasks/TaskManager.java | 1 - 3 files changed, 16 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java b/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java index b35be18..632034d 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.listeners.item; +import com.shanebeestudios.survival.data.Permissions; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -11,6 +12,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityExhaustionEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; @@ -35,6 +37,20 @@ public FoodDiversityConsume(SurvivalPlugin plugin) { RESPAWN_SALTS = config.mechanics_food_respawn_vitamins; } + @EventHandler // Decrease nutrients when player does exhaustive tasks + private void onExhausted(EntityExhaustionEvent event) { + Player player = (Player) event.getEntity(); + if (Permissions.BYPASS_STAT_NUTRITION.has(player)) return; + + float exhaustion = event.getExhaustion(); + if (player.getExhaustion() + exhaustion < 4.0f) return; + + PlayerData playerData = playerManager.getPlayerData(player); + playerData.increaseNutrient(Nutrient.CARBS, -8); + playerData.increaseNutrient(Nutrient.PROTEIN, -2); + playerData.increaseNutrient(Nutrient.VITAMINS, -3); + } + @EventHandler(priority = EventPriority.HIGHEST) private void onConsume(PlayerItemConsumeEvent event) { if (event.isCancelled()) return; diff --git a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java b/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java deleted file mode 100644 index 81ad91c..0000000 --- a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsDrain.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.shanebeestudios.survival.tasks; - -import com.shanebeestudios.survival.data.Permissions; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; - -class NutrientsDrain extends BukkitRunnable { - - private final PlayerManager playerManager; - - NutrientsDrain(SurvivalPlugin plugin) { - this.playerManager = plugin.getPlayerManager(); - this.runTaskTimer(plugin, -1, 1); - } - - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - if (Permissions.BYPASS_STAT_NUTRITION.has(player)) continue; - - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - if (player.getExhaustion() >= 4) { - PlayerData playerData = playerManager.getPlayerData(player); - - playerData.increaseNutrient(Nutrient.CARBS, -8); - playerData.increaseNutrient(Nutrient.PROTEIN, -2); - playerData.increaseNutrient(Nutrient.VITAMINS, -3); - } - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java b/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java index 1f9fefc..afb7cc1 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java +++ b/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java @@ -15,7 +15,6 @@ public TaskManager(SurvivalPlugin plugin) { new EnergyDrain(plugin); } if (config.mechanics_food_diversity_enabled) { - new NutrientsDrain(plugin); new NutrientsEffect(plugin); if (!config.mechanics_status_scoreboard && alertInterval > 0) { new NutrientsAlert(plugin); From 0c68e4f468f3b77e9bf6eccfd74619b770df658b Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 12:29:05 -0800 Subject: [PATCH 096/133] AvoidPlayerGoal - add option to have some mobs avoid players --- .../survival/config/Config.java | 48 ++++++- .../survival/goals/AvoidPlayerGoal.java | 135 ++++++++++++++++++ .../survival/listeners/EventManager.java | 5 + .../listeners/entity/AvoidPlayerListener.java | 31 ++++ src/main/resources/config.yml | 11 ++ 5 files changed, 228 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java create mode 100644 src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index df36b57..d5a5588 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -1,5 +1,7 @@ package com.shanebeestudios.survival.config; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.util.Utils; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -7,8 +9,9 @@ import org.bukkit.Tag; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.util.Utils; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Mob; import java.io.File; import java.io.InputStream; @@ -177,6 +180,7 @@ public class Config { public int entity_mechanics_chicken_breeding_baby_ticks; public boolean entity_mechanics_piglin_drop_water; public boolean entity_mechanics_piglin_alt_drop; + public List entity_mechanics_mobs_avoid_players; // RECIPES public boolean recipes_saddle; @@ -428,6 +432,7 @@ private void loadSettings() { this.entity_mechanics_chicken_breeding_baby_ticks = this.settings.getInt("entity-mechanics.chicken-breeding.baby-ticks"); this.entity_mechanics_piglin_drop_water = this.settings.getBoolean("entity-mechanics.piglin-barter.drop-purified-water"); this.entity_mechanics_piglin_alt_drop = this.settings.getBoolean("entity-mechanics.piglin-barter.alternate-bartering"); + this.entity_mechanics_mobs_avoid_players = getEntityTypes("entity-mechanics.mobs-avoid-players"); // RECIPES this.recipes_saddle = this.settings.getBoolean("recipes.saddle"); @@ -509,4 +514,43 @@ private List getChairBlocks() { return materials; } + @SuppressWarnings("SameParameterValue") + private List getEntityTypes(String path) { + List entityTypes = new ArrayList<>(); + List stringList = this.settings.getStringList(path); + for (String string : stringList) { + if (string.startsWith("#")) { + NamespacedKey key; + if (string.contains(":")) key = NamespacedKey.fromString(string); + else key = NamespacedKey.minecraft(string); + if (key != null) { + Tag tag = Bukkit.getTag(Tag.REGISTRY_ENTITY_TYPES, key, EntityType.class); + if (tag != null) { + for (EntityType entityType : tag.getValues()) { + if (entityType != null) { + Class entityClass = entityType.getEntityClass(); + if (entityClass == null || !Mob.class.isAssignableFrom(entityClass)) continue; + entityTypes.add(entityType); + } + } + } + } + } else { + NamespacedKey key; + if (string.contains(":")) key = NamespacedKey.fromString(string); + else key = NamespacedKey.minecraft(string); + if (key != null) { + EntityType entityType = Registry.ENTITY_TYPE.get(key); + if (entityType != null) { + Class entityClass = entityType.getEntityClass(); + if (entityClass == null || !Mob.class.isAssignableFrom(entityClass)) continue; + entityTypes.add(entityType); + } + } + } + } + + return entityTypes; + } + } diff --git a/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java b/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java new file mode 100644 index 0000000..1c0d007 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java @@ -0,0 +1,135 @@ +package com.shanebeestudios.survival.goals; + +import com.destroystokyo.paper.entity.Pathfinder; +import com.destroystokyo.paper.entity.ai.Goal; +import com.destroystokyo.paper.entity.ai.GoalKey; +import com.destroystokyo.paper.entity.ai.GoalType; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.tag.Tag; +import io.papermc.paper.registry.tag.TagKey; +import net.kyori.adventure.key.Key; +import org.bukkit.Location; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.Statistic; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Mob; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.EnumSet; +import java.util.Optional; +import java.util.Random; + +@SuppressWarnings({"NullableProblems", "UnstableApiUsage"}) +public class AvoidPlayerGoal implements Goal<@NotNull Mob> { + + private static final Registry ITEM_REGISTRY = RegistryAccess.registryAccess().getRegistry(RegistryKey.ITEM); + + @SuppressWarnings("DataFlowIssue") + private static final GoalKey<@NotNull Mob> GOAL_KEY = GoalKey.of(Mob.class, NamespacedKey.fromString("beer:avoid_player_goal")); + + private final Random random = new Random(); + private final Mob mob; + private Player avoid; + private Pathfinder pathfinder; + private Pathfinder.PathResult path; + private @Nullable Tag foodTag; + private double speed = 1.6; + + @SuppressWarnings("PatternValidation") + public AvoidPlayerGoal(Mob mob) { + this.mob = mob; + this.pathfinder = mob.getPathfinder(); + TagKey tagKey = TagKey.create(RegistryKey.ITEM, Key.key(mob.getType().key() + "_food")); + if (ITEM_REGISTRY.hasTag(tagKey)) { + this.foodTag = ITEM_REGISTRY.getTag(tagKey); + } + } + + @Override + public boolean shouldActivate() { + Optional any = this.mob.getNearbyEntities(7, 7, 7) + .stream() + .filter(entity -> entity.getType() == EntityType.PLAYER) + .map(entity -> (Player) entity) + .findAny(); + if (any.isEmpty()) return false; + + this.avoid = any.get(); + if (!shouldAvoid()) return false; + this.pathfinder = this.mob.getPathfinder(); + // TODO paper bug causes this to error +// if (this.mob instanceof Animals animal && !animal.isAdult()) { +// Goal goal = Bukkit.getMobGoals().getGoal(animal, VanillaGoal.FOLLOW_PARENT); +// if (goal != null) { +// goal.stop(); +// Optional parent = this.mob.getNearbyEntities(10, 4, 10).stream().filter(entity -> entity != this.mob +// && entity.getType() == this.mob.getType()).findFirst(); +// if (parent.isPresent()) { +// Pathfinder.PathResult pathToParent = this.pathfinder.findPath(parent.get().getLocation()); +// if (pathToParent != null) { +// this.path = pathToParent; +// return true; +// } +// } +// } +// } + Location mobLoc = this.mob.getLocation(); + Vector direction = mobLoc.toVector().subtract(this.avoid.getLocation().toVector()).normalize().multiply(10); + Location newLoc = mobLoc.add(direction); + int x = random.nextInt(2, 5); + int z = random.nextInt(2, 5); + x = random.nextBoolean() ? x : -x; + z = random.nextBoolean() ? z : -z; + Location add = newLoc.add(x, 0, z).getWorld().getHighestBlockAt(newLoc).getLocation().add(0, 1, 0); + this.path = this.pathfinder.findPath(add); + return this.path != null; + } + + private boolean shouldAvoid() { + if (this.avoid instanceof Player player && this.foodTag != null) { + PlayerInventory inventory = player.getInventory(); + TypedKey hand = TypedKey.create(RegistryKey.ITEM, inventory.getItemInMainHand().getType().key()); + TypedKey off = TypedKey.create(RegistryKey.ITEM, inventory.getItemInOffHand().getType().key()); + return !this.foodTag.contains(hand) && !this.foodTag.contains(off); + } + return !this.avoid.isSneaking(); + } + + @Override + public boolean shouldStayActive() { + int statistic = this.avoid.getStatistic(Statistic.PLAY_ONE_MINUTE); + this.speed = statistic > 48000 ? 1.6 : 1.25; + return this.shouldAvoid() && this.path != null && this.pathfinder.hasPath(); + } + + @Override + public void start() { + + this.pathfinder.moveTo(this.path, this.speed); + } + + @Override + public void stop() { + this.avoid = null; + this.path = null; + } + + @Override + public @NotNull GoalKey<@NotNull Mob> getKey() { + return GOAL_KEY; + } + + @Override + public @NotNull EnumSet getTypes() { + return EnumSet.of(GoalType.MOVE); + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 8f211dc..0c6de78 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -9,6 +9,7 @@ import com.shanebeestudios.survival.listeners.block.LootTableListener; import com.shanebeestudios.survival.listeners.block.SnowballThrow; import com.shanebeestudios.survival.listeners.block.WorkbenchShare; +import com.shanebeestudios.survival.listeners.entity.AvoidPlayerListener; import com.shanebeestudios.survival.listeners.entity.BeeKeeperSuit; import com.shanebeestudios.survival.listeners.entity.ChestPigmen; import com.shanebeestudios.survival.listeners.entity.ChickenSpawn; @@ -44,6 +45,7 @@ import com.shanebeestudios.survival.listeners.server.LocalChat; import com.shanebeestudios.survival.listeners.server.RecipeDiscovery; import com.shanebeestudios.survival.listeners.server.ResourcePackListener; +import com.shanebeestudios.survival.util.Utils; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; @@ -137,6 +139,9 @@ public void registerEvents() { if (this.config.entity_mechanics_beekeeper_suit_enabled) { Bukkit.getPluginManager().registerEvents(new BeeKeeperSuit(), this.plugin); } + if (!this.config.entity_mechanics_mobs_avoid_players.isEmpty()) { + pluginManager.registerEvents(new AvoidPlayerListener(this.plugin), this.plugin); + } if (this.config.survival_update_merchant_trades) { pluginManager.registerEvents(new MerchantTrades(this.plugin), this.plugin); } diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java new file mode 100644 index 0000000..2406f39 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java @@ -0,0 +1,31 @@ +package com.shanebeestudios.survival.listeners.entity; + +import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.goals.AvoidPlayerGoal; +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Mob; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class AvoidPlayerListener implements Listener { + + private final Config config; + + public AvoidPlayerListener(SurvivalPlugin plugin) { + this.config = plugin.getSurvivalConfig(); + } + + @EventHandler + private void onEntityJoinWorld(EntityAddToWorldEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof Mob mob)) return; + + if (this.config.entity_mechanics_mobs_avoid_players.contains(entity.getType())) { + Bukkit.getMobGoals().addGoal(mob, 0, new AvoidPlayerGoal(mob)); + } + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 1274a86..5f9a76a 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -350,12 +350,23 @@ entity-mechanics: # If 'always-baby = false' this time will only be applied to baby chickens # Vanilla default = 24,000 ticks = 20 minutes baby-ticks: 48000 + # Mechanics for piglin bartering piglin-barter: # When enabled, if a piglin drops a water bottle they'll drop purified/clean water instead # Thirst needs to be enabled for this to work drop-purified-water: true # When enabled, piglins have a chance of randomly dropping custom SurvivalPlus items alternate-bartering: true + # Mobs that should avoid the player + # Will support minecraft tags, ex: `"#minecraft:some_entity_tag"` + # Mobs will run away from players at a speed of 1.6x their normal speed + # For new players (played less than 2 MC days) the multiplier is reduced to 1.25x + # To disable, clear the list and put "empty" in the list + mobs-avoid-players: + - "minecraft:sheep" + - "minecraft:cow" + - "minecraft:chicken" + - "minecraft:pig" # Enables custom recipes (Overrides vanilla recipes) # Disable these if you prefer to just use the vanilla recipes From 8df11adf79094ff8d92ca181c19f48e6a507da11 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 12:42:18 -0800 Subject: [PATCH 097/133] AvoidPlayerGoal - only work on survival/adventure players --- .../com/shanebeestudios/survival/goals/AvoidPlayerGoal.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java b/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java index 1c0d007..e515ff3 100644 --- a/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java +++ b/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java @@ -10,6 +10,7 @@ import io.papermc.paper.registry.tag.Tag; import io.papermc.paper.registry.tag.TagKey; import net.kyori.adventure.key.Key; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.NamespacedKey; import org.bukkit.Registry; @@ -59,6 +60,7 @@ public boolean shouldActivate() { .stream() .filter(entity -> entity.getType() == EntityType.PLAYER) .map(entity -> (Player) entity) + .filter(player -> player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) .findAny(); if (any.isEmpty()) return false; From 75b2dc50177e5a51eb909bff1f94fb3d88b001a1 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 12:52:25 -0800 Subject: [PATCH 098/133] AvoidPlayerGoal - wrong key --- .../com/shanebeestudios/survival/goals/AvoidPlayerGoal.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java b/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java index e515ff3..73d66e9 100644 --- a/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java +++ b/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java @@ -34,7 +34,7 @@ public class AvoidPlayerGoal implements Goal<@NotNull Mob> { private static final Registry ITEM_REGISTRY = RegistryAccess.registryAccess().getRegistry(RegistryKey.ITEM); @SuppressWarnings("DataFlowIssue") - private static final GoalKey<@NotNull Mob> GOAL_KEY = GoalKey.of(Mob.class, NamespacedKey.fromString("beer:avoid_player_goal")); + private static final GoalKey<@NotNull Mob> GOAL_KEY = GoalKey.of(Mob.class, NamespacedKey.fromString("survival_plus:avoid_player_goal")); private final Random random = new Random(); private final Mob mob; @@ -114,7 +114,6 @@ public boolean shouldStayActive() { @Override public void start() { - this.pathfinder.moveTo(this.path, this.speed); } From 3f0591f870d0e8fe0a4c55ff221b075df9bcfff5 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 14:00:57 -0800 Subject: [PATCH 099/133] AngryWolfGoal - add new goal --- .../survival/config/Config.java | 3 + .../survival/goals/AngryWolfGoal.java | 123 ++++++++++++++++++ .../survival/listeners/EventManager.java | 7 +- .../listeners/entity/AvoidPlayerListener.java | 31 ----- .../listeners/entity/MobGoalListener.java | 45 +++++++ src/main/resources/config.yml | 4 + 6 files changed, 177 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/goals/AngryWolfGoal.java delete mode 100644 src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java create mode 100644 src/main/java/com/shanebeestudios/survival/listeners/entity/MobGoalListener.java diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index d5a5588..34fb1fe 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -1,6 +1,7 @@ package com.shanebeestudios.survival.config; import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.goals.AngryWolfGoal; import com.shanebeestudios.survival.util.Utils; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -181,6 +182,7 @@ public class Config { public boolean entity_mechanics_piglin_drop_water; public boolean entity_mechanics_piglin_alt_drop; public List entity_mechanics_mobs_avoid_players; + public AngryWolfGoal.Type entity_mechanics_angry_wolves; // RECIPES public boolean recipes_saddle; @@ -433,6 +435,7 @@ private void loadSettings() { this.entity_mechanics_piglin_drop_water = this.settings.getBoolean("entity-mechanics.piglin-barter.drop-purified-water"); this.entity_mechanics_piglin_alt_drop = this.settings.getBoolean("entity-mechanics.piglin-barter.alternate-bartering"); this.entity_mechanics_mobs_avoid_players = getEntityTypes("entity-mechanics.mobs-avoid-players"); + this.entity_mechanics_angry_wolves = AngryWolfGoal.Type.getByKey(this.settings.getString("entity-mechanics.angry-wolves", "night")); // RECIPES this.recipes_saddle = this.settings.getBoolean("recipes.saddle"); diff --git a/src/main/java/com/shanebeestudios/survival/goals/AngryWolfGoal.java b/src/main/java/com/shanebeestudios/survival/goals/AngryWolfGoal.java new file mode 100644 index 0000000..4d369d0 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/goals/AngryWolfGoal.java @@ -0,0 +1,123 @@ +package com.shanebeestudios.survival.goals; + +import com.destroystokyo.paper.entity.ai.Goal; +import com.destroystokyo.paper.entity.ai.GoalKey; +import com.destroystokyo.paper.entity.ai.GoalType; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.tag.Tag; +import io.papermc.paper.registry.tag.TagKey; +import net.kyori.adventure.key.Key; +import org.bukkit.GameMode; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Wolf; +import org.bukkit.inventory.ItemType; +import org.bukkit.inventory.PlayerInventory; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.EnumSet; +import java.util.Optional; + +@SuppressWarnings({"UnstableApiUsage", "NullableProblems"}) +public class AngryWolfGoal implements Goal<@NotNull Wolf> { + + public enum Type { + ALWAYS(), + NIGHT(), + DISABLED(); + + public static Type getByKey(String key) { + return switch (key) { + case "always" -> ALWAYS; + case "night" -> NIGHT; + default -> DISABLED; + }; + } + } + + private static final Registry ITEM_REGISTRY = RegistryAccess.registryAccess().getRegistry(RegistryKey.ITEM); + + @SuppressWarnings("DataFlowIssue") + private static final GoalKey<@NotNull Wolf> GOAL_KEY = GoalKey.of(Wolf.class, NamespacedKey.fromString("survival_plus:angry_wolf_goal")); + + private final Wolf wolf; + private final Type type; + private Player target; + private @Nullable Tag foodTag; + + @SuppressWarnings("PatternValidation") + public AngryWolfGoal(Wolf wolf, Type type) { + this.wolf = wolf; + this.type = type; + TagKey tagKey = TagKey.create(RegistryKey.ITEM, Key.key(wolf.getType().key() + "_food")); + if (ITEM_REGISTRY.hasTag(tagKey)) { + this.foodTag = ITEM_REGISTRY.getTag(tagKey); + } + } + + @Override + public boolean shouldActivate() { + if (this.wolf.isAngry()) return false; // He's already angry + if (this.type == Type.NIGHT && this.wolf.getWorld().isDayTime()) return false; + + Optional any = this.wolf.getNearbyEntities(10, 7, 10) + .stream() + .filter(entity -> entity.getType() == EntityType.PLAYER) + .map(entity -> (Player) entity) + .filter(player -> player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) + .findAny(); + if (any.isEmpty()) return false; + + this.target = any.get(); + + return shouldAttack(); + } + + private boolean shouldAttack() { + if (this.wolf.isTamed()) return false; + if (this.type == Type.NIGHT && this.wolf.getWorld().isDayTime()) return false; + if (this.wolf.getLocation().distanceSquared(this.target.getLocation()) > (10 * 10)) return false; + + if (this.foodTag != null) { + PlayerInventory inventory = this.target.getInventory(); + TypedKey hand = TypedKey.create(RegistryKey.ITEM, inventory.getItemInMainHand().getType().key()); + TypedKey off = TypedKey.create(RegistryKey.ITEM, inventory.getItemInOffHand().getType().key()); + return !this.foodTag.contains(hand) && !this.foodTag.contains(off); + } + return true; + } + + @Override + public boolean shouldStayActive() { + return shouldAttack(); + } + + @Override + public void start() { + this.wolf.setTarget(this.target); + this.wolf.setAngry(true); + } + + @Override + public void stop() { + this.target = null; + this.wolf.setAngry(false); + this.wolf.setTarget(null); + } + + @Override + public @NotNull GoalKey<@NotNull Wolf> getKey() { + return GOAL_KEY; + } + + @Override + public @NotNull EnumSet getTypes() { + return EnumSet.of(GoalType.TARGET); + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java index 0c6de78..813b259 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java @@ -9,7 +9,7 @@ import com.shanebeestudios.survival.listeners.block.LootTableListener; import com.shanebeestudios.survival.listeners.block.SnowballThrow; import com.shanebeestudios.survival.listeners.block.WorkbenchShare; -import com.shanebeestudios.survival.listeners.entity.AvoidPlayerListener; +import com.shanebeestudios.survival.listeners.entity.MobGoalListener; import com.shanebeestudios.survival.listeners.entity.BeeKeeperSuit; import com.shanebeestudios.survival.listeners.entity.ChestPigmen; import com.shanebeestudios.survival.listeners.entity.ChickenSpawn; @@ -45,7 +45,6 @@ import com.shanebeestudios.survival.listeners.server.LocalChat; import com.shanebeestudios.survival.listeners.server.RecipeDiscovery; import com.shanebeestudios.survival.listeners.server.ResourcePackListener; -import com.shanebeestudios.survival.util.Utils; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; @@ -139,9 +138,6 @@ public void registerEvents() { if (this.config.entity_mechanics_beekeeper_suit_enabled) { Bukkit.getPluginManager().registerEvents(new BeeKeeperSuit(), this.plugin); } - if (!this.config.entity_mechanics_mobs_avoid_players.isEmpty()) { - pluginManager.registerEvents(new AvoidPlayerListener(this.plugin), this.plugin); - } if (this.config.survival_update_merchant_trades) { pluginManager.registerEvents(new MerchantTrades(this.plugin), this.plugin); } @@ -152,6 +148,7 @@ public void registerEvents() { // Config handled within this event pluginManager.registerEvents(new EntityDeath(this.plugin), this.plugin); pluginManager.registerEvents(new RepairCrafting(), this.plugin); + pluginManager.registerEvents(new MobGoalListener(this.plugin), this.plugin); } diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java deleted file mode 100644 index 2406f39..0000000 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/AvoidPlayerListener.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.shanebeestudios.survival.listeners.entity; - -import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.goals.AvoidPlayerGoal; -import org.bukkit.Bukkit; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Mob; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; - -public class AvoidPlayerListener implements Listener { - - private final Config config; - - public AvoidPlayerListener(SurvivalPlugin plugin) { - this.config = plugin.getSurvivalConfig(); - } - - @EventHandler - private void onEntityJoinWorld(EntityAddToWorldEvent event) { - Entity entity = event.getEntity(); - if (!(entity instanceof Mob mob)) return; - - if (this.config.entity_mechanics_mobs_avoid_players.contains(entity.getType())) { - Bukkit.getMobGoals().addGoal(mob, 0, new AvoidPlayerGoal(mob)); - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/MobGoalListener.java b/src/main/java/com/shanebeestudios/survival/listeners/entity/MobGoalListener.java new file mode 100644 index 0000000..a594bf6 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/listeners/entity/MobGoalListener.java @@ -0,0 +1,45 @@ +package com.shanebeestudios.survival.listeners.entity; + +import com.destroystokyo.paper.entity.ai.MobGoals; +import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; +import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.goals.AngryWolfGoal; +import com.shanebeestudios.survival.goals.AvoidPlayerGoal; +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Mob; +import org.bukkit.entity.Wolf; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class MobGoalListener implements Listener { + + private final Config config; + private final MobGoals mobGoals; + + public MobGoalListener(SurvivalPlugin plugin) { + this.config = plugin.getSurvivalConfig(); + this.mobGoals = Bukkit.getMobGoals(); + } + + @EventHandler + private void onEntityJoinWorld(EntityAddToWorldEvent event) { + Entity entity = event.getEntity(); + + if (entity instanceof Mob mob && this.config.entity_mechanics_mobs_avoid_players.contains(entity.getType())) { + avoidPlayers(mob); + } else if (entity instanceof Wolf wolf && this.config.entity_mechanics_angry_wolves != AngryWolfGoal.Type.DISABLED) { + angryWolves(wolf); + } + } + + private void avoidPlayers(Mob mob) { + this.mobGoals.addGoal(mob, 0, new AvoidPlayerGoal(mob)); + } + + private void angryWolves(Wolf wolf) { + this.mobGoals.addGoal(wolf, 0, new AngryWolfGoal(wolf, this.config.entity_mechanics_angry_wolves)); + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 5f9a76a..2f5bd1d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -367,6 +367,10 @@ entity-mechanics: - "minecraft:cow" - "minecraft:chicken" - "minecraft:pig" + # Make wolves attack players without provocation + # Holding wolf food in hand will stop them + # Options are "always", "night" or "disabled" + angry-wolves: night # Enables custom recipes (Overrides vanilla recipes) # Disable these if you prefer to just use the vanilla recipes From e1c9bc09ad5068b931067fa26302917bef862179 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 15:05:18 -0800 Subject: [PATCH 100/133] Config - remove limited crafting option - can just enable this with a gamerule --- .../com/shanebeestudios/survival/SurvivalPlugin.java | 12 ------------ .../com/shanebeestudios/survival/config/Config.java | 2 -- src/main/resources/config.yml | 3 --- 3 files changed, 17 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java index 830f8a6..6138f5b 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java @@ -21,9 +21,7 @@ import dev.jorel.commandapi.exceptions.UnsupportedVersionException; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; -import org.bukkit.GameRule; import org.bukkit.Material; -import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.configuration.serialization.ConfigurationSerialization; @@ -116,10 +114,6 @@ public void onEnable() { // LOAD CONFIG FILES loadSettings(Bukkit.getConsoleSender()); - for (World world : getServer().getWorlds()) { - world.setGameRule(GameRule.DO_LIMITED_CRAFTING, this.config.survival_limited_crafting); - } - // LOAD RESOURCE PACK if (this.config.settings_resource_pack_enabled) { if (this.config.settings_resource_pack_url.isEmpty()) { @@ -190,12 +184,6 @@ public void onDisable() { if (!loaded) return; Utils.logMini("Shutting down"); getServer().getScheduler().cancelTasks(this); - //getServer().resetRecipes(); <-- why is this even here? - - // Remove limited crafting when server shuts down (important if server removes this plugin) - for (World world : getServer().getWorlds()) { - world.setGameRule(GameRule.DO_LIMITED_CRAFTING, false); - } // Unload player data (decrease chance of memory leak) playerDataLoader(false); diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/config/Config.java index 34fb1fe..1bdb730 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/config/Config.java @@ -39,7 +39,6 @@ public class Config { // SURVIVAL public boolean survival_enabled; - public boolean survival_limited_crafting; public boolean survival_unlock_all_recipes; public boolean survival_remove_wood_tools; public boolean survival_torch; @@ -289,7 +288,6 @@ private void loadSettings() { // SURVIVAL this.survival_enabled = this.settings.getBoolean("survival.enabled"); - this.survival_limited_crafting = this.settings.getBoolean("survival.LimitedCrafting"); // TODO remove this.survival_unlock_all_recipes = this.settings.getBoolean("survival.unlock-all-recipes-on-join"); this.survival_remove_wood_tools = this.settings.getBoolean("survival.remove-wooden-tools"); this.survival_torch = this.settings.getBoolean("survival.torch"); // TODO move to recipes area?!?!? diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2f5bd1d..caa9da0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -31,9 +31,6 @@ survival: # When enabled, the basic custom SurvivalPlus items will be included in the game enabled: true - # With this enabled, players will only be able to craft items which they have unlocked recipes for - LimitedCrafting: false - # If true, all custom recipes will be unlocked when a player joins # If false, recipes will be unlocked as a player advances through the game unlock-all-recipes-on-join: false From 234d3789e16215002fa773f352b897d9c7fdbccc Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 15:20:38 -0800 Subject: [PATCH 101/133] split up packages --- build.gradle.kts | 11 +-- .../survival/{ => api}/data/HealthBoard.java | 2 +- .../survival/{ => api}/data/Info.java | 2 +- .../survival/{ => api}/data/Nutrient.java | 2 +- .../survival/{ => api}/data/Permissions.java | 4 +- .../survival/{ => api}/data/Placeholders.java | 4 +- .../survival/{ => api}/data/PlayerData.java | 10 +- .../survival/{ => api}/data/Stat.java | 2 +- .../survival/api/data/package-info.java | 4 + .../events/EnergyLevelChangeEvent.java | 2 +- .../events/ShootRecurvedBowEvent.java | 6 +- .../events/ThirstLevelChangeEvent.java | 2 +- .../{ => api}/events/WaterBowlFillEvent.java | 2 +- .../{ => api}/events/package-info.java | 2 +- .../generator/BlockTagFileGenerator.java | 2 +- .../generator/BlockTagGenerator.java | 4 +- .../survival/api/generator/package-info.java | 4 + .../{ => api}/goals/AngryWolfGoal.java | 2 +- .../{ => api}/goals/AvoidPlayerGoal.java | 2 +- .../{ => api}/gui/FireStrikerGUI.java | 8 +- .../survival/{ => api}/gui/NutritionGUI.java | 10 +- .../survival/{ => api}/gui/package-info.java | 2 +- .../survival/{ => api}/item/Item.java | 6 +- .../survival/{ => api}/item/Items.java | 70 +++++++------- .../survival/{ => api}/item/Nutrition.java | 6 +- .../survival/{ => api}/item/Recipes.java | 6 +- .../item/items/armor/ArmorPiece.java | 4 +- .../item/items/armor/BeekeeperPiece.java | 8 +- .../{ => api}/item/items/armor/RainBoots.java | 4 +- .../item/items/armor/ReinforcedPiece.java | 6 +- .../{ => api}/item/items/armor/SnowBoots.java | 4 +- .../api/item/items/armor/package-info.java | 4 + .../{ => api}/item/items/blocks/Campfire.java | 4 +- .../item/items/blocks/Workbench.java | 6 +- .../api/item/items/blocks/package-info.java | 4 + .../{ => api}/item/items/drinks/Coffee.java | 4 +- .../{ => api}/item/items/drinks/ColdMilk.java | 2 +- .../item/items/drinks/DrinkItem.java | 4 +- .../{ => api}/item/items/drinks/HotMilk.java | 4 +- .../{ => api}/item/items/drinks/Water.java | 4 +- .../api/item/items/drinks/package-info.java | 4 + .../item/items/food/SuspiciousMeat.java | 4 +- .../api/item/items/food/package-info.java | 4 + .../item/items/legendary/BlazeSword.java | 4 +- .../item/items/legendary/EnderGiantBlade.java | 4 +- .../item/items/legendary/ObsidianMace.java | 4 +- .../item/items/legendary/QuartzPickaxe.java | 4 +- .../item/items/legendary/ValkyriesAxe.java | 4 +- .../item/items/legendary/package-info.java | 4 + .../item/items/misc/BreedingEgg.java | 4 +- .../{ => api}/item/items/misc/CoffeeBean.java | 4 +- .../item/items/misc/FermentedSkin.java | 4 +- .../api/item/items/misc/package-info.java | 4 + .../{ => api}/item/items/tools/Compass.java | 4 +- .../item/items/tools/FireStriker.java | 4 +- .../item/items/tools/GrapplingHook.java | 4 +- .../{ => api}/item/items/tools/Hammer.java | 4 +- .../{ => api}/item/items/tools/Hatchet.java | 4 +- .../{ => api}/item/items/tools/Mattock.java | 4 +- .../{ => api}/item/items/tools/MedicKit.java | 6 +- .../item/items/tools/RecurvedBow.java | 4 +- .../item/items/tools/RecurvedCrossbow.java | 2 +- .../{ => api}/item/items/tools/Shiv.java | 4 +- .../{ => api}/item/items/tools/Sickle.java | 6 +- .../api/item/items/tools/package-info.java | 4 + .../survival/api/item/package-info.java | 4 + .../survival/{ => api}/util/BlockTags.java | 2 +- .../survival/{ => api}/util/Difficulty.java | 2 +- .../survival/{ => api}/util/ItemUtils.java | 4 +- .../survival/{ => api}/util/Math.java | 2 +- .../survival/{ => api}/util/PlayerUtils.java | 2 +- .../survival/{ => api}/util/Utils.java | 4 +- .../survival/api/util/package-info.java | 4 + .../survival/config/package-info.java | 4 - .../survival/data/package-info.java | 4 - .../survival/generator/package-info.java | 4 - .../item/items/armor/package-info.java | 4 - .../item/items/blocks/package-info.java | 4 - .../item/items/drinks/package-info.java | 4 - .../item/items/food/package-info.java | 4 - .../item/items/legendary/package-info.java | 4 - .../item/items/misc/package-info.java | 4 - .../item/items/tools/package-info.java | 4 - .../survival/item/package-info.java | 4 - .../survival/managers/package-info.java | 4 - .../survival/package-info.java | 4 - .../{ => plugin}/SurvivalBootstrap.java | 4 +- .../survival/{ => plugin}/SurvivalPlugin.java | 36 ++++---- .../{ => plugin}/commands/BaseCommand.java | 10 +- .../{ => plugin}/commands/DataGenCommand.java | 10 +- .../{ => plugin}/commands/DebugCommand.java | 12 +-- .../commands/GiveItemCommand.java | 12 +-- .../{ => plugin}/commands/HealCommand.java | 10 +- .../commands/NutritionCommand.java | 8 +- .../commands/PlayerDataCommand.java | 10 +- .../{ => plugin}/commands/ReloadCommand.java | 8 +- .../{ => plugin}/commands/StatCommand.java | 14 +-- .../commands/SurvivalCommand.java | 4 +- .../commands/ToggleChatCommand.java | 10 +- .../survival/{ => plugin}/config/Config.java | 8 +- .../{ => plugin}/config/ItemConfig.java | 8 +- .../survival/{ => plugin}/config/Lang.java | 6 +- .../{ => plugin}/config/PlayerDataConfig.java | 6 +- .../survival/plugin/config/package-info.java | 4 + .../{ => plugin}/listeners/EventManager.java | 92 +++++++++---------- .../listeners/block/BlockBreakListener.java | 20 ++-- .../listeners/block/BlockPlaceListener.java | 18 ++-- .../listeners/block/Campfire.java | 4 +- .../{ => plugin}/listeners/block/Chairs.java | 6 +- .../listeners/block/LootTableListener.java | 6 +- .../listeners/block/SnowballThrow.java | 2 +- .../listeners/block/WorkbenchShare.java | 4 +- .../listeners/entity/BeeKeeperSuit.java | 6 +- .../listeners/entity/ChestPigmen.java | 4 +- .../listeners/entity/ChickenSpawn.java | 8 +- .../listeners/entity/EntityDeath.java | 8 +- .../listeners/entity/LivingSlime.java | 6 +- .../listeners/entity/MerchantTrades.java | 6 +- .../listeners/entity/MobGoalListener.java | 10 +- .../listeners/entity/PiglinBarter.java | 8 +- .../listeners/item/BeetrootStrength.java | 2 +- .../listeners/item/BlazeSword.java | 4 +- .../listeners/item/BowListener.java | 8 +- .../listeners/item/CompassWaypoint.java | 14 +-- .../listeners/item/CookieHealthBoost.java | 2 +- .../listeners/item/DrinkableItemListener.java | 20 ++-- .../listeners/item/FirestrikerListener.java | 8 +- .../listeners/item/FoodDiversityConsume.java | 18 ++-- .../listeners/item/GiantBlade.java | 16 ++-- .../listeners/item/GrapplingHookListener.java | 10 +- .../{ => plugin}/listeners/item/MedicKit.java | 20 ++-- .../listeners/item/ObsidianMaceWeakness.java | 12 +-- .../listeners/item/PoisonousPotato.java | 2 +- .../listeners/item/RawMeatHunger.java | 2 +- .../listeners/item/RecurvedBowListener.java | 12 +-- .../listeners/item/RepairCrafting.java | 2 +- .../listeners/item/ShivPoison.java | 10 +- .../listeners/item/StarBattleaxeWither.java | 4 +- .../listeners/item/TropicalFish.java | 8 +- .../{ => plugin}/listeners/item/Valkyrie.java | 14 +-- .../listeners/item/WaterBowlListener.java | 12 +-- .../listeners/item/WaterPurifiedListener.java | 6 +- .../listeners/player/EnergyChange.java | 20 ++-- .../listeners/player/PlayerDataListener.java | 14 +-- .../listeners/player/ThirstListener.java | 16 ++-- .../{ => plugin}/listeners/server/Guide.java | 10 +- .../listeners/server/LocalChat.java | 10 +- .../listeners/server/RecipeDiscovery.java | 8 +- .../server/ResourcePackListener.java | 10 +- .../{ => plugin}/managers/EffectManager.java | 20 ++-- .../{ => plugin}/managers/LootManager.java | 12 +-- .../{ => plugin}/managers/MessageManager.java | 8 +- .../managers/PapiPlaceholders.java | 10 +- .../{ => plugin}/managers/PlayerManager.java | 16 ++-- .../{ => plugin}/managers/RecipeManager.java | 8 +- .../managers/ScoreBoardManager.java | 8 +- .../plugin/managers/package-info.java | 4 + .../survival/plugin/package-info.java | 4 + .../{ => plugin}/tasks/EnergyDrain.java | 16 ++-- .../{ => plugin}/tasks/HealthBoardTask.java | 14 +-- .../{ => plugin}/tasks/NutrientsAlert.java | 12 +-- .../{ => plugin}/tasks/NutrientsEffect.java | 16 ++-- .../{ => plugin}/tasks/TaskManager.java | 6 +- .../{ => plugin}/tasks/ThirstAlert.java | 10 +- .../{ => plugin}/tasks/ThirstTask.java | 14 +-- .../{ => plugin}/tasks/WeatherTask.java | 10 +- .../tasks/tool/BlazeSwordEffects.java | 6 +- .../tasks/tool/BlazeSwordSound.java | 6 +- .../{ => plugin}/tasks/tool/GiantBlade.java | 12 +-- .../{ => plugin}/tasks/tool/ObsidianMace.java | 6 +- .../tasks/tool/QuartzPickaxe.java | 6 +- .../{ => plugin}/tasks/tool/Valkyrie.java | 6 +- .../survival/util/package-info.java | 4 - src/main/resources/paper-plugin.yml | 4 +- 174 files changed, 668 insertions(+), 669 deletions(-) rename src/main/java/com/shanebeestudios/survival/{ => api}/data/HealthBoard.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => api}/data/Info.java (68%) rename src/main/java/com/shanebeestudios/survival/{ => api}/data/Nutrient.java (84%) rename src/main/java/com/shanebeestudios/survival/{ => api}/data/Permissions.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => api}/data/Placeholders.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/data/PlayerData.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => api}/data/Stat.java (78%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/data/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/events/EnergyLevelChangeEvent.java (96%) rename src/main/java/com/shanebeestudios/survival/{ => api}/events/ShootRecurvedBowEvent.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => api}/events/ThirstLevelChangeEvent.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => api}/events/WaterBowlFillEvent.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/events/package-info.java (61%) rename src/main/java/com/shanebeestudios/survival/{ => api}/generator/BlockTagFileGenerator.java (99%) rename src/main/java/com/shanebeestudios/survival/{ => api}/generator/BlockTagGenerator.java (97%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/generator/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/goals/AngryWolfGoal.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => api}/goals/AvoidPlayerGoal.java (99%) rename src/main/java/com/shanebeestudios/survival/{ => api}/gui/FireStrikerGUI.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => api}/gui/NutritionGUI.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => api}/gui/package-info.java (50%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/Item.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/Items.java (81%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/Nutrition.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/Recipes.java (99%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/armor/ArmorPiece.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/armor/BeekeeperPiece.java (90%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/armor/RainBoots.java (90%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/armor/ReinforcedPiece.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/armor/SnowBoots.java (90%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/items/armor/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/blocks/Campfire.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/blocks/Workbench.java (84%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/items/blocks/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/drinks/Coffee.java (89%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/drinks/ColdMilk.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/drinks/DrinkItem.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/drinks/HotMilk.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/drinks/Water.java (95%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/items/drinks/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/food/SuspiciousMeat.java (95%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/items/food/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/legendary/BlazeSword.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/legendary/EnderGiantBlade.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/legendary/ObsidianMace.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/legendary/QuartzPickaxe.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/legendary/ValkyriesAxe.java (93%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/items/legendary/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/misc/BreedingEgg.java (73%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/misc/CoffeeBean.java (84%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/misc/FermentedSkin.java (89%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/items/misc/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/Compass.java (86%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/FireStriker.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/GrapplingHook.java (87%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/Hammer.java (90%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/Hatchet.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/Mattock.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/MedicKit.java (87%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/RecurvedBow.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/RecurvedCrossbow.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/Shiv.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => api}/item/items/tools/Sickle.java (93%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/items/tools/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/api/item/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => api}/util/BlockTags.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => api}/util/Difficulty.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => api}/util/ItemUtils.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => api}/util/Math.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => api}/util/PlayerUtils.java (96%) rename src/main/java/com/shanebeestudios/survival/{ => api}/util/Utils.java (98%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/util/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/config/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/data/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/generator/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/item/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/managers/package-info.java delete mode 100644 src/main/java/com/shanebeestudios/survival/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => plugin}/SurvivalBootstrap.java (77%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/SurvivalPlugin.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/BaseCommand.java (63%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/DataGenCommand.java (72%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/DebugCommand.java (79%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/GiveItemCommand.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/HealCommand.java (90%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/NutritionCommand.java (74%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/PlayerDataCommand.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/ReloadCommand.java (73%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/StatCommand.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/SurvivalCommand.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/commands/ToggleChatCommand.java (87%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/config/Config.java (99%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/config/ItemConfig.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/config/Lang.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/config/PlayerDataConfig.java (92%) create mode 100644 src/main/java/com/shanebeestudios/survival/plugin/config/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/EventManager.java (63%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/block/BlockBreakListener.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/block/BlockPlaceListener.java (83%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/block/Campfire.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/block/Chairs.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/block/LootTableListener.java (78%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/block/SnowballThrow.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/block/WorkbenchShare.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/BeeKeeperSuit.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/ChestPigmen.java (96%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/ChickenSpawn.java (90%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/EntityDeath.java (86%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/LivingSlime.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/MerchantTrades.java (78%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/MobGoalListener.java (81%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/entity/PiglinBarter.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/BeetrootStrength.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/BlazeSword.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/BowListener.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/CompassWaypoint.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/CookieHealthBoost.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/DrinkableItemListener.java (84%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/FirestrikerListener.java (96%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/FoodDiversityConsume.java (90%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/GiantBlade.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/GrapplingHookListener.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/MedicKit.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/ObsidianMaceWeakness.java (85%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/PoisonousPotato.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/RawMeatHunger.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/RecurvedBowListener.java (86%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/RepairCrafting.java (98%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/ShivPoison.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/StarBattleaxeWither.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/TropicalFish.java (89%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/Valkyrie.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/WaterBowlListener.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/item/WaterPurifiedListener.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/player/EnergyChange.java (89%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/player/PlayerDataListener.java (82%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/player/ThirstListener.java (83%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/server/Guide.java (82%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/server/LocalChat.java (85%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/server/RecipeDiscovery.java (97%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/listeners/server/ResourcePackListener.java (89%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/managers/EffectManager.java (80%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/managers/LootManager.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/managers/MessageManager.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/managers/PapiPlaceholders.java (94%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/managers/PlayerManager.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/managers/RecipeManager.java (95%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/managers/ScoreBoardManager.java (91%) create mode 100644 src/main/java/com/shanebeestudios/survival/plugin/managers/package-info.java create mode 100644 src/main/java/com/shanebeestudios/survival/plugin/package-info.java rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/EnergyDrain.java (93%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/HealthBoardTask.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/NutrientsAlert.java (77%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/NutrientsEffect.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/TaskManager.java (83%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/ThirstAlert.java (78%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/ThirstTask.java (86%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/WeatherTask.java (92%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/tool/BlazeSwordEffects.java (87%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/tool/BlazeSwordSound.java (83%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/tool/GiantBlade.java (91%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/tool/ObsidianMace.java (86%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/tool/QuartzPickaxe.java (80%) rename src/main/java/com/shanebeestudios/survival/{ => plugin}/tasks/tool/Valkyrie.java (81%) delete mode 100644 src/main/java/com/shanebeestudios/survival/util/package-info.java diff --git a/build.gradle.kts b/build.gradle.kts index b1b8a87..f2fabe9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -72,21 +72,20 @@ tasks { } javadoc { options.encoding = Charsets.UTF_8.name() - exclude("com/shanebeestudios/survival/SurvivalBootstrap.java") - exclude("com/shanebeestudios/survival/commands") - exclude("com/shanebeestudios/survival/listeners") - exclude("com/shanebeestudios/survival/tasks") + exclude("com/shanebeestudios/survival/plugin/SurvivalBootstrap.java") + exclude("com/shanebeestudios/survival/plugin/commands") + exclude("com/shanebeestudios/survival/plugin/listeners") + exclude("com/shanebeestudios/survival/plugin/tasks") (options as CoreJavadocOptions).addBooleanOption("Xdoclint:none", true) (options as StandardJavadocDocletOptions).links( "https://jd.papermc.io/paper/${minecraftVersion}/", "https://jd.advntr.dev/api/4.18.0/" ) - } shadowJar { relocate("fr.mrmicky.fastboard", "com.shanebeestudios.survival.api.fastboard") relocate("dev.jorel.commandapi", "com.shanebeestudios.survival.api.commandapi") - relocate("org.bstats", "com.shanebeestudios.survival.api.metrics.bstats") + relocate("org.bstats", "com.shanebeestudios.survival.api.metrics") archiveFileName = "SurvivalPlus-${projectVersion}.jar" } jar { diff --git a/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java b/src/main/java/com/shanebeestudios/survival/api/data/HealthBoard.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/data/HealthBoard.java rename to src/main/java/com/shanebeestudios/survival/api/data/HealthBoard.java index 8d622cf..01d18a0 100644 --- a/src/main/java/com/shanebeestudios/survival/data/HealthBoard.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/HealthBoard.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.data; +package com.shanebeestudios.survival.api.data; import com.google.common.base.Preconditions; import fr.mrmicky.fastboard.adventure.FastBoard; diff --git a/src/main/java/com/shanebeestudios/survival/data/Info.java b/src/main/java/com/shanebeestudios/survival/api/data/Info.java similarity index 68% rename from src/main/java/com/shanebeestudios/survival/data/Info.java rename to src/main/java/com/shanebeestudios/survival/api/data/Info.java index e317cd0..dcfdc3e 100644 --- a/src/main/java/com/shanebeestudios/survival/data/Info.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Info.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.data; +package com.shanebeestudios.survival.api.data; /** * Info for player scoreboards diff --git a/src/main/java/com/shanebeestudios/survival/data/Nutrient.java b/src/main/java/com/shanebeestudios/survival/api/data/Nutrient.java similarity index 84% rename from src/main/java/com/shanebeestudios/survival/data/Nutrient.java rename to src/main/java/com/shanebeestudios/survival/api/data/Nutrient.java index 02eaa4a..3f6fc8a 100644 --- a/src/main/java/com/shanebeestudios/survival/data/Nutrient.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Nutrient.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.data; +package com.shanebeestudios.survival.api.data; /** * Player nutrient types diff --git a/src/main/java/com/shanebeestudios/survival/data/Permissions.java b/src/main/java/com/shanebeestudios/survival/api/data/Permissions.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/data/Permissions.java rename to src/main/java/com/shanebeestudios/survival/api/data/Permissions.java index 0373637..0b202a1 100644 --- a/src/main/java/com/shanebeestudios/survival/data/Permissions.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Permissions.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.data; +package com.shanebeestudios.survival.api.data; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.command.CommandSender; import org.bukkit.permissions.PermissionDefault; import org.bukkit.util.permissions.DefaultPermissions; diff --git a/src/main/java/com/shanebeestudios/survival/data/Placeholders.java b/src/main/java/com/shanebeestudios/survival/api/data/Placeholders.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/data/Placeholders.java rename to src/main/java/com/shanebeestudios/survival/api/data/Placeholders.java index 89abf4b..daaeabd 100644 --- a/src/main/java/com/shanebeestudios/survival/data/Placeholders.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Placeholders.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.data; +package com.shanebeestudios.survival.api.data; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.api.util.Utils; public enum Placeholders { PLAYER_HEALTH("player_health", "Player's health"), diff --git a/src/main/java/com/shanebeestudios/survival/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/data/PlayerData.java rename to src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java index 1923a5a..c479e7c 100644 --- a/src/main/java/com/shanebeestudios/survival/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.data; +package com.shanebeestudios.survival.api.data; -import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.OfflinePlayer; @@ -8,9 +8,9 @@ import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.util.Math; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.util.Math; import java.util.HashMap; import java.util.LinkedHashMap; diff --git a/src/main/java/com/shanebeestudios/survival/data/Stat.java b/src/main/java/com/shanebeestudios/survival/api/data/Stat.java similarity index 78% rename from src/main/java/com/shanebeestudios/survival/data/Stat.java rename to src/main/java/com/shanebeestudios/survival/api/data/Stat.java index 031b3b1..67b08a4 100644 --- a/src/main/java/com/shanebeestudios/survival/data/Stat.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Stat.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.data; +package com.shanebeestudios.survival.api.data; /** * Player stat types diff --git a/src/main/java/com/shanebeestudios/survival/api/data/package-info.java b/src/main/java/com/shanebeestudios/survival/api/data/package-info.java new file mode 100644 index 0000000..e4d24bf --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/data/package-info.java @@ -0,0 +1,4 @@ +/** + * Classes for holding data + */ +package com.shanebeestudios.survival.api.data; diff --git a/src/main/java/com/shanebeestudios/survival/events/EnergyLevelChangeEvent.java b/src/main/java/com/shanebeestudios/survival/api/events/EnergyLevelChangeEvent.java similarity index 96% rename from src/main/java/com/shanebeestudios/survival/events/EnergyLevelChangeEvent.java rename to src/main/java/com/shanebeestudios/survival/api/events/EnergyLevelChangeEvent.java index b4bb978..a756201 100644 --- a/src/main/java/com/shanebeestudios/survival/events/EnergyLevelChangeEvent.java +++ b/src/main/java/com/shanebeestudios/survival/api/events/EnergyLevelChangeEvent.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.events; +package com.shanebeestudios.survival.api.events; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; diff --git a/src/main/java/com/shanebeestudios/survival/events/ShootRecurvedBowEvent.java b/src/main/java/com/shanebeestudios/survival/api/events/ShootRecurvedBowEvent.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/events/ShootRecurvedBowEvent.java rename to src/main/java/com/shanebeestudios/survival/api/events/ShootRecurvedBowEvent.java index 226ab86..134ea10 100644 --- a/src/main/java/com/shanebeestudios/survival/events/ShootRecurvedBowEvent.java +++ b/src/main/java/com/shanebeestudios/survival/api/events/ShootRecurvedBowEvent.java @@ -1,12 +1,12 @@ -package com.shanebeestudios.survival.events; +package com.shanebeestudios.survival.api.events; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.Items; /** * Called when a player shoots a recurved bow/crossbow diff --git a/src/main/java/com/shanebeestudios/survival/events/ThirstLevelChangeEvent.java b/src/main/java/com/shanebeestudios/survival/api/events/ThirstLevelChangeEvent.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/events/ThirstLevelChangeEvent.java rename to src/main/java/com/shanebeestudios/survival/api/events/ThirstLevelChangeEvent.java index 12485bb..23bc66a 100644 --- a/src/main/java/com/shanebeestudios/survival/events/ThirstLevelChangeEvent.java +++ b/src/main/java/com/shanebeestudios/survival/api/events/ThirstLevelChangeEvent.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.events; +package com.shanebeestudios.survival.api.events; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; diff --git a/src/main/java/com/shanebeestudios/survival/events/WaterBowlFillEvent.java b/src/main/java/com/shanebeestudios/survival/api/events/WaterBowlFillEvent.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/events/WaterBowlFillEvent.java rename to src/main/java/com/shanebeestudios/survival/api/events/WaterBowlFillEvent.java index 1c1d403..d41afa2 100644 --- a/src/main/java/com/shanebeestudios/survival/events/WaterBowlFillEvent.java +++ b/src/main/java/com/shanebeestudios/survival/api/events/WaterBowlFillEvent.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.events; +package com.shanebeestudios.survival.api.events; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; diff --git a/src/main/java/com/shanebeestudios/survival/events/package-info.java b/src/main/java/com/shanebeestudios/survival/api/events/package-info.java similarity index 61% rename from src/main/java/com/shanebeestudios/survival/events/package-info.java rename to src/main/java/com/shanebeestudios/survival/api/events/package-info.java index 5418686..efdea6d 100644 --- a/src/main/java/com/shanebeestudios/survival/events/package-info.java +++ b/src/main/java/com/shanebeestudios/survival/api/events/package-info.java @@ -1,4 +1,4 @@ /** * {@link org.bukkit.event.Event Events} other plugins can listen to */ -package com.shanebeestudios.survival.events; +package com.shanebeestudios.survival.api.events; diff --git a/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java similarity index 99% rename from src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java rename to src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java index eb7a116..1237994 100644 --- a/src/main/java/com/shanebeestudios/survival/generator/BlockTagFileGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.generator; +package com.shanebeestudios.survival.api.generator; import io.papermc.paper.registry.keys.tags.BlockTypeTagKeys; import org.bukkit.Keyed; diff --git a/src/main/java/com/shanebeestudios/survival/generator/BlockTagGenerator.java b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/generator/BlockTagGenerator.java rename to src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java index b347cf6..ae8da17 100644 --- a/src/main/java/com/shanebeestudios/survival/generator/BlockTagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.generator; +package com.shanebeestudios.survival.api.generator; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; @@ -15,7 +15,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.codehaus.plexus.util.FileUtils; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.api.util.Utils; import java.io.File; import java.io.IOException; diff --git a/src/main/java/com/shanebeestudios/survival/api/generator/package-info.java b/src/main/java/com/shanebeestudios/survival/api/generator/package-info.java new file mode 100644 index 0000000..6efdd08 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/generator/package-info.java @@ -0,0 +1,4 @@ +/** + * Generators for generating data + */ +package com.shanebeestudios.survival.api.generator; diff --git a/src/main/java/com/shanebeestudios/survival/goals/AngryWolfGoal.java b/src/main/java/com/shanebeestudios/survival/api/goals/AngryWolfGoal.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/goals/AngryWolfGoal.java rename to src/main/java/com/shanebeestudios/survival/api/goals/AngryWolfGoal.java index 4d369d0..a9b3975 100644 --- a/src/main/java/com/shanebeestudios/survival/goals/AngryWolfGoal.java +++ b/src/main/java/com/shanebeestudios/survival/api/goals/AngryWolfGoal.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.goals; +package com.shanebeestudios.survival.api.goals; import com.destroystokyo.paper.entity.ai.Goal; import com.destroystokyo.paper.entity.ai.GoalKey; diff --git a/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java b/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java similarity index 99% rename from src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java rename to src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java index 73d66e9..efa93a2 100644 --- a/src/main/java/com/shanebeestudios/survival/goals/AvoidPlayerGoal.java +++ b/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.goals; +package com.shanebeestudios.survival.api.goals; import com.destroystokyo.paper.entity.Pathfinder; import com.destroystokyo.paper.entity.ai.Goal; diff --git a/src/main/java/com/shanebeestudios/survival/gui/FireStrikerGUI.java b/src/main/java/com/shanebeestudios/survival/api/gui/FireStrikerGUI.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/gui/FireStrikerGUI.java rename to src/main/java/com/shanebeestudios/survival/api/gui/FireStrikerGUI.java index 6a70d97..696cae7 100644 --- a/src/main/java/com/shanebeestudios/survival/gui/FireStrikerGUI.java +++ b/src/main/java/com/shanebeestudios/survival/api/gui/FireStrikerGUI.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.gui; +package com.shanebeestudios.survival.api.gui; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -17,9 +17,9 @@ import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.ItemUtils; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/gui/NutritionGUI.java b/src/main/java/com/shanebeestudios/survival/api/gui/NutritionGUI.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/gui/NutritionGUI.java rename to src/main/java/com/shanebeestudios/survival/api/gui/NutritionGUI.java index 2d5f205..39ffe26 100644 --- a/src/main/java/com/shanebeestudios/survival/gui/NutritionGUI.java +++ b/src/main/java/com/shanebeestudios/survival/api/gui/NutritionGUI.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.gui; +package com.shanebeestudios.survival.api.gui; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; @@ -12,10 +12,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.item.Nutrition; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.item.Nutrition; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/gui/package-info.java b/src/main/java/com/shanebeestudios/survival/api/gui/package-info.java similarity index 50% rename from src/main/java/com/shanebeestudios/survival/gui/package-info.java rename to src/main/java/com/shanebeestudios/survival/api/gui/package-info.java index 95daeb0..5ea3090 100644 --- a/src/main/java/com/shanebeestudios/survival/gui/package-info.java +++ b/src/main/java/com/shanebeestudios/survival/api/gui/package-info.java @@ -1,4 +1,4 @@ /** * Represents GUIs used by the plugin */ -package com.shanebeestudios.survival.gui; +package com.shanebeestudios.survival.api.gui; diff --git a/src/main/java/com/shanebeestudios/survival/item/Item.java b/src/main/java/com/shanebeestudios/survival/api/item/Item.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/item/Item.java rename to src/main/java/com/shanebeestudios/survival/api/item/Item.java index 5d0cc06..741b6f3 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Item.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Item.java @@ -1,7 +1,7 @@ -package com.shanebeestudios.survival.item; +package com.shanebeestudios.survival.api.item; -import com.shanebeestudios.survival.config.ItemConfig; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.config.ItemConfig; +import com.shanebeestudios.survival.api.util.Utils; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; import io.papermc.paper.registry.RegistryAccess; diff --git a/src/main/java/com/shanebeestudios/survival/item/Items.java b/src/main/java/com/shanebeestudios/survival/api/item/Items.java similarity index 81% rename from src/main/java/com/shanebeestudios/survival/item/Items.java rename to src/main/java/com/shanebeestudios/survival/api/item/Items.java index 9a6a89c..2a47516 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Items.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Items.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item; +package com.shanebeestudios.survival.api.item; import com.google.common.collect.Lists; import io.papermc.paper.datacomponent.DataComponentTypes; @@ -13,40 +13,40 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.item.items.armor.ArmorPiece; -import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorMaterial; -import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorType; -import com.shanebeestudios.survival.item.items.armor.BeekeeperPiece; -import com.shanebeestudios.survival.item.items.armor.RainBoots; -import com.shanebeestudios.survival.item.items.armor.ReinforcedPiece; -import com.shanebeestudios.survival.item.items.armor.SnowBoots; -import com.shanebeestudios.survival.item.items.blocks.Campfire; -import com.shanebeestudios.survival.item.items.blocks.Workbench; -import com.shanebeestudios.survival.item.items.drinks.Coffee; -import com.shanebeestudios.survival.item.items.drinks.ColdMilk; -import com.shanebeestudios.survival.item.items.drinks.HotMilk; -import com.shanebeestudios.survival.item.items.drinks.Water; -import com.shanebeestudios.survival.item.items.food.SuspiciousMeat; -import com.shanebeestudios.survival.item.items.legendary.BlazeSword; -import com.shanebeestudios.survival.item.items.legendary.EnderGiantBlade; -import com.shanebeestudios.survival.item.items.legendary.ObsidianMace; -import com.shanebeestudios.survival.item.items.legendary.QuartzPickaxe; -import com.shanebeestudios.survival.item.items.legendary.ValkyriesAxe; -import com.shanebeestudios.survival.item.items.misc.BreedingEgg; -import com.shanebeestudios.survival.item.items.misc.CoffeeBean; -import com.shanebeestudios.survival.item.items.misc.FermentedSkin; -import com.shanebeestudios.survival.item.items.tools.Compass; -import com.shanebeestudios.survival.item.items.tools.FireStriker; -import com.shanebeestudios.survival.item.items.tools.GrapplingHook; -import com.shanebeestudios.survival.item.items.tools.Hammer; -import com.shanebeestudios.survival.item.items.tools.Hatchet; -import com.shanebeestudios.survival.item.items.tools.Mattock; -import com.shanebeestudios.survival.item.items.tools.MedicKit; -import com.shanebeestudios.survival.item.items.tools.RecurvedBow; -import com.shanebeestudios.survival.item.items.tools.RecurvedCrossbow; -import com.shanebeestudios.survival.item.items.tools.Shiv; -import com.shanebeestudios.survival.item.items.tools.Sickle; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.api.item.items.armor.ArmorPiece; +import com.shanebeestudios.survival.api.item.items.armor.ArmorPiece.ArmorMaterial; +import com.shanebeestudios.survival.api.item.items.armor.ArmorPiece.ArmorType; +import com.shanebeestudios.survival.api.item.items.armor.BeekeeperPiece; +import com.shanebeestudios.survival.api.item.items.armor.RainBoots; +import com.shanebeestudios.survival.api.item.items.armor.ReinforcedPiece; +import com.shanebeestudios.survival.api.item.items.armor.SnowBoots; +import com.shanebeestudios.survival.api.item.items.blocks.Campfire; +import com.shanebeestudios.survival.api.item.items.blocks.Workbench; +import com.shanebeestudios.survival.api.item.items.drinks.Coffee; +import com.shanebeestudios.survival.api.item.items.drinks.ColdMilk; +import com.shanebeestudios.survival.api.item.items.drinks.HotMilk; +import com.shanebeestudios.survival.api.item.items.drinks.Water; +import com.shanebeestudios.survival.api.item.items.food.SuspiciousMeat; +import com.shanebeestudios.survival.api.item.items.legendary.BlazeSword; +import com.shanebeestudios.survival.api.item.items.legendary.EnderGiantBlade; +import com.shanebeestudios.survival.api.item.items.legendary.ObsidianMace; +import com.shanebeestudios.survival.api.item.items.legendary.QuartzPickaxe; +import com.shanebeestudios.survival.api.item.items.legendary.ValkyriesAxe; +import com.shanebeestudios.survival.api.item.items.misc.BreedingEgg; +import com.shanebeestudios.survival.api.item.items.misc.CoffeeBean; +import com.shanebeestudios.survival.api.item.items.misc.FermentedSkin; +import com.shanebeestudios.survival.api.item.items.tools.Compass; +import com.shanebeestudios.survival.api.item.items.tools.FireStriker; +import com.shanebeestudios.survival.api.item.items.tools.GrapplingHook; +import com.shanebeestudios.survival.api.item.items.tools.Hammer; +import com.shanebeestudios.survival.api.item.items.tools.Hatchet; +import com.shanebeestudios.survival.api.item.items.tools.Mattock; +import com.shanebeestudios.survival.api.item.items.tools.MedicKit; +import com.shanebeestudios.survival.api.item.items.tools.RecurvedBow; +import com.shanebeestudios.survival.api.item.items.tools.RecurvedCrossbow; +import com.shanebeestudios.survival.api.item.items.tools.Shiv; +import com.shanebeestudios.survival.api.item.items.tools.Sickle; +import com.shanebeestudios.survival.api.util.Utils; import java.util.LinkedHashMap; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/item/Nutrition.java b/src/main/java/com/shanebeestudios/survival/api/item/Nutrition.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/item/Nutrition.java rename to src/main/java/com/shanebeestudios/survival/api/item/Nutrition.java index 2ffe26b..7ff9a22 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Nutrition.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Nutrition.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item; +package com.shanebeestudios.survival.api.item; import com.google.common.base.Preconditions; import io.papermc.paper.datacomponent.DataComponentTypes; @@ -10,8 +10,8 @@ import org.bukkit.inventory.ItemType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.config.ItemConfig; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.config.ItemConfig; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.Comparator; diff --git a/src/main/java/com/shanebeestudios/survival/item/Recipes.java b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java similarity index 99% rename from src/main/java/com/shanebeestudios/survival/item/Recipes.java rename to src/main/java/com/shanebeestudios/survival/api/item/Recipes.java index db9726b..65d4f01 100644 --- a/src/main/java/com/shanebeestudios/survival/item/Recipes.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item; +package com.shanebeestudios.survival.api.item; import org.bukkit.Bukkit; import org.bukkit.Keyed; @@ -15,8 +15,8 @@ import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.SmokingRecipe; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/ArmorPiece.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/armor/ArmorPiece.java index 72b38ed..232d83b 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/armor/ArmorPiece.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/ArmorPiece.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.armor; +package com.shanebeestudios.survival.api.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Equippable; @@ -16,7 +16,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class ArmorPiece extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/BeekeeperPiece.java b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/BeekeeperPiece.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/item/items/armor/BeekeeperPiece.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/armor/BeekeeperPiece.java index c84ec02..a71702d 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/armor/BeekeeperPiece.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/BeekeeperPiece.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.armor; +package com.shanebeestudios.survival.api.item.items.armor; import org.bukkit.Color; import org.bukkit.Material; @@ -7,9 +7,9 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.LeatherArmorMeta; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorMaterial; -import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorType; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.items.armor.ArmorPiece.ArmorMaterial; +import com.shanebeestudios.survival.api.item.items.armor.ArmorPiece.ArmorType; @SuppressWarnings("UnstableApiUsage") public class BeekeeperPiece extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/RainBoots.java b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/RainBoots.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/item/items/armor/RainBoots.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/armor/RainBoots.java index c12ed68..ef35878 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/armor/RainBoots.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/RainBoots.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.armor; +package com.shanebeestudios.survival.api.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; @@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class RainBoots extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/ReinforcedPiece.java b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/ReinforcedPiece.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/armor/ReinforcedPiece.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/armor/ReinforcedPiece.java index 45c3f21..221dd80 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/armor/ReinforcedPiece.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/ReinforcedPiece.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.armor; +package com.shanebeestudios.survival.api.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Equippable; @@ -14,8 +14,8 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.items.armor.ArmorPiece.ArmorType; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.items.armor.ArmorPiece.ArmorType; @SuppressWarnings("UnstableApiUsage") public class ReinforcedPiece extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/SnowBoots.java b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/SnowBoots.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/item/items/armor/SnowBoots.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/armor/SnowBoots.java index a5771a5..0186447 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/armor/SnowBoots.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/SnowBoots.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.armor; +package com.shanebeestudios.survival.api.item.items.armor; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; @@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class SnowBoots extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/armor/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/package-info.java new file mode 100644 index 0000000..2ccd1dc --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/armor/package-info.java @@ -0,0 +1,4 @@ +/** + * Armor {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item.items.armor; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/blocks/Campfire.java b/src/main/java/com/shanebeestudios/survival/api/item/items/blocks/Campfire.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/item/items/blocks/Campfire.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/blocks/Campfire.java index e48ef3f..3e2f082 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/blocks/Campfire.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/blocks/Campfire.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.blocks; +package com.shanebeestudios.survival.api.item.items.blocks; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -11,7 +11,7 @@ import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.BlockDataMeta; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class Campfire extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/blocks/Workbench.java b/src/main/java/com/shanebeestudios/survival/api/item/items/blocks/Workbench.java similarity index 84% rename from src/main/java/com/shanebeestudios/survival/item/items/blocks/Workbench.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/blocks/Workbench.java index 1b34e37..a3b3785 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/blocks/Workbench.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/blocks/Workbench.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.blocks; +package com.shanebeestudios.survival.api.item.items.blocks; import org.bukkit.Material; import org.bukkit.Tag; @@ -7,8 +7,8 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.Items; @SuppressWarnings("UnstableApiUsage") public class Workbench extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/blocks/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/items/blocks/package-info.java new file mode 100644 index 0000000..7a70405 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/blocks/package-info.java @@ -0,0 +1,4 @@ +/** + * Block {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item.items.blocks; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/Coffee.java b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/Coffee.java similarity index 89% rename from src/main/java/com/shanebeestudios/survival/item/items/drinks/Coffee.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/drinks/Coffee.java index 1882774..2719b40 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/Coffee.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/Coffee.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.drinks; +package com.shanebeestudios.survival.api.item.items.drinks; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -6,7 +6,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.api.item.Items; @SuppressWarnings("UnstableApiUsage") public class Coffee extends DrinkItem { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/ColdMilk.java b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/ColdMilk.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/item/items/drinks/ColdMilk.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/drinks/ColdMilk.java index 0656a9e..c69ce0a 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/ColdMilk.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/ColdMilk.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.drinks; +package com.shanebeestudios.survival.api.item.items.drinks; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import org.bukkit.Material; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/DrinkItem.java b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/DrinkItem.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/drinks/DrinkItem.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/drinks/DrinkItem.java index b18565e..fb6a8a6 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/DrinkItem.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/DrinkItem.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.drinks; +package com.shanebeestudios.survival.api.item.items.drinks; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Consumable; @@ -10,7 +10,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/HotMilk.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/drinks/HotMilk.java index f1b7286..9f15a2b 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/HotMilk.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/HotMilk.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.drinks; +package com.shanebeestudios.survival.api.item.items.drinks; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect.ApplyStatusEffects; @@ -9,7 +9,7 @@ import org.bukkit.inventory.SmokingRecipe; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.api.item.Items; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/Water.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/drinks/Water.java index 0cf07a5..65c373d 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/Water.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/Water.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.drinks; +package com.shanebeestudios.survival.api.item.items.drinks; import io.papermc.paper.datacomponent.item.consumable.ConsumeEffect; import org.bukkit.Material; @@ -10,7 +10,7 @@ import java.util.List; /** - * {@link com.shanebeestudios.survival.item.Item} class for water based drinks + * {@link com.shanebeestudios.survival.api.item.Item} class for water based drinks */ @SuppressWarnings("UnstableApiUsage") public class Water extends DrinkItem { diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/package-info.java new file mode 100644 index 0000000..f60f8e4 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/drinks/package-info.java @@ -0,0 +1,4 @@ +/** + * Drinkable {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item.items.drinks; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/food/SuspiciousMeat.java b/src/main/java/com/shanebeestudios/survival/api/item/items/food/SuspiciousMeat.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/food/SuspiciousMeat.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/food/SuspiciousMeat.java index 21cf2b2..4b26f90 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/food/SuspiciousMeat.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/food/SuspiciousMeat.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.food; +package com.shanebeestudios.survival.api.item.items.food; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.SuspiciousStewEffects; @@ -6,7 +6,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.potion.PotionEffectType; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/food/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/items/food/package-info.java new file mode 100644 index 0000000..86172b1 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/food/package-info.java @@ -0,0 +1,4 @@ +/** + * Edible {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item.items.food; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/legendary/BlazeSword.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/legendary/BlazeSword.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java index 5e48ab7..c30ac3f 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/legendary/BlazeSword.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.legendary; +package com.shanebeestudios.survival.api.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -13,7 +13,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class BlazeSword extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/legendary/EnderGiantBlade.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/legendary/EnderGiantBlade.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java index 9d0840e..c0b4d36 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/legendary/EnderGiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.legendary; +package com.shanebeestudios.survival.api.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -14,7 +14,7 @@ import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class EnderGiantBlade extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/legendary/ObsidianMace.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/legendary/ObsidianMace.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java index cfadac5..3a7dcca 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/legendary/ObsidianMace.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.legendary; +package com.shanebeestudios.survival.api.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -13,7 +13,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class ObsidianMace extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/legendary/QuartzPickaxe.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/item/items/legendary/QuartzPickaxe.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java index e8f576a..bfb2db8 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/legendary/QuartzPickaxe.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.legendary; +package com.shanebeestudios.survival.api.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -12,7 +12,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class QuartzPickaxe extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/legendary/ValkyriesAxe.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ValkyriesAxe.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/item/items/legendary/ValkyriesAxe.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ValkyriesAxe.java index 09f3474..95fcb7c 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/legendary/ValkyriesAxe.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ValkyriesAxe.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.legendary; +package com.shanebeestudios.survival.api.item.items.legendary; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -12,7 +12,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class ValkyriesAxe extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/package-info.java new file mode 100644 index 0000000..c39e8cf --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/package-info.java @@ -0,0 +1,4 @@ +/** + * Legendary {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item.items.legendary; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/misc/BreedingEgg.java b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/BreedingEgg.java similarity index 73% rename from src/main/java/com/shanebeestudios/survival/item/items/misc/BreedingEgg.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/misc/BreedingEgg.java index d4daf6b..bc22769 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/misc/BreedingEgg.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/BreedingEgg.java @@ -1,8 +1,8 @@ -package com.shanebeestudios.survival.item.items.misc; +package com.shanebeestudios.survival.api.item.items.misc; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class BreedingEgg extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/misc/CoffeeBean.java b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/CoffeeBean.java similarity index 84% rename from src/main/java/com/shanebeestudios/survival/item/items/misc/CoffeeBean.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/misc/CoffeeBean.java index f55765d..d98554d 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/misc/CoffeeBean.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/CoffeeBean.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.item.items.misc; +package com.shanebeestudios.survival.api.item.items.misc; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.SmokingRecipe; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class CoffeeBean extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/misc/FermentedSkin.java b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/FermentedSkin.java similarity index 89% rename from src/main/java/com/shanebeestudios/survival/item/items/misc/FermentedSkin.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/misc/FermentedSkin.java index 39c6379..2db4f35 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/misc/FermentedSkin.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/FermentedSkin.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.misc; +package com.shanebeestudios.survival.api.item.items.misc; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -6,7 +6,7 @@ import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class FermentedSkin extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/misc/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/package-info.java new file mode 100644 index 0000000..8bd42a3 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/misc/package-info.java @@ -0,0 +1,4 @@ +/** + * Misc {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item.items.misc; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Compass.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Compass.java similarity index 86% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/Compass.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/Compass.java index 1d7c291..428cadc 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Compass.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Compass.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class Compass extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/FireStriker.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/FireStriker.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/FireStriker.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/FireStriker.java index 83213af..38e6811 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/FireStriker.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/FireStriker.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -9,7 +9,7 @@ import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class FireStriker extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/GrapplingHook.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/GrapplingHook.java similarity index 87% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/GrapplingHook.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/GrapplingHook.java index 3e958e7..1363ee5 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/GrapplingHook.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/GrapplingHook.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class GrapplingHook extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java index fedcbf6..fc5fbc0 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hammer.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.Tool; import org.bukkit.Material; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hatchet.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hatchet.java index 05c8580..a57f7eb 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Hatchet.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hatchet.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import io.papermc.paper.datacomponent.item.Tool; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Mattock.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/Mattock.java index 5480788..aeac3c8 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Mattock.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Mattock.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import io.papermc.paper.datacomponent.item.Tool; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/MedicKit.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/MedicKit.java similarity index 87% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/MedicKit.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/MedicKit.java index 39e8fec..7c856a5 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/MedicKit.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/MedicKit.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; @@ -6,8 +6,8 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.util.ItemUtils; @SuppressWarnings("UnstableApiUsage") public class MedicKit extends Item { diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedBow.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/RecurvedBow.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedBow.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/RecurvedBow.java index 2684ae2..6f1fe4f 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedBow.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/RecurvedBow.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedCrossbow.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/RecurvedCrossbow.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedCrossbow.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/RecurvedCrossbow.java index da4e461..83d3549 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/RecurvedCrossbow.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/RecurvedCrossbow.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; import org.bukkit.Material; import org.bukkit.inventory.ItemType; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Shiv.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/Shiv.java index ab727e0..1e4a3a0 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Shiv.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Shiv.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import org.bukkit.Material; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Sickle.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java rename to src/main/java/com/shanebeestudios/survival/api/item/items/tools/Sickle.java index 8a07bab..1797211 100644 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/Sickle.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Sickle.java @@ -1,7 +1,7 @@ -package com.shanebeestudios.survival.item.items.tools; +package com.shanebeestudios.survival.api.item.items.tools; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.util.BlockTags; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.util.BlockTags; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import io.papermc.paper.datacomponent.item.Tool; diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/package-info.java new file mode 100644 index 0000000..9ba0ac8 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/package-info.java @@ -0,0 +1,4 @@ +/** + * Tool based {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item.items.tools; diff --git a/src/main/java/com/shanebeestudios/survival/api/item/package-info.java b/src/main/java/com/shanebeestudios/survival/api/item/package-info.java new file mode 100644 index 0000000..a93254c --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/item/package-info.java @@ -0,0 +1,4 @@ +/** + * Main package for {@link com.shanebeestudios.survival.api.item.Item Items} + */ +package com.shanebeestudios.survival.api.item; diff --git a/src/main/java/com/shanebeestudios/survival/util/BlockTags.java b/src/main/java/com/shanebeestudios/survival/api/util/BlockTags.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/util/BlockTags.java rename to src/main/java/com/shanebeestudios/survival/api/util/BlockTags.java index ddf70af..8a62504 100644 --- a/src/main/java/com/shanebeestudios/survival/util/BlockTags.java +++ b/src/main/java/com/shanebeestudios/survival/api/util/BlockTags.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.util; +package com.shanebeestudios.survival.api.util; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/src/main/java/com/shanebeestudios/survival/util/Difficulty.java b/src/main/java/com/shanebeestudios/survival/api/util/Difficulty.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/util/Difficulty.java rename to src/main/java/com/shanebeestudios/survival/api/util/Difficulty.java index b57e05f..ca8ae61 100644 --- a/src/main/java/com/shanebeestudios/survival/util/Difficulty.java +++ b/src/main/java/com/shanebeestudios/survival/api/util/Difficulty.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.util; +package com.shanebeestudios.survival.api.util; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/src/main/java/com/shanebeestudios/survival/util/ItemUtils.java b/src/main/java/com/shanebeestudios/survival/api/util/ItemUtils.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/util/ItemUtils.java rename to src/main/java/com/shanebeestudios/survival/api/util/ItemUtils.java index f84fcdb..9e9f8a8 100644 --- a/src/main/java/com/shanebeestudios/survival/util/ItemUtils.java +++ b/src/main/java/com/shanebeestudios/survival/api/util/ItemUtils.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.util; +package com.shanebeestudios.survival.api.util; import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.Component; @@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Item; +import com.shanebeestudios.survival.api.item.Item; import java.util.Map; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/util/Math.java b/src/main/java/com/shanebeestudios/survival/api/util/Math.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/util/Math.java rename to src/main/java/com/shanebeestudios/survival/api/util/Math.java index 2857523..525d8e0 100644 --- a/src/main/java/com/shanebeestudios/survival/util/Math.java +++ b/src/main/java/com/shanebeestudios/survival/api/util/Math.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.util; +package com.shanebeestudios.survival.api.util; /** * Simple math util methods diff --git a/src/main/java/com/shanebeestudios/survival/util/PlayerUtils.java b/src/main/java/com/shanebeestudios/survival/api/util/PlayerUtils.java similarity index 96% rename from src/main/java/com/shanebeestudios/survival/util/PlayerUtils.java rename to src/main/java/com/shanebeestudios/survival/api/util/PlayerUtils.java index 37dd1ad..c8214fb 100644 --- a/src/main/java/com/shanebeestudios/survival/util/PlayerUtils.java +++ b/src/main/java/com/shanebeestudios/survival/api/util/PlayerUtils.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.util; +package com.shanebeestudios.survival.api.util; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; diff --git a/src/main/java/com/shanebeestudios/survival/util/Utils.java b/src/main/java/com/shanebeestudios/survival/api/util/Utils.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/util/Utils.java rename to src/main/java/com/shanebeestudios/survival/api/util/Utils.java index 5da9c32..a8141cb 100644 --- a/src/main/java/com/shanebeestudios/survival/util/Utils.java +++ b/src/main/java/com/shanebeestudios/survival/api/util/Utils.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.util; +package com.shanebeestudios.survival.api.util; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; @@ -14,7 +14,7 @@ import org.bukkit.metadata.Metadatable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/api/util/package-info.java b/src/main/java/com/shanebeestudios/survival/api/util/package-info.java new file mode 100644 index 0000000..4fb37f3 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/util/package-info.java @@ -0,0 +1,4 @@ +/** + * General utility classes + */ +package com.shanebeestudios.survival.api.util; diff --git a/src/main/java/com/shanebeestudios/survival/config/package-info.java b/src/main/java/com/shanebeestudios/survival/config/package-info.java deleted file mode 100644 index f133ef9..0000000 --- a/src/main/java/com/shanebeestudios/survival/config/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Configs for the plugin - */ -package com.shanebeestudios.survival.config; diff --git a/src/main/java/com/shanebeestudios/survival/data/package-info.java b/src/main/java/com/shanebeestudios/survival/data/package-info.java deleted file mode 100644 index 34a794b..0000000 --- a/src/main/java/com/shanebeestudios/survival/data/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Classes for holding data - */ -package com.shanebeestudios.survival.data; diff --git a/src/main/java/com/shanebeestudios/survival/generator/package-info.java b/src/main/java/com/shanebeestudios/survival/generator/package-info.java deleted file mode 100644 index 28af773..0000000 --- a/src/main/java/com/shanebeestudios/survival/generator/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Generators for generating data - */ -package com.shanebeestudios.survival.generator; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java deleted file mode 100644 index 31916aa..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/armor/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Armor {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item.items.armor; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java deleted file mode 100644 index 65491a1..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/blocks/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Block {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item.items.blocks; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java deleted file mode 100644 index 3d344c8..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/drinks/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Drinkable {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item.items.drinks; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java deleted file mode 100644 index 66554fb..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/food/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Edible {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item.items.food; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java deleted file mode 100644 index 75f5885..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/legendary/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Legendary {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item.items.legendary; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java deleted file mode 100644 index 0e32e91..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/misc/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Misc {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item.items.misc; diff --git a/src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java b/src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java deleted file mode 100644 index 7668a85..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/items/tools/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Tool based {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item.items.tools; diff --git a/src/main/java/com/shanebeestudios/survival/item/package-info.java b/src/main/java/com/shanebeestudios/survival/item/package-info.java deleted file mode 100644 index bdcc47d..0000000 --- a/src/main/java/com/shanebeestudios/survival/item/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Main package for {@link com.shanebeestudios.survival.item.Item Items} - */ -package com.shanebeestudios.survival.item; diff --git a/src/main/java/com/shanebeestudios/survival/managers/package-info.java b/src/main/java/com/shanebeestudios/survival/managers/package-info.java deleted file mode 100644 index 3e55077..0000000 --- a/src/main/java/com/shanebeestudios/survival/managers/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * General managers for the plugin - */ -package com.shanebeestudios.survival.managers; diff --git a/src/main/java/com/shanebeestudios/survival/package-info.java b/src/main/java/com/shanebeestudios/survival/package-info.java deleted file mode 100644 index 2dcb282..0000000 --- a/src/main/java/com/shanebeestudios/survival/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Main plugin package - */ -package com.shanebeestudios.survival; diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalBootstrap.java b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java similarity index 77% rename from src/main/java/com/shanebeestudios/survival/SurvivalBootstrap.java rename to src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java index 3df9810..c7b72b6 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalBootstrap.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java @@ -1,9 +1,9 @@ -package com.shanebeestudios.survival; +package com.shanebeestudios.survival.plugin; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.bootstrap.PluginBootstrap; import org.jetbrains.annotations.NotNull; -import com.shanebeestudios.survival.generator.BlockTagGenerator; +import com.shanebeestudios.survival.api.generator.BlockTagGenerator; @SuppressWarnings({"UnstableApiUsage", "unused"}) public class SurvivalBootstrap implements PluginBootstrap { diff --git a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java rename to src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java index 6138f5b..d29075e 100644 --- a/src/main/java/com/shanebeestudios/survival/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java @@ -1,21 +1,21 @@ -package com.shanebeestudios.survival; - -import com.shanebeestudios.survival.commands.SurvivalCommand; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.config.PlayerDataConfig; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.listeners.EventManager; -import com.shanebeestudios.survival.managers.EffectManager; -import com.shanebeestudios.survival.managers.LootManager; -import com.shanebeestudios.survival.managers.MessageManager; -import com.shanebeestudios.survival.managers.PapiPlaceholders; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.managers.RecipeManager; -import com.shanebeestudios.survival.managers.ScoreBoardManager; -import com.shanebeestudios.survival.tasks.TaskManager; -import com.shanebeestudios.survival.util.BlockTags; -import com.shanebeestudios.survival.util.Utils; +package com.shanebeestudios.survival.plugin; + +import com.shanebeestudios.survival.plugin.commands.SurvivalCommand; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.config.PlayerDataConfig; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.listeners.EventManager; +import com.shanebeestudios.survival.plugin.managers.EffectManager; +import com.shanebeestudios.survival.plugin.managers.LootManager; +import com.shanebeestudios.survival.plugin.managers.MessageManager; +import com.shanebeestudios.survival.plugin.managers.PapiPlaceholders; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.managers.RecipeManager; +import com.shanebeestudios.survival.plugin.managers.ScoreBoardManager; +import com.shanebeestudios.survival.plugin.tasks.TaskManager; +import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.util.Utils; import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPIBukkitConfig; import dev.jorel.commandapi.exceptions.UnsupportedVersionException; diff --git a/src/main/java/com/shanebeestudios/survival/commands/BaseCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/BaseCommand.java similarity index 63% rename from src/main/java/com/shanebeestudios/survival/commands/BaseCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/BaseCommand.java index ba1b68e..ff4db5a 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/BaseCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/BaseCommand.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; import dev.jorel.commandapi.arguments.Argument; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; public abstract class BaseCommand { diff --git a/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java similarity index 72% rename from src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java index aecf96a..e181d3c 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/DataGenCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.generator.BlockTagFileGenerator; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.generator.BlockTagFileGenerator; +import com.shanebeestudios.survival.api.util.Utils; public class DataGenCommand extends BaseCommand { diff --git a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/DebugCommand.java similarity index 79% rename from src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/DebugCommand.java index 1a1250e..cca134a 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/DebugCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/DebugCommand.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.Permissions; -import com.shanebeestudios.survival.data.Placeholders; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.item.Nutrition; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.Placeholders; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.item.Nutrition; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; diff --git a/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/GiveItemCommand.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/GiveItemCommand.java index b07668c..f00aa0d 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/GiveItemCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/GiveItemCommand.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.ArgumentSuggestions; import dev.jorel.commandapi.arguments.EntitySelectorArgument; @@ -16,10 +16,10 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/HealCommand.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/commands/HealCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/HealCommand.java index e8fb914..b3d53ff 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/HealCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/HealCommand.java @@ -1,15 +1,15 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.EntitySelectorArgument; import dev.jorel.commandapi.arguments.LiteralArgument; import org.bukkit.attribute.Attribute; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; import java.util.Collection; import java.util.StringJoiner; diff --git a/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/NutritionCommand.java similarity index 74% rename from src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/NutritionCommand.java index b783d23..0ce7fcf 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/NutritionCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/NutritionCommand.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.gui.NutritionGUI; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.gui.NutritionGUI; public class NutritionCommand extends BaseCommand { diff --git a/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/PlayerDataCommand.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/PlayerDataCommand.java index 6f751d3..2315a27 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/PlayerDataCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/PlayerDataCommand.java @@ -1,15 +1,15 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.DoubleArgument; import dev.jorel.commandapi.arguments.EntitySelectorArgument; import dev.jorel.commandapi.arguments.LiteralArgument; import dev.jorel.commandapi.arguments.MultiLiteralArgument; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; import java.util.Collection; diff --git a/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/ReloadCommand.java similarity index 73% rename from src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/ReloadCommand.java index e6e0e2c..fdc195d 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/ReloadCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/ReloadCommand.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.util.Utils; public class ReloadCommand extends BaseCommand { diff --git a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/StatCommand.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/commands/StatCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/StatCommand.java index fbf5193..50e88d9 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/StatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/StatCommand.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.BukkitStringTooltip; import dev.jorel.commandapi.IStringTooltip; import dev.jorel.commandapi.arguments.Argument; @@ -11,11 +11,11 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.Info; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.Info; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/commands/SurvivalCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/SurvivalCommand.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/commands/SurvivalCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/SurvivalCommand.java index 829bb01..0af3f08 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/SurvivalCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/SurvivalCommand.java @@ -1,7 +1,7 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; import dev.jorel.commandapi.CommandTree; -import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/ToggleChatCommand.java similarity index 87% rename from src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java rename to src/main/java/com/shanebeestudios/survival/plugin/commands/ToggleChatCommand.java index 036dcc8..0abea12 100644 --- a/src/main/java/com/shanebeestudios/survival/commands/ToggleChatCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/ToggleChatCommand.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.commands; +package com.shanebeestudios.survival.plugin.commands; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import dev.jorel.commandapi.BukkitStringTooltip; import dev.jorel.commandapi.IStringTooltip; import dev.jorel.commandapi.arguments.Argument; @@ -8,9 +8,9 @@ import dev.jorel.commandapi.arguments.LiteralArgument; import dev.jorel.commandapi.arguments.StringArgument; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/config/Config.java b/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java similarity index 99% rename from src/main/java/com/shanebeestudios/survival/config/Config.java rename to src/main/java/com/shanebeestudios/survival/plugin/config/Config.java index 1bdb730..8075418 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java @@ -1,8 +1,8 @@ -package com.shanebeestudios.survival.config; +package com.shanebeestudios.survival.plugin.config; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.goals.AngryWolfGoal; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.goals.AngryWolfGoal; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; diff --git a/src/main/java/com/shanebeestudios/survival/config/ItemConfig.java b/src/main/java/com/shanebeestudios/survival/plugin/config/ItemConfig.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/config/ItemConfig.java rename to src/main/java/com/shanebeestudios/survival/plugin/config/ItemConfig.java index 7419ba4..f59a8f5 100644 --- a/src/main/java/com/shanebeestudios/survival/config/ItemConfig.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/ItemConfig.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.config; +package com.shanebeestudios.survival.plugin.config; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Nutrition; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Nutrition; +import com.shanebeestudios.survival.api.util.Utils; import java.io.File; import java.io.IOException; diff --git a/src/main/java/com/shanebeestudios/survival/config/Lang.java b/src/main/java/com/shanebeestudios/survival/plugin/config/Lang.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/config/Lang.java rename to src/main/java/com/shanebeestudios/survival/plugin/config/Lang.java index d660ec5..94adabb 100644 --- a/src/main/java/com/shanebeestudios/survival/config/Lang.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/Lang.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.config; +package com.shanebeestudios.survival.plugin.config; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.util.Utils; import java.io.File; import java.io.IOException; diff --git a/src/main/java/com/shanebeestudios/survival/config/PlayerDataConfig.java b/src/main/java/com/shanebeestudios/survival/plugin/config/PlayerDataConfig.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/config/PlayerDataConfig.java rename to src/main/java/com/shanebeestudios/survival/plugin/config/PlayerDataConfig.java index 783ac1f..776088b 100644 --- a/src/main/java/com/shanebeestudios/survival/config/PlayerDataConfig.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/PlayerDataConfig.java @@ -1,9 +1,9 @@ -package com.shanebeestudios.survival.config; +package com.shanebeestudios.survival.plugin.config; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.YamlConfiguration; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; import java.io.File; import java.io.IOException; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/config/package-info.java b/src/main/java/com/shanebeestudios/survival/plugin/config/package-info.java new file mode 100644 index 0000000..f8969f4 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/package-info.java @@ -0,0 +1,4 @@ +/** + * Configs for the plugin + */ +package com.shanebeestudios.survival.plugin.config; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java similarity index 63% rename from src/main/java/com/shanebeestudios/survival/listeners/EventManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java index 813b259..d1d7da2 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java @@ -1,50 +1,50 @@ -package com.shanebeestudios.survival.listeners; +package com.shanebeestudios.survival.plugin.listeners; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.listeners.block.BlockBreakListener; -import com.shanebeestudios.survival.listeners.block.BlockPlaceListener; -import com.shanebeestudios.survival.listeners.block.Campfire; -import com.shanebeestudios.survival.listeners.block.Chairs; -import com.shanebeestudios.survival.listeners.block.LootTableListener; -import com.shanebeestudios.survival.listeners.block.SnowballThrow; -import com.shanebeestudios.survival.listeners.block.WorkbenchShare; -import com.shanebeestudios.survival.listeners.entity.MobGoalListener; -import com.shanebeestudios.survival.listeners.entity.BeeKeeperSuit; -import com.shanebeestudios.survival.listeners.entity.ChestPigmen; -import com.shanebeestudios.survival.listeners.entity.ChickenSpawn; -import com.shanebeestudios.survival.listeners.entity.EntityDeath; -import com.shanebeestudios.survival.listeners.entity.LivingSlime; -import com.shanebeestudios.survival.listeners.entity.MerchantTrades; -import com.shanebeestudios.survival.listeners.entity.PiglinBarter; -import com.shanebeestudios.survival.listeners.item.BeetrootStrength; -import com.shanebeestudios.survival.listeners.item.BlazeSword; -import com.shanebeestudios.survival.listeners.item.BowListener; -import com.shanebeestudios.survival.listeners.item.CompassWaypoint; -import com.shanebeestudios.survival.listeners.item.CookieHealthBoost; -import com.shanebeestudios.survival.listeners.item.DrinkableItemListener; -import com.shanebeestudios.survival.listeners.item.FirestrikerListener; -import com.shanebeestudios.survival.listeners.item.FoodDiversityConsume; -import com.shanebeestudios.survival.listeners.item.GiantBlade; -import com.shanebeestudios.survival.listeners.item.GrapplingHookListener; -import com.shanebeestudios.survival.listeners.item.MedicKit; -import com.shanebeestudios.survival.listeners.item.ObsidianMaceWeakness; -import com.shanebeestudios.survival.listeners.item.PoisonousPotato; -import com.shanebeestudios.survival.listeners.item.RawMeatHunger; -import com.shanebeestudios.survival.listeners.item.RecurvedBowListener; -import com.shanebeestudios.survival.listeners.item.RepairCrafting; -import com.shanebeestudios.survival.listeners.item.ShivPoison; -import com.shanebeestudios.survival.listeners.player.ThirstListener; -import com.shanebeestudios.survival.listeners.item.TropicalFish; -import com.shanebeestudios.survival.listeners.item.Valkyrie; -import com.shanebeestudios.survival.listeners.item.WaterPurifiedListener; -import com.shanebeestudios.survival.listeners.item.WaterBowlListener; -import com.shanebeestudios.survival.listeners.player.EnergyChange; -import com.shanebeestudios.survival.listeners.player.PlayerDataListener; -import com.shanebeestudios.survival.listeners.server.Guide; -import com.shanebeestudios.survival.listeners.server.LocalChat; -import com.shanebeestudios.survival.listeners.server.RecipeDiscovery; -import com.shanebeestudios.survival.listeners.server.ResourcePackListener; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.listeners.block.BlockBreakListener; +import com.shanebeestudios.survival.plugin.listeners.block.BlockPlaceListener; +import com.shanebeestudios.survival.plugin.listeners.block.Campfire; +import com.shanebeestudios.survival.plugin.listeners.block.Chairs; +import com.shanebeestudios.survival.plugin.listeners.block.LootTableListener; +import com.shanebeestudios.survival.plugin.listeners.block.SnowballThrow; +import com.shanebeestudios.survival.plugin.listeners.block.WorkbenchShare; +import com.shanebeestudios.survival.plugin.listeners.entity.MobGoalListener; +import com.shanebeestudios.survival.plugin.listeners.entity.BeeKeeperSuit; +import com.shanebeestudios.survival.plugin.listeners.entity.ChestPigmen; +import com.shanebeestudios.survival.plugin.listeners.entity.ChickenSpawn; +import com.shanebeestudios.survival.plugin.listeners.entity.EntityDeath; +import com.shanebeestudios.survival.plugin.listeners.entity.LivingSlime; +import com.shanebeestudios.survival.plugin.listeners.entity.MerchantTrades; +import com.shanebeestudios.survival.plugin.listeners.entity.PiglinBarter; +import com.shanebeestudios.survival.plugin.listeners.item.BeetrootStrength; +import com.shanebeestudios.survival.plugin.listeners.item.BlazeSword; +import com.shanebeestudios.survival.plugin.listeners.item.BowListener; +import com.shanebeestudios.survival.plugin.listeners.item.CompassWaypoint; +import com.shanebeestudios.survival.plugin.listeners.item.CookieHealthBoost; +import com.shanebeestudios.survival.plugin.listeners.item.DrinkableItemListener; +import com.shanebeestudios.survival.plugin.listeners.item.FirestrikerListener; +import com.shanebeestudios.survival.plugin.listeners.item.FoodDiversityConsume; +import com.shanebeestudios.survival.plugin.listeners.item.GiantBlade; +import com.shanebeestudios.survival.plugin.listeners.item.GrapplingHookListener; +import com.shanebeestudios.survival.plugin.listeners.item.MedicKit; +import com.shanebeestudios.survival.plugin.listeners.item.ObsidianMaceWeakness; +import com.shanebeestudios.survival.plugin.listeners.item.PoisonousPotato; +import com.shanebeestudios.survival.plugin.listeners.item.RawMeatHunger; +import com.shanebeestudios.survival.plugin.listeners.item.RecurvedBowListener; +import com.shanebeestudios.survival.plugin.listeners.item.RepairCrafting; +import com.shanebeestudios.survival.plugin.listeners.item.ShivPoison; +import com.shanebeestudios.survival.plugin.listeners.player.ThirstListener; +import com.shanebeestudios.survival.plugin.listeners.item.TropicalFish; +import com.shanebeestudios.survival.plugin.listeners.item.Valkyrie; +import com.shanebeestudios.survival.plugin.listeners.item.WaterPurifiedListener; +import com.shanebeestudios.survival.plugin.listeners.item.WaterBowlListener; +import com.shanebeestudios.survival.plugin.listeners.player.EnergyChange; +import com.shanebeestudios.survival.plugin.listeners.player.PlayerDataListener; +import com.shanebeestudios.survival.plugin.listeners.server.Guide; +import com.shanebeestudios.survival.plugin.listeners.server.LocalChat; +import com.shanebeestudios.survival.plugin.listeners.server.RecipeDiscovery; +import com.shanebeestudios.survival.plugin.listeners.server.ResourcePackListener; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java index cc25de1..13577f4 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockBreakListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java @@ -1,14 +1,14 @@ -package com.shanebeestudios.survival.listeners.block; +package com.shanebeestudios.survival.plugin.listeners.block; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.Permissions; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.MessageManager; -import com.shanebeestudios.survival.managers.MessageManager.MessageType; -import com.shanebeestudios.survival.util.BlockTags; -import com.shanebeestudios.survival.util.ItemUtils; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.MessageManager; +import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; +import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.util.ItemUtils; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java similarity index 83% rename from src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java index bf4b53b..8820087 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/BlockPlaceListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java @@ -1,13 +1,13 @@ -package com.shanebeestudios.survival.listeners.block; +package com.shanebeestudios.survival.plugin.listeners.block; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.Permissions; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.MessageManager; -import com.shanebeestudios.survival.managers.MessageManager.MessageType; -import com.shanebeestudios.survival.util.BlockTags; -import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.MessageManager; +import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; +import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.util.ItemUtils; import org.bukkit.GameMode; import org.bukkit.Sound; import org.bukkit.block.Block; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/Campfire.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Campfire.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/listeners/block/Campfire.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Campfire.java index 98429af..d98e288 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/Campfire.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Campfire.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.block; +package com.shanebeestudios.survival.plugin.listeners.block; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -10,7 +10,7 @@ import org.bukkit.event.block.BlockCookEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/Chairs.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Chairs.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/listeners/block/Chairs.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Chairs.java index 7dfa117..c133437 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/Chairs.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Chairs.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.block; +package com.shanebeestudios.survival.plugin.listeners.block; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -21,8 +21,8 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.util.Vector; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/LootTableListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/LootTableListener.java similarity index 78% rename from src/main/java/com/shanebeestudios/survival/listeners/block/LootTableListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/block/LootTableListener.java index b53049a..d85ff24 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/LootTableListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/LootTableListener.java @@ -1,7 +1,7 @@ -package com.shanebeestudios.survival.listeners.block; +package com.shanebeestudios.survival.plugin.listeners.block; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.managers.LootManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.managers.LootManager; import org.bukkit.block.Container; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/SnowballThrow.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/SnowballThrow.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/listeners/block/SnowballThrow.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/block/SnowballThrow.java index 09b90c6..03bbf8c 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/SnowballThrow.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/SnowballThrow.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.block; +package com.shanebeestudios.survival.plugin.listeners.block; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/block/WorkbenchShare.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/WorkbenchShare.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/listeners/block/WorkbenchShare.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/block/WorkbenchShare.java index 92b3920..4bb4f18 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/block/WorkbenchShare.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/WorkbenchShare.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.block; +package com.shanebeestudios.survival.plugin.listeners.block; import com.google.common.collect.ImmutableSet; import org.bukkit.Bukkit; @@ -17,7 +17,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import java.util.*; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/BeeKeeperSuit.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/BeeKeeperSuit.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/BeeKeeperSuit.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/BeeKeeperSuit.java index 3db0899..eea0a86 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/BeeKeeperSuit.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/BeeKeeperSuit.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; import org.bukkit.entity.Bee; import org.bukkit.entity.Entity; @@ -12,8 +12,8 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.inventory.PlayerInventory; import org.bukkit.potion.PotionEffectType; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.Utils; public class BeeKeeperSuit implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/ChestPigmen.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/ChestPigmen.java similarity index 96% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/ChestPigmen.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/ChestPigmen.java index 5b6a217..1c10705 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/ChestPigmen.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/ChestPigmen.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -17,7 +17,7 @@ import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/ChickenSpawn.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/ChickenSpawn.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/ChickenSpawn.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/ChickenSpawn.java index 1b89f4d..4212b29 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/ChickenSpawn.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/ChickenSpawn.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; import org.bukkit.Location; import org.bukkit.Sound; @@ -10,9 +10,9 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.player.PlayerEggThrowEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Items; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/EntityDeath.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/EntityDeath.java similarity index 86% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/EntityDeath.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/EntityDeath.java index 23fd7a2..1efdc6d 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/EntityDeath.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/EntityDeath.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; @@ -7,9 +7,9 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Items; import java.util.List; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/LivingSlime.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/LivingSlime.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/LivingSlime.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/LivingSlime.java index 7970b07..90c8f0a 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/LivingSlime.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/LivingSlime.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -11,8 +11,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.Iterator; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/MerchantTrades.java similarity index 78% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/MerchantTrades.java index 1fbb9a8..32199c0 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/MerchantTrades.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/MerchantTrades.java @@ -1,7 +1,7 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.managers.LootManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.managers.LootManager; import org.bukkit.entity.Entity; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/MobGoalListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/MobGoalListener.java similarity index 81% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/MobGoalListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/MobGoalListener.java index a594bf6..0753a50 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/MobGoalListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/MobGoalListener.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; import com.destroystokyo.paper.entity.ai.MobGoals; import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.goals.AngryWolfGoal; -import com.shanebeestudios.survival.goals.AvoidPlayerGoal; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.goals.AngryWolfGoal; +import com.shanebeestudios.survival.api.goals.AvoidPlayerGoal; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Mob; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/PiglinBarter.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/PiglinBarter.java index 28163c9..8eb7078 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/entity/PiglinBarter.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/entity/PiglinBarter.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.entity; +package com.shanebeestudios.survival.plugin.listeners.entity; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -9,9 +9,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionType; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Items; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/BeetrootStrength.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BeetrootStrength.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/listeners/item/BeetrootStrength.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BeetrootStrength.java index beb0703..cea9843 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/BeetrootStrength.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BeetrootStrength.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/BlazeSword.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BlazeSword.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/listeners/item/BlazeSword.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BlazeSword.java index 74477f2..a202c37 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/BlazeSword.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BlazeSword.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -18,7 +18,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.api.item.Items; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/BowListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BowListener.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/listeners/item/BowListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BowListener.java index 8da8f5e..bbe949a 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/BowListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BowListener.java @@ -1,8 +1,8 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.managers.MessageManager; -import com.shanebeestudios.survival.managers.MessageManager.MessageType; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.managers.MessageManager; +import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/CompassWaypoint.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CompassWaypoint.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/listeners/item/CompassWaypoint.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CompassWaypoint.java index 51ff0f6..f1a934b 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/CompassWaypoint.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CompassWaypoint.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Location; import org.bukkit.Material; @@ -12,12 +12,12 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.util.BlockTags; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.util.Utils; public class CompassWaypoint implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/CookieHealthBoost.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CookieHealthBoost.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/listeners/item/CookieHealthBoost.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CookieHealthBoost.java index 544590c..a2f54c3 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/CookieHealthBoost.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CookieHealthBoost.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/DrinkableItemListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java similarity index 84% rename from src/main/java/com/shanebeestudios/survival/listeners/item/DrinkableItemListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java index dc450d6..9da05b1 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/DrinkableItemListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java @@ -1,14 +1,14 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.Permissions; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.item.items.drinks.DrinkItem; -import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.item.items.drinks.DrinkItem; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/FirestrikerListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FirestrikerListener.java similarity index 96% rename from src/main/java/com/shanebeestudios/survival/listeners/item/FirestrikerListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FirestrikerListener.java index f7eb29a..a01d9b2 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/FirestrikerListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FirestrikerListener.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -25,9 +25,9 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.gui.FireStrikerGUI; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.gui.FireStrikerGUI; +import com.shanebeestudios.survival.api.item.Items; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FoodDiversityConsume.java similarity index 90% rename from src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FoodDiversityConsume.java index 632034d..fdfbd98 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/FoodDiversityConsume.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FoodDiversityConsume.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -16,13 +16,13 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.item.Nutrition; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.item.Nutrition; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.api.util.Utils; public class FoodDiversityConsume implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/GiantBlade.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBlade.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/listeners/item/GiantBlade.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBlade.java index 49fdb4f..df42a3f 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/GiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBlade.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -22,13 +22,13 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.data.Stat; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.data.Stat; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.api.util.Utils; import java.util.Collection; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHookListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GrapplingHookListener.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHookListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GrapplingHookListener.java index a911869..5a5b683 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/GrapplingHookListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GrapplingHookListener.java @@ -1,9 +1,9 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.MessageManager; -import com.shanebeestudios.survival.managers.MessageManager.MessageType; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.MessageManager; +import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/MedicKit.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/MedicKit.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/listeners/item/MedicKit.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/MedicKit.java index 2ed0d0c..bfab92a 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/MedicKit.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/MedicKit.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import io.papermc.paper.entity.LookAnchor; import org.bukkit.Bukkit; @@ -18,15 +18,15 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.data.Stat; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.util.ItemUtils; -import com.shanebeestudios.survival.util.PlayerUtils; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.data.Stat; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.api.util.ItemUtils; +import com.shanebeestudios.survival.api.util.PlayerUtils; +import com.shanebeestudios.survival.api.util.Utils; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/ObsidianMaceWeakness.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ObsidianMaceWeakness.java similarity index 85% rename from src/main/java/com/shanebeestudios/survival/listeners/item/ObsidianMaceWeakness.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ObsidianMaceWeakness.java index 761a354..100aabd 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/ObsidianMaceWeakness.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ObsidianMaceWeakness.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; @@ -11,11 +11,11 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.EffectManager; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.EffectManager; +import com.shanebeestudios.survival.api.util.Utils; public class ObsidianMaceWeakness implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/PoisonousPotato.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/PoisonousPotato.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/listeners/item/PoisonousPotato.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/PoisonousPotato.java index 69a7a7f..6339369 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/PoisonousPotato.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/PoisonousPotato.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/RawMeatHunger.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RawMeatHunger.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/listeners/item/RawMeatHunger.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RawMeatHunger.java index adc568c..fd7e3fc 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/RawMeatHunger.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RawMeatHunger.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBowListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RecurvedBowListener.java similarity index 86% rename from src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBowListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RecurvedBowListener.java index 5f8ea73..45b06f8 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/RecurvedBowListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RecurvedBowListener.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.events.ShootRecurvedBowEvent; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.item.items.tools.RecurvedBow; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.events.ShootRecurvedBowEvent; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.item.items.tools.RecurvedBow; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Entity; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/RepairCrafting.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RepairCrafting.java similarity index 98% rename from src/main/java/com/shanebeestudios/survival/listeners/item/RepairCrafting.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RepairCrafting.java index 9dbecb3..0e44b25 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/RepairCrafting.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RepairCrafting.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.event.Listener; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/ShivPoison.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ShivPoison.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/listeners/item/ShivPoison.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ShivPoison.java index b7c2c9e..2bddd41 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/ShivPoison.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ShivPoison.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Sound; import org.bukkit.entity.LivingEntity; @@ -15,10 +15,10 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.Utils; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/StarBattleaxeWither.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/StarBattleaxeWither.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/listeners/item/StarBattleaxeWither.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/StarBattleaxeWither.java index a68653e..1c3b7ce 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/StarBattleaxeWither.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/StarBattleaxeWither.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import java.util.Random; @@ -14,7 +14,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.api.util.Utils; public class StarBattleaxeWither implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/TropicalFish.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/TropicalFish.java similarity index 89% rename from src/main/java/com/shanebeestudios/survival/listeners/item/TropicalFish.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/TropicalFish.java index 23ee696..5255e7b 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/TropicalFish.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/TropicalFish.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import java.util.Random; @@ -11,9 +11,9 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerItemConsumeEvent; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; public class TropicalFish implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/Valkyrie.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/Valkyrie.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/listeners/item/Valkyrie.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/Valkyrie.java index 5867fb9..e74bb00 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/Valkyrie.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/Valkyrie.java @@ -1,13 +1,13 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import java.util.Collection; import java.util.Random; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.data.Stat; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.data.Stat; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.*; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -22,7 +22,7 @@ import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; public class Valkyrie implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBowlListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/WaterBowlListener.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/listeners/item/WaterBowlListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/WaterBowlListener.java index 78514d5..deead9b 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/WaterBowlListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/WaterBowlListener.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; import org.bukkit.Bukkit; import org.bukkit.Keyed; @@ -22,11 +22,11 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.util.Vector; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.events.WaterBowlFillEvent; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.item.Recipes; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.events.WaterBowlFillEvent; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.item.Recipes; +import com.shanebeestudios.survival.api.util.Utils; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/item/WaterPurifiedListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/WaterPurifiedListener.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/listeners/item/WaterPurifiedListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/item/WaterPurifiedListener.java index 2e8d09c..59a9acf 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/item/WaterPurifiedListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/WaterPurifiedListener.java @@ -1,7 +1,7 @@ -package com.shanebeestudios.survival.listeners.item; +package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; import org.bukkit.FluidCollisionMode; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java similarity index 89% rename from src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java index 441265e..f344863 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/player/EnergyChange.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.listeners.player; +package com.shanebeestudios.survival.plugin.listeners.player; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -9,14 +9,14 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.world.TimeSkipEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.events.EnergyLevelChangeEvent; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.events.EnergyLevelChangeEvent; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.api.util.Utils; public class EnergyChange implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/player/PlayerDataListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/PlayerDataListener.java similarity index 82% rename from src/main/java/com/shanebeestudios/survival/listeners/player/PlayerDataListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/player/PlayerDataListener.java index d34e967..f25b2d2 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/player/PlayerDataListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/PlayerDataListener.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.player; +package com.shanebeestudios.survival.plugin.listeners.player; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -8,12 +8,12 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scheduler.BukkitScheduler; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.PlayerDataConfig; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.managers.ScoreBoardManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.PlayerDataConfig; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.managers.ScoreBoardManager; import java.util.Objects; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/player/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java similarity index 83% rename from src/main/java/com/shanebeestudios/survival/listeners/player/ThirstListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java index dc2563b..f1d786d 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/player/ThirstListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.listeners.player; - -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.Permissions; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; -import com.shanebeestudios.survival.managers.PlayerManager; +package com.shanebeestudios.survival.plugin.listeners.player; + +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/shanebeestudios/survival/listeners/server/Guide.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/Guide.java similarity index 82% rename from src/main/java/com/shanebeestudios/survival/listeners/server/Guide.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/server/Guide.java index bd7fd99..ae08233 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/server/Guide.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/Guide.java @@ -1,14 +1,14 @@ -package com.shanebeestudios.survival.listeners.server; +package com.shanebeestudios.survival.plugin.listeners.server; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.util.Utils; public class Guide implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/server/LocalChat.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/LocalChat.java similarity index 85% rename from src/main/java/com/shanebeestudios/survival/listeners/server/LocalChat.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/server/LocalChat.java index b7363ad..b332092 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/server/LocalChat.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/LocalChat.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.server; +package com.shanebeestudios.survival.plugin.listeners.server; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -9,10 +9,10 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.config.Config; public class LocalChat implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/server/RecipeDiscovery.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/RecipeDiscovery.java similarity index 97% rename from src/main/java/com/shanebeestudios/survival/listeners/server/RecipeDiscovery.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/server/RecipeDiscovery.java index 9fda464..1ddb893 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/server/RecipeDiscovery.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/RecipeDiscovery.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.server; +package com.shanebeestudios.survival.plugin.listeners.server; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -13,9 +13,9 @@ import org.bukkit.event.inventory.FurnaceExtractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.item.Recipes; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.item.Recipes; public class RecipeDiscovery implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/listeners/server/ResourcePackListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/ResourcePackListener.java similarity index 89% rename from src/main/java/com/shanebeestudios/survival/listeners/server/ResourcePackListener.java rename to src/main/java/com/shanebeestudios/survival/plugin/listeners/server/ResourcePackListener.java index fbd0bbc..4e32288 100644 --- a/src/main/java/com/shanebeestudios/survival/listeners/server/ResourcePackListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/ResourcePackListener.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.listeners.server; +package com.shanebeestudios.survival.plugin.listeners.server; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; @@ -6,10 +6,10 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerResourcePackStatusEvent; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.util.Utils; import java.util.UUID; diff --git a/src/main/java/com/shanebeestudios/survival/managers/EffectManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java similarity index 80% rename from src/main/java/com/shanebeestudios/survival/managers/EffectManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java index d3b0399..695e3e8 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/EffectManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java @@ -1,14 +1,14 @@ -package com.shanebeestudios.survival.managers; +package com.shanebeestudios.survival.plugin.managers; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.tasks.tool.BlazeSwordEffects; -import com.shanebeestudios.survival.tasks.tool.BlazeSwordSound; -import com.shanebeestudios.survival.tasks.tool.GiantBlade; -import com.shanebeestudios.survival.tasks.tool.ObsidianMace; -import com.shanebeestudios.survival.tasks.tool.QuartzPickaxe; -import com.shanebeestudios.survival.tasks.tool.Valkyrie; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.tasks.tool.BlazeSwordEffects; +import com.shanebeestudios.survival.plugin.tasks.tool.BlazeSwordSound; +import com.shanebeestudios.survival.plugin.tasks.tool.GiantBlade; +import com.shanebeestudios.survival.plugin.tasks.tool.ObsidianMace; +import com.shanebeestudios.survival.plugin.tasks.tool.QuartzPickaxe; +import com.shanebeestudios.survival.plugin.tasks.tool.Valkyrie; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.Location; import org.bukkit.Particle; import org.bukkit.entity.LivingEntity; diff --git a/src/main/java/com/shanebeestudios/survival/managers/LootManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/LootManager.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/managers/LootManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/managers/LootManager.java index 8a7d22f..e3d933b 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/LootManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/LootManager.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.managers; +package com.shanebeestudios.survival.plugin.managers; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Item; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.util.ItemUtils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.ItemUtils; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Merchant; diff --git a/src/main/java/com/shanebeestudios/survival/managers/MessageManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/MessageManager.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/managers/MessageManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/managers/MessageManager.java index 594e4f4..50c1def 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/MessageManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/MessageManager.java @@ -1,8 +1,8 @@ -package com.shanebeestudios.survival.managers; +package com.shanebeestudios.survival.plugin.managers; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/src/main/java/com/shanebeestudios/survival/managers/PapiPlaceholders.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/PapiPlaceholders.java similarity index 94% rename from src/main/java/com/shanebeestudios/survival/managers/PapiPlaceholders.java rename to src/main/java/com/shanebeestudios/survival/plugin/managers/PapiPlaceholders.java index 4b08a09..a499ce1 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/PapiPlaceholders.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/PapiPlaceholders.java @@ -1,9 +1,9 @@ -package com.shanebeestudios.survival.managers; +package com.shanebeestudios.survival.plugin.managers; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.Placeholders; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.data.PlayerData; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.Placeholders; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.data.PlayerData; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/shanebeestudios/survival/managers/PlayerManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/PlayerManager.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/managers/PlayerManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/managers/PlayerManager.java index 986d952..f842e3b 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/PlayerManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/PlayerManager.java @@ -1,17 +1,17 @@ -package com.shanebeestudios.survival.managers; +package com.shanebeestudios.survival.plugin.managers; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.event.Listener; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.config.PlayerDataConfig; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.config.PlayerDataConfig; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/com/shanebeestudios/survival/managers/RecipeManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/RecipeManager.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/managers/RecipeManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/managers/RecipeManager.java index 8c8df5a..5683967 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/RecipeManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/RecipeManager.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.managers; +package com.shanebeestudios.survival.plugin.managers; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Recipes; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Recipes; public class RecipeManager { diff --git a/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/ScoreBoardManager.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/managers/ScoreBoardManager.java index 66daf65..d093e25 100644 --- a/src/main/java/com/shanebeestudios/survival/managers/ScoreBoardManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/ScoreBoardManager.java @@ -1,10 +1,10 @@ -package com.shanebeestudios.survival.managers; +package com.shanebeestudios.survival.plugin.managers; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.HealthBoard; -import com.shanebeestudios.survival.tasks.HealthBoardTask; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.HealthBoard; +import com.shanebeestudios.survival.plugin.tasks.HealthBoardTask; import org.jetbrains.annotations.ApiStatus; import java.util.HashMap; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/managers/package-info.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/package-info.java new file mode 100644 index 0000000..0fc563c --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/package-info.java @@ -0,0 +1,4 @@ +/** + * General managers for the plugin + */ +package com.shanebeestudios.survival.plugin.managers; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/package-info.java b/src/main/java/com/shanebeestudios/survival/plugin/package-info.java new file mode 100644 index 0000000..4181cd5 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/plugin/package-info.java @@ -0,0 +1,4 @@ +/** + * Main plugin package + */ +package com.shanebeestudios.survival.plugin; diff --git a/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/EnergyDrain.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/EnergyDrain.java index 0400864..ca34727 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/EnergyDrain.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/EnergyDrain.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.World.Environment; @@ -11,12 +11,12 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.config.Lang; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.api.util.Utils; public class EnergyDrain extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/HealthBoardTask.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/HealthBoardTask.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/tasks/HealthBoardTask.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/HealthBoardTask.java index 1d10e6e..99c2224 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/HealthBoardTask.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/HealthBoardTask.java @@ -1,14 +1,14 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.HealthBoard; -import com.shanebeestudios.survival.data.Info; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.HealthBoard; +import com.shanebeestudios.survival.api.data.Info; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import java.util.List; diff --git a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsAlert.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsAlert.java similarity index 77% rename from src/main/java/com/shanebeestudios/survival/tasks/NutrientsAlert.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsAlert.java index af8bc65..02740a6 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsAlert.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsAlert.java @@ -1,15 +1,15 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.config.Lang; class NutrientsAlert extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java index 2e1594b..b33eaef 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/NutrientsEffect.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.NamespacedKey; @@ -11,12 +11,12 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.Nutrient; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.api.util.Utils; class NutrientsEffect extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/TaskManager.java similarity index 83% rename from src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/TaskManager.java index afb7cc1..89eedeb 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/TaskManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/TaskManager.java @@ -1,7 +1,7 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; /** * Internal task manager diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstAlert.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstAlert.java similarity index 78% rename from src/main/java/com/shanebeestudios/survival/tasks/ThirstAlert.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstAlert.java index 13898d8..ba9a36e 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/ThirstAlert.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstAlert.java @@ -1,14 +1,14 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.managers.PlayerManager; -import com.shanebeestudios.survival.config.Lang; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.config.Lang; class ThirstAlert extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java similarity index 86% rename from src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java index 709191c..f544eec 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/ThirstTask.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.data.Permissions; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.events.ThirstLevelChangeEvent; -import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.World.Environment; diff --git a/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/WeatherTask.java similarity index 92% rename from src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/WeatherTask.java index 41b8528..fd97bb6 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/WeatherTask.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/WeatherTask.java @@ -1,6 +1,6 @@ -package com.shanebeestudios.survival.tasks; +package com.shanebeestudios.survival.plugin.tasks; -import com.shanebeestudios.survival.data.Permissions; +import com.shanebeestudios.survival.api.data.Permissions; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; @@ -13,9 +13,9 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.config.Config; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.api.item.Items; @SuppressWarnings("BooleanMethodIsAlwaysInverted") public class WeatherTask extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordEffects.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordEffects.java similarity index 87% rename from src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordEffects.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordEffects.java index 3435620..d61c71b 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordEffects.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordEffects.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.tasks.tool; +package com.shanebeestudios.survival.plugin.tasks.tool; import org.bukkit.Location; import org.bukkit.Particle; @@ -6,8 +6,8 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; public class BlazeSwordEffects extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordSound.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordSound.java similarity index 83% rename from src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordSound.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordSound.java index c6599b5..38fa3ee 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/tool/BlazeSwordSound.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordSound.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.tasks.tool; +package com.shanebeestudios.survival.plugin.tasks.tool; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; import java.util.Random; diff --git a/src/main/java/com/shanebeestudios/survival/tasks/tool/GiantBlade.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/GiantBlade.java similarity index 91% rename from src/main/java/com/shanebeestudios/survival/tasks/tool/GiantBlade.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/GiantBlade.java index d46260a..feea136 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/tool/GiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/GiantBlade.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.tasks.tool; +package com.shanebeestudios.survival.plugin.tasks.tool; import com.google.common.collect.ImmutableSet; import org.bukkit.Location; @@ -9,11 +9,11 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.data.PlayerData; -import com.shanebeestudios.survival.data.Stat; -import com.shanebeestudios.survival.item.Items; -import com.shanebeestudios.survival.managers.PlayerManager; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.data.Stat; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; public class GiantBlade extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/tool/ObsidianMace.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/ObsidianMace.java similarity index 86% rename from src/main/java/com/shanebeestudios/survival/tasks/tool/ObsidianMace.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/ObsidianMace.java index 910f35f..6391277 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/tool/ObsidianMace.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/ObsidianMace.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.tasks.tool; +package com.shanebeestudios.survival.plugin.tasks.tool; import org.bukkit.Location; import org.bukkit.Particle; @@ -6,8 +6,8 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; public class ObsidianMace extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/tool/QuartzPickaxe.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/QuartzPickaxe.java similarity index 80% rename from src/main/java/com/shanebeestudios/survival/tasks/tool/QuartzPickaxe.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/QuartzPickaxe.java index d43f99e..10f91ac 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/tool/QuartzPickaxe.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/QuartzPickaxe.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.tasks.tool; +package com.shanebeestudios.survival.plugin.tasks.tool; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; public class QuartzPickaxe extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/tasks/tool/Valkyrie.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/Valkyrie.java similarity index 81% rename from src/main/java/com/shanebeestudios/survival/tasks/tool/Valkyrie.java rename to src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/Valkyrie.java index 217d9fe..36a3f62 100644 --- a/src/main/java/com/shanebeestudios/survival/tasks/tool/Valkyrie.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/Valkyrie.java @@ -1,11 +1,11 @@ -package com.shanebeestudios.survival.tasks.tool; +package com.shanebeestudios.survival.plugin.tasks.tool; import org.bukkit.Location; import org.bukkit.Particle; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.SurvivalPlugin; -import com.shanebeestudios.survival.item.Items; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.api.item.Items; public class Valkyrie extends BukkitRunnable { diff --git a/src/main/java/com/shanebeestudios/survival/util/package-info.java b/src/main/java/com/shanebeestudios/survival/util/package-info.java deleted file mode 100644 index 478554b..0000000 --- a/src/main/java/com/shanebeestudios/survival/util/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * General utility classes - */ -package com.shanebeestudios.survival.util; diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index 566d1d0..710354a 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -1,10 +1,10 @@ name: SurvivalPlus version: '${version}' -main: com.shanebeestudios.survival.SurvivalPlugin +main: com.shanebeestudios.survival.plugin.SurvivalPlugin description: "A fun new way to change mechanics of Minecraft" authors: [ShaneBee] website: 'https://github.com/ShaneBeeStudios/SurvivalPlus' -bootstrapper: com.shanebeestudios.survival.SurvivalBootstrap +bootstrapper: com.shanebeestudios.survival.plugin.SurvivalBootstrap api-version: '1.21.4' dependencies: server: From ba6f00cd7625a7380761926da4bc18f8c152563f Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Wed, 19 Feb 2025 15:39:26 -0800 Subject: [PATCH 102/133] more cleanup --- build.gradle.kts | 2 + .../survival/api/data/PlayerData.java | 4 +- .../plugin/config/PlayerDataConfig.java | 101 ++++++++---------- .../plugin/listeners/block/Chairs.java | 1 + .../listeners/block/WorkbenchShare.java | 67 +++++++----- .../listeners/item/PoisonousPotato.java | 4 +- .../plugin/listeners/server/LocalChat.java | 6 +- .../survival/plugin/tasks/NutrientsAlert.java | 20 ++-- .../plugin/tasks/NutrientsEffect.java | 20 ++-- .../survival/plugin/tasks/ThirstAlert.java | 57 +++++----- 10 files changed, 141 insertions(+), 141 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f2fabe9..1c88b72 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -69,6 +69,8 @@ tasks { } compileJava { options.release = 21 + options.compilerArgs.add("-Xlint:unchecked") + options.compilerArgs.add("-Xlint:deprecation") } javadoc { options.encoding = Charsets.UTF_8.name() diff --git a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java index c479e7c..52eea2c 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java @@ -298,7 +298,6 @@ public boolean isInfoDisplayed(Info info) { case THIRST -> this.score_thirst; case ENERGY -> this.score_energy; case NUTRIENTS -> this.score_nutrients; - default -> throw new IllegalArgumentException("Unexpected value: " + info); }; } @@ -397,6 +396,7 @@ public Map serialize() { /** * @hidden */ + @SuppressWarnings("unchecked") public static PlayerData deserialize(Map args) { UUID uuid = UUID.fromString(args.get("uuid").toString()); double thirst = getDouble(args, "thirst", 20.0); @@ -417,7 +417,6 @@ public static PlayerData deserialize(Map args) { data.setInfoDisplayed(score_hunger, score_thirst, score_energy, score_nutrients); if (args.containsKey("compass")) { - //noinspection unchecked data.compassMap = (Map) args.get("compass"); } @@ -522,7 +521,6 @@ public double getData(DataType type) { case CARBS -> getNutrient(Nutrient.CARBS); case VITAMINS -> getNutrient(Nutrient.VITAMINS); case HUNGER -> getHunger(); - default -> throw new IllegalArgumentException("Unknown type: " + type); }; } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/config/PlayerDataConfig.java b/src/main/java/com/shanebeestudios/survival/plugin/config/PlayerDataConfig.java index 776088b..fc0b07c 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/config/PlayerDataConfig.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/PlayerDataConfig.java @@ -1,71 +1,58 @@ package com.shanebeestudios.survival.plugin.config; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.YamlConfiguration; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.data.PlayerData; import java.io.File; import java.io.IOException; public class PlayerDataConfig { - private final SurvivalPlugin plugin; - private File playerDirectory = null; + private final SurvivalPlugin plugin; + private File playerDirectory = null; public PlayerDataConfig(SurvivalPlugin plugin) { - this.plugin = plugin; - loadPlayerDirectory(); - } - - private void loadPlayerDirectory() { - if (playerDirectory == null) { - playerDirectory = new File(plugin.getDataFolder(), "playerData"); - } - if (!playerDirectory.exists()) { - //noinspection ResultOfMethodCallIgnored - playerDirectory.mkdir(); - } - } - - public boolean needsConversion() { - File file = new File(playerDirectory, "converted.yml"); - return !file.exists(); - } - - public void createConvertedFile(int conversions) { - File file = new File(playerDirectory, "converted.yml"); - YamlConfiguration converted = YamlConfiguration.loadConfiguration(file); - converted.set("converted", conversions); - converted.options().header("This file is a placeholder, do not delete this file"); - saveFile(converted, file); - } - - public boolean hasPlayerDataFile(OfflinePlayer player) { - File file = new File(playerDirectory, player.getUniqueId().toString() + ".yml"); - return file.exists(); - } - - public PlayerData getPlayerDataFromFile(OfflinePlayer player) { - File file = new File(playerDirectory, player.getUniqueId().toString() + ".yml"); - YamlConfiguration config = YamlConfiguration.loadConfiguration(file); - - return ((PlayerData) config.get("player-data")); - } - - public void savePlayerDataToFile(PlayerData playerData) { - File file = new File(playerDirectory, playerData.getUuid().toString() + ".yml"); - YamlConfiguration config = YamlConfiguration.loadConfiguration(file); - config.set("player-data", playerData); - saveFile(config, file); - } - - private void saveFile(YamlConfiguration config, File file) { - try { - config.save(file); - } catch (IOException e) { - e.printStackTrace(); - } - } + this.plugin = plugin; + loadPlayerDirectory(); + } + + private void loadPlayerDirectory() { + if (playerDirectory == null) { + playerDirectory = new File(plugin.getDataFolder(), "playerData"); + } + if (!playerDirectory.exists()) { + //noinspection ResultOfMethodCallIgnored + playerDirectory.mkdir(); + } + } + + public boolean hasPlayerDataFile(OfflinePlayer player) { + File file = new File(playerDirectory, player.getUniqueId() + ".yml"); + return file.exists(); + } + + public PlayerData getPlayerDataFromFile(OfflinePlayer player) { + File file = new File(playerDirectory, player.getUniqueId() + ".yml"); + YamlConfiguration config = YamlConfiguration.loadConfiguration(file); + + return ((PlayerData) config.get("player-data")); + } + + public void savePlayerDataToFile(PlayerData playerData) { + File file = new File(playerDirectory, playerData.getUuid().toString() + ".yml"); + YamlConfiguration config = YamlConfiguration.loadConfiguration(file); + config.set("player-data", playerData); + saveFile(config, file); + } + + private void saveFile(YamlConfiguration config, File file) { + try { + config.save(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Chairs.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Chairs.java index c133437..edfbfb9 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Chairs.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/Chairs.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.List; +@SuppressWarnings("deprecation") public class Chairs implements Listener { private final SurvivalPlugin plugin; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/WorkbenchShare.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/WorkbenchShare.java index 4bb4f18..2e76fee 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/WorkbenchShare.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/WorkbenchShare.java @@ -1,6 +1,7 @@ package com.shanebeestudios.survival.plugin.listeners.block; import com.google.common.collect.ImmutableSet; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; @@ -11,26 +12,33 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.inventory.*; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import java.util.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.UUID; public class WorkbenchShare implements Listener { - private SurvivalPlugin plugin; + private final SurvivalPlugin plugin; public WorkbenchShare(SurvivalPlugin plugin) { this.plugin = plugin; } @EventHandler(priority = EventPriority.HIGHEST) - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) private void onPlayerInteract(PlayerInteractEvent e) { if (e.isCancelled()) return; final Player p = e.getPlayer(); @@ -47,7 +55,7 @@ private void onPlayerInteract(PlayerInteractEvent e) { if (!block.hasMetadata("shared_players")) block.setMetadata("shared_players", new FixedMetadataValue(plugin, new ArrayList())); - final List list = (block.getMetadata("shared_players").get(0).value() instanceof List) ? (List) block.getMetadata("shared_players").get(0).value() : new ArrayList<>(); + final List list = (block.getMetadata("shared_players").getFirst().value() instanceof List) ? (List) block.getMetadata("shared_players").getFirst().value() : new ArrayList<>(); final Inventory open = p.getOpenInventory().getTopInventory(); @@ -70,7 +78,7 @@ private void onPlayerInteract(PlayerInteractEvent e) { Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> { if (list.isEmpty()) return; - Player first = Bukkit.getPlayer(list.get(0)); + Player first = Bukkit.getPlayer(list.getFirst()); assert first != null; Inventory pInv = first.getOpenInventory().getTopInventory(); if (pInv.getType() != InventoryType.WORKBENCH) @@ -92,32 +100,30 @@ private void onInventoryDrag(InventoryDragEvent e) { onInventoryInteract(e); } - private void onInventoryInteract(InventoryInteractEvent e) { + @SuppressWarnings("unchecked") + private void onInventoryInteract(InventoryInteractEvent e) { if (e.isCancelled()) return; - if (!(e.getWhoClicked() instanceof Player)) + if (!(e.getWhoClicked() instanceof Player player)) return; - final Player p = (Player) e.getWhoClicked(); - - if (!p.hasMetadata("shared_workbench")) + if (!player.hasMetadata("shared_workbench")) return; if (e.getInventory().getType() == InventoryType.WORKBENCH) { // Workaround to get the accessed WorkBench - final Block workbench = (p.getMetadata("shared_workbench").get(0).value() instanceof Block) ? (Block) p.getMetadata("shared_workbench").get(0).value() : null; + final Block workbench = (player.getMetadata("shared_workbench").getFirst().value() instanceof Block) ? (Block) player.getMetadata("shared_workbench").getFirst().value() : null; assert workbench != null; if (!workbench.hasMetadata("shared_players") || workbench.getType() != Material.CRAFTING_TABLE) { - if (p.getOpenInventory().getTopInventory() != null) - p.getOpenInventory().getTopInventory().clear(); - p.closeInventory(); - p.removeMetadata("shared_workbench", plugin); + player.getOpenInventory().getTopInventory().clear(); + player.closeInventory(); + player.removeMetadata("shared_workbench", plugin); return; } - List list = (workbench.getMetadata("shared_players").get(0).value() instanceof List) ? (List) workbench.getMetadata("shared_players").get(0).value() : new ArrayList(); + List list = (workbench.getMetadata("shared_players").getFirst().value() instanceof List) ? (List) workbench.getMetadata("shared_players").getFirst().value() : new ArrayList(); - final Inventory pInv = p.getOpenInventory().getTopInventory(); + final Inventory pInv = player.getOpenInventory().getTopInventory(); if (pInv.getType() != InventoryType.WORKBENCH) { workbench.removeMetadata("shared_players", plugin); return; @@ -128,7 +134,7 @@ private void onInventoryInteract(InventoryInteractEvent e) { while (iterator.hasNext()) { UUID next = iterator.next(); - if (p.getUniqueId().equals(next)) + if (player.getUniqueId().equals(next)) continue; final Player idPlayer = Bukkit.getPlayer(next); @@ -143,14 +149,14 @@ private void onInventoryInteract(InventoryInteractEvent e) { if (open.getType() != InventoryType.WORKBENCH) { // Close Inventory if player managed to access the workbench without actually use one. iterator.remove(); - p.closeInventory(); + player.closeInventory(); continue; } Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> { open.setContents(pInv.getContents()); Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> { - p.updateInventory(); + player.updateInventory(); idPlayer.updateInventory(); }, 1); }, 1); @@ -158,7 +164,8 @@ private void onInventoryInteract(InventoryInteractEvent e) { } } - @EventHandler + @SuppressWarnings("unchecked") + @EventHandler private void onInventoryClose(InventoryCloseEvent e) { if (!(e.getPlayer() instanceof Player)) return; @@ -178,7 +185,7 @@ private void onInventoryClose(InventoryCloseEvent e) { return; } - List list = (workbench.getMetadata("shared_players").get(0).value() instanceof List) ? (List) workbench.getMetadata("shared_players").get(0).value() : new ArrayList(); + List list = (workbench.getMetadata("shared_players").getFirst().value() instanceof List) ? (List) workbench.getMetadata("shared_players").getFirst().value() : new ArrayList(); assert list != null; list.remove(p.getUniqueId()); @@ -192,17 +199,18 @@ private void onInventoryClose(InventoryCloseEvent e) { } } - @EventHandler + @SuppressWarnings("unchecked") + @EventHandler private void onPlayerQuit(PlayerQuitEvent e) { final Player p = e.getPlayer(); if (!p.hasMetadata("shared_workbench")) return; - Block workbench = (p.getMetadata("shared_workbench").get(0).value() instanceof Block) ? (Block) p.getMetadata("shared_workbench").get(0).value() : null; + Block workbench = (p.getMetadata("shared_workbench").getFirst().value() instanceof Block) ? (Block) p.getMetadata("shared_workbench").getFirst().value() : null; if (workbench != null && workbench.hasMetadata("shared_players") && workbench.getType() == Material.CRAFTING_TABLE) { - List list = (workbench.getMetadata("shared_players").get(0).value() instanceof List) ? (List) workbench.getMetadata("shared_players").get(0).value() : new ArrayList(); + List list = (workbench.getMetadata("shared_players").getFirst().value() instanceof List) ? (List) workbench.getMetadata("shared_players").getFirst().value() : new ArrayList(); assert list != null; list.remove(p.getUniqueId()); @@ -216,7 +224,8 @@ private void onPlayerQuit(PlayerQuitEvent e) { p.removeMetadata("shared_workbench", plugin); } - @EventHandler(priority = EventPriority.HIGHEST) + @SuppressWarnings("unchecked") + @EventHandler(priority = EventPriority.HIGHEST) private void onBreakWorkbench(BlockBreakEvent e) { if (e.isCancelled()) return; if (e.getPlayer().getGameMode() == GameMode.CREATIVE) return; @@ -225,7 +234,7 @@ private void onBreakWorkbench(BlockBreakEvent e) { if (!workbench.hasMetadata("shared_players") || workbench.getType() != Material.CRAFTING_TABLE) return; - List list = (workbench.getMetadata("shared_players").get(0).value() instanceof List) ? (List) workbench.getMetadata("shared_players").get(0).value() : new ArrayList(); + List list = (workbench.getMetadata("shared_players").getFirst().value() instanceof List) ? (List) workbench.getMetadata("shared_players").getFirst().value() : new ArrayList(); assert list != null; Iterator iterator = list.iterator(); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/PoisonousPotato.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/PoisonousPotato.java index 6339369..322f849 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/PoisonousPotato.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/PoisonousPotato.java @@ -23,8 +23,8 @@ private void onConsume(PlayerItemConsumeEvent event) { Random rand = new Random(); if (rand.nextInt(10) + 1 <= 6) { - player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0), true); - player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0), true); + player.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 100, 0)); + player.addPotionEffect(new PotionEffect(PotionEffectType.NAUSEA, 200, 0)); } } } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/LocalChat.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/LocalChat.java index b332092..867dc71 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/LocalChat.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/LocalChat.java @@ -14,16 +14,18 @@ import com.shanebeestudios.survival.plugin.managers.PlayerManager; import com.shanebeestudios.survival.plugin.config.Config; +@SuppressWarnings("deprecation") public class LocalChat implements Listener { - private Config config; - private PlayerManager playerManager; + private final Config config; + private final PlayerManager playerManager; public LocalChat(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); this.playerManager = plugin.getPlayerManager(); } + // TODO cleanup?!?! @EventHandler(priority = EventPriority.HIGHEST) private void onChat(AsyncPlayerChatEvent event) { if (event.isCancelled()) return; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsAlert.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsAlert.java index 02740a6..07e90ee 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsAlert.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsAlert.java @@ -1,15 +1,15 @@ package com.shanebeestudios.survival.plugin.tasks; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.data.Nutrient; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.plugin.config.Lang; class NutrientsAlert extends BukkitRunnable { @@ -20,7 +20,7 @@ class NutrientsAlert extends BukkitRunnable { this.lang = plugin.getLang(); final int ALERT_INTERVAL = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; this.playerManager = plugin.getPlayerManager(); - this.runTaskTimer(plugin, -1, ALERT_INTERVAL * 20); + this.runTaskTimer(plugin, -1, ALERT_INTERVAL * 20L); } @Override @@ -30,15 +30,15 @@ public void run() { PlayerData playerData = playerManager.getPlayerData(player); if (playerData.getNutrient(Nutrient.CARBS) <= 480) { - player.sendMessage(ChatColor.DARK_GREEN + lang.carbohydrates_lack); + Utils.sendColoredMini(player, "", this.lang.carbohydrates_lack); } if (playerData.getNutrient(Nutrient.VITAMINS) <= 180) { - player.sendMessage(ChatColor.BLUE + lang.vitamins_lack); + Utils.sendColoredMini(player, "", this.lang.vitamins_lack); } if (playerData.getNutrient(Nutrient.PROTEIN) <= 120) { - player.sendMessage(ChatColor.DARK_RED + lang.protein_lack); + Utils.sendColoredMini(player, "", this.lang.protein_lack); } } } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java index b33eaef..17180bd 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java @@ -1,6 +1,12 @@ package com.shanebeestudios.survival.plugin.tasks; +import com.shanebeestudios.survival.api.data.Nutrient; import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.NamespacedKey; @@ -11,12 +17,6 @@ import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.Nullable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.api.data.Nutrient; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.api.util.Utils; class NutrientsEffect extends BukkitRunnable { @@ -63,12 +63,12 @@ public void run() { switch (world.getDifficulty()) { case NORMAL: if (VITAMINS_NORMAL != null) { - player.addPotionEffect(VITAMINS_NORMAL, true); + player.addPotionEffect(VITAMINS_NORMAL); } break; case HARD: if (VITAMINS_HARD != null) { - player.addPotionEffect(VITAMINS_HARD, true); + player.addPotionEffect(VITAMINS_HARD); } break; default: @@ -80,12 +80,12 @@ public void run() { switch (world.getDifficulty()) { case NORMAL: if (PROTEIN_NORMAL != null) { - player.addPotionEffect(PROTEIN_NORMAL, true); + player.addPotionEffect(PROTEIN_NORMAL); } break; case HARD: if (PROTEIN_HARD != null) { - player.addPotionEffect(PROTEIN_HARD, true); + player.addPotionEffect(PROTEIN_HARD); } break; default: diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstAlert.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstAlert.java index ba9a36e..809195e 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstAlert.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstAlert.java @@ -1,40 +1,41 @@ package com.shanebeestudios.survival.plugin.tasks; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.plugin.config.Lang; class ThirstAlert extends BukkitRunnable { - private final PlayerManager playerManager; - private final Lang lang; + private final PlayerManager playerManager; + private final Lang lang; + + ThirstAlert(SurvivalPlugin plugin) { + this.playerManager = plugin.getPlayerManager(); + this.lang = plugin.getLang(); + final int ALERT_INTERVAL = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; + this.runTaskTimer(plugin, -1, ALERT_INTERVAL * 20L); + } - ThirstAlert(SurvivalPlugin plugin) { - this.playerManager = plugin.getPlayerManager(); - this.lang = plugin.getLang(); - final int ALERT_INTERVAL = plugin.getSurvivalConfig().MECHANICS_ALERT_INTERVAL; - this.runTaskTimer(plugin, -1, ALERT_INTERVAL * 20); - } - @Override - public void run() { - for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { - PlayerData playerData = playerManager.getPlayerData(player); - int hunger = player.getFoodLevel(); - if (hunger <= 6) { - player.sendMessage(ChatColor.GOLD + lang.starved_eat); - } - if (playerData.getThirst() <= 6) { - player.sendMessage(ChatColor.AQUA + lang.dehydrated_drink); - } - } - } - } + @Override + public void run() { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { + PlayerData playerData = playerManager.getPlayerData(player); + int hunger = player.getFoodLevel(); + if (hunger <= 6) { + Utils.sendColoredMini(player, "" + this.lang.starved_eat); + } + if (playerData.getThirst() <= 6) { + Utils.sendColoredMini(player, "" + this.lang.dehydrated_drink); + } + } + } + } } From fb12da2821141e32229c5e89eeb911fd788b35df Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 11:37:20 -0800 Subject: [PATCH 103/133] update block tags --- .../api/generator/BlockTagFileGenerator.java | 17 +++++-- .../api/generator/BlockTagGenerator.java | 46 ++++++++++++------- src/main/resources/block-tags.yml | 29 +++++++----- 3 files changed, 60 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java index 1237994..eb5b1c7 100644 --- a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java @@ -33,12 +33,19 @@ public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { header.add("This accepts both Minecraft block types `minecraft:stone`"); header.add("and block tags prefixed with `#`, ex: `#minecraft:logs` (minecraft or custom)"); header.add(" "); - header.add("The names of these sections double as tags."); - header.add("Example `requires_shovel` = `#survival_plus:requires_shovel`"); + header.add("The names of these sections double as namespaces."); + header.add("The `survival_plus` section will create new tags"); + header.add("Example `requires_shovel` = `survival_plus:requires_shovel`"); + header.add(" "); + header.add("You can optionally add a `minecraft` section to add blocks to current Minecraft tags"); + header.add("Example (This would add oak_stairs to the `minecraft:logs` tag):"); + header.add("minecraft:"); + header.add(" logs:"); + header.add(" - minecraft:oak_stairs"); config.options().setHeader(header); - ConfigurationSection blocks = config.getConfigurationSection("blocks"); - if (blocks == null) blocks = config.createSection("blocks"); + ConfigurationSection blocks = config.getConfigurationSection("survival_plus"); + if (blocks == null) blocks = config.createSection("survival_plus"); createConcreteTag(blocks); createCookingBlockTag(blocks); @@ -214,6 +221,8 @@ private void createRequiresSickleTag(@NotNull ConfigurationSection section) { blocks.add("minecraft:cocoa"); section.set("requires_sickle", blocks); + section.setInlineComments("requires_sickle", List.of("Blocks which require a sickle to break.")); + } private void createRequiresAxeTag(@NotNull ConfigurationSection section) { diff --git a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java index ae8da17..577b2e7 100644 --- a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.api.generator; +import com.shanebeestudios.survival.api.util.Utils; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; @@ -15,7 +16,6 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.codehaus.plexus.util.FileUtils; -import com.shanebeestudios.survival.api.util.Utils; import java.io.File; import java.io.IOException; @@ -56,40 +56,52 @@ private void bootstrap(BootstrapContext context) { manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.BLOCK), event -> { final PreFlattenTagRegistrar registrar = event.registrar(); - logger.info(Utils.getMini("Bootstrap:")); - ConfigurationSection blocksSection = this.config.getConfigurationSection("blocks"); - assert blocksSection != null; - for (String key : blocksSection.getKeys(false)) { + logger.info(Utils.getMini("Tag Creation:")); + ConfigurationSection survivalPlusSection = this.config.getConfigurationSection("survival_plus"); + assert survivalPlusSection != null; + for (String key : survivalPlusSection.getKeys(false)) { createTagFromSection(key, registrar); - logger.info(Utils.getMini("Generating block tag '%s'", key)); + logger.info(Utils.getMini("Generating block tag 'survival_plus:%s'", key)); + } + ConfigurationSection minecraftSection = this.config.getConfigurationSection("minecraft"); + if (minecraftSection == null) return; + + logger.info(Utils.getMini("Tag Mutation:")); + for (String key : minecraftSection.getKeys(false)) { + addToTagFromSection(key, registrar); + logger.info(Utils.getMini("Adding value to block tag 'minecraft:%s'", key)); + } - logger.info(Utils.getMini("Finished bootstrapping")); }); } @SuppressWarnings("PatternValidation") private void createTagFromSection(String key, PreFlattenTagRegistrar registrar) { List> entries = new ArrayList<>(); - for (String s : this.config.getStringList("blocks." + key)) { + for (String s : this.config.getStringList("survival_plus." + key)) { entries.add(getTagEntry(s)); } registrar.setTag(TagKey.create(registrar.registryKey(), Key.key("survival_plus:" + key)), entries); } - private TagEntry getTagEntry(String string) { - if (string.startsWith("#")) return getTagKeyEntry(string.substring(1)); - return getBlockEntry(string); - } - @SuppressWarnings("PatternValidation") - private TagEntry getTagKeyEntry(String string) { - TagKey tagKey = TagKey.create(RegistryKey.BLOCK, Key.key(string)); - return TagEntry.tagEntry(tagKey); + private void addToTagFromSection(String key, PreFlattenTagRegistrar registrar) { + List> entries = new ArrayList<>(); + for (String s : this.config.getStringList("minecraft." + key)) { + entries.add(getTagEntry(s)); + } + if (entries.isEmpty()) return; + + registrar.addToTag(TagKey.create(registrar.registryKey(), Key.key("minecraft:" + key)), entries); } @SuppressWarnings("PatternValidation") - private TagEntry getBlockEntry(String string) { + private TagEntry getTagEntry(String string) { + if (string.startsWith("#")) { + TagKey tagKey = TagKey.create(RegistryKey.BLOCK, Key.key(string.substring(1))); + return TagEntry.tagEntry(tagKey); + } TypedKey blockKey = TypedKey.create(RegistryKey.BLOCK, Key.key(string)); return TagEntry.valueEntry(blockKey); } diff --git a/src/main/resources/block-tags.yml b/src/main/resources/block-tags.yml index 5b85243..1c26e10 100644 --- a/src/main/resources/block-tags.yml +++ b/src/main/resources/block-tags.yml @@ -5,10 +5,17 @@ # This accepts both Minecraft block types `minecraft:stone` # and block tags prefixed with `#`, ex: `#minecraft:logs` (minecraft or custom) # -# The names of these sections double as tags. -# Example `requires_shovel` = `#survival_plus:requires_shovel` +# The names of these sections double as namespaces. +# The `survival_plus` section will create new tags +# Example `requires_shovel` = `survival_plus:requires_shovel` +# +# You can optionally add a `minecraft` section to add blocks to current Minecraft tags +# Example (This would add oak_stairs to the `minecraft:logs` tag): +# minecraft: +# logs: +# - minecraft:oak_stairs -blocks: +survival_plus: concrete: - minecraft:black_concrete - minecraft:blue_concrete @@ -30,14 +37,6 @@ blocks: - minecraft:furnace - minecraft:blast_furnace - minecraft:smoker - requires_sickle: - - '#minecraft:crops' - - minecraft:melon - - minecraft:pumpkin - - minecraft:chorus_flower - - minecraft:chorus_plant - - minecraft:sweet_berry_bush - - minecraft:cocoa glazed_terracotta: - minecraft:black_glazed_terracotta - minecraft:blue_glazed_terracotta @@ -418,6 +417,14 @@ blocks: - minecraft:tripwire - minecraft:tnt - minecraft:mushroom_stem + requires_sickle: # Blocks which require a sickle to break. + - '#minecraft:crops' + - minecraft:melon + - minecraft:pumpkin + - minecraft:chorus_flower + - minecraft:chorus_plant + - minecraft:sweet_berry_bush + - minecraft:cocoa requires_hammer: # Blocks which require a hammer to place. - '#minecraft:fence_gates' - '#minecraft:terracotta' From a0f4183e0f0778512b334bef3c843dea61b9b7da Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 13:54:34 -0800 Subject: [PATCH 104/133] Datapack initial work - move blaze sword loop to custom enchantment --- .../survival/api/data/Enchantments.java | 21 ++++ .../api/item/items/legendary/BlazeSword.java | 2 + .../survival/plugin/SurvivalBootstrap.java | 4 +- .../data/TagGenerator.java} | 55 ++++++++-- .../plugin/managers/EffectManager.java | 14 +-- .../plugin/tasks/tool/BlazeSwordEffects.java | 41 ------- .../plugin/tasks/tool/BlazeSwordSound.java | 32 ------ .../survival_plus/enchantment/blazing.json | 102 ++++++++++++++++++ src/main/resources/datapack/pack.mcmeta | 6 ++ 9 files changed, 179 insertions(+), 98 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java rename src/main/java/com/shanebeestudios/survival/{api/generator/BlockTagGenerator.java => plugin/data/TagGenerator.java} (66%) delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordEffects.java delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordSound.java create mode 100644 src/main/resources/datapack/data/survival_plus/enchantment/blazing.json create mode 100644 src/main/resources/datapack/pack.mcmeta diff --git a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java new file mode 100644 index 0000000..5d823c9 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java @@ -0,0 +1,21 @@ +package com.shanebeestudios.survival.api.data; + +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import net.kyori.adventure.key.Key; +import org.bukkit.enchantments.Enchantment; + +/** + * Custom {@link Enchantment Enchantments} + */ +public class Enchantments { + + public static final Enchantment BLAZING = get("blazing"); + + @SuppressWarnings("PatternValidation") + private static Enchantment get(String key) { + return RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT) + .get(Key.key("survival_plus:" + key)); + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java index c30ac3f..7aeecdf 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.api.item.items.legendary; +import com.shanebeestudios.survival.api.data.Enchantments; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -37,6 +38,7 @@ public BlazeSword() { itemMeta.addEnchant(Enchantment.FIRE_ASPECT, 2, true); itemMeta.addEnchant(Enchantment.UNBREAKING, 3, false); + itemMeta.addEnchant(Enchantments.BLAZING, 1, true); itemStack.setItemMeta(itemMeta); itemStack.unsetData(DataComponentTypes.REPAIRABLE); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java index c7b72b6..78c89b1 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java @@ -1,16 +1,16 @@ package com.shanebeestudios.survival.plugin; +import com.shanebeestudios.survival.plugin.data.TagGenerator; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.bootstrap.PluginBootstrap; import org.jetbrains.annotations.NotNull; -import com.shanebeestudios.survival.api.generator.BlockTagGenerator; @SuppressWarnings({"UnstableApiUsage", "unused"}) public class SurvivalBootstrap implements PluginBootstrap { @Override public void bootstrap(@NotNull BootstrapContext context) { - new BlockTagGenerator(context); + new TagGenerator(context); } } diff --git a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java similarity index 66% rename from src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java rename to src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java index 577b2e7..06ff73f 100644 --- a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java @@ -1,12 +1,16 @@ -package com.shanebeestudios.survival.api.generator; +package com.shanebeestudios.survival.plugin.data; import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalBootstrap; +import io.papermc.paper.datapack.DatapackRegistrar; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.TypedKey; +import io.papermc.paper.registry.keys.tags.EnchantmentTagKeys; import io.papermc.paper.registry.tag.TagKey; +import io.papermc.paper.tag.PostFlattenTagRegistrar; import io.papermc.paper.tag.PreFlattenTagRegistrar; import io.papermc.paper.tag.TagEntry; import net.kyori.adventure.key.Key; @@ -15,23 +19,32 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.enchantments.Enchantment; import org.codehaus.plexus.util.FileUtils; import java.io.File; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Objects; -@SuppressWarnings("UnstableApiUsage") -public class BlockTagGenerator { +/** + * @hidden Internal only + */ +@SuppressWarnings({"UnstableApiUsage", "PatternValidation", "NullableProblems"}) +public class TagGenerator { private FileConfiguration config; - public BlockTagGenerator(BootstrapContext context) { + public TagGenerator(BootstrapContext context) { loadConfig(context.getDataDirectory()); - bootstrap(context); + loadDatapack(context); + loadTags(context); } @SuppressWarnings("ResultOfMethodCallIgnored") @@ -49,10 +62,24 @@ private void loadConfig(Path dataFolder) { this.config = YamlConfiguration.loadConfiguration(file); } - @SuppressWarnings("NullableProblems") - private void bootstrap(BootstrapContext context) { + private void loadDatapack(BootstrapContext context) { + LifecycleEventManager manager = context.getLifecycleManager(); + manager.registerEventHandler(LifecycleEvents.DATAPACK_DISCOVERY.newHandler(event -> { + DatapackRegistrar registrar = event.registrar(); + try { + URI datapack = Objects.requireNonNull(SurvivalBootstrap.class.getResource("/datapack")).toURI(); + registrar.discoverPack(datapack, "survival_plus"); + } catch (IOException | URISyntaxException e) { + throw new RuntimeException(e); + } + })); + } + + private void loadTags(BootstrapContext context) { ComponentLogger logger = context.getLogger(); LifecycleEventManager manager = context.getLifecycleManager(); + + // Create block tags manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.BLOCK), event -> { final PreFlattenTagRegistrar registrar = event.registrar(); @@ -73,9 +100,19 @@ private void bootstrap(BootstrapContext context) { } }); + + // Put our enchantments at the top of the tooltip list + manager.registerEventHandler(LifecycleEvents.TAGS.postFlatten(RegistryKey.ENCHANTMENT), event -> { + PostFlattenTagRegistrar registrar = event.registrar(); + Collection> tag = registrar.getTag(EnchantmentTagKeys.TOOLTIP_ORDER); + + List> newTags = new ArrayList<>(); + newTags.add(TypedKey.create(RegistryKey.ENCHANTMENT, Key.key("survival_plus:blazing"))); + registrar.setTag(EnchantmentTagKeys.TOOLTIP_ORDER, newTags); + registrar.addToTag(EnchantmentTagKeys.TOOLTIP_ORDER, tag); + }); } - @SuppressWarnings("PatternValidation") private void createTagFromSection(String key, PreFlattenTagRegistrar registrar) { List> entries = new ArrayList<>(); for (String s : this.config.getStringList("survival_plus." + key)) { @@ -85,7 +122,6 @@ private void createTagFromSection(String key, PreFlattenTagRegistrar registrar.setTag(TagKey.create(registrar.registryKey(), Key.key("survival_plus:" + key)), entries); } - @SuppressWarnings("PatternValidation") private void addToTagFromSection(String key, PreFlattenTagRegistrar registrar) { List> entries = new ArrayList<>(); for (String s : this.config.getStringList("minecraft." + key)) { @@ -96,7 +132,6 @@ private void addToTagFromSection(String key, PreFlattenTagRegistrar r registrar.addToTag(TagKey.create(registrar.registryKey(), Key.key("minecraft:" + key)), entries); } - @SuppressWarnings("PatternValidation") private TagEntry getTagEntry(String string) { if (string.startsWith("#")) { TagKey tagKey = TagKey.create(RegistryKey.BLOCK, Key.key(string.substring(1))); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java index 695e3e8..5f1b6e8 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java @@ -1,14 +1,12 @@ package com.shanebeestudios.survival.plugin.managers; +import com.shanebeestudios.survival.api.util.Utils; import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.plugin.tasks.tool.BlazeSwordEffects; -import com.shanebeestudios.survival.plugin.tasks.tool.BlazeSwordSound; import com.shanebeestudios.survival.plugin.tasks.tool.GiantBlade; import com.shanebeestudios.survival.plugin.tasks.tool.ObsidianMace; import com.shanebeestudios.survival.plugin.tasks.tool.QuartzPickaxe; import com.shanebeestudios.survival.plugin.tasks.tool.Valkyrie; -import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.Location; import org.bukkit.Particle; import org.bukkit.entity.LivingEntity; @@ -22,8 +20,6 @@ public class EffectManager { private final Config config; // Effect Tasks - private BlazeSwordEffects blazeSwordEffects = null; - private BlazeSwordSound blazeSwordSound = null; private GiantBlade giantBlade = null; private ObsidianMace obsidianMace = null; private QuartzPickaxe quartzPickaxe = null; @@ -36,10 +32,6 @@ public EffectManager(SurvivalPlugin plugin) { } private void loadEffects() { - if (config.legendary_blaze_sword) { - this.blazeSwordEffects = new BlazeSwordEffects(plugin); - this.blazeSwordSound = new BlazeSwordSound(plugin); - } if (config.legendary_giant_blade) this.giantBlade = new GiantBlade(plugin); if (config.legendary_obsidian_mace) @@ -55,10 +47,6 @@ private void loadEffects() { */ @SuppressWarnings("unused") public void cancelTasks() { - if (blazeSwordEffects != null) - blazeSwordEffects.cancel(); - if (blazeSwordSound != null) - blazeSwordSound.cancel(); if (giantBlade != null) giantBlade.cancel(); if (obsidianMace != null) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordEffects.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordEffects.java deleted file mode 100644 index d61c71b..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordEffects.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.shanebeestudios.survival.plugin.tasks.tool; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.item.Items; - -public class BlazeSwordEffects extends BukkitRunnable { - - private final SurvivalPlugin plugin; - private final PotionEffect FLAME; - - public BlazeSwordEffects(SurvivalPlugin plugin) { - this.plugin = plugin; - this.FLAME = new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 20, 0, false); - this.runTaskTimer(plugin, 1, 10); - } - - @Override - public void run() { - for (Player player : plugin.getServer().getOnlinePlayers()) { - if (Items.BLAZE_SWORD.is(player.getInventory().getItemInMainHand())) { - player.removePotionEffect(PotionEffectType.FIRE_RESISTANCE); - player.addPotionEffect(this.FLAME); - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - assert particleLoc.getWorld() != null; - particleLoc.getWorld().spawnParticle(Particle.FLAME, particleLoc, 10, 0.5, 0.5, 0.5); - - player.setFireTicks(20); - if (player.getHealth() > 14) - player.setHealth(14); - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordSound.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordSound.java deleted file mode 100644 index 38fa3ee..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/BlazeSwordSound.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.shanebeestudios.survival.plugin.tasks.tool; - -import org.bukkit.Sound; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.item.Items; - -import java.util.Random; - -public class BlazeSwordSound extends BukkitRunnable { - - private final SurvivalPlugin plugin; - - public BlazeSwordSound(SurvivalPlugin plugin) { - this.plugin = plugin; - this.runTaskTimer(plugin, 1, 50); - } - - @Override - public void run() { - for (Player player : plugin.getServer().getOnlinePlayers()) { - if (Items.BLAZE_SWORD.is(player.getInventory().getItemInMainHand())) { - Random rand = new Random(); - World world = player.getWorld(); - world.playSound(player.getLocation(), Sound.ENTITY_BLAZE_AMBIENT, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - } - } - } - -} diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/blazing.json b/src/main/resources/datapack/data/survival_plus/enchantment/blazing.json new file mode 100644 index 0000000..a5c4b01 --- /dev/null +++ b/src/main/resources/datapack/data/survival_plus/enchantment/blazing.json @@ -0,0 +1,102 @@ +{ + "description": { + "text": "Blazing", + "color": "#e27c20" + }, + "supported_items": "#minecraft:enchantable/sharp_weapon", + "weight": 1, + "max_level": 1, + "min_cost": { + "base": 10, + "per_level_above_first": 10 + }, + "max_cost": { + "base": 25, + "per_level_above_first": 10 + }, + "anvil_cost": 4, + "slots": [ + "hand" + ], + "effects": { + "minecraft:damage_immunity": [ + { + "requirements": { + "condition": "minecraft:damage_source_properties", + "predicate": { + "tags": [ + { + "id": "minecraft:is_fire", + "expected": true + } + ] + } + }, + "effect": {} + } + ], + "minecraft:tick": [ + { + "requirements": { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "periodic_tick": 1 + } + }, + "effect": { + "type": "minecraft:spawn_particles", + "particle": { + "type": "minecraft:flame" + }, + "horizontal_position": { + "type": "entity_position", + "offset": 0, + "scale": 1 + }, + "vertical_position": { + "type": "entity_position", + "offset": 0.9, + "scale": 1 + }, + "horizontal_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "vertical_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "speed": 0.075 + } + }, + { + "requirements": { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "periodic_tick": 50 + } + }, + "effect": { + "type": "minecraft:play_sound", + "sound": "minecraft:entity.blaze.ambient", + "volume": 3, + "pitch": { + "type": "minecraft:uniform", + "min_inclusive": 0.8, + "max_exclusive": 1.2 + } + } + } + ] + } +} diff --git a/src/main/resources/datapack/pack.mcmeta b/src/main/resources/datapack/pack.mcmeta new file mode 100644 index 0000000..8ac3987 --- /dev/null +++ b/src/main/resources/datapack/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 61, + "description": "SurvivalPlus Datapack" + } +} From d0d7dc016d8968267bfbaeb85f5629baac2ad2fe Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 14:48:46 -0800 Subject: [PATCH 105/133] Move obsidian stuff to enchantment --- .../survival/api/data/Enchantments.java | 1 + .../item/items/legendary/ObsidianMace.java | 46 +++-- .../survival/plugin/data/TagGenerator.java | 1 + .../plugin/listeners/EventManager.java | 3 - .../listeners/item/ObsidianMaceWeakness.java | 64 ------- .../plugin/managers/EffectManager.java | 28 --- .../plugin/tasks/tool/ObsidianMace.java | 36 ---- .../enchantment/obsidian_power.json | 169 ++++++++++++++++++ 8 files changed, 193 insertions(+), 155 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ObsidianMaceWeakness.java delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/ObsidianMace.java create mode 100644 src/main/resources/datapack/data/survival_plus/enchantment/obsidian_power.json diff --git a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java index 5d823c9..2413862 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java @@ -11,6 +11,7 @@ public class Enchantments { public static final Enchantment BLAZING = get("blazing"); + public static final Enchantment OBSIDIAN_POWER = get("obsidian_power"); @SuppressWarnings("PatternValidation") private static Enchantment get(String key) { diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java index 3a7dcca..363f917 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java @@ -1,6 +1,10 @@ package com.shanebeestudios.survival.api.item.items.legendary; +import com.shanebeestudios.survival.api.data.Enchantments; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; +import io.papermc.paper.datacomponent.item.ItemEnchantments; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.attribute.Attribute; @@ -8,39 +12,33 @@ import org.bukkit.attribute.AttributeModifier.Operation; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.EquipmentSlotGroup; +import org.bukkit.inventory.ItemRarity; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class ObsidianMace extends Item { public ObsidianMace() { - ItemStack itemStack = ItemType.DIAMOND_SHOVEL.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - - int gSpade_dmg = 4; - float gSpade_spd = 0.8f; - float gSpade_knockbackPercent = 0.5f; - - AttributeModifier i_gSpadeDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, gSpade_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gSpadeDamage); - - AttributeModifier i_gSpadeSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gSpade_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gSpadeSpeed); - - AttributeModifier i_gSpadeKnock = new AttributeModifier(NamespacedKey.minecraft("base_attack_resistance"), gSpade_knockbackPercent, Operation.ADD_SCALAR, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, i_gSpadeKnock); - - itemMeta.addEnchant(Enchantment.KNOCKBACK, 3, true); - itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); - itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); - itemStack.setItemMeta(itemMeta); - - itemStack.unsetData(DataComponentTypes.REPAIRABLE); + ItemStack itemStack = ItemType.MACE.createItemStack(); + + itemStack.setData(DataComponentTypes.ENCHANTMENTS, ItemEnchantments.itemEnchantments() + .add(Enchantments.OBSIDIAN_POWER, 1) + .add(Enchantment.KNOCKBACK, 3) + .add(Enchantment.UNBREAKING, 5) + .add(Enchantment.BINDING_CURSE, 1) + .build()); + + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE, 6f, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND)) + .addModifier(Attribute.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED, -3.2f, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND)) + .addModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(NamespacedKey.minecraft("base_attack_resistance"), 0.5f, Operation.ADD_SCALAR, EquipmentSlotGroup.HAND)) + .addModifier(Attribute.MOVEMENT_SPEED, new AttributeModifier(BASE_MOVEMENT_SPEED, -0.2, Operation.ADD_SCALAR, EquipmentSlotGroup.HAND)) + .build()); + + itemStack.setData(DataComponentTypes.RARITY, ItemRarity.EPIC); setupDefaults("obsidian_mace", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java index 06ff73f..95281c2 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java @@ -108,6 +108,7 @@ private void loadTags(BootstrapContext context) { List> newTags = new ArrayList<>(); newTags.add(TypedKey.create(RegistryKey.ENCHANTMENT, Key.key("survival_plus:blazing"))); + newTags.add(TypedKey.create(RegistryKey.ENCHANTMENT, Key.key("survival_plus:obsidian_power"))); registrar.setTag(EnchantmentTagKeys.TOOLTIP_ORDER, newTags); registrar.addToTag(EnchantmentTagKeys.TOOLTIP_ORDER, tag); }); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java index d1d7da2..7f2df49 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java @@ -28,7 +28,6 @@ import com.shanebeestudios.survival.plugin.listeners.item.GiantBlade; import com.shanebeestudios.survival.plugin.listeners.item.GrapplingHookListener; import com.shanebeestudios.survival.plugin.listeners.item.MedicKit; -import com.shanebeestudios.survival.plugin.listeners.item.ObsidianMaceWeakness; import com.shanebeestudios.survival.plugin.listeners.item.PoisonousPotato; import com.shanebeestudios.survival.plugin.listeners.item.RawMeatHunger; import com.shanebeestudios.survival.plugin.listeners.item.RecurvedBowListener; @@ -79,8 +78,6 @@ public void registerEvents() { pluginManager.registerEvents(new BowListener(this.plugin), this.plugin); if (this.config.mechanics_grappling_hook) pluginManager.registerEvents(new GrapplingHookListener(this.plugin), this.plugin); - if (this.config.legendary_obsidian_mace) - pluginManager.registerEvents(new ObsidianMaceWeakness(this.plugin), this.plugin); if (this.config.legendary_valkyrie) pluginManager.registerEvents(new Valkyrie(this.plugin), this.plugin); if (this.config.legendary_giant_blade) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ObsidianMaceWeakness.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ObsidianMaceWeakness.java deleted file mode 100644 index 100aabd..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/ObsidianMaceWeakness.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.shanebeestudios.survival.plugin.listeners.item; - -import org.bukkit.Material; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.plugin.managers.EffectManager; -import com.shanebeestudios.survival.api.util.Utils; - -public class ObsidianMaceWeakness implements Listener { - - private EffectManager effectManager; - private Config config; - - public ObsidianMaceWeakness(SurvivalPlugin plugin) { - this.effectManager = plugin.getEffectManager(); - this.config = plugin.getSurvivalConfig(); - } - - @EventHandler(priority = EventPriority.HIGHEST) - private void onAttack(EntityDamageByEntityEvent event) { - if (event.isCancelled()) return; - if (event.getDamager() instanceof Player && event.getEntity() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { - Player player = (Player) event.getDamager(); - if (Utils.isCitizensNPC(player)) return; - ItemStack mainItem = player.getInventory().getItemInMainHand(); - LivingEntity enemy = (LivingEntity) event.getEntity(); - - if (Items.OBSIDIAN_MACE.is(mainItem)) { - effectManager.applyObsidianMaceEffects(player, enemy); - } - } - } - - // Prevent obsidian mace turning dirt/grass block into farmland - @EventHandler - private void onInteractBlock(PlayerInteractEvent event) { - if (!this.config.legendary_obsidian_mace) return; - - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - ItemStack tool = event.getItem(); - if (event.getClickedBlock() == null || tool == null) return; - - Material clickedBlock = event.getClickedBlock().getType(); - - if (Items.OBSIDIAN_MACE.is(tool)) { - if (clickedBlock == Material.GRASS_BLOCK || clickedBlock == Material.DIRT) { - event.setCancelled(true); - } - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java index 5f1b6e8..6013325 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java @@ -1,18 +1,10 @@ package com.shanebeestudios.survival.plugin.managers; -import com.shanebeestudios.survival.api.util.Utils; import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.tasks.tool.GiantBlade; -import com.shanebeestudios.survival.plugin.tasks.tool.ObsidianMace; import com.shanebeestudios.survival.plugin.tasks.tool.QuartzPickaxe; import com.shanebeestudios.survival.plugin.tasks.tool.Valkyrie; -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; public class EffectManager { @@ -21,7 +13,6 @@ public class EffectManager { // Effect Tasks private GiantBlade giantBlade = null; - private ObsidianMace obsidianMace = null; private QuartzPickaxe quartzPickaxe = null; private Valkyrie valkyrie = null; @@ -34,8 +25,6 @@ public EffectManager(SurvivalPlugin plugin) { private void loadEffects() { if (config.legendary_giant_blade) this.giantBlade = new GiantBlade(plugin); - if (config.legendary_obsidian_mace) - this.obsidianMace = new ObsidianMace(plugin); if (config.legendary_valkyrie) this.valkyrie = new Valkyrie(plugin); if (config.legendary_quartz_pickaxe) @@ -49,27 +38,10 @@ private void loadEffects() { public void cancelTasks() { if (giantBlade != null) giantBlade.cancel(); - if (obsidianMace != null) - obsidianMace.cancel(); if (quartzPickaxe != null) quartzPickaxe.cancel(); if (valkyrie != null) valkyrie.cancel(); } - /** - * Apply obsidian mace effects to player and enemy - * - * @param player Player to apply Regeneration to - * @param enemy Enemy to apply weakness and slowness to - */ - public void applyObsidianMaceEffects(Player player, LivingEntity enemy) { - enemy.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 100, 0, false)); - enemy.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 100, 0, false)); - player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 48, 2, true)); - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 2); - Utils.spawnParticle(particleLoc, Particle.HEART, 2, 0.5, 0.5, 0.5); - } - } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/ObsidianMace.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/ObsidianMace.java deleted file mode 100644 index 6391277..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/ObsidianMace.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.shanebeestudios.survival.plugin.tasks.tool; - -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.item.Items; - -public class ObsidianMace extends BukkitRunnable { - - private final SurvivalPlugin plugin; - - public ObsidianMace(SurvivalPlugin plugin) { - this.plugin = plugin; - this.runTaskTimer(plugin, 1, 10); - } - - @Override - public void run() { - for (Player player : plugin.getServer().getOnlinePlayers()) { - if (Items.OBSIDIAN_MACE.is(player.getInventory().getItemInMainHand())) { - player.removePotionEffect(PotionEffectType.SLOWNESS); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOWNESS, 100, 1, false)); - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - assert particleLoc.getWorld() != null; - particleLoc.getWorld().spawnParticle(Particle.CRIT, particleLoc, 10, 0.5, 0.5, 0.5); - particleLoc.getWorld().spawnParticle(Particle.PORTAL, particleLoc, 20, 0.5, 0.5, 0.5); - } - } - } - -} diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/obsidian_power.json b/src/main/resources/datapack/data/survival_plus/enchantment/obsidian_power.json new file mode 100644 index 0000000..d33570d --- /dev/null +++ b/src/main/resources/datapack/data/survival_plus/enchantment/obsidian_power.json @@ -0,0 +1,169 @@ +{ + "description": { + "text": "Obsidian Power", + "color": "#973DF1" + }, + "supported_items": "#minecraft:enchantable/mace", + "weight": 1, + "max_level": 1, + "min_cost": { + "base": 10, + "per_level_above_first": 10 + }, + "max_cost": { + "base": 25, + "per_level_above_first": 10 + }, + "anvil_cost": 4, + "slots": [ + "hand" + ], + "effects": { + "minecraft:tick": [ + { + "requirements": { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "periodic_tick": 1 + } + }, + "effect": { + "type": "minecraft:spawn_particles", + "particle": { + "type": "minecraft:crit" + }, + "horizontal_position": { + "type": "entity_position", + "offset": 0, + "scale": 1 + }, + "vertical_position": { + "type": "entity_position", + "offset": 0.9, + "scale": 1 + }, + "horizontal_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "vertical_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "speed": 0.5 + } + }, + { + "requirements": { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "periodic_tick": 1 + } + }, + "effect": { + "type": "minecraft:spawn_particles", + "particle": { + "type": "minecraft:portal" + }, + "horizontal_position": { + "type": "entity_position", + "offset": 0, + "scale": 1 + }, + "vertical_position": { + "type": "entity_position", + "offset": 0.9, + "scale": 1 + }, + "horizontal_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "vertical_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "speed": 0.5 + } + } + ], + "minecraft:post_attack": [ + { + "effect": { + "type": "minecraft:apply_mob_effect", + "to_apply": [ + "minecraft:weakness", + "minecraft:slowness" + ], + "min_duration": 90, + "max_duration": 150, + "min_amplifier": 0, + "max_amplifier": 0 + }, + "enchanted": "attacker", + "affected": "victim" + }, + { + "effect": { + "type": "minecraft:apply_mob_effect", + "to_apply": [ + "minecraft:regeneration" + ], + "min_duration": 45, + "max_duration": 55, + "min_amplifier": 0, + "max_amplifier": 0 + }, + "enchanted": "attacker", + "affected": "attacker" + }, + { + "effect": { + "type": "minecraft:spawn_particles", + "particle": { + "type": "minecraft:heart" + }, + "horizontal_position": { + "type": "entity_position", + "offset": 0, + "scale": 1 + }, + "vertical_position": { + "type": "entity_position", + "offset": 2.0, + "scale": 1 + }, + "horizontal_velocity": { + "base": 2, + "movement_scale": 2 + }, + "vertical_velocity": { + "base": 2, + "movement_scale": 2 + }, + "speed": 1 + }, + "enchanted": "attacker", + "affected": "attacker" + } + ] + } +} From 30e00e394c515f738012b3a3d08e36ecf2d4fbb7 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 15:25:19 -0800 Subject: [PATCH 106/133] Move quartz pickaxe stuff to enchantment --- .../survival/api/data/Enchantments.java | 1 + .../item/items/legendary/QuartzPickaxe.java | 29 +++++------- .../survival/plugin/data/TagGenerator.java | 1 + .../listeners/block/BlockBreakListener.java | 8 ---- .../plugin/managers/EffectManager.java | 6 --- .../plugin/tasks/tool/QuartzPickaxe.java | 29 ------------ .../enchantment/quartz_mining.json | 44 +++++++++++++++++++ src/main/resources/items.yml | 1 + 8 files changed, 59 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/QuartzPickaxe.java create mode 100644 src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json diff --git a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java index 2413862..517df91 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java @@ -12,6 +12,7 @@ public class Enchantments { public static final Enchantment BLAZING = get("blazing"); public static final Enchantment OBSIDIAN_POWER = get("obsidian_power"); + public static final Enchantment QUARTZ_MINING = get("quartz_mining"); @SuppressWarnings("PatternValidation") private static Enchantment get(String key) { diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java index bfb2db8..70ab73f 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java @@ -1,6 +1,10 @@ package com.shanebeestudios.survival.api.item.items.legendary; +import com.shanebeestudios.survival.api.data.Enchantments; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; +import io.papermc.paper.datacomponent.item.ItemEnchantments; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -11,31 +15,22 @@ import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class QuartzPickaxe extends Item { public QuartzPickaxe() { ItemStack itemStack = ItemType.DIAMOND_PICKAXE.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - - int gPickaxe_dmg = 5; - float gPickaxe_spd = 0.8f; - - AttributeModifier i_gPickDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, gPickaxe_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gPickDamage); - - AttributeModifier i_gPickSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gPickaxe_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gPickSpeed); - itemMeta.addEnchant(Enchantment.SILK_TOUCH, 1, false); - itemMeta.addEnchant(Enchantment.MENDING, 1, false); - itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); - itemStack.setItemMeta(itemMeta); + itemStack.setData(DataComponentTypes.ENCHANTMENTS, ItemEnchantments.itemEnchantments() + .add(Enchantment.SILK_TOUCH, 1) + .add(Enchantments.QUARTZ_MINING, 1) + .build()); - itemStack.unsetData(DataComponentTypes.REPAIRABLE); + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE, 2.0, Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND)) + .addModifier(Attribute.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED, -3.0, Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND)) + .build()); setupDefaults("quartz_pickaxe", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java index 95281c2..d2ea753 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java @@ -109,6 +109,7 @@ private void loadTags(BootstrapContext context) { List> newTags = new ArrayList<>(); newTags.add(TypedKey.create(RegistryKey.ENCHANTMENT, Key.key("survival_plus:blazing"))); newTags.add(TypedKey.create(RegistryKey.ENCHANTMENT, Key.key("survival_plus:obsidian_power"))); + newTags.add(TypedKey.create(RegistryKey.ENCHANTMENT, Key.key("survival_plus:quartz_mining"))); registrar.setTag(EnchantmentTagKeys.TOOLTIP_ORDER, newTags); registrar.addToTag(EnchantmentTagKeys.TOOLTIP_ORDER, tag); }); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java index 13577f4..255a81c 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java @@ -50,14 +50,6 @@ private void onBlockBreak(BlockBreakEvent event) { Block block = event.getBlock(); Material material = block.getType(); - if (Items.QUARTZ_PICKAXE.is(tool)) { - // TODO figure out what this is about - if (BlockTags.ORE_TYPE_BLOCK.isTagged(material) || BlockTags.ORES.isTagged(material)) { - block.getWorld().dropItemNaturally(block.getLocation().add(0.5, 0.1, 0.5), new ItemStack(material)); - } - return; - } - if (Permissions.BYPASS_REQUIRED_TOOLS.has(player)) return; if (this.config.survival_break_only_with_shovel) { diff --git a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java index 6013325..4c1caec 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java @@ -3,7 +3,6 @@ import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.tasks.tool.GiantBlade; -import com.shanebeestudios.survival.plugin.tasks.tool.QuartzPickaxe; import com.shanebeestudios.survival.plugin.tasks.tool.Valkyrie; public class EffectManager { @@ -13,7 +12,6 @@ public class EffectManager { // Effect Tasks private GiantBlade giantBlade = null; - private QuartzPickaxe quartzPickaxe = null; private Valkyrie valkyrie = null; public EffectManager(SurvivalPlugin plugin) { @@ -27,8 +25,6 @@ private void loadEffects() { this.giantBlade = new GiantBlade(plugin); if (config.legendary_valkyrie) this.valkyrie = new Valkyrie(plugin); - if (config.legendary_quartz_pickaxe) - this.quartzPickaxe = new QuartzPickaxe(plugin); } /** @@ -38,8 +34,6 @@ private void loadEffects() { public void cancelTasks() { if (giantBlade != null) giantBlade.cancel(); - if (quartzPickaxe != null) - quartzPickaxe.cancel(); if (valkyrie != null) valkyrie.cancel(); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/QuartzPickaxe.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/QuartzPickaxe.java deleted file mode 100644 index 10f91ac..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/QuartzPickaxe.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.shanebeestudios.survival.plugin.tasks.tool; - -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.item.Items; - -public class QuartzPickaxe extends BukkitRunnable { - - private final SurvivalPlugin plugin; - - public QuartzPickaxe(SurvivalPlugin plugin) { - this.plugin = plugin; - this.runTaskTimer(plugin, 1, 10); - } - - @Override - public void run() { - for (Player player : plugin.getServer().getOnlinePlayers()) { - if (Items.QUARTZ_PICKAXE.is(player.getInventory().getItemInMainHand())) { - player.removePotionEffect(PotionEffectType.HASTE); - player.addPotionEffect(new PotionEffect(PotionEffectType.HASTE, 20, 9, false)); - } - } - } - -} diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json b/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json new file mode 100644 index 0000000..f523334 --- /dev/null +++ b/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json @@ -0,0 +1,44 @@ +{ + "description": { + "text": "Quartz Mining", + "color": "#e27c20" + }, + "supported_items": "#minecraft:pickaxes", + "exclusive_set": "#minecraft:exclusive_set/mining", + "weight": 1, + "max_level": 1, + "min_cost": { + "base": 20, + "per_level_above_first": 10 + }, + "max_cost": { + "base": 45, + "per_level_above_first": 10 + }, + "anvil_cost": 4, + "slots": [ + "mainhand" + ], + "effects": { + "minecraft:attributes": [ + { + "amount": { + "type": "minecraft:linear", + "base": 0.2, + "per_level_above_first": 0.1 + }, + "attribute": "minecraft:mining_efficiency", + "id": "minecraft:enchantment.efficiency", + "operation": "add_multiplied_base" + } + ], + "minecraft:repair_with_xp": [ + { + "effect": { + "type": "minecraft:multiply", + "factor": 2.0 + } + } + ] + } +} diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 371698c..8f7dfc8 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -133,6 +133,7 @@ items: name: "Quartz Pickaxe" repair_cost: 5 repair_percent: 0.95 + max_damage: 2400 valkyries_axe: name: "Valkyries Axe" repair_cost: 5 From 6be7c796ccf7f7857ae51a3b5ec272a2b3e5bd5a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 15:27:22 -0800 Subject: [PATCH 107/133] quartz_mining.json - forgot to change color code --- .../datapack/data/survival_plus/enchantment/quartz_mining.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json b/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json index f523334..7a80594 100644 --- a/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json +++ b/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json @@ -1,7 +1,7 @@ { "description": { "text": "Quartz Mining", - "color": "#e27c20" + "color": "#E8DFD4" }, "supported_items": "#minecraft:pickaxes", "exclusive_set": "#minecraft:exclusive_set/mining", From 6cd9ba52ff0355a47efe70d44c5d35655b29bd46 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 16:51:13 -0800 Subject: [PATCH 108/133] BlazeSword - move more over to enchantment --- .../plugin/listeners/EventManager.java | 9 +- .../plugin/listeners/item/BlazeSword.java | 140 ------------------ .../survival_plus/enchantment/blazing.json | 57 +++++++ 3 files changed, 60 insertions(+), 146 deletions(-) delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BlazeSword.java diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java index 7f2df49..547cfb5 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java @@ -9,16 +9,15 @@ import com.shanebeestudios.survival.plugin.listeners.block.LootTableListener; import com.shanebeestudios.survival.plugin.listeners.block.SnowballThrow; import com.shanebeestudios.survival.plugin.listeners.block.WorkbenchShare; -import com.shanebeestudios.survival.plugin.listeners.entity.MobGoalListener; import com.shanebeestudios.survival.plugin.listeners.entity.BeeKeeperSuit; import com.shanebeestudios.survival.plugin.listeners.entity.ChestPigmen; import com.shanebeestudios.survival.plugin.listeners.entity.ChickenSpawn; import com.shanebeestudios.survival.plugin.listeners.entity.EntityDeath; import com.shanebeestudios.survival.plugin.listeners.entity.LivingSlime; import com.shanebeestudios.survival.plugin.listeners.entity.MerchantTrades; +import com.shanebeestudios.survival.plugin.listeners.entity.MobGoalListener; import com.shanebeestudios.survival.plugin.listeners.entity.PiglinBarter; import com.shanebeestudios.survival.plugin.listeners.item.BeetrootStrength; -import com.shanebeestudios.survival.plugin.listeners.item.BlazeSword; import com.shanebeestudios.survival.plugin.listeners.item.BowListener; import com.shanebeestudios.survival.plugin.listeners.item.CompassWaypoint; import com.shanebeestudios.survival.plugin.listeners.item.CookieHealthBoost; @@ -33,13 +32,13 @@ import com.shanebeestudios.survival.plugin.listeners.item.RecurvedBowListener; import com.shanebeestudios.survival.plugin.listeners.item.RepairCrafting; import com.shanebeestudios.survival.plugin.listeners.item.ShivPoison; -import com.shanebeestudios.survival.plugin.listeners.player.ThirstListener; import com.shanebeestudios.survival.plugin.listeners.item.TropicalFish; import com.shanebeestudios.survival.plugin.listeners.item.Valkyrie; -import com.shanebeestudios.survival.plugin.listeners.item.WaterPurifiedListener; import com.shanebeestudios.survival.plugin.listeners.item.WaterBowlListener; +import com.shanebeestudios.survival.plugin.listeners.item.WaterPurifiedListener; import com.shanebeestudios.survival.plugin.listeners.player.EnergyChange; import com.shanebeestudios.survival.plugin.listeners.player.PlayerDataListener; +import com.shanebeestudios.survival.plugin.listeners.player.ThirstListener; import com.shanebeestudios.survival.plugin.listeners.server.Guide; import com.shanebeestudios.survival.plugin.listeners.server.LocalChat; import com.shanebeestudios.survival.plugin.listeners.server.RecipeDiscovery; @@ -82,8 +81,6 @@ public void registerEvents() { pluginManager.registerEvents(new Valkyrie(this.plugin), this.plugin); if (this.config.legendary_giant_blade) pluginManager.registerEvents(new GiantBlade(this.plugin), this.plugin); - if (this.config.legendary_blaze_sword) - pluginManager.registerEvents(new BlazeSword(), this.plugin); if (this.config.settings_local_chat_distance > -1) pluginManager.registerEvents(new LocalChat(this.plugin), this.plugin); if (this.config.mechanics_compass_waypoint) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BlazeSword.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BlazeSword.java deleted file mode 100644 index a202c37..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/BlazeSword.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.shanebeestudios.survival.plugin.listeners.item; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.Tag; -import org.bukkit.block.BlockState; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockIgniteEvent; -import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.api.item.Items; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class BlazeSword implements Listener { - - @EventHandler - private void onItemClick(PlayerInteractEvent event) { - if (event.hasItem()) { - Player player = event.getPlayer(); - ItemStack mainItem = player.getInventory().getItemInMainHand(); - if (Items.BLAZE_SWORD.is(mainItem)) { - if (player.isSneaking()) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - Material mat = event.getClickedBlock().getType(); - if (Tag.BEDS.isTagged(mat) || Tag.DOORS.isTagged(mat) || Tag.TRAPDOORS.isTagged(mat) || Tag.FENCE_GATES.isTagged(mat)) { - return; - } - switch (event.getClickedBlock().getType()) { - case ENCHANTING_TABLE: - case ANVIL: - case BREWING_STAND: - case TRAPPED_CHEST: - case CHEST: - case BARREL: - case NOTE_BLOCK: - case FURNACE: - case BLAST_FURNACE: - case SMOKER: - case HOPPER: - case CRAFTING_TABLE: - case SMITHING_TABLE: - case FLETCHING_TABLE: - case GRINDSTONE: - case CARTOGRAPHY_TABLE: - case COMPOSTER: - case LECTERN: - case LOOM: - case DROPPER: - case DISPENSER: - return; - default: - } - Location loc = event.getClickedBlock().getRelative(event.getBlockFace()).getLocation(); - ignite(player, loc); - } - - if (event.getAction() == Action.RIGHT_CLICK_AIR) { - Location loc = player.getLocation(); - loc.add(-0.5, -0.5, -0.5); - ignite(player, loc); - } - - ItemMeta meta = mainItem.getItemMeta(); - assert meta != null; - ((Damageable) meta).setDamage(((Damageable) meta).getDamage() + 1); - mainItem.setItemMeta(meta); - if (((Damageable) meta).getDamage() >= mainItem.getType().getMaxDurability()) { - Random rand = new Random(); - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInMainHand(null); - } - player.updateInventory(); - } - } - } - } - } - - private void ignite(Player igniter, Location loc) { - Random rand = new Random(); - - loc.add(0.5, 0.5, 0.5); - - BlockIgniteEvent igniteEvent = new BlockIgniteEvent(loc.getBlock(), - IgniteCause.FLINT_AND_STEEL, igniter); - Bukkit.getServer().getPluginManager().callEvent(igniteEvent); - if (igniteEvent.isCancelled()) { - return; - } - - List locations = new ArrayList<>(); - - for (double x = loc.getX() - 2; x <= loc.getX() + 2; x++) { - for (double y = loc.getY() - 1; y <= loc.getY() + 1; y++) { - for (double z = loc.getZ() - 2; z <= loc.getZ() + 2; z++) { - locations.add(new Location(loc.getWorld(), x, y, z)); - } - } - } - - for (Location l : locations) { - BlockIgniteEvent igniteEvent2 = new BlockIgniteEvent(l.getBlock(), - IgniteCause.FLINT_AND_STEEL, igniter); - Bukkit.getServer().getPluginManager().callEvent(igniteEvent2); - if (igniteEvent2.isCancelled()) { - continue; - } - - BlockState blockState = l.getBlock().getState(); - BlockPlaceEvent placeEvent = new BlockPlaceEvent(l.getBlock(), blockState, l.getBlock(), - igniter.getInventory().getItemInMainHand(), igniter, true, EquipmentSlot.HAND); - Bukkit.getServer().getPluginManager().callEvent(placeEvent); - - if (placeEvent.isCancelled() || !placeEvent.canBuild()) { - continue; - } - - if (l.getBlock().getType() == Material.AIR) - l.getBlock().setType(Material.FIRE); - } - - loc.getWorld().playSound(loc, Sound.ITEM_FIRECHARGE_USE, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - - } - -} diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/blazing.json b/src/main/resources/datapack/data/survival_plus/enchantment/blazing.json index a5c4b01..17c5643 100644 --- a/src/main/resources/datapack/data/survival_plus/enchantment/blazing.json +++ b/src/main/resources/datapack/data/survival_plus/enchantment/blazing.json @@ -97,6 +97,63 @@ } } } + ], + "minecraft:hit_block": [ + { + "requirements": { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "flags": { + "is_sneaking": true + } + } + }, + "effect": { + "type": "minecraft:all_of", + "effects": [ + { + "type": "minecraft:replace_disk", + "block_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "minecraft:fire" + } + }, + "predicate": { + "type": "minecraft:all_of", + "predicates": [ + { + "type": "minecraft:has_sturdy_face", + "direction": "up", + "offset": [ + 0, + -1, + 0 + ] + }, + { + "type": "minecraft:matching_block_tag", + "tag": "minecraft:replaceable" + } + ] + }, + "trigger_game_event": "minecraft:block_place", + "radius": 4, + "height": 2, + "offset": [ + 0, + 1, + 0 + ] + }, + { + "type": "minecraft:change_item_damage", + "amount": 5 + } + ] + } + } ] } } From 6b2245ac38399e2900d1ca0530ddb68297046bbc Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 17:09:58 -0800 Subject: [PATCH 109/133] quartz_mining.json - forgot to change max level --- .../datapack/data/survival_plus/enchantment/quartz_mining.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json b/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json index 7a80594..8c2b9e3 100644 --- a/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json +++ b/src/main/resources/datapack/data/survival_plus/enchantment/quartz_mining.json @@ -6,7 +6,7 @@ "supported_items": "#minecraft:pickaxes", "exclusive_set": "#minecraft:exclusive_set/mining", "weight": 1, - "max_level": 1, + "max_level": 5, "min_cost": { "base": 20, "per_level_above_first": 10 From 4e5600d0882f318897b6fd1e1b5cfe474516a88f Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 18:31:24 -0800 Subject: [PATCH 110/133] DrinkableItemListener - wrong method --- .../survival/plugin/listeners/item/DrinkableItemListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java index 9da05b1..cd1cd5f 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java @@ -73,7 +73,7 @@ private void onConsume(PlayerItemConsumeEvent event) { ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); if (thirstEvent.callEvent()) { - playerData.setThirst(playerData.getThirst() + change); + playerData.increaseThirst(change); } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { From c2a0c32241773d75f709e5db64edf2925bc40297 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 18:33:10 -0800 Subject: [PATCH 111/133] ThirstTask - only drain thirst if its daytime --- .../shanebeestudios/survival/plugin/tasks/ThirstTask.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java index f544eec..e09fe44 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java @@ -8,6 +8,7 @@ import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.block.Block; import org.bukkit.damage.DamageSource; @@ -36,8 +37,9 @@ public void run() { if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; PlayerData playerData = this.playerManager.getPlayerData(player); - Environment environment = player.getWorld().getEnvironment(); - if (environment == Environment.NORMAL) { + World world = player.getWorld(); + Environment environment = world.getEnvironment(); + if (environment == Environment.NORMAL && world.isDayTime()) { Block block = player.getLocation().getBlock(); if (block.getTemperature() >= 1.5 && block.getLightLevel() >= 14) { drain(player, playerData, this.config.mechanics_thirst_heat_drain_rate); @@ -47,7 +49,7 @@ public void run() { } // Damage player when thirst is too low if (playerData.getThirst() <= 0) { - switch (player.getWorld().getDifficulty()) { + switch (world.getDifficulty()) { case EASY: if (player.getHealth() > 10) player.damage(this.config.mechanics_thirst_damage_rate, this.damageSource); From f65858bb0fa410dea0fbcf66cd770ca4e37fe4f2 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 19:18:20 -0800 Subject: [PATCH 112/133] Recipes - add missing waters for cooking recipes --- .../shanebeestudios/survival/api/item/Recipes.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java index 65d4f01..dac5179 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java @@ -1,5 +1,7 @@ package com.shanebeestudios.survival.api.item; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.config.Config; import org.bukkit.Bukkit; import org.bukkit.Keyed; import org.bukkit.Material; @@ -15,8 +17,6 @@ import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapelessRecipe; import org.bukkit.inventory.SmokingRecipe; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.api.util.Utils; import java.util.ArrayList; import java.util.Collection; @@ -348,12 +348,13 @@ public static void init(Config config) { bowl.setIngredient('1', Items.WATER_BOWL.getItemStack()); BOWL = register(config.mechanics_empty_potion, bowl); + List dirtyWaters = List.of(Items.DIRTY_WATER.getItemStack(), Items.MURKY_WATER.getItemStack(), Items.SALTY_WATER.getItemStack()); FurnaceRecipe clean_water_furnace = new FurnaceRecipe(Utils.getNamespacedKey("clean_water_furnace"), - Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 600); + Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(dirtyWaters), 0, 600); SmokingRecipe clean_water_smoker = new SmokingRecipe(Utils.getNamespacedKey("clean_water_smoker"), - Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 300); + Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(dirtyWaters), 0, 300); CampfireRecipe clean_water_camp = new CampfireRecipe(Utils.getNamespacedKey("clean_water_campfire"), - Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(Items.DIRTY_WATER.getItemStack()), 0, 2400); + Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(dirtyWaters), 0, 2400); CLEAN_WATER_BOTTLES = register(config.mechanics_thirst_purify_water, clean_water_camp, clean_water_smoker, clean_water_furnace); ShapedRecipe fishing_rod = new ShapedRecipe(Utils.getNamespacedKey("fishing_rod"), new ItemStack(Material.FISHING_ROD, 1)); From 44166e95bf401ac7aafd5c8307309f1a6af65d7d Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 21:42:19 -0800 Subject: [PATCH 113/133] Recipes - add potion mixes --- .../shanebeestudios/survival/api/item/Recipes.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java index dac5179..e221907 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java @@ -2,6 +2,7 @@ import com.shanebeestudios.survival.api.util.Utils; import com.shanebeestudios.survival.plugin.config.Config; +import io.papermc.paper.potion.PotionMix; import org.bukkit.Bukkit; import org.bukkit.Keyed; import org.bukkit.Material; @@ -357,6 +358,11 @@ public static void init(Config config) { Items.CLEAN_WATER.getItemStack(), new RecipeChoice.ExactChoice(dirtyWaters), 0, 2400); CLEAN_WATER_BOTTLES = register(config.mechanics_thirst_purify_water, clean_water_camp, clean_water_smoker, clean_water_furnace); + makeBrewingRecipe("dirty_water", Items.DIRTY_WATER); + makeBrewingRecipe("murky_water", Items.MURKY_WATER); + makeBrewingRecipe("salty_water", Items.SALTY_WATER); + makeBrewingRecipe("clean_water", Items.CLEAN_WATER); + ShapedRecipe fishing_rod = new ShapedRecipe(Utils.getNamespacedKey("fishing_rod"), new ItemStack(Material.FISHING_ROD, 1)); fishing_rod.shape("1- ", "1 -", "1@*"); fishing_rod.setIngredient('1', Material.STICK); @@ -425,6 +431,14 @@ public static void init(Config config) { STICK = register(config.recipes_sapling_stick, stick); } + private static void makeBrewingRecipe(String key, Item input) { + PotionMix potionMix = new PotionMix(Utils.getNamespacedKey("purified_water_from_" + key), + Items.PURIFIED_WATER.getItemStack(), + new RecipeChoice.ExactChoice(input.getItemStack()), + new RecipeChoice.MaterialChoice(Material.CHARCOAL)); + Bukkit.getPotionBrewer().addPotionMix(potionMix); + } + private final Collection keys; Recipes(boolean register, Recipe... recipes) { From e9f9d6c83f479b1af6ab89cc202638f276305e50 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 23:10:13 -0800 Subject: [PATCH 114/133] Items - flint sickle should take cobblestone --- src/main/java/com/shanebeestudios/survival/api/item/Items.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/item/Items.java b/src/main/java/com/shanebeestudios/survival/api/item/Items.java index 2a47516..dae6053 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/Items.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Items.java @@ -71,7 +71,7 @@ public class Items { public static final Item GRAPPLING_HOOK = new GrapplingHook(); public static final Item COMPASS = new Compass(); public static final Item FLINT_SICKLE = new Sickle("flint", Material.FLINT); - public static final Item STONE_SICKLE = new Sickle("stone", Material.STONE); + public static final Item STONE_SICKLE = new Sickle("stone", Material.COBBLESTONE); public static final Item IRON_SICKLE = new Sickle("iron", Material.IRON_INGOT); public static final Item DIAMOND_SICKLE = new Sickle("diamond", Material.DIAMOND); public static final MedicKit MEDIC_KIT = new MedicKit(); From 94ec599c49a47e6a95d6b540ef5fb7f527bbffad Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 20 Feb 2025 23:10:35 -0800 Subject: [PATCH 115/133] RecipeDiscovery - setup netherite --- .../survival/api/item/Recipes.java | 1 - .../listeners/server/RecipeDiscovery.java | 171 ++++++++++-------- 2 files changed, 99 insertions(+), 73 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java index e221907..cd4045f 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Recipes.java @@ -174,7 +174,6 @@ public static void init(Config config) { DIAMOND_CHESTPLATE = register(config.mechanics_slow_armor, Items.DIAMOND_CHESTPLATE.getRecipe()); DIAMOND_LEGGINGS = register(config.mechanics_slow_armor, Items.DIAMOND_LEGGINGS.getRecipe()); DIAMOND_BOOTS = register(config.mechanics_slow_armor, Items.DIAMOND_BOOTS.getRecipe()); - // TODO discovery for netherite NETHERITE_HELMET = register(config.mechanics_slow_armor, Items.NETHERITE_HELMET.getRecipe()); NETHERITE_CHESTPLATE = register(config.mechanics_slow_armor, Items.NETHERITE_CHESTPLATE.getRecipe()); NETHERITE_LEGGINGS = register(config.mechanics_slow_armor, Items.NETHERITE_LEGGINGS.getRecipe()); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/RecipeDiscovery.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/RecipeDiscovery.java index 1ddb893..a8b6a49 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/RecipeDiscovery.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/server/RecipeDiscovery.java @@ -1,5 +1,8 @@ package com.shanebeestudios.survival.plugin.listeners.server; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.item.Recipes; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -13,9 +16,6 @@ import org.bukkit.event.inventory.FurnaceExtractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.api.item.Recipes; public class RecipeDiscovery implements Listener { @@ -55,58 +55,76 @@ private void onPickupItems(EntityPickupItemEvent e) { if (this.unlockAllRecipes) return; if (!(e.getEntity() instanceof Player player)) return; Material item = e.getItem().getItemStack().getType(); - if (item == Material.DIAMOND) { - Recipes.DIAMOND_BOOTS.unlock(player); - Recipes.DIAMOND_CHESTPLATE.unlock(player); - Recipes.DIAMOND_LEGGINGS.unlock(player); - Recipes.DIAMOND_HELMET.unlock(player); - Recipes.DIAMOND_HORSE_ARMOR.unlock(player); - Recipes.VALKYRIES_AXE.unlock(player); - Recipes.QUARTZ_PICKAXE.unlock(player); - Recipes.ENDER_GIANT_BLADE.unlock(player); - Recipes.DIAMOND_SICKLE.unlock(player); - } else if (item == Material.FLINT) { - Recipes.FIRESTRIKER.unlock(player); - Recipes.GRAVEL.unlock(player); - Recipes.FLINT_SICKLE.unlock(player); - } else if (item == Material.FEATHER) { - Recipes.MEDIC_KIT.unlock(player); - Recipes.FISHING_ROD.unlock(player); - } else if (item == Material.BLAZE_POWDER || item == Material.BLAZE_ROD) { - Recipes.BLAZE_SWORD.unlock(player); - } else if (item == Material.LEATHER) { - Recipes.SADDLE.unlock(player); - Recipes.LEATHER_HORSE_ARMOR.unlock(player); - } else if (item == Material.GRAVEL) { - Recipes.FLINT.unlock(player); - } else if (item == Material.ROTTEN_FLESH) { - Recipes.FERMENTED_SKIN.unlock(player); - } else if (item == Material.STRING) { - Recipes.COBWEB.unlock(player); - Recipes.RECURVED_BOW.unlock(player); - } else if (item == Material.SPIDER_EYE) { - Recipes.FERMENTED_SPIDER_EYE.unlock(player); - } else if (item == Material.POTATO) { - Recipes.POISONOUS_POTATO.unlock(player); - } else if (item == Material.COBBLESTONE) { - Recipes.ANDESITE.unlock(player); - Recipes.DIORITE.unlock(player); - Recipes.GRANITE.unlock(player); - Recipes.STONE_SICKLE.unlock(player); - } else if (item == Material.QUARTZ) { - Recipes.QUARTZ.unlock(player); - } else if (item == Material.DIRT) { - Recipes.CLAY.unlock(player); - } else if (item == Material.EGG) { - Recipes.COOKIE.unlock(player); - } else if (Items.WATER_BOWL.is(e.getItem().getItemStack())) { + switch (item) { + case DIAMOND: + Recipes.DIAMOND_BOOTS.unlock(player); + Recipes.DIAMOND_CHESTPLATE.unlock(player); + Recipes.DIAMOND_LEGGINGS.unlock(player); + Recipes.DIAMOND_HELMET.unlock(player); + Recipes.DIAMOND_HORSE_ARMOR.unlock(player); + Recipes.VALKYRIES_AXE.unlock(player); + Recipes.QUARTZ_PICKAXE.unlock(player); + Recipes.ENDER_GIANT_BLADE.unlock(player); + Recipes.DIAMOND_SICKLE.unlock(player); + break; + case FLINT: + Recipes.FIRESTRIKER.unlock(player); + Recipes.GRAVEL.unlock(player); + Recipes.FLINT_SICKLE.unlock(player); + break; + case FEATHER: + Recipes.MEDIC_KIT.unlock(player); + Recipes.FISHING_ROD.unlock(player); + break; + case BLAZE_POWDER, BLAZE_ROD: + Recipes.BLAZE_SWORD.unlock(player); + break; + case LEATHER: + Recipes.SADDLE.unlock(player); + Recipes.LEATHER_HORSE_ARMOR.unlock(player); + break; + case GRAVEL: + Recipes.FLINT.unlock(player); + break; + case ROTTEN_FLESH: + Recipes.FERMENTED_SKIN.unlock(player); + break; + case STRING: + Recipes.COBWEB.unlock(player); + Recipes.RECURVED_BOW.unlock(player); + break; + case SPIDER_EYE: + Recipes.FERMENTED_SPIDER_EYE.unlock(player); + break; + case POTATO: + Recipes.POISONOUS_POTATO.unlock(player); + break; + case COBBLESTONE: + Recipes.ANDESITE.unlock(player); + Recipes.DIORITE.unlock(player); + Recipes.GRANITE.unlock(player); + Recipes.STONE_SICKLE.unlock(player); + break; + case QUARTZ: + Recipes.QUARTZ.unlock(player); + break; + case DIRT: + Recipes.CLAY.unlock(player); + break; + case EGG: + Recipes.COOKIE.unlock(player); + break; + case VINE: + Recipes.SLIMEBALL.unlock(player); + break; + case REDSTONE: + Recipes.COMPASS.unlock(player); + break; + case HONEYCOMB: + Recipes.BEEKEEPER_SUIT.unlock(player); + } + if (Items.WATER_BOWL.is(e.getItem().getItemStack())) { Recipes.BOWL.unlock(player); - } else if (item == Material.VINE) { - Recipes.SLIMEBALL.unlock(player); - } else if (item == Material.REDSTONE) { - Recipes.COMPASS.unlock(player); - } else if (item == Material.HONEYCOMB) { - Recipes.BEEKEEPER_SUIT.unlock(player); } } @@ -115,24 +133,33 @@ private void onPickupItems(EntityPickupItemEvent e) { private void onFurnaceExtract(FurnaceExtractEvent event) { if (this.unlockAllRecipes) return; Player player = event.getPlayer(); - if (event.getItemType() == Material.IRON_INGOT) { - Recipes.IRON_BOOTS.unlock(player); - Recipes.IRON_CHESTPLATE.unlock(player); - Recipes.IRON_HELMET.unlock(player); - Recipes.IRON_LEGGINGS.unlock(player); - Recipes.IRON_HORSE_ARMOR.unlock(player); - Recipes.IRON_INGOT.unlock(player); - Recipes.IRON_SICKLE.unlock(player); - Recipes.IRON_NUGGET.unlock(player); - } else if (event.getItemType() == Material.GOLD_INGOT) { - Recipes.GOLD_NUGGET.unlock(player); - Recipes.GOLD_INGOT.unlock(player); - Recipes.GOLD_CROWN.unlock(player); - Recipes.GOLD_GREAVES.unlock(player); - Recipes.GOLD_GUARD.unlock(player); - Recipes.GOLD_SABATONS.unlock(player); - Recipes.GOLD_HORSE_ARMOR.unlock(player); - Recipes.ENCHANTED_GOLDEN_APPLE.unlock(player); + Material itemType = event.getItemType(); + switch (itemType) { + case IRON_INGOT: + Recipes.IRON_BOOTS.unlock(player); + Recipes.IRON_CHESTPLATE.unlock(player); + Recipes.IRON_HELMET.unlock(player); + Recipes.IRON_LEGGINGS.unlock(player); + Recipes.IRON_HORSE_ARMOR.unlock(player); + Recipes.IRON_INGOT.unlock(player); + Recipes.IRON_SICKLE.unlock(player); + Recipes.IRON_NUGGET.unlock(player); + break; + case GOLD_INGOT: + Recipes.GOLD_NUGGET.unlock(player); + Recipes.GOLD_INGOT.unlock(player); + Recipes.GOLD_CROWN.unlock(player); + Recipes.GOLD_GREAVES.unlock(player); + Recipes.GOLD_GUARD.unlock(player); + Recipes.GOLD_SABATONS.unlock(player); + Recipes.GOLD_HORSE_ARMOR.unlock(player); + Recipes.ENCHANTED_GOLDEN_APPLE.unlock(player); + break; + case NETHERITE_INGOT: + Recipes.NETHERITE_HELMET.unlock(player); + Recipes.NETHERITE_CHESTPLATE.unlock(player); + Recipes.NETHERITE_LEGGINGS.unlock(player); + Recipes.NETHERITE_BOOTS.unlock(player); } } From 0fa9774df2b36ca488ce3d4d4c669c92ef008286 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 11:02:35 -0800 Subject: [PATCH 116/133] AvoidPlayerGoal - slow down mob when health is lower --- .../survival/api/goals/AvoidPlayerGoal.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java b/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java index efa93a2..ef003a3 100644 --- a/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java +++ b/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java @@ -15,6 +15,8 @@ import org.bukkit.NamespacedKey; import org.bukkit.Registry; import org.bukkit.Statistic; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.EntityType; import org.bukkit.entity.Mob; import org.bukkit.entity.Player; @@ -109,6 +111,12 @@ private boolean shouldAvoid() { public boolean shouldStayActive() { int statistic = this.avoid.getStatistic(Statistic.PLAY_ONE_MINUTE); this.speed = statistic > 48000 ? 1.6 : 1.25; + AttributeInstance attribute = this.mob.getAttribute(Attribute.MAX_HEALTH); + assert attribute != null; + // Slow the mob down when not at full health + if (this.mob.getHealth() / attribute.getValue() < 0.7) { + this.speed *= 0.8; + } return this.shouldAvoid() && this.path != null && this.pathfinder.hasPath(); } From 0b62aee59761795164e320b304aa74c7915b1563 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 11:45:04 -0800 Subject: [PATCH 117/133] PlayerData - small changes with where things are called --- .../survival/api/data/PlayerData.java | 65 +++++++++++-------- .../api/events/EnergyLevelChangeEvent.java | 5 +- .../api/events/ThirstLevelChangeEvent.java | 2 +- .../listeners/item/DrinkableItemListener.java | 5 +- .../plugin/listeners/player/EnergyChange.java | 6 +- .../listeners/player/ThirstListener.java | 12 +--- .../plugin/managers/PlayerManager.java | 5 +- .../survival/plugin/tasks/ThirstTask.java | 12 +--- 8 files changed, 50 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java index 52eea2c..fc02e42 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java @@ -1,16 +1,18 @@ package com.shanebeestudios.survival.api.data; +import com.shanebeestudios.survival.api.events.EnergyLevelChangeEvent; +import com.shanebeestudios.survival.api.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.api.util.Math; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.entity.Player; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.api.util.Math; +import org.jetbrains.annotations.ApiStatus; import java.util.HashMap; import java.util.LinkedHashMap; @@ -27,6 +29,7 @@ public class PlayerData implements ConfigurationSerializable { private final Config config = SurvivalPlugin.getInstance().getSurvivalConfig(); + private final Player player; private final UUID uuid; private Map compassMap = new HashMap<>(); @@ -37,9 +40,6 @@ public class PlayerData implements ConfigurationSerializable { private double energy; private double thirst; - // Dunno yet - private boolean localChat = false; - // Stats private int charge = 0; private int charging = 0; @@ -50,6 +50,7 @@ public class PlayerData implements ConfigurationSerializable { private int healTimes = 0; private int recurveFiring = 0; private int recurveCooldown = 0; + private boolean localChat = false; // Scoreboard info private boolean score_hunger = true; @@ -57,17 +58,18 @@ public class PlayerData implements ConfigurationSerializable { private boolean score_energy = true; private boolean score_nutrients = true; - public PlayerData(OfflinePlayer player, double thirst, int proteins, int carbs, int vitamins, double energy) { - this(player.getUniqueId(), thirst, proteins, carbs, vitamins, energy); - } - - public PlayerData(UUID uuid, double thirst, int proteins, int carbs, int vitamins, double energy) { - this.uuid = uuid; - this.thirst = thirst; + /** + * @hidden Shouldn't be using this constructor outside the plugin + */ + @ApiStatus.Internal + public PlayerData(Player player, double thirst, int proteins, int carbs, int vitamins, double energy) { + this.player = player; + this.uuid = player.getUniqueId(); + this.thirst = Math.clamp(thirst, 0, 40); this.proteins = proteins; this.carbs = carbs; this.vitamins = vitamins; - this.energy = energy; + this.energy = Math.clamp(energy, 0, 20); } /** @@ -76,7 +78,7 @@ public PlayerData(UUID uuid, double thirst, int proteins, int carbs, int vitamin * @return Player from this data */ public Player getPlayer() { - return Bukkit.getPlayer(uuid); + return this.player; } /** @@ -85,7 +87,7 @@ public Player getPlayer() { * @return UUID of player from this data */ public UUID getUuid() { - return uuid; + return this.uuid; } /** @@ -112,7 +114,9 @@ public void setThirst(double thirst) { * @param thirst Level of thirst to add */ public void increaseThirst(double thirst) { - this.thirst = Math.clamp(this.thirst + thirst, 0, 40); + ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(this.player, thirst, getThirst() + thirst); + if (!thirstEvent.callEvent()) return; + setThirst(this.thirst + thirst); } /** @@ -211,6 +215,8 @@ public void setEnergy(double energy) { * @param energy Energy amount to increase */ public void increaseEnergy(double energy) { + EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, energy, getEnergy() + energy); + if (!energyEvent.callEvent()) return; setEnergy(this.energy + energy); } @@ -355,7 +361,7 @@ public void setCompassWaypoint(Location location) { this.compassMap.clear(); } this.compassMap.put(world.getName(), location); - getPlayer().setCompassTarget(location); + this.player.setCompassTarget(location); } /** @@ -401,11 +407,16 @@ public static PlayerData deserialize(Map args) { UUID uuid = UUID.fromString(args.get("uuid").toString()); double thirst = getDouble(args, "thirst", 20.0); double energy = getDouble(args, "energy", 20.0); - int proteins = ((Integer) args.get("nutrients.proteins")); - int carbs = ((Integer) args.get("nutrients.carbs")); - int vitamins = ((Integer) args.get("nutrients.vitamins")); + int proteins = getInt(args, "nutrients.proteins", 500); + int carbs = getInt(args, "nutrients.carbs", 500); + int vitamins = getInt(args, "nutrients.vitamins", 500); + + Player player = Bukkit.getPlayer(uuid); + if (player == null) { + throw new IllegalArgumentException("Player not found for uuid: " + uuid); + } - PlayerData data = new PlayerData(uuid, thirst, proteins, carbs, vitamins, energy); + PlayerData data = new PlayerData(player, thirst, proteins, carbs, vitamins, energy); boolean localChat = getBool(args, "local-chat", false); data.setLocalChat(localChat); @@ -449,8 +460,7 @@ private static boolean getBool(Map args, String val, boolean def * @return Hunger level from this player data */ public double getHunger() { - Player player = getPlayer(); - return player.getFoodLevel() + player.getSaturation(); + return this.player.getFoodLevel() + this.player.getSaturation(); } /** @@ -471,9 +481,8 @@ public void setHunger(double hunger) { } else if (hunger >= 0) { hun = hunger; } - Player player = getPlayer(); - player.setFoodLevel((int) hun); - player.setSaturation((float) sat); + this.player.setFoodLevel((int) hun); + this.player.setSaturation((float) sat); } /** diff --git a/src/main/java/com/shanebeestudios/survival/api/events/EnergyLevelChangeEvent.java b/src/main/java/com/shanebeestudios/survival/api/events/EnergyLevelChangeEvent.java index a756201..1da955a 100644 --- a/src/main/java/com/shanebeestudios/survival/api/events/EnergyLevelChangeEvent.java +++ b/src/main/java/com/shanebeestudios/survival/api/events/EnergyLevelChangeEvent.java @@ -4,6 +4,7 @@ import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; /** * Called when a player's energy level changes @@ -20,7 +21,7 @@ public class EnergyLevelChangeEvent extends Event implements Cancellable { public EnergyLevelChangeEvent(Player player, double changed, double level) { this.player = player; this.changed = changed; - this.level = level; + this.level = Math.clamp(level, 0, 20); this.isCancelled = false; } @@ -49,7 +50,7 @@ public static HandlerList getHandlerList() { return handlers; } @Override - public HandlerList getHandlers() { + public @NotNull HandlerList getHandlers() { return handlers; } diff --git a/src/main/java/com/shanebeestudios/survival/api/events/ThirstLevelChangeEvent.java b/src/main/java/com/shanebeestudios/survival/api/events/ThirstLevelChangeEvent.java index 23bc66a..0abb5d7 100644 --- a/src/main/java/com/shanebeestudios/survival/api/events/ThirstLevelChangeEvent.java +++ b/src/main/java/com/shanebeestudios/survival/api/events/ThirstLevelChangeEvent.java @@ -21,7 +21,7 @@ public class ThirstLevelChangeEvent extends Event implements Cancellable { public ThirstLevelChangeEvent(Player player, double changed, double thirst) { this.player = player; this.changed = changed; - this.thirst = thirst; + this.thirst = Math.clamp(thirst, 0, 40); this.isCancelled = false; } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java index cd1cd5f..101e725 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java @@ -71,10 +71,7 @@ private void onConsume(PlayerItemConsumeEvent event) { } if (change <= 0) return; - ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() + change); - if (thirstEvent.callEvent()) { - playerData.increaseThirst(change); - } + playerData.increaseThirst(change); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { if (!this.config.mechanics_status_scoreboard) { diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java index f344863..e5c2831 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java @@ -73,11 +73,7 @@ private void onExhausted(EntityExhaustionEvent event) { double modifier = this.config.mechanics_energy_exhaustion; if (modifier <= 0) return; - PlayerData playerData = playerManager.getPlayerData(player); - EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, -modifier, playerData.getEnergy() - modifier); - if (!energyEvent.callEvent()) return; - - playerData.increaseEnergy(-modifier); + this.playerManager.getPlayerData(player).increaseEnergy(-modifier); } // Send messages when energy level decreases diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java index f1d786d..0482b0c 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java @@ -1,10 +1,9 @@ package com.shanebeestudios.survival.plugin.listeners.player; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.api.events.ThirstLevelChangeEvent; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -40,11 +39,7 @@ private void onExhaustionReached(EntityExhaustionEvent event) { // Prevent calling thirst event if there is no change if (change == 0) return; - // Call thirst level change event - ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); - if (thirstEvent.callEvent()) { - playerData.increaseThirst(-change); - } + playerData.increaseThirst(-change); } @@ -58,7 +53,6 @@ private void onRespawn(PlayerRespawnEvent event) { PlayerData playerData = this.playerManager.getPlayerData(player); double thirst = this.config.mechanics_thirst_respawn_amount; playerData.setThirst(thirst); - this.playerManager.getPlayerData(player).setThirst(thirst); double hunger = this.config.mechanics_hunger_respawn_amount; Bukkit.getScheduler().runTaskLater(this.plugin, () -> playerData.setHunger(hunger), 1); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/managers/PlayerManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/PlayerManager.java index f842e3b..93e4edc 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/managers/PlayerManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/PlayerManager.java @@ -67,16 +67,15 @@ public Collection getAllPlayerData() { * @return Newly created player data */ public PlayerData createNewPlayerData(Player player) { - UUID uuid = player.getUniqueId(); setHunger(player, this.config.mechanics_hunger_start_amount); - PlayerData playerData = new PlayerData(uuid, + PlayerData playerData = new PlayerData(player, this.config.mechanics_thirst_starting_amount, this.config.mechanics_food_start_protein, this.config.mechanics_food_start_carbs, this.config.mechanics_food_start_vitamins, this.config.mechanics_energy_start); - this.playerDataMap.put(uuid, playerData); + this.playerDataMap.put(player.getUniqueId(), playerData); savePlayerData(playerData); return playerData; } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java index e09fe44..3775b00 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java @@ -42,10 +42,10 @@ public void run() { if (environment == Environment.NORMAL && world.isDayTime()) { Block block = player.getLocation().getBlock(); if (block.getTemperature() >= 1.5 && block.getLightLevel() >= 14) { - drain(player, playerData, this.config.mechanics_thirst_heat_drain_rate); + playerData.increaseThirst(-this.config.mechanics_thirst_heat_drain_rate); } } else if (environment == Environment.NETHER) { - drain(player, playerData, this.config.mechanics_thirst_nether_drain_rate); + playerData.increaseThirst(-this.config.mechanics_thirst_nether_drain_rate); } // Damage player when thirst is too low if (playerData.getThirst() <= 0) { @@ -66,12 +66,4 @@ public void run() { } } - private void drain(Player player, PlayerData playerData, double change) { - // Call thirst level change event - ThirstLevelChangeEvent event = new ThirstLevelChangeEvent(player, change, playerData.getThirst() - change); - if (event.callEvent()) { - playerData.increaseThirst(-change); - } - } - } From c255943e3ef2259577557f2bc03f77cbac9cad8a Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 13:39:47 -0800 Subject: [PATCH 118/133] PlayerData - immunity minutes for newbies --- .../survival/api/data/PlayerData.java | 42 +++++++++++++------ .../survival/plugin/config/Config.java | 6 +++ src/main/resources/config.yml | 22 ++++++++-- 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java index fc02e42..697939b 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java @@ -8,6 +8,7 @@ import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Statistic; import org.bukkit.World; import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.SerializableAs; @@ -111,12 +112,17 @@ public void setThirst(double thirst) { /** * Increase the thirst for this data * - * @param thirst Level of thirst to add + * @param change Level of thirst to add */ - public void increaseThirst(double thirst) { - ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(this.player, thirst, getThirst() + thirst); + public void increaseThirst(double change) { + int immunityMinutes = this.config.mechanics_thirst_immunity_minutes; + if (change < 0 && immunityMinutes > 0) { + int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; + if (immunityMinutes > secondsPlayed) return; + } + ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(this.player, change, getThirst() + change); if (!thirstEvent.callEvent()) return; - setThirst(this.thirst + thirst); + setThirst(this.thirst + change); } /** @@ -172,18 +178,23 @@ public void setNutrients(int carbs, int proteins, int vitamins) { * Increase a nutrient for this data * * @param nutrient Nutrient to increase - * @param value Level of increase + * @param change Level of increase */ - public void increaseNutrient(Nutrient nutrient, int value) { + public void increaseNutrient(Nutrient nutrient, int change) { + int immunityMinutes = this.config.mechanics_food_immunity_minutes; + if (change < 0 && immunityMinutes > 0) { + int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; + if (immunityMinutes > secondsPlayed) return; + } switch (nutrient) { case PROTEIN: - this.proteins = Math.clamp(this.proteins + value, 0, this.config.mechanics_food_max_level); + this.proteins = Math.clamp(this.proteins + change, 0, this.config.mechanics_food_max_level); break; case CARBS: - this.carbs = Math.clamp(this.carbs + value, 0, this.config.mechanics_food_max_level); + this.carbs = Math.clamp(this.carbs + change, 0, this.config.mechanics_food_max_level); break; case VITAMINS: - this.vitamins = Math.clamp(this.vitamins + value, 0, this.config.mechanics_food_max_level); + this.vitamins = Math.clamp(this.vitamins + change, 0, this.config.mechanics_food_max_level); break; default: throw new IllegalArgumentException("Unexpected value: " + nutrient); @@ -212,12 +223,17 @@ public void setEnergy(double energy) { /** * Increase the energy level for this data * - * @param energy Energy amount to increase + * @param change Energy amount to increase */ - public void increaseEnergy(double energy) { - EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, energy, getEnergy() + energy); + public void increaseEnergy(double change) { + int immunityMinutes = this.config.mechanics_energy_immunity_minutes; + if (change < 0 && immunityMinutes > 0) { + int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; + if (immunityMinutes > secondsPlayed) return; + } + EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, change, getEnergy() + change); if (!energyEvent.callEvent()) return; - setEnergy(this.energy + energy); + setEnergy(this.energy + change); } /** diff --git a/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java b/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java index 8075418..2d6524c 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java @@ -67,6 +67,7 @@ public class Config { public boolean mechanics_energy_enabled; public double mechanics_energy_start; public double mechanics_energy_respawn; + public int mechanics_energy_immunity_minutes; public boolean mechanics_energy_warning; public double mechanics_energy_drain_rate; public double mechanics_energy_drain_cold_rate; @@ -100,6 +101,7 @@ public class Config { public int mechanics_food_start_carbs; public int mechanics_food_start_protein; public int mechanics_food_start_vitamins; + public int mechanics_food_immunity_minutes; public int mechanics_food_respawn_proteins; public int mechanics_food_respawn_vitamins; public int mechanics_food_respawn_carbs; @@ -125,6 +127,7 @@ public class Config { public boolean mechanics_thirst_enabled; public double mechanics_thirst_starting_amount; public double mechanics_thirst_respawn_amount; + public int mechanics_thirst_immunity_minutes; public boolean mechanics_thirst_purify_water; public boolean mechanics_thirst_melt_snow; public double mechanics_thirst_drain_rate; @@ -329,6 +332,7 @@ private void loadSettings() { this.mechanics_beet_strength = this.settings.getBoolean("mechanics.beetroot-strength"); this.mechanics_food_diversity_enabled = this.settings.getBoolean("mechanics.food-diversity.enabled"); + this.mechanics_food_immunity_minutes = this.settings.getInt("mechanics.food-diversity.immunity-minutes"); this.mechanics_food_max_level = this.settings.getInt("mechanics.food-diversity.max-level"); this.mechanics_food_diversity_enabled = this.settings.getBoolean("mechanics.food-diversity.enabled"); this.mechanics_food_start_carbs = this.settings.getInt("mechanics.food-diversity.start-level.carbs"); @@ -360,6 +364,7 @@ private void loadSettings() { this.mechanics_thirst_enabled = this.settings.getBoolean("mechanics.thirst.enabled"); this.mechanics_thirst_starting_amount = this.settings.getDouble("mechanics.thirst.starting-amount"); this.mechanics_thirst_respawn_amount = this.settings.getDouble("mechanics.thirst.respawn-amount"); + this.mechanics_thirst_immunity_minutes = this.settings.getInt("mechanics.thirst.immunity-minutes"); this.mechanics_thirst_purify_water = this.settings.getBoolean("mechanics.thirst.purify-water"); this.mechanics_thirst_melt_snow = this.settings.getBoolean("mechanics.thirst.melt-snow"); this.mechanics_thirst_drain_rate = this.settings.getDouble("mechanics.thirst.drain-rate"); @@ -380,6 +385,7 @@ private void loadSettings() { this.mechanics_energy_enabled = this.settings.getBoolean("mechanics.energy.enabled"); this.mechanics_energy_start = this.settings.getDouble("mechanics.energy.start-level"); this.mechanics_energy_respawn = this.settings.getDouble("mechanics.energy.respawn-level"); + this.mechanics_energy_immunity_minutes = this.settings.getInt("mechanics.energy.immunity-minutes"); this.mechanics_energy_warning = this.settings.getBoolean("mechanics.energy.warning"); this.mechanics_energy_drain_rate = this.settings.getDouble("mechanics.energy.drain-rate"); this.mechanics_energy_drain_cold_rate = this.settings.getDouble("mechanics.energy.cold-drain-rate"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index caa9da0..85e849a 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -143,6 +143,11 @@ mechanics: proteins: 120 carbs: 480 vitamins: 180 + # The amount of minutes a new player will be immune to food diversity effects + # This gives the player time to understand the game and prepare for food diversity changes + # Default = 40 minutes = 2 Minecraft days + # Set to 0 to disable + immunity-minutes: 40 # Each nutrition section has different effects when player's levels are too low effects: carbs: @@ -186,6 +191,12 @@ mechanics: starting-amount: 30.0 # The level of thirst a player gets after respawning (max = 40) respawn-amount: 30.0 + # The amount of minutes a new player will be immune to thirst effects + # This gives the player time to understand the game and prepare for thirst changes + # During this time the player can drink and do any water related tasks, but their thirst won't drop + # Default = 40 minutes = 2 Minecraft days + # Set to 0 to disable + immunity-minutes: 40 # Enables 5 different levels of water (dirty, salty, murky, clean, purified) purify-water: true # Unused (maybe for the future?!?!) @@ -228,6 +239,11 @@ mechanics: start-level: 20.0 # The amount of energy a player will get after they respawn (out of 20.0) respawn-level: 20.0 + # The amount of minutes a new player will be immune to energy effects + # This gives the player time to understand the game and prepare for energy changes + # Default = 40 minutes = 2 Minecraft days + # Set to 0 to disable + immunity-minutes: 40 # Warn the player via message when energy starts dropping below 10 warning: true # The amount of energy a player loses every 5 seconds of gameplay @@ -237,15 +253,15 @@ mechanics: # Default (0.015) equivalent to 3.6 levels in 1 MC day (20 minutes) # Setting to 0 will disable this cold-drain-rate: 0.015 + # Players doing exhaustive tasks (such as mining, running, jumping) will lose energy quicker + # Amount to drop per exhaustion reset (set to 0 to disable) + exhaustion: 0.15 # Every 5 seconds a player spends in bed, the level of energy to increase # Default (0.83) equivalent to 10 levels in 1 minute sleeping-refresh-rate: 0.83 # Every 5 seconds a player spends sitting in a chair, the level of energy to increase # (Will only work if chairs are enabled) chair-refresh-rate: 0.25 # Default (0.41) equivalent to 3 levels in 1 minute - # Players doing exhaustive tasks (such as mining, running, jumping) will lose energy quicker - # Amount to drop per exhaustion reset (set to 0 to disable) - exhaustion: 0.15 # Enables coffee recipes and effects (Drink coffee to regain energy) coffee: true # Player will get a few minutes of absorption when their energy is high From dac131285fe23ff4479f2681c611b57996d7986e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 15:12:47 -0800 Subject: [PATCH 119/133] change how bypass perms are used - seemed to cause a bit too much time to check perms --- .../survival/api/data/Permissions.java | 1 - .../survival/api/data/PlayerData.java | 44 +++++++++++++------ .../listeners/item/DrinkableItemListener.java | 7 +-- .../listeners/item/FoodDiversityConsume.java | 16 +++---- .../plugin/listeners/player/EnergyChange.java | 21 ++++----- .../listeners/player/ThirstListener.java | 3 -- .../survival/plugin/tasks/EnergyDrain.java | 14 +++--- .../plugin/tasks/NutrientsEffect.java | 2 - .../survival/plugin/tasks/ThirstTask.java | 6 +-- 9 files changed, 55 insertions(+), 59 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/data/Permissions.java b/src/main/java/com/shanebeestudios/survival/api/data/Permissions.java index 0b202a1..f2c2c20 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/Permissions.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Permissions.java @@ -33,7 +33,6 @@ public boolean has(CommandSender sender) { // Bypass permissions public static final Permission BYPASS_STAT_ENERGY = getBypass("stat.energy", "Bypass energy stats"); - public static final Permission BYPASS_STAT_HUNGER = getBypass("stat.hunger", "Bypass hunger stats"); public static final Permission BYPASS_STAT_NUTRITION = getBypass("stat.nutrition", "Bypass nutrition stats"); public static final Permission BYPASS_REQUIRED_TOOLS = getBypass("required_tools", "Bypass required tools"); public static final Permission BYPASS_STAT_THIRST = getBypass("stat.thirst", "Bypass thirst stats"); diff --git a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java index 697939b..36eebd0 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/PlayerData.java @@ -59,6 +59,9 @@ public class PlayerData implements ConfigurationSerializable { private boolean score_energy = true; private boolean score_nutrients = true; + // Bypasses + private final Map bypasses = new HashMap<>(); + /** * @hidden Shouldn't be using this constructor outside the plugin */ @@ -71,6 +74,9 @@ public PlayerData(Player player, double thirst, int proteins, int carbs, int vit this.carbs = carbs; this.vitamins = vitamins; this.energy = Math.clamp(energy, 0, 20); + this.bypasses.put(Info.ENERGY, Permissions.BYPASS_STAT_ENERGY.has(player)); + this.bypasses.put(Info.THIRST, Permissions.BYPASS_STAT_THIRST.has(player)); + this.bypasses.put(Info.NUTRIENTS, Permissions.BYPASS_STAT_NUTRITION.has(player)); } /** @@ -115,10 +121,14 @@ public void setThirst(double thirst) { * @param change Level of thirst to add */ public void increaseThirst(double change) { - int immunityMinutes = this.config.mechanics_thirst_immunity_minutes; - if (change < 0 && immunityMinutes > 0) { - int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; - if (immunityMinutes > secondsPlayed) return; + if (change < 0) { + int immunityMinutes = this.config.mechanics_thirst_immunity_minutes; + if (this.bypasses.get(Info.THIRST)) { + return; + } else if (immunityMinutes > 0) { + int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; + if (immunityMinutes > secondsPlayed) return; + } } ThirstLevelChangeEvent thirstEvent = new ThirstLevelChangeEvent(this.player, change, getThirst() + change); if (!thirstEvent.callEvent()) return; @@ -178,13 +188,17 @@ public void setNutrients(int carbs, int proteins, int vitamins) { * Increase a nutrient for this data * * @param nutrient Nutrient to increase - * @param change Level of increase + * @param change Level of increase */ public void increaseNutrient(Nutrient nutrient, int change) { - int immunityMinutes = this.config.mechanics_food_immunity_minutes; - if (change < 0 && immunityMinutes > 0) { - int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; - if (immunityMinutes > secondsPlayed) return; + if (change < 0) { + int immunityMinutes = this.config.mechanics_food_immunity_minutes; + if (this.bypasses.get(Info.NUTRIENTS)) { + return; + } else if (immunityMinutes > 0) { + int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; + if (immunityMinutes > secondsPlayed) return; + } } switch (nutrient) { case PROTEIN: @@ -226,10 +240,14 @@ public void setEnergy(double energy) { * @param change Energy amount to increase */ public void increaseEnergy(double change) { - int immunityMinutes = this.config.mechanics_energy_immunity_minutes; - if (change < 0 && immunityMinutes > 0) { - int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; - if (immunityMinutes > secondsPlayed) return; + if (change < 0) { + int immunityMinutes = this.config.mechanics_energy_immunity_minutes; + if (this.bypasses.get(Info.ENERGY)) { + return; + } else if (immunityMinutes > 0) { + int secondsPlayed = this.player.getStatistic(Statistic.PLAY_ONE_MINUTE) / 20 / 60; + if (immunityMinutes > secondsPlayed) return; + } } EnergyLevelChangeEvent energyEvent = new EnergyLevelChangeEvent(player, change, getEnergy() + change); if (!energyEvent.callEvent()) return; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java index 101e725..6cfe200 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DrinkableItemListener.java @@ -1,13 +1,11 @@ package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.api.events.ThirstLevelChangeEvent; import com.shanebeestudios.survival.api.item.Item; import com.shanebeestudios.survival.api.item.Items; import com.shanebeestudios.survival.api.item.items.drinks.DrinkItem; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -32,7 +30,6 @@ public DrinkableItemListener(SurvivalPlugin plugin) { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onConsume(PlayerItemConsumeEvent event) { final Player player = event.getPlayer(); - if (Permissions.BYPASS_STAT_THIRST.has(player)) return; PlayerData playerData = playerManager.getPlayerData(player); ItemStack itemStack = event.getItem(); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FoodDiversityConsume.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FoodDiversityConsume.java index fdfbd98..72586e3 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FoodDiversityConsume.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/FoodDiversityConsume.java @@ -1,6 +1,12 @@ package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.Nutrient; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.item.Nutrition; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -16,13 +22,6 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.api.data.Nutrient; -import com.shanebeestudios.survival.api.item.Nutrition; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.api.util.Utils; public class FoodDiversityConsume implements Listener { @@ -40,7 +39,6 @@ public FoodDiversityConsume(SurvivalPlugin plugin) { @EventHandler // Decrease nutrients when player does exhaustive tasks private void onExhausted(EntityExhaustionEvent event) { Player player = (Player) event.getEntity(); - if (Permissions.BYPASS_STAT_NUTRITION.has(player)) return; float exhaustion = event.getExhaustion(); if (player.getExhaustion() + exhaustion < 4.0f) return; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java index e5c2831..520bcad 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/EnergyChange.java @@ -1,6 +1,13 @@ package com.shanebeestudios.survival.plugin.listeners.player; -import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.events.EnergyLevelChangeEvent; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -9,14 +16,6 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.world.TimeSkipEvent; import org.bukkit.inventory.ItemStack; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.plugin.config.Lang; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.api.events.EnergyLevelChangeEvent; -import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.api.util.Utils; public class EnergyChange implements Listener { @@ -36,7 +35,6 @@ private void onRespawn(PlayerRespawnEvent event) { Player player = event.getPlayer(); if (Utils.isCitizensNPC(player)) return; - if (Permissions.BYPASS_STAT_ENERGY.has(player)) return; PlayerData playerData = this.playerManager.getPlayerData(player); @@ -51,7 +49,6 @@ private void onRespawn(PlayerRespawnEvent event) { private void onDrinkCoffee(PlayerItemConsumeEvent event) { ItemStack item = event.getItem(); Player player = event.getPlayer(); - if (Permissions.BYPASS_STAT_ENERGY.has(player)) return; PlayerData playerData = this.playerManager.getPlayerData(player); @@ -65,7 +62,6 @@ private void onDrinkCoffee(PlayerItemConsumeEvent event) { @EventHandler // Decrease energy when player does exhaustive tasks private void onExhausted(EntityExhaustionEvent event) { Player player = (Player) event.getEntity(); - if (Permissions.BYPASS_STAT_ENERGY.has(player)) return; float exhaustion = event.getExhaustion(); if (player.getExhaustion() + exhaustion < 4.0f) return; @@ -111,7 +107,6 @@ private void onSkipNight(TimeSkipEvent event) { if (event.getSkipReason() != TimeSkipEvent.SkipReason.NIGHT_SKIP) return; for (Player player : event.getWorld().getPlayers()) { - if (Permissions.BYPASS_STAT_ENERGY.has(player)) continue; if (!player.isSleeping()) continue; PlayerData playerData = this.playerManager.getPlayerData(player); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java index 0482b0c..f001f12 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/player/ThirstListener.java @@ -1,6 +1,5 @@ package com.shanebeestudios.survival.plugin.listeners.player; -import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.data.PlayerData; import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.config.Config; @@ -27,7 +26,6 @@ public ThirstListener(SurvivalPlugin plugin) { @EventHandler private void onExhaustionReached(EntityExhaustionEvent event) { Player player = (Player) event.getEntity(); - if (Permissions.BYPASS_STAT_THIRST.has(player)) return; float exhaustion = event.getExhaustion(); if (player.getExhaustion() + exhaustion < 4.0f) return; @@ -48,7 +46,6 @@ private void onRespawn(PlayerRespawnEvent event) { if (event.getRespawnReason() != PlayerRespawnEvent.RespawnReason.DEATH) return; Player player = event.getPlayer(); - if (Permissions.BYPASS_STAT_THIRST.has(player)) return; PlayerData playerData = this.playerManager.getPlayerData(player); double thirst = this.config.mechanics_thirst_respawn_amount; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/EnergyDrain.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/EnergyDrain.java index ca34727..b417626 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/EnergyDrain.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/EnergyDrain.java @@ -1,6 +1,11 @@ package com.shanebeestudios.survival.plugin.tasks; -import com.shanebeestudios.survival.api.data.Permissions; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.World.Environment; @@ -11,12 +16,6 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.plugin.config.Lang; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.api.util.Utils; public class EnergyDrain extends BukkitRunnable { @@ -39,7 +38,6 @@ public EnergyDrain(SurvivalPlugin plugin) { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { - if (Permissions.BYPASS_STAT_ENERGY.has(player)) continue; PlayerData playerData = playerManager.getPlayerData(player); GameMode mode = player.getGameMode(); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java index 17180bd..dc29eb1 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/NutrientsEffect.java @@ -1,7 +1,6 @@ package com.shanebeestudios.survival.plugin.tasks; import com.shanebeestudios.survival.api.data.Nutrient; -import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.data.PlayerData; import com.shanebeestudios.survival.api.util.Utils; import com.shanebeestudios.survival.plugin.SurvivalPlugin; @@ -37,7 +36,6 @@ class NutrientsEffect extends BukkitRunnable { @Override public void run() { for (Player player : Bukkit.getOnlinePlayers()) { - if (Permissions.BYPASS_STAT_NUTRITION.has(player)) continue; if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; World world = player.getWorld(); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java index 3775b00..6f52e8d 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/tasks/ThirstTask.java @@ -1,10 +1,8 @@ package com.shanebeestudios.survival.plugin.tasks; +import com.shanebeestudios.survival.api.data.PlayerData; import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.api.data.Permissions; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.api.events.ThirstLevelChangeEvent; import com.shanebeestudios.survival.plugin.managers.PlayerManager; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -32,8 +30,6 @@ class ThirstTask extends BukkitRunnable { @Override public void run() { for (Player player : Bukkit.getServer().getOnlinePlayers()) { - if (Permissions.BYPASS_STAT_THIRST.has(player)) continue; - if (player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) continue; PlayerData playerData = this.playerManager.getPlayerData(player); From ea59f933c59882325e28fbd6ac209bc0dc0d50e5 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 15:23:40 -0800 Subject: [PATCH 120/133] Config - wrong value for hammer --- .../java/com/shanebeestudios/survival/plugin/config/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java b/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java index 2d6524c..6fe7531 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/Config.java @@ -302,7 +302,7 @@ private void loadSettings() { this.survival_break_only_with_axe = this.settings.getBoolean("survival.break-only-with.axe"); this.survival_break_only_with_pickaxe = this.settings.getBoolean("survival.break-only-with.pickaxe"); this.survival_break_only_with_shears = this.settings.getBoolean("survival.break-only-with.shears"); - this.survival_place_only_with_hammer = this.settings.getBoolean("survival.place-only_with.hammer"); + this.survival_place_only_with_hammer = this.settings.getBoolean("survival.place-only-with.hammer"); this.survival_sickle_flint = this.settings.getBoolean("survival.sickles.flint"); this.survival_sickle_stone = this.settings.getBoolean("survival.sickles.stone"); From 48a43d164c0981c32b26007a43a414016bca3106 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 15:28:20 -0800 Subject: [PATCH 121/133] BlockPlaceListener - fix backward condition --- .../survival/plugin/listeners/block/BlockPlaceListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java index 8820087..1175e49 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java @@ -46,7 +46,7 @@ private void onBlockPlace(BlockPlaceEvent event) { ItemStack offTool = player.getInventory().getItemInOffHand(); Block block = event.getBlock(); - if (BlockTags.REQUIRES_HAMMER.isTagged(block.getType())) return; + if (!BlockTags.REQUIRES_HAMMER.isTagged(block.getType())) return; if (Items.HAMMER.is(offTool)) { int chance_reduceDur = this.random.nextInt(10) + 1; From 4b9a637edfc30dfcf64a3f1c315a0f41745902d7 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 16:05:07 -0800 Subject: [PATCH 122/133] Hammer upgrades --- .../survival/api/item/items/tools/Hammer.java | 15 +++++-- .../listeners/block/BlockPlaceListener.java | 39 +++---------------- src/main/resources/items.yml | 4 +- src/main/resources/lang_EN.yml | 2 +- 4 files changed, 20 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java index fc5fbc0..ff2a700 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java @@ -2,26 +2,33 @@ import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import io.papermc.paper.datacomponent.item.Tool; import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.attribute.AttributeModifier.Operation; +import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; public class Hammer extends Item { @SuppressWarnings("UnstableApiUsage") public Hammer() { - ItemStack itemStack = ItemType.WOODEN_AXE.createItemStack(); - ItemMeta hammerMeta = itemStack.getItemMeta(); - itemStack.setItemMeta(hammerMeta); + ItemStack itemStack = ItemType.STICK.createItemStack(); itemStack.setData(DataComponentTypes.TOOL, Tool.tool() .defaultMiningSpeed(0.0001f) .build()); + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE, 2.5d, Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND)) + .addModifier(Attribute.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED, -3.0d, Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND)) + .build()); + setupDefaults("hammer", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java index 1175e49..57ce0c5 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java @@ -1,31 +1,24 @@ package com.shanebeestudios.survival.plugin.listeners.block; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.managers.MessageManager; import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; -import com.shanebeestudios.survival.api.util.BlockTags; -import com.shanebeestudios.survival.api.util.ItemUtils; import org.bukkit.GameMode; -import org.bukkit.Sound; -import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; - -import java.util.Random; public class BlockPlaceListener implements Listener { private final Config config; private final MessageManager messageManager; - private final Random random = new Random(); public BlockPlaceListener(SurvivalPlugin plugin) { this.config = plugin.getSurvivalConfig(); @@ -41,33 +34,11 @@ private void onBlockPlace(BlockPlaceEvent event) { Player player = event.getPlayer(); if (Permissions.BYPASS_REQUIRED_TOOLS.has(player)) return; if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) return; + if (!BlockTags.REQUIRES_HAMMER.isTagged(event.getBlock().getType())) return; - ItemStack mainTool = player.getInventory().getItemInMainHand(); ItemStack offTool = player.getInventory().getItemInOffHand(); - Block block = event.getBlock(); - - if (!BlockTags.REQUIRES_HAMMER.isTagged(block.getType())) return; - if (Items.HAMMER.is(offTool)) { - int chance_reduceDur = this.random.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ItemUtils.setDurability(offTool, ItemUtils.getDurability(offTool) + 1); - } - - if (ItemUtils.getDurability(offTool) >= offTool.getType().getMaxDurability()) { - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInOffHand(null); - } - } else if (Items.HAMMER.is(mainTool)) { - int chance_reduceDur = this.random.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ItemUtils.setDurability(mainTool, ((Damageable) mainTool.getItemMeta()).getDamage() + 1); - } - - if (ItemUtils.getDurability(mainTool) >= mainTool.getType().getMaxDurability()) { - player.getLocation().getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, this.random.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInMainHand(null); - } + offTool.damage(1, player); } else { event.setCancelled(true); player.updateInventory(); diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 8f7dfc8..6ffed82 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -59,9 +59,11 @@ items: repair_percent: 0.85 hammer: name: "Hammer" - max_damage: 50 + max_damage: 200 repair_cost: 0 repair_percent: 0.85 + lore: + - "<#F39516>Required in your off-hand for building" hatchet: name: "Hatchet" max_damage: 50 diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index 222ddbf..df3133c 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -29,7 +29,7 @@ task-must-use-shovel: "You must use a shovel to dig this." task-must-use-axe: "You must use an axe to chop this." task-must-use-pick: "You must use a pick to mine this." task-must-use-shear: "You must use shears to cut this." -task-must-use-hammer: "You must use a hammer to construct this." +task-must-use-hammer: "You must use a hammer in your off-hand to construct this." task-must-use-sickle: "You must use a sickle to harvest this." charge: "CHARGE!" From 8d259844694a99f7f1bb6f7e22f9aad74e8515bf Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 16:45:35 -0800 Subject: [PATCH 123/133] BlockBreakListener - change up damaging sickles --- .../listeners/block/BlockBreakListener.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java index 255a81c..fcf1e6c 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java @@ -1,14 +1,14 @@ package com.shanebeestudios.survival.plugin.listeners.block; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.plugin.managers.MessageManager; -import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; import com.shanebeestudios.survival.api.util.BlockTags; import com.shanebeestudios.survival.api.util.ItemUtils; import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Config; +import com.shanebeestudios.survival.plugin.managers.MessageManager; +import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Location; @@ -192,7 +192,6 @@ private void onHarvest(PlayerInteractEvent e) { int berries = 0; Location loc = block.getLocation(); assert loc.getWorld() != null; - int multiplier = 1; e.setCancelled(true); int random = new Random().nextInt(5) + 1; @@ -200,7 +199,6 @@ private void onHarvest(PlayerInteractEvent e) { if (bush.getAge() == 3) { berries = 1; } - multiplier = 4; } else if (Items.STONE_SICKLE.is(tool)) { if (bush.getAge() == 2) { if (random <= 4) berries = 1; @@ -208,7 +206,6 @@ private void onHarvest(PlayerInteractEvent e) { if (random <= 3) berries = 1; else berries = 2; } - multiplier = 2; } else if (Items.IRON_SICKLE.is(tool) || Items.DIAMOND_SICKLE.is(tool)) { if (bush.getAge() == 2) { if (random <= 3) berries = 1; @@ -223,13 +220,8 @@ private void onHarvest(PlayerInteractEvent e) { bush.setAge(1); block.setBlockData(bush); - int durability = ItemUtils.getDurability(tool) + multiplier; - ItemUtils.setDurability(tool, durability); player.playSound(loc, Sound.BLOCK_SWEET_BERRY_BUSH_PICK_BERRIES, 1, 1); - if (durability >= tool.getType().getMaxDurability()) { - player.getInventory().setItemInMainHand(null); - player.playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); - } + ItemUtils.damageItem(player, tool, 1); } } } From bc1175fab4615e557da5cbab5f28c03966a500d8 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 16:50:28 -0800 Subject: [PATCH 124/133] ItemUtils - add method to get max damage of an item --- .../survival/api/util/ItemUtils.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/util/ItemUtils.java b/src/main/java/com/shanebeestudios/survival/api/util/ItemUtils.java index 9e9f8a8..39b2dc0 100644 --- a/src/main/java/com/shanebeestudios/survival/api/util/ItemUtils.java +++ b/src/main/java/com/shanebeestudios/survival/api/util/ItemUtils.java @@ -1,14 +1,13 @@ package com.shanebeestudios.survival.api.util; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.Component; import org.bukkit.Sound; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.api.item.Item; import java.util.Map; import java.util.Random; @@ -21,19 +20,6 @@ public class ItemUtils { private static final Random RANDOM = new Random(); - /** - * Set the durability of an ItemStack - * - * @param item The ItemStack to set - * @param durability The durability to set - */ - public static void setDurability(ItemStack item, int durability) { - ItemMeta meta = item.getItemMeta(); - assert meta != null; - ((Damageable) meta).setDamage(durability); - item.setItemMeta(meta); - } - /** * Check the durability of an ItemStack * @@ -51,6 +37,20 @@ public static int getDurability(ItemStack item) { return 0; } + /** + * Get the max damage of an ItemStack + * + * @param item Item to get max from + * @return Max damage of item + */ + public static int getMaxDamage(ItemStack item) { + if (item.hasData(DataComponentTypes.MAX_DAMAGE)) { + Integer maxDamage = item.getData(DataComponentTypes.MAX_DAMAGE); + return maxDamage == null ? 0 : maxDamage; + } + return 0; + } + public static void damageItem(Player player, ItemStack item, int damage) { player.damageItemStack(item, damage); if (getDurability(item) <= 0) { @@ -87,7 +87,7 @@ public static Component getItemNameComponent(ItemStack itemStack) { * Apply the enchantments from an {@link Item} to an existing ItemStack * * @param itemStack Current ItemStack to apply enchantments to - * @param item Item to grab data from + * @param item Item to grab data from */ public static void applyEnchantments(ItemStack itemStack, Item item) { ItemStack from = item.getItemStack(); From ee6d3f51a234a54188d3525693f1c8bf8e518242 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Fri, 21 Feb 2025 17:21:29 -0800 Subject: [PATCH 125/133] Finally re-implement repairing --- .../survival/api/item/Item.java | 31 ++- .../plugin/listeners/item/RepairCrafting.java | 222 +++++++++--------- 2 files changed, 130 insertions(+), 123 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/item/Item.java b/src/main/java/com/shanebeestudios/survival/api/item/Item.java index 741b6f3..5c05ba5 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/Item.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Item.java @@ -1,7 +1,7 @@ package com.shanebeestudios.survival.api.item; -import com.shanebeestudios.survival.plugin.config.ItemConfig; import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.config.ItemConfig; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.DyedItemColor; import io.papermc.paper.registry.RegistryAccess; @@ -40,8 +40,8 @@ public abstract class Item { private ItemStack itemStack; private String name; - @SuppressWarnings({"FieldCanBeLocal", "unused"}) - private double repairPercent; // TODO figure this out + private double repairPercent; + private int repairCost; /** * Get an ItemStack from this item @@ -115,9 +115,9 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod } // Repair Cost - int repairCost = ITEM_CONFIG.getRepairCost(key); - if (repairCost > 0) { - itemStack.setData(DataComponentTypes.REPAIR_COST, repairCost); + this.repairCost = ITEM_CONFIG.getRepairCost(key); + if (this.repairCost > 0) { + itemStack.setData(DataComponentTypes.REPAIR_COST, this.repairCost); } // Repair Percent @@ -160,6 +160,25 @@ public boolean is(ItemStack itemStack) { return false; } + /** + * Get the repair percent of this item + *

This is used to determine output durability during repairs

+ * + * @return Repair percent of item + */ + public double getRepairPercent() { + return this.repairPercent; + } + + /** + * Get the repair cost of this item + * + * @return Repair cost of item + */ + public int getRepairCost() { + return this.repairCost; + } + /** * Get the {@link Key} of this item * diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RepairCrafting.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RepairCrafting.java index 0e44b25..96b95e1 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RepairCrafting.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/RepairCrafting.java @@ -1,124 +1,112 @@ package com.shanebeestudios.survival.plugin.listeners.item; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.ItemUtils; +import io.papermc.paper.datacomponent.DataComponentTypes; +import org.bukkit.Keyed; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.PrepareAnvilEvent; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.AnvilInventory; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("UnstableApiUsage") public class RepairCrafting implements Listener { - // TODO not sure we need this anymore?!?! - -// @EventHandler -// private void onCraft(PrepareItemCraftEvent event) { -// Recipe recipe = event.getRecipe(); -// if (recipe instanceof Keyed && ((Keyed) recipe).getKey().getNamespace().equalsIgnoreCase("survivalplus")) { -// // If this is a legit recipe, let's get outta here -// return; -// } -// CraftingInventory inventory = event.getInventory(); -// -// List items = new ArrayList<>(); -// for (ItemStack itemStack : inventory.getMatrix()) { -// if (itemStack != null) { -// items.add(itemStack); -// } -// } -// -// if (items.size() == 2) { -// ItemStack iOne = items.get(0); -// ItemStack iTwo = items.get(1); -// Item itemOne = Item.getFromStack(iOne); -// Item itemTwo = Item.getFromStack(iTwo); -// if (itemOne != null && itemOne == itemTwo) { -// ItemStack result = repair(iOne, iTwo, itemOne); -// if (inventory.getType() == InventoryType.CRAFTING || itemOne.getRepairCostMultiplier() >= 0) { -// // No repairing in player inventory -// // Cost >= 0 signifies it requires an anvil -// result = null; -// } -// // Since we're using a crafting table we're going to reset defaults -// // ie: remove enchantments -// result = resetItem(result); -// inventory.setResult(result); -// -// } else if ((itemOne != null && itemTwo == null) || (itemOne == null && itemTwo != null)) { -// // Prevent repairing custom items with vanilla items -// inventory.setResult(null); -// -// } -// } -// items.clear(); -// } -// -// @EventHandler -// private void onAnvilRepair(PrepareAnvilEvent event) { -// AnvilInventory inventory = event.getInventory(); -// ItemStack iOne = inventory.getContents()[0]; -// ItemStack iTwo = inventory.getContents()[1]; -// if (iOne != null && iTwo != null) { -// if (iOne.getType() != iTwo.getType()) { -// // If two different items, lets get outta here -// // ie: enchanting -// return; -// } -// Item itemOne = Item.getFromStack(iOne); -// Item itemTwo = Item.getFromStack(iTwo); -// // Let's make sure we're joining two of the same item -// if (itemOne != null && itemOne == itemTwo) { -// ItemStack result = repair(iOne, iTwo, itemOne); -// event.setResult(result); -// double cost = itemOne.getRepairCostMultiplier(); -// if (cost > 0) { -// inventory.setRepairCost((int) Math.round(inventory.getRepairCost() * cost)); -// } -// } else if ((itemOne != null && itemTwo == null) || (itemOne == null && itemTwo != null)) { -// // Prevent repairing custom items with vanilla items -// event.setResult(null); -// } -// } -// -// } -// -// private ItemStack repair(ItemStack itemStackOne, ItemStack itemStackTwo, Item item) { -// double repairPercent = item.getRepairPercent(); -// if (repairPercent <= 0) { -// return null; -// } -// -// ItemStack result = itemStackOne.clone(); -// double max = itemStackOne.getType().getMaxDurability(); -// int dura1 = getRemainingDurability(itemStackOne); -// int dura2 = getRemainingDurability(itemStackTwo); -// int repair = (int) Math.min((dura1 + dura2 + Math.floor(max / 20)) * repairPercent, max); -// -// ItemMeta meta = result.getItemMeta(); -// assert meta != null; -// ((Damageable) meta).setDamage((int) (max - repair)); -// result.setItemMeta(meta); -// return result; -// } -// -// private ItemStack resetItem(ItemStack itemStack) { -// Item item = Item.getFromStack(itemStack); -// -// ItemMeta itemMeta = itemStack.getItemMeta(); -// assert itemMeta != null; -// int damage = ((Damageable) itemMeta).getDamage(); -// -// assert item != null; -// ItemStack newItemStack = item.getItem(); -// ItemMeta newItemMeta = newItemStack.getItemMeta(); -// assert newItemMeta != null; -// ((Damageable) newItemMeta).setDamage(damage); -// newItemStack.setItemMeta(newItemMeta); -// -// return newItemStack; -// } -// -// private int getRemainingDurability(ItemStack itemStack) { -// ItemMeta meta = itemStack.getItemMeta(); -// -// if (meta instanceof Damageable) { -// return itemStack.getType().getMaxDurability() - ((Damageable) meta).getDamage(); -// } -// return 0; -// } + + @EventHandler + private void onCraft(PrepareItemCraftEvent event) { + Recipe recipe = event.getRecipe(); + if (recipe instanceof Keyed keyed && keyed.getKey().getNamespace().equalsIgnoreCase("survival_plus")) { + // If this is a legit recipe, let's get outta here + return; + } + CraftingInventory inventory = event.getInventory(); + + List items = new ArrayList<>(); + for (ItemStack itemStack : inventory.getMatrix()) { + if (itemStack != null) { + items.add(itemStack); + } + } + + if (items.size() == 2) { + ItemStack iOne = items.get(0); + ItemStack iTwo = items.get(1); + Item itemOne = Items.getFromStack(iOne); + Item itemTwo = Items.getFromStack(iTwo); + if (itemOne != null && itemOne == itemTwo) { + ItemStack result = repair(iOne, iTwo, itemOne.getRepairPercent()); + if (inventory.getType() == InventoryType.CRAFTING || itemOne.getRepairCost() > 0) { + // No repairing in player inventory + // Cost > 0 signifies it requires an anvil + result = null; + } + if (result != null) { + // Since we're using a crafting table we're going to reset defaults + // ie: remove enchantments + result = resetItem(itemOne, result); + } + inventory.setResult(result); + + } else if ((itemOne != null && itemTwo == null) || (itemOne == null && itemTwo != null)) { + // Prevent repairing custom items with vanilla items + inventory.setResult(null); + + } + } + items.clear(); + } + + @EventHandler + private void onAnvilRepair(PrepareAnvilEvent event) { + AnvilInventory inventory = event.getInventory(); + ItemStack slotOne = inventory.getContents()[0]; + ItemStack slotTwo = inventory.getContents()[1]; + if (slotOne != null && slotTwo != null) { + if (slotOne.getType() != slotTwo.getType()) { + // If two different items, lets get outta here + // ie: enchanting + return; + } + Item itemOne = Items.getFromStack(slotOne); + Item itemTwo = Items.getFromStack(slotTwo); + // Let's make sure we're joining two of the same item + if (itemOne != null && itemOne == itemTwo) { + ItemStack result = repair(slotOne, slotTwo, itemOne.getRepairPercent()); + event.setResult(result); + } + } + } + + private ItemStack repair(ItemStack itemStackOne, ItemStack itemStackTwo, double repairPercent) { + if (repairPercent <= 0) return null; + + ItemStack result = itemStackOne.clone(); + int max = ItemUtils.getMaxDamage(itemStackOne); + int dura1 = ItemUtils.getDurability(itemStackOne); + int dura2 = ItemUtils.getDurability(itemStackTwo); + int repair = (int) Math.min((dura1 + dura2 + Math.floor((double) max / 20)) * repairPercent, max); + + result.setData(DataComponentTypes.DAMAGE, max - repair); + return result; + } + + @SuppressWarnings("DataFlowIssue") + private ItemStack resetItem(Item baseItem, ItemStack itemStack) { + if (!itemStack.hasData(DataComponentTypes.DAMAGE)) return null; + + ItemStack newItemStack = baseItem.getItemStack(); + newItemStack.setData(DataComponentTypes.DAMAGE, itemStack.getData(DataComponentTypes.DAMAGE)); + + return newItemStack; + } } From a7a5b6680827f38fef9fe341f47527ae4d3510d5 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Tue, 25 Feb 2025 11:31:15 -0800 Subject: [PATCH 126/133] Goals - small performance fix --- .../survival/api/goals/AngryWolfGoal.java | 16 ++++++++-------- .../survival/api/goals/AvoidPlayerGoal.java | 15 ++++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/shanebeestudios/survival/api/goals/AngryWolfGoal.java b/src/main/java/com/shanebeestudios/survival/api/goals/AngryWolfGoal.java index a9b3975..c0554b3 100644 --- a/src/main/java/com/shanebeestudios/survival/api/goals/AngryWolfGoal.java +++ b/src/main/java/com/shanebeestudios/survival/api/goals/AngryWolfGoal.java @@ -12,7 +12,6 @@ import org.bukkit.GameMode; import org.bukkit.NamespacedKey; import org.bukkit.Registry; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Wolf; import org.bukkit.inventory.ItemType; @@ -62,19 +61,20 @@ public AngryWolfGoal(Wolf wolf, Type type) { @Override public boolean shouldActivate() { + // Minecraft uses this to decide if the mob should random stroll + // If they can't, they're further than 32 blocks from a player + // No need to check for players close by + if (this.wolf.getNoActionTicks() > 100) return false; + if (this.wolf.isAngry()) return false; // He's already angry if (this.type == Type.NIGHT && this.wolf.getWorld().isDayTime()) return false; - Optional any = this.wolf.getNearbyEntities(10, 7, 10) - .stream() - .filter(entity -> entity.getType() == EntityType.PLAYER) - .map(entity -> (Player) entity) - .filter(player -> player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) - .findAny(); + Optional any = this.wolf.getLocation().getNearbyPlayers(10, 7, 10, + p -> p.getGameMode() == GameMode.SURVIVAL || p.getGameMode() == GameMode.ADVENTURE) + .stream().findAny(); if (any.isEmpty()) return false; this.target = any.get(); - return shouldAttack(); } diff --git a/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java b/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java index ef003a3..0b370c8 100644 --- a/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java +++ b/src/main/java/com/shanebeestudios/survival/api/goals/AvoidPlayerGoal.java @@ -17,7 +17,6 @@ import org.bukkit.Statistic; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Mob; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemType; @@ -58,12 +57,14 @@ public AvoidPlayerGoal(Mob mob) { @Override public boolean shouldActivate() { - Optional any = this.mob.getNearbyEntities(7, 7, 7) - .stream() - .filter(entity -> entity.getType() == EntityType.PLAYER) - .map(entity -> (Player) entity) - .filter(player -> player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) - .findAny(); + // Minecraft uses this to decide if the mob should random stroll + // If they can't, they're further than 32 blocks from a player + // No need to check for players close by + if (this.mob.getNoActionTicks() > 100) return false; + + Optional any = this.mob.getLocation().getNearbyPlayers(7, 7, 7, + p -> p.getGameMode() == GameMode.SURVIVAL || p.getGameMode() == GameMode.ADVENTURE) + .stream().findAny(); if (any.isEmpty()) return false; this.avoid = any.get(); From 98262768a4b6e4ce570dd2c974a6ebce6612e93b Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Feb 2025 00:12:43 -0800 Subject: [PATCH 127/133] Massive cleanup with giant sword --- .../survival/api/data/DamageTypes.java | 18 ++ .../survival/api/data/Enchantments.java | 1 + ...leGenerator.java => TagFileGenerator.java} | 54 ++++- .../survival/api/item/Item.java | 26 +++ .../survival/api/item/Items.java | 2 +- .../item/items/legendary/EnderGiantBlade.java | 48 ++-- .../survival/api/util/ItemTags.java | 42 ++++ .../survival/plugin/SurvivalPlugin.java | 6 +- .../plugin/commands/DataGenCommand.java | 10 +- .../survival/plugin/config/ItemConfig.java | 8 + .../survival/plugin/config/Lang.java | 12 +- .../survival/plugin/data/TagGenerator.java | 79 ++++--- .../plugin/listeners/EventManager.java | 7 +- .../listeners/item/DualWieldListener.java | 103 +++++++++ .../plugin/listeners/item/GiantBlade.java | 209 ------------------ .../listeners/item/GiantBladeListener.java | 113 ++++++++++ .../plugin/listeners/item/Valkyrie.java | 10 - .../plugin/managers/EffectManager.java | 6 - .../plugin/managers/MessageManager.java | 12 + .../plugin/tasks/tool/GiantBlade.java | 88 -------- .../damage_type/ender_power.json | 5 + .../enchantment/ender_power.json | 120 ++++++++++ src/main/resources/item-tags.yml | 24 ++ src/main/resources/items.yml | 9 + src/main/resources/lang_EN.yml | 7 +- .../assets/survival_plus/lang/en_us.json | 4 + 26 files changed, 631 insertions(+), 392 deletions(-) create mode 100644 src/main/java/com/shanebeestudios/survival/api/data/DamageTypes.java rename src/main/java/com/shanebeestudios/survival/api/generator/{BlockTagFileGenerator.java => TagFileGenerator.java} (83%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/util/ItemTags.java create mode 100644 src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBlade.java create mode 100644 src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java delete mode 100644 src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/GiantBlade.java create mode 100644 src/main/resources/datapack/data/survival_plus/damage_type/ender_power.json create mode 100644 src/main/resources/datapack/data/survival_plus/enchantment/ender_power.json create mode 100644 src/main/resources/item-tags.yml create mode 100644 src/main/resources/resource-pack/assets/survival_plus/lang/en_us.json diff --git a/src/main/java/com/shanebeestudios/survival/api/data/DamageTypes.java b/src/main/java/com/shanebeestudios/survival/api/data/DamageTypes.java new file mode 100644 index 0000000..d603422 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/data/DamageTypes.java @@ -0,0 +1,18 @@ +package com.shanebeestudios.survival.api.data; + +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import net.kyori.adventure.key.Key; +import org.bukkit.damage.DamageType; + +@SuppressWarnings("UnstableApiUsage") +public class DamageTypes { + + public static final DamageType ENDER_POWER = get("ender_power"); + + private static DamageType get(String key) { + return RegistryAccess.registryAccess().getRegistry(RegistryKey.DAMAGE_TYPE) + .get(Key.key("survival_plus:" + key)); + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java index 517df91..2b62578 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java +++ b/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java @@ -11,6 +11,7 @@ public class Enchantments { public static final Enchantment BLAZING = get("blazing"); + public static final Enchantment ENDER_POWER = get("ender_power"); public static final Enchantment OBSIDIAN_POWER = get("obsidian_power"); public static final Enchantment QUARTZ_MINING = get("quartz_mining"); diff --git a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java b/src/main/java/com/shanebeestudios/survival/api/generator/TagFileGenerator.java similarity index 83% rename from src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java rename to src/main/java/com/shanebeestudios/survival/api/generator/TagFileGenerator.java index eb5b1c7..5e2ff44 100644 --- a/src/main/java/com/shanebeestudios/survival/api/generator/BlockTagFileGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/api/generator/TagFileGenerator.java @@ -1,6 +1,7 @@ package com.shanebeestudios.survival.api.generator; import io.papermc.paper.registry.keys.tags.BlockTypeTagKeys; +import io.papermc.paper.registry.keys.tags.ItemTypeTagKeys; import org.bukkit.Keyed; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -18,7 +19,7 @@ import java.util.List; @SuppressWarnings({"UnstableApiUsage", "UnusedReturnValue"}) -public class BlockTagFileGenerator { +public class TagFileGenerator { public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { File file = new File(pluginDataFolder, path); @@ -72,6 +73,44 @@ public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { } } + public FileConfiguration generateItemTags(File pluginDataFolder, String path) { + File file = new File(pluginDataFolder, path); + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + + List header = new ArrayList<>(); + + header.add("Items Tags"); + header.add("This file is used to create some tags the plugin uses."); + header.add("Modify this to your liking but be very careful when you do."); + header.add(" "); + header.add("This accepts both Minecraft item types `minecraft:diamond_sword`"); + header.add("and item tags prefixed with `#`, ex: `#minecraft:swords` (minecraft or custom)"); + header.add(" "); + header.add("The names of these sections double as namespaces."); + header.add("The `survival_plus` section will create new tags"); + header.add("Example `prevent_duel_wield` = `survival_plus:prevent_duel_wield`"); + header.add(" "); + header.add("You can optionally add a `minecraft` section to add items to current Minecraft tags"); + header.add("Example (This would add stick to the `minecraft:swords` tag):"); + header.add("minecraft:"); + header.add(" swords:"); + header.add(" - minecraft:stick"); + config.options().setHeader(header); + + ConfigurationSection items = config.getConfigurationSection("survival_plus"); + if (items == null) items = config.createSection("survival_plus"); + + createDualWieldTag(items); + + try { + config.save(file); + return config; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + // Block Tags private void createGlazedTerracottaTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); Registry.BLOCK.stream().map(Keyed::getKey) @@ -293,4 +332,17 @@ private void createRequiresHammerTag(@NotNull ConfigurationSection section) { section.setInlineComments("requires_hammer", List.of("Blocks which require a hammer to place.")); } + // ItemTags + private void createDualWieldTag(@NotNull ConfigurationSection section) { + List items = new ArrayList<>(); + items.add("#" + ItemTypeTagKeys.AXES.key()); + items.add("#" + ItemTypeTagKeys.PICKAXES.key()); + items.add("#" + ItemTypeTagKeys.HOES.key()); + items.add("#" + ItemTypeTagKeys.SHOVELS.key()); + items.add("#" + ItemTypeTagKeys.SWORDS.key()); + + section.set("prevent_dual_wield", items); + section.setInlineComments("prevent_dual_wield", List.of("Items which cannot dual wield with legendary tools.")); + } + } diff --git a/src/main/java/com/shanebeestudios/survival/api/item/Item.java b/src/main/java/com/shanebeestudios/survival/api/item/Item.java index 5c05ba5..d4e5786 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/Item.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Item.java @@ -42,6 +42,7 @@ public abstract class Item { private double repairPercent; private int repairCost; + private boolean preventDuelWield; /** * Get an ItemStack from this item @@ -123,6 +124,10 @@ protected void setupDefaults(String key, ItemStack itemStack, boolean vanillaMod // Repair Percent this.repairPercent = ITEM_CONFIG.getRepairPercent(key); this.itemStack = itemStack; + + // Prevent dual wield + this.preventDuelWield = ITEM_CONFIG.getBoolean(key, "prevent_dual_wield", false); + Items.ALL_ITEMS.put(this.key, this); } @@ -179,6 +184,15 @@ public int getRepairCost() { return this.repairCost; } + /** + * Check if an item cannot dual wield + * + * @return Whether item prevents dual wielding + */ + public boolean isPreventDuelWield() { + return this.preventDuelWield; + } + /** * Get the {@link Key} of this item * @@ -197,4 +211,16 @@ public Key getKey() { return this.name; } + @Override + public String toString() { + return "Item{" + + "key=" + key + + ", recipeKey=" + recipeKey + + ", itemStack=" + itemStack + + ", name='" + name + '\'' + + ", repairPercent=" + repairPercent + + ", repairCost=" + repairCost + + ", preventDuelWield=" + preventDuelWield + + '}'; + } } diff --git a/src/main/java/com/shanebeestudios/survival/api/item/Items.java b/src/main/java/com/shanebeestudios/survival/api/item/Items.java index dae6053..7a5df73 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/Items.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/Items.java @@ -82,7 +82,7 @@ public class Items { public static final Item VALKYRIES_AXE = new ValkyriesAxe(); public static final Item QUARTZ_PICKAXE = new QuartzPickaxe(); public static final Item OBSIDIAN_MACE = new ObsidianMace(); - public static final Item ENDER_GIANT_BLADE = new EnderGiantBlade(); + public static final EnderGiantBlade ENDER_GIANT_BLADE = new EnderGiantBlade(); public static final Item BLAZE_SWORD = new BlazeSword(); // ARMOR diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java index c0b4d36..7ff1ae4 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java @@ -1,46 +1,46 @@ package com.shanebeestudios.survival.api.item.items.legendary; +import com.shanebeestudios.survival.api.data.Enchantments; +import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; +import io.papermc.paper.datacomponent.item.ItemEnchantments; +import io.papermc.paper.datacomponent.item.UseCooldown; +import net.kyori.adventure.key.Key; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.attribute.AttributeModifier.Operation; -import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.EquipmentSlotGroup; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemType; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.ShapedRecipe; -import org.bukkit.inventory.meta.ItemMeta; -import com.shanebeestudios.survival.api.item.Item; @SuppressWarnings("UnstableApiUsage") public class EnderGiantBlade extends Item { + private final double chargeDamage; + public EnderGiantBlade() { + String key = "ender_giant_blade"; ItemStack itemStack = ItemType.DIAMOND_SWORD.createItemStack(); - ItemMeta itemMeta = itemStack.getItemMeta(); - - int gHoe_dmg = 8; - int gHoe_spd = 1; - float gHoe_move = -0.5f; - - AttributeModifier i_gHoeDamage = new AttributeModifier(BASE_ATTACK_DAMAGE, gHoe_dmg - 1, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, i_gHoeDamage); - AttributeModifier i_gHoeSpeed = new AttributeModifier(BASE_ATTACK_SPEED, gHoe_spd - 4, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND); - itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, i_gHoeSpeed); - - AttributeModifier i_gHoeMove = new AttributeModifier(BASE_MOVEMENT_SPEED, gHoe_move, Operation.ADD_SCALAR, EquipmentSlotGroup.OFFHAND); - itemMeta.addAttributeModifier(Attribute.MOVEMENT_SPEED, i_gHoeMove); - - itemMeta.addEnchant(Enchantment.UNBREAKING, 5, true); - itemStack.setItemMeta(itemMeta); - - itemStack.unsetData(DataComponentTypes.REPAIRABLE); - setupDefaults("ender_giant_blade", itemStack); + itemStack.setData(DataComponentTypes.ATTRIBUTE_MODIFIERS, ItemAttributeModifiers.itemAttributes() + .addModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE, 8f, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND)) + .addModifier(Attribute.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED, -2.5f, Operation.ADD_NUMBER, EquipmentSlotGroup.HAND)) + .addModifier(Attribute.MOVEMENT_SPEED, new AttributeModifier(BASE_MOVEMENT_SPEED, -0.5f, Operation.ADD_SCALAR, EquipmentSlotGroup.OFFHAND)) + .build()); + itemStack.setData(DataComponentTypes.ENCHANTMENTS, ItemEnchantments.itemEnchantments() + .add(Enchantments.ENDER_POWER, 3) + .build()); + + itemStack.setData(DataComponentTypes.USE_COOLDOWN, UseCooldown.useCooldown(10) + .cooldownGroup(Key.key("survival_plus:" + key)).build()); + this.chargeDamage = ITEM_CONFIG.getDouble(key, "charge_damage", 3); + setupDefaults(key, itemStack); } @Override @@ -56,4 +56,8 @@ public Recipe getRecipe() { return recipe; } + public double getChargeDamage() { + return this.chargeDamage; + } + } diff --git a/src/main/java/com/shanebeestudios/survival/api/util/ItemTags.java b/src/main/java/com/shanebeestudios/survival/api/util/ItemTags.java new file mode 100644 index 0000000..3146115 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/util/ItemTags.java @@ -0,0 +1,42 @@ +package com.shanebeestudios.survival.api.util; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Tag; +import org.jetbrains.annotations.NotNull; + +/** + * Custom item tags + *

These are created in the `item-tags.yml` file

+ */ +public class ItemTags { + + private ItemTags() { + } + + private static boolean initialized = false; + + /** + * @hidden + */ + public static void initialize() { + if (initialized) { + throw new IllegalStateException("BlockTags already initialized"); + } + initialized = true; + } + + public static final Tag PREVENT_DUAL_WIELD = getTag("prevent_dual_wield"); + + private static @NotNull Tag getTag(String key) { + NamespacedKey namespacedKey = NamespacedKey.fromString("survival_plus:" + key); + assert namespacedKey != null; + Tag tag = Bukkit.getTag(Tag.REGISTRY_ITEMS, namespacedKey, Material.class); + if (tag == null) { + throw new IllegalArgumentException("Could not find tag for " + namespacedKey.toString()); + } + return tag; + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java index d29075e..25efc88 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.plugin; +import com.shanebeestudios.survival.api.util.ItemTags; import com.shanebeestudios.survival.plugin.commands.SurvivalCommand; import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.config.Lang; @@ -127,8 +128,11 @@ public void onEnable() { Utils.logMini("Resource Pack disabled"); } - // LOAD MANAGERS + // LOAD TAGS BlockTags.initialize(); + ItemTags.initialize(); + + // LOAD MANAGERS this.playerManager = new PlayerManager(this, this.playerDataMap); this.effectManager = new EffectManager(this); this.taskManager = new TaskManager(this); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java index e181d3c..369c44c 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java @@ -4,16 +4,16 @@ import dev.jorel.commandapi.arguments.Argument; import dev.jorel.commandapi.arguments.LiteralArgument; import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.generator.BlockTagFileGenerator; +import com.shanebeestudios.survival.api.generator.TagFileGenerator; import com.shanebeestudios.survival.api.util.Utils; public class DataGenCommand extends BaseCommand { - private final BlockTagFileGenerator blockTagFileGenerator; + private final TagFileGenerator tagFileGenerator; public DataGenCommand(SurvivalPlugin plugin) { super(plugin); - this.blockTagFileGenerator = new BlockTagFileGenerator(); + this.tagFileGenerator = new TagFileGenerator(); } @Override @@ -21,10 +21,10 @@ Argument register() { return LiteralArgument.literal("datagen") .withPermission(Permissions.COMMAND_DATA_GEN.permission()) .executes(info -> { - this.blockTagFileGenerator.generateBlockTags(this.plugin.getDataFolder(), "generated/block-tags.yml"); + this.tagFileGenerator.generateBlockTags(this.plugin.getDataFolder(), "generated/block-tags.yml"); + this.tagFileGenerator.generateItemTags(this.plugin.getDataFolder(), "generated/item-tags.yml"); Utils.sendColoredMini(info.sender(), "Finished generating block-tags.yml"); }); } - } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/config/ItemConfig.java b/src/main/java/com/shanebeestudios/survival/plugin/config/ItemConfig.java index f59a8f5..da8f851 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/config/ItemConfig.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/ItemConfig.java @@ -151,6 +151,14 @@ public String getString(String itemKey, String valueKey, String defaultValue) { return defaultValue; } + public boolean getBoolean(String itemKey, String valueKey, boolean defaultValue) { + String path = "items." + itemKey + "." + valueKey; + if (this.settings.contains(path)) { + return this.settings.getBoolean(path); + } + return defaultValue; + } + void save() { try { settings.save(configFile); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/config/Lang.java b/src/main/java/com/shanebeestudios/survival/plugin/config/Lang.java index 94adabb..2e89fc9 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/config/Lang.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/config/Lang.java @@ -86,7 +86,7 @@ public class Lang { public String poisoned_enemy; public String poisoned_retain; public String reduce_50; - public String valkyrie_axe_unable_dual; + public String prevent_dual_wield; public String valkyrie_axe_spin; public String valkyrie_axe_cooldown; public String quartz_breaker; @@ -96,10 +96,6 @@ public class Lang { public String exhausted_slow; public String expire_disarm; public String knockback_resistance; - public String ender_giant_blade; - public String ender_giant_blade_unable_duel; - public String ender_giant_blade_charge; - public String ender_giant_blade_cooldown; public String half_shield_resistance; public String reflecting_coming; public String blaze_sword_fire_resistance; @@ -189,7 +185,7 @@ public void loadLangFile(CommandSender sender) { poisoned_enemy = lang.getString("poisoned-enemy"); poisoned_retain = lang.getString("poisoned-retain"); reduce_50 = lang.getString("reduce-50"); - valkyrie_axe_unable_dual = lang.getString("valkyrie-axe-unable-dual"); + prevent_dual_wield = lang.getString("prevent-dual-wield"); valkyrie_axe_spin = lang.getString("valkyrie-axe-spin"); valkyrie_axe_cooldown = lang.getString("valkyrie-axe-cooldown"); quartz_breaker = lang.getString("quartz-breaker"); @@ -199,10 +195,6 @@ public void loadLangFile(CommandSender sender) { exhausted_slow = lang.getString("exhausted-slow"); expire_disarm = lang.getString("expire-disarm"); knockback_resistance = lang.getString("knockback-resistance"); - ender_giant_blade = lang.getString("ender-giant-blade"); - ender_giant_blade_unable_duel = lang.getString("ender-giant-blade-unable-duel"); - ender_giant_blade_charge = lang.getString("ender-giant-blade-charge"); - ender_giant_blade_cooldown = lang.getString("ender-giant-blade-cooldown"); half_shield_resistance = lang.getString("half-shield-resistance"); reflecting_coming = lang.getString("reflecting-coming"); blaze_sword_fire_resistance = lang.getString("blaze-sword-fire-resistance"); diff --git a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java index d2ea753..c3513c6 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java @@ -15,11 +15,13 @@ import io.papermc.paper.tag.TagEntry; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.logger.slf4j.ComponentLogger; +import org.apache.commons.lang3.StringUtils; import org.bukkit.block.BlockType; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemType; import org.codehaus.plexus.util.FileUtils; import java.io.File; @@ -39,27 +41,29 @@ @SuppressWarnings({"UnstableApiUsage", "PatternValidation", "NullableProblems"}) public class TagGenerator { - private FileConfiguration config; + private final FileConfiguration blockTagConfig; + private final FileConfiguration itemTagConfig; public TagGenerator(BootstrapContext context) { - loadConfig(context.getDataDirectory()); + this.blockTagConfig = loadConfig(context.getDataDirectory(), "block-tags.yml"); + this.itemTagConfig = loadConfig(context.getDataDirectory(), "item-tags.yml"); loadDatapack(context); loadTags(context); } @SuppressWarnings("ResultOfMethodCallIgnored") - private void loadConfig(Path dataFolder) { - File file = new File(dataFolder.toFile(), "block-tags.yml"); + private FileConfiguration loadConfig(Path dataFolder, String ymlFile) { + File file = new File(dataFolder.toFile(), ymlFile); if (!file.exists()) { file.getParentFile().mkdirs(); - URL resource = getClass().getClassLoader().getResource("block-tags.yml"); + URL resource = getClass().getClassLoader().getResource(ymlFile); try { FileUtils.copyURLToFile(resource, file); } catch (IOException e) { throw new RuntimeException(e); } } - this.config = YamlConfiguration.loadConfiguration(file); + return YamlConfiguration.loadConfiguration(file); } private void loadDatapack(BootstrapContext context) { @@ -82,23 +86,13 @@ private void loadTags(BootstrapContext context) { // Create block tags manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.BLOCK), event -> { final PreFlattenTagRegistrar registrar = event.registrar(); + createTags(logger, registrar, this.blockTagConfig); + }); - logger.info(Utils.getMini("Tag Creation:")); - ConfigurationSection survivalPlusSection = this.config.getConfigurationSection("survival_plus"); - assert survivalPlusSection != null; - for (String key : survivalPlusSection.getKeys(false)) { - createTagFromSection(key, registrar); - logger.info(Utils.getMini("Generating block tag 'survival_plus:%s'", key)); - } - ConfigurationSection minecraftSection = this.config.getConfigurationSection("minecraft"); - if (minecraftSection == null) return; - - logger.info(Utils.getMini("Tag Mutation:")); - for (String key : minecraftSection.getKeys(false)) { - addToTagFromSection(key, registrar); - logger.info(Utils.getMini("Adding value to block tag 'minecraft:%s'", key)); - - } + // Create item tags + manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.ITEM), event -> { + final PreFlattenTagRegistrar registrar = event.registrar(); + createTags(logger, registrar, this.itemTagConfig); }); // Put our enchantments at the top of the tooltip list @@ -115,31 +109,50 @@ private void loadTags(BootstrapContext context) { }); } - private void createTagFromSection(String key, PreFlattenTagRegistrar registrar) { - List> entries = new ArrayList<>(); - for (String s : this.config.getStringList("survival_plus." + key)) { - entries.add(getTagEntry(s)); + private void createTags(ComponentLogger logger, PreFlattenTagRegistrar registrar, FileConfiguration config) { + String registerName = StringUtils.capitalize(registrar.registryKey().key().value()); + logger.info(Utils.getMini("%s Tag Creation:", registerName)); + ConfigurationSection survivalPlusSection = config.getConfigurationSection("survival_plus"); + assert survivalPlusSection != null; + for (String key : survivalPlusSection.getKeys(false)) { + createTagFromSection(key, registrar, survivalPlusSection); + logger.info(Utils.getMini("Generating tag 'survival_plus:%s'", key)); + } + ConfigurationSection minecraftSection = config.getConfigurationSection("minecraft"); + if (minecraftSection == null) return; + + logger.info(Utils.getMini("%s Tag Mutation:", registerName)); + for (String key : minecraftSection.getKeys(false)) { + addToTagFromSection(key, registrar, survivalPlusSection); + logger.info(Utils.getMini("Adding value to tag 'minecraft:%s'", key)); + } + } + + private void createTagFromSection(String key, PreFlattenTagRegistrar registrar, ConfigurationSection survivalPlusSection) { + List> entries = new ArrayList<>(); + for (String s : survivalPlusSection.getStringList( key)) { + entries.add(getTagEntry(s, registrar.registryKey())); } registrar.setTag(TagKey.create(registrar.registryKey(), Key.key("survival_plus:" + key)), entries); } - private void addToTagFromSection(String key, PreFlattenTagRegistrar registrar) { - List> entries = new ArrayList<>(); - for (String s : this.config.getStringList("minecraft." + key)) { - entries.add(getTagEntry(s)); + private void addToTagFromSection(String key, PreFlattenTagRegistrar registrar, ConfigurationSection survivalPlusSection) { + List> entries = new ArrayList<>(); + for (String s : survivalPlusSection.getStringList("minecraft." + key)) { + entries.add(getTagEntry(s, registrar.registryKey())); } if (entries.isEmpty()) return; registrar.addToTag(TagKey.create(registrar.registryKey(), Key.key("minecraft:" + key)), entries); } - private TagEntry getTagEntry(String string) { + private TagEntry getTagEntry(String string, RegistryKey key) { if (string.startsWith("#")) { - TagKey tagKey = TagKey.create(RegistryKey.BLOCK, Key.key(string.substring(1))); + TagKey tagKey = TagKey.create(key, Key.key(string.substring(1))); return TagEntry.tagEntry(tagKey); } - TypedKey blockKey = TypedKey.create(RegistryKey.BLOCK, Key.key(string)); + TypedKey blockKey = TypedKey.create(key, Key.key(string)); return TagEntry.valueEntry(blockKey); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java index 547cfb5..7cdc784 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/EventManager.java @@ -22,9 +22,10 @@ import com.shanebeestudios.survival.plugin.listeners.item.CompassWaypoint; import com.shanebeestudios.survival.plugin.listeners.item.CookieHealthBoost; import com.shanebeestudios.survival.plugin.listeners.item.DrinkableItemListener; +import com.shanebeestudios.survival.plugin.listeners.item.DualWieldListener; import com.shanebeestudios.survival.plugin.listeners.item.FirestrikerListener; import com.shanebeestudios.survival.plugin.listeners.item.FoodDiversityConsume; -import com.shanebeestudios.survival.plugin.listeners.item.GiantBlade; +import com.shanebeestudios.survival.plugin.listeners.item.GiantBladeListener; import com.shanebeestudios.survival.plugin.listeners.item.GrapplingHookListener; import com.shanebeestudios.survival.plugin.listeners.item.MedicKit; import com.shanebeestudios.survival.plugin.listeners.item.PoisonousPotato; @@ -80,7 +81,7 @@ public void registerEvents() { if (this.config.legendary_valkyrie) pluginManager.registerEvents(new Valkyrie(this.plugin), this.plugin); if (this.config.legendary_giant_blade) - pluginManager.registerEvents(new GiantBlade(this.plugin), this.plugin); + pluginManager.registerEvents(new GiantBladeListener(this.plugin), this.plugin); if (this.config.settings_local_chat_distance > -1) pluginManager.registerEvents(new LocalChat(this.plugin), this.plugin); if (this.config.mechanics_compass_waypoint) @@ -144,6 +145,8 @@ public void registerEvents() { pluginManager.registerEvents(new RepairCrafting(), this.plugin); pluginManager.registerEvents(new MobGoalListener(this.plugin), this.plugin); + // TODO config? + pluginManager.registerEvents(new DualWieldListener(this.plugin), this.plugin); } } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java new file mode 100644 index 0000000..1d66bfd --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java @@ -0,0 +1,103 @@ +package com.shanebeestudios.survival.plugin.listeners.item; + +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.data.Stat; +import com.shanebeestudios.survival.api.item.Item; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.ItemTags; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.managers.MessageManager; +import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import io.papermc.paper.event.player.PlayerInventorySlotChangeEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.jetbrains.annotations.Nullable; + +public class DualWieldListener implements Listener { + + private final PlayerManager playerManager; + private final MessageManager messageManager; + + public DualWieldListener(SurvivalPlugin plugin) { + this.playerManager = plugin.getPlayerManager(); + this.messageManager = plugin.getMessageManager(); + } + + @EventHandler + private void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + PlayerInventory inventory = player.getInventory(); + checkDuelWield(player, inventory.getItemInMainHand(), inventory.getItemInOffHand()); + } + + @EventHandler + private void onPlayerInvSlotChange(PlayerInventorySlotChangeEvent event) { + int slot = event.getSlot(); + Player player = event.getPlayer(); + PlayerInventory inventory = player.getInventory(); + if (slot == player.getInventory().getHeldItemSlot()) { + checkDuelWield(player, event.getNewItemStack(), inventory.getItemInOffHand()); + } else if (slot == 40) { + checkDuelWield(player, inventory.getItemInMainHand(), event.getNewItemStack()); + } + } + + @EventHandler + private void onPlayerSwapHandItem(PlayerSwapHandItemsEvent event) { + checkDuelWield(event.getPlayer(), event.getMainHandItem(), event.getOffHandItem()); + } + + @EventHandler + private void onPlayerChangeHand(PlayerItemHeldEvent event) { + Player player = event.getPlayer(); + PlayerInventory inventory = player.getInventory(); + checkDuelWield(player, inventory.getItem(event.getNewSlot()), inventory.getItemInOffHand()); + } + + // Prevent dual wielding + @EventHandler(priority = EventPriority.LOWEST) + private void onPlayerDamageEntity(EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Player player) { + PlayerData playerData = this.playerManager.getPlayerData(player); + if (playerData.getStat(Stat.DUAL_WIELD) > 0) { + event.setCancelled(true); + PlayerInventory inventory = player.getInventory(); + Item main = Items.getFromStack(inventory.getItemInMainHand()); + Item off = Items.getFromStack(inventory.getItemInOffHand()); + String name = "this item"; + if (main != null) { + name = main.getName(); + } else if (off != null) { + name = off.getName(); + } + this.messageManager.sendMessage(player, MessageType.DUAL_WIELD_NO, name); + } + } + } + + private void checkDuelWield(Player player, @Nullable ItemStack mainStack, @Nullable ItemStack offStack) { + Item mainItem = mainStack != null ? Items.getFromStack(mainStack) : null; + Item offItem = offStack != null ? Items.getFromStack(offStack) : null; + + int duelWield = 0; + if (mainItem != null && mainItem.isPreventDuelWield() && + offStack != null && ItemTags.PREVENT_DUAL_WIELD.isTagged(offStack.getType())) { + duelWield = 1; + } else if (offItem != null && offItem.isPreventDuelWield() && + mainStack != null && ItemTags.PREVENT_DUAL_WIELD.isTagged(mainStack.getType())) { + duelWield = 1; + } + PlayerData playerData = this.playerManager.getPlayerData(player); + playerData.setStat(Stat.DUAL_WIELD, duelWield); + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBlade.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBlade.java deleted file mode 100644 index df42a3f..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBlade.java +++ /dev/null @@ -1,209 +0,0 @@ -package com.shanebeestudios.survival.plugin.listeners.item; - -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.util.Vector; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.plugin.config.Lang; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.api.data.Stat; -import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.api.util.Utils; - -import java.util.Collection; -import java.util.Random; - -public class GiantBlade implements Listener { - - private final SurvivalPlugin plugin; - private final Lang lang; - private final PlayerManager playerManager; - - public GiantBlade(SurvivalPlugin plugin) { - this.plugin = plugin; - this.lang = plugin.getLang(); - this.playerManager = plugin.getPlayerManager(); - } - - @EventHandler(priority = EventPriority.HIGHEST) - private void onAttack(EntityDamageByEntityEvent event) { - if (event.isCancelled()) return; - if (event.getEntity() instanceof Player player) { - if (Utils.isCitizensNPC(player)) return; - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack offItem = player.getInventory().getItemInOffHand(); - ItemMeta offItemMeta = offItem.getItemMeta(); - assert offItemMeta != null; - - if (playerData.getStat(Stat.DUAL_WIELD) == 1) { - event.setCancelled(true); - return; - } - - Random rand = new Random(); - - if (Items.ENDER_GIANT_BLADE.is(offItem)) { - if (event.getDamager() instanceof LivingEntity && event.getCause() == DamageCause.ENTITY_ATTACK) { - LivingEntity enemy = (LivingEntity) event.getDamager(); - enemy.damage(event.getDamage() * 40 / 100, player); - } - - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ((Damageable) offItemMeta).setDamage(((Damageable) offItemMeta).getDamage() + 1); - offItem.setItemMeta(offItemMeta); - } - - if (((Damageable) offItemMeta).getDamage() >= offItem.getType().getMaxDurability()) { - player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInOffHand(null); - } - } - } - } - - //To prevent double messages send to player. - - @EventHandler - private void onItemClick(PlayerInteractEvent event) { - Player player = event.getPlayer(); - PlayerData playerData = playerManager.getPlayerData(player); - ItemStack mainItem = player.getInventory().getItemInMainHand(); - ItemStack offItem = player.getInventory().getItemInOffHand(); - ItemMeta mainItemMeta = mainItem.getItemMeta(); - ItemMeta offItemMeta = offItem.getItemMeta(); - ; - assert mainItemMeta != null; - assert offItemMeta != null; - - if (Items.ENDER_GIANT_BLADE.is(mainItem)) { - if (playerData.getStat(Stat.DUAL_WIELD) == 0) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) { - Block clickedBlock = event.getClickedBlock(); - // Prevent giant blade for turning dirt/grass into farmland - if (clickedBlock != null && (clickedBlock.getType() == Material.GRASS_BLOCK || clickedBlock.getType() == Material.DIRT)) { - event.setCancelled(true); - } - if (event.getHand() != EquipmentSlot.HAND) return; // prevent double message - - if (player.isSprinting()) { - if (playerData.getStat(Stat.CHARGE) == 0) { - Random rand = new Random(); - - ChargeForward(player); - - if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) - player.setFoodLevel(player.getFoodLevel() - 1); - - int chance_reduceDur = rand.nextInt(10) + 1; - if (chance_reduceDur == 1) { - ((Damageable) mainItemMeta).setDamage(((Damageable) mainItemMeta).getDamage() + 1); - mainItem.setItemMeta(mainItemMeta); - } - - if (((Damageable) mainItemMeta).getDamage() >= mainItem.getType().getMaxDurability()) { - player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0F, rand.nextFloat() * 0.4F + 0.8F); - player.getInventory().setItemInMainHand(null); - } - player.updateInventory(); - } else { - Utils.sendColoredMini(player, "" + this.lang.charge_unable); - } - } - } - } else { - if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); - else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); - if (playerData.getStat(Stat.DUAL_WIELD_MSG) >= 2) { - Utils.sendColoredMini(player, "" + lang.ender_giant_blade_unable_duel); - } - } - } else if (Items.ENDER_GIANT_BLADE.is(offItem)) { - if (playerData.getStat(Stat.DUAL_WIELD) != 0) { - if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); - else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); - if (playerData.getStat(Stat.DUAL_WIELD_MSG) >= 2) { - Utils.sendColoredMini(player, "" + this.lang.ender_giant_blade_unable_duel); - } - } - } - playerData.setStat(Stat.DUAL_WIELD_MSG, 0); - } - - private void ChargeForward(Player player) { - PlayerData playerData = playerManager.getPlayerData(player); - Utils.sendColoredMini(player, "" + this.lang.charge); - - playerData.setStat(Stat.CHARGE, 1); - - - Location loc = player.getLocation(); - if (loc.getPitch() < 0) - loc.setPitch(0); - - Vector vel = loc.getDirection(); - - Vector newVel = vel.multiply(3); - - player.setVelocity(newVel); - - final Player chargingPlayer = player; - playerData.setStat(Stat.CHARGING, 8); - - final Runnable task = new Runnable() { - public void run() { - damageNearbyEnemies(chargingPlayer); - - Random rand = new Random(); - chargingPlayer.getLocation().getWorld().playSound(chargingPlayer.getLocation(), Sound.ENTITY_SHULKER_BULLET_HIT, 1.5F, rand.nextFloat() * 0.4F + 0.8F); - Utils.spawnParticle(chargingPlayer.getLocation(), Particle.EXPLOSION, 10, 0, 0, 0); - - int times = playerData.getStat(Stat.CHARGING); - if (--times > 1) - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this, 1L); - playerData.setStat(Stat.CHARGING, times); - } - }; - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, task, -1L); - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - playerData.setStat(Stat.CHARGE, 0); - Utils.sendColoredMini(chargingPlayer, this.lang.charge_ready); - }, 100L); - } - - private void damageNearbyEnemies(Player player) { - Collection enemies = player.getLocation().getWorld().getNearbyEntities(player.getLocation(), 2, 2, 2); - for (Entity e : enemies) { - if (e instanceof LivingEntity enemy && e != player) { - enemy.damage(8, player); - } - } - } - -} diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java new file mode 100644 index 0000000..ea06529 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java @@ -0,0 +1,113 @@ +package com.shanebeestudios.survival.plugin.listeners.item; + +import com.shanebeestudios.survival.api.data.DamageTypes; +import com.shanebeestudios.survival.api.data.PlayerData; +import com.shanebeestudios.survival.api.data.Stat; +import com.shanebeestudios.survival.api.item.Items; +import com.shanebeestudios.survival.api.util.Utils; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; +import com.shanebeestudios.survival.plugin.config.Lang; +import com.shanebeestudios.survival.plugin.managers.PlayerManager; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.damage.DamageSource; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import java.util.Collection; +import java.util.Random; + +public class GiantBladeListener implements Listener { + + private final SurvivalPlugin plugin; + private final Lang lang; + private final PlayerManager playerManager; + private final Random random = new Random(); + + public GiantBladeListener(SurvivalPlugin plugin) { + this.plugin = plugin; + this.lang = plugin.getLang(); + this.playerManager = plugin.getPlayerManager(); + } + + @EventHandler + private void onItemClick(PlayerInteractEvent event) { + Action action = event.getAction(); + if (action != Action.RIGHT_CLICK_BLOCK && action != Action.RIGHT_CLICK_AIR) return; + if (event.getHand() != EquipmentSlot.HAND) return; + + Player player = event.getPlayer(); + ItemStack mainItem = player.getInventory().getItemInMainHand(); + if (!player.isSprinting()) return; + if (player.hasCooldown(mainItem)) return; + + PlayerData playerData = playerManager.getPlayerData(player); + if (playerData.getStat(Stat.DUAL_WIELD) > 0) return; + if (!Items.ENDER_GIANT_BLADE.is(mainItem)) return; + + chargeForward(player, mainItem); + } + + private void chargeForward(Player player, ItemStack itemStack) { + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) + player.setFoodLevel(player.getFoodLevel() - 1); + + PlayerData playerData = playerManager.getPlayerData(player); + Utils.sendColoredMini(player, "" + this.lang.charge); + + player.setCooldown(itemStack, 200); + playerData.setStat(Stat.CHARGING, 10); + + final Runnable task = new Runnable() { + public void run() { + push(player); + damageNearbyEnemies(player); + effects(player); + + int times = playerData.getStat(Stat.CHARGING); + if (--times > 0) { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, this, 1L); + } + playerData.setStat(Stat.CHARGING, times); + } + }; + + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, task, 0); + } + + private void push(Player player) { + Location playerLocation = player.getLocation(); + if (playerLocation.getPitch() < 0) playerLocation.setPitch(0); + Vector newVelocity = playerLocation.getDirection().clone().multiply(2); + player.setVelocity(newVelocity); + } + + private void effects(Player player) { + Location location = player.getLocation(); + location.getWorld().playSound(location, Sound.ENTITY_SHULKER_BULLET_HIT, 1.5F, this.random.nextFloat() * 0.4F + 0.8F); + Utils.spawnParticle(location, Particle.EXPLOSION, 10, 0, 0, 0); + } + + @SuppressWarnings("UnstableApiUsage") + private void damageNearbyEnemies(Player player) { + Collection enemies = player.getLocation().getWorld().getNearbyLivingEntities(player.getLocation(), 2, 2, 2); + for (LivingEntity enemy : enemies) { + if (enemy == player) continue; + DamageSource damageSource = DamageSource.builder(DamageTypes.ENDER_POWER) + .withDirectEntity(player) + .build(); + enemy.damage(Items.ENDER_GIANT_BLADE.getChargeDamage(), damageSource); + } + } + +} diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/Valkyrie.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/Valkyrie.java index e74bb00..723aef9 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/Valkyrie.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/Valkyrie.java @@ -70,14 +70,6 @@ private void onItemClick(PlayerInteractEvent event) { } } } - } else { - if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 1); - else if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) - playerData.setStat(Stat.DUAL_WIELD_MSG, playerData.getStat(Stat.DUAL_WIELD_MSG) + 2); - if (playerData.getStat(Stat.DUAL_WIELD_MSG) == 2) { - Utils.sendColoredMini(player,"" + this.lang.valkyrie_axe_unable_dual); - } } } playerData.setStat(Stat.DUAL_WIELD_MSG, 0); @@ -122,8 +114,6 @@ private void onAttack(EntityDamageByEntityEvent event) { } } } - } else { - event.setCancelled(true); } } } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java index 4c1caec..46e440d 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/EffectManager.java @@ -2,7 +2,6 @@ import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.config.Config; -import com.shanebeestudios.survival.plugin.tasks.tool.GiantBlade; import com.shanebeestudios.survival.plugin.tasks.tool.Valkyrie; public class EffectManager { @@ -11,7 +10,6 @@ public class EffectManager { private final Config config; // Effect Tasks - private GiantBlade giantBlade = null; private Valkyrie valkyrie = null; public EffectManager(SurvivalPlugin plugin) { @@ -21,8 +19,6 @@ public EffectManager(SurvivalPlugin plugin) { } private void loadEffects() { - if (config.legendary_giant_blade) - this.giantBlade = new GiantBlade(plugin); if (config.legendary_valkyrie) this.valkyrie = new Valkyrie(plugin); } @@ -32,8 +28,6 @@ private void loadEffects() { */ @SuppressWarnings("unused") public void cancelTasks() { - if (giantBlade != null) - giantBlade.cancel(); if (valkyrie != null) valkyrie.cancel(); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/managers/MessageManager.java b/src/main/java/com/shanebeestudios/survival/plugin/managers/MessageManager.java index 50c1def..1d75576 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/managers/MessageManager.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/managers/MessageManager.java @@ -38,6 +38,12 @@ String getMessage(Lang lang) { return "" + lang.bow_main_hand; } }, + DUAL_WIELD_NO { + @Override + String getMessage(Lang lang) { + return "" + lang.prevent_dual_wield; + } + }, FISH_MAIN_HAND { @Override String getMessage(Lang lang) { @@ -124,4 +130,10 @@ public void sendMessage(Player player, MessageType messageType) { Utils.sendColoredMini(player, messageType.getMessage(this.lang)); } + public void sendMessage(Player player, MessageType messageType, Object... args) { + if (this.messages.get(messageType).contains(player)) return; + this.messages.get(messageType).add(player); + Utils.sendColoredMini(player, messageType.getMessage(this.lang), args); + } + } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/GiantBlade.java b/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/GiantBlade.java deleted file mode 100644 index feea136..0000000 --- a/src/main/java/com/shanebeestudios/survival/plugin/tasks/tool/GiantBlade.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.shanebeestudios.survival.plugin.tasks.tool; - -import com.google.common.collect.ImmutableSet; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Particle; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import com.shanebeestudios.survival.plugin.SurvivalPlugin; -import com.shanebeestudios.survival.api.data.PlayerData; -import com.shanebeestudios.survival.api.data.Stat; -import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.plugin.managers.PlayerManager; - -public class GiantBlade extends BukkitRunnable { - - private final SurvivalPlugin plugin; - private final PlayerManager playerManager; - private final ImmutableSet MAIN_SET; - private final ImmutableSet OFF_SET; - private final PotionEffect DAMAGE; - private final PotionEffect SLOW; - private final PotionEffect JUMP; - - public GiantBlade(SurvivalPlugin plugin) { - this.plugin = plugin; - this.playerManager = plugin.getPlayerManager(); - this.MAIN_SET = ImmutableSet.builder() - .add(Material.GOLDEN_HOE).add(Material.GOLDEN_AXE).build(); - this.OFF_SET = ImmutableSet.builder() - .add(Material.WOODEN_AXE).add(Material.WOODEN_SWORD).add(Material.WOODEN_PICKAXE) - .add(Material.WOODEN_SHOVEL).add(Material.WOODEN_HOE).add(Material.STONE_AXE) - .add(Material.STONE_SWORD).add(Material.STONE_PICKAXE).add(Material.STONE_SHOVEL) - .add(Material.STONE_HOE).add(Material.IRON_AXE).add(Material.IRON_SWORD) - .add(Material.IRON_PICKAXE).add(Material.IRON_SHOVEL).add(Material.IRON_HOE) - .add(Material.GOLDEN_AXE).add(Material.GOLDEN_SWORD).add(Material.GOLDEN_PICKAXE) - .add(Material.GOLDEN_SHOVEL).add(Material.GOLDEN_HOE).add(Material.DIAMOND_AXE) - .add(Material.DIAMOND_SWORD).add(Material.DIAMOND_PICKAXE).add(Material.DIAMOND_SHOVEL) - .add(Material.DIAMOND_HOE).add(Material.BOW).build(); - - this.DAMAGE = new PotionEffect(PotionEffectType.RESISTANCE, 20, 1, false); - this.SLOW = new PotionEffect(PotionEffectType.SLOWNESS, 20, 6, true); - this.JUMP = new PotionEffect(PotionEffectType.JUMP_BOOST, 20, 199, true); - - this.runTaskTimer(plugin, 1, 10); - } - - @Override - public void run() { //TODO this guy needs some serious work - for (Player player : plugin.getServer().getOnlinePlayers()) { - ItemStack mainItem = player.getInventory().getItemInMainHand(); - ItemStack offItem = player.getInventory().getItemInOffHand(); - Material mainType = mainItem.getType(); - Material offType = offItem.getType(); - - if (Items.ENDER_GIANT_BLADE.is(mainItem)) { - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - assert particleLoc.getWorld() != null; - particleLoc.getWorld().spawnParticle(Particle.CRIT, particleLoc, 10, 0.5, 0.5, 0.5); - } - - if (Items.ENDER_GIANT_BLADE.is(offItem)) { - player.removePotionEffect(PotionEffectType.RESISTANCE); - player.addPotionEffect(this.DAMAGE); - Location particleLoc = player.getLocation(); - particleLoc.setY(particleLoc.getY() + 1); - assert particleLoc.getWorld() != null; - particleLoc.getWorld().spawnParticle(Particle.CRIT, particleLoc, 10, 0.5, 0.5, 0.5); - } - - PlayerData playerData = playerManager.getPlayerData(player); - if ((MAIN_SET.contains(mainType) && OFF_SET.contains(offType)) || (MAIN_SET.contains(offType) && OFF_SET.contains(mainType))) { - player.removePotionEffect(PotionEffectType.SLOWNESS); - player.addPotionEffect(this.SLOW); - player.removePotionEffect(PotionEffectType.JUMP_BOOST); - player.addPotionEffect(this.JUMP); - playerData.setStat(Stat.DUAL_WIELD, 1); - } else { - playerData.setStat(Stat.DUAL_WIELD, 0); - } - } - } - -} diff --git a/src/main/resources/datapack/data/survival_plus/damage_type/ender_power.json b/src/main/resources/datapack/data/survival_plus/damage_type/ender_power.json new file mode 100644 index 0000000..66d4d80 --- /dev/null +++ b/src/main/resources/datapack/data/survival_plus/damage_type/ender_power.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.1, + "message_id": "ender_power", + "scaling": "when_caused_by_living_non_player" +} diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/ender_power.json b/src/main/resources/datapack/data/survival_plus/enchantment/ender_power.json new file mode 100644 index 0000000..012a0be --- /dev/null +++ b/src/main/resources/datapack/data/survival_plus/enchantment/ender_power.json @@ -0,0 +1,120 @@ +{ + "description": { + "text": "Ender Power", + "color": "#973DF1" + }, + "supported_items": "#minecraft:swords", + "weight": 1, + "max_level": 5, + "min_cost": { + "base": 10, + "per_level_above_first": 10 + }, + "max_cost": { + "base": 25, + "per_level_above_first": 10 + }, + "anvil_cost": 4, + "slots": [ + "hand" + ], + "effects": { + "minecraft:tick": [ + { + "requirements": { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "periodic_tick": 1 + } + }, + "effect": { + "type": "minecraft:spawn_particles", + "particle": { + "type": "minecraft:crit" + }, + "horizontal_position": { + "type": "entity_position", + "offset": 0, + "scale": 1 + }, + "vertical_position": { + "type": "entity_position", + "offset": 0.9, + "scale": 1 + }, + "horizontal_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "vertical_velocity": { + "base": { + "type": "uniform", + "min_inclusive": -2, + "max_exclusive": 2 + }, + "movement_scale": 1 + }, + "speed": 0.5 + } + } + ], + "minecraft:item_damage": [ + { + "effect": { + "type": "minecraft:remove_binomial", + "chance": { + "type": "minecraft:fraction", + "denominator": { + "type": "minecraft:linear", + "base": 10.0, + "per_level_above_first": 5.0 + }, + "numerator": { + "type": "minecraft:linear", + "base": 2.0, + "per_level_above_first": 2.0 + } + } + }, + "requirements": { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:enchantable/armor" + } + } + }, + { + "effect": { + "type": "minecraft:remove_binomial", + "chance": { + "type": "minecraft:fraction", + "denominator": { + "type": "minecraft:linear", + "base": 2.0, + "per_level_above_first": 1.0 + }, + "numerator": { + "type": "minecraft:linear", + "base": 1.0, + "per_level_above_first": 1.0 + } + } + }, + "requirements": { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:enchantable/armor" + } + } + } + } + ] + } +} diff --git a/src/main/resources/item-tags.yml b/src/main/resources/item-tags.yml new file mode 100644 index 0000000..0b4c13d --- /dev/null +++ b/src/main/resources/item-tags.yml @@ -0,0 +1,24 @@ +# Items Tags +# This file is used to create some tags the plugin uses. +# Modify this to your liking but be very careful when you do. +# +# This accepts both Minecraft item types `minecraft:diamond_sword` +# and item tags prefixed with `#`, ex: `#minecraft:swords` (minecraft or custom) +# +# The names of these sections double as namespaces. +# The `survival_plus` section will create new tags +# Example `prevent_duel_wield` = `survival_plus:prevent_duel_wield` +# +# You can optionally add a `minecraft` section to add items to current Minecraft tags +# Example (This would add stick to the `minecraft:swords` tag): +# minecraft: +# swords: +# - minecraft:stick + +survival_plus: + prevent_dual_wield: # Items which cannot dual wield with legendary tools. + - '#minecraft:axes' + - '#minecraft:pickaxes' + - '#minecraft:hoes' + - '#minecraft:shovels' + - '#minecraft:swords' diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml index 6ffed82..5128d36 100644 --- a/src/main/resources/items.yml +++ b/src/main/resources/items.yml @@ -123,23 +123,32 @@ items: name: "Blaze Sword" repair_cost: 5 repair_percent: 0.95 + prevent_dual_wield: true ender_giant_blade: name: "Ender Giant Blade" + lore: + - '<#36D19B>Right-Click while sprinting to charge toward enemies' repair_cost: 5 repair_percent: 0.95 + max_damage: 2400 + prevent_dual_wield: true + charge_damage: 5 # Amount of damage to inflict on nearby entities when charging obsidian_mace: name: "Obsidian Mace" repair_cost: 5 repair_percent: 0.95 + prevent_dual_wield: true quartz_pickaxe: name: "Quartz Pickaxe" repair_cost: 5 repair_percent: 0.95 max_damage: 2400 + prevent_dual_wield: true valkyries_axe: name: "Valkyries Axe" repair_cost: 5 repair_percent: 0.95 + prevent_dual_wield: true # ARMOR snow_boots: diff --git a/src/main/resources/lang_EN.yml b/src/main/resources/lang_EN.yml index df3133c..59c2d97 100644 --- a/src/main/resources/lang_EN.yml +++ b/src/main/resources/lang_EN.yml @@ -88,6 +88,9 @@ energy-level-1: "Your lack of sleep is really taking a toll on you." # Item Details #################### +# '%s' Will be replaced with the name of the item +prevent-dual-wield: "Unable to dual-wield with %s" + right-click-sprinting: "Right Click when sprinting:" right-click-sneaking: "Right Click when sneaking:" decrease-hunger-value: " Decreases hunger value" @@ -96,7 +99,6 @@ poisoned-enemy: "Poisoned: Poison enemy on hit" poisoned-retain: "Poisoning Effect retains" reduce-50: " Reduce chance by 50%" -valkyrie-axe-unable-dual: "Unable to dual-wield with Valkyrie's Axe" valkyrie-axe-spin: "Spin: Spin your axe in a circle to attack all nearby enemies!" valkyrie-axe-cooldown: " Cooldown: 1 second" @@ -109,9 +111,6 @@ exhausted-slow: "Exhausted: Slowness II" expire-disarm: " Expires after disarming for 5 seconds" knockback-resistance: "+50% Knockback Resistance" -ender-giant-blade-unable-duel: "Unable to dual-wield with the Ender Giant Blade" -ender-giant-blade-charge: "Charge: Sprint forward, attack enemies in the way" -ender-giant-blade-cooldown: " Cooldown: 5 seconds" half-shield-resistance: "Half-Shield: Gains Resistance II" reflecting-coming: " Reflecting incoming damage by 40%" diff --git a/src/main/resources/resource-pack/assets/survival_plus/lang/en_us.json b/src/main/resources/resource-pack/assets/survival_plus/lang/en_us.json new file mode 100644 index 0000000..03c7e76 --- /dev/null +++ b/src/main/resources/resource-pack/assets/survival_plus/lang/en_us.json @@ -0,0 +1,4 @@ +{ + "death.attack.ender_power": "%1$s was charged at by %2$s", + "death.attack.ender_power.item": "%1$s was charged at by %2$s using %3$s" +} From cc7c917a4e3be2130333c8b4e546696ddd693c0e Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Feb 2025 00:19:11 -0800 Subject: [PATCH 128/133] repackage registry stuff --- .../survival/api/item/items/legendary/BlazeSword.java | 2 +- .../survival/api/item/items/legendary/EnderGiantBlade.java | 2 +- .../survival/api/item/items/legendary/ObsidianMace.java | 2 +- .../survival/api/item/items/legendary/QuartzPickaxe.java | 2 +- .../survival/api/item/items/tools/Sickle.java | 2 +- .../survival/api/{util => registry}/BlockTags.java | 3 ++- .../survival/api/{data => registry}/DamageTypes.java | 5 ++++- .../survival/api/{data => registry}/Enchantments.java | 2 +- .../survival/api/{util => registry}/ItemTags.java | 2 +- .../shanebeestudios/survival/api/registry/package-info.java | 4 ++++ .../com/shanebeestudios/survival/plugin/SurvivalPlugin.java | 4 ++-- .../survival/plugin/listeners/block/BlockBreakListener.java | 2 +- .../survival/plugin/listeners/block/BlockPlaceListener.java | 2 +- .../survival/plugin/listeners/item/CompassWaypoint.java | 2 +- .../survival/plugin/listeners/item/DualWieldListener.java | 2 +- .../survival/plugin/listeners/item/GiantBladeListener.java | 2 +- 16 files changed, 24 insertions(+), 16 deletions(-) rename src/main/java/com/shanebeestudios/survival/api/{util => registry}/BlockTags.java (96%) rename src/main/java/com/shanebeestudios/survival/api/{data => registry}/DamageTypes.java (83%) rename src/main/java/com/shanebeestudios/survival/api/{data => registry}/Enchantments.java (93%) rename src/main/java/com/shanebeestudios/survival/api/{util => registry}/ItemTags.java (95%) create mode 100644 src/main/java/com/shanebeestudios/survival/api/registry/package-info.java diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java index 7aeecdf..cde23d9 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/BlazeSword.java @@ -1,6 +1,6 @@ package com.shanebeestudios.survival.api.item.items.legendary; -import com.shanebeestudios.survival.api.data.Enchantments; +import com.shanebeestudios.survival.api.registry.Enchantments; import io.papermc.paper.datacomponent.DataComponentTypes; import org.bukkit.Material; import org.bukkit.NamespacedKey; diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java index 7ff1ae4..56b830b 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/EnderGiantBlade.java @@ -1,6 +1,6 @@ package com.shanebeestudios.survival.api.item.items.legendary; -import com.shanebeestudios.survival.api.data.Enchantments; +import com.shanebeestudios.survival.api.registry.Enchantments; import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java index 363f917..3ac488c 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/ObsidianMace.java @@ -1,6 +1,6 @@ package com.shanebeestudios.survival.api.item.items.legendary; -import com.shanebeestudios.survival.api.data.Enchantments; +import com.shanebeestudios.survival.api.registry.Enchantments; import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java index 70ab73f..0cefdd5 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/legendary/QuartzPickaxe.java @@ -1,6 +1,6 @@ package com.shanebeestudios.survival.api.item.items.legendary; -import com.shanebeestudios.survival.api.data.Enchantments; +import com.shanebeestudios.survival.api.registry.Enchantments; import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Sickle.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Sickle.java index 1797211..060342b 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Sickle.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Sickle.java @@ -1,7 +1,7 @@ package com.shanebeestudios.survival.api.item.items.tools; import com.shanebeestudios.survival.api.item.Item; -import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.registry.BlockTags; import io.papermc.paper.datacomponent.DataComponentTypes; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import io.papermc.paper.datacomponent.item.Tool; diff --git a/src/main/java/com/shanebeestudios/survival/api/util/BlockTags.java b/src/main/java/com/shanebeestudios/survival/api/registry/BlockTags.java similarity index 96% rename from src/main/java/com/shanebeestudios/survival/api/util/BlockTags.java rename to src/main/java/com/shanebeestudios/survival/api/registry/BlockTags.java index 8a62504..a297803 100644 --- a/src/main/java/com/shanebeestudios/survival/api/util/BlockTags.java +++ b/src/main/java/com/shanebeestudios/survival/api/registry/BlockTags.java @@ -1,5 +1,6 @@ -package com.shanebeestudios.survival.api.util; +package com.shanebeestudios.survival.api.registry; +import com.shanebeestudios.survival.api.util.Utils; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; diff --git a/src/main/java/com/shanebeestudios/survival/api/data/DamageTypes.java b/src/main/java/com/shanebeestudios/survival/api/registry/DamageTypes.java similarity index 83% rename from src/main/java/com/shanebeestudios/survival/api/data/DamageTypes.java rename to src/main/java/com/shanebeestudios/survival/api/registry/DamageTypes.java index d603422..b3919e6 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/DamageTypes.java +++ b/src/main/java/com/shanebeestudios/survival/api/registry/DamageTypes.java @@ -1,10 +1,13 @@ -package com.shanebeestudios.survival.api.data; +package com.shanebeestudios.survival.api.registry; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; import net.kyori.adventure.key.Key; import org.bukkit.damage.DamageType; +/** + * Custom {@link DamageType DamageTypes} + */ @SuppressWarnings("UnstableApiUsage") public class DamageTypes { diff --git a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java b/src/main/java/com/shanebeestudios/survival/api/registry/Enchantments.java similarity index 93% rename from src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java rename to src/main/java/com/shanebeestudios/survival/api/registry/Enchantments.java index 2b62578..ae5d000 100644 --- a/src/main/java/com/shanebeestudios/survival/api/data/Enchantments.java +++ b/src/main/java/com/shanebeestudios/survival/api/registry/Enchantments.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.api.data; +package com.shanebeestudios.survival.api.registry; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; diff --git a/src/main/java/com/shanebeestudios/survival/api/util/ItemTags.java b/src/main/java/com/shanebeestudios/survival/api/registry/ItemTags.java similarity index 95% rename from src/main/java/com/shanebeestudios/survival/api/util/ItemTags.java rename to src/main/java/com/shanebeestudios/survival/api/registry/ItemTags.java index 3146115..55a6542 100644 --- a/src/main/java/com/shanebeestudios/survival/api/util/ItemTags.java +++ b/src/main/java/com/shanebeestudios/survival/api/registry/ItemTags.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.api.util; +package com.shanebeestudios.survival.api.registry; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/src/main/java/com/shanebeestudios/survival/api/registry/package-info.java b/src/main/java/com/shanebeestudios/survival/api/registry/package-info.java new file mode 100644 index 0000000..e7f6af1 --- /dev/null +++ b/src/main/java/com/shanebeestudios/survival/api/registry/package-info.java @@ -0,0 +1,4 @@ +/** + * {@link org.bukkit.Registry} based classes + */ +package com.shanebeestudios.survival.api.registry; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java index 25efc88..cdbb784 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalPlugin.java @@ -1,6 +1,6 @@ package com.shanebeestudios.survival.plugin; -import com.shanebeestudios.survival.api.util.ItemTags; +import com.shanebeestudios.survival.api.registry.ItemTags; import com.shanebeestudios.survival.plugin.commands.SurvivalCommand; import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.config.Lang; @@ -15,7 +15,7 @@ import com.shanebeestudios.survival.plugin.managers.RecipeManager; import com.shanebeestudios.survival.plugin.managers.ScoreBoardManager; import com.shanebeestudios.survival.plugin.tasks.TaskManager; -import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.registry.BlockTags; import com.shanebeestudios.survival.api.util.Utils; import dev.jorel.commandapi.CommandAPI; import dev.jorel.commandapi.CommandAPIBukkitConfig; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java index fcf1e6c..5b2b75d 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockBreakListener.java @@ -2,7 +2,7 @@ import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.registry.BlockTags; import com.shanebeestudios.survival.api.util.ItemUtils; import com.shanebeestudios.survival.api.util.Utils; import com.shanebeestudios.survival.plugin.SurvivalPlugin; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java index 57ce0c5..ee2e9bd 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/block/BlockPlaceListener.java @@ -2,7 +2,7 @@ import com.shanebeestudios.survival.api.data.Permissions; import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.registry.BlockTags; import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.config.Config; import com.shanebeestudios.survival.plugin.managers.MessageManager; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CompassWaypoint.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CompassWaypoint.java index f1a934b..01df51e 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CompassWaypoint.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/CompassWaypoint.java @@ -16,7 +16,7 @@ import com.shanebeestudios.survival.plugin.config.Lang; import com.shanebeestudios.survival.api.data.PlayerData; import com.shanebeestudios.survival.plugin.managers.PlayerManager; -import com.shanebeestudios.survival.api.util.BlockTags; +import com.shanebeestudios.survival.api.registry.BlockTags; import com.shanebeestudios.survival.api.util.Utils; public class CompassWaypoint implements Listener { diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java index 1d66bfd..22817e0 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/DualWieldListener.java @@ -4,7 +4,7 @@ import com.shanebeestudios.survival.api.data.Stat; import com.shanebeestudios.survival.api.item.Item; import com.shanebeestudios.survival.api.item.Items; -import com.shanebeestudios.survival.api.util.ItemTags; +import com.shanebeestudios.survival.api.registry.ItemTags; import com.shanebeestudios.survival.plugin.SurvivalPlugin; import com.shanebeestudios.survival.plugin.managers.MessageManager; import com.shanebeestudios.survival.plugin.managers.MessageManager.MessageType; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java index ea06529..606d6d0 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/listeners/item/GiantBladeListener.java @@ -1,6 +1,6 @@ package com.shanebeestudios.survival.plugin.listeners.item; -import com.shanebeestudios.survival.api.data.DamageTypes; +import com.shanebeestudios.survival.api.registry.DamageTypes; import com.shanebeestudios.survival.api.data.PlayerData; import com.shanebeestudios.survival.api.data.Stat; import com.shanebeestudios.survival.api.item.Items; From d78466edf727062cf502b62fb175f9afc3c8dbcd Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Feb 2025 00:30:57 -0800 Subject: [PATCH 129/133] fix held item models --- .../assets/survival_plus/models/item/blaze_sword.json | 2 +- .../assets/survival_plus/models/item/diamond_sickle.json | 2 +- .../assets/survival_plus/models/item/ender_giant_blade.json | 2 +- .../assets/survival_plus/models/item/firestriker.json | 2 +- .../assets/survival_plus/models/item/flint_sickle.json | 2 +- .../assets/survival_plus/models/item/grappling_hook.json | 2 +- .../resource-pack/assets/survival_plus/models/item/hammer.json | 2 +- .../resource-pack/assets/survival_plus/models/item/hatchet.json | 2 +- .../assets/survival_plus/models/item/iron_sickle.json | 2 +- .../resource-pack/assets/survival_plus/models/item/mattock.json | 2 +- .../assets/survival_plus/models/item/obsidian_mace.json | 2 +- .../assets/survival_plus/models/item/quartz_pickaxe.json | 2 +- .../resource-pack/assets/survival_plus/models/item/shiv.json | 2 +- .../assets/survival_plus/models/item/stone_sickle.json | 2 +- .../assets/survival_plus/models/item/valkyries_axe.json | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json index c0fab02..5fe4ab2 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/blaze_sword.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/blaze_sword" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json index 0983272..a24c403 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/diamond_sickle.json @@ -1,5 +1,5 @@ { - "parent": "item/handheld", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/diamond_sickle" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json index 1b9e761..1aa4bc0 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/ender_giant_blade.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/ender_giant_blade" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json index b171ca8..291d113 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/firestriker.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/firestriker" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json index 53f82a7..2e7940c 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/flint_sickle.json @@ -1,5 +1,5 @@ { - "parent": "item/handheld", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/flint_sickle" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json index 65e580d..bc34661 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/grappling_hook.json @@ -1,5 +1,5 @@ { - "parent": "item/handheld", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/grappling_hook" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json index 1454db0..50d8e30 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/hammer.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/hammer" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json index b702cdf..913c582 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/hatchet.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/hatchet" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json index 1381d3d..f2f915b 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/iron_sickle.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/iron_sickle" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json index cd10aad..0816f09 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/mattock.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/mattock" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json index f96b73c..1adca96 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/obsidian_mace.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/obsidian_mace" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json index da3e0c0..2a0e162 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/quartz_pickaxe.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/quartz_pickaxe" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json index 4c966ca..5dafb2e 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/shiv.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/shiv" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json index ac5f494..ff79211 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/stone_sickle.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/stone_sickle" } diff --git a/src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json b/src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json index b5f9673..7fea217 100755 --- a/src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json +++ b/src/main/resources/resource-pack/assets/survival_plus/models/item/valkyries_axe.json @@ -1,5 +1,5 @@ { - "parent": "item/generated", + "parent": "minecraft:item/handheld", "textures": { "layer0": "survival_plus:item/valkyries_axe" } From 1ea58765195cf7c3f249397dbdbb84ab7c83017b Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Feb 2025 18:15:54 -0800 Subject: [PATCH 130/133] fix a few max stack size for tools --- .../shanebeestudios/survival/api/item/items/tools/Hammer.java | 2 ++ .../shanebeestudios/survival/api/item/items/tools/MedicKit.java | 1 + 2 files changed, 3 insertions(+) diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java index ff2a700..23cb812 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java @@ -29,6 +29,8 @@ public Hammer() { .addModifier(Attribute.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED, -3.0d, Operation.ADD_NUMBER, EquipmentSlotGroup.MAINHAND)) .build()); + itemStack.setData(DataComponentTypes.MAX_STACK_SIZE, 1); + setupDefaults("hammer", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/MedicKit.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/MedicKit.java index 7c856a5..c7c7aae 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/MedicKit.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/MedicKit.java @@ -17,6 +17,7 @@ public MedicKit() { int maxHeals = ITEM_CONFIG.getInt("medic_kit", "max_heals", 10); itemStack.setData(DataComponentTypes.MAX_DAMAGE, maxHeals); itemStack.setData(DataComponentTypes.DAMAGE, 0); + itemStack.setData(DataComponentTypes.MAX_STACK_SIZE, 1); setupDefaults("medic_kit", itemStack); } From 082dcf9ae4b2e26fe8c7f2ce2a37fcd2ff0e1013 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Feb 2025 18:42:57 -0800 Subject: [PATCH 131/133] Enchantments - add building reach Enchantment --- .../survival/api/registry/Enchantments.java | 1 + .../enchantment/building_reach.json | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/main/resources/datapack/data/survival_plus/enchantment/building_reach.json diff --git a/src/main/java/com/shanebeestudios/survival/api/registry/Enchantments.java b/src/main/java/com/shanebeestudios/survival/api/registry/Enchantments.java index ae5d000..ad51ae1 100644 --- a/src/main/java/com/shanebeestudios/survival/api/registry/Enchantments.java +++ b/src/main/java/com/shanebeestudios/survival/api/registry/Enchantments.java @@ -12,6 +12,7 @@ public class Enchantments { public static final Enchantment BLAZING = get("blazing"); public static final Enchantment ENDER_POWER = get("ender_power"); + public static final Enchantment BUILDING_REACH = get("building_reach"); public static final Enchantment OBSIDIAN_POWER = get("obsidian_power"); public static final Enchantment QUARTZ_MINING = get("quartz_mining"); diff --git a/src/main/resources/datapack/data/survival_plus/enchantment/building_reach.json b/src/main/resources/datapack/data/survival_plus/enchantment/building_reach.json new file mode 100644 index 0000000..ed4098f --- /dev/null +++ b/src/main/resources/datapack/data/survival_plus/enchantment/building_reach.json @@ -0,0 +1,35 @@ +{ + "description": { + "text": "Building Reach", + "color": "#23F2AA" + }, + "supported_items": "minecraft:stick", + "weight": 1, + "max_level": 3, + "min_cost": { + "base": 15, + "per_level_above_first": 7 + }, + "max_cost": { + "base": 30, + "per_level_above_first": 10 + }, + "anvil_cost": 4, + "slots": [ + "offhand" + ], + "effects": { + "attributes": [ + { + "attribute": "minecraft:block_interaction_range", + "amount": { + "type": "linear", + "base": 3, + "per_level_above_first": 2 + }, + "operation": "add_value", + "id": "survival_plus:hammer_reach" + } + ] + } +} From 8e6762c1dfbfb3346167b83fc6fe06b44fca2d72 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Feb 2025 18:54:22 -0800 Subject: [PATCH 132/133] Revamp generators and place tag files in a registry package --- .../api/generator/TagFileGenerator.java | 61 +++++++++++++++++-- .../survival/api/item/items/tools/Hammer.java | 2 + .../survival/plugin/SurvivalBootstrap.java | 2 +- .../plugin/commands/DataGenCommand.java | 5 +- .../{data => registry}/TagGenerator.java | 41 ++++++++----- .../resources/{ => registry}/block-tags.yml | 0 .../resources/registry/enchantment-tags.yml | 14 +++++ .../resources/{ => registry}/item-tags.yml | 0 8 files changed, 100 insertions(+), 25 deletions(-) rename src/main/java/com/shanebeestudios/survival/plugin/{data => registry}/TagGenerator.java (81%) rename src/main/resources/{ => registry}/block-tags.yml (100%) create mode 100644 src/main/resources/registry/enchantment-tags.yml rename src/main/resources/{ => registry}/item-tags.yml (100%) diff --git a/src/main/java/com/shanebeestudios/survival/api/generator/TagFileGenerator.java b/src/main/java/com/shanebeestudios/survival/api/generator/TagFileGenerator.java index 5e2ff44..854da57 100644 --- a/src/main/java/com/shanebeestudios/survival/api/generator/TagFileGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/api/generator/TagFileGenerator.java @@ -1,5 +1,6 @@ package com.shanebeestudios.survival.api.generator; +import com.shanebeestudios.survival.plugin.SurvivalPlugin; import io.papermc.paper.registry.keys.tags.BlockTypeTagKeys; import io.papermc.paper.registry.keys.tags.ItemTypeTagKeys; import org.bukkit.Keyed; @@ -18,10 +19,22 @@ import java.util.Comparator; import java.util.List; -@SuppressWarnings({"UnstableApiUsage", "UnusedReturnValue"}) +@SuppressWarnings({"UnstableApiUsage", "UnusedReturnValue", "SameParameterValue"}) public class TagFileGenerator { - public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { + private final File dataFolder; + + public TagFileGenerator(SurvivalPlugin plugin) { + this.dataFolder = plugin.getDataFolder(); + } + + public void generate() { + generateBlockTags(this.dataFolder, "generated/block-tags.yml"); + generateItemTags(this.dataFolder, "generated/item-tags.yml"); + generateEnchantmentTags(this.dataFolder, "generated/enchantment-tags.yml"); + } + + private FileConfiguration generateBlockTags(File pluginDataFolder, String path) { File file = new File(pluginDataFolder, path); FileConfiguration config = YamlConfiguration.loadConfiguration(file); @@ -64,7 +77,6 @@ public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { createRequiresSickleTag(blocks); createRequiresHammerTag(blocks); - try { config.save(file); return config; @@ -73,7 +85,7 @@ public FileConfiguration generateBlockTags(File pluginDataFolder, String path) { } } - public FileConfiguration generateItemTags(File pluginDataFolder, String path) { + private FileConfiguration generateItemTags(File pluginDataFolder, String path) { File file = new File(pluginDataFolder, path); FileConfiguration config = YamlConfiguration.loadConfiguration(file); @@ -110,6 +122,37 @@ public FileConfiguration generateItemTags(File pluginDataFolder, String path) { } } + private FileConfiguration generateEnchantmentTags(File pluginDataFolder, String path) { + File file = new File(pluginDataFolder, path); + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + + List header = new ArrayList<>(); + + header.add("Enchantment Tags"); + header.add("This file is used to create some tags the plugin uses."); + header.add("Modify this to your liking but be very careful when you do."); + header.add(" "); + header.add("This accepts both Minecraft enchantment types `minecraft:sharpness`"); + header.add("and enchantment tags prefixed with `#`, ex: `#minecraft:curse` (minecraft or custom)"); + header.add(" "); + header.add("The names of these sections double as namespaces."); + header.add("The `survival_plus` section will create new tags"); + header.add("The `minecraft` section will add to vanilla Minecraft enchantment tags."); + config.options().setHeader(header); + + ConfigurationSection enchantments = config.getConfigurationSection("minecraft"); + if (enchantments == null) enchantments = config.createSection("minecraft"); + + createInEnchantmentTableTag(enchantments); + + try { + config.save(file); + return config; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + // Block Tags private void createGlazedTerracottaTag(@NotNull ConfigurationSection section) { List blocks = new ArrayList<>(); @@ -118,7 +161,7 @@ private void createGlazedTerracottaTag(@NotNull ConfigurationSection section) { .toList().forEach(namespacedKey -> { String key = namespacedKey.toString(); if (key.endsWith("_glazed_terracotta")) blocks.add(key); - }); + }); section.set("glazed_terracotta", blocks); } @@ -345,4 +388,12 @@ private void createDualWieldTag(@NotNull ConfigurationSection section) { section.setInlineComments("prevent_dual_wield", List.of("Items which cannot dual wield with legendary tools.")); } + // Enchantment Tags + private void createInEnchantmentTableTag(@NotNull ConfigurationSection section) { + List enchantments = new ArrayList<>(); + enchantments.add("survival_plus:building_reach"); + section.set("in_enchanting_table", enchantments); + section.setInlineComments("in_enchanting_table", List.of("Custom enchantments which can be used in the enchanting table.")); + } + } diff --git a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java index 23cb812..55229ca 100644 --- a/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java +++ b/src/main/java/com/shanebeestudios/survival/api/item/items/tools/Hammer.java @@ -2,6 +2,7 @@ import com.shanebeestudios.survival.api.item.Item; import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.Enchantable; import io.papermc.paper.datacomponent.item.ItemAttributeModifiers; import io.papermc.paper.datacomponent.item.Tool; import org.bukkit.Material; @@ -30,6 +31,7 @@ public Hammer() { .build()); itemStack.setData(DataComponentTypes.MAX_STACK_SIZE, 1); + itemStack.setData(DataComponentTypes.ENCHANTABLE, Enchantable.enchantable(1)); setupDefaults("hammer", itemStack); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java index 78c89b1..b1b4699 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/SurvivalBootstrap.java @@ -1,6 +1,6 @@ package com.shanebeestudios.survival.plugin; -import com.shanebeestudios.survival.plugin.data.TagGenerator; +import com.shanebeestudios.survival.plugin.registry.TagGenerator; import io.papermc.paper.plugin.bootstrap.BootstrapContext; import io.papermc.paper.plugin.bootstrap.PluginBootstrap; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java b/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java index 369c44c..6732662 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/commands/DataGenCommand.java @@ -13,7 +13,7 @@ public class DataGenCommand extends BaseCommand { public DataGenCommand(SurvivalPlugin plugin) { super(plugin); - this.tagFileGenerator = new TagFileGenerator(); + this.tagFileGenerator = new TagFileGenerator(plugin); } @Override @@ -21,8 +21,7 @@ Argument register() { return LiteralArgument.literal("datagen") .withPermission(Permissions.COMMAND_DATA_GEN.permission()) .executes(info -> { - this.tagFileGenerator.generateBlockTags(this.plugin.getDataFolder(), "generated/block-tags.yml"); - this.tagFileGenerator.generateItemTags(this.plugin.getDataFolder(), "generated/item-tags.yml"); + this.tagFileGenerator.generate(); Utils.sendColoredMini(info.sender(), "Finished generating block-tags.yml"); }); } diff --git a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java b/src/main/java/com/shanebeestudios/survival/plugin/registry/TagGenerator.java similarity index 81% rename from src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java rename to src/main/java/com/shanebeestudios/survival/plugin/registry/TagGenerator.java index c3513c6..2fe0d10 100644 --- a/src/main/java/com/shanebeestudios/survival/plugin/data/TagGenerator.java +++ b/src/main/java/com/shanebeestudios/survival/plugin/registry/TagGenerator.java @@ -1,4 +1,4 @@ -package com.shanebeestudios.survival.plugin.data; +package com.shanebeestudios.survival.plugin.registry; import com.shanebeestudios.survival.api.util.Utils; import com.shanebeestudios.survival.plugin.SurvivalBootstrap; @@ -43,10 +43,12 @@ public class TagGenerator { private final FileConfiguration blockTagConfig; private final FileConfiguration itemTagConfig; + private final FileConfiguration enchantmentTagConfig; public TagGenerator(BootstrapContext context) { - this.blockTagConfig = loadConfig(context.getDataDirectory(), "block-tags.yml"); - this.itemTagConfig = loadConfig(context.getDataDirectory(), "item-tags.yml"); + this.blockTagConfig = loadConfig(context.getDataDirectory(), "registry/block-tags.yml"); + this.itemTagConfig = loadConfig(context.getDataDirectory(), "registry/item-tags.yml"); + this.enchantmentTagConfig = loadConfig(context.getDataDirectory(), "registry/enchantment-tags.yml"); loadDatapack(context); loadTags(context); } @@ -85,16 +87,22 @@ private void loadTags(BootstrapContext context) { // Create block tags manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.BLOCK), event -> { - final PreFlattenTagRegistrar registrar = event.registrar(); + PreFlattenTagRegistrar registrar = event.registrar(); createTags(logger, registrar, this.blockTagConfig); }); // Create item tags manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.ITEM), event -> { - final PreFlattenTagRegistrar registrar = event.registrar(); + PreFlattenTagRegistrar registrar = event.registrar(); createTags(logger, registrar, this.itemTagConfig); }); + // Create enchantment tags + manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.ENCHANTMENT), event -> { + PreFlattenTagRegistrar registrar = event.registrar(); + createTags(logger, registrar, this.enchantmentTagConfig); + }); + // Put our enchantments at the top of the tooltip list manager.registerEventHandler(LifecycleEvents.TAGS.postFlatten(RegistryKey.ENCHANTMENT), event -> { PostFlattenTagRegistrar registrar = event.registrar(); @@ -111,20 +119,21 @@ private void loadTags(BootstrapContext context) { private void createTags(ComponentLogger logger, PreFlattenTagRegistrar registrar, FileConfiguration config) { String registerName = StringUtils.capitalize(registrar.registryKey().key().value()); - logger.info(Utils.getMini("%s Tag Creation:", registerName)); ConfigurationSection survivalPlusSection = config.getConfigurationSection("survival_plus"); - assert survivalPlusSection != null; - for (String key : survivalPlusSection.getKeys(false)) { - createTagFromSection(key, registrar, survivalPlusSection); - logger.info(Utils.getMini("Generating tag 'survival_plus:%s'", key)); + if (survivalPlusSection != null) { + logger.info(Utils.getMini("%s Tag Creation:", registerName)); + for (String key : survivalPlusSection.getKeys(false)) { + createTagFromSection(key, registrar, survivalPlusSection); + logger.info(Utils.getMini(" Generating tag 'survival_plus:%s'", key)); + } } ConfigurationSection minecraftSection = config.getConfigurationSection("minecraft"); - if (minecraftSection == null) return; - - logger.info(Utils.getMini("%s Tag Mutation:", registerName)); - for (String key : minecraftSection.getKeys(false)) { - addToTagFromSection(key, registrar, survivalPlusSection); - logger.info(Utils.getMini("Adding value to tag 'minecraft:%s'", key)); + if (minecraftSection != null) { + logger.info(Utils.getMini("%s Tag Mutation:", registerName)); + for (String key : minecraftSection.getKeys(false)) { + addToTagFromSection(key, registrar, minecraftSection); + logger.info(Utils.getMini(" Adding value to tag 'minecraft:%s'", key)); + } } } diff --git a/src/main/resources/block-tags.yml b/src/main/resources/registry/block-tags.yml similarity index 100% rename from src/main/resources/block-tags.yml rename to src/main/resources/registry/block-tags.yml diff --git a/src/main/resources/registry/enchantment-tags.yml b/src/main/resources/registry/enchantment-tags.yml new file mode 100644 index 0000000..7ba7df5 --- /dev/null +++ b/src/main/resources/registry/enchantment-tags.yml @@ -0,0 +1,14 @@ +# Enchantment Tags +# This file is used to create some tags the plugin uses. +# Modify this to your liking but be very careful when you do. +# +# This accepts both Minecraft enchantment types `minecraft:sharpness` +# and enchantment tags prefixed with `#`, ex: `#minecraft:curse` (minecraft or custom) +# +# The names of these sections double as namespaces. +# The `survival_plus` section will create new tags +# The `minecraft` section will add to vanilla Minecraft enchantment tags. + +minecraft: + in_enchanting_table: # Custom enchantments which can be used in the enchanting table. + - survival_plus:building_reach diff --git a/src/main/resources/item-tags.yml b/src/main/resources/registry/item-tags.yml similarity index 100% rename from src/main/resources/item-tags.yml rename to src/main/resources/registry/item-tags.yml From e35a10e9eaffee10b9a655d5d2e24883d534dd59 Mon Sep 17 00:00:00 2001 From: ShaneBeee Date: Thu, 27 Feb 2025 19:03:16 -0800 Subject: [PATCH 133/133] Update readme with building instructions and add build for datapack --- README.md | 11 +++++++---- build.gradle.kts | 7 +++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bc85993..b291c72 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ # SurvivalPlus ![GitHub issues](https://img.shields.io/github/issues/ShaneBeeStudios/SurvivalPlus.svg) [![Discord](https://img.shields.io/discord/425192525091831808.svg)](https://discordapp.com/invite/km3UF8Q) -![Java CI with Maven](https://github.com/ShaneBeeStudios/SurvivalPlus/workflows/Java%20CI%20with%20Maven/badge.svg) - -![https://docs.google.com/uc?id=0B8D0KMKK7musWTBQaWozV0dxN2c](https://docs.google.com/uc?id=0B8D0KMKK7musWTBQaWozV0dxN2c) +![Java CI with Maven](https://github.com/ShaneBeeStudios/SurvivalPlus/workflows/Java%20CI%20with%20Gradle/badge.svg) ## Welcome to SurvivalPlus @@ -11,4 +9,9 @@ SurvivalPlus is a Minecraft mod that adds new contents and experience to Minecra All info can be found on the [**WIKI**](https://github.com/ShaneBeeStudios/SurvivalPlus/wiki) -Plugin downloads can be found on [**SpigotMC**](https://www.spigotmc.org/resources/survival-plus.67351/) +Plugin downloads can be found on (TBD) + +### BUILDING: +- To build the plugin run `./gradlew build` (This includes the datapack internally) +- To build the datapack run `./gradlew datapack` +- To build the resource pack run `./gradlew resourcepack` diff --git a/build.gradle.kts b/build.gradle.kts index 1c88b72..ad4204c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,6 +63,13 @@ tasks { destinationDirectory = file("build/libs/") } } + register("datapack", Zip::class) { + archiveFileName = "SurvivalPlusDataPack-${projectVersion}.zip" + from("src/main/resources/datapack") { + exclude("**/.DS_Store") + destinationDirectory = file("build/libs/") + } + } processResources { expand("version" to projectVersion) exclude("resource-pack/*")