From 1f89c58e7de54605e3187615d4f9c7cb782c1941 Mon Sep 17 00:00:00 2001 From: Globox1997 Date: Sat, 1 Jun 2024 22:03:43 +0200 Subject: [PATCH] updated to mc 1.20.6 --- .github/workflows/build.yml | 2 +- .github/workflows/publish.yml | 4 +- CHANGELOG.md | 6 +- build.gradle | 12 +- gradle.properties | 18 +- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 41 +- gradlew.bat | 35 +- settings.gradle | 18 +- .../net/medievalweapons/MedievalClient.java | 2 + .../net/medievalweapons/MedievalMain.java | 4 +- .../compat/CompatEntities.java | 60 +- .../medievalweapons/compat/CompatItems.java | 758 ++++++++++++------ .../medievalweapons/compat/CompatRender.java | 60 +- .../compat/RecipeGenerator.java | 4 +- .../config/MedievalConfig.java | 2 + .../medievalweapons/effect/BleedEffect.java | 3 +- .../medievalweapons/effect/StunEffect.java | 3 +- .../entity/FranciscaEntity.java | 26 +- .../entity/Francisca_Entity.java | 167 ---- ...all_Entity.java => HealingBallEntity.java} | 13 +- ...Javelin_Entity.java => JavelinEntity.java} | 49 +- ...erer.java => FranciscaEntityRenderer.java} | 12 +- ...er.java => HealingBallEntityRenderer.java} | 26 +- ...nderer.java => JavelinEntityRenderer.java} | 10 +- .../net/medievalweapons/init/CompatInit.java | 57 +- .../net/medievalweapons/init/EffectInit.java | 11 +- .../net/medievalweapons/init/EntityInit.java | 48 +- .../net/medievalweapons/init/ItemInit.java | 300 +++++-- .../medievalweapons/init/ParticleInit.java | 8 +- .../net/medievalweapons/init/RenderInit.java | 32 +- .../net/medievalweapons/item/BigAxeItem.java | 14 +- .../medievalweapons/item/Big_Axe_Item.java | 44 - .../net/medievalweapons/item/DaggerItem.java | 36 +- .../net/medievalweapons/item/Dagger_Item.java | 69 -- .../medievalweapons/item/FranciscaItem.java | 8 +- .../medievalweapons/item/Francisca_Item.java | 83 -- .../item/HealingStaffItem.java | 16 +- .../item/Healing_Staff_Item.java | 111 --- .../net/medievalweapons/item/JavelinItem.java | 18 +- .../medievalweapons/item/Javelin_Item.java | 84 -- .../net/medievalweapons/item/LanceItem.java | 34 +- .../net/medievalweapons/item/Lance_Item.java | 66 -- .../medievalweapons/item/LongSwordItem.java | 46 +- .../net/medievalweapons/item/MaceItem.java | 36 +- .../net/medievalweapons/item/NinjatoItem.java | 4 +- .../net/medievalweapons/item/RapierItem.java | 8 +- .../net/medievalweapons/item/SickleItem.java | 22 +- .../medievalweapons/item/SmallAxeItem.java | 7 +- .../medievalweapons/item/Small_Axe_Item.java | 14 - .../item/ThalleousSwordItem.java | 40 +- .../item/Thalleous_Sword_Item.java | 72 -- .../mixin/AreaEffectCloudEntityMixin.java | 3 +- .../medievalweapons/mixin/BowItemMixin.java | 22 +- .../mixin/EnchantmentHelperMixin.java | 32 +- .../mixin/EnchantmentMixin.java | 5 +- .../mixin/LivingEntityMixin.java | 30 +- .../mixin/MedievalWeaponsMixinPlugin.java | 8 +- .../medievalweapons/mixin/MobEntityMixin.java | 4 +- .../mixin/PlayerEntityMixin.java | 55 +- .../mixin/client/BipedEntityModelMixin.java | 8 +- .../mixin/client/ClientLivingEntityMixin.java | 8 +- .../mixin/client/DrawContextMixin.java | 26 +- .../mixin/client/GameRendererMixin.java | 40 - .../mixin/client/InGameHudMixin.java | 79 +- .../mixin/client/ItemRendererMixin.java | 8 +- .../mixin/client/MinecraftClientMixin.java | 27 +- .../mixin/compat/BigAxeItemMixin.java | 32 + .../mixin/compat/Big_Axe_ItemMixin.java | 32 - .../mixin/compat/DaggerItemMixin.java | 32 + .../mixin/compat/Dagger_ItemMixin.java | 32 - .../mixin/compat/FranciscaItemMixin.java | 32 + .../mixin/compat/Francisca_ItemMixin.java | 32 - .../mixin/compat/HealingStaffItemMixin.java | 32 + .../mixin/compat/Healing_Staff_ItemMixin.java | 32 - .../mixin/compat/JavelinItemMixin.java | 32 + .../mixin/compat/Javelin_ItemMixin.java | 32 - .../mixin/compat/LanceItemMixin.java | 32 + .../mixin/compat/Lance_ItemMixin.java | 32 - .../mixin/compat/LongSwordItemMixin.java | 32 + .../mixin/compat/Long_Sword_ItemMixin.java | 32 - .../mixin/compat/MaceItemMixin.java | 32 + .../mixin/compat/Mace_ItemMixin.java | 32 - .../mixin/compat/NinjatoItemMixin.java | 32 + .../mixin/compat/Ninjato_ItemMixin.java | 32 - .../mixin/compat/RapierItemMixin.java | 32 + .../mixin/compat/Rapier_ItemMixin.java | 32 - .../compat/ServerPlayNetworkHandlerMixin.java | 36 - .../mixin/compat/SickleItemMixin.java | 32 + .../mixin/compat/Sickle_ItemMixin.java | 32 - .../mixin/compat/SmallAxeItemMixin.java | 32 + .../mixin/compat/Small_Axe_ItemMixin.java | 32 - .../network/MedievalClientPacket.java | 11 +- .../network/MedievalServerPacket.java | 2 + .../medievalweapons/network/PlayerPacket.java | 34 - .../assets/medievalweapons/lang/en_us.json | 1 + .../medievalweapons/recipes/long_bow.json | 2 +- .../medievalweapons/recipes/recurve_bow.json | 2 +- .../data/minecraft/tags/items/swords.json | 152 ++-- .../uncraft_recipes/diamond_big_axe.json | 5 - .../uncraft_recipes/diamond_dagger.json | 5 - .../uncraft_recipes/diamond_francisca.json | 5 - .../diamond_healing_staff.json | 5 - .../uncraft_recipes/diamond_javelin.json | 5 - .../stuffz/uncraft_recipes/diamond_lance.json | 5 - .../uncraft_recipes/diamond_long_sword.json | 5 - .../stuffz/uncraft_recipes/diamond_mace.json | 5 - .../uncraft_recipes/diamond_small_axe.json | 5 - .../uncraft_recipes/golden_big_axe.json | 5 - .../stuffz/uncraft_recipes/golden_dagger.json | 5 - .../uncraft_recipes/golden_francisca.json | 5 - .../uncraft_recipes/golden_healing_staff.json | 5 - .../uncraft_recipes/golden_javelin.json | 5 - .../stuffz/uncraft_recipes/golden_lance.json | 5 - .../uncraft_recipes/golden_long_sword.json | 5 - .../stuffz/uncraft_recipes/golden_mace.json | 5 - .../uncraft_recipes/golden_small_axe.json | 5 - .../stuffz/uncraft_recipes/iron_big_axe.json | 5 - .../stuffz/uncraft_recipes/iron_dagger.json | 5 - .../uncraft_recipes/iron_francisca.json | 5 - .../uncraft_recipes/iron_healing_staff.json | 5 - .../stuffz/uncraft_recipes/iron_javelin.json | 5 - .../stuffz/uncraft_recipes/iron_lance.json | 5 - .../uncraft_recipes/iron_long_sword.json | 5 - .../stuffz/uncraft_recipes/iron_mace.json | 5 - .../uncraft_recipes/iron_small_axe.json | 5 - .../uncraft_recipes/netherite_big_axe.json | 5 - .../uncraft_recipes/netherite_dagger.json | 5 - .../uncraft_recipes/netherite_francisca.json | 5 - .../netherite_healing_staff.json | 5 - .../uncraft_recipes/netherite_javelin.json | 5 - .../uncraft_recipes/netherite_lance.json | 5 - .../uncraft_recipes/netherite_long_sword.json | 5 - .../uncraft_recipes/netherite_mace.json | 5 - .../uncraft_recipes/netherite_small_axe.json | 5 - .../uncraft_recipes/thalleous_sword.json | 5 - src/main/resources/fabric.mod.json | 2 +- .../resources/medievalweapons.mixins.json | 28 +- 139 files changed, 1767 insertions(+), 2438 deletions(-) delete mode 100644 src/main/java/net/medievalweapons/entity/Francisca_Entity.java rename src/main/java/net/medievalweapons/entity/{Healing_Ball_Entity.java => HealingBallEntity.java} (88%) rename src/main/java/net/medievalweapons/entity/{Javelin_Entity.java => JavelinEntity.java} (84%) rename src/main/java/net/medievalweapons/entity/renderer/{Francisca_Entity_Renderer.java => FranciscaEntityRenderer.java} (79%) rename src/main/java/net/medievalweapons/entity/renderer/{Healing_Ball_Entity_Renderer.java => HealingBallEntityRenderer.java} (62%) rename src/main/java/net/medievalweapons/entity/renderer/{Javelin_Entity_Renderer.java => JavelinEntityRenderer.java} (80%) delete mode 100644 src/main/java/net/medievalweapons/item/Big_Axe_Item.java delete mode 100644 src/main/java/net/medievalweapons/item/Dagger_Item.java delete mode 100644 src/main/java/net/medievalweapons/item/Francisca_Item.java delete mode 100644 src/main/java/net/medievalweapons/item/Healing_Staff_Item.java delete mode 100644 src/main/java/net/medievalweapons/item/Javelin_Item.java delete mode 100644 src/main/java/net/medievalweapons/item/Lance_Item.java delete mode 100644 src/main/java/net/medievalweapons/item/Small_Axe_Item.java delete mode 100644 src/main/java/net/medievalweapons/item/Thalleous_Sword_Item.java delete mode 100644 src/main/java/net/medievalweapons/mixin/client/GameRendererMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/BigAxeItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Big_Axe_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/DaggerItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Dagger_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/FranciscaItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Francisca_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/HealingStaffItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Healing_Staff_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/JavelinItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Javelin_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/LanceItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Lance_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/LongSwordItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Long_Sword_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/MaceItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Mace_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/NinjatoItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Ninjato_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/RapierItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Rapier_ItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/ServerPlayNetworkHandlerMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/SickleItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Sickle_ItemMixin.java create mode 100644 src/main/java/net/medievalweapons/mixin/compat/SmallAxeItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/mixin/compat/Small_Axe_ItemMixin.java delete mode 100644 src/main/java/net/medievalweapons/network/PlayerPacket.java delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_big_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_dagger.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_francisca.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_healing_staff.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_javelin.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_lance.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_long_sword.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_mace.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/diamond_small_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_big_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_dagger.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_francisca.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_healing_staff.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_javelin.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_lance.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_long_sword.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_mace.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/golden_small_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_big_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_dagger.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_francisca.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_healing_staff.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_javelin.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_lance.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_long_sword.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_mace.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/iron_small_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_big_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_dagger.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_francisca.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_healing_staff.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_javelin.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_lance.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_long_sword.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_mace.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/netherite_small_axe.json delete mode 100644 src/main/resources/data/stuffz/uncraft_recipes/thalleous_sword.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fc365f..79bb692 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: matrix: # Use these Java versions java: [ - 17, # Current Java LTS & minimum supported by Minecraft + 21, # Current Java LTS & minimum supported by Minecraft ] # and run on both Linux and Windows os: [ubuntu-20.04, windows-2022] diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index dfbf4e4..9f4a6ca 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,11 +8,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: set up JDK 17 + - name: set up JDK 21 uses: actions/setup-java@v2 with: distribution: 'adopt-hotspot' - java-version: 17 + java-version: 21 cache: 'gradle' - name: make gradle wrapper executable diff --git a/CHANGELOG.md b/CHANGELOG.md index ae0e14e..b7bc9ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,6 @@ ### Added: - ### Fixed: -- Fixed mythic upgrades compat -- Fixed better nether compat -- Fixed advancement log error +- ### Changed: -- Tweaked francisca renderer \ No newline at end of file +- Updated to mc 1.20.6 \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8b0477d..ed8a9af 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.3-SNAPSHOT' + id 'fabric-loom' version '1.6-SNAPSHOT' id 'maven-publish' } @@ -24,7 +24,7 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" // Reach Entity Attributes - modCompileOnly ("com.jamieswhiteshirt:reach-entity-attributes:${project.reach_attributes_version}"), { + modCompileOnly ("com.jamieswhiteshirt:reach-entity-attributes:${project.reach_attributes_version}") { exclude(group: "net.fabricmc.fabric-api") } // Config @@ -40,7 +40,7 @@ dependencies { exclude(group: "net.fabricmc.fabric-api") } // ARRP - modCompileOnly ("maven.modrinth:arrp:0.6.5.0") { + modCompileOnly ("maven.modrinth:arrp:L4ojkbl8") { exclude(group: "net.fabricmc.fabric-api") } // DragonLoot @@ -99,14 +99,14 @@ processResources { } tasks.withType(JavaCompile).configureEach { - it.options.release = 17 + it.options.release = 21 } java { withSourcesJar() - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } jar { diff --git a/gradle.properties b/gradle.properties index ea24029..bbe8836 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,19 +3,19 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.20.1 - yarn_mappings=1.20.1+build.10 - loader_version=0.14.22 + minecraft_version=1.20.6 + yarn_mappings=1.20.6+build.1 + loader_version=0.15.11 # Mod Properties - mod_version = 1.4.8 + mod_version = 1.1.1 maven_group = net.medievalweapons archives_base_name = medievalweapons # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.87.0+1.20.1 - cloth_config_version=11.0.99 - mod_menu_version=7.0.0 - reach_attributes_version=2.3.2 - brrp_version=1.0.1-mc1.20.1-fabric + fabric_version=0.98.0+1.20.6 + cloth_config_version=14.0.126 + mod_menu_version=10.0.0-beta.1 + reach_attributes_version=2.5.0 + brrp_version=1.0.3-mc1.20.6-fabric diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..e6441136f3d4ba8a0da8d277868979cfbc8ad796 100644 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 QuEJmfE|#`Dqx|px0L@K;Y5)KL diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fae0804..b82aa23 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..1aa94a4 100644 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# 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"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + 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 @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# 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" \ @@ -205,6 +214,12 @@ set -- \ 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. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..25da30d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,13 +41,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +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 @@ -56,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +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 @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +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! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +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 diff --git a/settings.gradle b/settings.gradle index b02216b..75c4d72 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,10 +1,10 @@ pluginManagement { - repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } - mavenCentral() - gradlePluginPortal() - } -} + repositories { + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + mavenCentral() + gradlePluginPortal() + } +} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/MedievalClient.java b/src/main/java/net/medievalweapons/MedievalClient.java index 1350511..1d63934 100644 --- a/src/main/java/net/medievalweapons/MedievalClient.java +++ b/src/main/java/net/medievalweapons/MedievalClient.java @@ -3,6 +3,7 @@ import net.fabricmc.api.ClientModInitializer; import net.medievalweapons.init.ModelProviderInit; import net.medievalweapons.init.RenderInit; +import net.medievalweapons.network.MedievalClientPacket; public class MedievalClient implements ClientModInitializer { @@ -10,6 +11,7 @@ public class MedievalClient implements ClientModInitializer { public void onInitializeClient() { ModelProviderInit.init(); RenderInit.init(); + MedievalClientPacket.init(); } } \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/MedievalMain.java b/src/main/java/net/medievalweapons/MedievalMain.java index 197d6cf..0ceb35c 100644 --- a/src/main/java/net/medievalweapons/MedievalMain.java +++ b/src/main/java/net/medievalweapons/MedievalMain.java @@ -2,7 +2,7 @@ import net.fabricmc.api.ModInitializer; import net.medievalweapons.init.*; -import net.medievalweapons.network.PlayerPacket; +import net.medievalweapons.network.MedievalServerPacket; import net.minecraft.util.Identifier; public class MedievalMain implements ModInitializer { @@ -23,7 +23,7 @@ public void onInitialize() { EffectInit.init(); EntityInit.init(); ParticleInit.init(); - PlayerPacket.init(); + MedievalServerPacket.init(); SoundInit.init(); TagInit.init(); } diff --git a/src/main/java/net/medievalweapons/compat/CompatEntities.java b/src/main/java/net/medievalweapons/compat/CompatEntities.java index a14559b..6c4185e 100644 --- a/src/main/java/net/medievalweapons/compat/CompatEntities.java +++ b/src/main/java/net/medievalweapons/compat/CompatEntities.java @@ -7,52 +7,52 @@ public class CompatEntities { // DragonLoot - public static EntityType DRAGON_JAVELIN; - public static EntityType DRAGON_FRANCISCA; + public static EntityType DRAGON_JAVELIN; + public static EntityType DRAGON_FRANCISCA; // Better Nether - public static EntityType NETHER_RUBY_FRANCISCA; - public static EntityType NETHER_RUBY_JAVELIN; - public static EntityType CINCINNASITE_FRANCISCA; - public static EntityType CINCINNASITE_JAVELIN; - public static EntityType CINCINNASITE_DIAMOND_FRANCISCA; - public static EntityType CINCINNASITE_DIAMOND_JAVELIN; + public static EntityType NETHER_RUBY_FRANCISCA; + public static EntityType NETHER_RUBY_JAVELIN; + public static EntityType CINCINNASITE_FRANCISCA; + public static EntityType CINCINNASITE_JAVELIN; + public static EntityType CINCINNASITE_DIAMOND_FRANCISCA; + public static EntityType CINCINNASITE_DIAMOND_JAVELIN; // Better End - public static EntityType TERMINITE_FRANCISCA; - public static EntityType TERMINITE_JAVELIN; - public static EntityType AETERNIUM_FRANCISCA; - public static EntityType AETERNIUM_JAVELIN; - public static EntityType THALLASIUM_FRANCISCA; - public static EntityType THALLASIUM_JAVELIN; + public static EntityType TERMINITE_FRANCISCA; + public static EntityType TERMINITE_JAVELIN; + public static EntityType AETERNIUM_FRANCISCA; + public static EntityType AETERNIUM_JAVELIN; + public static EntityType THALLASIUM_FRANCISCA; + public static EntityType THALLASIUM_JAVELIN; // Mythic Metals - public static EntityType ADAMANTITE_JAVELIN; - public static EntityType ADAMANTITE_FRANCISCA; + public static EntityType ADAMANTITE_JAVELIN; + public static EntityType ADAMANTITE_FRANCISCA; // BYG - public static EntityType PENDORITE_JAVELIN; - public static EntityType PENDORITE_FRANCISCA; + public static EntityType PENDORITE_JAVELIN; + public static EntityType PENDORITE_FRANCISCA; // Additional Additions - public static EntityType ROSE_GOLD_JAVELIN; - public static EntityType ROSE_GOLD_FRANCISCA; - public static EntityType GILDED_NETHERITE_JAVELIN; - public static EntityType GILDED_NETHERITE_FRANCISCA; + public static EntityType ROSE_GOLD_JAVELIN; + public static EntityType ROSE_GOLD_FRANCISCA; + public static EntityType GILDED_NETHERITE_JAVELIN; + public static EntityType GILDED_NETHERITE_FRANCISCA; // Paradise Lost - public static EntityType OLVITE_JAVELIN; - public static EntityType OLVITE_FRANCISCA; + public static EntityType OLVITE_JAVELIN; + public static EntityType OLVITE_FRANCISCA; // Mythic Upgrades - public static EntityType RUBY_NETHERITE_JAVELIN; - public static EntityType RUBY_NETHERITE_FRANCISCA; - public static EntityType SAPPHIRE_NETHERITE_JAVELIN; - public static EntityType SAPPHIRE_NETHERITE_FRANCISCA; + public static EntityType RUBY_NETHERITE_JAVELIN; + public static EntityType RUBY_NETHERITE_FRANCISCA; + public static EntityType SAPPHIRE_NETHERITE_JAVELIN; + public static EntityType SAPPHIRE_NETHERITE_FRANCISCA; // Deeper and Darker - public static EntityType WARDEN_JAVELIN; - public static EntityType WARDEN_FRANCISCA; + public static EntityType WARDEN_JAVELIN; + public static EntityType WARDEN_FRANCISCA; public static void loadEntities() { if (CompatItems.isBetterEndLoaded) { diff --git a/src/main/java/net/medievalweapons/compat/CompatItems.java b/src/main/java/net/medievalweapons/compat/CompatItems.java index f2351a7..6affdde 100644 --- a/src/main/java/net/medievalweapons/compat/CompatItems.java +++ b/src/main/java/net/medievalweapons/compat/CompatItems.java @@ -13,7 +13,11 @@ import net.medievalweapons.MedievalMain; import net.medievalweapons.init.ItemInit; import net.medievalweapons.item.*; +import net.minecraft.component.type.AttributeModifierSlot; +import net.minecraft.entity.attribute.EntityAttributeModifier; +import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.item.Item; +import net.minecraft.item.SwordItem; import net.trique.mythicupgrades.item.MUToolMaterials; import nourl.mythicmetals.item.tools.MythicToolMaterials; import potionstudios.byg.common.item.BYGTier; @@ -31,335 +35,621 @@ public class CompatItems { public static Boolean isDeeperDarkerLoaded = fabricLoader.isModLoaded("deeperdarker"); // DragonLoot - public static Francisca_Item DRAGON_FRANCISCA_ITEM; - public static Javelin_Item DRAGON_JAVELIN_ITEM; + public static FranciscaItem DRAGON_FRANCISCA_ITEM; + public static JavelinItem DRAGON_JAVELIN_ITEM; // Better Nether - public static Francisca_Item NETHER_RUBY_FRANCISCA_ITEM; - public static Javelin_Item NETHER_RUBY_JAVELIN_ITEM; - public static Francisca_Item CINCINNASITE_FRANCISCA_ITEM; - public static Javelin_Item CINCINNASITE_JAVELIN_ITEM; - public static Francisca_Item CINCINNASITE_DIAMOND_FRANCISCA_ITEM; - public static Javelin_Item CINCINNASITE_DIAMOND_JAVELIN_ITEM; + public static FranciscaItem NETHER_RUBY_FRANCISCA_ITEM; + public static JavelinItem NETHER_RUBY_JAVELIN_ITEM; + public static FranciscaItem CINCINNASITE_FRANCISCA_ITEM; + public static JavelinItem CINCINNASITE_JAVELIN_ITEM; + public static FranciscaItem CINCINNASITE_DIAMOND_FRANCISCA_ITEM; + public static JavelinItem CINCINNASITE_DIAMOND_JAVELIN_ITEM; // Better End - public static Francisca_Item TERMINITE_FRANCISCA_ITEM; - public static Javelin_Item TERMINITE_JAVELIN_ITEM; - public static Francisca_Item AETERNIUM_FRANCISCA_ITEM; - public static Javelin_Item AETERNIUM_JAVELIN_ITEM; - public static Francisca_Item THALLASIUM_FRANCISCA_ITEM; - public static Javelin_Item THALLASIUM_JAVELIN_ITEM; + public static FranciscaItem TERMINITE_FRANCISCA_ITEM; + public static JavelinItem TERMINITE_JAVELIN_ITEM; + public static FranciscaItem AETERNIUM_FRANCISCA_ITEM; + public static JavelinItem AETERNIUM_JAVELIN_ITEM; + public static FranciscaItem THALLASIUM_FRANCISCA_ITEM; + public static JavelinItem THALLASIUM_JAVELIN_ITEM; // Mythic Metals - public static Francisca_Item ADAMANTITE_FRANCISCA_ITEM; - public static Javelin_Item ADAMANTITE_JAVELIN_ITEM; + public static FranciscaItem ADAMANTITE_FRANCISCA_ITEM; + public static JavelinItem ADAMANTITE_JAVELIN_ITEM; // BYG - public static Francisca_Item PENDORITE_FRANCISCA_ITEM; - public static Javelin_Item PENDORITE_JAVELIN_ITEM; + public static FranciscaItem PENDORITE_FRANCISCA_ITEM; + public static JavelinItem PENDORITE_JAVELIN_ITEM; // Additional Additions - public static Francisca_Item ROSE_GOLD_FRANCISCA_ITEM; - public static Javelin_Item ROSE_GOLD_JAVELIN_ITEM; - public static Francisca_Item GILDED_NETHERITE_FRANCISCA_ITEM; - public static Javelin_Item GILDED_NETHERITE_JAVELIN_ITEM; + public static FranciscaItem ROSE_GOLD_FRANCISCA_ITEM; + public static JavelinItem ROSE_GOLD_JAVELIN_ITEM; + public static FranciscaItem GILDED_NETHERITE_FRANCISCA_ITEM; + public static JavelinItem GILDED_NETHERITE_JAVELIN_ITEM; // Paradise Lost - public static Francisca_Item OLVITE_FRANCISCA_ITEM; - public static Javelin_Item OLVITE_JAVELIN_ITEM; + public static FranciscaItem OLVITE_FRANCISCA_ITEM; + public static JavelinItem OLVITE_JAVELIN_ITEM; // Mythic Upgrades - public static Francisca_Item RUBY_NETHERITE_FRANCISCA_ITEM; - public static Javelin_Item RUBY_NETHERITE_JAVELIN_ITEM; - public static Francisca_Item SAPPHIRE_NETHERITE_FRANCISCA_ITEM; - public static Javelin_Item SAPPHIRE_NETHERITE_JAVELIN_ITEM; + public static FranciscaItem RUBY_NETHERITE_FRANCISCA_ITEM; + public static JavelinItem RUBY_NETHERITE_JAVELIN_ITEM; + public static FranciscaItem SAPPHIRE_NETHERITE_FRANCISCA_ITEM; + public static JavelinItem SAPPHIRE_NETHERITE_JAVELIN_ITEM; // Deeper and Darker - public static Francisca_Item WARDEN_FRANCISCA_ITEM; - public static Javelin_Item WARDEN_JAVELIN_ITEM; + public static FranciscaItem WARDEN_FRANCISCA_ITEM; + public static JavelinItem WARDEN_JAVELIN_ITEM; public static void loadItems() { if (isBetterEndLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("terminite_small_axe"), new Small_Axe_Item(EndToolMaterial.TERMINITE, 5, -2.9F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_long_sword"), new Long_Sword_Item(EndToolMaterial.TERMINITE, 6, -3.0F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_dagger"), new Dagger_Item(EndToolMaterial.TERMINITE, 2, -2.0F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_big_axe"), new Big_Axe_Item(EndToolMaterial.TERMINITE, 6, -3.4F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_lance"), new Lance_Item(EndToolMaterial.TERMINITE, 3, -3.2F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_healing_staff"), new Healing_Staff_Item(EndToolMaterial.TERMINITE, 1, -3.3F, 4, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_mace"), new Mace_Item(EndToolMaterial.TERMINITE, 4, -2.8F, 2, new Item.Settings())); - TERMINITE_FRANCISCA_ITEM = ItemInit.register("terminite_francisca", - new Francisca_Item(EndToolMaterial.TERMINITE, 1.0F, -2.6F, () -> CompatEntities.TERMINITE_FRANCISCA, new Item.Settings())); - TERMINITE_JAVELIN_ITEM = ItemInit.register("terminite_javelin", new Javelin_Item(EndToolMaterial.TERMINITE, 2.2F, -2.7F, () -> CompatEntities.TERMINITE_JAVELIN, new Item.Settings())); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_small_axe"), + new SmallAxeItem(EndToolMaterial.TERMINITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 5, -2.9f)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_long_sword"), + new LongSwordItem(EndToolMaterial.TERMINITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_dagger"), + new DaggerItem(EndToolMaterial.TERMINITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_big_axe"), + new BigAxeItem(EndToolMaterial.TERMINITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 6, -3.4f)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_lance"), + new LanceItem(EndToolMaterial.TERMINITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_healing_staff"), + new HealingStaffItem(EndToolMaterial.TERMINITE, 4, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 1, -3.3f)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_mace"), + new MaceItem(EndToolMaterial.TERMINITE, 2, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + TERMINITE_FRANCISCA_ITEM = ItemInit.register("terminite_francisca", new FranciscaItem(EndToolMaterial.TERMINITE, () -> CompatEntities.TERMINITE_FRANCISCA, new Item.Settings())); + TERMINITE_JAVELIN_ITEM = ItemInit.register("terminite_javelin", new JavelinItem(EndToolMaterial.TERMINITE, () -> CompatEntities.TERMINITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 1, -2.6f)))); ItemInit.ITEMS.put(MedievalMain.ID("terminite_francisca"), TERMINITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("terminite_javelin"), TERMINITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_ninjato"), new Ninjato_Item(EndToolMaterial.TERMINITE, 2, -2.1F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_sickle"), new Sickle_Item(EndToolMaterial.TERMINITE, 2, -2.2F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("terminite_rapier"), new Rapier_Item(EndToolMaterial.TERMINITE, 2, -2.0F, 2, new Item.Settings())); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_ninjato"), + new NinjatoItem(EndToolMaterial.TERMINITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 2, -2.1f)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_sickle"), + new SickleItem(EndToolMaterial.TERMINITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 2, -2.2f)))); + ItemInit.ITEMS.put(MedievalMain.ID("terminite_rapier"), + new RapierItem(EndToolMaterial.TERMINITE, 2, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.TERMINITE, 2, -2.0f)))); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_small_axe"), new Small_Axe_Item(EndToolMaterial.AETERNIUM, 5, -2.9F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_long_sword"), new Long_Sword_Item(EndToolMaterial.AETERNIUM, 6, -3.0F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_dagger"), new Dagger_Item(EndToolMaterial.AETERNIUM, 2, -2.0F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_big_axe"), new Big_Axe_Item(EndToolMaterial.AETERNIUM, 6, -3.4F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_lance"), new Lance_Item(EndToolMaterial.AETERNIUM, 3, -3.2F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_healing_staff"), new Healing_Staff_Item(EndToolMaterial.AETERNIUM, 1, -3.3F, 4, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_mace"), new Mace_Item(EndToolMaterial.AETERNIUM, 4, -2.8F, 2, new Item.Settings())); - AETERNIUM_FRANCISCA_ITEM = ItemInit.register("aeternium_francisca", - new Francisca_Item(EndToolMaterial.AETERNIUM, 1.0F, -2.6F, () -> CompatEntities.AETERNIUM_FRANCISCA, new Item.Settings())); - AETERNIUM_JAVELIN_ITEM = ItemInit.register("aeternium_javelin", new Javelin_Item(EndToolMaterial.AETERNIUM, 2.2F, -2.7F, () -> CompatEntities.AETERNIUM_JAVELIN, new Item.Settings())); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_small_axe"), + new SmallAxeItem(EndToolMaterial.AETERNIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 5, -2.9f)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_long_sword"), + new LongSwordItem(EndToolMaterial.AETERNIUM, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_dagger"), + new DaggerItem(EndToolMaterial.AETERNIUM, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_big_axe"), + new BigAxeItem(EndToolMaterial.AETERNIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 6, -3.4f)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_lance"), + new LanceItem(EndToolMaterial.AETERNIUM, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_healing_staff"), + new HealingStaffItem(EndToolMaterial.AETERNIUM, 4, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 1, -3.3f)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_mace"), + new MaceItem(EndToolMaterial.AETERNIUM, 2, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + AETERNIUM_FRANCISCA_ITEM = ItemInit.register("aeternium_francisca", new FranciscaItem(EndToolMaterial.AETERNIUM, () -> CompatEntities.AETERNIUM_FRANCISCA, new Item.Settings())); + AETERNIUM_JAVELIN_ITEM = ItemInit.register("aeternium_javelin", new JavelinItem(EndToolMaterial.AETERNIUM, () -> CompatEntities.AETERNIUM_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 1, -2.6f)))); ItemInit.ITEMS.put(MedievalMain.ID("aeternium_francisca"), AETERNIUM_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("aeternium_javelin"), AETERNIUM_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_ninjato"), new Ninjato_Item(EndToolMaterial.AETERNIUM, 2, -2.1F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_sickle"), new Sickle_Item(EndToolMaterial.AETERNIUM, 2, -2.2F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("aeternium_rapier"), new Rapier_Item(EndToolMaterial.AETERNIUM, 2, -2.0F, 2, new Item.Settings())); - - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_small_axe"), new Small_Axe_Item(EndToolMaterial.THALLASIUM, 5, -2.9F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_long_sword"), new Long_Sword_Item(EndToolMaterial.THALLASIUM, 6, -3.0F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_dagger"), new Dagger_Item(EndToolMaterial.THALLASIUM, 2, -2.0F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_big_axe"), new Big_Axe_Item(EndToolMaterial.THALLASIUM, 6, -3.4F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_lance"), new Lance_Item(EndToolMaterial.THALLASIUM, 3, -3.2F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_healing_staff"), new Healing_Staff_Item(EndToolMaterial.THALLASIUM, 1, -3.3F, 4, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_mace"), new Mace_Item(EndToolMaterial.THALLASIUM, 4, -2.8F, 2, new Item.Settings())); - THALLASIUM_FRANCISCA_ITEM = ItemInit.register("thallasium_francisca", - new Francisca_Item(EndToolMaterial.THALLASIUM, 1.0F, -2.6F, () -> CompatEntities.THALLASIUM_FRANCISCA, new Item.Settings())); - THALLASIUM_JAVELIN_ITEM = ItemInit.register("thallasium_javelin", new Javelin_Item(EndToolMaterial.THALLASIUM, 2.2F, -2.7F, () -> CompatEntities.THALLASIUM_JAVELIN, new Item.Settings())); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_ninjato"), + new NinjatoItem(EndToolMaterial.AETERNIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 2, -2.1f)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_sickle"), + new SickleItem(EndToolMaterial.AETERNIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 2, -2.2f)))); + ItemInit.ITEMS.put(MedievalMain.ID("aeternium_rapier"), + new RapierItem(EndToolMaterial.AETERNIUM, 2, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.AETERNIUM, 2, -2.0f)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_small_axe"), + new SmallAxeItem(EndToolMaterial.THALLASIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 5, -2.9f)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_long_sword"), + new LongSwordItem(EndToolMaterial.THALLASIUM, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_dagger"), + new DaggerItem(EndToolMaterial.THALLASIUM, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_big_axe"), + new BigAxeItem(EndToolMaterial.THALLASIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 6, -3.4f)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_lance"), + new LanceItem(EndToolMaterial.THALLASIUM, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_healing_staff"), + new HealingStaffItem(EndToolMaterial.THALLASIUM, 3, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 1, -3.3f)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_mace"), + new MaceItem(EndToolMaterial.THALLASIUM, 1, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + THALLASIUM_FRANCISCA_ITEM = ItemInit.register("thallasium_francisca", new FranciscaItem(EndToolMaterial.THALLASIUM, () -> CompatEntities.THALLASIUM_FRANCISCA, new Item.Settings())); + THALLASIUM_JAVELIN_ITEM = ItemInit.register("thallasium_javelin", new JavelinItem(EndToolMaterial.THALLASIUM, () -> CompatEntities.THALLASIUM_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 1, -2.6f)))); ItemInit.ITEMS.put(MedievalMain.ID("thallasium_francisca"), THALLASIUM_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("thallasium_javelin"), THALLASIUM_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_ninjato"), new Ninjato_Item(EndToolMaterial.THALLASIUM, 2, -2.1F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_sickle"), new Sickle_Item(EndToolMaterial.THALLASIUM, 2, -2.2F, new Item.Settings())); - ItemInit.ITEMS.put(MedievalMain.ID("thallasium_rapier"), new Rapier_Item(EndToolMaterial.THALLASIUM, 2, -2.0F, 2, new Item.Settings())); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_ninjato"), + new NinjatoItem(EndToolMaterial.THALLASIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 2, -2.1f)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_sickle"), + new SickleItem(EndToolMaterial.THALLASIUM, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 2, -2.2f)))); + ItemInit.ITEMS.put(MedievalMain.ID("thallasium_rapier"), + new RapierItem(EndToolMaterial.THALLASIUM, 1, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(EndToolMaterial.THALLASIUM, 2, -2.0f)))); ItemInit.MATERIAL_STRINGS.add("terminite"); ItemInit.MATERIAL_STRINGS.add("aeternium"); ItemInit.MATERIAL_STRINGS.add("thallasium"); } if (isBetterNetherLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_small_axe"), new Small_Axe_Item(BNToolMaterial.NETHER_RUBY, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_long_sword"), new Long_Sword_Item(BNToolMaterial.NETHER_RUBY, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_dagger"), new Dagger_Item(BNToolMaterial.NETHER_RUBY, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_big_axe"), new Big_Axe_Item(BNToolMaterial.NETHER_RUBY, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_lance"), new Lance_Item(BNToolMaterial.NETHER_RUBY, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_healing_staff"), new Healing_Staff_Item(BNToolMaterial.NETHER_RUBY, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_mace"), new Mace_Item(BNToolMaterial.NETHER_RUBY, 4, -2.8F, 2, new Item.Settings().fireproof())); - NETHER_RUBY_FRANCISCA_ITEM = ItemInit.register("nether_ruby_francisca", - new Francisca_Item(BNToolMaterial.NETHER_RUBY, 1.0F, -2.6F, () -> CompatEntities.NETHER_RUBY_FRANCISCA, new Item.Settings().fireproof())); - NETHER_RUBY_JAVELIN_ITEM = ItemInit.register("nether_ruby_javelin", - new Javelin_Item(BNToolMaterial.NETHER_RUBY, 2.2F, -2.7F, () -> CompatEntities.NETHER_RUBY_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_small_axe"), + new SmallAxeItem(BNToolMaterial.NETHER_RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_long_sword"), new LongSwordItem(BNToolMaterial.NETHER_RUBY, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_dagger"), new DaggerItem(BNToolMaterial.NETHER_RUBY, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_big_axe"), + new BigAxeItem(BNToolMaterial.NETHER_RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_lance"), new LanceItem(BNToolMaterial.NETHER_RUBY, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_healing_staff"), + new HealingStaffItem(BNToolMaterial.NETHER_RUBY, 2, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_mace"), new MaceItem(BNToolMaterial.NETHER_RUBY, 1, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + NETHER_RUBY_FRANCISCA_ITEM = ItemInit.register("nether_ruby_francisca", new FranciscaItem(BNToolMaterial.NETHER_RUBY, () -> CompatEntities.NETHER_RUBY_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 1, -2.6f)))); + NETHER_RUBY_JAVELIN_ITEM = ItemInit.register("nether_ruby_javelin", new JavelinItem(BNToolMaterial.NETHER_RUBY, () -> CompatEntities.NETHER_RUBY_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_francisca"), NETHER_RUBY_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_javelin"), NETHER_RUBY_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_ninjato"), new Ninjato_Item(BNToolMaterial.NETHER_RUBY, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_sickle"), new Sickle_Item(BNToolMaterial.NETHER_RUBY, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_rapier"), new Rapier_Item(BNToolMaterial.NETHER_RUBY, 2, -2.0F, 2, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_ninjato"), + new NinjatoItem(BNToolMaterial.NETHER_RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_sickle"), + new SickleItem(BNToolMaterial.NETHER_RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("nether_ruby_rapier"), + new RapierItem(BNToolMaterial.NETHER_RUBY, 1, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.NETHER_RUBY, 2, -2.0f)).fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_small_axe"), new Small_Axe_Item(BNToolMaterial.CINCINNASITE, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_long_sword"), new Long_Sword_Item(BNToolMaterial.CINCINNASITE, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_dagger"), new Dagger_Item(BNToolMaterial.CINCINNASITE, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_big_axe"), new Big_Axe_Item(BNToolMaterial.CINCINNASITE, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_lance"), new Lance_Item(BNToolMaterial.CINCINNASITE, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_healing_staff"), new Healing_Staff_Item(BNToolMaterial.CINCINNASITE, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_mace"), new Mace_Item(BNToolMaterial.CINCINNASITE, 4, -2.8F, 2, new Item.Settings().fireproof())); - CINCINNASITE_FRANCISCA_ITEM = ItemInit.register("cincinnasite_francisca", - new Francisca_Item(BNToolMaterial.CINCINNASITE, 1.0F, -2.6F, () -> CompatEntities.CINCINNASITE_FRANCISCA, new Item.Settings().fireproof())); - CINCINNASITE_JAVELIN_ITEM = ItemInit.register("cincinnasite_javelin", - new Javelin_Item(BNToolMaterial.CINCINNASITE, 2.2F, -2.7F, () -> CompatEntities.CINCINNASITE_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_small_axe"), + new SmallAxeItem(BNToolMaterial.CINCINNASITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_long_sword"), new LongSwordItem(BNToolMaterial.CINCINNASITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_dagger"), new DaggerItem(BNToolMaterial.CINCINNASITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_big_axe"), + new BigAxeItem(BNToolMaterial.CINCINNASITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_lance"), new LanceItem(BNToolMaterial.CINCINNASITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_healing_staff"), new HealingStaffItem(BNToolMaterial.CINCINNASITE, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_mace"), new MaceItem(BNToolMaterial.CINCINNASITE, 1, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + CINCINNASITE_FRANCISCA_ITEM = ItemInit.register("cincinnasite_francisca", new FranciscaItem(BNToolMaterial.CINCINNASITE, () -> CompatEntities.CINCINNASITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 1, -2.6f)))); + CINCINNASITE_JAVELIN_ITEM = ItemInit.register("cincinnasite_javelin", new JavelinItem(BNToolMaterial.CINCINNASITE, () -> CompatEntities.CINCINNASITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_francisca"), CINCINNASITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_javelin"), CINCINNASITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_ninjato"), new Ninjato_Item(BNToolMaterial.CINCINNASITE, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_sickle"), new Sickle_Item(BNToolMaterial.CINCINNASITE, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_rapier"), new Rapier_Item(BNToolMaterial.CINCINNASITE, 2, -2.0F, 2, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_ninjato"), + new NinjatoItem(BNToolMaterial.CINCINNASITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_sickle"), + new SickleItem(BNToolMaterial.CINCINNASITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_rapier"), + new RapierItem(BNToolMaterial.CINCINNASITE, 1, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE, 2, -2.0f)).fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_small_axe"), new Small_Axe_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_long_sword"), new Long_Sword_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_dagger"), new Dagger_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_big_axe"), new Big_Axe_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_lance"), new Lance_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_healing_staff"), new Healing_Staff_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 1, -3.3F, 5, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_mace"), new Mace_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 4, -2.8F, 3, new Item.Settings().fireproof())); - CINCINNASITE_DIAMOND_FRANCISCA_ITEM = ItemInit.register("cincinnasite_diamond_francisca", - new Francisca_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 1.0F, -2.6F, () -> CompatEntities.CINCINNASITE_DIAMOND_FRANCISCA, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_small_axe"), new SmallAxeItem(BNToolMaterial.CINCINNASITE_DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_long_sword"), new LongSwordItem(BNToolMaterial.CINCINNASITE_DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_dagger"), new DaggerItem(BNToolMaterial.CINCINNASITE_DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_big_axe"), new BigAxeItem(BNToolMaterial.CINCINNASITE_DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_lance"), new LanceItem(BNToolMaterial.CINCINNASITE_DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_healing_staff"), new HealingStaffItem(BNToolMaterial.CINCINNASITE_DIAMOND, 5, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_mace"), new MaceItem(BNToolMaterial.CINCINNASITE_DIAMOND, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + CINCINNASITE_DIAMOND_FRANCISCA_ITEM = ItemInit.register("cincinnasite_diamond_francisca", new FranciscaItem(BNToolMaterial.CINCINNASITE_DIAMOND, + () -> CompatEntities.CINCINNASITE_DIAMOND_FRANCISCA, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 1, -2.6f)))); CINCINNASITE_DIAMOND_JAVELIN_ITEM = ItemInit.register("cincinnasite_diamond_javelin", - new Javelin_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 2.2F, -2.7F, () -> CompatEntities.CINCINNASITE_DIAMOND_JAVELIN, new Item.Settings().fireproof())); + new JavelinItem(BNToolMaterial.CINCINNASITE_DIAMOND, () -> CompatEntities.CINCINNASITE_DIAMOND_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_francisca"), CINCINNASITE_DIAMOND_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_javelin"), CINCINNASITE_DIAMOND_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_ninjato"), new Ninjato_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_sickle"), new Sickle_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_rapier"), new Rapier_Item(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.0F, 3, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_ninjato"), new NinjatoItem(BNToolMaterial.CINCINNASITE_DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_sickle"), new SickleItem(BNToolMaterial.CINCINNASITE_DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("cincinnasite_diamond_rapier"), new RapierItem(BNToolMaterial.CINCINNASITE_DIAMOND, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BNToolMaterial.CINCINNASITE_DIAMOND, 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("nether_ruby"); ItemInit.MATERIAL_STRINGS.add("cincinnasite"); ItemInit.MATERIAL_STRINGS.add("cincinnasite_diamond"); } if (isDragonLootLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("dragon_small_axe"), new Small_Axe_Item(DragonToolMaterial.getInstance(), 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_long_sword"), new Long_Sword_Item(DragonToolMaterial.getInstance(), 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_dagger"), new Dagger_Item(DragonToolMaterial.getInstance(), 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_big_axe"), new Big_Axe_Item(DragonToolMaterial.getInstance(), 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_lance"), new Lance_Item(DragonToolMaterial.getInstance(), 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_healing_staff"), new Healing_Staff_Item(DragonToolMaterial.getInstance(), 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_mace"), new Mace_Item(DragonToolMaterial.getInstance(), 4, -2.8F, 3, new Item.Settings().fireproof())); - DRAGON_FRANCISCA_ITEM = ItemInit.register("dragon_francisca", - new Francisca_Item(DragonToolMaterial.getInstance(), 1.0F, -2.6F, () -> CompatEntities.DRAGON_FRANCISCA, new Item.Settings().fireproof())); - DRAGON_JAVELIN_ITEM = ItemInit.register("dragon_javelin", - new Javelin_Item(DragonToolMaterial.getInstance(), 2.2F, -2.7F, () -> CompatEntities.DRAGON_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_small_axe"), new SmallAxeItem(DragonToolMaterial.getInstance(), + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_long_sword"), new LongSwordItem(DragonToolMaterial.getInstance(), + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_dagger"), new DaggerItem(DragonToolMaterial.getInstance(), + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_big_axe"), new BigAxeItem(DragonToolMaterial.getInstance(), + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_lance"), new LanceItem(DragonToolMaterial.getInstance(), + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_healing_staff"), new HealingStaffItem(DragonToolMaterial.getInstance(), 5, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_mace"), new MaceItem(DragonToolMaterial.getInstance(), 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + DRAGON_FRANCISCA_ITEM = ItemInit.register("dragon_francisca", new FranciscaItem(DragonToolMaterial.getInstance(), () -> CompatEntities.DRAGON_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 1, -2.6f)))); + DRAGON_JAVELIN_ITEM = ItemInit.register("dragon_javelin", new JavelinItem(DragonToolMaterial.getInstance(), () -> CompatEntities.DRAGON_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("dragon_francisca"), DRAGON_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("dragon_javelin"), DRAGON_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_ninjato"), new Ninjato_Item(DragonToolMaterial.getInstance(), 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_sickle"), new Sickle_Item(DragonToolMaterial.getInstance(), 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("dragon_rapier"), new Rapier_Item(DragonToolMaterial.getInstance(), 2, -2.0F, 3, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_ninjato"), new NinjatoItem(DragonToolMaterial.getInstance(), + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_sickle"), new SickleItem(DragonToolMaterial.getInstance(), + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("dragon_rapier"), new RapierItem(DragonToolMaterial.getInstance(), 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DragonToolMaterial.getInstance(), 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("dragon"); } if (isMythicMetalsLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_small_axe"), new Small_Axe_Item(MythicToolMaterials.ADAMANTITE, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_long_sword"), new Long_Sword_Item(MythicToolMaterials.ADAMANTITE, 5, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_dagger"), new Dagger_Item(MythicToolMaterials.ADAMANTITE, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_big_axe"), new Big_Axe_Item(MythicToolMaterials.ADAMANTITE, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_lance"), new Lance_Item(MythicToolMaterials.ADAMANTITE, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_healing_staff"), new Healing_Staff_Item(MythicToolMaterials.ADAMANTITE, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_mace"), new Mace_Item(MythicToolMaterials.ADAMANTITE, 4, -3.0F, 2, new Item.Settings().fireproof())); - ADAMANTITE_FRANCISCA_ITEM = ItemInit.register("adamantite_francisca", - new Francisca_Item(MythicToolMaterials.ADAMANTITE, 2.0F, -2.6F, () -> CompatEntities.ADAMANTITE_FRANCISCA, new Item.Settings().fireproof())); - ADAMANTITE_JAVELIN_ITEM = ItemInit.register("adamantite_javelin", - new Javelin_Item(MythicToolMaterials.ADAMANTITE, 2.2F, -2.7F, () -> CompatEntities.ADAMANTITE_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_small_axe"), new SmallAxeItem(MythicToolMaterials.ADAMANTITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_long_sword"), new LongSwordItem(MythicToolMaterials.ADAMANTITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_dagger"), new DaggerItem(MythicToolMaterials.ADAMANTITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_big_axe"), + new BigAxeItem(MythicToolMaterials.ADAMANTITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_lance"), new LanceItem(MythicToolMaterials.ADAMANTITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_healing_staff"), new HealingStaffItem(MythicToolMaterials.ADAMANTITE, 4, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_mace"), new MaceItem(MythicToolMaterials.ADAMANTITE, 2, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ADAMANTITE_FRANCISCA_ITEM = ItemInit.register("adamantite_francisca", new FranciscaItem(MythicToolMaterials.ADAMANTITE, () -> CompatEntities.ADAMANTITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 1, -2.6f)))); + ADAMANTITE_JAVELIN_ITEM = ItemInit.register("adamantite_javelin", new JavelinItem(MythicToolMaterials.ADAMANTITE, () -> CompatEntities.ADAMANTITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("adamantite_francisca"), ADAMANTITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("adamantite_javelin"), ADAMANTITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_ninjato"), new Ninjato_Item(MythicToolMaterials.ADAMANTITE, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_sickle"), new Sickle_Item(MythicToolMaterials.ADAMANTITE, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("adamantite_rapier"), new Rapier_Item(MythicToolMaterials.ADAMANTITE, 2, -2.0F, 3, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_ninjato"), + new NinjatoItem(MythicToolMaterials.ADAMANTITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_sickle"), + new SickleItem(MythicToolMaterials.ADAMANTITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("adamantite_rapier"), new RapierItem(MythicToolMaterials.ADAMANTITE, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MythicToolMaterials.ADAMANTITE, 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("adamantite"); } if (isParadiseLostLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("olvite_small_axe"), new Small_Axe_Item(ParadiseLostToolMaterials.OLVITE, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_long_sword"), new Long_Sword_Item(ParadiseLostToolMaterials.OLVITE, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_dagger"), new Dagger_Item(ParadiseLostToolMaterials.OLVITE, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_big_axe"), new Big_Axe_Item(ParadiseLostToolMaterials.OLVITE, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_lance"), new Lance_Item(ParadiseLostToolMaterials.OLVITE, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_healing_staff"), new Healing_Staff_Item(ParadiseLostToolMaterials.OLVITE, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_mace"), new Mace_Item(ParadiseLostToolMaterials.OLVITE, 4, -2.8F, 3, new Item.Settings().fireproof())); - OLVITE_FRANCISCA_ITEM = ItemInit.register("olvite_francisca", - new Francisca_Item(ParadiseLostToolMaterials.OLVITE, 1.0F, -2.6F, () -> CompatEntities.OLVITE_FRANCISCA, new Item.Settings().fireproof())); - OLVITE_JAVELIN_ITEM = ItemInit.register("olvite_javelin", - new Javelin_Item(ParadiseLostToolMaterials.OLVITE, 2.2F, -2.7F, () -> CompatEntities.OLVITE_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_small_axe"), new SmallAxeItem(ParadiseLostToolMaterials.OLVITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_long_sword"), new LongSwordItem(ParadiseLostToolMaterials.OLVITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_dagger"), new DaggerItem(ParadiseLostToolMaterials.OLVITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_big_axe"), new BigAxeItem(ParadiseLostToolMaterials.OLVITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_lance"), new LanceItem(ParadiseLostToolMaterials.OLVITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_healing_staff"), new HealingStaffItem(ParadiseLostToolMaterials.OLVITE, 4, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_mace"), new MaceItem(ParadiseLostToolMaterials.OLVITE, 1, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + OLVITE_FRANCISCA_ITEM = ItemInit.register("olvite_francisca", new FranciscaItem(ParadiseLostToolMaterials.OLVITE, () -> CompatEntities.OLVITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 1, -2.6f)))); + OLVITE_JAVELIN_ITEM = ItemInit.register("olvite_javelin", new JavelinItem(ParadiseLostToolMaterials.OLVITE, () -> CompatEntities.OLVITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("olvite_francisca"), OLVITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("olvite_javelin"), OLVITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_ninjato"), new Ninjato_Item(ParadiseLostToolMaterials.OLVITE, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_sickle"), new Sickle_Item(ParadiseLostToolMaterials.OLVITE, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("olvite_rapier"), new Rapier_Item(ParadiseLostToolMaterials.OLVITE, 2, -2.0F, 3, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_ninjato"), new NinjatoItem(ParadiseLostToolMaterials.OLVITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_sickle"), new SickleItem(ParadiseLostToolMaterials.OLVITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("olvite_rapier"), new RapierItem(ParadiseLostToolMaterials.OLVITE, 2, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ParadiseLostToolMaterials.OLVITE, 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("olvite"); } if (isBYGLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_small_axe"), new Small_Axe_Item(BYGTier.PENDORITE, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_long_sword"), new Long_Sword_Item(BYGTier.PENDORITE, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_dagger"), new Dagger_Item(BYGTier.PENDORITE, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_big_axe"), new Big_Axe_Item(BYGTier.PENDORITE, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_lance"), new Lance_Item(BYGTier.PENDORITE, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_healing_staff"), new Healing_Staff_Item(BYGTier.PENDORITE, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_mace"), new Mace_Item(BYGTier.PENDORITE, 4, -2.8F, 2, new Item.Settings().fireproof())); - PENDORITE_FRANCISCA_ITEM = ItemInit.register("pendorite_francisca", - new Francisca_Item(BYGTier.PENDORITE, 1.0F, -2.6F, () -> CompatEntities.PENDORITE_FRANCISCA, new Item.Settings().fireproof())); - PENDORITE_JAVELIN_ITEM = ItemInit.register("pendorite_javelin", new Javelin_Item(BYGTier.PENDORITE, 2.2F, -2.7F, () -> CompatEntities.PENDORITE_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_small_axe"), + new SmallAxeItem(BYGTier.PENDORITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_long_sword"), new LongSwordItem(BYGTier.PENDORITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_dagger"), new DaggerItem(BYGTier.PENDORITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_big_axe"), + new BigAxeItem(BYGTier.PENDORITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_lance"), new LanceItem(BYGTier.PENDORITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_healing_staff"), + new HealingStaffItem(BYGTier.PENDORITE, 4, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_mace"), new MaceItem(BYGTier.PENDORITE, 2, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + PENDORITE_FRANCISCA_ITEM = ItemInit.register("pendorite_francisca", new FranciscaItem(BYGTier.PENDORITE, () -> CompatEntities.PENDORITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 1, -2.6f)))); + PENDORITE_JAVELIN_ITEM = ItemInit.register("pendorite_javelin", new JavelinItem(BYGTier.PENDORITE, () -> CompatEntities.PENDORITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("pendorite_francisca"), PENDORITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("pendorite_javelin"), PENDORITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_ninjato"), new Ninjato_Item(BYGTier.PENDORITE, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_sickle"), new Sickle_Item(BYGTier.PENDORITE, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("pendorite_rapier"), new Rapier_Item(BYGTier.PENDORITE, 2, -2.0F, 2, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_ninjato"), + new NinjatoItem(BYGTier.PENDORITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_sickle"), + new SickleItem(BYGTier.PENDORITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("pendorite_rapier"), + new RapierItem(BYGTier.PENDORITE, 2, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(BYGTier.PENDORITE, 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("pendorite"); } if (isAdditionalAdditionsLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_small_axe"), new Small_Axe_Item(GildedNetheriteToolMaterial.MATERIAL, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_long_sword"), new Long_Sword_Item(GildedNetheriteToolMaterial.MATERIAL, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_dagger"), new Dagger_Item(GildedNetheriteToolMaterial.MATERIAL, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_big_axe"), new Big_Axe_Item(GildedNetheriteToolMaterial.MATERIAL, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_lance"), new Lance_Item(GildedNetheriteToolMaterial.MATERIAL, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_healing_staff"), new Healing_Staff_Item(GildedNetheriteToolMaterial.MATERIAL, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_mace"), new Mace_Item(GildedNetheriteToolMaterial.MATERIAL, 4, -2.8F, 3, new Item.Settings().fireproof())); - GILDED_NETHERITE_FRANCISCA_ITEM = ItemInit.register("gilded_netherite_francisca", - new Francisca_Item(GildedNetheriteToolMaterial.MATERIAL, 1.0F, -2.6F, () -> CompatEntities.GILDED_NETHERITE_FRANCISCA, new Item.Settings().fireproof())); - GILDED_NETHERITE_JAVELIN_ITEM = ItemInit.register("gilded_netherite_javelin", - new Javelin_Item(GildedNetheriteToolMaterial.MATERIAL, 2.2F, -2.7F, () -> CompatEntities.GILDED_NETHERITE_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_small_axe"), new SmallAxeItem(GildedNetheriteToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_long_sword"), new LongSwordItem(GildedNetheriteToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_dagger"), new DaggerItem(GildedNetheriteToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_big_axe"), new BigAxeItem(GildedNetheriteToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_lance"), new LanceItem(GildedNetheriteToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_healing_staff"), new HealingStaffItem(GildedNetheriteToolMaterial.MATERIAL, 5, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_mace"), new MaceItem(GildedNetheriteToolMaterial.MATERIAL, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + GILDED_NETHERITE_FRANCISCA_ITEM = ItemInit.register("gilded_netherite_francisca", new FranciscaItem(GildedNetheriteToolMaterial.MATERIAL, () -> CompatEntities.GILDED_NETHERITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 1, -2.6f)))); + GILDED_NETHERITE_JAVELIN_ITEM = ItemInit.register("gilded_netherite_javelin", new JavelinItem(GildedNetheriteToolMaterial.MATERIAL, () -> CompatEntities.GILDED_NETHERITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_francisca"), GILDED_NETHERITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_javelin"), GILDED_NETHERITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_ninjato"), new Ninjato_Item(GildedNetheriteToolMaterial.MATERIAL, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_sickle"), new Sickle_Item(GildedNetheriteToolMaterial.MATERIAL, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_rapier"), new Rapier_Item(GildedNetheriteToolMaterial.MATERIAL, 2, -2.0F, 3, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_ninjato"), new NinjatoItem(GildedNetheriteToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_sickle"), new SickleItem(GildedNetheriteToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("gilded_netherite_rapier"), new RapierItem(GildedNetheriteToolMaterial.MATERIAL, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(GildedNetheriteToolMaterial.MATERIAL, 2, -2.0f)).fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_small_axe"), new Small_Axe_Item(RoseGoldToolMaterial.MATERIAL, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_long_sword"), new Long_Sword_Item(RoseGoldToolMaterial.MATERIAL, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_dagger"), new Dagger_Item(RoseGoldToolMaterial.MATERIAL, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_big_axe"), new Big_Axe_Item(RoseGoldToolMaterial.MATERIAL, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_lance"), new Lance_Item(RoseGoldToolMaterial.MATERIAL, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_healing_staff"), new Healing_Staff_Item(RoseGoldToolMaterial.MATERIAL, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_mace"), new Mace_Item(RoseGoldToolMaterial.MATERIAL, 4, -2.8F, 2, new Item.Settings().fireproof())); - ROSE_GOLD_FRANCISCA_ITEM = ItemInit.register("rose_gold_francisca", - new Francisca_Item(RoseGoldToolMaterial.MATERIAL, 1.0F, -2.6F, () -> CompatEntities.ROSE_GOLD_FRANCISCA, new Item.Settings().fireproof())); - ROSE_GOLD_JAVELIN_ITEM = ItemInit.register("rose_gold_javelin", - new Javelin_Item(RoseGoldToolMaterial.MATERIAL, 2.2F, -2.7F, () -> CompatEntities.ROSE_GOLD_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_small_axe"), + new SmallAxeItem(RoseGoldToolMaterial.MATERIAL, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_long_sword"), new LongSwordItem(RoseGoldToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_dagger"), new DaggerItem(RoseGoldToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_big_axe"), + new BigAxeItem(RoseGoldToolMaterial.MATERIAL, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_lance"), new LanceItem(RoseGoldToolMaterial.MATERIAL, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_healing_staff"), new HealingStaffItem(RoseGoldToolMaterial.MATERIAL, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_mace"), new MaceItem(RoseGoldToolMaterial.MATERIAL, 1, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ROSE_GOLD_FRANCISCA_ITEM = ItemInit.register("rose_gold_francisca", new FranciscaItem(RoseGoldToolMaterial.MATERIAL, () -> CompatEntities.ROSE_GOLD_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 1, -2.6f)))); + ROSE_GOLD_JAVELIN_ITEM = ItemInit.register("rose_gold_javelin", new JavelinItem(RoseGoldToolMaterial.MATERIAL, () -> CompatEntities.ROSE_GOLD_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_francisca"), ROSE_GOLD_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_javelin"), ROSE_GOLD_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_ninjato"), new Ninjato_Item(RoseGoldToolMaterial.MATERIAL, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_sickle"), new Sickle_Item(RoseGoldToolMaterial.MATERIAL, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_rapier"), new Rapier_Item(RoseGoldToolMaterial.MATERIAL, 2, -2.0F, 2, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_ninjato"), + new NinjatoItem(RoseGoldToolMaterial.MATERIAL, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_sickle"), + new SickleItem(RoseGoldToolMaterial.MATERIAL, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("rose_gold_rapier"), + new RapierItem(RoseGoldToolMaterial.MATERIAL, 1, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldToolMaterial.MATERIAL, 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("gilded_netherite"); ItemInit.MATERIAL_STRINGS.add("rose_gold"); } if (isMythicUpgradesLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_small_axe"), new Small_Axe_Item(MUToolMaterials.RUBY, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_long_sword"), new Long_Sword_Item(MUToolMaterials.RUBY, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_dagger"), new Dagger_Item(MUToolMaterials.RUBY, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_big_axe"), new Big_Axe_Item(MUToolMaterials.RUBY, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_lance"), new Lance_Item(MUToolMaterials.RUBY, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_healing_staff"), new Healing_Staff_Item(MUToolMaterials.RUBY, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_mace"), new Mace_Item(MUToolMaterials.RUBY, 4, -2.8F, 3, new Item.Settings().fireproof())); - RUBY_NETHERITE_FRANCISCA_ITEM = ItemInit.register("ruby_netherite_francisca", - new Francisca_Item(MUToolMaterials.RUBY, 1.0F, -2.6F, () -> CompatEntities.RUBY_NETHERITE_FRANCISCA, new Item.Settings().fireproof())); - RUBY_NETHERITE_JAVELIN_ITEM = ItemInit.register("ruby_netherite_javelin", - new Javelin_Item(MUToolMaterials.RUBY, 2.2F, -2.7F, () -> CompatEntities.RUBY_NETHERITE_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_small_axe"), + new SmallAxeItem(MUToolMaterials.RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_long_sword"), new LongSwordItem(MUToolMaterials.RUBY, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_dagger"), new DaggerItem(MUToolMaterials.RUBY, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_big_axe"), + new BigAxeItem(MUToolMaterials.RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_lance"), new LanceItem(MUToolMaterials.RUBY, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_healing_staff"), + new HealingStaffItem(MUToolMaterials.RUBY, 5, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_mace"), new MaceItem(MUToolMaterials.RUBY, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + RUBY_NETHERITE_FRANCISCA_ITEM = ItemInit.register("ruby_netherite_francisca", new FranciscaItem(MUToolMaterials.RUBY, () -> CompatEntities.RUBY_NETHERITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 1, -2.6f)))); + RUBY_NETHERITE_JAVELIN_ITEM = ItemInit.register("ruby_netherite_javelin", new JavelinItem(MUToolMaterials.RUBY, () -> CompatEntities.RUBY_NETHERITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_francisca"), RUBY_NETHERITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_javelin"), RUBY_NETHERITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_ninjato"), new Ninjato_Item(MUToolMaterials.RUBY, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_sickle"), new Sickle_Item(MUToolMaterials.RUBY, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_rapier"), new Rapier_Item(MUToolMaterials.RUBY, 2, -2.0F, 3, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_ninjato"), + new NinjatoItem(MUToolMaterials.RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_sickle"), + new SickleItem(MUToolMaterials.RUBY, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("ruby_netherite_rapier"), + new RapierItem(MUToolMaterials.RUBY, 3, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.RUBY, 2, -2.0f)).fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_small_axe"), new Small_Axe_Item(MUToolMaterials.SAPPHIRE, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_long_sword"), new Long_Sword_Item(MUToolMaterials.SAPPHIRE, 6, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_dagger"), new Dagger_Item(MUToolMaterials.SAPPHIRE, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_big_axe"), new Big_Axe_Item(MUToolMaterials.SAPPHIRE, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_lance"), new Lance_Item(MUToolMaterials.SAPPHIRE, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_healing_staff"), new Healing_Staff_Item(MUToolMaterials.SAPPHIRE, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_mace"), new Mace_Item(MUToolMaterials.SAPPHIRE, 4, -2.8F, 2, new Item.Settings().fireproof())); - SAPPHIRE_NETHERITE_FRANCISCA_ITEM = ItemInit.register("sapphire_netherite_francisca", - new Francisca_Item(MUToolMaterials.SAPPHIRE, 1.0F, -2.6F, () -> CompatEntities.SAPPHIRE_NETHERITE_FRANCISCA, new Item.Settings().fireproof())); - SAPPHIRE_NETHERITE_JAVELIN_ITEM = ItemInit.register("sapphire_netherite_javelin", - new Javelin_Item(MUToolMaterials.SAPPHIRE, 2.2F, -2.7F, () -> CompatEntities.SAPPHIRE_NETHERITE_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_small_axe"), + new SmallAxeItem(MUToolMaterials.SAPPHIRE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_long_sword"), new LongSwordItem(MUToolMaterials.SAPPHIRE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_dagger"), new DaggerItem(MUToolMaterials.SAPPHIRE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_big_axe"), + new BigAxeItem(MUToolMaterials.SAPPHIRE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_lance"), new LanceItem(MUToolMaterials.SAPPHIRE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_healing_staff"), + new HealingStaffItem(MUToolMaterials.SAPPHIRE, 5, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_mace"), new MaceItem(MUToolMaterials.SAPPHIRE, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + SAPPHIRE_NETHERITE_FRANCISCA_ITEM = ItemInit.register("sapphire_netherite_francisca", new FranciscaItem(MUToolMaterials.SAPPHIRE, () -> CompatEntities.SAPPHIRE_NETHERITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 1, -2.6f)))); + SAPPHIRE_NETHERITE_JAVELIN_ITEM = ItemInit.register("sapphire_netherite_javelin", new JavelinItem(MUToolMaterials.SAPPHIRE, () -> CompatEntities.SAPPHIRE_NETHERITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_francisca"), SAPPHIRE_NETHERITE_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_javelin"), SAPPHIRE_NETHERITE_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_ninjato"), new Ninjato_Item(MUToolMaterials.SAPPHIRE, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_sickle"), new Sickle_Item(MUToolMaterials.SAPPHIRE, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_rapier"), new Rapier_Item(MUToolMaterials.SAPPHIRE, 2, -2.0F, 2, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_ninjato"), + new NinjatoItem(MUToolMaterials.SAPPHIRE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_sickle"), + new SickleItem(MUToolMaterials.SAPPHIRE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("sapphire_netherite_rapier"), + new RapierItem(MUToolMaterials.SAPPHIRE, 3, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(MUToolMaterials.SAPPHIRE, 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("ruby_netherite"); ItemInit.MATERIAL_STRINGS.add("sapphire_netherite"); } if (isDeeperDarkerLoaded) { - ItemInit.ITEMS.put(MedievalMain.ID("warden_small_axe"), new Small_Axe_Item(DDTiers.WARDEN, 5, -2.9F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_long_sword"), new Long_Sword_Item(DDTiers.WARDEN, 5, -3.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_dagger"), new Dagger_Item(DDTiers.WARDEN, 2, -2.0F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_big_axe"), new Big_Axe_Item(DDTiers.WARDEN, 6, -3.4F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_lance"), new Lance_Item(DDTiers.WARDEN, 3, -3.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_healing_staff"), new Healing_Staff_Item(DDTiers.WARDEN, 1, -3.3F, 4, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_mace"), new Mace_Item(DDTiers.WARDEN, 4, -3.0F, 2, new Item.Settings().fireproof())); - WARDEN_FRANCISCA_ITEM = ItemInit.register("warden_francisca", new Francisca_Item(DDTiers.WARDEN, 2.0F, -2.6F, () -> CompatEntities.WARDEN_FRANCISCA, new Item.Settings().fireproof())); - WARDEN_JAVELIN_ITEM = ItemInit.register("warden_javelin", new Javelin_Item(DDTiers.WARDEN, 2.2F, -2.7F, () -> CompatEntities.WARDEN_JAVELIN, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_small_axe"), + new SmallAxeItem(DDTiers.WARDEN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 5, -2.9f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_long_sword"), new LongSwordItem(DDTiers.WARDEN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_dagger"), new DaggerItem(DDTiers.WARDEN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_big_axe"), + new BigAxeItem(DDTiers.WARDEN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 6, -3.4f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_lance"), new LanceItem(DDTiers.WARDEN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_healing_staff"), + new HealingStaffItem(DDTiers.WARDEN, 5, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 1, -3.3f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_mace"), new MaceItem(DDTiers.WARDEN, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); + WARDEN_FRANCISCA_ITEM = ItemInit.register("warden_francisca", + new FranciscaItem(DDTiers.WARDEN, () -> CompatEntities.WARDEN_FRANCISCA, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 1, -2.6f)))); + WARDEN_JAVELIN_ITEM = ItemInit.register("warden_javelin", new JavelinItem(DDTiers.WARDEN, () -> CompatEntities.WARDEN_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 1, -2.6f)).fireproof())); ItemInit.ITEMS.put(MedievalMain.ID("warden_francisca"), WARDEN_FRANCISCA_ITEM); ItemInit.ITEMS.put(MedievalMain.ID("warden_javelin"), WARDEN_JAVELIN_ITEM); - ItemInit.ITEMS.put(MedievalMain.ID("warden_ninjato"), new Ninjato_Item(DDTiers.WARDEN, 2, -2.1F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_sickle"), new Sickle_Item(DDTiers.WARDEN, 2, -2.2F, new Item.Settings().fireproof())); - ItemInit.ITEMS.put(MedievalMain.ID("warden_rapier"), new Rapier_Item(DDTiers.WARDEN, 2, -2.0F, 3, new Item.Settings().fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_ninjato"), + new NinjatoItem(DDTiers.WARDEN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 2, -2.1f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_sickle"), + new SickleItem(DDTiers.WARDEN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 2, -2.2f)).fireproof())); + ItemInit.ITEMS.put(MedievalMain.ID("warden_rapier"), + new RapierItem(DDTiers.WARDEN, 3, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(DDTiers.WARDEN, 2, -2.0f)).fireproof())); ItemInit.MATERIAL_STRINGS.add("warden"); } + } } \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/compat/CompatRender.java b/src/main/java/net/medievalweapons/compat/CompatRender.java index 63f7dac..2f6178a 100644 --- a/src/main/java/net/medievalweapons/compat/CompatRender.java +++ b/src/main/java/net/medievalweapons/compat/CompatRender.java @@ -10,52 +10,52 @@ public class CompatRender { public static void loadRenderer() { if (CompatItems.isBetterEndLoaded) { - EntityRendererRegistry.register(CompatEntities.AETERNIUM_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.AETERNIUM_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.TERMINITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.TERMINITE_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.THALLASIUM_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.THALLASIUM_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.AETERNIUM_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.AETERNIUM_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.TERMINITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.TERMINITE_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.THALLASIUM_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.THALLASIUM_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isBetterNetherLoaded) { - EntityRendererRegistry.register(CompatEntities.NETHER_RUBY_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.NETHER_RUBY_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.CINCINNASITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.CINCINNASITE_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.CINCINNASITE_DIAMOND_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.CINCINNASITE_DIAMOND_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.NETHER_RUBY_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.NETHER_RUBY_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.CINCINNASITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.CINCINNASITE_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.CINCINNASITE_DIAMOND_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.CINCINNASITE_DIAMOND_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isDragonLootLoaded) { - EntityRendererRegistry.register(CompatEntities.DRAGON_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.DRAGON_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.DRAGON_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.DRAGON_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isMythicMetalsLoaded) { - EntityRendererRegistry.register(CompatEntities.ADAMANTITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.ADAMANTITE_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.ADAMANTITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.ADAMANTITE_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isParadiseLostLoaded) { - EntityRendererRegistry.register(CompatEntities.OLVITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.OLVITE_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.OLVITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.OLVITE_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isBYGLoaded) { - EntityRendererRegistry.register(CompatEntities.PENDORITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.PENDORITE_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.PENDORITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.PENDORITE_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isAdditionalAdditionsLoaded) { - EntityRendererRegistry.register(CompatEntities.ROSE_GOLD_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.ROSE_GOLD_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.GILDED_NETHERITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.GILDED_NETHERITE_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.ROSE_GOLD_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.ROSE_GOLD_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.GILDED_NETHERITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.GILDED_NETHERITE_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isMythicUpgradesLoaded) { - EntityRendererRegistry.register(CompatEntities.RUBY_NETHERITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.RUBY_NETHERITE_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.SAPPHIRE_NETHERITE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.SAPPHIRE_NETHERITE_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.RUBY_NETHERITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.RUBY_NETHERITE_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.SAPPHIRE_NETHERITE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.SAPPHIRE_NETHERITE_JAVELIN, JavelinEntityRenderer::new); } if (CompatItems.isDeeperDarkerLoaded) { - EntityRendererRegistry.register(CompatEntities.WARDEN_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(CompatEntities.WARDEN_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(CompatEntities.WARDEN_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(CompatEntities.WARDEN_JAVELIN, JavelinEntityRenderer::new); } } } \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/compat/RecipeGenerator.java b/src/main/java/net/medievalweapons/compat/RecipeGenerator.java index b00fa97..f94a00e 100644 --- a/src/main/java/net/medievalweapons/compat/RecipeGenerator.java +++ b/src/main/java/net/medievalweapons/compat/RecipeGenerator.java @@ -92,7 +92,7 @@ public static JsonObject generateJson(Identifier headItem, Identifier handleItem json.add("key", key); obj = new JsonObject(); - obj.addProperty("item", output.toString()); + obj.addProperty("id", output.toString()); obj.addProperty("count", 1); json.add("result", obj); @@ -112,7 +112,7 @@ public static JsonObject generateSmithingJson(Identifier base, Identifier additi json.add("addition", obj); obj = new JsonObject(); - obj.addProperty("item", output.toString()); + obj.addProperty("id", output.toString()); json.add("result", obj); obj = new JsonObject(); diff --git a/src/main/java/net/medievalweapons/config/MedievalConfig.java b/src/main/java/net/medievalweapons/config/MedievalConfig.java index 961908c..0eca817 100644 --- a/src/main/java/net/medievalweapons/config/MedievalConfig.java +++ b/src/main/java/net/medievalweapons/config/MedievalConfig.java @@ -10,6 +10,8 @@ public class MedievalConfig implements ConfigData { @Comment("20 ticks = 1 second") public int weapon_blocking_cooldown = 60; + @Comment("0.03 = 3% chance") + public float sickle_head_drop_chance = 0.03f; public boolean old_healing_staff_behavior = false; public boolean healing_staff_owner_healing = false; } \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/effect/BleedEffect.java b/src/main/java/net/medievalweapons/effect/BleedEffect.java index d76d0ce..342338a 100644 --- a/src/main/java/net/medievalweapons/effect/BleedEffect.java +++ b/src/main/java/net/medievalweapons/effect/BleedEffect.java @@ -14,8 +14,9 @@ public BleedEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity entity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity entity, int amplifier) { entity.damage(createDamageSource(entity), 1.0f); + return true; } @Override diff --git a/src/main/java/net/medievalweapons/effect/StunEffect.java b/src/main/java/net/medievalweapons/effect/StunEffect.java index dc9f451..c952749 100644 --- a/src/main/java/net/medievalweapons/effect/StunEffect.java +++ b/src/main/java/net/medievalweapons/effect/StunEffect.java @@ -12,8 +12,9 @@ public StunEffect(StatusEffectCategory category, int color) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { livingEntity.slowMovement(livingEntity.getBlockStateAtPos(), new Vec3d(0.05F, 0.1F, 0.05F)); + return true; } @Override diff --git a/src/main/java/net/medievalweapons/entity/FranciscaEntity.java b/src/main/java/net/medievalweapons/entity/FranciscaEntity.java index e5867bd..d7f3f65 100644 --- a/src/main/java/net/medievalweapons/entity/FranciscaEntity.java +++ b/src/main/java/net/medievalweapons/entity/FranciscaEntity.java @@ -19,6 +19,7 @@ import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; +import net.minecraft.entity.data.DataTracker.Builder; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.projectile.PersistentProjectileEntity; import net.minecraft.item.ItemStack; @@ -38,23 +39,20 @@ public FranciscaEntity(EntityType entityType, World w } public FranciscaEntity(World world, LivingEntity owner, FranciscaItem item, ItemStack stack) { - // super(item.getType(), owner, world); - super(); + super(item.getType(), owner, world, stack); this.francisca = new ItemStack(item); - this.francisca = stack.copy(); this.dataTracker.set(ENCHANTMENT_GLINT, stack.hasGlint()); } - @Environment(EnvType.CLIENT) public FranciscaEntity(World world, double x, double y, double z, FranciscaItem item) { - super(item.getType(), x, y, z, world); + super(item.getType(), z, z, z, world, new ItemStack(item)); this.francisca = new ItemStack(item); } @Override - protected void initDataTracker() { - super.initDataTracker(); - this.dataTracker.startTracking(ENCHANTMENT_GLINT, false); + protected void initDataTracker(Builder builder) { + super.initDataTracker(builder); + builder.add(ENCHANTMENT_GLINT, false); } @Override @@ -70,8 +68,7 @@ public boolean enchantingGlint() { @Override protected void onEntityHit(EntityHitResult entityHitResult) { Entity hitEntity = entityHitResult.getEntity(); - - float damage = ((FranciscaItem) this.francisca.getItem()).getAttackDamage() * 2.3F; + float damage = ((FranciscaItem) this.francisca.getItem()).getMaterial().getAttackDamage() * 2.3F; int sharpnessLevel = EnchantmentHelper.getLevel(Enchantments.SHARPNESS, this.francisca); if (sharpnessLevel > 0) { @@ -123,7 +120,7 @@ public void onPlayerCollision(PlayerEntity player) { public void readCustomDataFromNbt(NbtCompound nbt) { super.readCustomDataFromNbt(nbt); if (nbt.contains("francisca", 10)) { - this.francisca = ItemStack.fromNbt(nbt.getCompound("francisca")); + this.francisca = ItemStack.fromNbt(this.getRegistryManager(), nbt.getCompound("francisca")).orElse(this.getDefaultItemStack()); this.dataTracker.set(ENCHANTMENT_GLINT, this.francisca.hasGlint()); } @@ -132,7 +129,7 @@ public void readCustomDataFromNbt(NbtCompound nbt) { @Override public void writeCustomDataToNbt(NbtCompound nbt) { super.writeCustomDataToNbt(nbt); - nbt.put("francisca", this.francisca.writeNbt(new NbtCompound())); + nbt.put("francisca", this.francisca.encode(this.getRegistryManager())); } @Override @@ -165,4 +162,9 @@ private DamageSource createDamageSource(Entity source, Entity attacker) { return attacker.getDamageSources().create(EntityInit.FRANCISCA, source, attacker); } + @Override + protected ItemStack getDefaultItemStack() { + return this.francisca; + } + } \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/entity/Francisca_Entity.java b/src/main/java/net/medievalweapons/entity/Francisca_Entity.java deleted file mode 100644 index 3bb7855..0000000 --- a/src/main/java/net/medievalweapons/entity/Francisca_Entity.java +++ /dev/null @@ -1,167 +0,0 @@ -package net.medievalweapons.entity; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.levelz.access.PlayerStatsManagerAccess; -import net.levelz.init.ConfigInit; -import net.levelz.stats.Skill; -import net.medievalweapons.init.CompatInit; -import net.medievalweapons.init.EntityInit; -import net.medievalweapons.item.Francisca_Item; -import net.medievalweapons.mixin.client.PersistentProjectileEntityAccessor; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.FlyingItemEntity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; -import net.minecraft.entity.data.TrackedDataHandlerRegistry; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.PersistentProjectileEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.hit.EntityHitResult; -import net.minecraft.world.World; - -public class Francisca_Entity extends PersistentProjectileEntity implements FlyingItemEntity { - private static final TrackedData ENCHANTMENT_GLINT; - private ItemStack francisca; - - public Francisca_Entity(EntityType entityType, World world, Francisca_Item item) { - super(entityType, world); - this.francisca = new ItemStack(item); - } - - public Francisca_Entity(World world, LivingEntity owner, Francisca_Item item, ItemStack stack) { - super(item.getType(), owner, world); - this.francisca = new ItemStack(item); - this.francisca = stack.copy(); - this.dataTracker.set(ENCHANTMENT_GLINT, stack.hasGlint()); - } - - @Environment(EnvType.CLIENT) - public Francisca_Entity(World world, double x, double y, double z, Francisca_Item item) { - super(item.getType(), x, y, z, world); - this.francisca = new ItemStack(item); - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - this.dataTracker.startTracking(ENCHANTMENT_GLINT, false); - } - - @Override - protected ItemStack asItemStack() { - return this.francisca.copy(); - } - - @Environment(EnvType.CLIENT) - public boolean enchantingGlint() { - return this.dataTracker.get(ENCHANTMENT_GLINT); - } - - @Override - protected void onEntityHit(EntityHitResult entityHitResult) { - Entity hitEntity = entityHitResult.getEntity(); - - float damage = ((Francisca_Item) this.francisca.getItem()).getAttackDamage() * 2.3F; - - int sharpnessLevel = EnchantmentHelper.getLevel(Enchantments.SHARPNESS, this.francisca); - if (sharpnessLevel > 0) { - damage += sharpnessLevel * 0.6F; - } - - Entity owner = this.getOwner(); - if (CompatInit.isLevelZLoaded && owner instanceof PlayerEntity) { - int archeryLevel = ((PlayerStatsManagerAccess) owner).getPlayerStatsManager().getSkillLevel(Skill.ARCHERY); - damage += archeryLevel >= ConfigInit.CONFIG.maxLevel && ConfigInit.CONFIG.archeryDoubleDamageChance > this.getWorld().getRandom().nextFloat() ? damage - : (double) archeryLevel * ConfigInit.CONFIG.archeryBowExtraDamage; - } - - DamageSource damageSource = createDamageSource(this, owner == null ? this : owner); - SoundEvent soundEvent = SoundEvents.ITEM_TRIDENT_HIT; - if (hitEntity.damage(damageSource, damage)) { - if (hitEntity.getType() == EntityType.ENDERMAN) { - return; - } - - if (hitEntity instanceof LivingEntity) { - LivingEntity hitLivingEntity = (LivingEntity) hitEntity; - if (owner instanceof LivingEntity) { - EnchantmentHelper.onUserDamaged(hitLivingEntity, owner); - EnchantmentHelper.onTargetDamaged((LivingEntity) owner, hitLivingEntity); - } - - int fireAspectLevel = EnchantmentHelper.getLevel(Enchantments.FIRE_ASPECT, this.francisca); - if (fireAspectLevel > 0) { - hitLivingEntity.setOnFireFor(fireAspectLevel * 4); - } - this.playSound(soundEvent, 1.0F, 1.0F); - this.onHit(hitLivingEntity); - } - } - - this.setVelocity(this.getVelocity().multiply(0.75)); - } - - @Override - public void onPlayerCollision(PlayerEntity player) { - Entity entity = this.getOwner(); - if (entity == null || entity.getUuid() == player.getUuid()) { - super.onPlayerCollision(player); - } - } - - @Override - public void readCustomDataFromNbt(NbtCompound nbt) { - super.readCustomDataFromNbt(nbt); - if (nbt.contains("francisca", 10)) { - this.francisca = ItemStack.fromNbt(nbt.getCompound("francisca")); - this.dataTracker.set(ENCHANTMENT_GLINT, this.francisca.hasGlint()); - } - - } - - @Override - public void writeCustomDataToNbt(NbtCompound nbt) { - super.writeCustomDataToNbt(nbt); - nbt.put("francisca", this.francisca.writeNbt(new NbtCompound())); - } - - @Override - public void age() { - if (this.pickupType != PersistentProjectileEntity.PickupPermission.ALLOWED) { - super.age(); - } - } - - @Override - @Environment(EnvType.CLIENT) - public boolean shouldRender(double cameraX, double cameraY, double cameraZ) { - return true; - } - - @Override - public ItemStack getStack() { - return francisca; - } - - public boolean inGround() { - return ((PersistentProjectileEntityAccessor) this).getInGround(); - } - - static { - ENCHANTMENT_GLINT = DataTracker.registerData(Francisca_Entity.class, TrackedDataHandlerRegistry.BOOLEAN); - } - - private DamageSource createDamageSource(Entity source, Entity attacker) { - return attacker.getDamageSources().create(EntityInit.FRANCISCA, source, attacker); - } - -} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/entity/Healing_Ball_Entity.java b/src/main/java/net/medievalweapons/entity/HealingBallEntity.java similarity index 88% rename from src/main/java/net/medievalweapons/entity/Healing_Ball_Entity.java rename to src/main/java/net/medievalweapons/entity/HealingBallEntity.java index 0b6d4c4..0068db1 100644 --- a/src/main/java/net/medievalweapons/entity/Healing_Ball_Entity.java +++ b/src/main/java/net/medievalweapons/entity/HealingBallEntity.java @@ -12,6 +12,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.data.DataTracker.Builder; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.projectile.thrown.ThrownEntity; @@ -22,24 +23,24 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -public class Healing_Ball_Entity extends ThrownEntity { +public class HealingBallEntity extends ThrownEntity { private int addition = 0; - public Healing_Ball_Entity(EntityType entityType, World world) { + public HealingBallEntity(EntityType entityType, World world) { super(entityType, world); } - public Healing_Ball_Entity(EntityType entityType, double d, double e, double f, World world) { + public HealingBallEntity(EntityType entityType, double d, double e, double f, World world) { super(entityType, d, e, f, world); } - public Healing_Ball_Entity(LivingEntity livingEntity, World world, int addition) { + public HealingBallEntity(LivingEntity livingEntity, World world, int addition) { super(EntityInit.HEALING_BALL_ENTITY, livingEntity, world); this.addition = addition; } @Environment(EnvType.CLIENT) - public Healing_Ball_Entity(World world, double x, double y, double z, double directionX, double directionY, double directionZ) { + public HealingBallEntity(World world, double x, double y, double z, double directionX, double directionY, double directionZ) { super(EntityInit.HEALING_BALL_ENTITY, x, y, z, world); } @@ -114,6 +115,6 @@ public boolean damage(DamageSource source, float amount) { } @Override - protected void initDataTracker() { + protected void initDataTracker(Builder builder) { } } diff --git a/src/main/java/net/medievalweapons/entity/Javelin_Entity.java b/src/main/java/net/medievalweapons/entity/JavelinEntity.java similarity index 84% rename from src/main/java/net/medievalweapons/entity/Javelin_Entity.java rename to src/main/java/net/medievalweapons/entity/JavelinEntity.java index 2bfe72f..37e6b1f 100644 --- a/src/main/java/net/medievalweapons/entity/Javelin_Entity.java +++ b/src/main/java/net/medievalweapons/entity/JavelinEntity.java @@ -7,16 +7,16 @@ import net.levelz.stats.Skill; import net.medievalweapons.init.CompatInit; import net.medievalweapons.init.EntityInit; -import net.medievalweapons.item.Javelin_Item; +import net.medievalweapons.item.JavelinItem; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityGroup; import net.minecraft.entity.EntityType; import net.minecraft.entity.FlyingItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.DataTracker.Builder; import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.player.PlayerEntity; @@ -38,7 +38,7 @@ import org.jetbrains.annotations.Nullable; -public class Javelin_Entity extends PersistentProjectileEntity implements FlyingItemEntity { +public class JavelinEntity extends PersistentProjectileEntity implements FlyingItemEntity { private static final TrackedData LOYALTY; private static final TrackedData ENCHANTMENT_GLINT; private ItemStack javelin; @@ -46,30 +46,28 @@ public class Javelin_Entity extends PersistentProjectileEntity implements Flying public int returnTimer; private boolean dealtDamage; - public Javelin_Entity(EntityType entityType, World world, Javelin_Item item) { + public JavelinEntity(EntityType entityType, World world, JavelinItem item) { super(entityType, world); this.javelin = new ItemStack(item); } - public Javelin_Entity(World world, LivingEntity owner, Javelin_Item item, ItemStack stack) { - super(item.getType(), owner, world); - this.javelin = new ItemStack(item); - this.javelin = stack.copy(); + public JavelinEntity(World world, LivingEntity owner, JavelinItem item, ItemStack stack) { + super(item.getType(), owner, world, stack); + this.javelin = stack; this.dataTracker.set(ENCHANTMENT_GLINT, stack.hasGlint()); this.dataTracker.set(LOYALTY, (byte) EnchantmentHelper.getLoyalty(stack)); } - @Environment(EnvType.CLIENT) - public Javelin_Entity(World world, double x, double y, double z, Javelin_Item item) { - super(item.getType(), x, y, z, world); + public JavelinEntity(World world, double x, double y, double z, JavelinItem item) { + super(item.getType(), z, z, z, world, new ItemStack(item)); this.javelin = new ItemStack(item); } @Override - protected void initDataTracker() { - super.initDataTracker(); - this.dataTracker.startTracking(LOYALTY, (byte) 0); - this.dataTracker.startTracking(ENCHANTMENT_GLINT, false); + protected void initDataTracker(Builder builder) { + super.initDataTracker(builder); + builder.add(LOYALTY, (byte) 0); + builder.add(ENCHANTMENT_GLINT, false); } @Override @@ -90,8 +88,8 @@ protected void onEntityHit(EntityHitResult entityHitResult) { return; } this.piercedEntities.add(hitEntity.getUuid()); - float damage = ((Javelin_Item) this.javelin.getItem()).getAttackDamage() * 2.35F; - if (hitEntity instanceof LivingEntity && ((LivingEntity) hitEntity).getGroup() == EntityGroup.AQUATIC) { + float damage = ((JavelinItem) this.javelin.getItem()).getMaterial().getAttackDamage() * 2.35F; + if (hitEntity instanceof LivingEntity) { int impalingLevel = EnchantmentHelper.getLevel(Enchantments.IMPALING, this.javelin); if (impalingLevel > 0) { damage += impalingLevel * 1.5F; @@ -195,7 +193,7 @@ public void onPlayerCollision(PlayerEntity player) { public void readCustomDataFromNbt(NbtCompound nbt) { super.readCustomDataFromNbt(nbt); if (nbt.contains("javelin", 10)) { - this.javelin = ItemStack.fromNbt(nbt.getCompound("javelin")); + this.javelin = ItemStack.fromNbt(this.getRegistryManager(), nbt.getCompound("javelin")).orElse(this.getDefaultItemStack()); this.dataTracker.set(ENCHANTMENT_GLINT, this.javelin.hasGlint()); } @@ -212,7 +210,7 @@ public void readCustomDataFromNbt(NbtCompound nbt) { @Override public void writeCustomDataToNbt(NbtCompound nbt) { super.writeCustomDataToNbt(nbt); - nbt.put("javelin", this.javelin.writeNbt(new NbtCompound())); + nbt.put("javelin", this.javelin.encode(this.getRegistryManager())); NbtList tags = new NbtList(); for (UUID uuid : this.piercedEntities) { @@ -241,16 +239,21 @@ public boolean shouldRender(double cameraX, double cameraY, double cameraZ) { @Override public ItemStack getStack() { - return javelin; + return this.javelin; } static { - LOYALTY = DataTracker.registerData(Javelin_Entity.class, TrackedDataHandlerRegistry.BYTE); - ENCHANTMENT_GLINT = DataTracker.registerData(Javelin_Entity.class, TrackedDataHandlerRegistry.BOOLEAN); + LOYALTY = DataTracker.registerData(JavelinEntity.class, TrackedDataHandlerRegistry.BYTE); + ENCHANTMENT_GLINT = DataTracker.registerData(JavelinEntity.class, TrackedDataHandlerRegistry.BOOLEAN); } private DamageSource createDamageSource(Entity source, Entity attacker) { return attacker.getDamageSources().create(EntityInit.JAVELIN, source, attacker); } -} \ No newline at end of file + @Override + protected ItemStack getDefaultItemStack() { + return this.javelin; + } + +} diff --git a/src/main/java/net/medievalweapons/entity/renderer/Francisca_Entity_Renderer.java b/src/main/java/net/medievalweapons/entity/renderer/FranciscaEntityRenderer.java similarity index 79% rename from src/main/java/net/medievalweapons/entity/renderer/Francisca_Entity_Renderer.java rename to src/main/java/net/medievalweapons/entity/renderer/FranciscaEntityRenderer.java index 626370c..25d3717 100644 --- a/src/main/java/net/medievalweapons/entity/renderer/Francisca_Entity_Renderer.java +++ b/src/main/java/net/medievalweapons/entity/renderer/FranciscaEntityRenderer.java @@ -2,7 +2,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.medievalweapons.entity.Francisca_Entity; +import net.medievalweapons.entity.FranciscaEntity; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EntityRenderer; @@ -17,17 +17,17 @@ @SuppressWarnings("deprecation") @Environment(EnvType.CLIENT) -public class Francisca_Entity_Renderer extends EntityRenderer { +public class FranciscaEntityRenderer extends EntityRenderer { private final ItemRenderer itemRenderer; - public Francisca_Entity_Renderer(EntityRendererFactory.Context context) { + public FranciscaEntityRenderer(EntityRendererFactory.Context context) { super(context); this.itemRenderer = context.getItemRenderer(); } @Override - public void render(Francisca_Entity francisca_Entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + public void render(FranciscaEntity francisca_Entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { matrixStack.push(); float age = getAge(francisca_Entity, g); @@ -43,7 +43,7 @@ public void render(Francisca_Entity francisca_Entity, float f, float g, MatrixSt super.render(francisca_Entity, f, g, matrixStack, vertexConsumerProvider, i); } - private float getAge(Francisca_Entity francisca_Entity, float g) { + private float getAge(FranciscaEntity francisca_Entity, float g) { if (!francisca_Entity.inGround()) { return francisca_Entity.age; } @@ -51,7 +51,7 @@ private float getAge(Francisca_Entity francisca_Entity, float g) { } @Override - public Identifier getTexture(Francisca_Entity francisca_Entity) { + public Identifier getTexture(FranciscaEntity francisca_Entity) { return SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE; } diff --git a/src/main/java/net/medievalweapons/entity/renderer/Healing_Ball_Entity_Renderer.java b/src/main/java/net/medievalweapons/entity/renderer/HealingBallEntityRenderer.java similarity index 62% rename from src/main/java/net/medievalweapons/entity/renderer/Healing_Ball_Entity_Renderer.java rename to src/main/java/net/medievalweapons/entity/renderer/HealingBallEntityRenderer.java index 8385b39..82f9be9 100644 --- a/src/main/java/net/medievalweapons/entity/renderer/Healing_Ball_Entity_Renderer.java +++ b/src/main/java/net/medievalweapons/entity/renderer/HealingBallEntityRenderer.java @@ -1,11 +1,10 @@ package net.medievalweapons.entity.renderer; -import org.joml.Matrix3f; import org.joml.Matrix4f; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.medievalweapons.entity.Healing_Ball_Entity; +import net.medievalweapons.entity.HealingBallEntity; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; @@ -18,44 +17,43 @@ import net.minecraft.util.math.RotationAxis; @Environment(EnvType.CLIENT) -public class Healing_Ball_Entity_Renderer extends EntityRenderer { +public class HealingBallEntityRenderer extends EntityRenderer { private static final Identifier TEXTURE = new Identifier("medievalweapons:textures/entity/healing_ball.png"); private static final RenderLayer LAYER; - public Healing_Ball_Entity_Renderer(EntityRendererFactory.Context context) { + public HealingBallEntityRenderer(EntityRendererFactory.Context context) { super(context); } @Override - protected int getBlockLight(Healing_Ball_Entity healing_Ball_Entity, BlockPos blockPos) { + protected int getBlockLight(HealingBallEntity healing_Ball_Entity, BlockPos blockPos) { return 15; } @Override - public void render(Healing_Ball_Entity healing_Ball_Entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + public void render(HealingBallEntity healing_Ball_Entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { matrixStack.push(); matrixStack.scale(0.4F, 0.4F, 0.4F); matrixStack.multiply(this.dispatcher.getRotation()); matrixStack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(180.0F)); MatrixStack.Entry entry = matrixStack.peek(); Matrix4f matrix4f = entry.getPositionMatrix(); - Matrix3f matrix3f = entry.getNormalMatrix(); VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(LAYER); - produceVertex(vertexConsumer, matrix4f, matrix3f, i, 0.0F, 0, 0, 1); - produceVertex(vertexConsumer, matrix4f, matrix3f, i, 1.0F, 0, 1, 1); - produceVertex(vertexConsumer, matrix4f, matrix3f, i, 1.0F, 1, 1, 0); - produceVertex(vertexConsumer, matrix4f, matrix3f, i, 0.0F, 1, 0, 0); + produceVertex(vertexConsumer, matrix4f, entry, i, 0.0F, 0, 0, 1); + produceVertex(vertexConsumer, matrix4f, entry, i, 1.0F, 0, 1, 1); + produceVertex(vertexConsumer, matrix4f, entry, i, 1.0F, 1, 1, 0); + produceVertex(vertexConsumer, matrix4f, entry, i, 0.0F, 1, 0, 0); matrixStack.pop(); super.render(healing_Ball_Entity, f, g, matrixStack, vertexConsumerProvider, i); } - private static void produceVertex(VertexConsumer vertexConsumer, Matrix4f modelMatrix, Matrix3f normalMatrix, int light, float x, int y, int textureU, int textureV) { + private static void produceVertex(VertexConsumer vertexConsumer, Matrix4f modelMatrix, MatrixStack.Entry entry, int light, float x, int y, int textureU, int textureV) { vertexConsumer.vertex(modelMatrix, x - 0.5F, (float) y - 0.25F, 0.0F).color(255, 255, 255, 255).texture((float) textureU, (float) textureV).overlay(OverlayTexture.DEFAULT_UV).light(light) - .normal(normalMatrix, 0.0F, 1.0F, 0.0F).next(); + .normal(entry, 0.0F, 1.0F, 0.0F).next(); } @Override - public Identifier getTexture(Healing_Ball_Entity healing_Ball_Entity) { + public Identifier getTexture(HealingBallEntity healing_Ball_Entity) { return TEXTURE; } diff --git a/src/main/java/net/medievalweapons/entity/renderer/Javelin_Entity_Renderer.java b/src/main/java/net/medievalweapons/entity/renderer/JavelinEntityRenderer.java similarity index 80% rename from src/main/java/net/medievalweapons/entity/renderer/Javelin_Entity_Renderer.java rename to src/main/java/net/medievalweapons/entity/renderer/JavelinEntityRenderer.java index 5ff1b28..545fd93 100644 --- a/src/main/java/net/medievalweapons/entity/renderer/Javelin_Entity_Renderer.java +++ b/src/main/java/net/medievalweapons/entity/renderer/JavelinEntityRenderer.java @@ -2,7 +2,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.medievalweapons.entity.Javelin_Entity; +import net.medievalweapons.entity.JavelinEntity; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EntityRenderer; @@ -17,17 +17,17 @@ @SuppressWarnings("deprecation") @Environment(EnvType.CLIENT) -public class Javelin_Entity_Renderer extends EntityRenderer { +public class JavelinEntityRenderer extends EntityRenderer { private final ItemRenderer itemRenderer; - public Javelin_Entity_Renderer(EntityRendererFactory.Context context) { + public JavelinEntityRenderer(EntityRendererFactory.Context context) { super(context); this.itemRenderer = context.getItemRenderer(); } @Override - public void render(Javelin_Entity javelin_Entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { + public void render(JavelinEntity javelin_Entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { matrixStack.push(); matrixStack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(MathHelper.lerp(g, javelin_Entity.prevYaw, javelin_Entity.getYaw()) - 90.0F)); @@ -42,7 +42,7 @@ public void render(Javelin_Entity javelin_Entity, float f, float g, MatrixStack } @Override - public Identifier getTexture(Javelin_Entity javelin_Entity) { + public Identifier getTexture(JavelinEntity javelin_Entity) { return SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE; } diff --git a/src/main/java/net/medievalweapons/init/CompatInit.java b/src/main/java/net/medievalweapons/init/CompatInit.java index 5c794b4..e7c921e 100644 --- a/src/main/java/net/medievalweapons/init/CompatInit.java +++ b/src/main/java/net/medievalweapons/init/CompatInit.java @@ -11,15 +11,19 @@ import net.minecraft.entity.attribute.ClampedEntityAttribute; import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeModifier; +import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.Identifier; public class CompatInit { // ServerPlayNetworkHandlerMixin, PlayerEntityMixin, GameRendererMixin and LivingEntityMixin - public static final EntityAttribute ATTACK_RANGE = new ClampedEntityAttribute("attribute.name.generic.attack_range", 0.0D, -1204.0D, 1024.0D).setTracked(true); + // public static final RegistryEntry ATTACK_RANGE = new ClampedEntityAttribute("attribute.name.generic.attack_range", 0.0D, -1204.0D, 1024.0D).setTracked(true); + + public static final boolean isBetterCombatLoaded = FabricLoader.getInstance().isModLoaded("bettercombat"); public static final Boolean isLevelZLoaded = FabricLoader.getInstance().isModLoaded("levelz"); @@ -28,35 +32,36 @@ public class CompatInit { public static final Boolean isReachEntityAttributesLoaded = FabricLoader.getInstance().isModLoaded("reach-entity-attributes"); public static void init() { - if (!isReachEntityAttributesLoaded) { - Registry.register(Registries.ATTRIBUTE, new Identifier("medievalweapons", "attack_range"), ATTACK_RANGE); - } + // if (!isReachEntityAttributesLoaded) { + // Registry.register(Registries.ATTRIBUTE, new Identifier("medievalweapons", "attack_range"), ATTACK_RANGE); + // } } - public static void addRange(double range, ImmutableMultimap.Builder builder) { - if (!isBetterCombatLoaded) { - if (isReachEntityAttributesLoaded) { - builder.put(ReachEntityAttributes.ATTACK_RANGE, new EntityAttributeModifier("Attack range", range, EntityAttributeModifier.Operation.ADDITION)); - builder.put(ReachEntityAttributes.REACH, new EntityAttributeModifier("Attack range", range, EntityAttributeModifier.Operation.ADDITION)); - } else { - builder.put(ATTACK_RANGE, new EntityAttributeModifier("Attack range", range, EntityAttributeModifier.Operation.ADDITION)); - } - } - } + // public static void addRange(double range, ImmutableMultimap.Builder builder) { + // if (!isBetterCombatLoaded) { + // // if (isReachEntityAttributesLoaded) { + // // builder.put(ReachEntityAttributes.ATTACK_RANGE, new EntityAttributeModifier("Attack range", range, EntityAttributeModifier.Operation.ADDITION)); + // // builder.put(ReachEntityAttributes.REACH, new EntityAttributeModifier("Attack range", range, EntityAttributeModifier.Operation.ADDITION)); + // builder.put(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, new EntityAttributeModifier("Attack range", range, EntityAttributeModifier.Operation.ADDITION)); + // // } else { + // // builder.put(ATTACK_RANGE, new EntityAttributeModifier("Attack range", range, EntityAttributeModifier.Operation.ADDITION)); + // // } + // } + // } - public static double getAttackRange(final LivingEntity entity, final double baseAttackRange) { - @Nullable - final var attackRange = entity.getAttributeInstance(ATTACK_RANGE); - return (attackRange != null) ? (baseAttackRange + attackRange.getValue()) : baseAttackRange; - } + // public static double getAttackRange(final LivingEntity entity, final double baseAttackRange) { + // @Nullable + // final var attackRange = entity.getAttributeInstance(ATTACK_RANGE); + // return (attackRange != null) ? (baseAttackRange + attackRange.getValue()) : baseAttackRange; + // } - public static double getSquaredAttackRange(final LivingEntity entity, final double sqBaseAttackRange) { - final var attackRange = getAttackRange(entity, Math.sqrt(sqBaseAttackRange)); - return attackRange * attackRange; - } + // public static double getSquaredAttackRange(final LivingEntity entity, final double sqBaseAttackRange) { + // final var attackRange = getAttackRange(entity, Math.sqrt(sqBaseAttackRange)); + // return attackRange * attackRange; + // } - public static boolean isWithinAttackRange(final PlayerEntity player, final Entity entity) { - return player.squaredDistanceTo(entity) <= getSquaredAttackRange(player, 64.0); - } + // public static boolean isWithinAttackRange(final PlayerEntity player, final Entity entity) { + // return player.squaredDistanceTo(entity) <= getSquaredAttackRange(player, 64.0); + // } } diff --git a/src/main/java/net/medievalweapons/init/EffectInit.java b/src/main/java/net/medievalweapons/init/EffectInit.java index 227bf32..a4945fa 100644 --- a/src/main/java/net/medievalweapons/init/EffectInit.java +++ b/src/main/java/net/medievalweapons/init/EffectInit.java @@ -5,15 +5,18 @@ import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.util.Identifier; public class EffectInit { - public static final StatusEffect STUN_EFFECT = new StunEffect(StatusEffectCategory.HARMFUL, 12221440); - public static final StatusEffect BLEED_EFFECT = new BleedEffect(StatusEffectCategory.HARMFUL, 10303293); + public static final RegistryEntry STUN_EFFECT = register("medievalweapons:stun", new StunEffect(StatusEffectCategory.HARMFUL, 12221440)); + public static final RegistryEntry BLEED_EFFECT = register("medievalweapons:bleed", new BleedEffect(StatusEffectCategory.HARMFUL, 10303293)); public static void init() { - Registry.register(Registries.STATUS_EFFECT, "medievalweapons:stun", STUN_EFFECT); - Registry.register(Registries.STATUS_EFFECT, "medievalweapons:bleed", BLEED_EFFECT); } + private static RegistryEntry register(String id, StatusEffect statusEffect) { + return Registry.registerReference(Registries.STATUS_EFFECT, new Identifier(id), statusEffect); + } } diff --git a/src/main/java/net/medievalweapons/init/EntityInit.java b/src/main/java/net/medievalweapons/init/EntityInit.java index 5955f1c..1a25862 100644 --- a/src/main/java/net/medievalweapons/init/EntityInit.java +++ b/src/main/java/net/medievalweapons/init/EntityInit.java @@ -3,14 +3,12 @@ import java.util.LinkedHashMap; import java.util.Map; -import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; import net.medievalweapons.compat.CompatEntities; -import net.medievalweapons.entity.Francisca_Entity; -import net.medievalweapons.entity.Healing_Ball_Entity; -import net.medievalweapons.entity.Javelin_Entity; -import net.medievalweapons.item.Francisca_Item; -import net.medievalweapons.item.Javelin_Item; -import net.minecraft.entity.EntityDimensions; +import net.medievalweapons.entity.FranciscaEntity; +import net.medievalweapons.entity.HealingBallEntity; +import net.medievalweapons.entity.JavelinEntity; +import net.medievalweapons.item.FranciscaItem; +import net.medievalweapons.item.JavelinItem; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.damage.DamageType; @@ -24,22 +22,22 @@ public class EntityInit { // Map public static final Map> ENTITY_TYPES = new LinkedHashMap<>(); // Francisca - public static final EntityType WOODEN_FRANCISCA = register("wooden_francisca", create_Francisca(ItemInit.WOODEN_FRANCISCA_ITEM)); - public static final EntityType STONE_FRANCISCA = register("stone_francisca", create_Francisca(ItemInit.STONE_FRANCISCA_ITEM)); - public static final EntityType IRON_FRANCISCA = register("iron_francisca", create_Francisca(ItemInit.IRON_FRANCISCA_ITEM)); - public static final EntityType GOLDEN_FRANCISCA = register("golden_francisca", create_Francisca(ItemInit.GOLDEN_FRANCISCA_ITEM)); - public static final EntityType DIAMOND_FRANCISCA = register("diamond_francisca", create_Francisca(ItemInit.DIAMOND_FRANCISCA_ITEM)); - public static final EntityType NETHERITE_FRANCISCA = register("netherite_francisca", create_Francisca(ItemInit.NETHERITE_FRANCISCA_ITEM)); + public static final EntityType WOODEN_FRANCISCA = register("wooden_francisca", create_Francisca(ItemInit.WOODEN_FRANCISCA_ITEM)); + public static final EntityType STONE_FRANCISCA = register("stone_francisca", create_Francisca(ItemInit.STONE_FRANCISCA_ITEM)); + public static final EntityType IRON_FRANCISCA = register("iron_francisca", create_Francisca(ItemInit.IRON_FRANCISCA_ITEM)); + public static final EntityType GOLDEN_FRANCISCA = register("golden_francisca", create_Francisca(ItemInit.GOLDEN_FRANCISCA_ITEM)); + public static final EntityType DIAMOND_FRANCISCA = register("diamond_francisca", create_Francisca(ItemInit.DIAMOND_FRANCISCA_ITEM)); + public static final EntityType NETHERITE_FRANCISCA = register("netherite_francisca", create_Francisca(ItemInit.NETHERITE_FRANCISCA_ITEM)); // Javelin - public static final EntityType WOODEN_JAVELIN = register("wooden_javelin", create_Javelin(ItemInit.WOODEN_JAVELIN_ITEM)); - public static final EntityType STONE_JAVELIN = register("stone_javelin", create_Javelin(ItemInit.STONE_JAVELIN_ITEM)); - public static final EntityType IRON_JAVELIN = register("iron_javelin", create_Javelin(ItemInit.IRON_JAVELIN_ITEM)); - public static final EntityType GOLDEN_JAVELIN = register("golden_javelin", create_Javelin(ItemInit.GOLDEN_JAVELIN_ITEM)); - public static final EntityType DIAMOND_JAVELIN = register("diamond_javelin", create_Javelin(ItemInit.DIAMOND_JAVELIN_ITEM)); - public static final EntityType NETHERITE_JAVELIN = register("netherite_javelin", create_Javelin(ItemInit.NETHERITE_JAVELIN_ITEM)); + public static final EntityType WOODEN_JAVELIN = register("wooden_javelin", create_Javelin(ItemInit.WOODEN_JAVELIN_ITEM)); + public static final EntityType STONE_JAVELIN = register("stone_javelin", create_Javelin(ItemInit.STONE_JAVELIN_ITEM)); + public static final EntityType IRON_JAVELIN = register("iron_javelin", create_Javelin(ItemInit.IRON_JAVELIN_ITEM)); + public static final EntityType GOLDEN_JAVELIN = register("golden_javelin", create_Javelin(ItemInit.GOLDEN_JAVELIN_ITEM)); + public static final EntityType DIAMOND_JAVELIN = register("diamond_javelin", create_Javelin(ItemInit.DIAMOND_JAVELIN_ITEM)); + public static final EntityType NETHERITE_JAVELIN = register("netherite_javelin", create_Javelin(ItemInit.NETHERITE_JAVELIN_ITEM)); // Healing Ball - public static final EntityType HEALING_BALL_ENTITY = register("healing_ball", - FabricEntityTypeBuilder.create(SpawnGroup.MISC, Healing_Ball_Entity::new).dimensions(EntityDimensions.fixed(0.3F, 0.3F)).build()); + public static final EntityType HEALING_BALL_ENTITY = register("healing_ball", + EntityType.Builder.create(HealingBallEntity::new, SpawnGroup.MISC).dimensions(0.3F, 0.3F).build()); // Damage Types public static final RegistryKey JAVELIN = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, new Identifier("medievalweapons", "javelin")); public static final RegistryKey FRANCISCA = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, new Identifier("medievalweapons", "francisca")); @@ -58,12 +56,12 @@ public static > T register(String name, T type) { return type; } - public static EntityType create_Francisca(Francisca_Item item) { - return FabricEntityTypeBuilder.create(SpawnGroup.MISC, (entity, world) -> new Francisca_Entity(entity, world, item)).dimensions(EntityDimensions.fixed(0.5F, 0.5F)).build(); + public static EntityType create_Francisca(FranciscaItem item) { + return EntityType.Builder.create((entity, world) -> new FranciscaEntity(entity, world, item), SpawnGroup.MISC).dimensions(0.5F, 0.5F).build(); } - public static EntityType create_Javelin(Javelin_Item item) { - return FabricEntityTypeBuilder.create(SpawnGroup.MISC, (entity, world) -> new Javelin_Entity(entity, world, item)).dimensions(EntityDimensions.fixed(0.5F, 0.5F)).build(); + public static EntityType create_Javelin(JavelinItem item) { + return EntityType.Builder.create((entity, world) -> new JavelinEntity(entity, world, item), SpawnGroup.MISC).dimensions(0.5F, 0.5F).build(); } } \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/init/ItemInit.java b/src/main/java/net/medievalweapons/init/ItemInit.java index c2dd5d3..fd8f374 100644 --- a/src/main/java/net/medievalweapons/init/ItemInit.java +++ b/src/main/java/net/medievalweapons/init/ItemInit.java @@ -10,9 +10,13 @@ import net.medievalweapons.compat.CompatItems; import net.medievalweapons.compat.CompatRecipes; import net.medievalweapons.item.*; +import net.minecraft.component.type.AttributeModifierSlot; +import net.minecraft.entity.attribute.EntityAttributeModifier; +import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterials; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; @@ -33,101 +37,235 @@ public class ItemInit { // Map public static final Map ITEMS = new LinkedHashMap<>(); // Small Axe - public static final Small_Axe_Item WOODEN_SMALL_AXE_ITEM = register("wooden_small_axe", new Small_Axe_Item(ToolMaterials.WOOD, 5, -2.9F, new Item.Settings())); - public static final Small_Axe_Item STONE_SMALL_AXE_ITEM = register("stone_small_axe", new Small_Axe_Item(ToolMaterials.STONE, 5, -2.9F, new Item.Settings())); - public static final Small_Axe_Item IRON_SMALL_AXE_ITEM = register("iron_small_axe", new Small_Axe_Item(ToolMaterials.IRON, 5, -2.9F, new Item.Settings())); - public static final Small_Axe_Item GOLDEN_SMALL_AXE_ITEM = register("golden_small_axe", new Small_Axe_Item(ToolMaterials.GOLD, 5, -2.9F, new Item.Settings())); - public static final Small_Axe_Item DIAMOND_SMALL_AXE_ITEM = register("diamond_small_axe", new Small_Axe_Item(ToolMaterials.DIAMOND, 5, -2.9F, new Item.Settings())); - public static final Small_Axe_Item NETHERITE_SMALL_AXE_ITEM = register("netherite_small_axe", new Small_Axe_Item(ToolMaterials.NETHERITE, 5, -2.9F, new Item.Settings().fireproof())); + public static final SmallAxeItem WOODEN_SMALL_AXE_ITEM = register("wooden_small_axe", + new SmallAxeItem(ToolMaterials.WOOD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 5, -2.9f)))); + public static final SmallAxeItem STONE_SMALL_AXE_ITEM = register("stone_small_axe", + new SmallAxeItem(ToolMaterials.STONE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 5, -2.9f)))); + public static final SmallAxeItem IRON_SMALL_AXE_ITEM = register("iron_small_axe", + new SmallAxeItem(ToolMaterials.IRON, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 5, -2.9f)))); + public static final SmallAxeItem GOLDEN_SMALL_AXE_ITEM = register("golden_small_axe", + new SmallAxeItem(ToolMaterials.GOLD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 5, -2.9f)))); + public static final SmallAxeItem DIAMOND_SMALL_AXE_ITEM = register("diamond_small_axe", + new SmallAxeItem(ToolMaterials.DIAMOND, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 5, -2.9f)))); + public static final SmallAxeItem NETHERITE_SMALL_AXE_ITEM = register("netherite_small_axe", + new SmallAxeItem(ToolMaterials.NETHERITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 5, -2.9f)).fireproof())); + // Long Sword - public static final Long_Sword_Item WOOD_LONG_SWORD_ITEM = register("wooden_long_sword", new Long_Sword_Item(ToolMaterials.WOOD, 6, -3.0F, new Item.Settings())); - public static final Long_Sword_Item STONE_LONG_SWORD_ITEM = register("stone_long_sword", new Long_Sword_Item(ToolMaterials.STONE, 6, -3.0F, new Item.Settings())); - public static final Long_Sword_Item IRON_LONG_SWORD_ITEM = register("iron_long_sword", new Long_Sword_Item(ToolMaterials.IRON, 6, -3.0F, new Item.Settings())); - public static final Long_Sword_Item GOLDEN_LONG_SWORD_ITEM = register("golden_long_sword", new Long_Sword_Item(ToolMaterials.GOLD, 6, -3.0F, new Item.Settings())); - public static final Long_Sword_Item DIAMOND_LONG_SWORD_ITEM = register("diamond_long_sword", new Long_Sword_Item(ToolMaterials.DIAMOND, 6, -3.0F, new Item.Settings())); - public static final Long_Sword_Item NETHERITE_LONG_SWORD_ITEM = register("netherite_long_sword", new Long_Sword_Item(ToolMaterials.NETHERITE, 6, -3.0F, new Item.Settings().fireproof())); + public static final LongSwordItem WOOD_LONG_SWORD_ITEM = register("wooden_long_sword", + new LongSwordItem(ToolMaterials.WOOD, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final LongSwordItem STONE_LONG_SWORD_ITEM = register("stone_long_sword", + new LongSwordItem(ToolMaterials.STONE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final LongSwordItem IRON_LONG_SWORD_ITEM = register("iron_long_sword", + new LongSwordItem(ToolMaterials.IRON, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final LongSwordItem GOLDEN_LONG_SWORD_ITEM = register("golden_long_sword", + new LongSwordItem(ToolMaterials.GOLD, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final LongSwordItem DIAMOND_LONG_SWORD_ITEM = register("diamond_long_sword", + new LongSwordItem(ToolMaterials.DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final LongSwordItem NETHERITE_LONG_SWORD_ITEM = register("netherite_long_sword", + new LongSwordItem(ToolMaterials.NETHERITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 6, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 0.8f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); // Dagger - public static final Dagger_Item WOOD_DAGGER_ITEM = register("wooden_dagger", new Dagger_Item(ToolMaterials.WOOD, 2, -2.0F, new Item.Settings())); - public static final Dagger_Item STONE_DAGGER_ITEM = register("stone_dagger", new Dagger_Item(ToolMaterials.STONE, 2, -2.0F, new Item.Settings())); - public static final Dagger_Item IRON_DAGGER_ITEM = register("iron_dagger", new Dagger_Item(ToolMaterials.IRON, 2, -2.0F, new Item.Settings())); - public static final Dagger_Item GOLDEN_DAGGER_ITEM = register("golden_dagger", new Dagger_Item(ToolMaterials.GOLD, 2, -2.0F, new Item.Settings())); - public static final Dagger_Item DIAMOND_DAGGER_ITEM = register("diamond_dagger", new Dagger_Item(ToolMaterials.DIAMOND, 2, -2.0F, new Item.Settings())); - public static final Dagger_Item NETHERITE_DAGGER_ITEM = register("netherite_dagger", new Dagger_Item(ToolMaterials.NETHERITE, 2, -2.0F, new Item.Settings().fireproof())); + public static final DaggerItem WOOD_DAGGER_ITEM = register("wooden_dagger", + new DaggerItem(ToolMaterials.WOOD, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final DaggerItem STONE_DAGGER_ITEM = register("stone_dagger", + new DaggerItem(ToolMaterials.STONE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final DaggerItem IRON_DAGGER_ITEM = register("iron_dagger", + new DaggerItem(ToolMaterials.IRON, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final DaggerItem GOLDEN_DAGGER_ITEM = register("golden_dagger", + new DaggerItem(ToolMaterials.GOLD, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final DaggerItem DIAMOND_DAGGER_ITEM = register("diamond_dagger", + new DaggerItem(ToolMaterials.DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final DaggerItem NETHERITE_DAGGER_ITEM = register("netherite_dagger", + new DaggerItem(ToolMaterials.NETHERITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 2, -2.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(DaggerItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -1.0f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); // Francisca - public static final Francisca_Item WOODEN_FRANCISCA_ITEM = register("wooden_francisca", - new Francisca_Item(ToolMaterials.WOOD, 1.0F, -2.6F, () -> EntityInit.WOODEN_FRANCISCA, new Item.Settings())); - public static final Francisca_Item STONE_FRANCISCA_ITEM = register("stone_francisca", new Francisca_Item(ToolMaterials.STONE, 1.0F, -2.6F, () -> EntityInit.STONE_FRANCISCA, new Item.Settings())); - public static final Francisca_Item IRON_FRANCISCA_ITEM = register("iron_francisca", new Francisca_Item(ToolMaterials.IRON, 1.0F, -2.6F, () -> EntityInit.IRON_FRANCISCA, new Item.Settings())); - public static final Francisca_Item GOLDEN_FRANCISCA_ITEM = register("golden_francisca", - new Francisca_Item(ToolMaterials.GOLD, 1.0F, -2.6F, () -> EntityInit.GOLDEN_FRANCISCA, new Item.Settings())); - public static final Francisca_Item DIAMOND_FRANCISCA_ITEM = register("diamond_francisca", - new Francisca_Item(ToolMaterials.DIAMOND, 1.0F, -2.6F, () -> EntityInit.DIAMOND_FRANCISCA, new Item.Settings())); - public static final Francisca_Item NETHERITE_FRANCISCA_ITEM = register("netherite_francisca", - new Francisca_Item(ToolMaterials.NETHERITE, 1.0F, -2.6F, () -> EntityInit.NETHERITE_FRANCISCA, new Item.Settings().fireproof())); + public static final FranciscaItem WOODEN_FRANCISCA_ITEM = register("wooden_francisca", + new FranciscaItem(ToolMaterials.WOOD, () -> EntityInit.WOODEN_FRANCISCA, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 1, -2.6f)))); + public static final FranciscaItem STONE_FRANCISCA_ITEM = register("stone_francisca", + new FranciscaItem(ToolMaterials.STONE, () -> EntityInit.STONE_FRANCISCA, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 1, -2.6f)))); + public static final FranciscaItem IRON_FRANCISCA_ITEM = register("iron_francisca", + new FranciscaItem(ToolMaterials.IRON, () -> EntityInit.IRON_FRANCISCA, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 1, -2.6f)))); + public static final FranciscaItem GOLDEN_FRANCISCA_ITEM = register("golden_francisca", + new FranciscaItem(ToolMaterials.GOLD, () -> EntityInit.GOLDEN_FRANCISCA, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 1, -2.6f)))); + public static final FranciscaItem DIAMOND_FRANCISCA_ITEM = register("diamond_francisca", + new FranciscaItem(ToolMaterials.DIAMOND, () -> EntityInit.DIAMOND_FRANCISCA, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 1, -2.6f)))); + public static final FranciscaItem NETHERITE_FRANCISCA_ITEM = register("netherite_francisca", new FranciscaItem(ToolMaterials.NETHERITE, () -> EntityInit.NETHERITE_FRANCISCA, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 1, -2.6f)).fireproof())); // Big Axe - public static final Big_Axe_Item WOODEN_BIG_AXE_ITEM = register("wooden_big_axe", new Big_Axe_Item(ToolMaterials.WOOD, 6, -3.4F, new Item.Settings())); - public static final Big_Axe_Item STONE_BIG_AXE_ITEM = register("stone_big_axe", new Big_Axe_Item(ToolMaterials.STONE, 6, -3.4F, new Item.Settings())); - public static final Big_Axe_Item IRON_BIG_AXE_ITEM = register("iron_big_axe", new Big_Axe_Item(ToolMaterials.IRON, 6, -3.4F, new Item.Settings())); - public static final Big_Axe_Item GOLDEN_BIG_AXE_ITEM = register("golden_big_axe", new Big_Axe_Item(ToolMaterials.GOLD, 6, -3.4F, new Item.Settings())); - public static final Big_Axe_Item DIAMOND_BIG_AXE_ITEM = register("diamond_big_axe", new Big_Axe_Item(ToolMaterials.DIAMOND, 6, -3.4F, new Item.Settings())); - public static final Big_Axe_Item NETHERITE_BIG_AXE_ITEM = register("netherite_big_axe", new Big_Axe_Item(ToolMaterials.NETHERITE, 6, -3.4F, new Item.Settings().fireproof())); + public static final BigAxeItem WOODEN_BIG_AXE_ITEM = register("wooden_big_axe", + new BigAxeItem(ToolMaterials.WOOD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 6, -3.4f)))); + public static final BigAxeItem STONE_BIG_AXE_ITEM = register("stone_big_axe", + new BigAxeItem(ToolMaterials.STONE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 6, -3.4f)))); + public static final BigAxeItem IRON_BIG_AXE_ITEM = register("iron_big_axe", + new BigAxeItem(ToolMaterials.IRON, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 6, -3.4f)))); + public static final BigAxeItem GOLDEN_BIG_AXE_ITEM = register("golden_big_axe", + new BigAxeItem(ToolMaterials.GOLD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 6, -3.4f)))); + public static final BigAxeItem DIAMOND_BIG_AXE_ITEM = register("diamond_big_axe", + new BigAxeItem(ToolMaterials.DIAMOND, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 6, -3.4f)))); + public static final BigAxeItem NETHERITE_BIG_AXE_ITEM = register("netherite_big_axe", + new BigAxeItem(ToolMaterials.NETHERITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 6, -3.4f)).fireproof())); // Javelin - public static final Javelin_Item WOODEN_JAVELIN_ITEM = register("wooden_javelin", new Javelin_Item(ToolMaterials.WOOD, 2.2F, -2.7F, () -> EntityInit.WOODEN_JAVELIN, new Item.Settings())); - public static final Javelin_Item STONE_JAVELIN_ITEM = register("stone_javelin", new Javelin_Item(ToolMaterials.STONE, 2.2F, -2.7F, () -> EntityInit.STONE_JAVELIN, new Item.Settings())); - public static final Javelin_Item IRON_JAVELIN_ITEM = register("iron_javelin", new Javelin_Item(ToolMaterials.IRON, 2.2F, -2.7F, () -> EntityInit.IRON_JAVELIN, new Item.Settings())); - public static final Javelin_Item GOLDEN_JAVELIN_ITEM = register("golden_javelin", new Javelin_Item(ToolMaterials.GOLD, 2.2F, -2.7F, () -> EntityInit.GOLDEN_JAVELIN, new Item.Settings())); - public static final Javelin_Item DIAMOND_JAVELIN_ITEM = register("diamond_javelin", new Javelin_Item(ToolMaterials.DIAMOND, 2.2F, -2.7F, () -> EntityInit.DIAMOND_JAVELIN, new Item.Settings())); - public static final Javelin_Item NETHERITE_JAVELIN_ITEM = register("netherite_javelin", - new Javelin_Item(ToolMaterials.NETHERITE, 2.2F, -2.7F, () -> EntityInit.NETHERITE_JAVELIN, new Item.Settings().fireproof())); + public static final JavelinItem WOODEN_JAVELIN_ITEM = register("wooden_javelin", + new JavelinItem(ToolMaterials.WOOD, () -> EntityInit.WOODEN_JAVELIN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 2, -2.7f)))); + public static final JavelinItem STONE_JAVELIN_ITEM = register("stone_javelin", + new JavelinItem(ToolMaterials.STONE, () -> EntityInit.STONE_JAVELIN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 2, -2.7f)))); + public static final JavelinItem IRON_JAVELIN_ITEM = register("iron_javelin", + new JavelinItem(ToolMaterials.IRON, () -> EntityInit.IRON_JAVELIN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 2, -2.7f)))); + public static final JavelinItem GOLDEN_JAVELIN_ITEM = register("golden_javelin", + new JavelinItem(ToolMaterials.GOLD, () -> EntityInit.GOLDEN_JAVELIN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 2, -2.7f)))); + public static final JavelinItem DIAMOND_JAVELIN_ITEM = register("diamond_javelin", + new JavelinItem(ToolMaterials.DIAMOND, () -> EntityInit.DIAMOND_JAVELIN, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 2, -2.7f)))); + public static final JavelinItem NETHERITE_JAVELIN_ITEM = register("netherite_javelin", new JavelinItem(ToolMaterials.NETHERITE, () -> EntityInit.NETHERITE_JAVELIN, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 2, -2.7f)).fireproof())); // Lance - public static final Lance_Item WOODEN_LANCE_ITEM = register("wooden_lance", new Lance_Item(ToolMaterials.WOOD, 3, -3.2F, new Item.Settings())); - public static final Lance_Item STONE_LANCE_ITEM = register("stone_lance", new Lance_Item(ToolMaterials.STONE, 3, -3.2F, new Item.Settings())); - public static final Lance_Item IRON_LANCE_ITEM = register("iron_lance", new Lance_Item(ToolMaterials.IRON, 3, -3.2F, new Item.Settings())); - public static final Lance_Item GOLDEN_LANCE_ITEM = register("golden_lance", new Lance_Item(ToolMaterials.GOLD, 3, -3.2F, new Item.Settings())); - public static final Lance_Item DIAMOND_LANCE_ITEM = register("diamond_lance", new Lance_Item(ToolMaterials.DIAMOND, 3, -3.2F, new Item.Settings())); - public static final Lance_Item NETHERITE_LANCE_ITEM = register("netherite_lance", new Lance_Item(ToolMaterials.NETHERITE, 3, -3.2F, new Item.Settings().fireproof())); + public static final LanceItem WOODEN_LANCE_ITEM = register("wooden_lance", + new LanceItem(ToolMaterials.WOOD, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final LanceItem STONE_LANCE_ITEM = register("stone_lance", + new LanceItem(ToolMaterials.STONE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final LanceItem IRON_LANCE_ITEM = register("iron_lance", + new LanceItem(ToolMaterials.IRON, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final LanceItem GOLDEN_LANCE_ITEM = register("golden_lance", + new LanceItem(ToolMaterials.GOLD, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final LanceItem DIAMOND_LANCE_ITEM = register("diamond_lance", + new LanceItem(ToolMaterials.DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)))); + public static final LanceItem NETHERITE_LANCE_ITEM = register("netherite_lance", + new LanceItem(ToolMaterials.NETHERITE, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 3, -3.2f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LanceItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); // Healing Staff - public static final Healing_Staff_Item WOODEN_HEALING_STAFF_ITEM = register("wooden_healing_staff", new Healing_Staff_Item(ToolMaterials.WOOD, 1, -3.3F, 1, new Item.Settings())); - public static final Healing_Staff_Item STONE_HEALING_STAFF_ITEM = register("stone_healing_staff", new Healing_Staff_Item(ToolMaterials.STONE, 1, -3.3F, 2, new Item.Settings())); - public static final Healing_Staff_Item IRON_HEALING_STAFF_ITEM = register("iron_healing_staff", new Healing_Staff_Item(ToolMaterials.IRON, 1, -3.3F, 3, new Item.Settings())); - public static final Healing_Staff_Item GOLDEN_HEALING_STAFF_ITEM = register("golden_healing_staff", new Healing_Staff_Item(ToolMaterials.GOLD, 1, -3.3F, 3, new Item.Settings())); - public static final Healing_Staff_Item DIAMOND_HEALING_STAFF_ITEM = register("diamond_healing_staff", new Healing_Staff_Item(ToolMaterials.DIAMOND, 1, -3.3F, 4, new Item.Settings())); - public static final Healing_Staff_Item NETHERITE_HEALING_STAFF_ITEM = register("netherite_healing_staff", - new Healing_Staff_Item(ToolMaterials.NETHERITE, 1, -3.3F, 5, new Item.Settings().fireproof())); + public static final HealingStaffItem WOODEN_HEALING_STAFF_ITEM = register("wooden_healing_staff", + new HealingStaffItem(ToolMaterials.WOOD, 1, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 1, -3.3f)))); + public static final HealingStaffItem STONE_HEALING_STAFF_ITEM = register("stone_healing_staff", + new HealingStaffItem(ToolMaterials.STONE, 2, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 1, -3.3f)))); + public static final HealingStaffItem IRON_HEALING_STAFF_ITEM = register("iron_healing_staff", + new HealingStaffItem(ToolMaterials.IRON, 3, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 1, -3.3f)))); + public static final HealingStaffItem GOLDEN_HEALING_STAFF_ITEM = register("golden_healing_staff", + new HealingStaffItem(ToolMaterials.GOLD, 3, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 1, -3.3f)))); + public static final HealingStaffItem DIAMOND_HEALING_STAFF_ITEM = register("diamond_healing_staff", + new HealingStaffItem(ToolMaterials.DIAMOND, 4, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 1, -3.3f)))); + public static final HealingStaffItem NETHERITE_HEALING_STAFF_ITEM = register("netherite_healing_staff", + new HealingStaffItem(ToolMaterials.NETHERITE, 5, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 1, -3.3f)).fireproof())); // Mace - public static final Mace_Item WOODEN_MACE_ITEM = register("wooden_mace", new Mace_Item(ToolMaterials.WOOD, 4, -2.8F, 0, new Item.Settings())); - public static final Mace_Item STONE_MACE_ITEM = register("stone_mace", new Mace_Item(ToolMaterials.STONE, 4, -2.8F, 0, new Item.Settings())); - public static final Mace_Item IRON_MACE_ITEM = register("iron_mace", new Mace_Item(ToolMaterials.IRON, 4, -2.8F, 1, new Item.Settings())); - public static final Mace_Item GOLDEN_MACE_ITEM = register("golden_mace", new Mace_Item(ToolMaterials.GOLD, 4, -2.8F, 2, new Item.Settings())); - public static final Mace_Item DIAMOND_MACE_ITEM = register("diamond_mace", new Mace_Item(ToolMaterials.DIAMOND, 4, -2.8F, 2, new Item.Settings())); - public static final Mace_Item NETHERITE_MACE_ITEM = register("netherite_mace", new Mace_Item(ToolMaterials.NETHERITE, 4, -2.8F, 3, new Item.Settings().fireproof())); + public static final MaceItem WOODEN_MACE_ITEM = register("wooden_mace", + new MaceItem(ToolMaterials.WOOD, 0, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final MaceItem STONE_MACE_ITEM = register("stone_mace", + new MaceItem(ToolMaterials.STONE, 0, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final MaceItem IRON_MACE_ITEM = register("iron_mace", + new MaceItem(ToolMaterials.IRON, 1, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final MaceItem GOLDEN_MACE_ITEM = register("golden_mace", + new MaceItem(ToolMaterials.GOLD, 2, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final MaceItem DIAMOND_MACE_ITEM = register("diamond_mace", + new MaceItem(ToolMaterials.DIAMOND, 2, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); + public static final MaceItem NETHERITE_MACE_ITEM = register("netherite_mace", + new MaceItem(ToolMaterials.NETHERITE, 3, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 4, -2.8f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", -0.5f, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND)) + .fireproof())); // Ninjato - public static final Ninjato_Item WOODEN_NINJATO_ITEM = register("wooden_ninjato", new Ninjato_Item(ToolMaterials.WOOD, 2, -2.1F, new Item.Settings())); - public static final Ninjato_Item STONE_NINJATO_ITEM = register("stone_ninjato", new Ninjato_Item(ToolMaterials.STONE, 2, -2.1F, new Item.Settings())); - public static final Ninjato_Item IRON_NINJATO_ITEM = register("iron_ninjato", new Ninjato_Item(ToolMaterials.IRON, 2, -2.1F, new Item.Settings())); - public static final Ninjato_Item GOLDEN_NINJATO_ITEM = register("golden_ninjato", new Ninjato_Item(ToolMaterials.GOLD, 2, -2.1F, new Item.Settings())); - public static final Ninjato_Item DIAMOND_NINJATO_ITEM = register("diamond_ninjato", new Ninjato_Item(ToolMaterials.DIAMOND, 2, -2.1F, new Item.Settings())); - public static final Ninjato_Item NETHERITE_NINJATO_ITEM = register("netherite_ninjato", new Ninjato_Item(ToolMaterials.NETHERITE, 2, -2.1F, new Item.Settings().fireproof())); + public static final NinjatoItem WOODEN_NINJATO_ITEM = register("wooden_ninjato", + new NinjatoItem(ToolMaterials.WOOD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 2, -2.1f)))); + public static final NinjatoItem STONE_NINJATO_ITEM = register("stone_ninjato", + new NinjatoItem(ToolMaterials.STONE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 2, -2.1f)))); + public static final NinjatoItem IRON_NINJATO_ITEM = register("iron_ninjato", + new NinjatoItem(ToolMaterials.IRON, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 2, -2.1f)))); + public static final NinjatoItem GOLDEN_NINJATO_ITEM = register("golden_ninjato", + new NinjatoItem(ToolMaterials.GOLD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 2, -2.1f)))); + public static final NinjatoItem DIAMOND_NINJATO_ITEM = register("diamond_ninjato", + new NinjatoItem(ToolMaterials.DIAMOND, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 2, -2.1f)))); + public static final NinjatoItem NETHERITE_NINJATO_ITEM = register("netherite_ninjato", + new NinjatoItem(ToolMaterials.NETHERITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 2, -2.1f)).fireproof())); // Sickle - public static final Sickle_Item WOODEN_SICKLE_ITEM = register("wooden_sickle", new Sickle_Item(ToolMaterials.WOOD, 2, -2.2F, new Item.Settings())); - public static final Sickle_Item STONE_SICKLE_ITEM = register("stone_sickle", new Sickle_Item(ToolMaterials.STONE, 2, -2.2F, new Item.Settings())); - public static final Sickle_Item IRON_SICKLE_ITEM = register("iron_sickle", new Sickle_Item(ToolMaterials.IRON, 2, -2.2F, new Item.Settings())); - public static final Sickle_Item GOLDEN_SICKLE_ITEM = register("golden_sickle", new Sickle_Item(ToolMaterials.GOLD, 2, -2.2F, new Item.Settings())); - public static final Sickle_Item DIAMOND_SICKLE_ITEM = register("diamond_sickle", new Sickle_Item(ToolMaterials.DIAMOND, 2, -2.2F, new Item.Settings())); - public static final Sickle_Item NETHERITE_SICKLE_ITEM = register("netherite_sickle", new Sickle_Item(ToolMaterials.NETHERITE, 2, -2.2F, new Item.Settings().fireproof())); + public static final SickleItem WOODEN_SICKLE_ITEM = register("wooden_sickle", + new SickleItem(ToolMaterials.WOOD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 2, -2.2f)))); + public static final SickleItem STONE_SICKLE_ITEM = register("stone_sickle", + new SickleItem(ToolMaterials.STONE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 2, -2.2f)))); + public static final SickleItem IRON_SICKLE_ITEM = register("iron_sickle", + new SickleItem(ToolMaterials.IRON, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 2, -2.2f)))); + public static final SickleItem GOLDEN_SICKLE_ITEM = register("golden_sickle", + new SickleItem(ToolMaterials.GOLD, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 2, -2.2f)))); + public static final SickleItem DIAMOND_SICKLE_ITEM = register("diamond_sickle", + new SickleItem(ToolMaterials.DIAMOND, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 2, -2.2f)))); + public static final SickleItem NETHERITE_SICKLE_ITEM = register("netherite_sickle", + new SickleItem(ToolMaterials.NETHERITE, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 2, -2.2f)).fireproof())); // Rapier - public static final Rapier_Item WOODEN_RAPIER_ITEM = register("wooden_rapier", new Rapier_Item(ToolMaterials.WOOD, 2, -2.0F, 0, new Item.Settings())); - public static final Rapier_Item STONE_RAPIER_ITEM = register("stone_rapier", new Rapier_Item(ToolMaterials.STONE, 2, -2.0F, 0, new Item.Settings())); - public static final Rapier_Item IRON_RAPIER_ITEM = register("iron_rapier", new Rapier_Item(ToolMaterials.IRON, 2, -2.0F, 1, new Item.Settings())); - public static final Rapier_Item GOLDEN_RAPIER_ITEM = register("golden_rapier", new Rapier_Item(ToolMaterials.GOLD, 2, -2.0F, 2, new Item.Settings())); - public static final Rapier_Item DIAMOND_RAPIER_ITEM = register("diamond_rapier", new Rapier_Item(ToolMaterials.DIAMOND, 2, -2.0F, 2, new Item.Settings())); - public static final Rapier_Item NETHERITE_RAPIER_ITEM = register("netherite_rapier", new Rapier_Item(ToolMaterials.NETHERITE, 2, -2.0F, 3, new Item.Settings().fireproof())); + + public static final RapierItem WOODEN_RAPIER_ITEM = register("wooden_rapier", + new RapierItem(ToolMaterials.WOOD, 0, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 2, -2.0f)))); + public static final RapierItem STONE_RAPIER_ITEM = register("stone_rapier", + new RapierItem(ToolMaterials.STONE, 0, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.STONE, 2, -2.0f)))); + public static final RapierItem IRON_RAPIER_ITEM = register("iron_rapier", + new RapierItem(ToolMaterials.IRON, 1, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, 2, -2.0f)))); + public static final RapierItem GOLDEN_RAPIER_ITEM = register("golden_rapier", + new RapierItem(ToolMaterials.GOLD, 2, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, 2, -2.0f)))); + public static final RapierItem DIAMOND_RAPIER_ITEM = register("diamond_rapier", + new RapierItem(ToolMaterials.DIAMOND, 2, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, 2, -2.0f)))); + public static final RapierItem NETHERITE_RAPIER_ITEM = register("netherite_rapier", + new RapierItem(ToolMaterials.NETHERITE, 3, new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, 2, -2.0f)).fireproof())); // Long Bow - public static final Long_Bow_Item LONG_BOW_ITEM = register("long_bow", new Long_Bow_Item(new Item.Settings().maxDamage(443))); + public static final LongBowItem LONG_BOW_ITEM = register("long_bow", new LongBowItem(new Item.Settings().maxDamage(443))); // Recurve Bow - public static final Recurve_Bow_Item RECURVE_BOW_ITEM = register("recurve_bow", new Recurve_Bow_Item(new Item.Settings().maxDamage(361))); + public static final RecurveBowItem RECURVE_BOW_ITEM = register("recurve_bow", new RecurveBowItem(new Item.Settings().maxDamage(361))); // Thalleous Sword - public static final Thalleous_Sword_Item THALLEOUS_SWORD = register("thalleous_sword", new Thalleous_Sword_Item(ToolMaterials.DIAMOND, 10, -3.0F, new Item.Settings())); + public static final ThalleousSwordItem THALLEOUS_SWORD = register("thalleous_sword", + new ThalleousSwordItem(ToolMaterials.DIAMOND, + new Item.Settings().attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, 10, -3.0f).with(EntityAttributes.PLAYER_ENTITY_INTERACTION_RANGE, + new EntityAttributeModifier(LongSwordItem.ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", 1.0f, EntityAttributeModifier.Operation.ADD_VALUE), + AttributeModifierSlot.MAINHAND)))); public static I register(String name, I item) { ITEMS.put(new Identifier("medievalweapons", name), item); diff --git a/src/main/java/net/medievalweapons/init/ParticleInit.java b/src/main/java/net/medievalweapons/init/ParticleInit.java index 40fa6af..2918254 100644 --- a/src/main/java/net/medievalweapons/init/ParticleInit.java +++ b/src/main/java/net/medievalweapons/init/ParticleInit.java @@ -4,7 +4,7 @@ import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.particle.v1.FabricSpriteProvider; import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; -import net.minecraft.particle.DefaultParticleType; +import net.minecraft.particle.SimpleParticleType; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; @@ -18,7 +18,7 @@ public class ParticleInit { - public static final DefaultParticleType HEALING_AURA_PARTICLE = FabricParticleTypes.simple(); + public static final SimpleParticleType HEALING_AURA_PARTICLE = FabricParticleTypes.simple(); public static void init() { Registry.register(Registries.PARTICLE_TYPE, new Identifier("medievalweapons", "healing_aura_particle"), HEALING_AURA_PARTICLE); @@ -91,7 +91,7 @@ public float getSize(float tickDelta) { } @Environment(EnvType.CLIENT) - public static class Factory implements ParticleFactory { + public static class Factory implements ParticleFactory { private final FabricSpriteProvider sprites; public Factory(FabricSpriteProvider sprites) { @@ -99,7 +99,7 @@ public Factory(FabricSpriteProvider sprites) { } @Override - public Particle createParticle(DefaultParticleType type, ClientWorld world, double x, double y, double z, double vX, double vY, double vZ) { + public Particle createParticle(SimpleParticleType type, ClientWorld world, double x, double y, double z, double vX, double vY, double vZ) { return new HealingAuraParticle(world, x, y, z, vX, vY, vZ, sprites); } } diff --git a/src/main/java/net/medievalweapons/init/RenderInit.java b/src/main/java/net/medievalweapons/init/RenderInit.java index 052e8e5..5230691 100644 --- a/src/main/java/net/medievalweapons/init/RenderInit.java +++ b/src/main/java/net/medievalweapons/init/RenderInit.java @@ -5,9 +5,9 @@ import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.medievalweapons.compat.CompatRender; -import net.medievalweapons.entity.renderer.Francisca_Entity_Renderer; -import net.medievalweapons.entity.renderer.Healing_Ball_Entity_Renderer; -import net.medievalweapons.entity.renderer.Javelin_Entity_Renderer; +import net.medievalweapons.entity.renderer.FranciscaEntityRenderer; +import net.medievalweapons.entity.renderer.HealingBallEntityRenderer; +import net.medievalweapons.entity.renderer.JavelinEntityRenderer; import net.medievalweapons.init.ParticleInit.HealingAuraParticle; @Environment(EnvType.CLIENT) @@ -15,21 +15,21 @@ public class RenderInit { public static void init() { // Francisca - EntityRendererRegistry.register(EntityInit.WOODEN_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.STONE_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.IRON_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.GOLDEN_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.DIAMOND_FRANCISCA, Francisca_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.NETHERITE_FRANCISCA, Francisca_Entity_Renderer::new); + EntityRendererRegistry.register(EntityInit.WOODEN_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.STONE_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.IRON_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.GOLDEN_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.DIAMOND_FRANCISCA, FranciscaEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.NETHERITE_FRANCISCA, FranciscaEntityRenderer::new); // Javelin - EntityRendererRegistry.register(EntityInit.WOODEN_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.STONE_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.IRON_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.GOLDEN_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.DIAMOND_JAVELIN, Javelin_Entity_Renderer::new); - EntityRendererRegistry.register(EntityInit.NETHERITE_JAVELIN, Javelin_Entity_Renderer::new); + EntityRendererRegistry.register(EntityInit.WOODEN_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.STONE_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.IRON_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.GOLDEN_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.DIAMOND_JAVELIN, JavelinEntityRenderer::new); + EntityRendererRegistry.register(EntityInit.NETHERITE_JAVELIN, JavelinEntityRenderer::new); // Healing Ball - EntityRendererRegistry.register(EntityInit.HEALING_BALL_ENTITY, Healing_Ball_Entity_Renderer::new); + EntityRendererRegistry.register(EntityInit.HEALING_BALL_ENTITY, HealingBallEntityRenderer::new); // Particle ParticleFactoryRegistry.getInstance().register(ParticleInit.HEALING_AURA_PARTICLE, HealingAuraParticle.Factory::new); // Compat diff --git a/src/main/java/net/medievalweapons/item/BigAxeItem.java b/src/main/java/net/medievalweapons/item/BigAxeItem.java index 584baaf..130f03d 100644 --- a/src/main/java/net/medievalweapons/item/BigAxeItem.java +++ b/src/main/java/net/medievalweapons/item/BigAxeItem.java @@ -2,10 +2,8 @@ import java.util.List; -import org.jetbrains.annotations.Nullable; - import net.medievalweapons.init.CompatInit; -import net.minecraft.client.item.TooltipContext; +import net.minecraft.client.item.TooltipType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; @@ -18,13 +16,13 @@ public class BigAxeItem extends SwordItem { - public BigAxeItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public BigAxeItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - super.appendTooltip(stack, world, tooltip, context); + public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + super.appendTooltip(stack, context, tooltip, type); if (!CompatInit.isBetterCombatLoaded) { tooltip.add(Text.translatable("item.medievalweapons.double_handed.tooltip")); } @@ -42,4 +40,4 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han return TypedActionResult.consume(itemStack); } -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/item/Big_Axe_Item.java b/src/main/java/net/medievalweapons/item/Big_Axe_Item.java deleted file mode 100644 index a14c0fa..0000000 --- a/src/main/java/net/medievalweapons/item/Big_Axe_Item.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.medievalweapons.item; - -import java.util.List; - -import org.jetbrains.annotations.Nullable; - -import net.medievalweapons.init.CompatInit; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; -import net.minecraft.text.Text; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.UseAction; -import net.minecraft.world.World; - -public class Big_Axe_Item extends SwordItem { - - public Big_Axe_Item(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - super.appendTooltip(stack, world, tooltip, context); - if (!CompatInit.isBetterCombatLoaded) - tooltip.add(Text.translatable("item.medievalweapons.double_handed.tooltip")); - } - - @Override - public UseAction getUseAction(ItemStack stack) { - return UseAction.BLOCK; - } - - @Override - public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - ItemStack itemStack = user.getStackInHand(hand); - user.setCurrentHand(hand); - return TypedActionResult.consume(itemStack); - } - -} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/item/DaggerItem.java b/src/main/java/net/medievalweapons/item/DaggerItem.java index ce1ff94..2527aba 100644 --- a/src/main/java/net/medievalweapons/item/DaggerItem.java +++ b/src/main/java/net/medievalweapons/item/DaggerItem.java @@ -2,13 +2,7 @@ import java.util.UUID; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import net.medievalweapons.init.CompatInit; import net.minecraft.entity.Entity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeInstance; import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; @@ -20,33 +14,11 @@ import net.minecraft.world.World; public class DaggerItem extends SwordItem { - private static final UUID ATTACK_BONUS_MODIFIER_ID = UUID.fromString("fbd4e4e4-62f7-4108-9be3-eb6781231298"); + public static final UUID ATTACK_BONUS_MODIFIER_ID = UUID.fromString("fbd4e4e4-62f7-4108-9be3-eb6781231298"); private static final EntityAttributeModifier ATTACK_BONUS_MODIFIER; - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; - public DaggerItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) { + public DaggerItem(ToolMaterial material, Settings settings) { super(material, settings); - // super(material, attackDamage, attackSpeed, settings); - this.material = material; - this.attackDamage = attackDamage + material.getAttackDamage(); - - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(-1.0D, builder); - this.attributeModifiers = builder.build(); - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; } @Override @@ -63,7 +35,7 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } static { - ATTACK_BONUS_MODIFIER = new EntityAttributeModifier(ATTACK_BONUS_MODIFIER_ID, "Sneaking attack bonus", 2.0D, EntityAttributeModifier.Operation.ADDITION); + ATTACK_BONUS_MODIFIER = new EntityAttributeModifier(ATTACK_BONUS_MODIFIER_ID, "Sneaking attack bonus", 2.0D, EntityAttributeModifier.Operation.ADD_VALUE); } -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/item/Dagger_Item.java b/src/main/java/net/medievalweapons/item/Dagger_Item.java deleted file mode 100644 index ef206ab..0000000 --- a/src/main/java/net/medievalweapons/item/Dagger_Item.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.medievalweapons.item; - -import java.util.UUID; - -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import net.medievalweapons.init.CompatInit; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeInstance; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; -import net.minecraft.world.World; - -public class Dagger_Item extends SwordItem { - private static final UUID ATTACK_BONUS_MODIFIER_ID = UUID.fromString("fbd4e4e4-62f7-4108-9be3-eb6781231298"); - private static final EntityAttributeModifier ATTACK_BONUS_MODIFIER; - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; - - public Dagger_Item(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) { - super(material, attackDamage, attackSpeed, settings); - this.material = material; - this.attackDamage = attackDamage + material.getAttackDamage(); - - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(-1.0D, builder); - this.attributeModifiers = builder.build(); - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; - } - - @Override - public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (entity instanceof PlayerEntity && !world.isClient) { - PlayerEntity player = (PlayerEntity) entity; - Boolean extra = player.isSneaking() || player.hasStatusEffect(StatusEffects.INVISIBILITY); - if (selected && extra && !player.getAttributes().hasModifierForAttribute(EntityAttributes.GENERIC_ATTACK_DAMAGE, ATTACK_BONUS_MODIFIER_ID)) { - EntityAttributeInstance entityAttributeInstance = player.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE); - entityAttributeInstance.addTemporaryModifier(ATTACK_BONUS_MODIFIER); - } else if (player.getAttributes().hasModifierForAttribute(EntityAttributes.GENERIC_ATTACK_DAMAGE, ATTACK_BONUS_MODIFIER_ID) && !extra) { - player.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE).removeModifier(ATTACK_BONUS_MODIFIER_ID); - } - } - } - - static { - ATTACK_BONUS_MODIFIER = new EntityAttributeModifier(ATTACK_BONUS_MODIFIER_ID, "Sneaking attack bonus", 2.0D, EntityAttributeModifier.Operation.ADDITION); - } - -} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/item/FranciscaItem.java b/src/main/java/net/medievalweapons/item/FranciscaItem.java index 846e0dc..babf058 100644 --- a/src/main/java/net/medievalweapons/item/FranciscaItem.java +++ b/src/main/java/net/medievalweapons/item/FranciscaItem.java @@ -23,8 +23,8 @@ public class FranciscaItem extends SwordItem { private final Supplier> typeSupplier; private EntityType cachedType = null; - public FranciscaItem(ToolMaterial toolMaterial, float attackDamage, float attackSpeed, Supplier> typeSupplier, Settings settings) { - super(toolMaterial, (int) attackDamage, attackSpeed, settings); + public FranciscaItem(ToolMaterial toolMaterial, Supplier> typeSupplier, Settings settings) { + super(toolMaterial, settings); this.typeSupplier = typeSupplier; } @@ -41,7 +41,7 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int int i = this.getMaxUseTime(stack) - remainingUseTicks; if (i >= 10) { if (!world.isClient()) { - stack.damage(1, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); + stack.damage(1, playerEntity, LivingEntity.getSlotForHand(user.getActiveHand())); FranciscaEntity francisca_Entity = new FranciscaEntity(world, playerEntity, this, stack); francisca_Entity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, 1.5F, 1.0F); if (playerEntity.isCreative()) { @@ -79,4 +79,4 @@ public UseAction getUseAction(ItemStack stack) { public int getMaxUseTime(ItemStack stack) { return 72000; } -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/item/Francisca_Item.java b/src/main/java/net/medievalweapons/item/Francisca_Item.java deleted file mode 100644 index 78aeb85..0000000 --- a/src/main/java/net/medievalweapons/item/Francisca_Item.java +++ /dev/null @@ -1,83 +0,0 @@ -package net.medievalweapons.item; - -import java.util.function.Supplier; - -import net.medievalweapons.entity.Francisca_Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.PersistentProjectileEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.stat.Stats; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.UseAction; -import net.minecraft.world.World; - -public class Francisca_Item extends SwordItem { - - private final Supplier> typeSupplier; - private EntityType cachedType = null; - - public Francisca_Item(ToolMaterial toolMaterial, float attackDamage, float attackSpeed, Supplier> typeSupplier, Settings settings) { - super(toolMaterial, (int) attackDamage, attackSpeed, settings); - this.typeSupplier = typeSupplier; - } - - public EntityType getType() { - if (cachedType == null) { - cachedType = typeSupplier.get(); - } - return cachedType; - } - - @Override - public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { - if (user instanceof PlayerEntity) { - PlayerEntity playerEntity = (PlayerEntity) user; - int i = this.getMaxUseTime(stack) - remainingUseTicks; - if (i >= 10) { - if (!world.isClient) { - stack.damage(1, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); - Francisca_Entity francisca_Entity = new Francisca_Entity(world, playerEntity, this, stack); - francisca_Entity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, 1.5F, 1.0F); - if (playerEntity.isCreative()) { - francisca_Entity.pickupType = PersistentProjectileEntity.PickupPermission.CREATIVE_ONLY; - } - world.spawnEntity(francisca_Entity); - world.playSoundFromEntity(null, francisca_Entity, SoundEvents.ITEM_TRIDENT_THROW, SoundCategory.PLAYERS, 1.0F, 1.0F); - if (!playerEntity.isCreative()) { - playerEntity.getInventory().removeOne(stack); - } - } - - playerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); - } - } - } - - @Override - public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - ItemStack itemStack = user.getStackInHand(hand); - if (itemStack.getDamage() >= itemStack.getMaxDamage() - 1) { - return TypedActionResult.fail(itemStack); - } else { - user.setCurrentHand(hand); - return TypedActionResult.consume(itemStack); - } - } - - @Override - public UseAction getUseAction(ItemStack stack) { - return UseAction.SPEAR; - } - - @Override - public int getMaxUseTime(ItemStack stack) { - return 72000; - } -} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/item/HealingStaffItem.java b/src/main/java/net/medievalweapons/item/HealingStaffItem.java index 624a340..b28f318 100644 --- a/src/main/java/net/medievalweapons/item/HealingStaffItem.java +++ b/src/main/java/net/medievalweapons/item/HealingStaffItem.java @@ -1,6 +1,6 @@ package net.medievalweapons.item; -import net.medievalweapons.entity.Healing_Ball_Entity; +import net.medievalweapons.entity.HealingBallEntity; import net.medievalweapons.init.ConfigInit; import net.medievalweapons.init.ParticleInit; import net.medievalweapons.init.SoundInit; @@ -20,10 +20,10 @@ import net.minecraft.world.World; public class HealingStaffItem extends SwordItem { - private int addition; + private final int addition; - public HealingStaffItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, int addition, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public HealingStaffItem(ToolMaterial toolMaterial, int addition, Settings settings) { + super(toolMaterial, settings); this.addition = addition; } @@ -33,10 +33,10 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int int i = this.getMaxUseTime(stack) - remainingUseTicks; if (i >= 30) { if (!world.isClient()) { - stack.damage(3, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); + stack.damage(3, playerEntity, LivingEntity.getSlotForHand(user.getActiveHand())); world.playSound(null, playerEntity.getBlockPos(), SoundInit.MAGIC_SHOT_EVENT, SoundCategory.PLAYERS, 0.9F, 1.0F); if (ConfigInit.CONFIG.old_healing_staff_behavior) { - Healing_Ball_Entity healing_Ball_Entity = new Healing_Ball_Entity(user, world, this.addition); + HealingBallEntity healing_Ball_Entity = new HealingBallEntity(user, world, this.addition); healing_Ball_Entity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, 0.5F, 1.0F); healing_Ball_Entity.setPos(playerEntity.getX(), playerEntity.getY() + 1.6D, playerEntity.getZ()); world.spawnEntity(healing_Ball_Entity); @@ -79,7 +79,7 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai 0.0D, 0.0D); } } else if (i % 80 == 0 && i < 241) { - stack.damage(1, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); + stack.damage(1, playerEntity, LivingEntity.getSlotForHand(user.getActiveHand())); playerEntity.addStatusEffect((new StatusEffectInstance(StatusEffects.INSTANT_HEALTH, 1, 0))); } } @@ -107,4 +107,4 @@ public int getMaxUseTime(ItemStack stack) { return 72000; } -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/item/Healing_Staff_Item.java b/src/main/java/net/medievalweapons/item/Healing_Staff_Item.java deleted file mode 100644 index 27bb37d..0000000 --- a/src/main/java/net/medievalweapons/item/Healing_Staff_Item.java +++ /dev/null @@ -1,111 +0,0 @@ -package net.medievalweapons.item; - -import net.medievalweapons.entity.Healing_Ball_Entity; -import net.medievalweapons.init.ConfigInit; -import net.medievalweapons.init.ParticleInit; -import net.medievalweapons.init.SoundInit; -import net.minecraft.entity.AreaEffectCloudEntity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; -import net.minecraft.sound.SoundCategory; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.UseAction; -import net.minecraft.util.hit.HitResult; -import net.minecraft.world.World; - -public class Healing_Staff_Item extends SwordItem { - private int addition; - - public Healing_Staff_Item(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, int addition, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - this.addition = addition; - } - - @Override - public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { - if (user instanceof PlayerEntity) { - PlayerEntity playerEntity = (PlayerEntity) user; - int i = this.getMaxUseTime(stack) - remainingUseTicks; - if (i >= 30) { - if (!world.isClient) { - stack.damage(3, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); - world.playSound(null, playerEntity.getBlockPos(), SoundInit.MAGIC_SHOT_EVENT, SoundCategory.PLAYERS, 0.9F, 1.0F); - if (ConfigInit.CONFIG.old_healing_staff_behavior) { - Healing_Ball_Entity healing_Ball_Entity = new Healing_Ball_Entity(user, world, this.addition); - healing_Ball_Entity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, 0.5F, 1.0F); - healing_Ball_Entity.setPos(playerEntity.getX(), playerEntity.getY() + 1.6D, playerEntity.getZ()); - world.spawnEntity(healing_Ball_Entity); - } else { - HitResult hitResult = playerEntity.raycast(8.0D + addition, 1.0F, false); - if (hitResult.getType().equals(HitResult.Type.BLOCK)) { - AreaEffectCloudEntity areaEffectCloudEntity = new AreaEffectCloudEntity(world, hitResult.getPos().x, hitResult.getPos().y + 0.1D, hitResult.getPos().z); - areaEffectCloudEntity.setOwner(user); - areaEffectCloudEntity.setParticleType(ParticleInit.HEALING_AURA_PARTICLE); - areaEffectCloudEntity.setRadius((float) this.addition); - areaEffectCloudEntity.setDuration(this.addition * 100); - areaEffectCloudEntity.setRadiusGrowth(-(12.0F - areaEffectCloudEntity.getRadius()) / 500.0F); - areaEffectCloudEntity.addEffect(new StatusEffectInstance(StatusEffects.INSTANT_HEALTH, 1, 0)); - world.playSound(null, hitResult.getPos().x, hitResult.getPos().y + 0.1D, hitResult.getPos().z, SoundInit.MAGIC_HEAL_AURA_EVENT, SoundCategory.NEUTRAL, 0.9F, 1.0F); - world.spawnEntity(areaEffectCloudEntity); - } - } - } - playerEntity.getItemCooldownManager().set(this, 100 + (this.addition * 20)); - } - } - } - - @Override - public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { - int i = this.getMaxUseTime(stack) - remainingUseTicks; - if (user instanceof PlayerEntity) { - PlayerEntity playerEntity = (PlayerEntity) user; - if (i >= 30) { - if (world.isClient) { - if (!ConfigInit.CONFIG.old_healing_staff_behavior) { - HitResult hitResult = playerEntity.raycast(8.0D + addition, 0.0F, false); - if (hitResult.getType().equals(HitResult.Type.BLOCK)) { - playerEntity.getWorld().addParticle(ParticleInit.HEALING_AURA_PARTICLE, hitResult.getPos().x - 0.2D + world.random.nextDouble() * 0.4D, - hitResult.getPos().y - 0.1D + world.random.nextDouble() * 0.2D, hitResult.getPos().z - 0.2D + world.random.nextDouble() * 0.4D, 0.0D, 0.0D, 0.0D); - } - } - for (int u = 0; u < 3; u++) { - playerEntity.getWorld().addParticle(ParticleInit.HEALING_AURA_PARTICLE, playerEntity.getParticleX(0.5D), playerEntity.getRandomBodyY(), playerEntity.getParticleZ(0.5D), 0.0D, - 0.0D, 0.0D); - } - } else if (i % 80 == 0 && i < 241) { - stack.damage(1, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); - playerEntity.addStatusEffect((new StatusEffectInstance(StatusEffects.INSTANT_HEALTH, 1, 0))); - } - } - } - } - - @Override - public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - ItemStack itemStack = user.getStackInHand(hand); - if (itemStack.getDamage() >= itemStack.getMaxDamage() - 1) { - return TypedActionResult.fail(itemStack); - } else { - user.setCurrentHand(hand); - return TypedActionResult.consume(itemStack); - } - } - - @Override - public UseAction getUseAction(ItemStack stack) { - return UseAction.BLOCK; - } - - @Override - public int getMaxUseTime(ItemStack stack) { - return 72000; - } - -} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/item/JavelinItem.java b/src/main/java/net/medievalweapons/item/JavelinItem.java index 38be073..3b06b17 100644 --- a/src/main/java/net/medievalweapons/item/JavelinItem.java +++ b/src/main/java/net/medievalweapons/item/JavelinItem.java @@ -2,7 +2,7 @@ import java.util.function.Supplier; -import net.medievalweapons.entity.Javelin_Entity; +import net.medievalweapons.entity.JavelinEntity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -20,15 +20,15 @@ public class JavelinItem extends SwordItem { - private final Supplier> typeSupplier; - private EntityType cachedType = null; + private final Supplier> typeSupplier; + private EntityType cachedType = null; - public JavelinItem(ToolMaterial toolMaterial, float attackDamage, float attackSpeed, Supplier> typeSupplier, Settings settings) { - super(toolMaterial, (int) attackDamage, attackSpeed, settings); + public JavelinItem(ToolMaterial toolMaterial, Supplier> typeSupplier, Settings settings) { + super(toolMaterial, settings); this.typeSupplier = typeSupplier; } - public EntityType getType() { + public EntityType getType() { if (cachedType == null) { cachedType = typeSupplier.get(); } @@ -41,8 +41,8 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int int i = this.getMaxUseTime(stack) - remainingUseTicks; if (i >= 10) { if (!world.isClient()) { - stack.damage(1, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); - Javelin_Entity Javelin_Entity = new Javelin_Entity(world, playerEntity, this, stack); + stack.damage(1, playerEntity, LivingEntity.getSlotForHand(user.getActiveHand())); + JavelinEntity Javelin_Entity = new JavelinEntity(world, playerEntity, this, stack); Javelin_Entity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, 2.5F, 1.0F); if (playerEntity.isCreative()) { Javelin_Entity.pickupType = PersistentProjectileEntity.PickupPermission.CREATIVE_ONLY; @@ -80,4 +80,4 @@ public int getMaxUseTime(ItemStack stack) { return 72000; } -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/item/Javelin_Item.java b/src/main/java/net/medievalweapons/item/Javelin_Item.java deleted file mode 100644 index eb0d926..0000000 --- a/src/main/java/net/medievalweapons/item/Javelin_Item.java +++ /dev/null @@ -1,84 +0,0 @@ -package net.medievalweapons.item; - -import java.util.function.Supplier; - -import net.medievalweapons.entity.Javelin_Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.PersistentProjectileEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.stat.Stats; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.UseAction; -import net.minecraft.world.World; - -public class Javelin_Item extends SwordItem { - - private final Supplier> typeSupplier; - private EntityType cachedType = null; - - public Javelin_Item(ToolMaterial toolMaterial, float attackDamage, float attackSpeed, Supplier> typeSupplier, Settings settings) { - super(toolMaterial, (int) attackDamage, attackSpeed, settings); - this.typeSupplier = typeSupplier; - } - - public EntityType getType() { - if (cachedType == null) { - cachedType = typeSupplier.get(); - } - return cachedType; - } - - @Override - public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { - if (user instanceof PlayerEntity) { - PlayerEntity playerEntity = (PlayerEntity) user; - int i = this.getMaxUseTime(stack) - remainingUseTicks; - if (i >= 10) { - if (!world.isClient) { - stack.damage(1, playerEntity, entity -> entity.sendToolBreakStatus(user.getActiveHand())); - Javelin_Entity Javelin_Entity = new Javelin_Entity(world, playerEntity, this, stack); - Javelin_Entity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, 2.5F, 1.0F); - if (playerEntity.isCreative()) { - Javelin_Entity.pickupType = PersistentProjectileEntity.PickupPermission.CREATIVE_ONLY; - } - world.spawnEntity(Javelin_Entity); - world.playSoundFromEntity(null, Javelin_Entity, SoundEvents.ITEM_TRIDENT_THROW, SoundCategory.PLAYERS, 1.0F, 1.0F); - if (!playerEntity.isCreative()) { - playerEntity.getInventory().removeOne(stack); - } - } - - playerEntity.incrementStat(Stats.USED.getOrCreateStat(this)); - } - } - } - - @Override - public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - ItemStack itemStack = user.getStackInHand(hand); - if (itemStack.getDamage() >= itemStack.getMaxDamage() - 1) { - return TypedActionResult.fail(itemStack); - } else { - user.setCurrentHand(hand); - return TypedActionResult.consume(itemStack); - } - } - - @Override - public UseAction getUseAction(ItemStack stack) { - return UseAction.SPEAR; - } - - @Override - public int getMaxUseTime(ItemStack stack) { - return 72000; - } - -} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/item/LanceItem.java b/src/main/java/net/medievalweapons/item/LanceItem.java index d546824..30c8a18 100644 --- a/src/main/java/net/medievalweapons/item/LanceItem.java +++ b/src/main/java/net/medievalweapons/item/LanceItem.java @@ -2,13 +2,7 @@ import java.util.UUID; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import net.medievalweapons.init.CompatInit; import net.minecraft.entity.Entity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeInstance; import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; @@ -18,32 +12,12 @@ import net.minecraft.item.ToolMaterial; import net.minecraft.world.World; -public class Lance_Item extends SwordItem { - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; +public class LanceItem extends SwordItem { private static final UUID ATTACK_BONUS_MODIFIER_ID = UUID.fromString("fbd4e4e4-62f7-4108-9be3-eb6781231298"); private static final EntityAttributeModifier ATTACK_BONUS_MODIFIER; - public Lance_Item(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) { - super(material, attackDamage, attackSpeed, settings); - this.material = material; - this.attackDamage = attackDamage + material.getAttackDamage(); - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(1.5D, builder); - this.attributeModifiers = builder.build(); - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; + public LanceItem(ToolMaterial material, Settings settings) { + super(material, settings); } @Override @@ -59,7 +33,7 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } static { - ATTACK_BONUS_MODIFIER = new EntityAttributeModifier(ATTACK_BONUS_MODIFIER_ID, "Sneaking attack bonus", 2.0D, EntityAttributeModifier.Operation.ADDITION); + ATTACK_BONUS_MODIFIER = new EntityAttributeModifier(ATTACK_BONUS_MODIFIER_ID, "Sneaking attack bonus", 2.0D, EntityAttributeModifier.Operation.ADD_VALUE); } } diff --git a/src/main/java/net/medievalweapons/item/Lance_Item.java b/src/main/java/net/medievalweapons/item/Lance_Item.java deleted file mode 100644 index 6cc770e..0000000 --- a/src/main/java/net/medievalweapons/item/Lance_Item.java +++ /dev/null @@ -1,66 +0,0 @@ -package net.medievalweapons.item; - -import java.util.UUID; - -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import net.medievalweapons.init.CompatInit; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeInstance; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; -import net.minecraft.world.World; - -public class Lance_Item extends SwordItem { - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; - private static final UUID ATTACK_BONUS_MODIFIER_ID = UUID.fromString("fbd4e4e4-62f7-4108-9be3-eb6781231298"); - private static final EntityAttributeModifier ATTACK_BONUS_MODIFIER; - - public Lance_Item(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) { - super(material, attackDamage, attackSpeed, settings); - this.material = material; - this.attackDamage = attackDamage + material.getAttackDamage(); - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(1.5D, builder); - this.attributeModifiers = builder.build(); - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; - } - - @Override - public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (entity instanceof PlayerEntity && !world.isClient) { - PlayerEntity player = (PlayerEntity) entity; - if (selected && player.hasVehicle() && !player.getAttributes().hasModifierForAttribute(EntityAttributes.GENERIC_ATTACK_DAMAGE, ATTACK_BONUS_MODIFIER_ID)) { - EntityAttributeInstance entityAttributeInstance = player.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE); - entityAttributeInstance.addTemporaryModifier(ATTACK_BONUS_MODIFIER); - } else if (player.getAttributes().hasModifierForAttribute(EntityAttributes.GENERIC_ATTACK_DAMAGE, ATTACK_BONUS_MODIFIER_ID) && !player.hasVehicle()) { - player.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE).removeModifier(ATTACK_BONUS_MODIFIER_ID); - } - } - } - - static { - ATTACK_BONUS_MODIFIER = new EntityAttributeModifier(ATTACK_BONUS_MODIFIER_ID, "Sneaking attack bonus", 2.0D, EntityAttributeModifier.Operation.ADDITION); - } - -} diff --git a/src/main/java/net/medievalweapons/item/LongSwordItem.java b/src/main/java/net/medievalweapons/item/LongSwordItem.java index 60ac76a..778067f 100644 --- a/src/main/java/net/medievalweapons/item/LongSwordItem.java +++ b/src/main/java/net/medievalweapons/item/LongSwordItem.java @@ -1,18 +1,10 @@ package net.medievalweapons.item; import java.util.List; - -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import org.jetbrains.annotations.Nullable; +import java.util.UUID; import net.medievalweapons.init.CompatInit; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.client.item.TooltipType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; @@ -23,40 +15,22 @@ import net.minecraft.util.UseAction; import net.minecraft.world.World; -public class Long_Sword_Item extends SwordItem { - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; +public class LongSwordItem extends SwordItem { + public static final UUID ATTACK_BONUS_MODIFIER_ID = UUID.fromString("fbd4e4e4-62f7-4108-9be3-eb6781231298"); + + public LongSwordItem(ToolMaterial material, Settings settings) { + super(material, settings); - public Long_Sword_Item(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) { - super(material, attackDamage, attackSpeed, settings); - this.material = material; - this.attackDamage = attackDamage + material.getAttackDamage(); - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(0.8D, builder); - this.attributeModifiers = builder.build(); } @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - super.appendTooltip(stack, world, tooltip, context); + public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + super.appendTooltip(stack, context, tooltip, type); if (!CompatInit.isBetterCombatLoaded) { tooltip.add(Text.translatable("item.medievalweapons.double_handed.tooltip")); } } - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; - } - @Override public UseAction getUseAction(ItemStack stack) { return UseAction.BLOCK; @@ -69,4 +43,4 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han return TypedActionResult.consume(itemStack); } -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/item/MaceItem.java b/src/main/java/net/medievalweapons/item/MaceItem.java index 11f2fb3..9fd7735 100644 --- a/src/main/java/net/medievalweapons/item/MaceItem.java +++ b/src/main/java/net/medievalweapons/item/MaceItem.java @@ -1,49 +1,21 @@ package net.medievalweapons.item; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import net.medievalweapons.init.CompatInit; import net.medievalweapons.init.EffectInit; -import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; -public class Mace_Item extends SwordItem { +public class MaceItem extends SwordItem { - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; - private int addition; + private final int addition; - public Mace_Item(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, int addition, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - this.material = toolMaterial; - this.attackDamage = attackDamage + material.getAttackDamage(); - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(-0.5D, builder); - this.attributeModifiers = builder.build(); + public MaceItem(ToolMaterial toolMaterial, int addition, Settings settings) { + super(toolMaterial, settings); this.addition = addition; } - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; - } - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!target.isDead() && attacker.getWorld().getRandom().nextFloat() <= 0.01F + ((float) addition / 10F)) { diff --git a/src/main/java/net/medievalweapons/item/NinjatoItem.java b/src/main/java/net/medievalweapons/item/NinjatoItem.java index 8aa5ec5..494a6c4 100644 --- a/src/main/java/net/medievalweapons/item/NinjatoItem.java +++ b/src/main/java/net/medievalweapons/item/NinjatoItem.java @@ -5,8 +5,8 @@ public class NinjatoItem extends SwordItem { - public NinjatoItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public NinjatoItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } } diff --git a/src/main/java/net/medievalweapons/item/RapierItem.java b/src/main/java/net/medievalweapons/item/RapierItem.java index d300f5a..5957cd1 100644 --- a/src/main/java/net/medievalweapons/item/RapierItem.java +++ b/src/main/java/net/medievalweapons/item/RapierItem.java @@ -7,12 +7,12 @@ import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; -public class Rapier_Item extends SwordItem { +public class RapierItem extends SwordItem { - private int addition; + private final int addition; - public Rapier_Item(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, int addition, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public RapierItem(ToolMaterial toolMaterial, int addition, Settings settings) { + super(toolMaterial, settings); this.addition = addition; } diff --git a/src/main/java/net/medievalweapons/item/SickleItem.java b/src/main/java/net/medievalweapons/item/SickleItem.java index a96d5b2..7708f6c 100644 --- a/src/main/java/net/medievalweapons/item/SickleItem.java +++ b/src/main/java/net/medievalweapons/item/SickleItem.java @@ -1,10 +1,11 @@ package net.medievalweapons.item; -import com.mojang.authlib.GameProfile; - +import net.medievalweapons.init.ConfigInit; import net.minecraft.advancement.criterion.Criteria; import net.minecraft.block.BlockState; import net.minecraft.block.PlantBlock; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.ProfileComponent; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.mob.CreeperEntity; import net.minecraft.entity.mob.SkeletonEntity; @@ -16,22 +17,20 @@ import net.minecraft.item.Items; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtHelper; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.ActionResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class Sickle_Item extends SwordItem { +public class SickleItem extends SwordItem { - public Sickle_Item(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public SickleItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { - if (target.isDead() && attacker.getWorld().getRandom().nextFloat() <= 0.01F) { + if (target.isDead() && attacker.getWorld().getRandom().nextFloat() <= ConfigInit.CONFIG.sickle_head_drop_chance) { if (target instanceof ZombieEntity) { target.dropStack(new ItemStack(Items.ZOMBIE_HEAD)); } else if (target instanceof SkeletonEntity) { @@ -40,10 +39,9 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack target.dropStack(new ItemStack(Items.CREEPER_HEAD)); } else if (target instanceof WitherSkeletonEntity) { target.dropStack(new ItemStack(Items.WITHER_SKELETON_SKULL)); - } else if (target instanceof PlayerEntity) { - GameProfile gameProfile = ((PlayerEntity) target).getGameProfile(); + } else if (target instanceof PlayerEntity playerEntity) { ItemStack playerHead = new ItemStack(Items.PLAYER_HEAD); - playerHead.getOrCreateNbt().put("SkullOwner", NbtHelper.writeGameProfile(new NbtCompound(), gameProfile)); + playerHead.set(DataComponentTypes.PROFILE, new ProfileComponent(playerEntity.getGameProfile())); target.dropStack(playerHead); } } @@ -71,7 +69,7 @@ public ActionResult useOnBlock(ItemUsageContext context) { } } if (playerEntity != null) { - itemStack.damage(breakedBlocks, playerEntity, player -> player.sendToolBreakStatus(context.getHand())); + itemStack.damage(breakedBlocks, playerEntity, LivingEntity.getSlotForHand(context.getHand())); } } return ActionResult.success(world.isClient); diff --git a/src/main/java/net/medievalweapons/item/SmallAxeItem.java b/src/main/java/net/medievalweapons/item/SmallAxeItem.java index 40d945a..b786263 100644 --- a/src/main/java/net/medievalweapons/item/SmallAxeItem.java +++ b/src/main/java/net/medievalweapons/item/SmallAxeItem.java @@ -5,10 +5,9 @@ public class SmallAxeItem extends SwordItem { - public SmallAxeItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public SmallAxeItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } // Built in knockback is done by mixin - -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/item/Small_Axe_Item.java b/src/main/java/net/medievalweapons/item/Small_Axe_Item.java deleted file mode 100644 index c351a4c..0000000 --- a/src/main/java/net/medievalweapons/item/Small_Axe_Item.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.medievalweapons.item; - -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -public class Small_Axe_Item extends SwordItem { - - public Small_Axe_Item(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - // Built in knockback is done by mixin - -} \ No newline at end of file diff --git a/src/main/java/net/medievalweapons/item/ThalleousSwordItem.java b/src/main/java/net/medievalweapons/item/ThalleousSwordItem.java index 16b5e11..958dc8f 100644 --- a/src/main/java/net/medievalweapons/item/ThalleousSwordItem.java +++ b/src/main/java/net/medievalweapons/item/ThalleousSwordItem.java @@ -2,17 +2,8 @@ import java.util.List; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import org.jetbrains.annotations.Nullable; - import net.medievalweapons.init.CompatInit; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.client.item.TooltipType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; @@ -25,39 +16,18 @@ public class ThalleousSwordItem extends SwordItem { - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; - - public ThalleousSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - this.material = toolMaterial; - this.attackDamage = attackDamage + material.getAttackDamage(); - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(1.0D, builder); - this.attributeModifiers = builder.build(); + public ThalleousSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - super.appendTooltip(stack, world, tooltip, context); + public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + super.appendTooltip(stack, context, tooltip, type); if (!CompatInit.isBetterCombatLoaded) { tooltip.add(Text.translatable("item.medievalweapons.double_handed.tooltip")); } } - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; - } - @Override public UseAction getUseAction(ItemStack stack) { return UseAction.BLOCK; diff --git a/src/main/java/net/medievalweapons/item/Thalleous_Sword_Item.java b/src/main/java/net/medievalweapons/item/Thalleous_Sword_Item.java deleted file mode 100644 index fb22ef3..0000000 --- a/src/main/java/net/medievalweapons/item/Thalleous_Sword_Item.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.medievalweapons.item; - -import java.util.List; - -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; - -import org.jetbrains.annotations.Nullable; - -import net.medievalweapons.init.CompatInit; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; -import net.minecraft.text.Text; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.UseAction; -import net.minecraft.world.World; - -public class Thalleous_Sword_Item extends SwordItem { - - private final ToolMaterial material; - private final float attackDamage; - public final Multimap attributeModifiers; - - public Thalleous_Sword_Item(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - this.material = toolMaterial; - this.attackDamage = attackDamage + material.getAttackDamage(); - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", this.attackDamage, EntityAttributeModifier.Operation.ADDITION)); - builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", attackSpeed, EntityAttributeModifier.Operation.ADDITION)); - CompatInit.addRange(1.0D, builder); - this.attributeModifiers = builder.build(); - } - - @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - super.appendTooltip(stack, world, tooltip, context); - if (!CompatInit.isBetterCombatLoaded) - tooltip.add(Text.translatable("item.medievalweapons.double_handed.tooltip")); - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - return equipmentSlot == EquipmentSlot.MAINHAND ? attributeModifiers : super.getAttributeModifiers(equipmentSlot); - } - - @Override - public ToolMaterial getMaterial() { - return this.material; - } - - @Override - public UseAction getUseAction(ItemStack stack) { - return UseAction.BLOCK; - } - - @Override - public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - ItemStack itemStack = user.getStackInHand(hand); - user.setCurrentHand(hand); - return TypedActionResult.consume(itemStack); - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/AreaEffectCloudEntityMixin.java b/src/main/java/net/medievalweapons/mixin/AreaEffectCloudEntityMixin.java index 0d3af36..006125d 100644 --- a/src/main/java/net/medievalweapons/mixin/AreaEffectCloudEntityMixin.java +++ b/src/main/java/net/medievalweapons/mixin/AreaEffectCloudEntityMixin.java @@ -24,8 +24,9 @@ public abstract class AreaEffectCloudEntityMixin { @Inject(method = "Lnet/minecraft/entity/AreaEffectCloudEntity;tick()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/effect/StatusEffect;applyInstantEffect(Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/LivingEntity;ID)V"), cancellable = true, locals = LocalCapture.CAPTURE_FAILSOFT) private void tickMixin(CallbackInfo info, boolean bl, float f, List list, List list2, Iterator var6, LivingEntity livingEntity) { - if (!ConfigInit.CONFIG.healing_staff_owner_healing && livingEntity.equals(owner) && getParticleType().equals(ParticleInit.HEALING_AURA_PARTICLE)) + if (!ConfigInit.CONFIG.healing_staff_owner_healing && livingEntity.equals(owner) && getParticleType().equals(ParticleInit.HEALING_AURA_PARTICLE)) { info.cancel(); + } } diff --git a/src/main/java/net/medievalweapons/mixin/BowItemMixin.java b/src/main/java/net/medievalweapons/mixin/BowItemMixin.java index fa90b6c..5e467c9 100644 --- a/src/main/java/net/medievalweapons/mixin/BowItemMixin.java +++ b/src/main/java/net/medievalweapons/mixin/BowItemMixin.java @@ -1,18 +1,15 @@ package net.medievalweapons.mixin; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.injection.At; import net.medievalweapons.init.ItemInit; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.PersistentProjectileEntity; -import net.minecraft.item.ArrowItem; +import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.item.BowItem; import net.minecraft.item.ItemStack; import net.minecraft.item.RangedWeaponItem; @@ -25,14 +22,13 @@ public BowItemMixin(Settings settings) { super(settings); } - @Inject(method = "onStoppedUsing", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/projectile/PersistentProjectileEntity;setVelocity(Lnet/minecraft/entity/Entity;FFFFF)V", shift = Shift.AFTER), locals = LocalCapture.CAPTURE_FAILSOFT) - private void onStoppedUsingMixin(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfo info, PlayerEntity playerEntity, boolean bl, ItemStack itemStack, int i, - float f, boolean bl2, ArrowItem arrowItem, PersistentProjectileEntity persistentProjectileEntity) { - if (((BowItem) (Object) this) == ItemInit.LONG_BOW_ITEM) - persistentProjectileEntity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, f * 4.5F, 1.0F); - else if (((BowItem) (Object) this) == ItemInit.RECURVE_BOW_ITEM) - persistentProjectileEntity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0F, f * 2.0F, 1.0F); - + @Inject(method = "shoot", at = @At("TAIL")) + private void onStoppedUsingMixin(LivingEntity shooter, ProjectileEntity projectile, int index, float speed, float divergence, float yaw, @Nullable LivingEntity target, CallbackInfo info) { + if (((BowItem) (Object) this) == ItemInit.LONG_BOW_ITEM) { + projectile.setVelocity(shooter, shooter.getPitch(), shooter.getYaw(), 0.0F, speed * 4.5F, divergence); + } else if (((BowItem) (Object) this) == ItemInit.RECURVE_BOW_ITEM) { + projectile.setVelocity(shooter, shooter.getPitch(), shooter.getYaw(), 0.0F, speed * 2.0F, divergence); + } } @ModifyVariable(method = "onStoppedUsing", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/item/BowItem;getPullProgress(I)F"), ordinal = 0) diff --git a/src/main/java/net/medievalweapons/mixin/EnchantmentHelperMixin.java b/src/main/java/net/medievalweapons/mixin/EnchantmentHelperMixin.java index 1d0263e..09c83fb 100644 --- a/src/main/java/net/medievalweapons/mixin/EnchantmentHelperMixin.java +++ b/src/main/java/net/medievalweapons/mixin/EnchantmentHelperMixin.java @@ -7,54 +7,52 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.spongepowered.asm.mixin.injection.At; import net.medievalweapons.init.TagInit; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Javelin_Item; -import net.medievalweapons.item.Lance_Item; -import net.medievalweapons.item.Small_Axe_Item; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.JavelinItem; +import net.medievalweapons.item.LanceItem; +import net.medievalweapons.item.SmallAxeItem; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.EnchantmentLevelEntry; -import net.minecraft.enchantment.EnchantmentTarget; import net.minecraft.enchantment.Enchantments; -import net.minecraft.enchantment.SweepingEnchantment; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; +import net.minecraft.resource.featuretoggle.FeatureSet; import net.minecraft.util.Hand; @Mixin(EnchantmentHelper.class) public class EnchantmentHelperMixin { - @Inject(method = "getSweepingMultiplier", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/enchantment/EnchantmentHelper;getEquipmentLevel(Lnet/minecraft/enchantment/Enchantment;Lnet/minecraft/entity/LivingEntity;)I"), locals = LocalCapture.CAPTURE_FAILSOFT, cancellable = true) - private static void getSweepingMultiplierMixin(LivingEntity entity, CallbackInfoReturnable info, int i) { + @Inject(method = "Lnet/minecraft/enchantment/EnchantmentHelper;getSweepingMultiplier(Lnet/minecraft/entity/LivingEntity;)F", at = @At("TAIL"), cancellable = true) + private static void getSweepingMultiplierMixin(LivingEntity entity, CallbackInfoReturnable info) { ItemStack itemStack = entity.getMainHandStack(); - if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Big_Axe_Item) { - info.setReturnValue(SweepingEnchantment.getMultiplier(i + 1)); + if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof BigAxeItem) { + info.setReturnValue(EnchantmentHelper.getSweepingMultiplier(EnchantmentHelper.getEquipmentLevel(Enchantments.SWEEPING_EDGE, entity) + 1)); } } @Inject(method = "getPossibleEntries", at = @At("TAIL"), cancellable = true) - private static void getPossibleEntriesMixin(int i, ItemStack stack, boolean treasureAllowed, CallbackInfoReturnable> info) { + private static void getPossibleEntriesMixin(FeatureSet enabledFeatures, int level, ItemStack stack, boolean treasureAllowed, CallbackInfoReturnable> info) { List currentEnchantments = info.getReturnValue(); if (currentEnchantments != null) { - if (stack.getItem() instanceof Javelin_Item) { + if (stack.getItem() instanceof JavelinItem) { List enchantments = new ArrayList<>(); currentEnchantments.forEach(enchantment -> { - if ((enchantment.enchantment.target == EnchantmentTarget.WEAPON && enchantment.enchantment != Enchantments.SWEEPING) || enchantment.enchantment == Enchantments.IMPALING + if ((enchantment.enchantment.isAcceptableItem(stack) && enchantment.enchantment.isPrimaryItem(stack)) || enchantment.enchantment == Enchantments.IMPALING || enchantment.enchantment == Enchantments.PIERCING || enchantment.enchantment == Enchantments.LOYALTY) { enchantments.add(enchantment); } }); info.setReturnValue(enchantments); - } else if (stack.getItem() instanceof Lance_Item) { + } else if (stack.getItem() instanceof LanceItem) { List enchantments = new ArrayList<>(); currentEnchantments.forEach(enchantment -> { - if (enchantment.enchantment.target == EnchantmentTarget.WEAPON && enchantment.enchantment != Enchantments.SWEEPING) { + if (enchantment.enchantment.isAcceptableItem(stack) && enchantment.enchantment.isPrimaryItem(stack) && enchantment.enchantment != Enchantments.SWEEPING_EDGE) { enchantments.add(enchantment); } }); @@ -66,7 +64,7 @@ private static void getPossibleEntriesMixin(int i, ItemStack stack, boolean trea @Inject(method = "getKnockback", at = @At("HEAD"), cancellable = true) private static void getKnockbackMixin(LivingEntity entity, CallbackInfoReturnable info) { ItemStack itemStack = entity.getStackInHand(Hand.MAIN_HAND); - if (itemStack.getItem() instanceof Small_Axe_Item) { + if (itemStack.getItem() instanceof SmallAxeItem) { info.setReturnValue(1 + getEquipmentLevel(Enchantments.KNOCKBACK, entity)); } } diff --git a/src/main/java/net/medievalweapons/mixin/EnchantmentMixin.java b/src/main/java/net/medievalweapons/mixin/EnchantmentMixin.java index 3a24cc0..814e72c 100644 --- a/src/main/java/net/medievalweapons/mixin/EnchantmentMixin.java +++ b/src/main/java/net/medievalweapons/mixin/EnchantmentMixin.java @@ -1,6 +1,6 @@ package net.medievalweapons.mixin; -import net.medievalweapons.item.Javelin_Item; +import net.medievalweapons.item.JavelinItem; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantments; import net.minecraft.item.ItemStack; @@ -12,9 +12,10 @@ @Mixin(Enchantment.class) public class EnchantmentMixin { + @Inject(method = "isAcceptableItem", at = @At("HEAD"), cancellable = true) private void isAcceptableItemMixin(ItemStack stack, CallbackInfoReturnable info) { - if (((Object) this == Enchantments.PIERCING || (Object) this == Enchantments.IMPALING || (Object) this == Enchantments.LOYALTY) && stack.getItem() instanceof Javelin_Item) { + if (((Object) this == Enchantments.PIERCING || (Object) this == Enchantments.IMPALING || (Object) this == Enchantments.LOYALTY) && stack.getItem() instanceof JavelinItem) { info.setReturnValue(true); } } diff --git a/src/main/java/net/medievalweapons/mixin/LivingEntityMixin.java b/src/main/java/net/medievalweapons/mixin/LivingEntityMixin.java index a22dfda..31299f8 100644 --- a/src/main/java/net/medievalweapons/mixin/LivingEntityMixin.java +++ b/src/main/java/net/medievalweapons/mixin/LivingEntityMixin.java @@ -10,13 +10,12 @@ import net.medievalweapons.init.CompatInit; import net.medievalweapons.init.ConfigInit; import net.medievalweapons.init.TagInit; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Lance_Item; -import net.medievalweapons.item.Long_Sword_Item; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.LanceItem; +import net.medievalweapons.item.LongSwordItem; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.world.World; @@ -32,8 +31,8 @@ public LivingEntityMixin(EntityType type, World world) { private void getHandSwingDuration(CallbackInfoReturnable info) { LivingEntity livingEntity = (LivingEntity) (Object) this; ItemStack itemStack = livingEntity.getMainHandStack(); - if (!CompatInit.isBetterCombatLoaded && itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item - || itemStack.getItem() instanceof Big_Axe_Item || itemStack.getItem() instanceof Lance_Item) { + if (!CompatInit.isBetterCombatLoaded && itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem + || itemStack.getItem() instanceof BigAxeItem || itemStack.getItem() instanceof LanceItem) { info.setReturnValue(10); } } @@ -43,8 +42,8 @@ private void getHandSwingDuration(CallbackInfoReturnable info) { private void blockedByShieldMixin(DamageSource source, CallbackInfoReturnable info) { LivingEntity livingEntity = (LivingEntity) (Object) this; ItemStack itemStack = livingEntity.getMainHandStack(); - if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item - || itemStack.getItem() instanceof Big_Axe_Item) { + if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem + || itemStack.getItem() instanceof BigAxeItem) { info.setReturnValue(false); } } @@ -53,23 +52,16 @@ private void blockedByShieldMixin(DamageSource source, CallbackInfoReturnable info) { LivingEntity livingEntity = (LivingEntity) (Object) this; ItemStack itemStack = livingEntity.getActiveItem(); - if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item - || itemStack.getItem() instanceof Big_Axe_Item) { + if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem + || itemStack.getItem() instanceof BigAxeItem) { if (livingEntity instanceof PlayerEntity) { ((PlayerEntity) livingEntity).getItemCooldownManager().set(itemStack.getItem(), ConfigInit.CONFIG.weapon_blocking_cooldown); } livingEntity.clearActiveItem(); if (!this.getWorld().isClient()) { - livingEntity.getMainHandStack().damage(1, livingEntity, (p) -> p.sendToolBreakStatus(p.getActiveHand())); + livingEntity.getMainHandStack().damage(1, livingEntity, LivingEntity.getSlotForHand(livingEntity.getActiveHand())); } } } - @Inject(method = "createLivingAttributes", at = @At("RETURN"), require = 1, allow = 1, cancellable = true) - private static void addAttributes(final CallbackInfoReturnable info) { - if (!CompatInit.isReachEntityAttributesLoaded) { - info.getReturnValue().add(CompatInit.ATTACK_RANGE); - } - } - -} \ No newline at end of file +} diff --git a/src/main/java/net/medievalweapons/mixin/MedievalWeaponsMixinPlugin.java b/src/main/java/net/medievalweapons/mixin/MedievalWeaponsMixinPlugin.java index 32cd350..54c9b80 100644 --- a/src/main/java/net/medievalweapons/mixin/MedievalWeaponsMixinPlugin.java +++ b/src/main/java/net/medievalweapons/mixin/MedievalWeaponsMixinPlugin.java @@ -22,10 +22,10 @@ public String getRefMapperConfig() { @Override public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - if ((mixinClassName.contains("Big_Axe_ItemMixin") || mixinClassName.contains("Dagger_ItemMixin") || mixinClassName.contains("Francisca_ItemMixin") - || mixinClassName.contains("Healing_Staff_ItemMixin") || mixinClassName.contains("Javelin_ItemMixin") || mixinClassName.contains("Lance_ItemMixin") - || mixinClassName.contains("Long_Sword_ItemMixin") || mixinClassName.contains("Mace_ItemMixin") || mixinClassName.contains("Ninjato_ItemMixin") - || mixinClassName.contains("Rapier_ItemMixin") || mixinClassName.contains("Sickle_ItemMixin") || mixinClassName.contains("Small_Axe_ItemMixin")) + if ((mixinClassName.contains("BigAxeItemMixin") || mixinClassName.contains("DaggerItemMixin") || mixinClassName.contains("FranciscaItemMixin") + || mixinClassName.contains("HealingStaffItemMixin") || mixinClassName.contains("JavelinItemMixin") || mixinClassName.contains("LanceItemMixin") + || mixinClassName.contains("LongSwordItemMixin") || mixinClassName.contains("MaceItemMixin") || mixinClassName.contains("NinjatoItemMixin") + || mixinClassName.contains("RapierItemMixin") || mixinClassName.contains("SickleItemMixin") || mixinClassName.contains("SmallAxeItemMixin")) && !FabricLoader.getInstance().isModLoaded("betternether")) { return false; } diff --git a/src/main/java/net/medievalweapons/mixin/MobEntityMixin.java b/src/main/java/net/medievalweapons/mixin/MobEntityMixin.java index aa3c1b5..de1c9a0 100644 --- a/src/main/java/net/medievalweapons/mixin/MobEntityMixin.java +++ b/src/main/java/net/medievalweapons/mixin/MobEntityMixin.java @@ -2,7 +2,7 @@ import org.spongepowered.asm.mixin.Mixin; -import net.medievalweapons.item.Rapier_Item; +import net.medievalweapons.item.RapierItem; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.mob.MobEntity; @@ -17,7 +17,7 @@ public MobEntityMixin(EntityType entityType, World world @Override public void takeKnockback(double strength, double x, double z) { - if (this.getAttacker() == null || this.getAttacker().getMainHandStack().isEmpty() || !(this.getAttacker().getMainHandStack().getItem() instanceof Rapier_Item)) { + if (this.getAttacker() == null || this.getAttacker().getMainHandStack().isEmpty() || !(this.getAttacker().getMainHandStack().getItem() instanceof RapierItem)) { super.takeKnockback(strength, x, z); } } diff --git a/src/main/java/net/medievalweapons/mixin/PlayerEntityMixin.java b/src/main/java/net/medievalweapons/mixin/PlayerEntityMixin.java index 2600d9f..7105f6c 100644 --- a/src/main/java/net/medievalweapons/mixin/PlayerEntityMixin.java +++ b/src/main/java/net/medievalweapons/mixin/PlayerEntityMixin.java @@ -8,21 +8,16 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Constant; import net.medievalweapons.access.PlayerAccess; -import net.medievalweapons.init.CompatInit; import net.medievalweapons.init.TagInit; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Long_Sword_Item; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.LongSwordItem; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; -import net.minecraft.enchantment.SweepingEnchantment; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityGroup; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.EntityAttributes; @@ -54,11 +49,6 @@ public PlayerEntityMixin(World world, BlockPos pos, float yaw, GameProfile profi super(EntityType.PLAYER, world); } - @ModifyConstant(method = "attack(Lnet/minecraft/entity/Entity;)V", constant = @Constant(doubleValue = 9.0), require = 0) - private double getActualAttackRange(final double attackRange) { - return CompatInit.getSquaredAttackRange(this, attackRange); - } - @Inject(method = "Lnet/minecraft/entity/player/PlayerEntity;tick()V", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/player/PlayerEntity;lastAttackedTicks:I", ordinal = 0)) private void tickMixin(CallbackInfo info) { this.lastAttackedOffhandTicks++; @@ -74,8 +64,7 @@ private void offhandAttack(Entity target) { target.timeUntilRegen = 0; float f = (float) this.getAttributeValue(EntityAttributes.GENERIC_ATTACK_DAMAGE); - float g = target instanceof LivingEntity ? EnchantmentHelper.getAttackDamage(this.getOffHandStack(), ((LivingEntity) target).getGroup()) - : EnchantmentHelper.getAttackDamage(this.getOffHandStack(), EntityGroup.DEFAULT); + float g = EnchantmentHelper.getAttackDamage(this.getOffHandStack(), target.getType()); float h = this.getAttackCooldownProgressOffhand(0.5f); g *= h; this.resetLastAttackedOffhandTicks(); @@ -106,8 +95,8 @@ private void offhandAttack(Entity target) { boolean bl5 = false; int k = EnchantmentHelper.getLevel(Enchantments.FIRE_ASPECT, itemStack); - if (target instanceof LivingEntity) { - j = ((LivingEntity) target).getHealth(); + if (target instanceof LivingEntity livingEntity) { + j = livingEntity.getHealth(); if (k > 0 && !target.isOnFire()) { bl5 = true; target.setOnFireFor(1); @@ -117,8 +106,8 @@ private void offhandAttack(Entity target) { boolean bl6 = target.damage(target.getDamageSources().playerAttack((PlayerEntity) (Object) this), f); if (bl6) { if (i > 0) { - if (target instanceof LivingEntity) { - ((LivingEntity) target).takeKnockback((float) i * 0.5f, MathHelper.sin(this.getYaw() * ((float) Math.PI / 180)), -MathHelper.cos(this.getYaw() * ((float) Math.PI / 180))); + if (target instanceof LivingEntity livingEntity) { + livingEntity.takeKnockback((float) i * 0.5f, MathHelper.sin(this.getYaw() * ((float) Math.PI / 180)), -MathHelper.cos(this.getYaw() * ((float) Math.PI / 180))); } else { target.addVelocity(-MathHelper.sin(this.getYaw() * ((float) Math.PI / 180)) * (float) i * 0.5f, 0.1, MathHelper.cos(this.getYaw() * ((float) Math.PI / 180)) * (float) i * 0.5f); @@ -127,7 +116,7 @@ private void offhandAttack(Entity target) { this.setSprinting(false); } if (bl42) { - float l = 1.0f + SweepingEnchantment.getMultiplier(EnchantmentHelper.getLevel(Enchantments.SWEEPING, itemStack)) * f; + float l = 1.0f + EnchantmentHelper.getSweepingMultiplier(this) * f; List list = this.getWorld().getNonSpectatingEntities(LivingEntity.class, target.getBoundingBox().expand(1.0, 0.25, 1.0)); for (LivingEntity livingEntity : list) { if (livingEntity == this || livingEntity == target || this.isTeammate(livingEntity) || livingEntity instanceof ArmorStandEntity && ((ArmorStandEntity) livingEntity).isMarker() @@ -139,8 +128,8 @@ private void offhandAttack(Entity target) { this.getWorld().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0f, 1.0f); ((PlayerEntity) (Object) this).spawnSweepAttackParticles(); } - if (target instanceof ServerPlayerEntity && target.velocityModified) { - ((ServerPlayerEntity) target).networkHandler.sendPacket(new EntityVelocityUpdateS2CPacket(target)); + if (target instanceof ServerPlayerEntity serverPlayerEntity && target.velocityModified) { + serverPlayerEntity.networkHandler.sendPacket(new EntityVelocityUpdateS2CPacket(target)); target.velocityModified = false; target.setVelocity(vec3d); } @@ -159,30 +148,30 @@ private void offhandAttack(Entity target) { ((PlayerEntity) (Object) this).addEnchantedHitParticles(target); } this.onAttacking(target); - if (target instanceof LivingEntity) { - EnchantmentHelper.onUserDamaged((LivingEntity) target, this); + if (target instanceof LivingEntity livingEntity) { + EnchantmentHelper.onUserDamaged(livingEntity, this); } EnchantmentHelper.onTargetDamaged(this, target); ItemStack itemStack2 = this.getOffHandStack(); Entity entity = target; - if (target instanceof EnderDragonPart) { - entity = ((EnderDragonPart) target).owner; + if (target instanceof EnderDragonPart enderDragonPart) { + entity = enderDragonPart.owner; } - if (!this.getWorld().isClient() && !itemStack2.isEmpty() && entity instanceof LivingEntity) { - itemStack2.postHit((LivingEntity) entity, (PlayerEntity) (Object) this); + if (!this.getWorld().isClient() && !itemStack2.isEmpty() && entity instanceof LivingEntity livingEntity) { + itemStack2.postHit(livingEntity, (PlayerEntity) (Object) this); if (itemStack2.isEmpty()) { this.setStackInHand(Hand.OFF_HAND, ItemStack.EMPTY); } } - if (target instanceof LivingEntity) { - float m = j - ((LivingEntity) target).getHealth(); + if (target instanceof LivingEntity livingEntity) { + float m = j - livingEntity.getHealth(); ((PlayerEntity) (Object) this).increaseStat(Stats.DAMAGE_DEALT, Math.round(m * 10.0f)); if (k > 0) { target.setOnFireFor(k * 4); } - if (this.getWorld() instanceof ServerWorld && m > 2.0f) { + if (this.getWorld() instanceof ServerWorld serverWorld && m > 2.0f) { int n = (int) ((double) m * 0.5); - ((ServerWorld) this.getWorld()).spawnParticles(ParticleTypes.DAMAGE_INDICATOR, target.getX(), target.getBodyY(0.5), target.getZ(), n, 0.1, 0.0, 0.1, 0.2); + serverWorld.spawnParticles(ParticleTypes.DAMAGE_INDICATOR, target.getX(), target.getBodyY(0.5), target.getZ(), n, 0.1, 0.0, 0.1, 0.2); } target.timeUntilRegen = 0; } @@ -199,8 +188,8 @@ private void offhandAttack(Entity target) { @Override public boolean disablesShield() { ItemStack itemStack = this.getMainHandStack(); - return super.disablesShield() || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item - || itemStack.getItem() instanceof Big_Axe_Item; + return super.disablesShield() || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem + || itemStack.getItem() instanceof BigAxeItem; } @Shadow diff --git a/src/main/java/net/medievalweapons/mixin/client/BipedEntityModelMixin.java b/src/main/java/net/medievalweapons/mixin/client/BipedEntityModelMixin.java index 99ff575..d0b4f1c 100644 --- a/src/main/java/net/medievalweapons/mixin/client/BipedEntityModelMixin.java +++ b/src/main/java/net/medievalweapons/mixin/client/BipedEntityModelMixin.java @@ -10,8 +10,8 @@ import net.fabricmc.api.EnvType; import net.medievalweapons.init.CompatInit; import net.medievalweapons.init.TagInit; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Long_Sword_Item; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.LongSwordItem; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.entity.model.AnimalModel; import net.minecraft.client.render.entity.model.BipedEntityModel; @@ -34,7 +34,7 @@ public abstract class BipedEntityModelMixin extends Anim private void setAnglesMixin(T livingEntity, float f, float g, float h, float i, float j, CallbackInfo info) { if (!CompatInit.isBetterCombatLoaded && livingEntity.getOffHandStack().isEmpty() && !livingEntity.isSwimming() && !livingEntity.hasVehicle() && livingEntity.getMainHandStack().getItem() != null) { - if (livingEntity.getMainHandStack().isIn(TagInit.DOUBLE_HANDED_ITEMS) || livingEntity.getMainHandStack().getItem() instanceof Long_Sword_Item) { + if (livingEntity.getMainHandStack().isIn(TagInit.DOUBLE_HANDED_ITEMS) || livingEntity.getMainHandStack().getItem() instanceof LongSwordItem) { this.rightArm.pitch = -0.8727F + (MathHelper.cos(f * 0.6662F) * 2.0F * g * 0.5F / 15); this.rightArm.yaw = -0.5672F; this.rightArm.roll = 0.0F; @@ -58,7 +58,7 @@ private void setAnglesMixin(T livingEntity, float f, float g, float h, float i, this.leftArm.pitch = -1.17F; this.rightArm.roll = 0.7F; } - } else if (livingEntity.getMainHandStack().isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || livingEntity.getMainHandStack().getItem() instanceof Big_Axe_Item) { + } else if (livingEntity.getMainHandStack().isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || livingEntity.getMainHandStack().getItem() instanceof BigAxeItem) { this.rightArm.pitch = -0.5236F + (MathHelper.cos(f * 0.6662F) * 2.0F * g * 0.5F / 15); this.rightArm.yaw = 0.0F; this.rightArm.roll = 0.0F; diff --git a/src/main/java/net/medievalweapons/mixin/client/ClientLivingEntityMixin.java b/src/main/java/net/medievalweapons/mixin/client/ClientLivingEntityMixin.java index d6c5cff..6551080 100644 --- a/src/main/java/net/medievalweapons/mixin/client/ClientLivingEntityMixin.java +++ b/src/main/java/net/medievalweapons/mixin/client/ClientLivingEntityMixin.java @@ -10,8 +10,8 @@ import net.fabricmc.api.Environment; import net.medievalweapons.init.SoundInit; import net.medievalweapons.init.TagInit; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Long_Sword_Item; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.LongSwordItem; import net.minecraft.entity.LivingEntity; @Environment(EnvType.CLIENT) @@ -22,10 +22,10 @@ public class ClientLivingEntityMixin { private void handleStatusMixin(byte status, CallbackInfo info) { LivingEntity livingEntity = (LivingEntity) (Object) this; ItemStack itemStack = livingEntity.getMainHandStack(); - if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Big_Axe_Item) { + if (itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof BigAxeItem) { livingEntity.playSound(SoundInit.PARRYING_EVENT, 1.0F, 0.9F + livingEntity.getWorld().getRandom().nextFloat() * 0.2F); info.cancel(); - } else if (itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item) { + } else if (itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem) { livingEntity.playSound(SoundInit.SWORD_PARRYING_EVENT, 1.0F, 0.9F + livingEntity.getWorld().getRandom().nextFloat() * 0.2F); info.cancel(); } diff --git a/src/main/java/net/medievalweapons/mixin/client/DrawContextMixin.java b/src/main/java/net/medievalweapons/mixin/client/DrawContextMixin.java index 0d1c32b..89a3bae 100644 --- a/src/main/java/net/medievalweapons/mixin/client/DrawContextMixin.java +++ b/src/main/java/net/medievalweapons/mixin/client/DrawContextMixin.java @@ -8,16 +8,16 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Healing_Staff_Item; -import net.medievalweapons.item.Javelin_Item; -import net.medievalweapons.item.Lance_Item; -import net.medievalweapons.item.Long_Sword_Item; -import net.medievalweapons.item.Mace_Item; -import net.medievalweapons.item.Rapier_Item; -import net.medievalweapons.item.Sickle_Item; -import net.medievalweapons.item.Small_Axe_Item; -import net.medievalweapons.item.Thalleous_Sword_Item; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.HealingStaffItem; +import net.medievalweapons.item.JavelinItem; +import net.medievalweapons.item.LanceItem; +import net.medievalweapons.item.LongSwordItem; +import net.medievalweapons.item.MaceItem; +import net.medievalweapons.item.RapierItem; +import net.medievalweapons.item.SickleItem; +import net.medievalweapons.item.SmallAxeItem; +import net.medievalweapons.item.ThalleousSwordItem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.model.BakedModel; @@ -35,9 +35,9 @@ public class DrawContextMixin { @ModifyVariable(method = "Lnet/minecraft/client/gui/DrawContext;drawItem(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/world/World;Lnet/minecraft/item/ItemStack;IIII)V", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/render/item/ItemRenderer;getModel(Lnet/minecraft/item/ItemStack;Lnet/minecraft/world/World;Lnet/minecraft/entity/LivingEntity;I)Lnet/minecraft/client/render/model/BakedModel;"), ordinal = 0) private BakedModel drawItemMixin(BakedModel original, @Nullable LivingEntity entity, @Nullable World world, ItemStack stack, int x, int y, int seed, int z) { - if (stack.getItem() instanceof Long_Sword_Item || stack.getItem() instanceof Small_Axe_Item || stack.getItem() instanceof Big_Axe_Item || stack.getItem() instanceof Lance_Item - || stack.getItem() instanceof Healing_Staff_Item || stack.getItem() instanceof Javelin_Item || stack.getItem() instanceof Mace_Item || stack.getItem() instanceof Sickle_Item - || stack.getItem() instanceof Rapier_Item || stack.getItem() instanceof Thalleous_Sword_Item) { + if (stack.getItem() instanceof LongSwordItem || stack.getItem() instanceof SmallAxeItem || stack.getItem() instanceof BigAxeItem || stack.getItem() instanceof LanceItem + || stack.getItem() instanceof HealingStaffItem || stack.getItem() instanceof JavelinItem || stack.getItem() instanceof MaceItem || stack.getItem() instanceof SickleItem + || stack.getItem() instanceof RapierItem || stack.getItem() instanceof ThalleousSwordItem) { return this.client.getItemRenderer().getModel(stack, world, entity, 0); } return original; diff --git a/src/main/java/net/medievalweapons/mixin/client/GameRendererMixin.java b/src/main/java/net/medievalweapons/mixin/client/GameRendererMixin.java deleted file mode 100644 index 62b99ba..0000000 --- a/src/main/java/net/medievalweapons/mixin/client/GameRendererMixin.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.medievalweapons.mixin.client; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.Constant; -import org.spongepowered.asm.mixin.injection.ModifyConstant; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.medievalweapons.init.CompatInit; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.GameRenderer; - -@Environment(EnvType.CLIENT) -@Mixin(GameRenderer.class) -public class GameRendererMixin { - - @Shadow - @Mutable - @Final - MinecraftClient client; - - @ModifyConstant(method = "updateTargetedEntity", constant = @Constant(doubleValue = 3.0)) - private double getActualAttackRange0(final double attackRange) { - if (this.client.player != null) { - return CompatInit.getAttackRange(this.client.player, attackRange); - } - return attackRange; - } - - @ModifyConstant(method = "updateTargetedEntity", constant = @Constant(doubleValue = 9.0)) - private double getActualAttackRange1(final double attackRange) { - if (this.client.player != null) { - return CompatInit.getSquaredAttackRange(this.client.player, attackRange); - } - return attackRange; - } -} diff --git a/src/main/java/net/medievalweapons/mixin/client/InGameHudMixin.java b/src/main/java/net/medievalweapons/mixin/client/InGameHudMixin.java index 90bd73d..29578ea 100644 --- a/src/main/java/net/medievalweapons/mixin/client/InGameHudMixin.java +++ b/src/main/java/net/medievalweapons/mixin/client/InGameHudMixin.java @@ -12,10 +12,13 @@ import net.fabricmc.api.Environment; import net.medievalweapons.access.PlayerAccess; import net.medievalweapons.init.CompatInit; +import net.medievalweapons.item.NinjatoItem; import net.fabricmc.api.EnvType; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.Arm; import net.minecraft.util.Identifier; @@ -26,47 +29,75 @@ public abstract class InGameHudMixin { @Shadow @Final @Mutable - private final MinecraftClient client; + private MinecraftClient client; @Shadow - private int scaledWidth; + @Final + @Mutable + private static Identifier CROSSHAIR_ATTACK_INDICATOR_FULL_TEXTURE; @Shadow - private int scaledHeight; + @Final + @Mutable + private static Identifier CROSSHAIR_ATTACK_INDICATOR_BACKGROUND_TEXTURE; @Shadow + @Final @Mutable + private static Identifier CROSSHAIR_ATTACK_INDICATOR_PROGRESS_TEXTURE; + @Shadow @Final - private static Identifier ICONS; - - public InGameHudMixin(MinecraftClient client) { - this.client = client; - } + @Mutable + private static Identifier HOTBAR_ATTACK_INDICATOR_BACKGROUND_TEXTURE; + @Shadow + @Final + @Mutable + private static Identifier HOTBAR_ATTACK_INDICATOR_PROGRESS_TEXTURE; @Inject(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getAttackCooldownProgress(F)F", shift = Shift.AFTER)) - private void renderCrosshairMixin(DrawContext context, CallbackInfo info) { + private void renderCrosshairMixin(DrawContext context, float tickDelta, CallbackInfo info) { if (!CompatInit.isBetterCombatLoaded) { - float o = ((PlayerAccess) this.client.player).getAttackCooldownProgressOffhand(1.0F); - if (o < 1.0F) { - int u = (int) (o * 17.0F); - context.drawTexture(ICONS, this.scaledWidth / 2 - 8, this.scaledHeight / 2 - 7 + 16 + 8, 36, 94, 16, 4); - context.drawTexture(ICONS, this.scaledWidth / 2 - 8, this.scaledHeight / 2 - 7 + 16 + 8, 52, 94, u, 4); + if (showOffhandAttackCooldown(this.client.player)) { + int p = context.getScaledWindowHeight() / 2 - 7 + 16 + 8; + int t = context.getScaledWindowWidth() / 2 - 8; + float o = ((PlayerAccess) this.client.player).getAttackCooldownProgressOffhand(1.0F); + boolean bl = false; + if (this.client.targetedEntity != null && this.client.targetedEntity instanceof LivingEntity && o >= 1.0f) { + bl = this.client.player.getAttackCooldownProgressPerTick() > 5.0f; + bl &= this.client.targetedEntity.isAlive(); + } + if (bl) { + context.drawGuiTexture(CROSSHAIR_ATTACK_INDICATOR_FULL_TEXTURE, t, p, 16, 16); + } else if (o < 1.0f) { + int l = (int) (o * 17.0f); + context.drawGuiTexture(CROSSHAIR_ATTACK_INDICATOR_BACKGROUND_TEXTURE, t, p, 16, 4); + context.drawGuiTexture(CROSSHAIR_ATTACK_INDICATOR_PROGRESS_TEXTURE, 16, 4, 0, 0, t, p, l, 4); + } } } } @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getAttackCooldownProgress(F)F", shift = Shift.AFTER)) - private void renderHotbar(float tickDelta, DrawContext context, CallbackInfo info) { + private void renderHotbarMixin(DrawContext context, float tickDelta, CallbackInfo info) { if (!CompatInit.isBetterCombatLoaded) { - float o = ((PlayerAccess) this.client.player).getAttackCooldownProgressOffhand(1.0F); - if (o < 1.0F) { - Arm arm = this.client.player.getMainArm().getOpposite(); - int r = (this.scaledWidth / 2) + 91 + 6; - if (arm == Arm.RIGHT) { - r = (this.scaledWidth / 2) - 91 - 22; + if (showOffhandAttackCooldown(this.client.player)) { + float o = ((PlayerAccess) this.client.player).getAttackCooldownProgressOffhand(1.0F); + if (o < 1.0F) { + Arm arm = this.client.player.getMainArm().getOpposite(); + int r = (context.getScaledWindowWidth() / 2) + 91 + 6; + if (arm == Arm.RIGHT) { + r = (context.getScaledWindowWidth() / 2) - 91 - 22; + } + int s = (int) (o * 19.0F); + context.drawGuiTexture(HOTBAR_ATTACK_INDICATOR_BACKGROUND_TEXTURE, r + 18, context.getScaledWindowHeight() - 20, 94, 18, 18); + context.drawGuiTexture(HOTBAR_ATTACK_INDICATOR_PROGRESS_TEXTURE, r + 18, context.getScaledWindowHeight() - 20 + 18 - s, 112 - s, 18, s); } - int s = (int) (o * 19.0F); - context.drawTexture(ICONS, r + 18, this.scaledHeight - 20, 0, 94, 18, 18); - context.drawTexture(ICONS, r + 18, this.scaledHeight - 20 + 18 - s, 18, 112 - s, 18, s); } } } + private boolean showOffhandAttackCooldown(PlayerEntity player) { + if (player.getMainHandStack().getItem() instanceof NinjatoItem && player.getOffHandStack().getItem() instanceof NinjatoItem) { + return true; + } + return false; + } + } diff --git a/src/main/java/net/medievalweapons/mixin/client/ItemRendererMixin.java b/src/main/java/net/medievalweapons/mixin/client/ItemRendererMixin.java index 5a2f5eb..ecbf760 100644 --- a/src/main/java/net/medievalweapons/mixin/client/ItemRendererMixin.java +++ b/src/main/java/net/medievalweapons/mixin/client/ItemRendererMixin.java @@ -3,9 +3,9 @@ import net.fabricmc.api.Environment; import net.fabricmc.api.EnvType; import net.medievalweapons.init.CompatInit; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Long_Sword_Item; -import net.medievalweapons.item.Thalleous_Sword_Item; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.LongSwordItem; +import net.medievalweapons.item.ThalleousSwordItem; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.model.json.ModelTransformationMode; @@ -29,7 +29,7 @@ public class ItemRendererMixin { private void renderItemMixin(@Nullable LivingEntity entity, ItemStack stack, ModelTransformationMode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, @Nullable World world, int light, int overlay, int seed, CallbackInfo info) { if (entity != null && !CompatInit.isBetterCombatLoaded && (renderMode == ModelTransformationMode.FIRST_PERSON_LEFT_HAND || renderMode == ModelTransformationMode.FIRST_PERSON_RIGHT_HAND) - && entity.isBlocking() && (stack.getItem() instanceof Long_Sword_Item || stack.getItem() instanceof Big_Axe_Item || stack.getItem() instanceof Thalleous_Sword_Item)) { + && entity.isBlocking() && (stack.getItem() instanceof LongSwordItem || stack.getItem() instanceof BigAxeItem || stack.getItem() instanceof ThalleousSwordItem)) { matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(leftHanded ? -20F : 20F)); } } diff --git a/src/main/java/net/medievalweapons/mixin/client/MinecraftClientMixin.java b/src/main/java/net/medievalweapons/mixin/client/MinecraftClientMixin.java index 673f269..6f1405e 100644 --- a/src/main/java/net/medievalweapons/mixin/client/MinecraftClientMixin.java +++ b/src/main/java/net/medievalweapons/mixin/client/MinecraftClientMixin.java @@ -17,15 +17,16 @@ import org.spongepowered.asm.mixin.injection.At; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.api.EnvType; import net.medievalweapons.access.PlayerAccess; import net.medievalweapons.init.CompatInit; import net.medievalweapons.init.EffectInit; import net.medievalweapons.init.TagInit; -import net.medievalweapons.item.Big_Axe_Item; -import net.medievalweapons.item.Long_Sword_Item; -import net.medievalweapons.item.Ninjato_Item; -import net.medievalweapons.network.PlayerPacket; +import net.medievalweapons.item.BigAxeItem; +import net.medievalweapons.item.LongSwordItem; +import net.medievalweapons.item.NinjatoItem; +import net.medievalweapons.network.packet.AttackPacket; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerInteractionManager; @@ -63,19 +64,19 @@ private void doAttackMixin(CallbackInfoReturnable info) { if (!CompatInit.isBetterCombatLoaded) { ItemStack itemStack = player.getMainHandStack(); - if ((itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item - || itemStack.getItem() instanceof Big_Axe_Item) && (!player.getOffHandStack().isEmpty() || player.isSwimming() || player.hasVehicle())) + if ((itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem + || itemStack.getItem() instanceof BigAxeItem) && (!player.getOffHandStack().isEmpty() || player.isSwimming() || player.hasVehicle())) info.setReturnValue(false); - if (this.offhandAttackCooldown == 0 && this.attackCooldown < 5 && !this.player.isRiding() && itemStack.getItem() instanceof Ninjato_Item - && player.getOffHandStack().getItem() instanceof Ninjato_Item) { + if (this.offhandAttackCooldown == 0 && this.attackCooldown < 5 && !this.player.isRiding() && itemStack.getItem() instanceof NinjatoItem + && player.getOffHandStack().getItem() instanceof NinjatoItem) { if (this.attackedOffhand) { this.attackedOffhand = false; switch (this.crosshairTarget.getType()) { case ENTITY: { - MinecraftClient.getInstance().getNetworkHandler().sendPacket(PlayerPacket.attackPacket(((EntityHitResult) this.crosshairTarget).getEntity())); + ClientPlayNetworking.send(new AttackPacket(((EntityHitResult) this.crosshairTarget).getEntity().getId())); if (!this.player.isSpectator()) { ((PlayerAccess) this.player).doOffhandAttack(((EntityHitResult) this.crosshairTarget).getEntity()); ((PlayerAccess) this.player).resetLastAttackedOffhandTicks(); @@ -113,8 +114,8 @@ private void doAttackMixin(CallbackInfoReturnable info) { private void doItemUseMixin(CallbackInfo info) { if (!CompatInit.isBetterCombatLoaded && player != null) { ItemStack itemStack = player.getMainHandStack(); - if ((itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item - || itemStack.getItem() instanceof Big_Axe_Item) && (!player.getOffHandStack().isEmpty() || player.isSwimming() || player.hasVehicle())) + if ((itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem + || itemStack.getItem() instanceof BigAxeItem) && (!player.getOffHandStack().isEmpty() || player.isSwimming() || player.hasVehicle())) info.cancel(); } } @@ -123,8 +124,8 @@ private void doItemUseMixin(CallbackInfo info) { private void handleBlockBreakingMixin(boolean bl, CallbackInfo info) { if (!CompatInit.isBetterCombatLoaded && player != null) { ItemStack itemStack = player.getMainHandStack(); - if ((itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof Long_Sword_Item - || itemStack.getItem() instanceof Big_Axe_Item) && (!player.getOffHandStack().isEmpty() || player.isSwimming() || player.hasVehicle())) + if ((itemStack.isIn(TagInit.DOUBLE_HANDED_ITEMS) || itemStack.isIn(TagInit.ACCROSS_DOUBLE_HANDED_ITEMS) || itemStack.getItem() instanceof LongSwordItem + || itemStack.getItem() instanceof BigAxeItem) && (!player.getOffHandStack().isEmpty() || player.isSwimming() || player.hasVehicle())) info.cancel(); } } diff --git a/src/main/java/net/medievalweapons/mixin/compat/BigAxeItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/BigAxeItemMixin.java new file mode 100644 index 0000000..5544be8 --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/BigAxeItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.BigAxeItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(BigAxeItem.class) +public abstract class BigAxeItemMixin extends SwordItem implements InitialStackStateProvider { + + public BigAxeItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(itemStack, defaultEnchants); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Big_Axe_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Big_Axe_ItemMixin.java deleted file mode 100644 index c7ee948..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Big_Axe_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Big_Axe_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Big_Axe_Item.class) -public abstract class Big_Axe_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Big_Axe_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/DaggerItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/DaggerItemMixin.java new file mode 100644 index 0000000..8e818f9 --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/DaggerItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.DaggerItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(DaggerItem.class) +public abstract class DaggerItemMixin extends SwordItem implements InitialStackStateProvider { + + public DaggerItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Dagger_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Dagger_ItemMixin.java deleted file mode 100644 index 91b8ebc..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Dagger_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Dagger_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Dagger_Item.class) -public abstract class Dagger_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Dagger_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/FranciscaItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/FranciscaItemMixin.java new file mode 100644 index 0000000..27c9aa6 --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/FranciscaItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.FranciscaItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(FranciscaItem.class) +public abstract class FranciscaItemMixin extends SwordItem implements InitialStackStateProvider { + + public FranciscaItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Francisca_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Francisca_ItemMixin.java deleted file mode 100644 index f07433a..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Francisca_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Francisca_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Francisca_Item.class) -public abstract class Francisca_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Francisca_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/HealingStaffItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/HealingStaffItemMixin.java new file mode 100644 index 0000000..14aae5c --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/HealingStaffItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.HealingStaffItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(HealingStaffItem.class) +public abstract class HealingStaffItemMixin extends SwordItem implements InitialStackStateProvider { + + public HealingStaffItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Healing_Staff_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Healing_Staff_ItemMixin.java deleted file mode 100644 index 1f9c084..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Healing_Staff_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Healing_Staff_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Healing_Staff_Item.class) -public abstract class Healing_Staff_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Healing_Staff_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/JavelinItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/JavelinItemMixin.java new file mode 100644 index 0000000..68368bb --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/JavelinItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.JavelinItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(JavelinItem.class) +public abstract class JavelinItemMixin extends SwordItem implements InitialStackStateProvider { + + public JavelinItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Javelin_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Javelin_ItemMixin.java deleted file mode 100644 index 65642c7..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Javelin_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Javelin_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Javelin_Item.class) -public abstract class Javelin_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Javelin_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/LanceItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/LanceItemMixin.java new file mode 100644 index 0000000..8ed7187 --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/LanceItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.LanceItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(LanceItem.class) +public abstract class LanceItemMixin extends SwordItem implements InitialStackStateProvider { + + public LanceItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Lance_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Lance_ItemMixin.java deleted file mode 100644 index 6fbbd73..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Lance_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Lance_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Lance_Item.class) -public abstract class Lance_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Lance_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/LongSwordItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/LongSwordItemMixin.java new file mode 100644 index 0000000..009382a --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/LongSwordItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.LongSwordItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(LongSwordItem.class) +public abstract class LongSwordItemMixin extends SwordItem implements InitialStackStateProvider { + + public LongSwordItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Long_Sword_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Long_Sword_ItemMixin.java deleted file mode 100644 index a4417a9..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Long_Sword_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Long_Sword_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Long_Sword_Item.class) -public abstract class Long_Sword_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Long_Sword_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/MaceItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/MaceItemMixin.java new file mode 100644 index 0000000..ce2a688 --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/MaceItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.MaceItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(MaceItem.class) +public abstract class MaceItemMixin extends SwordItem implements InitialStackStateProvider { + + public MaceItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Mace_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Mace_ItemMixin.java deleted file mode 100644 index 30c5447..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Mace_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Mace_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Mace_Item.class) -public abstract class Mace_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Mace_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/NinjatoItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/NinjatoItemMixin.java new file mode 100644 index 0000000..67f2be3 --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/NinjatoItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.NinjatoItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(NinjatoItem.class) +public abstract class NinjatoItemMixin extends SwordItem implements InitialStackStateProvider { + + public NinjatoItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Ninjato_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Ninjato_ItemMixin.java deleted file mode 100644 index ee3d42e..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Ninjato_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Ninjato_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Ninjato_Item.class) -public abstract class Ninjato_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Ninjato_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/RapierItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/RapierItemMixin.java new file mode 100644 index 0000000..adfb32a --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/RapierItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.RapierItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(RapierItem.class) +public abstract class RapierItemMixin extends SwordItem implements InitialStackStateProvider { + + public RapierItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Rapier_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Rapier_ItemMixin.java deleted file mode 100644 index 327b83f..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Rapier_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Rapier_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Rapier_Item.class) -public abstract class Rapier_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Rapier_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/ServerPlayNetworkHandlerMixin.java b/src/main/java/net/medievalweapons/mixin/compat/ServerPlayNetworkHandlerMixin.java deleted file mode 100644 index f408710..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/ServerPlayNetworkHandlerMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.medievalweapons.init.CompatInit; -import net.minecraft.entity.Entity; -import net.minecraft.server.network.ServerPlayNetworkHandler; - -@Mixin(targets = "net/minecraft/server/network/ServerPlayNetworkHandler$1") -public class ServerPlayNetworkHandlerMixin { - - @Shadow - @Mutable - @Final - ServerPlayNetworkHandler field_28963; - - @Shadow - @Mutable - @Final - Entity field_28962; - - @Inject(method = "attack()V", at = @At("HEAD"), require = 1, allow = 1, cancellable = true) - private void ensureWithinAttackRange(final CallbackInfo info) { - if (!CompatInit.isReachEntityAttributesLoaded) { - if (!CompatInit.isWithinAttackRange(this.field_28963.player, this.field_28962)) { - info.cancel(); - } - } - } -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/SickleItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/SickleItemMixin.java new file mode 100644 index 0000000..5c59559 --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/SickleItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.SickleItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(SickleItem.class) +public abstract class SickleItemMixin extends SwordItem implements InitialStackStateProvider { + + public SickleItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Sickle_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Sickle_ItemMixin.java deleted file mode 100644 index d361915..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Sickle_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Sickle_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Sickle_Item.class) -public abstract class Sickle_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Sickle_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/mixin/compat/SmallAxeItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/SmallAxeItemMixin.java new file mode 100644 index 0000000..3c0be5a --- /dev/null +++ b/src/main/java/net/medievalweapons/mixin/compat/SmallAxeItemMixin.java @@ -0,0 +1,32 @@ +package net.medievalweapons.mixin.compat; + +import java.util.Map; + +import org.betterx.betternether.interfaces.InitialStackStateProvider; +import org.betterx.betternether.items.materials.BNToolMaterial; +import org.betterx.betternether.registry.NetherEnchantments; +import org.spongepowered.asm.mixin.Mixin; + +import net.medievalweapons.item.SmallAxeItem; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolMaterial; + +@Mixin(SmallAxeItem.class) +public abstract class SmallAxeItemMixin extends SwordItem implements InitialStackStateProvider { + + public SmallAxeItemMixin(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } + + // @Override + // public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { + // if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { + // defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); + // EnchantmentHelper.set(defaultEnchants, itemStack); + // } + // } + +} diff --git a/src/main/java/net/medievalweapons/mixin/compat/Small_Axe_ItemMixin.java b/src/main/java/net/medievalweapons/mixin/compat/Small_Axe_ItemMixin.java deleted file mode 100644 index 60ce7e6..0000000 --- a/src/main/java/net/medievalweapons/mixin/compat/Small_Axe_ItemMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.medievalweapons.mixin.compat; - -import java.util.Map; - -import org.betterx.betternether.interfaces.InitialStackStateProvider; -import org.betterx.betternether.items.materials.BNToolMaterial; -import org.betterx.betternether.registry.NetherEnchantments; -import org.spongepowered.asm.mixin.Mixin; - -import net.medievalweapons.item.Small_Axe_Item; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterial; - -@Mixin(Small_Axe_Item.class) -public abstract class Small_Axe_ItemMixin extends SwordItem implements InitialStackStateProvider { - - public Small_Axe_ItemMixin(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); - } - - @Override - public void putEnchantments(ItemStack itemStack, Map defaultEnchants) { - if (getMaterial() == BNToolMaterial.FLAMING_RUBY) { - defaultEnchants.put(NetherEnchantments.RUBY_FIRE, 1); - EnchantmentHelper.set(defaultEnchants, itemStack); - } - } - -} diff --git a/src/main/java/net/medievalweapons/network/MedievalClientPacket.java b/src/main/java/net/medievalweapons/network/MedievalClientPacket.java index dc3c41d..31ab828 100644 --- a/src/main/java/net/medievalweapons/network/MedievalClientPacket.java +++ b/src/main/java/net/medievalweapons/network/MedievalClientPacket.java @@ -1,2 +1,11 @@ -package net.medievalweapons.network;public class MedievalClientPacket { +package net.medievalweapons.network; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +@Environment(EnvType.CLIENT) +public class MedievalClientPacket { + + public static void init() { + } } diff --git a/src/main/java/net/medievalweapons/network/MedievalServerPacket.java b/src/main/java/net/medievalweapons/network/MedievalServerPacket.java index 9102080..1a14c1d 100644 --- a/src/main/java/net/medievalweapons/network/MedievalServerPacket.java +++ b/src/main/java/net/medievalweapons/network/MedievalServerPacket.java @@ -1,5 +1,6 @@ package net.medievalweapons.network; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.medievalweapons.access.PlayerAccess; import net.medievalweapons.network.packet.AttackPacket; @@ -7,6 +8,7 @@ public class MedievalServerPacket { public static void init() { + PayloadTypeRegistry.playC2S().register(AttackPacket.PACKET_ID, AttackPacket.PACKET_CODEC); ServerPlayNetworking.registerGlobalReceiver(AttackPacket.PACKET_ID, (payload, context) -> { int entityId = payload.entityId(); context.player().server.execute(() -> { diff --git a/src/main/java/net/medievalweapons/network/PlayerPacket.java b/src/main/java/net/medievalweapons/network/PlayerPacket.java deleted file mode 100644 index f3383b6..0000000 --- a/src/main/java/net/medievalweapons/network/PlayerPacket.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.medievalweapons.network; - -import io.netty.buffer.Unpooled; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; -import net.medievalweapons.access.PlayerAccess; -import net.minecraft.entity.Entity; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.packet.Packet; -import net.minecraft.util.Identifier; - -public class PlayerPacket { - - public static final Identifier DUAL_PACKET = new Identifier("medievalweapons", "dual_weapon"); - - public static Packet attackPacket(Entity entity) { - PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer()); - buf.writeInt(entity.getId()); - return ClientPlayNetworking.createC2SPacket(DUAL_PACKET, buf); - } - - public static void init() { - ServerPlayNetworking.registerGlobalReceiver(DUAL_PACKET, (server, player, handler, buffer, sender) -> { - int entityId = buffer.readInt(); - server.execute(() -> { - player.updateLastActionTime(); - if (player.getWorld().getEntityById(entityId) != null) - ((PlayerAccess) player).doOffhandAttack(player.getWorld().getEntityById(entityId)); - }); - - }); - - } -} diff --git a/src/main/resources/assets/medievalweapons/lang/en_us.json b/src/main/resources/assets/medievalweapons/lang/en_us.json index e66651f..2d5adf8 100644 --- a/src/main/resources/assets/medievalweapons/lang/en_us.json +++ b/src/main/resources/assets/medievalweapons/lang/en_us.json @@ -348,6 +348,7 @@ "text.autoconfig.medievalweapons.option.weapon_blocking_cooldown": "Weapon Blocking Cooldown", "text.autoconfig.medievalweapons.option.old_healing_staff_behavior": "Old Healing Staff Behavior", "text.autoconfig.medievalweapons.option.healing_staff_owner_healing": "Healing Staff Owner Healing", + "text.autoconfig.medievalweapons.option.sickle_head_drop_chance": "Sickle Head Drop Chance", "death.attack.javelin": "%1$s got impaled by %2$s", "death.attack.francisca": "%1$s was killed by %2$s with a francisca", diff --git a/src/main/resources/data/medievalweapons/recipes/long_bow.json b/src/main/resources/data/medievalweapons/recipes/long_bow.json index 81ccc9b..397c040 100644 --- a/src/main/resources/data/medievalweapons/recipes/long_bow.json +++ b/src/main/resources/data/medievalweapons/recipes/long_bow.json @@ -14,7 +14,7 @@ } }, "result": { - "item": "medievalweapons:long_bow", + "id": "medievalweapons:long_bow", "count": 1 } } \ No newline at end of file diff --git a/src/main/resources/data/medievalweapons/recipes/recurve_bow.json b/src/main/resources/data/medievalweapons/recipes/recurve_bow.json index dba40ab..6c09d58 100644 --- a/src/main/resources/data/medievalweapons/recipes/recurve_bow.json +++ b/src/main/resources/data/medievalweapons/recipes/recurve_bow.json @@ -14,7 +14,7 @@ } }, "result": { - "item": "medievalweapons:recurve_bow", + "id": "medievalweapons:recurve_bow", "count": 1 } } \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/swords.json b/src/main/resources/data/minecraft/tags/items/swords.json index 66392e5..3a59548 100644 --- a/src/main/resources/data/minecraft/tags/items/swords.json +++ b/src/main/resources/data/minecraft/tags/items/swords.json @@ -1,82 +1,78 @@ { + "replace": false, "values": [ - { - "replace": false, - "values": [ - "medievalweapons:wooden_small_axe", - "medievalweapons:stone_small_axe", - "medievalweapons:iron_small_axe", - "medievalweapons:golden_small_axe", - "medievalweapons:diamond_small_axe", - "medievalweapons:netherite_small_axe", - "medievalweapons:wooden_long_sword", - "medievalweapons:stone_long_sword", - "medievalweapons:iron_long_sword", - "medievalweapons:golden_long_sword", - "medievalweapons:diamond_long_sword", - "medievalweapons:netherite_long_sword", - "medievalweapons:wooden_dagger", - "medievalweapons:stone_dagger", - "medievalweapons:iron_dagger", - "medievalweapons:golden_dagger", - "medievalweapons:diamond_dagger", - "medievalweapons:netherite_dagger", - "medievalweapons:wooden_francisca", - "medievalweapons:stone_francisca", - "medievalweapons:iron_francisca", - "medievalweapons:golden_francisca", - "medievalweapons:diamond_francisca", - "medievalweapons:netherite_francisca", - "medievalweapons:wooden_big_axe", - "medievalweapons:stone_big_axe", - "medievalweapons:iron_big_axe", - "medievalweapons:golden_big_axe", - "medievalweapons:diamond_big_axe", - "medievalweapons:netherite_big_axe", - "medievalweapons:wooden_javelin", - "medievalweapons:stone_javelin", - "medievalweapons:iron_javelin", - "medievalweapons:golden_javelin", - "medievalweapons:diamond_javelin", - "medievalweapons:netherite_javelin", - "medievalweapons:wooden_lance", - "medievalweapons:stone_lance", - "medievalweapons:iron_lance", - "medievalweapons:golden_lance", - "medievalweapons:diamond_lance", - "medievalweapons:netherite_lance", - "medievalweapons:wooden_healing_staff", - "medievalweapons:stone_healing_staff", - "medievalweapons:iron_healing_staff", - "medievalweapons:golden_healing_staff", - "medievalweapons:diamond_healing_staff", - "medievalweapons:netherite_healing_staff", - "medievalweapons:wooden_mace", - "medievalweapons:stone_mace", - "medievalweapons:iron_mace", - "medievalweapons:golden_mace", - "medievalweapons:diamond_mace", - "medievalweapons:netherite_mace", - "medievalweapons:thalleous_sword", - "medievalweapons:wooden_ninjato", - "medievalweapons:stone_ninjato", - "medievalweapons:iron_ninjato", - "medievalweapons:golden_ninjato", - "medievalweapons:diamond_ninjato", - "medievalweapons:netherite_ninjato", - "medievalweapons:wooden_sickle", - "medievalweapons:stone_sickle", - "medievalweapons:iron_sickle", - "medievalweapons:golden_sickle", - "medievalweapons:diamond_sickle", - "medievalweapons:netherite_sickle", - "medievalweapons:wooden_rapier", - "medievalweapons:stone_rapier", - "medievalweapons:iron_rapier", - "medievalweapons:golden_rapier", - "medievalweapons:diamond_rapier", - "medievalweapons:netherite_rapier" - ] - } + "medievalweapons:wooden_small_axe", + "medievalweapons:stone_small_axe", + "medievalweapons:iron_small_axe", + "medievalweapons:golden_small_axe", + "medievalweapons:diamond_small_axe", + "medievalweapons:netherite_small_axe", + "medievalweapons:wooden_long_sword", + "medievalweapons:stone_long_sword", + "medievalweapons:iron_long_sword", + "medievalweapons:golden_long_sword", + "medievalweapons:diamond_long_sword", + "medievalweapons:netherite_long_sword", + "medievalweapons:wooden_dagger", + "medievalweapons:stone_dagger", + "medievalweapons:iron_dagger", + "medievalweapons:golden_dagger", + "medievalweapons:diamond_dagger", + "medievalweapons:netherite_dagger", + "medievalweapons:wooden_francisca", + "medievalweapons:stone_francisca", + "medievalweapons:iron_francisca", + "medievalweapons:golden_francisca", + "medievalweapons:diamond_francisca", + "medievalweapons:netherite_francisca", + "medievalweapons:wooden_big_axe", + "medievalweapons:stone_big_axe", + "medievalweapons:iron_big_axe", + "medievalweapons:golden_big_axe", + "medievalweapons:diamond_big_axe", + "medievalweapons:netherite_big_axe", + "medievalweapons:wooden_javelin", + "medievalweapons:stone_javelin", + "medievalweapons:iron_javelin", + "medievalweapons:golden_javelin", + "medievalweapons:diamond_javelin", + "medievalweapons:netherite_javelin", + "medievalweapons:wooden_lance", + "medievalweapons:stone_lance", + "medievalweapons:iron_lance", + "medievalweapons:golden_lance", + "medievalweapons:diamond_lance", + "medievalweapons:netherite_lance", + "medievalweapons:wooden_healing_staff", + "medievalweapons:stone_healing_staff", + "medievalweapons:iron_healing_staff", + "medievalweapons:golden_healing_staff", + "medievalweapons:diamond_healing_staff", + "medievalweapons:netherite_healing_staff", + "medievalweapons:wooden_mace", + "medievalweapons:stone_mace", + "medievalweapons:iron_mace", + "medievalweapons:golden_mace", + "medievalweapons:diamond_mace", + "medievalweapons:netherite_mace", + "medievalweapons:thalleous_sword", + "medievalweapons:wooden_ninjato", + "medievalweapons:stone_ninjato", + "medievalweapons:iron_ninjato", + "medievalweapons:golden_ninjato", + "medievalweapons:diamond_ninjato", + "medievalweapons:netherite_ninjato", + "medievalweapons:wooden_sickle", + "medievalweapons:stone_sickle", + "medievalweapons:iron_sickle", + "medievalweapons:golden_sickle", + "medievalweapons:diamond_sickle", + "medievalweapons:netherite_sickle", + "medievalweapons:wooden_rapier", + "medievalweapons:stone_rapier", + "medievalweapons:iron_rapier", + "medievalweapons:golden_rapier", + "medievalweapons:diamond_rapier", + "medievalweapons:netherite_rapier" ] } \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_big_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_big_axe.json deleted file mode 100644 index b8c4a69..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_big_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_big_axe", - "result": "minecraft:diamond", - "count": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_dagger.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_dagger.json deleted file mode 100644 index 44acf26..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_dagger.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_dagger", - "result": "minecraft:diamond", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_francisca.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_francisca.json deleted file mode 100644 index 19864b3..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_francisca.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_francisca", - "result": "minecraft:diamond", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_healing_staff.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_healing_staff.json deleted file mode 100644 index 63176b6..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_healing_staff.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_healing_staff", - "result": "minecraft:diamond", - "count": 2 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_javelin.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_javelin.json deleted file mode 100644 index e28d8a0..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_javelin.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_javelin", - "result": "minecraft:diamond", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_lance.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_lance.json deleted file mode 100644 index 893fba5..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_lance.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_lance", - "result": "minecraft:diamond", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_long_sword.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_long_sword.json deleted file mode 100644 index 36527ae..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_long_sword.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_long_sword", - "result": "minecraft:diamond", - "count": 4 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_mace.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_mace.json deleted file mode 100644 index 9b4e53e..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_mace.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_mace", - "result": "minecraft:diamond", - "count": 4 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/diamond_small_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/diamond_small_axe.json deleted file mode 100644 index 72b5071..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/diamond_small_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:diamond_small_axe", - "result": "minecraft:diamond", - "count": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_big_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_big_axe.json deleted file mode 100644 index b39b027..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_big_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_big_axe", - "result": "minecraft:gold_ingot", - "count": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_dagger.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_dagger.json deleted file mode 100644 index 8ecf6c8..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_dagger.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_dagger", - "result": "minecraft:gold_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_francisca.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_francisca.json deleted file mode 100644 index 80092d5..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_francisca.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_francisca", - "result": "minecraft:gold_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_healing_staff.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_healing_staff.json deleted file mode 100644 index 5e89131..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_healing_staff.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_healing_staff", - "result": "minecraft:gold_ingot", - "count": 2 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_javelin.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_javelin.json deleted file mode 100644 index 9a45520..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_javelin.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_javelin", - "result": "minecraft:gold_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_lance.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_lance.json deleted file mode 100644 index bd926a9..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_lance.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_lance", - "result": "minecraft:gold_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_long_sword.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_long_sword.json deleted file mode 100644 index 56929fd..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_long_sword.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_long_sword", - "result": "minecraft:gold_ingot", - "count": 4 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_mace.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_mace.json deleted file mode 100644 index 30955de..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_mace.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_mace", - "result": "minecraft:gold_ingot", - "count": 4 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/golden_small_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/golden_small_axe.json deleted file mode 100644 index 9454ef6..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/golden_small_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:golden_small_axe", - "result": "minecraft:gold_ingot", - "count": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_big_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_big_axe.json deleted file mode 100644 index 8648177..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_big_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_big_axe", - "result": "minecraft:iron_ingot", - "count": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_dagger.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_dagger.json deleted file mode 100644 index c02e780..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_dagger.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_dagger", - "result": "minecraft:iron_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_francisca.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_francisca.json deleted file mode 100644 index a0162ef..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_francisca.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_francisca", - "result": "minecraft:iron_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_healing_staff.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_healing_staff.json deleted file mode 100644 index efc5154..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_healing_staff.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_healing_staff", - "result": "minecraft:iron_ingot", - "count": 2 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_javelin.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_javelin.json deleted file mode 100644 index 4de2b1a..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_javelin.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_javelin", - "result": "minecraft:iron_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_lance.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_lance.json deleted file mode 100644 index 5820a88..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_lance.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_lance", - "result": "minecraft:iron_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_long_sword.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_long_sword.json deleted file mode 100644 index 1841fb8..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_long_sword.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_long_sword", - "result": "minecraft:iron_ingot", - "count": 4 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_mace.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_mace.json deleted file mode 100644 index 23171d0..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_mace.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_mace", - "result": "minecraft:iron_ingot", - "count": 4 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/iron_small_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/iron_small_axe.json deleted file mode 100644 index ff27a5d..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/iron_small_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:iron_small_axe", - "result": "minecraft:iron_ingot", - "count": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_big_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_big_axe.json deleted file mode 100644 index e9d3404..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_big_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_big_axe", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_dagger.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_dagger.json deleted file mode 100644 index 7f53d7d..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_dagger.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_dagger", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_francisca.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_francisca.json deleted file mode 100644 index 243625a..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_francisca.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_francisca", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_healing_staff.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_healing_staff.json deleted file mode 100644 index 2405dec..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_healing_staff.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_healing_staff", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_javelin.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_javelin.json deleted file mode 100644 index 65a3fdf..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_javelin.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_javelin", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_lance.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_lance.json deleted file mode 100644 index 7d8a507..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_lance.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_lance", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_long_sword.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_long_sword.json deleted file mode 100644 index 242655c..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_long_sword.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_long_sword", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_mace.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_mace.json deleted file mode 100644 index dc175c0..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_mace.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_mace", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/netherite_small_axe.json b/src/main/resources/data/stuffz/uncraft_recipes/netherite_small_axe.json deleted file mode 100644 index b3d8564..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/netherite_small_axe.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:netherite_small_axe", - "result": "minecraft:netherite_ingot", - "count": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/stuffz/uncraft_recipes/thalleous_sword.json b/src/main/resources/data/stuffz/uncraft_recipes/thalleous_sword.json deleted file mode 100644 index 8ba6360..0000000 --- a/src/main/resources/data/stuffz/uncraft_recipes/thalleous_sword.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "item": "medievalweapons:thalleous_sword", - "result": "minecraft:diamond", - "count": 4 -} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index d1367ae..88a6661 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,7 +30,7 @@ "medievalweapons.mixins.json" ], "depends": { - "java": ">=17", + "java": ">=21", "minecraft": ">=${minecraft_version}", "fabric-api": ">=${fabric_version}", "fabricloader": ">=${loader_version}", diff --git a/src/main/resources/medievalweapons.mixins.json b/src/main/resources/medievalweapons.mixins.json index 35f61a2..ec34b06 100644 --- a/src/main/resources/medievalweapons.mixins.json +++ b/src/main/resources/medievalweapons.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "net.medievalweapons.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "plugin": "net.medievalweapons.mixin.MedievalWeaponsMixinPlugin", "mixins": [ "PlayerEntityMixin", @@ -15,19 +15,18 @@ "TagGroupLoaderMixin", "BowItemMixin", "MobEntityMixin", - "compat.Big_Axe_ItemMixin", - "compat.Dagger_ItemMixin", - "compat.Francisca_ItemMixin", - "compat.Healing_Staff_ItemMixin", - "compat.Javelin_ItemMixin", - "compat.Lance_ItemMixin", - "compat.Long_Sword_ItemMixin", - "compat.Mace_ItemMixin", - "compat.Ninjato_ItemMixin", - "compat.Rapier_ItemMixin", - "compat.Sickle_ItemMixin", - "compat.Small_Axe_ItemMixin", - "compat.ServerPlayNetworkHandlerMixin" + "compat.BigAxeItemMixin", + "compat.DaggerItemMixin", + "compat.FranciscaItemMixin", + "compat.HealingStaffItemMixin", + "compat.JavelinItemMixin", + "compat.LanceItemMixin", + "compat.LongSwordItemMixin", + "compat.MaceItemMixin", + "compat.NinjatoItemMixin", + "compat.RapierItemMixin", + "compat.SickleItemMixin", + "compat.SmallAxeItemMixin" ], "client": [ "client.BipedEntityModelMixin", @@ -36,7 +35,6 @@ "client.ItemRendererMixin", "client.MinecraftClientMixin", "client.InGameHudMixin", - "client.GameRendererMixin", "client.DrawContextMixin", "client.PersistentProjectileEntityAccessor" ],