diff --git a/build.gradle b/build.gradle index 3d92512e..eacc7a52 100644 --- a/build.gradle +++ b/build.gradle @@ -1,36 +1,27 @@ plugins { - id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.2-SNAPSHOT" apply false + id 'dev.architectury.loom' version '1.7.412' apply false + id 'architectury-plugin' version '3.4-SNAPSHOT' + id 'com.github.johnrengelman.shadow' version '8.1.1' apply false } architectury { - minecraft = rootProject.minecraft_version + minecraft = project.minecraft_version } -subprojects { - apply plugin: "dev.architectury.loom" - - loom { - silentMojangMappingsLicense() - } - - dependencies { - minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - // The following line declares the mojmap mappings, you may use other mappings as well - //mappings loom.officialMojangMappings() - // The following line declares the yarn mappings you may select this one as well. - mappings "net.fabricmc:yarn:${rootProject.yarn_mappings}:v2" - } +allprojects { + group = rootProject.maven_group + version = rootProject.mod_version } -allprojects { - apply plugin: "java" - apply plugin: "architectury-plugin" - apply plugin: "maven-publish" +subprojects { + apply plugin: 'dev.architectury.loom' + apply plugin: 'architectury-plugin' + apply plugin: 'maven-publish' - archivesBaseName = rootProject.archives_base_name - version = rootProject.mod_version - group = rootProject.maven_group + base { + // Set up a suffixed format for the mod jar names, e.g. `example-fabric`. + archivesName = "$rootProject.archives_name-$project.name" + } repositories { // Add repositories to retrieve artifacts from in here. @@ -40,12 +31,43 @@ allprojects { // for more information about repositories. } - tasks.withType(JavaCompile) { - options.encoding = "UTF-8" - options.release = 17 + dependencies { + minecraft "net.minecraft:minecraft:$rootProject.minecraft_version" + mappings loom.layered { + it.mappings("net.fabricmc:yarn:$rootProject.yarn_mappings:v2") + it.mappings("dev.architectury:yarn-mappings-patch-neoforge:$rootProject.yarn_mappings_patch_neoforge_version") + } } java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. withSourcesJar() + + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } -} + + tasks.withType(JavaCompile).configureEach { + it.options.release = 21 + } + + // Configure Maven publishing. + publishing { + publications { + mavenJava(MavenPublication) { + artifactId = base.archivesName.get() + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. + } + } +} \ No newline at end of file diff --git a/common/build.gradle b/common/build.gradle index 94c7d227..34caae4e 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -28,6 +28,10 @@ repositories { maven { url = "https://jitpack.io" } maven { url "https://maven.shedaniel.me/" } maven { url "https://maven.terraformersmc.com/releases/" } + maven { + name = "FzzyMaven" + url = "https://maven.fzzyhmstrs.me/" + } } dependencies { @@ -35,11 +39,10 @@ dependencies { // Do NOT use other classes from fabric loader modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" // Remove the next line if you don't want to depend on the API - modApi "dev.architectury:architectury:${rootProject.architectury_version}" - modApi("me.shedaniel.cloth:cloth-config:${rootProject.cloth_config_version}") { - exclude(group: "net.fabricmc.fabric-api") - } + modImplementation "dev.architectury:architectury:$rootProject.architectury_api_version" modImplementation "curse.maven:necronomicon-586157:${rootProject.necronomicon_version}" + + modImplementation "me.fzzyhmstrs:fzzy_config:${project.fzz_config_version}" } publishing { @@ -57,4 +60,4 @@ publishing { maven { url "https://maven.shedaniel.me/" } maven { url "https://maven.terraformersmc.com/releases/" } } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/SimplySwords.java b/common/src/main/java/net/sweenus/simplyswords/SimplySwords.java index f2d5bd1a..e00af303 100644 --- a/common/src/main/java/net/sweenus/simplyswords/SimplySwords.java +++ b/common/src/main/java/net/sweenus/simplyswords/SimplySwords.java @@ -10,9 +10,6 @@ import dev.architectury.registry.registries.RegistrySupplier; import dev.architectury.utils.Env; import dev.architectury.utils.EnvExecutor; -import me.shedaniel.autoconfig.AutoConfig; -import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer; -import me.shedaniel.autoconfig.serializer.PartitioningSerializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.render.entity.BeeEntityRenderer; @@ -26,14 +23,15 @@ import net.sweenus.simplyswords.client.renderer.BattleStandardRenderer; import net.sweenus.simplyswords.client.renderer.model.BattleStandardDarkModel; import net.sweenus.simplyswords.client.renderer.model.BattleStandardModel; -import net.sweenus.simplyswords.compat.EldritchEndCompat; import net.sweenus.simplyswords.compat.eldritch_end.EldritchEndCompatRegistry; -import net.sweenus.simplyswords.config.*; +import net.sweenus.simplyswords.config.Config; import net.sweenus.simplyswords.entity.BattleStandardDarkEntity; import net.sweenus.simplyswords.entity.BattleStandardEntity; import net.sweenus.simplyswords.entity.SimplySwordsBeeEntity; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.EntityRegistry; +import net.sweenus.simplyswords.registry.GemPowerRegistry; import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.FileCopier; @@ -61,15 +59,6 @@ public class SimplySwords { public static final Logger LOGGER = LogManager.getLogger(MOD_ID); - public static boolean isConfigOutdated; - public static GeneralConfig generalConfig; - public static LootConfig lootConfig; - public static GemEffectsConfig gemEffectsConfig; - public static RunicEffectsConfig runicEffectsConfig; - public static StatusEffectsConfig statusEffectsConfig; - public static UniqueEffectsConfig uniqueEffectsConfig; - public static WeaponAttributesConfig weaponAttributesConfig; - public static String minimumEldritchEndVersion = "0.2.40"; public static String minimumSpellPowerVersion = "0.10.0+1.20.1"; @@ -77,49 +66,21 @@ public static void init() { //CONFIG - SimplySwordsConfig.init(); - - AutoConfig.register(ConfigWrapper.class, PartitioningSerializer.wrap(JanksonConfigSerializer::new)); - generalConfig = AutoConfig.getConfigHolder(ConfigWrapper.class).getConfig().general; - lootConfig = AutoConfig.getConfigHolder(ConfigWrapper.class).getConfig().loot; - gemEffectsConfig = AutoConfig.getConfigHolder(ConfigWrapper.class).getConfig().gem_effects; - runicEffectsConfig = AutoConfig.getConfigHolder(ConfigWrapper.class).getConfig().runic_effects; - statusEffectsConfig = AutoConfig.getConfigHolder(ConfigWrapper.class).getConfig().status_effects; - uniqueEffectsConfig = AutoConfig.getConfigHolder(ConfigWrapper.class).getConfig().unique_effects; - weaponAttributesConfig = AutoConfig.getConfigHolder(ConfigWrapper.class).getConfig().weapon_attributes; - - String version = SimplySwordsExpectPlatform.getVersion(); - String defaultConfig = String.format(""" - { - "regen_simplyswords_config_file": false, - "config_version": %s - }""", version.substring(0, 4)); - - File configFile = Config.createFile("config/simplyswords_extra/backupconfig.json", defaultConfig, false); - JsonObject json = Config.getJsonObject(Config.readFile(configFile)); - if (json.has("config_version") && version.startsWith(json.get("config_version").getAsString())) { - isConfigOutdated = false; - } else { - isConfigOutdated = true; - //System.out.println("SimplySwords: It looks like you've updated from a previous version. Please regenerate the Simply Swords configs to get the latest features."); - //System.out.println(version.substring(0, 4)); - } - - SimplySwordsConfig.generateConfigs(json == null || !json.has("regen_simplyswords_config_file") || json.get("regen_simplyswords_config_file").getAsBoolean()); - SimplySwordsConfig.loadConfig(); - + Config.init(); SimplySwords.TABS.register(); ItemsRegistry.ITEM.register(); SoundRegistry.SOUND.register(); EffectRegistry.EFFECT.register(); EntityRegistry.ENTITIES.register(); + ComponentTypeRegistry.COMPONENT_TYPES.register(); + GemPowerRegistry.register(); EntityAttributeRegistry.register(EntityRegistry.BATTLESTANDARD, BattleStandardEntity::createBattleStandardAttributes); EntityAttributeRegistry.register(EntityRegistry.BATTLESTANDARDDARK, BattleStandardDarkEntity::createBattleStandardDarkAttributes); EntityAttributeRegistry.register(EntityRegistry.SIMPLYBEEENTITY, SimplySwordsBeeEntity::createSimplyBeeAttributes); ModLootTableModifiers.init(); if (passVersionCheck("eldritch_end", minimumEldritchEndVersion)) { - EldritchEndCompat.registerModItems(); + //EldritchEndCompat.registerModItems(); 1.21 EldritchEndCompatRegistry.EFFECT.register(); } try { @@ -147,8 +108,8 @@ public static boolean passVersionCheck(String modId, String requiredVersion) { @Environment(EnvType.CLIENT) public static class Client { - public static final EntityModelLayer BATTLESTANDARD_MODEL = new EntityModelLayer(new Identifier("battlestandard", "cube"), "main"); - public static final EntityModelLayer BATTLESTANDARD_DARK_MODEL = new EntityModelLayer(new Identifier("battlestandarddark", "cube"), "main"); + public static final EntityModelLayer BATTLESTANDARD_MODEL = new EntityModelLayer(Identifier.of("battlestandard", "cube"), "main"); + public static final EntityModelLayer BATTLESTANDARD_DARK_MODEL = new EntityModelLayer(Identifier.of("battlestandarddark", "cube"), "main"); @Environment(EnvType.CLIENT) public static void initializeClient() { @@ -160,4 +121,4 @@ public static void initializeClient() { } } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/api/SimplySwordsAPI.java b/common/src/main/java/net/sweenus/simplyswords/api/SimplySwordsAPI.java index e7f60f9e..9af97a1a 100644 --- a/common/src/main/java/net/sweenus/simplyswords/api/SimplySwordsAPI.java +++ b/common/src/main/java/net/sweenus/simplyswords/api/SimplySwordsAPI.java @@ -1,5 +1,6 @@ package net.sweenus.simplyswords.api; +import me.fzzyhmstrs.fzzy_config.util.ValidationResult; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.gui.screen.Screen; @@ -8,22 +9,21 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SpawnReason; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.entity.BattleStandardEntity; +import net.sweenus.simplyswords.power.GemPowerComponent; +import net.sweenus.simplyswords.power.GemPowerFiller; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.EntityRegistry; -import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; -import net.sweenus.simplyswords.util.HelperMethods; -import net.sweenus.simplyswords.util.RunicMethods; import java.util.List; @@ -71,6 +71,10 @@ public static BattleStandardEntity spawnBattleStandard(PlayerEntity user, int de return null; } + public static GemPowerComponent getComponent(ItemStack stack) { + return stack.getOrDefault(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.DEFAULT); + } + // Gem Sockets // When each method is added to an item class, allows for gem sockets to appear on the item. // Each method needs to be called in its respective Override method. (Eg. inventoryTickGemSocketLogic goes in inventoryTick) @@ -78,272 +82,40 @@ public static BattleStandardEntity spawnBattleStandard(PlayerEntity user, int de // Performs postHit socket effects public static void postHitGemSocketLogic(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { - switch (stack.getOrCreateNbt().getString("runic_power")) { - case "freeze" -> RunicMethods.postHitRunicFreeze(target, attacker); - case "wildfire" -> RunicMethods.postHitRunicWildfire(target, attacker); - case "slow" -> RunicMethods.postHitRunicSlow(target, attacker); - case "greater_slow" -> RunicMethods.postHitRunicGreaterSlow(target, attacker); - case "swiftness" -> RunicMethods.postHitRunicSwiftness(attacker); - case "greater_swiftness" -> RunicMethods.postHitRunicGreaterSwiftness(attacker); - case "float" -> RunicMethods.postHitRunicFloat(target, attacker); - case "greater_float" -> RunicMethods.postHitRunicGreaterFloat(target, attacker); - case "zephyr" -> RunicMethods.postHitRunicZephyr(attacker); - case "greater_zephyr" -> RunicMethods.postHitRunicGreaterZephyr(attacker); - case "shielding" -> RunicMethods.postHitRunicShielding(attacker); - case "greater_shielding" -> RunicMethods.postHitRunicGreaterShielding(attacker); - case "stoneskin" -> RunicMethods.postHitRunicStoneskin(attacker); - case "greater_stoneskin" -> RunicMethods.postHitRunicGreaterStoneskin(attacker); - case "trailblaze" -> RunicMethods.postHitRunicTrailblaze(attacker); - case "greater_trailblaze" -> RunicMethods.postHitRunicGreaterTrailblaze(attacker); - case "weaken" -> RunicMethods.postHitRunicWeaken(target, attacker); - case "greater_weaken" -> RunicMethods.postHitRunicGreaterWeaken(target, attacker); - case "imbued" -> RunicMethods.postHitRunicImbued(stack, target, attacker); - case "greater_imbued" -> RunicMethods.postHitRunicGreaterImbued(stack, target, attacker); - case "pincushion" -> RunicMethods.postHitRunicPinCushion(target, attacker); - case "greater_pincushion" -> RunicMethods.postHitRunicGreaterPinCushion(target, attacker); - } - - switch (stack.getOrCreateNbt().getString("nether_power")) { - case "echo" -> RunicMethods.postHitNetherEcho(stack, target, attacker); - case "berserk" -> RunicMethods.postHitNetherBerserk(stack, target, attacker); - case "radiance" -> RunicMethods.postHitNetherRadiance(target, attacker); - case "onslaught" -> RunicMethods.postHitNetherOnslaught(target, attacker); - case "nullification" -> RunicMethods.postHitNetherNullification(attacker); - } + GemPowerComponent component = getComponent(stack); + component.postHit(stack, target, attacker); } } // Adds the relevant socket information to the item tooltip - public static void appendTooltipGemSocketLogic(ItemStack itemStack, List tooltip) { + public static void appendTooltipGemSocketLogic(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type) { - Style RUNIC = HelperMethods.getStyle("runic"); - Style NETHERFUSED = HelperMethods.getStyle("legendary"); - Style TEXT = HelperMethods.getStyle("text"); + GemPowerComponent component = getComponent(itemStack); - NbtCompound nbt = itemStack.getOrCreateNbt(); - if (!nbt.getString("runic_power").equals("no_socket") || !nbt.getString("nether_power").equals("no_socket")) { + if (!component.isEmpty()) { tooltip.add(Text.literal("")); } - if (Screen.hasAltDown()) { - if (nbt.getString("runic_power").contains("greater")) { - tooltip.add(Text.translatable("item.simplyswords.greater_runic_power").setStyle(RUNIC)); - } - switch (nbt.getString("runic_power")) { - case "socket_empty" -> - tooltip.add(Text.translatable("item.simplyswords.empty_runic_slot").formatted(Formatting.GRAY)); - case "freeze" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.freeze").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip2").setStyle(TEXT)); - } - case "wildfire" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.wildfire").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip3").setStyle(TEXT)); - } - case "slow", "greater_slow" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.slow").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip3").setStyle(TEXT)); - } - case "swiftness", "greater_swiftness" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.swiftness").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip3").setStyle(TEXT)); - } - case "float", "greater_float" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.float").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip3").setStyle(TEXT)); - } - case "zephyr", "greater_zephyr" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.zephyr").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip3").setStyle(TEXT)); - } - case "shielding", "greater_shielding" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.shielding").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip3").setStyle(TEXT)); - } - case "stoneskin", "greater_stoneskin" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.stoneskin").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip3").setStyle(TEXT)); - } - case "frost_ward" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.frost_ward").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip3").setStyle(TEXT)); - } - case "trailblaze", "greater_trailblaze" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.trailblaze").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip3").setStyle(TEXT)); - } - case "active_defence" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.active_defence").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip3").setStyle(TEXT)); - } - case "weaken", "greater_weaken" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.weaken").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip3").setStyle(TEXT)); - } - case "unstable" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.unstable").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip3").setStyle(TEXT)); - } - case "imbued", "greater_imbued" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.imbued").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip3").setStyle(TEXT)); - } - case "pincushion", "greater_pincushion" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.pincushion").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip3").setStyle(TEXT)); - } - } - if (!nbt.getString("runic_power").equals("no_socket") && !nbt.getString("nether_power").equals("no_socket")) { - tooltip.add(Text.literal("")); - } - - switch (nbt.getString("nether_power")) { - case "socket_empty" -> - tooltip.add(Text.translatable("item.simplyswords.empty_nether_slot").formatted(Formatting.GRAY)); - case "echo" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description3").setStyle(TEXT)); - } - case "berserk" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description3").setStyle(TEXT)); - } - case "radiance" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description3").setStyle(TEXT)); - } - case "onslaught" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description6").setStyle(TEXT)); - } - case "nullification" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description5").setStyle(TEXT)); - } - case "precise" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise.description3").setStyle(TEXT)); - } - case "mighty" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty.description3").setStyle(TEXT)); - } - case "stealthy" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.stealthy").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.stealthy.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.stealthy.description2").setStyle(TEXT)); - } - case "renewed" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description4").setStyle(TEXT)); - } - case "accelerant" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description4").setStyle(TEXT)); - } - case "leaping" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping.description3").setStyle(TEXT)); - } - case "spellshield" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellshield").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellshield.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellshield.description2").setStyle(TEXT)); - } - case "spellforged" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged.description3").setStyle(TEXT)); - } - case "soulshock" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock.description3").setStyle(TEXT)); - } - case "spell_standard" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description3").setStyle(TEXT)); - } - case "war_standard" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard.description3").setStyle(TEXT)); - } - case "deception" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception").setStyle(NETHERFUSED)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception.description3").setStyle(TEXT)); - } - } - } else if (!nbt.getString("runic_power").equals("no_socket") || !nbt.getString("nether_power").equals("no_socket")) { + if (Screen.hasAltDown()) { + component.appendTooltip(itemStack, tooltipContext, tooltip, type); + } else if (component.canBeFilled()) { tooltip.add(Text.translatable("item.simplyswords.common.showtooltip").formatted(Formatting.GRAY)); } } // Allows for the socketing of gems public static void onClickedGemSocketLogic (ItemStack stack, ItemStack otherStack, PlayerEntity player) { - - if (Config.getBoolean("enableUniqueGemSockets", "General", ConfigDefaultValues.enableUniqueGemSockets)) { - String powerType = null; - if (otherStack.isOf(ItemsRegistry.RUNEFUSED_GEM.get()) && stack.getOrCreateNbt().getString("runic_power").equals("socket_empty") - && !otherStack.getOrCreateNbt().getString("runic_power").isEmpty()) { - powerType = "runic_power"; - } else if (otherStack.isOf(ItemsRegistry.NETHERFUSED_GEM.get()) && stack.getOrCreateNbt().getString("nether_power").equals("socket_empty") - && !otherStack.getOrCreateNbt().getString("nether_power").isEmpty()) { - powerType = "nether_power"; - } - if (powerType != null) { - String powerSelection = otherStack.getOrCreateNbt().getString(powerType); - stack.getOrCreateNbt().putString(powerType, powerSelection); - player.getWorld().playSoundFromEntity(null, player, SoundEvents.BLOCK_ANVIL_USE, player.getSoundCategory(), 1, 1); - otherStack.decrement(1); + if (Config.general.enableUniqueGemSockets) { + GemPowerComponent component = getComponent(stack); + if (component.canBeFilled()) { + if (otherStack.getItem() instanceof GemPowerFiller gemPowerFiller) { + ValidationResult result = gemPowerFiller.fill(otherStack, component); + if (result.isValid()) { + stack.set(ComponentTypeRegistry.GEM_POWER.get(), result.get()); + player.getWorld().playSoundFromEntity(null, player, SoundEvents.BLOCK_ANVIL_USE, player.getSoundCategory(), 1, 1); + otherStack.decrement(1); + } + } } } } @@ -351,28 +123,16 @@ public static void onClickedGemSocketLogic (ItemStack stack, ItemStack otherStac // netherSocketChance & runeSocketChance determine how likely these sockets are to appear on the item. An int of 50 = 50% chance for the socket to appear. public static void inventoryTickGemSocketLogic (ItemStack stack, World world, Entity entity, int runeSocketChance, int netherSocketChance) { - - NbtCompound nbt = stack.getOrCreateNbt(); - - if (nbt.getString("runic_power").isEmpty() && nbt.getString("nether_power").isEmpty() && Config.getBoolean("enableUniqueGemSockets", "General", ConfigDefaultValues.enableUniqueGemSockets)) { - float socketChance = (float) (Math.random() * 100); - float socketChance2 = (float) (Math.random() * 100); - - if (socketChance > runeSocketChance) nbt.putString("runic_power", "socket_empty"); - else nbt.putString("runic_power", "no_socket"); - if (socketChance2 > netherSocketChance) nbt.putString("nether_power", "socket_empty"); - else nbt.putString("nether_power", "no_socket"); + if (!stack.contains(ComponentTypeRegistry.GEM_POWER.get()) && Config.general.enableUniqueGemSockets) { + float runeSocketRoll = (float) (Math.random() * 100); + float netherSocketRoll = (float) (Math.random() * 100); + stack.set(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.createEmpty(runeSocketRoll > runeSocketChance, netherSocketRoll > netherSocketChance)); } if (!world.isClient && (entity instanceof LivingEntity user) && (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack || user.getEquippedStack(EquipmentSlot.OFFHAND) == stack)) { - switch (stack.getOrCreateNbt().getString("runic_power")) { - case "unstable" -> RunicMethods.inventoryTickRunicUnstable(user); - case "active_defence" -> - RunicMethods.inventoryTickRunicActiveDefence(world, user); - case "frost_ward" -> RunicMethods.inventoryTickRunicFrostWard(world, user); - } + GemPowerComponent component = getComponent(stack); + component.inventoryTick(stack, world, user, 0, true); } - } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardDarkRenderer.java b/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardDarkRenderer.java index 8b3c9618..9bc30f70 100644 --- a/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardDarkRenderer.java +++ b/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardDarkRenderer.java @@ -13,7 +13,7 @@ public class BattleStandardDarkRenderer extends MobEntityRenderer { - private static final Identifier TEXTURE = new Identifier("simplyswords","textures/entity/battlestandard/battlestandarddark_texture.png"); + private static final Identifier TEXTURE = Identifier.of("simplyswords","textures/entity/battlestandard/battlestandarddark_texture.png"); public BattleStandardDarkRenderer(EntityRendererFactory.Context context) { super(context, new BattleStandardDarkModel(context.getPart(SimplySwords.Client.BATTLESTANDARD_DARK_MODEL)), 0.1f); diff --git a/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardRenderer.java b/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardRenderer.java index 21a1b213..164511ab 100644 --- a/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardRenderer.java +++ b/common/src/main/java/net/sweenus/simplyswords/client/renderer/BattleStandardRenderer.java @@ -13,7 +13,7 @@ public class BattleStandardRenderer extends MobEntityRenderer { - private static final Identifier TEXTURE = new Identifier("simplyswords","textures/entity/battlestandard/battlestandard_texture.png"); + private static final Identifier TEXTURE = Identifier.of("simplyswords","textures/entity/battlestandard/battlestandard_texture.png"); public BattleStandardRenderer(EntityRendererFactory.Context context) { super(context, new BattleStandardModel(context.getPart(SimplySwords.Client.BATTLESTANDARD_MODEL)), 0.1f); diff --git a/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardDarkModel.java b/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardDarkModel.java index 9cc8de94..ccb63373 100644 --- a/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardDarkModel.java +++ b/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardDarkModel.java @@ -1,6 +1,12 @@ package net.sweenus.simplyswords.client.renderer.model; -import net.minecraft.client.model.*; +import net.minecraft.client.model.Dilation; +import net.minecraft.client.model.ModelData; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.model.ModelPartBuilder; +import net.minecraft.client.model.ModelPartData; +import net.minecraft.client.model.ModelTransform; +import net.minecraft.client.model.TexturedModelData; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.util.math.MatrixStack; @@ -29,14 +35,14 @@ public static TexturedModelData getTexturedModelData() { ModelPartData bb_main = modelPartData.addChild("bb_main", ModelPartBuilder.create().uv(0, 0).cuboid(-4.0F, -29.75F, -0.25F, 9.0F, 17.0F, 0.0F, new Dilation(0.0F)), ModelTransform.pivot(0.0F, 24.0F, 0.0F)); return TexturedModelData.of(modelData, 64, 64); } + @Override - public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { - supports.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); - bb_main.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); + public void setAngles(BattleStandardDarkEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + } @Override - public void setAngles(BattleStandardDarkEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, int color) { } } \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardModel.java b/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardModel.java index 60e41fba..3b09853b 100644 --- a/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardModel.java +++ b/common/src/main/java/net/sweenus/simplyswords/client/renderer/model/BattleStandardModel.java @@ -1,6 +1,12 @@ package net.sweenus.simplyswords.client.renderer.model; -import net.minecraft.client.model.*; +import net.minecraft.client.model.Dilation; +import net.minecraft.client.model.ModelData; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.model.ModelPartBuilder; +import net.minecraft.client.model.ModelPartData; +import net.minecraft.client.model.ModelTransform; +import net.minecraft.client.model.TexturedModelData; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.util.math.MatrixStack; @@ -29,14 +35,14 @@ public static TexturedModelData getTexturedModelData() { ModelPartData bb_main = modelPartData.addChild("bb_main", ModelPartBuilder.create().uv(0, 0).cuboid(-4.0F, -29.75F, -0.25F, 9.0F, 17.0F, 0.0F, new Dilation(0.0F)), ModelTransform.pivot(0.0F, 24.0F, 0.0F)); return TexturedModelData.of(modelData, 64, 64); } + @Override - public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { - supports.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); - bb_main.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); + public void setAngles(BattleStandardEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + } @Override - public void setAngles(BattleStandardEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, int color) { } } \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/compat/EldritchEndCompat.java b/common/src/main/java/net/sweenus/simplyswords/compat/EldritchEndCompat.java index 846ec637..2648a0e9 100644 --- a/common/src/main/java/net/sweenus/simplyswords/compat/EldritchEndCompat.java +++ b/common/src/main/java/net/sweenus/simplyswords/compat/EldritchEndCompat.java @@ -1,24 +1,18 @@ package net.sweenus.simplyswords.compat; import dev.architectury.registry.registries.DeferredRegister; -import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.item.Item; -import net.minecraft.util.Rarity; -import net.sweenus.simplyswords.SimplySwords; -import net.sweenus.simplyswords.compat.eldritch_end.EldritchEndCompatMaterial; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.item.custom.DreadtideSwordItem; import net.sweenus.simplyswords.registry.ItemsRegistry; public class EldritchEndCompat { //Compat for Eldritch End - static float dreadtide_damage_modifier = Config.getFloat("dreadtide_damageModifier", "WeaponAttributes", ConfigDefaultValues.dreadtide_damageModifier); - static float dreadtide_attackspeed = Config.getFloat("dreadtide_attackSpeed", "WeaponAttributes", ConfigDefaultValues.dreadtide_attackSpeed); + static float dreadtide_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.dreadtide_damageModifier.get(); + static float dreadtide_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.dreadtide_attackSpeed.get(); public static final DeferredRegister ITEM = ItemsRegistry.ITEM; - +/* public static final RegistrySupplier DREADTIDE = ITEM.register( "dreadtide", () -> new DreadtideSwordItem(EldritchEndCompatMaterial.ABERRATION, (int) (dreadtide_damage_modifier), @@ -28,5 +22,6 @@ public class EldritchEndCompat { public static void registerModItems() { SimplySwords.LOGGER.info("Registering Eldritch End compat Items for " + SimplySwords.MOD_ID); } + */ -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/compat/GobberCompat.java b/common/src/main/java/net/sweenus/simplyswords/compat/GobberCompat.java index de45af3a..dfbaf3a5 100644 --- a/common/src/main/java/net/sweenus/simplyswords/compat/GobberCompat.java +++ b/common/src/main/java/net/sweenus/simplyswords/compat/GobberCompat.java @@ -1,275 +1,234 @@ package net.sweenus.simplyswords.compat; -import net.minecraft.item.Item; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; -import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.item.GobberEndSwordItem; -import net.sweenus.simplyswords.item.GobberNetherSwordItem; -import net.sweenus.simplyswords.item.ModToolMaterial; -import net.sweenus.simplyswords.item.SimplySwordsSwordItem; public class GobberCompat { //Compat for Gobber - static float longsword_positive_modifier = Config.getFloat("longsword_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.longsword_positiveDamageModifier); - static float twinblade_positive_modifier = Config.getFloat("twinblade_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.twinblade_positiveDamageModifier); - static float rapier_positive_modifier = Config.getFloat("rapier_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.rapier_positiveDamageModifier); - static float katana_positive_modifier = Config.getFloat("katana_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.katana_positiveDamageModifier); - static float sai_positive_modifier = Config.getFloat("sai_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.sai_positiveDamageModifier); - static float spear_positive_modifier = Config.getFloat("spear_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.spear_positiveDamageModifier); - static float glaive_positive_modifier = Config.getFloat("glaive_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.glaive_positiveDamageModifier); - static float warglaive_positive_modifier = Config.getFloat("warglaive_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.warglaive_positiveDamageModifier); - static float cutlass_positive_modifier = Config.getFloat("cutlass_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.cutlass_positiveDamageModifier); - static float claymore_positive_modifier = Config.getFloat("claymore_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.claymore_positiveDamageModifier); - static float greataxe_positive_modifier = Config.getFloat("greataxe_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.greataxe_positiveDamageModifier); - static float greathammer_positive_modifier = Config.getFloat("greathammer_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.greathammer_positiveDamageModifier); - static float chakram_positive_modifier = Config.getFloat("chakram_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.chakram_positiveDamageModifier); - static float scythe_positive_modifier = Config.getFloat("scythe_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.scythe_positiveDamageModifier); - static float halberd_positive_modifier = Config.getFloat("halberd_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.halberd_positiveDamageModifier); - - static float longsword_negative_modifier = Config.getFloat("longsword_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.longsword_negativeDamageModifier); - static float twinblade_negative_modifier = Config.getFloat("twinblade_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.twinblade_negativeDamageModifier); - static float rapier_negative_modifier = Config.getFloat("rapier_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.rapier_negativeDamageModifier); - static float sai_negative_modifier = Config.getFloat("sai_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.sai_negativeDamageModifier); - static float spear_negative_modifier = Config.getFloat("spear_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.spear_negativeDamageModifier); - static float katana_negative_modifier = Config.getFloat("katana_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.katana_negativeDamageModifier); - static float glaive_negative_modifier = Config.getFloat("glaive_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.glaive_negativeDamageModifier); - static float warglaive_negative_modifier = Config.getFloat("warglaive_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.warglaive_negativeDamageModifier); - static float cutlass_negative_modifier = Config.getFloat("cutlass_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.cutlass_negativeDamageModifier); - static float claymore_negative_modifier = Config.getFloat("claymore_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.claymore_negativeDamageModifier); - static float greataxe_negative_modifier = Config.getFloat("greataxe_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.greataxe_negativeDamageModifier); - static float greathammer_negative_modifier = Config.getFloat("greathammer_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.greathammer_negativeDamageModifier); - static float chakram_negative_modifier = Config.getFloat("chakram_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.chakram_negativeDamageModifier); - static float scythe_negative_modifier = Config.getFloat("scythe_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.scythe_negativeDamageModifier); - static float halberd_negative_modifier = Config.getFloat("halberd_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.halberd_negativeDamageModifier); - - static float longsword_attackspeed = Config.getFloat("longsword_attackSpeed", "WeaponAttributes", ConfigDefaultValues.longsword_attackSpeed); - static float twinblade_attackspeed = Config.getFloat("twinblade_attackSpeed", "WeaponAttributes", ConfigDefaultValues.twinblade_attackSpeed); - static float rapier_attackspeed = Config.getFloat("rapier_attackSpeed", "WeaponAttributes", ConfigDefaultValues.rapier_attackSpeed); - static float sai_attackspeed = Config.getFloat("sai_attackSpeed", "WeaponAttributes", ConfigDefaultValues.sai_attackSpeed); - static float spear_attackspeed = Config.getFloat("spear_attackSpeed", "WeaponAttributes", ConfigDefaultValues.spear_attackSpeed); - static float katana_attackspeed = Config.getFloat("katana_attackSpeed", "WeaponAttributes", ConfigDefaultValues.katana_attackSpeed); - static float glaive_attackspeed = Config.getFloat("glaive_attackSpeed", "WeaponAttributes", ConfigDefaultValues.glaive_attackSpeed); - static float warglaive_attackspeed = Config.getFloat("warglaive_attackSpeed", "WeaponAttributes", ConfigDefaultValues.warglaive_attackSpeed); - static float cutlass_attackspeed = Config.getFloat("cutlass_attackSpeed", "WeaponAttributes", ConfigDefaultValues.cutlass_attackSpeed); - static float claymore_attackspeed = Config.getFloat("claymore_attackSpeed", "WeaponAttributes", ConfigDefaultValues.claymore_attackSpeed); - static float greataxe_attackspeed = Config.getFloat("greataxe_attackSpeed", "WeaponAttributes", ConfigDefaultValues.greataxe_attackSpeed); - static float greathammer_attackspeed = Config.getFloat("greathammer_attackSpeed", "WeaponAttributes", ConfigDefaultValues.greathammer_attackSpeed); - static float chakram_attackspeed = Config.getFloat("chakram_attackSpeed", "WeaponAttributes", ConfigDefaultValues.chakram_attackSpeed); - static float scythe_attackspeed = Config.getFloat("scythe_attackSpeed", "WeaponAttributes", ConfigDefaultValues.scythe_attackSpeed); - static float halberd_attackspeed = Config.getFloat("halberd_attackSpeed", "WeaponAttributes", ConfigDefaultValues.halberd_attackSpeed); - - static int longsword_modifier = (int) (longsword_positive_modifier - longsword_negative_modifier); - static int twinblade_modifier = (int) (twinblade_positive_modifier - twinblade_negative_modifier); - static int rapier_modifier = (int) (rapier_positive_modifier - rapier_negative_modifier); - static int sai_modifier = (int) (sai_positive_modifier - sai_negative_modifier); - static int spear_modifier = (int) (spear_positive_modifier - spear_negative_modifier); - static int katana_modifier = (int) (katana_positive_modifier - katana_negative_modifier); - static int glaive_modifier = (int) (glaive_positive_modifier - glaive_negative_modifier); - static int warglaive_modifier = (int) (warglaive_positive_modifier - warglaive_negative_modifier); - static int cutlass_modifier = (int) (cutlass_positive_modifier - cutlass_negative_modifier); - static int chakram_modifier = (int) (chakram_positive_modifier - chakram_negative_modifier); - static int scythe_modifier = (int) (scythe_positive_modifier - scythe_negative_modifier); - static int claymore_modifier = (int) (claymore_positive_modifier - claymore_negative_modifier); - static int greathammer_modifier = (int) (greathammer_positive_modifier - greathammer_negative_modifier); - static int greataxe_modifier = (int) (greataxe_positive_modifier - greataxe_negative_modifier); - static int halberd_modifier = (int) (halberd_positive_modifier - halberd_negative_modifier); - static int gobber_modifier = (int) Config.getFloat("gobber_damageModifier", "WeaponAttributes", ConfigDefaultValues.gobber_damageModifier); - static int gobber_nether_modifier = (int) Config.getFloat("gobberNether_damageModifier", "WeaponAttributes", ConfigDefaultValues.gobberNether_damageModifier); - static int gobber_end_modifier = (int) Config.getFloat("gobberEnd_damageModifier", "WeaponAttributes", ConfigDefaultValues.gobberEnd_damageModifier); + static float longsword_modifier = Config.weaponAttribute.typeDamageModifier.longsword_damageModifier; + static float twinblade_modifier = Config.weaponAttribute.typeDamageModifier.twinblade_damageModifier; + static float rapier_modifier = Config.weaponAttribute.typeDamageModifier.rapier_damageModifier; + static float katana_modifier = Config.weaponAttribute.typeDamageModifier.katana_damageModifier; + static float sai_modifier = Config.weaponAttribute.typeDamageModifier.sai_damageModifier; + static float spear_modifier = Config.weaponAttribute.typeDamageModifier.spear_damageModifier; + static float glaive_modifier = Config.weaponAttribute.typeDamageModifier.glaive_damageModifier; + static float warglaive_modifier = Config.weaponAttribute.typeDamageModifier.warglaive_damageModifier; + static float cutlass_modifier = Config.weaponAttribute.typeDamageModifier.cutlass_damageModifier; + static float claymore_modifier = Config.weaponAttribute.typeDamageModifier.claymore_damageModifier; + static float greataxe_modifier = Config.weaponAttribute.typeDamageModifier.greataxe_damageModifier; + static float greathammer_modifier = Config.weaponAttribute.typeDamageModifier.greathammer_damageModifier; + static float chakram_modifier = Config.weaponAttribute.typeDamageModifier.chakram_damageModifier; + static float scythe_modifier = Config.weaponAttribute.typeDamageModifier.scythe_damageModifier; + static float halberd_modifier = Config.weaponAttribute.typeDamageModifier.halberd_damageModifier; + + static float longsword_attackspeed = Config.weaponAttribute.typeAttackSpeed.longsword_attackSpeed; + static float twinblade_attackspeed = Config.weaponAttribute.typeAttackSpeed.twinblade_attackSpeed; + static float rapier_attackspeed = Config.weaponAttribute.typeAttackSpeed.rapier_attackSpeed; + static float sai_attackspeed = Config.weaponAttribute.typeAttackSpeed.sai_attackSpeed; + static float spear_attackspeed = Config.weaponAttribute.typeAttackSpeed.spear_attackSpeed; + static float katana_attackspeed = Config.weaponAttribute.typeAttackSpeed.katana_attackSpeed; + static float glaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.glaive_attackSpeed; + static float warglaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.warglaive_attackSpeed; + static float cutlass_attackspeed = Config.weaponAttribute.typeAttackSpeed.cutlass_attackSpeed; + static float claymore_attackspeed = Config.weaponAttribute.typeAttackSpeed.claymore_attackSpeed; + static float greataxe_attackspeed = Config.weaponAttribute.typeAttackSpeed.greataxe_attackSpeed; + static float greathammer_attackspeed = Config.weaponAttribute.typeAttackSpeed.greathammer_attackSpeed; + static float chakram_attackspeed = Config.weaponAttribute.typeAttackSpeed.chakram_attackSpeed; + static float scythe_attackspeed = Config.weaponAttribute.typeAttackSpeed.scythe_attackSpeed; + static float halberd_attackspeed = Config.weaponAttribute.typeAttackSpeed.halberd_attackSpeed; + static float gobber_modifier = Config.weaponAttribute.materialDamageModifier.gobber_damageModifier.get(); + static float gobber_nether_modifier = Config.weaponAttribute.materialDamageModifier.gobberNether_damageModifier.get(); + static float gobber_end_modifier = Config.weaponAttribute.materialDamageModifier.gobberEnd_damageModifier.get(); + /* 1.21 //GOBBER public static final Item GOBBER_LONGSWORD = registerItem( "gobber_compat/gobber/gobber_longsword", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + longsword_modifier, longsword_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + longsword_modifier), longsword_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_TWINBLADE = registerItem( "gobber_compat/gobber/gobber_twinblade", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + twinblade_modifier, twinblade_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + twinblade_modifier), twinblade_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_RAPIER = registerItem( "gobber_compat/gobber/gobber_rapier", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + rapier_modifier, rapier_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + rapier_modifier), rapier_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_KATANA = registerItem( "gobber_compat/gobber/gobber_katana", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + katana_modifier, katana_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + katana_modifier), katana_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_SAI = registerItem( "gobber_compat/gobber/gobber_sai", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + sai_modifier, sai_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + sai_modifier), sai_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_SPEAR = registerItem( "gobber_compat/gobber/gobber_spear", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + spear_modifier, spear_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + spear_modifier), spear_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_GLAIVE = registerItem( "gobber_compat/gobber/gobber_glaive", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + glaive_modifier, glaive_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + glaive_modifier), glaive_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_WARGLAIVE = registerItem( "gobber_compat/gobber/gobber_warglaive", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + warglaive_modifier, warglaive_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + warglaive_modifier), warglaive_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_CUTLASS = registerItem( "gobber_compat/gobber/gobber_cutlass", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + cutlass_modifier, cutlass_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + cutlass_modifier), cutlass_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_CLAYMORE = registerItem( "gobber_compat/gobber/gobber_claymore", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + claymore_modifier, claymore_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + claymore_modifier), claymore_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_GREATHAMMER = registerItem( "gobber_compat/gobber/gobber_greathammer", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + greathammer_modifier, greathammer_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + greathammer_modifier), greathammer_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_GREATAXE = registerItem( "gobber_compat/gobber/gobber_greataxe", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + greataxe_modifier, greataxe_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + greataxe_modifier), greataxe_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_CHAKRAM = registerItem( "gobber_compat/gobber/gobber_chakram", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + chakram_modifier, chakram_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + chakram_modifier), chakram_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_SCYTHE = registerItem( "gobber_compat/gobber/gobber_scythe", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + scythe_modifier, scythe_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + scythe_modifier), scythe_attackspeed, "gobber2:gobber2_ingot")); public static final Item GOBBER_HALBERD = registerItem( "gobber_compat/gobber/gobber_halberd", - new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + halberd_modifier, halberd_attackspeed, + new SimplySwordsSwordItem(ModToolMaterial.GOBBER, (int)(gobber_modifier + halberd_modifier), halberd_attackspeed, "gobber2:gobber2_ingot")); //GOBBER_NETHER public static final Item GOBBER_NETHER_LONGSWORD = registerItem( "gobber_compat/gobber_nether/gobber_nether_longsword", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + longsword_modifier, longsword_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + longsword_modifier), longsword_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_TWINBLADE = registerItem( "gobber_compat/gobber_nether/gobber_nether_twinblade", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + twinblade_modifier, twinblade_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + twinblade_modifier), twinblade_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_RAPIER = registerItem( "gobber_compat/gobber_nether/gobber_nether_rapier", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + rapier_modifier, rapier_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + rapier_modifier), rapier_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_KATANA = registerItem( "gobber_compat/gobber_nether/gobber_nether_katana", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + katana_modifier, katana_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + katana_modifier), katana_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_SAI = registerItem( "gobber_compat/gobber_nether/gobber_nether_sai", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + sai_modifier, sai_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + sai_modifier), sai_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_SPEAR = registerItem( "gobber_compat/gobber_nether/gobber_nether_spear", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + spear_modifier, spear_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + spear_modifier), spear_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_GLAIVE = registerItem( "gobber_compat/gobber_nether/gobber_nether_glaive", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + glaive_modifier, glaive_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + glaive_modifier), glaive_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_WARGLAIVE = registerItem( "gobber_compat/gobber_nether/gobber_nether_warglaive", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + warglaive_modifier, warglaive_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + warglaive_modifier), warglaive_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_CUTLASS = registerItem( "gobber_compat/gobber_nether/gobber_nether_cutlass", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + cutlass_modifier, cutlass_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + cutlass_modifier), cutlass_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_CLAYMORE = registerItem( "gobber_compat/gobber_nether/gobber_nether_claymore", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + claymore_modifier, claymore_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + claymore_modifier), claymore_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_GREATHAMMER = registerItem( "gobber_compat/gobber_nether/gobber_nether_greathammer", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + greathammer_modifier, greathammer_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + greathammer_modifier), greathammer_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_GREATAXE = registerItem( "gobber_compat/gobber_nether/gobber_nether_greataxe", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + greataxe_modifier, greataxe_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + greataxe_modifier), greataxe_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_CHAKRAM = registerItem( "gobber_compat/gobber_nether/gobber_nether_chakram", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + chakram_modifier, chakram_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + chakram_modifier), chakram_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_SCYTHE = registerItem( "gobber_compat/gobber_nether/gobber_nether_scythe", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + scythe_modifier, scythe_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + scythe_modifier), scythe_attackspeed, "gobber2:gobber2_ingot_nether")); public static final Item GOBBER_NETHER_HALBERD = registerItem( "gobber_compat/gobber_nether/gobber_nether_halberd", - new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, gobber_nether_modifier + halberd_modifier, halberd_attackspeed, + new GobberNetherSwordItem(ModToolMaterial.GOBBER_NETHER, (int)(gobber_nether_modifier + halberd_modifier), halberd_attackspeed, "gobber2:gobber2_ingot_nether")); //GOBBER_END public static final Item GOBBER_END_LONGSWORD = registerItem( "gobber_compat/gobber_end/gobber_end_longsword", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + longsword_modifier, longsword_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + longsword_modifier), longsword_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_TWINBLADE = registerItem( "gobber_compat/gobber_end/gobber_end_twinblade", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + twinblade_modifier, twinblade_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + twinblade_modifier), twinblade_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_RAPIER = registerItem( "gobber_compat/gobber_end/gobber_end_rapier", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + rapier_modifier, rapier_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + rapier_modifier), rapier_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_KATANA = registerItem( "gobber_compat/gobber_end/gobber_end_katana", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + katana_modifier, katana_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + katana_modifier), katana_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_SAI = registerItem( "gobber_compat/gobber_end/gobber_end_sai", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + sai_modifier, sai_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + sai_modifier), sai_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_SPEAR = registerItem( "gobber_compat/gobber_end/gobber_end_spear", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + spear_modifier, spear_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + spear_modifier), spear_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_GLAIVE = registerItem( "gobber_compat/gobber_end/gobber_end_glaive", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + glaive_modifier, glaive_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + glaive_modifier), glaive_attackspeed, "gobber2:gobber2_ingot_end")); - public static final Item GOBBER_END_WARGLAIVE = registerItem( "gobber_compat/gobber_end/gobber_end_warglaive", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + warglaive_modifier, warglaive_attackspeed, + public static final Item GOBBER_END_WARGLAIVE = registerItem("gobber_compat/gobber_end/gobber_end_warglaive", + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + warglaive_modifier), warglaive_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_CUTLASS = registerItem( "gobber_compat/gobber_end/gobber_end_cutlass", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + cutlass_modifier, cutlass_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + cutlass_modifier), cutlass_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_CLAYMORE = registerItem( "gobber_compat/gobber_end/gobber_end_claymore", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + claymore_modifier, claymore_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + claymore_modifier), claymore_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_GREATHAMMER = registerItem( "gobber_compat/gobber_end/gobber_end_greathammer", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + greathammer_modifier, greathammer_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + greathammer_modifier), greathammer_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_GREATAXE = registerItem( "gobber_compat/gobber_end/gobber_end_greataxe", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + greataxe_modifier, greataxe_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + greataxe_modifier), greataxe_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_CHAKRAM = registerItem( "gobber_compat/gobber_end/gobber_end_chakram", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + chakram_modifier, chakram_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + chakram_modifier), chakram_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_SCYTHE = registerItem( "gobber_compat/gobber_end/gobber_end_scythe", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + scythe_modifier, scythe_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + scythe_modifier), scythe_attackspeed, "gobber2:gobber2_ingot_end")); public static final Item GOBBER_END_HALBERD = registerItem( "gobber_compat/gobber_end/gobber_end_halberd", - new GobberEndSwordItem(ModToolMaterial.GOBBER_END, gobber_end_modifier + halberd_modifier, halberd_attackspeed, + new GobberEndSwordItem(ModToolMaterial.GOBBER_END, (int)(gobber_end_modifier + halberd_modifier), halberd_attackspeed, "gobber2:gobber2_ingot_end")); - + private static Item registerItem(String name, Item item) { - return Registry.register(Registries.ITEM, new Identifier(SimplySwords.MOD_ID, name), item); + return Registry.register(Registries.ITEM, Identifier.of(SimplySwords.MOD_ID, name), item); } @@ -278,4 +237,6 @@ public static void registerModItems() { SimplySwords.LOGGER.info("Registering Gobber compat Items for " + SimplySwords.MOD_ID); } -} + + */ +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMaterial.java b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMaterial.java index 631766c6..90afd5dd 100644 --- a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMaterial.java +++ b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMaterial.java @@ -1,18 +1,18 @@ package net.sweenus.simplyswords.compat.eldritch_end; import com.google.common.base.Suppliers; -import net.fabricmc.yarn.constants.MiningLevels; +import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ToolMaterial; import net.minecraft.recipe.Ingredient; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; +import net.minecraft.registry.tag.TagKey; import java.util.function.Supplier; public enum EldritchEndCompatMaterial implements ToolMaterial { + ; - ABERRATION(MiningLevels.NETHERITE, 3270, 15.0f, 5.0f, 30, Registries.ITEM.get(new Identifier("eldritch_end:aberration_heart"))); + //ABERRATION(MiningLevels.NETHERITE, 3270, 15.0f, 5.0f, 30, Registries.ITEM.get(Identifier.of("eldritch_end:aberration_heart"))); 1.21 private final int miningLevel; private final int itemDurability; @@ -46,8 +46,8 @@ public float getAttackDamage() { } @Override - public int getMiningLevel() { - return this.miningLevel; + public TagKey getInverseTag() { + return null; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMethods.java b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMethods.java index 81975135..5c337721 100644 --- a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMethods.java +++ b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatMethods.java @@ -1,35 +1,26 @@ package net.sweenus.simplyswords.compat.eldritch_end; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; -import net.sweenus.simplyswords.compat.EldritchEndCompat; -import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.registry.EffectRegistry; -import net.sweenus.simplyswords.registry.SoundRegistry; -import net.sweenus.simplyswords.util.HelperMethods; public class EldritchEndCompatMethods { public static void generateVoidcloakStacks(LivingEntity livingEntity) { + /* if (livingEntity instanceof PlayerEntity player) { ItemStack stack = player.getMainHandStack(); - if (player.age % 180 == 0 && Registries.ATTRIBUTE.get(new Identifier("eldritch_end:corruption")) != null) { - double corruption = livingEntity.getAttributeValue(Registries.ATTRIBUTE.get(new Identifier("eldritch_end:corruption"))); + if (player.age % 180 == 0 && Registries.ATTRIBUTE.get(Identifier.of("eldritch_end:corruption")) != null) { + double corruption = livingEntity.getAttributeValue(Registries.ATTRIBUTE.get(Identifier.of("eldritch_end:corruption"))); int maxStacks = ((int) corruption / 20); if (!stack.isEmpty() && (stack.isOf(EldritchEndCompat.DREADTIDE.get()))) { - HelperMethods.incrementStatusEffect(livingEntity, EffectRegistry.VOIDCLOAK.get(), 280, 1, maxStacks-1); + HelperMethods.incrementStatusEffect(livingEntity, EffectRegistry.VOIDCLOAK, 280, 1, maxStacks-1); livingEntity.getWorld().playSound(null, livingEntity.getBlockPos(), SoundRegistry.SPELL_FIRE.get(), livingEntity.getSoundCategory(), 0.1f, 1.4f); } } - int voidcallerCorruptionFrequency = (int) Config.getFloat("voidcallerCorruptionFrequency", "UniqueEffects", ConfigDefaultValues.voidcallerCorruptionFrequency); + int voidcallerCorruptionFrequency = Config.uniqueEffects.voidcaller.get().corruptionFrequency; if (player.age % voidcallerCorruptionFrequency == 0) { generateVoidhungerStacks(player, stack); } @@ -37,13 +28,13 @@ public static void generateVoidcloakStacks(LivingEntity livingEntity) { } public static void generateVoidhungerStacks(LivingEntity livingEntity, ItemStack stack) { - int voidcallerCorruptionPerTick = (int) Config.getFloat("voidcallerCorruptionPerTick", "UniqueEffects", ConfigDefaultValues.voidcallerCorruptionPerTick); - int voidcallerCorruptionDuration = (int) Config.getFloat("voidcallerCorruptionDuration", "UniqueEffects", ConfigDefaultValues.voidcallerCorruptionDuration); - int voidcallerCorruptionMax = (int) Config.getFloat("voidcallerCorruptionMax", "UniqueEffects", ConfigDefaultValues.voidcallerCorruptionMax); + int voidcallerCorruptionPerTick = Config.uniqueEffects.voidcaller.get().corruptionPerTick; + int voidcallerCorruptionDuration = Config.uniqueEffects.voidcaller.get().corruptionDuration; + int voidcallerCorruptionMax = Config.uniqueEffects.voidcaller.get().corruptionMax; if (!stack.isEmpty() && (stack.isOf(EldritchEndCompat.DREADTIDE.get()))) { - HelperMethods.incrementStatusEffect(livingEntity, EldritchEndCompatRegistry.VOIDHUNGER.get(), voidcallerCorruptionDuration, voidcallerCorruptionPerTick, voidcallerCorruptionMax); + HelperMethods.incrementStatusEffect(livingEntity, EldritchEndCompatRegistry.VOIDHUNGER, voidcallerCorruptionDuration, voidcallerCorruptionPerTick, voidcallerCorruptionMax); } + */ } - -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatRegistry.java b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatRegistry.java index 3d1b35eb..f61cbc6e 100644 --- a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatRegistry.java +++ b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/EldritchEndCompatRegistry.java @@ -1,25 +1,23 @@ package net.sweenus.simplyswords.compat.eldritch_end; import dev.architectury.registry.registries.DeferredRegister; -import dev.architectury.registry.registries.RegistrySupplier; -import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.entity.effect.StatusEffectCategory; -import net.minecraft.registry.Registries; import net.minecraft.registry.RegistryKeys; -import net.minecraft.util.Identifier; import net.sweenus.simplyswords.SimplySwords; public class EldritchEndCompatRegistry { public static final DeferredRegister EFFECT = DeferredRegister.create(SimplySwords.MOD_ID, RegistryKeys.STATUS_EFFECT); + /* 1.21 public static final RegistrySupplier VOIDHUNGER = EFFECT.register("voidhunger", () -> new VoidhungerEffect(StatusEffectCategory.HARMFUL, 1124687) - .addAttributeModifier(Registries.ATTRIBUTE.get(new Identifier("eldritch_end:corruption")), + .addAttributeModifier(Registries.ATTRIBUTE.get(Identifier.of("eldritch_end:corruption")), "03360b9d-c99b-4525-826a-ff5da528ebc2", 1.0, - EntityAttributeModifier.Operation.ADDITION)); + EntityAttributeModifier.Operation.ADD_VALUE)); + + */ } diff --git a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/VoidhungerEffect.java b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/VoidhungerEffect.java index 0e9e8136..13c1f2d1 100644 --- a/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/VoidhungerEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/compat/eldritch_end/VoidhungerEffect.java @@ -10,8 +10,9 @@ public VoidhungerEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { super.applyUpdateEffect(livingEntity, amplifier); + return true; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/config/Config.java b/common/src/main/java/net/sweenus/simplyswords/config/Config.java index a605905d..9cffbba4 100644 --- a/common/src/main/java/net/sweenus/simplyswords/config/Config.java +++ b/common/src/main/java/net/sweenus/simplyswords/config/Config.java @@ -3,6 +3,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import me.fzzyhmstrs.fzzy_config.api.ConfigApiJava; import java.io.File; import java.io.FileNotFoundException; @@ -16,170 +17,67 @@ import java.util.Map; import java.util.Scanner; -public class Config { - - public static File createFile(String path, String contents, boolean overwrite) { - File file = new File(path); - if (file.exists() && !overwrite) { - return file; - } - file.getParentFile().mkdirs(); - try { - file.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - file.setReadable(true); - file.setWritable(true); - file.setExecutable(true); - if (contents == null || "".equals(contents)) { - return file; - } - try (FileWriter writer = new FileWriter(file)) { - writer.write(contents); - } catch (IOException e) { - e.printStackTrace(); - } - return file; - } - - - public static String readFile(File file) { - String output = ""; - try (Scanner scanner = new Scanner(file)) { - scanner.useDelimiter("\\Z"); - output = scanner.next(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - return output; - } - - public static JsonObject getJsonObject(String json) { - try { - return new JsonParser().parse(json).getAsJsonObject(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - - - // -- Safe Config Fetching -- - // Allows safely fetching config values in a scenario where we do not know if they exist. - // EG. Addon mod for Simply Swords attempting to load config values before Simply Swords has initialised. - - private static final HashMap BOOLEAN = new LinkedHashMap<>(); - private static final HashMap FLOAT = new LinkedHashMap<>(); - private static final HashMap DOUBLE = new LinkedHashMap<>(); - private static final HashMap INT = new LinkedHashMap<>(); - - public static boolean getBoolean(String key, String parent, boolean defaultValue) { - //System.out.println("Trying to fetch config value for " + key + " from " + parent); - safeValueFetch("boolean", parent); - if (!BOOLEAN.isEmpty()) { - if (BOOLEAN.containsKey(key)) { - //System.out.println("Successfully fetched value for " + key + " : " + BOOLEAN.get(key)); - return BOOLEAN.get(key); - } - } - System.out.println("Failed to fetch config value for " + key + ". Loading default value.\nIt is recommended that you restart your game."); - return defaultValue; - } - - public static float getFloat(String key, String parent, float defaultValue) { - //System.out.println("Trying to fetch config value for " + key + " from " + parent); - safeValueFetch("float", parent); - if (!FLOAT.isEmpty()) { - if (FLOAT.containsKey(key)) { - //System.out.println("Successfully fetched value for " + key + " : " + FLOAT.get(key)); - return FLOAT.get(key); - } - } - System.out.println("Failed to fetch config value for " + key + ". Loading default value.\nIt is recommended that you restart your game."); - //System.out.print(FLOAT); - return defaultValue; - } - - public static double getDouble(String key, String parent, double defaultValue) { - safeValueFetch("double", parent); - if (!DOUBLE.isEmpty()) { - if (DOUBLE.containsKey(key)) - return DOUBLE.get(key); - } - System.out.println("Failed to fetch config value for " + key + ". Loading default value.\nIt is recommended that you restart your game."); - return defaultValue; - } - - public static int getInt(String key, String parent, int defaultValue) { - safeValueFetch("int", parent); - if (!INT.isEmpty()) { - if (INT.containsKey(key)) - return INT.get(key); - } - System.out.println("Failed to fetch config value for " + key + ". Loading default value.\nIt is recommended that you restart your game."); - return defaultValue; - } - - public static void safeValueFetch(String type, String parent) { - Path path = Paths.get("config/simplyswords_main/"); - JsonObject json = null; - if (Files.exists(path)) { - json = switch (parent) { - case "GemEffects" -> Config.getJsonObject(Config.readFile(new File("config/simplyswords_main/gem_effects.json5"))); - case "General" -> Config.getJsonObject(Config.readFile(new File("config/simplyswords_main/general.json5"))); - case "Loot" -> Config.getJsonObject(Config.readFile(new File("config/simplyswords_main/loot.json5"))); - case "RunicEffects" -> Config.getJsonObject(Config.readFile(new File("config/simplyswords_main/runic_effects.json5"))); - case "StatusEffects" -> Config.getJsonObject(Config.readFile(new File("config/simplyswords_main/status_effects.json5"))); - case "UniqueEffects" -> Config.getJsonObject(Config.readFile(new File("config/simplyswords_main/unique_effects.json5"))); - case "WeaponAttributes" -> Config.getJsonObject(Config.readFile(new File("config/simplyswords_main/weapon_attributes.json5"))); - default -> null; - }; - } - - if (json != null) { - - switch (type) { - case "boolean" -> { - for (Map.Entry entry : json.entrySet()) { - try { - BOOLEAN.put(entry.getKey(), entry.getValue().getAsBoolean()); - } catch (Exception e) { - //System.out.println(entry.getKey() + ": " + entry.getValue() + " is not a valid value. Skipping this entry."); - } - } - } - case "float" -> { - for (Map.Entry entry : json.entrySet()) { - try { - FLOAT.put(entry.getKey(), entry.getValue().getAsFloat()); - } catch (Exception e) { - //System.out.println(entry.getKey() + ": " + entry.getValue() + " is not a valid value. Skipping this entry."); - } - } - } - case "double" -> { - for (Map.Entry entry : json.entrySet()) { - try { - DOUBLE.put(entry.getKey(), entry.getValue().getAsDouble()); - } catch (Exception e) { - //System.out.println(entry.getKey() + ": " + entry.getValue() + " is not a valid value. Skipping this entry."); - } - } - } - case "int" -> { - for (Map.Entry entry : json.entrySet()) { - try { - INT.put(entry.getKey(), entry.getValue().getAsInt()); - } catch (Exception e) { - //System.out.println(entry.getKey() + ": " + entry.getValue() + " is not a valid value. Skipping this entry."); - } - } - } - } - } - } - - -} +public final class Config { + + public static void init() {} + + ////////// + //Loot config is registered internally in LootConfig. There were some load order issues otherwise. + ////////// + public static final GeneralConfig general = ConfigApiJava.registerAndLoadConfig(GeneralConfig::new); + public static final GemPowersConfig gemPowers = ConfigApiJava.registerAndLoadConfig(GemPowersConfig::new); + public static final StatusEffectsConfig statusEffects = ConfigApiJava.registerAndLoadConfig(StatusEffectsConfig::new); + public static final WeaponAttributesConfig weaponAttribute = ConfigApiJava.registerAndLoadConfig(WeaponAttributesConfig::new); + public static final UniqueEffectsConfig uniqueEffects = ConfigApiJava.registerAndLoadConfig(UniqueEffectsConfig::new); + +//Guide to Config Features + +//ValidatedThings + //Validated[Thing] is a fancy setting. In most cases you won't need it, I've used them sparingly where it had functional benefit + //Validation are suppliers and consumers. + // Retrieve the setting with [mySetting].get() + //update the setting internally (not recommended) with [mySetting].accept(newthing) + //ValidatedSet/List/Map are also themselves Set/List/Map, so you can call the normal collection methods like get() and containsKey() directly. + + +//ValidatedCondition + //ValidatedCondition is a wrapper around a setting that only allows interaction with the setting if a condition is met. + //in SS case, I've used it to gate mod compat settings behind checks for the mod being loaded. + //Example below. + //line1: the setting itself, using a `Validated[Thing] instead of a plain java type + //line2: wraps the setting in the condition + //line3: supplies the conditional boolean check + //line4: tooltip text for when the condition is failing. "Requires Gobber" etc. + //line5: Fallback value. This supplies the value to get from the setting if the condition fails, regardless of the config choices made underneath. + //So in this case, it will always return false if gobber isn't loaded. + //line6: adds a unique Caption to the setting button. Normally "Condition not met", in SS I changed it to "Disabled" + /* + public ValidatedCondition compatGobberEndWeaponsUnbreakable = new ValidatedBoolean(true) + .toCondition( + () -> Platform.isModLoaded("gobber2"), + Text.translatable("simplyswords.general.compatGobberEndWeaponsUnbreakable.condition"), + () -> false + ).withFailTitle(Text.translatable("simplyswords.general.compatGobberEndWeaponsUnbreakable.failTitle")); + */ + +//@Validated[Number].Restrict + //Works basically like the Cloth version of this annotation. Just make sure the [Number] type matches the actual number being restricted. + +//Disabled Things + //With fzzy config, I decided to make sets of disabled things, rather than a collection of booleans for everything being enabled + //if a things id is in the set, it's disabled + //Example + // ValidatedSet disabledPowers = ValidatedIdentifier.ofRegistryKey(GemPowerRegistry.REGISTRY.key()).toSet(); + //To see if a thing is enabled, I check that it's id isn't in the set + // !Config.gemPowers.disabledPowers.contains(entry.getId())); + +//Translation + //For repeated basic effects on gem powers like cooldown, duration, etc. I made common translation keys. + //These are referenced using the @Translation annotation + //Example + // @Translation(prefix = "simplyswords.config.basic_settings") + //the entire key will be "simplyswords.config.basic_settings.[fieldName]" + //Example + //"simplyswords.config.basic_settings.cooldown" + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/ConfigDefaultValues.java b/common/src/main/java/net/sweenus/simplyswords/config/ConfigDefaultValues.java deleted file mode 100644 index e8e0f28b..00000000 --- a/common/src/main/java/net/sweenus/simplyswords/config/ConfigDefaultValues.java +++ /dev/null @@ -1,615 +0,0 @@ -package net.sweenus.simplyswords.config; - -public class ConfigDefaultValues { - - - // -- UNIQUE EFFECTS -- - - public static float abilityAbsorptionCap = 20f; - - - public static float watcherChance = 5f; - public static float watcherRestoreAmount = 0.5f; - public static float watcherRadius = 8f; - public static float omenChance = 5f; - public static float omenAbsorptionCap = 20f; - public static float omenInstantKillThreshold = 0.25f; - - - public static float stealChance = 25f; - public static float stealDuration = 400f; - public static float stealInvisDuration = 120f; - public static float stealBlindDuration = 200f; - public static float stealRadius = 30f; - public static float stealSpellScaling = 2.6f; - - - public static float soulMeldChance = 75f; - public static float soulMeldDuration = 250f; - public static float soulMeldRadius = 5f; - - - public static float soulrendChance = 85f; - public static float soulrendDuration = 500f; - public static float soulrendDamageMulti = 3f; - public static float soulrendHealMulti = 0.5f; - public static float soulrendRadius = 10f; - public static float soulrendMaxStacks = 8f; - public static float soulrendDamageSpellScaling = 0.4f; - - - public static float ferocityChance = 75f; - public static float ferocityDuration = 100f; - public static float ferocityMaxStacks = 15f; - public static float ferocityStrengthTier = 2f; - - - public static float emberIreChance = 30f; - public static float emberIreDuration = 150f; - - - public static float volcanicFuryChance = 25f; - public static float volcanicFuryRadius = 3f; - public static float volcanicFuryCooldown = 300f; - public static float volcanicFuryDamage = 3f; - public static float volcanicFurySpellScaling = 1.4f; - - - public static float stormChance = 15f; - public static float stormRadius = 10f; - public static float stormCooldown = 700f; - public static float stormFrequency = 10f; - public static float stormDuration = 200f; - - - public static float plagueChance = 55f; - - - public static float brimstoneChance = 15f; - - - public static float brambleChance = 45f; - - - public static float soultetherRange = 32f; - public static float soultetherRadius = 8f; - public static float soultetherDuration = 120f; - public static float soultetherIgniteDuration = 120f; - public static float soultetherResistanceDuration = 60f; - - - public static float frostFuryCooldown = 380f; - public static float frostFuryRadius = 3f; - public static float frostFuryDamage = 18f; - public static float frostFuryChance = 15f; - public static float frostFuryDuration = 80f; - public static float frostFurySpellScaling = 1.4f; - - - public static float moltenRoarCooldown = 320f; - public static float moltenRoarRadius = 5f; - public static float moltenRoarKnockbackStrength = 5f; - public static float moltenRoarChance = 15f; - public static float moltenRoarDuration = 100f; - - - public static float frostShatterRadius = 3f; - public static float frostShatterDamage = 18f; - public static float frostShatterChance = 15f; - public static float frostShatterDuration = 80f; - public static float frostShatterSpellScaling = 1.7f; - - - public static float permafrostRadius = 4f; - public static float permafrostDamage = 1f; - public static float permafrostCooldown = 600f; - public static float permafrostDuration = 200f; - public static float permafrostSpellScaling = 0.9f; - - - public static float arcaneAssaultRadius = 6f; - public static float arcaneAssaultDamage = 1f; - public static float arcaneAssaultCooldown = 220; - public static float arcaneAssaultChance = 25f; - public static float arcaneAssaultDuration = 120f; - public static float arcaneAssaultSpellScaling = 1.4f; - - - public static float thunderBlitzRadius = 2f; - public static float thunderBlitzDamage = 3f; - public static float thunderBlitzCooldown = 250; - public static float thunderBlitzChance = 15f; - public static float thunderBlitzSpellScaling = 1.7f; - - - public static float stormJoltCooldown = 100f; - public static float stormJoltChance = 15f; - - - public static float soulAnguishRadius = 3f; - public static float soulAnguishAbsorptionCap = 8f; - public static float soulAnguishDamage = 4f; - public static float soulAnguishCooldown = 700; - public static float soulAnguishDuration = 200f; - public static float soulAnguishHeal = 0.5f; - public static float soulAnguishRange = 22f; - public static float soulAnguishSpellScaling = 1.6f; - - - public static float shockDeflectBlockDuration = 35f; - public static float shockDeflectDamage = 12f; - public static float shockDeflectCooldown = 90; - public static float shockDeflectParryDuration = 10f; - public static float shockDeflectSpellScaling = 2.3f; - - - public static float shadowmistCooldown = 200f; - public static float shadowmistChance = 25f; - public static float shadowmistDamageMulti = 0.8f; - public static float shadowmistBlindDuration = 60f; - public static float shadowmistRadius = 4f; - - - public static float abyssalStandardCooldown = 700; - public static float abyssalStandardChance = 15f; - public static float abyssalStandardDamage = 3f; - public static float abyssalStandardSpellScaling = 1.2f; - - - public static float righteousStandardCooldown = 700f; - public static float righteousStandardChance = 15f; - public static float righteousStandardDamage = 3f; - public static float righteousStandardSpellScaling = 1.1f; - public static float righteousStandardSpellScalingHeal = 1.3f; - - - public static float fatalFlickerCooldown = 175f; - public static float fatalFlickerChance = 15f; - public static float fatalFlickerRadius = 3f; - public static float fatalFlickerMaxStacks = 99f; - public static float fatalFlickerDashVelocity = 3f; - - - public static float smoulderCooldown = 80f; - public static float smoulderMaxStacks = 5f; - public static float smoulderHeal = 15f; - public static float smoulderSpellScaling = 0.4f; - - - public static float waxweaveCooldown = 1200f; - public static float waxweaveMaxStacks = 3f; - - public static float hivemindCooldown = 60f; - public static float hivemindDuration = 450f; - public static float hivemindDamage = 1.1f; - - public static float celestialSurgeCooldown = 120f; - public static float celestialSurgeDuration = 120f; - public static float celestialSurgeStacks = 6f; - public static float celestialSurgeDamageModifier = 0.40f; - public static float celestialSurgeLifestealModifier = 0.10f; - - public static float flickerFuryCooldown = 220f; - public static float flickerFuryDuration = 40f; - public static float flickerFuryDamage = 1.0f; - - public static float vortexDuration = 1200f; - public static float vortexMaxSize = 30f; - public static float vortexMaxStacks = 10f; - public static float vortexSpellScaling = 0.3f; - - public static float voidcallerDuration = 250f; - public static float voidcallerStartingTickFrequency = 12f; - public static float voidcallerDamageModifier = 1.0f; - public static float voidcallerCorruptionFrequency = 60f; - public static float voidcallerCorruptionPerTick = 1.0f; - public static float voidcallerCorruptionDuration = 1200f; - public static float voidcallerCorruptionMax = 100f; - - public static float emberstormSpreadCap = 6f; - public static float emberstormDamage = 5f; - public static float emberstormDetonationDamage = 15f; - public static float emberstormCooldown = 980f; - public static float emberstormMaxHaste = 10f; - public static float emberstormSpellScaling = 0.4f; - - public static float ribbonwrathCooldown = 40f; - public static float ribbonwrathResilienceAmplifier = 1f; - public static float ribbonwrathDamageBonusPercent = 0.95f; - - public static float magistormCooldown = 40f; - public static float magistormDuration = 400f; - public static float magistormRadius = 4f; - public static float magistormDamage = 3f; - public static float magistormRepairChance = 0.25f; - public static float magistormSpellScaling = 0.5f; - - public static float enigmaCooldown = 800f; - public static float enigmaDecayRate = 2f; - public static float enigmaChaseRadius = 16f; - - public static float magibladeCooldown = 35; - public static float magibladeSonicDistance = 16f; - public static float magibladeDamageModifier = 0.7f; - public static float magibladeRepelChance = 0.55f; - public static float magibladeRepelRadius = 4f; - - public static float magislamCooldown = 140; - public static float magislamRadius = 4f; - public static float magislamDamageModifier = 2.0f; - public static float magislamMagicChance = 35f; - public static float magislamMagicModifier = 0.5f; - - public static float astralShiftCooldown = 420; - public static float astralShiftDuration = 100f; - public static float astralShiftDamageModifier = 1.0f; - public static float astralShiftDamageMax = 300f; - public static float astralShiftChance = 5f; - - // -- WEAPON ATTRIBUTES -- // - - public static float longsword_positiveDamageModifier = 0.0f; - public static float twinblade_positiveDamageModifier = 0.0f; - public static float rapier_positiveDamageModifier = 0.0f; - public static float katana_positiveDamageModifier = 0.0f; - public static float sai_positiveDamageModifier = 0.0f; - public static float spear_positiveDamageModifier = 0.0f; - public static float glaive_positiveDamageModifier = 0.0f; - public static float warglaive_positiveDamageModifier = 0.0f; - public static float cutlass_positiveDamageModifier = 0.0f; - public static float claymore_positiveDamageModifier = 2.0f; - public static float greataxe_positiveDamageModifier = 3.0f; - public static float greathammer_positiveDamageModifier = 4.0f; - public static float chakram_positiveDamageModifier = 0.0f; - public static float scythe_positiveDamageModifier = 1.0f; - public static float halberd_positiveDamageModifier = 3.0f; - - - public static float longsword_negativeDamageModifier = 0.0f; - public static float twinblade_negativeDamageModifier = 0.0f; - public static float rapier_negativeDamageModifier = 1.0f; - public static float katana_negativeDamageModifier = 0.0f; - public static float sai_negativeDamageModifier = 3.0f; - public static float spear_negativeDamageModifier = 0.0f; - public static float glaive_negativeDamageModifier = 0.0f; - public static float warglaive_negativeDamageModifier = 0.0f; - public static float cutlass_negativeDamageModifier = 0.0f; - public static float claymore_negativeDamageModifier = 0.0f; - public static float greataxe_negativeDamageModifier = 0.0f; - public static float greathammer_negativeDamageModifier = 0.0f; - public static float chakram_negativeDamageModifier = 1.0f; - public static float scythe_negativeDamageModifier = 0.0f; - public static float halberd_negativeDamageModifier = 0.0f; - - - public static float iron_damageModifier = 3.0f; - public static float gold_damageModifier = 3.0f; - public static float diamond_damageModifier = 3.0f; - public static float netherite_damageModifier = 3.0f; - public static float runic_damageModifier = 3.0f; - public static float adamantite_damageModifier = 3.0f; - public static float aquarium_damageModifier = 3.0f; - public static float banglum_damageModifier = 3.0f; - public static float carmot_damageModifier = 3.0f; - public static float kyber_damageModifier = 3.0f; - public static float mythril_damageModifier = 3.0f; - public static float orichalcum_damageModifier = 3.0f; - public static float durasteel_damageModifier = 3.0f; - public static float osmium_damageModifier = 3.0f; - public static float prometheum_damageModifier = 3.0f; - public static float quadrillum_damageModifier = 3.0f; - public static float runite_damageModifier = 3.0f; - public static float starPlatinum_damageModifier = 3.0f; - public static float bronze_damageModifier = 3.0f; - public static float copper_damageModifier = 3.0f; - public static float steel_damageModifier = 3.0f; - public static float palladium_damageModifier = 3.0f; - public static float stormyx_damageModifier = 3.0f; - public static float celestium_damageModifier = 3.0f; - public static float metallurgium_damageModifier = 3.0f; - public static float gobber_damageModifier = 1.0f; - public static float gobberNether_damageModifier = 3.0f; - public static float gobberEnd_damageModifier = 6.0f; - - - public static float longsword_attackSpeed = -2.4f; - public static float twinblade_attackSpeed = -2.0f; - public static float rapier_attackSpeed = -1.8f; - public static float katana_attackSpeed = -2.0f; - public static float sai_attackSpeed = -1.5f; - public static float spear_attackSpeed = -2.7f; - public static float glaive_attackSpeed = -2.6f; - public static float warglaive_attackSpeed = -2.2f; - public static float cutlass_attackSpeed = -2.0f; - public static float claymore_attackSpeed = -2.8f; - public static float greataxe_attackSpeed = -3.1f; - public static float greathammer_attackSpeed = -3.2f; - public static float chakram_attackSpeed = -3.0f; - public static float scythe_attackSpeed = -2.7f; - public static float halberd_attackSpeed = -2.8f; - - - public static float brimstone_damageModifier = 6.0f; - public static float thewatcher_damageModifier = 6.0f; - public static float stormsedge_damageModifier = 3.0f; - public static float stormbringer_damageModifier = 3.0f; - public static float swordonastick_damageModifier = 5.0f; - public static float bramblethorn_damageModifier = 3.0f; - public static float watchingwarglaive_damageModifier = 3.0f; - public static float longswordofplague_damageModifier = 3.0f; - public static float emberblade_damageModifier = 3.0f; - public static float hearthflame_damageModifier = 8.0f; - public static float soulkeeper_damageModifier = 8.0f; - public static float twistedblade_damageModifier = 4.0f; - public static float soulstealer_damageModifier = 0.0f; - public static float soulrender_damageModifier = 4.0f; - public static float mjolnir_damageModifier = 3.0f; - public static float soulpyre_damageModifier = 7.0f; - public static float frostfall_damageModifier = 5.0f; - public static float moltenedge_damageModifier = 4.0f; - public static float livyatan_damageModifier = 4.0f; - public static float icewhisper_damageModifier = 7.0f; - public static float arcanethyst_damageModifier = 7.0f; - public static float thunderbrand_damageModifier = 7.0f; - public static float lichblade_damageModifier = 7.0f; - public static float shadowsting_damageModifier = -2.0f; - public static float sunfire_damageModifier = 3.0f; - public static float harbinger_damageModifier = 3.0f; - public static float whisperwind_damageModifier = 3.0f; - public static float emberlash_damageModifier = 0.0f; - public static float waxweaver_damageModifier = 6.0f; - public static float hiveheart_damageModifier = 7.0f; - public static float starsedge_damageModifier = 3.0f; - public static float wickpiercer_damageModifier = 4.0f; - public static float dreadtide_damageModifier = 3.0f; - public static float tempest_damageModifier = 0.0f; - public static float flamewind_damageModifier = 3.0f; - public static float ribboncleaver_damageModifier = 7.0f; - public static float magiscythe_damageModifier = 4.0f; - public static float enigma_damageModifier = 7.0f; - public static float magispear_damageModifier = 4.0f; - public static float magiblade_damageModifier = 3.0f; - public static float caelestis_damageModifier = 6.0f; - - - public static float brimstone_attackSpeed = -2.8f; - public static float thewatcher_attackSpeed = -2.8f; - public static float stormsedge_attackSpeed = -2.0f; - public static float stormbringer_attackSpeed = -2.4f; - public static float swordonastick_attackSpeed = -2.6f; - public static float bramblethorn_attackSpeed = -1.8f; - public static float watchingwarglaive_attackSpeed = -2.2f; - public static float longswordofplague_attackSpeed = -2.4f; - public static float emberblade_attackSpeed = -2.4f; - public static float hearthflame_attackSpeed = -3.2f; - public static float soulkeeper_attackSpeed = -2.9f; - public static float twistedblade_attackSpeed = -2.6f; - public static float soulstealer_attackSpeed = -1.5f; - public static float soulrender_attackSpeed = -2.4f; - public static float mjolnir_attackSpeed = -3.0f; - public static float soulpyre_attackSpeed = -3.0f; - public static float frostfall_attackSpeed = -2.5f; - public static float moltenedge_attackSpeed = -2.1f; - public static float livyatan_attackSpeed = -2.1f; - public static float icewhisper_attackSpeed = -2.7f; - public static float arcanethyst_attackSpeed = -2.7f; - public static float thunderbrand_attackSpeed = -2.7f; - public static float lichblade_attackSpeed = -3.1f; - public static float shadowsting_attackSpeed = -1.7f; - public static float sunfire_attackSpeed = -2.4f; - public static float harbinger_attackSpeed = -2.4f; - public static float whisperwind_attackSpeed = -2.0f; - public static float emberlash_attackSpeed = -1.5f; - public static float waxweaver_attackSpeed = -2.9f; - public static float hiveheart_attackSpeed = -3.0f; - public static float starsedge_attackSpeed = -2.0f; - public static float wickpiercer_attackSpeed = -2.1f; - public static float dreadtide_attackSpeed = -2.0f; - public static float tempest_attackSpeed = -2.5f; - public static float flamewind_attackSpeed = -2.6f; - public static float ribboncleaver_attackSpeed = -3.2f; - public static float magiscythe_attackSpeed = -2.4f; - public static float enigma_attackSpeed = -3.2f; - public static float magispear_attackSpeed = -2.5f; - public static float magiblade_attackSpeed = -2.0f; - public static float caelestis_attackSpeed = -2.9f; - - // -- STATUS EFFECTS -- - - public static int echoDamage = 2; - - // -- RUNIC EFFECTS -- - - public static boolean enableActiveDefence = true; - public static boolean enableFloat = true; - public static boolean enableGreaterFloat = true; - public static boolean enableFreeze = true; - public static boolean enableShielding = true; - public static boolean enableGreaterShielding = true; - public static boolean enableSlow = true; - public static boolean enableGreaterSlow = true; - public static boolean enableStoneskin = true; - public static boolean enableGreaterStoneskin = true; - public static boolean enableSwiftness = true; - public static boolean enableGreaterSwiftness = true; - public static boolean enableTrailblaze = true; - public static boolean enableGreaterTrailblaze = true; - public static boolean enableWeaken = true; - public static boolean enableGreaterWeaken = true; - public static boolean enableZephyr = true; - public static boolean enableGreaterZephyr = true; - public static boolean enableFrostWard = true; - public static boolean enableWildfire = true; - public static boolean enableUnstable = true; - public static boolean enableMomentum = true; - public static boolean enableGreaterMomentum = true; - public static boolean enableImbued = true; - public static boolean enableGreaterImbued = true; - public static boolean enablePincushion = true; - public static boolean enableGreaterPincushion = true; - public static boolean enableWard = true; - public static boolean enableImmolate = true; - - - - public static float swiftnessChance = 15f; - public static float swiftnessDuration= 300f; - - - public static float slowChance = 50f; - public static float slowDuration= 50f; - - - public static float poisonChance = 15f; - public static float poisonDuration = 150f; - - - public static float freezeChance = 15f; - public static float freezeDuration = 120f; - - - public static float wildfireChance = 10f; - public static float wildfireDuration = 180f; - public static float wildfireRadius = 10; - - - public static float floatChance = 15f; - public static float floatDuration = 50f; - - - public static float zephyrChance = 15f; - public static float zephyrDuration = 180f; - - - public static float shieldingChance = 15f; - public static float shieldingDuration = 120f; - - - public static float stoneskinChance = 15f; - public static float stoneskinDuration = 60f; - - - public static float trailblazeChance = 15f; - public static float trailblazeDuration = 120; - - - public static float weakenChance = 15f; - public static float weakenDuration = 120f; - - - public static float unstableFrequency = 140f; - public static float unstableDuration = 140f; - - - public static float activeDefenceFrequency = 20f; - public static float activeDefenceRadius = 5f; - - - public static float frostWardFrequency = 20f; - public static float frostWardRadius = 5f; - public static float frostWardDuration = 60f; - - - public static float momentumCooldown = 140f; - - - public static float imbuedChance = 15; - - // -- LOOT CONFIG -- - - public static boolean enableLootDrops = true; - - public static boolean enableLootInVillages = false; - public static boolean enableTheWatcher = true; - - public static float standardLootTableWeight = 0.01f; - - public static float rareLootTableWeight = 0.004f; - - public static float runicLootTableWeight = 0.007f; - - public static float uniqueLootTableWeight = 0.001f; - public static boolean enableWatchingWarglaive = true; - public static boolean enableContainedRemnants = true; - public static boolean enableLongswordOfThePlague = true; - public static boolean enableSwordOnAStick = true; - public static boolean enableBramblethorn = true; - public static boolean enableStormsEdge = true; - public static boolean enableStormbringer = true; - public static boolean enableMjolnir = true; - public static boolean enableEmberblade = true; - public static boolean enableHearthflame = true; - public static boolean enableTwistedBlade = true; - public static boolean enableSoulrender = true; - public static boolean enableSoulpyre = true; - public static boolean enableSoulkeeper = true; - public static boolean enableSoulstealer = true; - public static boolean enableFrostfall = true; - public static boolean enableMoltenEdge = true; - public static boolean enableLivyatan = true; - public static boolean enableIcewhisper = true; - public static boolean enableArcanethyst = true; - public static boolean enableThunderbrand = true; - public static boolean enableBrimstone = true; - public static boolean enableSlumberingLichblade = true; - public static boolean enableShadowsting = true; - public static boolean enableDormantRelic = true; - public static boolean enableWhisperwind = true; - public static boolean enableEmberlash = true; - public static boolean enableWaxweaver = true; - public static boolean enableHiveheart = true; - public static boolean enableStarsEdge = true; - public static boolean enableWickpiercer = true; - public static boolean enableTempest = true; - public static boolean enableFlamewind = true; - public static boolean enableRibboncleaver = true; - public static boolean enableCaelestis = true; - - // -- GENERAL CONFIG -- - - public static boolean enableWeaponImpactSounds = true; - public static float weaponImpactSoundsVolume = 0.3f; - public static boolean enableWeaponFootfalls = true; - public static boolean enablePassiveParticles = true; - - public static boolean enableUniqueGemSockets = true; - public static boolean compatGobberEndWeaponsUnbreakable = true; - - public static boolean compatEnableSpellPowerScaling = true; - - // -- GEM EFFECTS -- - - public static boolean enableEcho = true; - public static boolean enableBerserk = true; - public static boolean enableRadiance = true; - public static boolean enableOnslaught = true; - public static boolean enableNullification = true; - - - public static boolean enablePrecise = true; - - public static int preciseChance = 30; - public static boolean enableMighty = true; - - public static int mightyChance = 30; - public static boolean enableStealthy = true; - - public static int stealthyChance = 30; - public static boolean enableRenewed = true; - - public static int renewedChance = 30; - public static boolean enableAccelerant = true; - public static boolean enableLeaping = true; - - public static int leapingChance = 65; - public static boolean enableSpellshield = true; - - public static int spellshieldChance = 15; - public static boolean enableSpellforged = true; - public static boolean enableSoulshock = true; - public static boolean enableSpellStandard = true; - public static boolean enableWarStandard = true; - public static boolean enableDeception = true; - - -} diff --git a/common/src/main/java/net/sweenus/simplyswords/config/ConfigWrapper.java b/common/src/main/java/net/sweenus/simplyswords/config/ConfigWrapper.java deleted file mode 100644 index 855c4b08..00000000 --- a/common/src/main/java/net/sweenus/simplyswords/config/ConfigWrapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.sweenus.simplyswords.config; - -import me.shedaniel.autoconfig.annotation.Config; -import me.shedaniel.autoconfig.annotation.ConfigEntry; -import me.shedaniel.autoconfig.serializer.PartitioningSerializer; -import net.sweenus.simplyswords.SimplySwords; - -@Config(name = SimplySwords.MOD_ID +"_main") -@Config.Gui.Background("cloth-config2:transparent") -public class ConfigWrapper extends PartitioningSerializer.GlobalData { - @ConfigEntry.Category("general") - @ConfigEntry.Gui.TransitiveObject - public GeneralConfig general = new GeneralConfig(); - @ConfigEntry.Category("loot") - @ConfigEntry.Gui.TransitiveObject - public LootConfig loot = new LootConfig(); - @ConfigEntry.Category("gem_effects") - @ConfigEntry.Gui.TransitiveObject - public GemEffectsConfig gem_effects = new GemEffectsConfig(); - @ConfigEntry.Category("runic_effects") - @ConfigEntry.Gui.TransitiveObject - public RunicEffectsConfig runic_effects = new RunicEffectsConfig(); - @ConfigEntry.Category("status_effects") - @ConfigEntry.Gui.TransitiveObject - public StatusEffectsConfig status_effects = new StatusEffectsConfig(); - @ConfigEntry.Category("unique_effects") - @ConfigEntry.Gui.TransitiveObject - public UniqueEffectsConfig unique_effects = new UniqueEffectsConfig(); - @ConfigEntry.Category("weapon_attributes") - @ConfigEntry.Gui.TransitiveObject - public WeaponAttributesConfig weapon_attributes = new WeaponAttributesConfig(); -} diff --git a/common/src/main/java/net/sweenus/simplyswords/config/GemEffectsConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/GemEffectsConfig.java deleted file mode 100644 index a6fb3925..00000000 --- a/common/src/main/java/net/sweenus/simplyswords/config/GemEffectsConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.sweenus.simplyswords.config; - -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -import me.shedaniel.autoconfig.annotation.ConfigEntry; - -@Config(name = "gem_effects") -public class GemEffectsConfig implements ConfigData { - - @ConfigEntry.Gui.PrefixText - public boolean enableEcho = true; - public boolean enableBerserk = true; - public boolean enableRadiance = true; - public boolean enableOnslaught = true; - public boolean enableNullification = true; - - @ConfigEntry.Gui.PrefixText - public boolean enablePrecise = true; - @ConfigEntry.BoundedDiscrete(max = 100) - public int preciseChance = 30; - public boolean enableMighty = true; - @ConfigEntry.BoundedDiscrete(max = 100) - public int mightyChance = 30; - public boolean enableStealthy = true; - @ConfigEntry.BoundedDiscrete(max = 100) - public int stealthyChance = 30; - public boolean enableRenewed = true; - @ConfigEntry.BoundedDiscrete(max = 100) - public int renewedChance = 30; - public boolean enableAccelerant = true; - public boolean enableLeaping = true; - @ConfigEntry.BoundedDiscrete(max = 100) - public int leapingChance = 65; - public boolean enableSpellshield = true; - @ConfigEntry.BoundedDiscrete(max = 100) - public int spellshieldChance = 15; - public boolean enableSpellforged = true; - public boolean enableSoulshock = true; - public boolean enableSpellStandard = true; - public boolean enableWarStandard = true; - public boolean enableDeception = true; - -} diff --git a/common/src/main/java/net/sweenus/simplyswords/config/GemPowersConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/GemPowersConfig.java new file mode 100644 index 00000000..8569eb3c --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/config/GemPowersConfig.java @@ -0,0 +1,118 @@ +package net.sweenus.simplyswords.config; + +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.config.Config; +import me.fzzyhmstrs.fzzy_config.config.ConfigSection; +import me.fzzyhmstrs.fzzy_config.validation.collection.ValidatedSet; +import me.fzzyhmstrs.fzzy_config.validation.minecraft.ValidatedIdentifier; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedCondition; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.SimplySwords; +import net.sweenus.simplyswords.power.powers.ActiveDefencePower; +import net.sweenus.simplyswords.power.powers.FloatPower; +import net.sweenus.simplyswords.power.powers.FreezePower; +import net.sweenus.simplyswords.power.powers.FrostWardPower; +import net.sweenus.simplyswords.power.powers.ImbuedPower; +import net.sweenus.simplyswords.power.powers.MomentumPower; +import net.sweenus.simplyswords.power.powers.ShieldingPower; +import net.sweenus.simplyswords.power.powers.SlowPower; +import net.sweenus.simplyswords.power.powers.StoneskinPower; +import net.sweenus.simplyswords.power.powers.SwiftnessPower; +import net.sweenus.simplyswords.power.powers.TrailblazePower; +import net.sweenus.simplyswords.power.powers.UnstablePower; +import net.sweenus.simplyswords.power.powers.WeakenPower; +import net.sweenus.simplyswords.power.powers.WildfirePower; +import net.sweenus.simplyswords.power.powers.ZephyrPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; + +public class GemPowersConfig extends Config { + + public GemPowersConfig() { + super(Identifier.of(SimplySwords.MOD_ID, "gem_powers")); + } + + @SuppressWarnings("deprecation") + public ValidatedSet disabledPowers = ValidatedIdentifier.ofRegistryKey(GemPowerRegistry.REGISTRY.key()).toSet(); + + public ActiveDefencePower.Settings activeDefence = new ActiveDefencePower.Settings(); + public FloatPower.Settings floating = new FloatPower.Settings(); + public FreezePower.Settings freeze = new FreezePower.Settings(); + public FrostWardPower.Settings frostWard = new FrostWardPower.Settings(); + public ImbuedPower.Settings imbued = new ImbuedPower.Settings(); + public MomentumPower.Settings momentum = new MomentumPower.Settings(); + public ShieldingPower.Settings shielding = new ShieldingPower.Settings(); + public SlowPower.Settings slow = new SlowPower.Settings(); + public StoneskinPower.Settings stoneskin = new StoneskinPower.Settings(); + public SwiftnessPower.Settings swiftness = new SwiftnessPower.Settings(); + public TrailblazePower.Settings trailblaze = new TrailblazePower.Settings(); + public UnstablePower.Settings unstable = new UnstablePower.Settings(); + public WeakenPower.Settings weaken = new WeakenPower.Settings(); + public WildfirePower.Settings wildfire = new WildfirePower.Settings(); + public ZephyrPower.Settings zephyr = new ZephyrPower.Settings(); + + public SimplySkills simplySkills = new SimplySkills(); + + public static class SimplySkills extends ConfigSection { + + public ValidatedCondition preciseChance = createCondition(30); + public ValidatedCondition mightyChance = createCondition(30); + public ValidatedCondition stealthyChance = createCondition(30); + public ValidatedCondition renewedChance = createCondition(30); + public ValidatedCondition leapingChance = createCondition(65); + public ValidatedCondition spellshieldChance = createCondition(15); + + private ValidatedCondition createCondition(int defaultValue) { + return new ValidatedInt(defaultValue, 100, 0) + .toCondition( + () -> Platform.isModLoaded("simplyskills"), + Text.translatable("simplyswords.gem_powers.simplySkills.condition"), + () -> defaultValue + ).withFailTitle(Text.translatable("simplyswords.gem_powers.simplySkills.failTitle")); + } + } + +//Settings + //Settings blocks are all stored within the corresponding power. + //some of them override predefined basic settings classes; Fzzy Config works with inherited settings as well as ones directly in the subclass + //example + //type declaration: Settings extends TooltipSettings, if nothing else. This allows tooltips of what the power is to appear in-game + //constructor: TooltipSettings require a supplier of TooltipAppender. + //Conveniently, RegistrySupplier is a supplier, and GemPower is a TooltipAppender! + //settings: in most places I've restricted the settings so non-functional numbers aren't possible (like negative durations). + //Also, most power settings share names, so the @Translation mentioned in Config is here too + //Reference into a settings like + //int f = Config.gemPowers.activeDefence.frequency; + /* + public static class Settings extends TooltipSettings { + + public Settings() { + super(GemPowerRegistry.ACTIVE_DEFENCE); + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 1) + public int frequency = 20; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedDouble.Restrict(min = 0.0) + public double radius = 5.0; + } + */ + + //example 2, simple settings + //this exmaple uses one of the predefined settings classes. Many powers use the exact same set of 2 or 3 settings. + //simply provide the chance and duration and the super class handles all the config stuff for you + + /* + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 50, GemPowerRegistry.FLOAT); + } + } + */ + + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/GeneralConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/GeneralConfig.java index 6542169c..a82670a2 100644 --- a/common/src/main/java/net/sweenus/simplyswords/config/GeneralConfig.java +++ b/common/src/main/java/net/sweenus/simplyswords/config/GeneralConfig.java @@ -1,22 +1,41 @@ package net.sweenus.simplyswords.config; -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -import me.shedaniel.autoconfig.annotation.ConfigEntry; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.config.Config; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedBoolean; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedCondition; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.SimplySwords; -@Config(name = "general") -public class GeneralConfig implements ConfigData { +import static net.sweenus.simplyswords.SimplySwords.minimumSpellPowerVersion; +public class GeneralConfig extends Config { + + public GeneralConfig() { + super(Identifier.of(SimplySwords.MOD_ID, "general")); + } public boolean enableWeaponImpactSounds = true; + @ValidatedFloat.Restrict(min = 0f, max = 1f) public float weaponImpactSoundsVolume = 0.3f; public boolean enableWeaponFootfalls = true; public boolean enablePassiveParticles = true; - @ConfigEntry.Gui.Tooltip public boolean enableUniqueGemSockets = true; - public boolean compatGobberEndWeaponsUnbreakable = true; - @ConfigEntry.Gui.Tooltip - public boolean compatEnableSpellPowerScaling = true; + public ValidatedCondition compatGobberEndWeaponsUnbreakable = new ValidatedBoolean(true) + .toCondition( + () -> Platform.isModLoaded("gobber2"), + Text.translatable("simplyswords.general.compatGobberEndWeaponsUnbreakable.condition"), + () -> false + ).withFailTitle(Text.translatable("simplyswords.general.compatGobberEndWeaponsUnbreakable.failTitle")); + + public ValidatedCondition compatEnableSpellPowerScaling = new ValidatedBoolean(true) + .toCondition( + () -> SimplySwords.passVersionCheck("spell_power", minimumSpellPowerVersion), + Text.translatable("simplyswords.general.compatEnableSpellPowerScaling.condition"), + () -> false + ).withFailTitle(Text.translatable("simplyswords.general.compatEnableSpellPowerScaling.failTitle")); -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/LootConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/LootConfig.java index a405a8fd..f741f5ff 100644 --- a/common/src/main/java/net/sweenus/simplyswords/config/LootConfig.java +++ b/common/src/main/java/net/sweenus/simplyswords/config/LootConfig.java @@ -1,63 +1,84 @@ package net.sweenus.simplyswords.config; -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -import me.shedaniel.autoconfig.annotation.ConfigEntry; - -@Config(name = "loot") -public class LootConfig implements ConfigData { - - @ConfigEntry.Gui.PrefixText - @ConfigEntry.Gui.Tooltip - public boolean enableLootDrops = true; - @ConfigEntry.Gui.Tooltip - public boolean enableLootInVillages = false; - public boolean enableTheWatcher = true; - @ConfigEntry.Gui.Tooltip - public float standardLootTableWeight = 0.01f; - @ConfigEntry.Gui.Tooltip - public float rareLootTableWeight = 0.004f; - @ConfigEntry.Gui.Tooltip - public float runicLootTableWeight = 0.007f; - @ConfigEntry.Gui.Tooltip - public float uniqueLootTableWeight = 0.001f; - @ConfigEntry.Gui.Tooltip - public boolean enableContainedRemnants = true; - public boolean enableWatchingWarglaive = true; - public boolean enableLongswordOfThePlague = true; - public boolean enableSwordOnAStick = true; - public boolean enableBramblethorn = true; - public boolean enableStormsEdge = true; - public boolean enableStormbringer = true; - public boolean enableMjolnir = true; - public boolean enableEmberblade = true; - public boolean enableHearthflame = true; - public boolean enableTwistedBlade = true; - public boolean enableSoulrender = true; - public boolean enableSoulpyre = true; - public boolean enableSoulkeeper = true; - public boolean enableSoulstealer = true; - public boolean enableFrostfall = true; - public boolean enableMoltenEdge = true; - public boolean enableLivyatan = true; - public boolean enableIcewhisper = true; - public boolean enableArcanethyst = true; - public boolean enableThunderbrand = true; - public boolean enableBrimstone = true; - public boolean enableSlumberingLichblade = true; - public boolean enableShadowsting = true; - public boolean enableDormantRelic = true; - public boolean enableWhisperwind = true; - public boolean enableEmberlash = true; - public boolean enableWaxweaver = true; - public boolean enableHiveheart = true; - public boolean enableStarsEdge = true; - public boolean enableWickpiercer = true; - public boolean enableTempest = true; - public boolean enableFlamewind = true; - public boolean enableRibboncleaver = true; - public boolean enableCaelestis = true; - - - -} +import com.google.common.collect.ImmutableMap; +import me.fzzyhmstrs.fzzy_config.annotations.Action; +import me.fzzyhmstrs.fzzy_config.annotations.RequiresAction; +import me.fzzyhmstrs.fzzy_config.api.ConfigApiJava; +import me.fzzyhmstrs.fzzy_config.config.Config; +import me.fzzyhmstrs.fzzy_config.validation.collection.ValidatedIdentifierMap; +import me.fzzyhmstrs.fzzy_config.validation.collection.ValidatedSet; +import me.fzzyhmstrs.fzzy_config.validation.minecraft.ValidatedIdentifier; +import me.fzzyhmstrs.fzzy_config.validation.minecraft.ValidatedRegistryType; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedBoolean; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedCondition; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import net.minecraft.item.Item; +import net.minecraft.loot.LootTables; +import net.minecraft.loot.context.LootContextTypes; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.SimplySwords; +import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; + +@RequiresAction(action = Action.RELOAD_DATA) +public class LootConfig extends Config { + + public LootConfig() { + super(Identifier.of(SimplySwords.MOD_ID, "loot")); + } + + public static final LootConfig INSTANCE = ConfigApiJava.registerAndLoadConfig(LootConfig::new); + + public ValidatedBoolean enableLootDrops = new ValidatedBoolean(true); + public ValidatedBoolean enableLootInVillages = new ValidatedBoolean(false); + + public ValidatedFloat standardLootTableWeight = new ValidatedFloat(0.01f, 1f, 0f); + public ValidatedFloat rareLootTableWeight = new ValidatedFloat(0.004f, 1f, 0f); + public ValidatedFloat runicLootTableWeight = new ValidatedFloat(0.007f, 1f, 0f); + public ValidatedFloat uniqueLootTableWeight = new ValidatedFloat(0.001f, 1f, 0f); + + //contained remnants will be disabled by default if the unique loot chance is set to 0 + public ValidatedCondition enableContainedRemnants = new ValidatedBoolean() + .toCondition( + () -> uniqueLootTableWeight.get() > 0f, + Text.translatable("simplyswords.loot.enableContainedRemnants.condition"), + () -> false + ).withFailTitle(Text.translatable("simplyswords.loot.enableContainedRemnants.failTitle")); + + //Unique table options are copied over from the previous sub-config system. + //This map only allows non-block loot table ids, and chances clamped 0f to 1f. + //if you ever use another toDynamicKey, the predicate id should be unique unless the predicate is exactly the same (non-block) + public ValidatedIdentifierMap uniqueLootTableOptions = new ValidatedIdentifierMap.Builder() + .keyHandler(ValidatedIdentifier.ofDynamicKey(LootTables.END_CITY_TREASURE_CHEST.getValue(), RegistryKeys.LOOT_TABLE, "simplyswords_no_blocks", (id, e) -> e.value().getType() != LootContextTypes.BLOCK)) + .valueHandler(new ValidatedFloat(0.01f, 1f, 0f)) + .defaults( + ImmutableMap.builder() + .put(Identifier.ofVanilla("entities/wither"), 0.05f) + .put(Identifier.ofVanilla("entities/ender_dragon"), 0.5f) + .put(Identifier.ofVanilla("chests/ruined_portal"), 0f) + .put(Identifier.ofVanilla("chests/village/village_armorer"), 0f) + .put(Identifier.ofVanilla("chests/village/village_butcher"), 0f) + .put(Identifier.ofVanilla("chests/village/village_cartographer"), 0f) + .put(Identifier.ofVanilla("chests/village/village_desert_house"), 0f) + .put(Identifier.ofVanilla("chests/village/village_fisher"), 0f) + .put(Identifier.ofVanilla("chests/village/village_fletcher"), 0f) + .put(Identifier.ofVanilla("chests/village/village_mason"), 0f) + .put(Identifier.ofVanilla("chests/village/village_plains_house"), 0f) + .put(Identifier.ofVanilla("chests/village/village_savanna_house"), 0f) + .put(Identifier.ofVanilla("chests/village/village_shepherd"), 0f) + .put(Identifier.ofVanilla("chests/village/village_snowy_house"), 0f) + .put(Identifier.ofVanilla("chests/village/village_taiga_house"), 0f) + .put(Identifier.ofVanilla("chests/village/village_tannery"), 0f) + .put(Identifier.ofVanilla("chests/village/village_temple"), 0f) + .put(Identifier.ofVanilla("chests/village/village_toolsmith"), 0f) + .put(Identifier.ofVanilla("chests/village/village_weaponsmith"), 0f) + .build() + ).build(); + + public ValidatedSet disabledUniqueWeaponLoot = ValidatedRegistryType.of(ItemsRegistry.ARCANETHYST.value(), Registries.ITEM, (entry) -> entry.value() instanceof UniqueSwordItem).toSet(); + + // +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/RunicEffectsConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/RunicEffectsConfig.java deleted file mode 100644 index 6a51cc6f..00000000 --- a/common/src/main/java/net/sweenus/simplyswords/config/RunicEffectsConfig.java +++ /dev/null @@ -1,107 +0,0 @@ -package net.sweenus.simplyswords.config; - -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -import me.shedaniel.autoconfig.annotation.ConfigEntry; - -@Config(name = "runic_effects") -public class RunicEffectsConfig implements ConfigData { - - @ConfigEntry.Gui.PrefixText - public boolean enableActiveDefence = true; - public boolean enableFloat = true; - public boolean enableGreaterFloat = true; - public boolean enableFreeze = true; - public boolean enableShielding = true; - public boolean enableGreaterShielding = true; - public boolean enableSlow = true; - public boolean enableGreaterSlow = true; - public boolean enableStoneskin = true; - public boolean enableGreaterStoneskin = true; - public boolean enableSwiftness = true; - public boolean enableGreaterSwiftness = true; - public boolean enableTrailblaze = true; - public boolean enableGreaterTrailblaze = true; - public boolean enableWeaken = true; - public boolean enableGreaterWeaken = true; - public boolean enableZephyr = true; - public boolean enableGreaterZephyr = true; - public boolean enableFrostWard = true; - public boolean enableWildfire = true; - public boolean enableUnstable = true; - public boolean enableMomentum = true; - public boolean enableGreaterMomentum = true; - public boolean enableImbued = true; - public boolean enableGreaterImbued = true; - public boolean enablePincushion = true; - public boolean enableGreaterPincushion = true; - public boolean enableWard = true; - public boolean enableImmolate = true; - - - @ConfigEntry.Gui.PrefixText - public float swiftnessChance = 15f; - public float swiftnessDuration= 300f; - - @ConfigEntry.Gui.PrefixText - public float slowChance = 50f; - public float slowDuration= 50f; - - @ConfigEntry.Gui.PrefixText - public float poisonChance = 15f; - public float poisonDuration = 150f; - - @ConfigEntry.Gui.PrefixText - public float freezeChance = 15f; - public float freezeDuration = 120f; - - @ConfigEntry.Gui.PrefixText - public float wildfireChance = 10f; - public float wildfireDuration = 180f; - public float wildfireRadius = 10; - - @ConfigEntry.Gui.PrefixText - public float floatChance = 15f; - public float floatDuration = 50f; - - @ConfigEntry.Gui.PrefixText - public float zephyrChance = 15f; - public float zephyrDuration = 180f; - - @ConfigEntry.Gui.PrefixText - public float shieldingChance = 15f; - public float shieldingDuration = 120f; - - @ConfigEntry.Gui.PrefixText - public float stoneskinChance = 15f; - public float stoneskinDuration = 60f; - - @ConfigEntry.Gui.PrefixText - public float trailblazeChance = 15f; - public float trailblazeDuration = 120; - - @ConfigEntry.Gui.PrefixText - public float weakenChance = 15f; - public float weakenDuration = 120f; - - @ConfigEntry.Gui.PrefixText - public float unstableFrequency = 140f; - public float unstableDuration = 140f; - - @ConfigEntry.Gui.PrefixText - public float activeDefenceFrequency = 20f; - public float activeDefenceRadius = 5f; - - @ConfigEntry.Gui.PrefixText - public float frostWardFrequency = 20f; - public float frostWardRadius = 5f; - public float frostWardDuration = 60f; - - @ConfigEntry.Gui.PrefixText - public float momentumCooldown = 140f; - - @ConfigEntry.Gui.PrefixText - public float imbuedChance = 15; - - -} diff --git a/common/src/main/java/net/sweenus/simplyswords/config/SimplySwordsConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/SimplySwordsConfig.java deleted file mode 100644 index 7553a992..00000000 --- a/common/src/main/java/net/sweenus/simplyswords/config/SimplySwordsConfig.java +++ /dev/null @@ -1,99 +0,0 @@ -package net.sweenus.simplyswords.config; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.io.File; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; - -public class SimplySwordsConfig { - private static final HashMap LOOT_OPTIONS = new LinkedHashMap<>(); - - public static float getLootModifiers(String key) { - if (!LOOT_OPTIONS.containsKey(key)) { - //System.out.println(key); - return 0f; - } - return LOOT_OPTIONS.get(key); - } - - public static boolean getLootList (String id) { - if (!LOOT_OPTIONS.isEmpty()) { - //System.out.println(id); - return LOOT_OPTIONS.toString().contains(id); - } - return false; - } - - public static void init() { - - LOOT_OPTIONS.put("minecraft:entities/wither", 0.05f); - LOOT_OPTIONS.put("minecraft:entities/ender_dragon", 0.5f); - LOOT_OPTIONS.put("minecraft:chests/ruined_portal", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_armorer", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_butcher", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_cartographer", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_desert_house", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_fisher", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_fletcher", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_mason", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_plains_house", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_savanna_house", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_shepard", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_snowy_house", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_taiga_house", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_tannery", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_temple", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_toolsmith", 0f); - LOOT_OPTIONS.put("minecraft:chests/village/village_weaponsmith", 0f); - - } - - public static void loadConfig() { - //System.out.println("Loading common Simply Swords config"); - JsonObject json; - json = Config.getJsonObject(Config.readFile(new File("config/simplyswords_extra/loot_config.json5"))); - for (Map.Entry entry : json.entrySet()) { - LOOT_OPTIONS.put(entry.getKey(), entry.getValue().getAsFloat()); - } - } - - - public static void generateConfigs(boolean overwrite) { - //System.out.println("Generating common Simply Swords config"); - StringBuilder config; - int i; - config = new StringBuilder("{\n"); - i = 0; - for (String key : LOOT_OPTIONS.keySet()) { - if (i == 0) { - config.append("// --------------------------------------------- LOOT CONFIGURATION ----------------------------------------------------------------- \n"); - config.append("// This config allows for the tweaking of loot injection for UNIQUE weapons. \n"); - config.append("// Standard iron > diamond gear, and Runic Tablets, are controlled by the loot modifiers in the general_config, not here. \n"); - config.append("// ---------------------------------------------------------------------------------------------------------------------------------- \n"); - config.append("// --------------------------------------------- How does it work? ------------------------------------------------------------------ \n"); - config.append("// If 'add_weapons_to_loot_tables' is enabled in the simplyswords_main config, Simply Swords will attempt to inject its loot into \n"); - config.append("// any loot table that contains 'chests' in its filepath. This includes loot tables from other mods.\n"); - config.append("// Any values provided in this config will override the aforementioned process, acting as both a whitelist, and a blacklist.\n"); - config.append("\n"); - config.append("// Each line must be made up of a string containing the namespace, path, and filename, in addition to a float value. \n"); - config.append("// The float value provided will determine the chance of the loot appearing in the loot table. Where 0.0 is %0, and 1.0 is %100.\n"); - config.append("// If the float value provided is 0.0 the items will be blacklisted from this loot table and skipped entirely by the loot injection.\n"); - config.append("\n"); - config.append("// Items can also be injected into entity loot tables, as seen in the Wither example below.\n"); - config.append("// ---------------------------------------------------------------------------------------------------------------------------------- \n"); - config.append("\n"); - } - config.append(" \"").append(key).append("\": ").append(LOOT_OPTIONS.get(key)); - ++i; - if (i < LOOT_OPTIONS.size()) { - config.append(","); - } - config.append("\n"); - } - config.append("}"); - Config.createFile("config/simplyswords_extra/loot_config.json5", config.toString(), overwrite); - } -} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/StatusEffectsConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/StatusEffectsConfig.java index d36b5912..02293d3a 100644 --- a/common/src/main/java/net/sweenus/simplyswords/config/StatusEffectsConfig.java +++ b/common/src/main/java/net/sweenus/simplyswords/config/StatusEffectsConfig.java @@ -1,11 +1,16 @@ package net.sweenus.simplyswords.config; -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -@Config(name = "status_effects") -public class StatusEffectsConfig implements ConfigData { +import me.fzzyhmstrs.fzzy_config.config.Config; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.SimplySwords; + +public class StatusEffectsConfig extends Config { + + public StatusEffectsConfig() { + super(Identifier.of(SimplySwords.MOD_ID, "status_effects")); + } public int echoDamage = 2; -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/UniqueEffectsConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/UniqueEffectsConfig.java index 0afd66d4..5d4c5cd7 100644 --- a/common/src/main/java/net/sweenus/simplyswords/config/UniqueEffectsConfig.java +++ b/common/src/main/java/net/sweenus/simplyswords/config/UniqueEffectsConfig.java @@ -1,264 +1,135 @@ package net.sweenus.simplyswords.config; -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -import me.shedaniel.autoconfig.annotation.ConfigEntry; +import me.fzzyhmstrs.fzzy_config.config.Config; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedAny; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedCondition; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.SimplySwords; +import net.sweenus.simplyswords.item.custom.ArcanethystSwordItem; +import net.sweenus.simplyswords.item.custom.BrambleSwordItem; +import net.sweenus.simplyswords.item.custom.BrimstoneClaymoreItem; +import net.sweenus.simplyswords.item.custom.CaelestisSwordItem; +import net.sweenus.simplyswords.item.custom.DreadtideSwordItem; +import net.sweenus.simplyswords.item.custom.EmberIreSwordItem; +import net.sweenus.simplyswords.item.custom.EmberlashSwordItem; +import net.sweenus.simplyswords.item.custom.EnigmaSwordItem; +import net.sweenus.simplyswords.item.custom.FlamewindSwordItem; +import net.sweenus.simplyswords.item.custom.FrostfallSwordItem; +import net.sweenus.simplyswords.item.custom.HarbingerSwordItem; +import net.sweenus.simplyswords.item.custom.HearthflameSwordItem; +import net.sweenus.simplyswords.item.custom.HiveheartSwordItem; +import net.sweenus.simplyswords.item.custom.IcewhisperSwordItem; +import net.sweenus.simplyswords.item.custom.LichbladeSwordItem; +import net.sweenus.simplyswords.item.custom.LivyatanSwordItem; +import net.sweenus.simplyswords.item.custom.MagibladeSwordItem; +import net.sweenus.simplyswords.item.custom.MagiscytheSwordItem; +import net.sweenus.simplyswords.item.custom.MagispearSwordItem; +import net.sweenus.simplyswords.item.custom.MoltenEdgeSwordItem; +import net.sweenus.simplyswords.item.custom.PlagueSwordItem; +import net.sweenus.simplyswords.item.custom.RibboncleaverSwordItem; +import net.sweenus.simplyswords.item.custom.ShadowstingSwordItem; +import net.sweenus.simplyswords.item.custom.SoulPyreSwordItem; +import net.sweenus.simplyswords.item.custom.SoulkeeperSwordItem; +import net.sweenus.simplyswords.item.custom.SoulrenderSwordItem; +import net.sweenus.simplyswords.item.custom.StarsEdgeSwordItem; +import net.sweenus.simplyswords.item.custom.StealSwordItem; +import net.sweenus.simplyswords.item.custom.StormSwordItem; +import net.sweenus.simplyswords.item.custom.StormbringerSwordItem; +import net.sweenus.simplyswords.item.custom.StormsEdgeSwordItem; +import net.sweenus.simplyswords.item.custom.SunfireSwordItem; +import net.sweenus.simplyswords.item.custom.TempestSwordItem; +import net.sweenus.simplyswords.item.custom.ThunderbrandSwordItem; +import net.sweenus.simplyswords.item.custom.TwistedBladeItem; +import net.sweenus.simplyswords.item.custom.WatcherSwordItem; +import net.sweenus.simplyswords.item.custom.WaxweaverSwordItem; +import net.sweenus.simplyswords.item.custom.WhisperwindSwordItem; +import net.sweenus.simplyswords.item.custom.WickpiercerSwordItem; + +public class UniqueEffectsConfig extends Config { + + public UniqueEffectsConfig() { + super(Identifier.of(SimplySwords.MOD_ID, "unique_effects")); + } -@Config(name = "unique_effects") -public class UniqueEffectsConfig implements ConfigData { - - @ConfigEntry.Gui.Tooltip public float abilityAbsorptionCap = 20f; - @ConfigEntry.Gui.PrefixText - public float watcherChance = 5f; - public float watcherRestoreAmount = 0.5f; - public float watcherRadius = 8f; - public float omenChance = 5f; - public float omenAbsorptionCap = 20f; - public float omenInstantKillThreshold = 0.25f; - - @ConfigEntry.Gui.PrefixText - public float stealChance = 25f; - public float stealDuration = 400f; - public float stealInvisDuration = 120f; - public float stealBlindDuration = 200f; - public float stealRadius = 30f; - public float stealSpellScaling = 2.6f; - - @ConfigEntry.Gui.PrefixText - public float soulMeldChance = 75f; - public float soulMeldDuration = 250f; - public float soulMeldRadius = 5f; - - @ConfigEntry.Gui.PrefixText - public float soulrendChance = 85f; - public float soulrendDuration = 500f; - public float soulrendDamageMulti = 3f; - public float soulrendHealMulti = 0.5f; - public float soulrendRadius = 10f; - public float soulrendMaxStacks = 8f; - public float soulrendDamageSpellScaling = 0.4f; - - @ConfigEntry.Gui.PrefixText - public float ferocityChance = 75f; - public float ferocityDuration = 100f; - public float ferocityMaxStacks = 15f; - public float ferocityStrengthTier = 2f; - - @ConfigEntry.Gui.PrefixText - public float emberIreChance = 30f; - public float emberIreDuration = 150f; - - @ConfigEntry.Gui.PrefixText - public float volcanicFuryChance = 25f; - public float volcanicFuryRadius = 3f; - public float volcanicFuryCooldown = 300f; - public float volcanicFuryDamage = 3f; - public float volcanicFurySpellScaling = 1.4f; - - @ConfigEntry.Gui.PrefixText - public float stormChance = 15f; - public float stormRadius = 10f; - public float stormCooldown = 700f; - public float stormFrequency = 10f; - public float stormDuration = 200f; - - @ConfigEntry.Gui.PrefixText - public float plagueChance = 55f; - - @ConfigEntry.Gui.PrefixText - public float brimstoneChance = 15f; - - @ConfigEntry.Gui.PrefixText - public float brambleChance = 45f; - - @ConfigEntry.Gui.PrefixText - public float soultetherRange = 32f; - public float soultetherRadius = 8f; - public float soultetherDuration = 120f; - public float soultetherIgniteDuration = 120f; - public float soultetherResistanceDuration = 60f; - - @ConfigEntry.Gui.PrefixText - public float frostFuryCooldown = 380f; - public float frostFuryRadius = 3f; - public float frostFuryDamage = 18f; - public float frostFuryChance = 15f; - public float frostFuryDuration = 80f; - public float frostFurySpellScaling = 1.4f; - - @ConfigEntry.Gui.PrefixText - public float moltenRoarCooldown = 320f; - public float moltenRoarRadius = 5f; - public float moltenRoarKnockbackStrength = 5f; - public float moltenRoarChance = 15f; - public float moltenRoarDuration = 100f; - - @ConfigEntry.Gui.PrefixText - public float frostShatterRadius = 3f; - public float frostShatterDamage = 18f; - public float frostShatterChance = 15f; - public float frostShatterDuration = 80f; - public float frostShatterSpellScaling = 1.7f; - - @ConfigEntry.Gui.PrefixText - public float permafrostRadius = 4f; - public float permafrostDamage = 1f; - public float permafrostCooldown = 600f; - public float permafrostDuration = 200f; - public float permafrostSpellScaling = 0.9f; - - @ConfigEntry.Gui.PrefixText - public float arcaneAssaultRadius = 6f; - public float arcaneAssaultDamage = 1f; - public float arcaneAssaultCooldown = 220; - public float arcaneAssaultChance = 25f; - public float arcaneAssaultDuration = 120f; - public float arcaneAssaultSpellScaling = 1.4f; - - @ConfigEntry.Gui.PrefixText - public float thunderBlitzRadius = 2f; - public float thunderBlitzDamage = 3f; - public float thunderBlitzCooldown = 250; - public float thunderBlitzChance = 15f; - public float thunderBlitzSpellScaling = 1.7f; - - @ConfigEntry.Gui.PrefixText - public float stormJoltCooldown = 100f; - public float stormJoltChance = 15f; - - @ConfigEntry.Gui.PrefixText - public float soulAnguishRadius = 3f; - public float soulAnguishAbsorptionCap = 8f; - public float soulAnguishDamage = 4f; - public float soulAnguishCooldown = 700; - public float soulAnguishDuration = 200f; - public float soulAnguishHeal = 0.5f; - public float soulAnguishRange = 22f; - public float soulAnguishSpellScaling = 1.6f; - - @ConfigEntry.Gui.PrefixText - public float shockDeflectBlockDuration = 35f; - public float shockDeflectDamage = 12f; - public float shockDeflectCooldown = 90; - public float shockDeflectParryDuration = 10f; - public float shockDeflectSpellScaling = 2.3f; - - @ConfigEntry.Gui.PrefixText - public float shadowmistCooldown = 200f; - public float shadowmistChance = 25f; - public float shadowmistDamageMulti = 0.8f; - public float shadowmistBlindDuration = 60f; - public float shadowmistRadius = 4f; - - @ConfigEntry.Gui.PrefixText - public float abyssalStandardCooldown = 700; - public float abyssalStandardChance = 15f; - public float abyssalStandardDamage = 3f; - public float abyssalStandardSpellScaling = 1.2f; - - @ConfigEntry.Gui.PrefixText - public float righteousStandardCooldown = 700f; - public float righteousStandardChance = 15f; - public float righteousStandardDamage = 3f; - public float righteousStandardSpellScaling = 1.1f; - public float righteousStandardSpellScalingHeal = 1.3f; - - @ConfigEntry.Gui.PrefixText - public float fatalFlickerCooldown = 175f; - public float fatalFlickerChance = 15f; - public float fatalFlickerRadius = 3f; - public float fatalFlickerMaxStacks = 99f; - public float fatalFlickerDashVelocity = 3f; - - @ConfigEntry.Gui.PrefixText - public float smoulderCooldown = 80f; - public float smoulderMaxStacks = 5f; - public float smoulderHeal = 15f; - public float smoulderSpellScaling = 0.4f; - - @ConfigEntry.Gui.PrefixText - public float waxweaveCooldown = 1200f; - public float waxweaveMaxStacks = 3f; - - @ConfigEntry.Gui.PrefixText - public float hivemindCooldown = 60f; - public float hivemindDuration = 450f; - public float hivemindDamage = 1.1f; - - @ConfigEntry.Gui.PrefixText - public float celestialSurgeCooldown = 120f; - public float celestialSurgeDuration = 120f; - public float celestialSurgeStacks = 6f; - public float celestialSurgeDamageModifier = 0.40f; - public float celestialSurgeLifestealModifier = 0.10f; - - @ConfigEntry.Gui.PrefixText - public float flickerFuryCooldown = 220f; - public float flickerFuryDuration = 40f; - public float flickerFuryDamage = 1.0f; - - @ConfigEntry.Gui.PrefixText - public float vortexDuration = 1200f; - public float vortexMaxSize = 30f; - public float vortexMaxStacks = 10f; - public float vortexSpellScaling = 0.3f; - - @ConfigEntry.Gui.PrefixText - public float voidcallerDuration = 250f; - public float voidcallerStartingTickFrequency = 12f; - public float voidcallerDamageModifier = 1.0f; - public float voidcallerCorruptionFrequency = 60f; - public float voidcallerCorruptionPerTick = 1.0f; - public float voidcallerCorruptionDuration = 1200f; - public float voidcallerCorruptionMax = 100f; - - @ConfigEntry.Gui.PrefixText - public float emberstormSpreadCap = 6f; - public float emberstormDamage = 5f; - public float emberstormDetonationDamage = 15f; - public float emberstormCooldown = 980f; - public float emberstormMaxHaste = 10f; - public float emberstormSpellScaling = 0.4f; - - @ConfigEntry.Gui.PrefixText - public float ribbonwrathCooldown = 40f; - public float ribbonwrathResilienceAmplifier = 1f; - public float ribbonwrathDamageBonusPercent = 0.95f; - - @ConfigEntry.Gui.PrefixText - public float magistormCooldown = 980f; - public float magistormDuration = 400f; - public float magistormRadius = 4f; - public float magistormDamage = 3f; - public float magistormRepairChance = 0.25f; - public float magistormSpellScaling = 0.5f; - - @ConfigEntry.Gui.PrefixText - public float enigmaCooldown = 800f; - public float enigmaDecayRate = 2f; - public float enigmaChaseRadius = 16f; - - @ConfigEntry.Gui.PrefixText - public float magibladeCooldown = 35; - public float magibladeSonicDistance = 16f; - public float magibladeDamageModifier = 0.7f; - public float magibladeRepelChance = 55f; - public float magibladeRepelRadius = 4f; - - @ConfigEntry.Gui.PrefixText - public float magislamCooldown = 140; - public float magislamRadius = 4f; - public float magislamDamageModifier = 2.0f; - public float magislamMagicChance = 35f; - public float magislamMagicModifier = 0.5f; - - @ConfigEntry.Gui.PrefixText - public float astralShiftCooldown = 420; - public float astralShiftDuration = 100f; - public float astralShiftDamageModifier = 1.0f; - public float astralShiftDamageMax = 300f; - public float astralShiftChance = 5f; - -} + public HarbingerSwordItem.EffectSettings abyssalStandard = new HarbingerSwordItem.EffectSettings(); + public ArcanethystSwordItem.EffectSettings arcaneAssault = new ArcanethystSwordItem.EffectSettings(); + public CaelestisSwordItem.EffectSettings astralShift = new CaelestisSwordItem.EffectSettings(); + public BrambleSwordItem.EffectSettings bramble = new BrambleSwordItem.EffectSettings(); + public BrimstoneClaymoreItem.EffectSettings brimstone = new BrimstoneClaymoreItem.EffectSettings(); + public StarsEdgeSwordItem.EffectSettings celestialSurge = new StarsEdgeSwordItem.EffectSettings(); + public EmberIreSwordItem.EffectSettings emberIre = new EmberIreSwordItem.EffectSettings(); + public FlamewindSwordItem.EffectSettings emberstorm = new FlamewindSwordItem.EffectSettings(); + public EnigmaSwordItem.EffectSettings enigma = new EnigmaSwordItem.EffectSettings(); + public WhisperwindSwordItem.EffectSettings fatalFlicker = new WhisperwindSwordItem.EffectSettings(); + public TwistedBladeItem.EffectSettings ferocity = new TwistedBladeItem.EffectSettings(); + public WickpiercerSwordItem.EffectSettings flickerFury = new WickpiercerSwordItem.EffectSettings(); + public FrostfallSwordItem.EffectSettings frostFury = new FrostfallSwordItem.EffectSettings(); + public LivyatanSwordItem.EffectSettings frostShatter = new LivyatanSwordItem.EffectSettings(); + public HiveheartSwordItem.EffectSettings hivemind = new HiveheartSwordItem.EffectSettings(); + public MagibladeSwordItem.EffectSettings magiblade = new MagibladeSwordItem.EffectSettings(); + public MagispearSwordItem.EffectSettings magislam = new MagispearSwordItem.EffectSettings(); + public MagiscytheSwordItem.EffectSettings magistorm = new MagiscytheSwordItem.EffectSettings(); + public MoltenEdgeSwordItem.EffectSettings moltenRoar = new MoltenEdgeSwordItem.EffectSettings(); + public IcewhisperSwordItem.EffectSettings permafrost = new IcewhisperSwordItem.EffectSettings(); + public PlagueSwordItem.EffectSettings plague = new PlagueSwordItem.EffectSettings(); + public RibboncleaverSwordItem.EffectSettings ribbonwrath = new RibboncleaverSwordItem.EffectSettings(); + public SunfireSwordItem.EffectSettings righteousStandard = new SunfireSwordItem.EffectSettings(); + public ShadowstingSwordItem.EffectSettings shadowmist = new ShadowstingSwordItem.EffectSettings(); + public StormbringerSwordItem.EffectSettings shockDeflect = new StormbringerSwordItem.EffectSettings(); + public EmberlashSwordItem.EffectSettings smoulder = new EmberlashSwordItem.EffectSettings(); + public LichbladeSwordItem.EffectSettings soulAnguish = new LichbladeSwordItem.EffectSettings(); + public SoulkeeperSwordItem.EffectSettings soulkeeper = new SoulkeeperSwordItem.EffectSettings(); + public SoulrenderSwordItem.EffectSettings soulRend = new SoulrenderSwordItem.EffectSettings(); + public SoulPyreSwordItem.EffectSettings soultether = new SoulPyreSwordItem.EffectSettings(); + public StealSwordItem.EffectSettings steal = new StealSwordItem.EffectSettings(); + public StormSwordItem.EffectSettings storm = new StormSwordItem.EffectSettings(); + public StormsEdgeSwordItem.EffectSettings stormJolt = new StormsEdgeSwordItem.EffectSettings(); + public ThunderbrandSwordItem.EffectSettings thunderBlitz = new ThunderbrandSwordItem.EffectSettings(); + public HearthflameSwordItem.EffectSettings volcanicFury = new HearthflameSwordItem.EffectSettings(); + public TempestSwordItem.EffectSettings vortex = new TempestSwordItem.EffectSettings(); + public WatcherSwordItem.EffectSettings watcher = new WatcherSwordItem.EffectSettings(); + public WaxweaverSwordItem.EffectSettings waxweave = new WaxweaverSwordItem.EffectSettings(); + + // eldritch end compat + public ValidatedCondition voidcaller = new ValidatedAny<>(new DreadtideSwordItem.EffectSettings()) + .toCondition( + () -> SimplySwords.passVersionCheck("eldritch_end", SimplySwords.minimumEldritchEndVersion), + Text.translatable("simplyswords.unique_effects.voidcaller.compat"), + DreadtideSwordItem.EffectSettings::new + ).withFailTitle(Text.translatable("simplyswords.unique_effects.voidcaller.compat.failTitle")); + +//EffectSettings + //much like the gem power settings, each setting block is stored within the sword item it's used for + //These settings use the unique item themselves to provide a config context tooltip + //example + //Type declaration: A tooltip settings, so needs a supplier of TooltipAppender + //Constructor + //Items are not tooltip appenders, so I made a class ItemStackTooltipAppender to help + //NOTE: the ::get part is very important. RegistrySuppliers are suppliers, but without the get you get load order issues + //settings: work basically like the gem power configs. + //note that here I've left all the sword-specific naming + //so instead of using the basic "Cooldown", it still will say "Harbinger cooldown" and so on. + //like gem powers, call like + //int c = Config.uniqueEffects.abyssalStandard.cooldown; + /* + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.HARBINGER::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 700; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 3f; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.2f; + + } + */ +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/WeaponAttributesConfig.java b/common/src/main/java/net/sweenus/simplyswords/config/WeaponAttributesConfig.java index 43a7fed7..7f5e0fff 100644 --- a/common/src/main/java/net/sweenus/simplyswords/config/WeaponAttributesConfig.java +++ b/common/src/main/java/net/sweenus/simplyswords/config/WeaponAttributesConfig.java @@ -1,177 +1,216 @@ package net.sweenus.simplyswords.config; -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; -import me.shedaniel.autoconfig.annotation.ConfigEntry; - -@Config(name = "weapon_attributes") -public class WeaponAttributesConfig implements ConfigData { - - @ConfigEntry.Gui.PrefixText - public float longsword_positiveDamageModifier = 0.0f; - public float twinblade_positiveDamageModifier = 0.0f; - public float rapier_positiveDamageModifier = 0.0f; - public float katana_positiveDamageModifier = 0.0f; - public float sai_positiveDamageModifier = 0.0f; - public float spear_positiveDamageModifier = 0.0f; - public float glaive_positiveDamageModifier = 0.0f; - public float warglaive_positiveDamageModifier = 0.0f; - public float cutlass_positiveDamageModifier = 0.0f; - public float claymore_positiveDamageModifier = 2.0f; - public float greataxe_positiveDamageModifier = 3.0f; - public float greathammer_positiveDamageModifier = 4.0f; - public float chakram_positiveDamageModifier = 0.0f; - public float scythe_positiveDamageModifier = 1.0f; - public float halberd_positiveDamageModifier = 3.0f; - - @ConfigEntry.Gui.PrefixText - public float longsword_negativeDamageModifier = 0.0f; - public float twinblade_negativeDamageModifier = 0.0f; - public float rapier_negativeDamageModifier = 1.0f; - public float katana_negativeDamageModifier = 0.0f; - public float sai_negativeDamageModifier = 3.0f; - public float spear_negativeDamageModifier = 0.0f; - public float glaive_negativeDamageModifier = 0.0f; - public float warglaive_negativeDamageModifier = 0.0f; - public float cutlass_negativeDamageModifier = 0.0f; - public float claymore_negativeDamageModifier = 0.0f; - public float greataxe_negativeDamageModifier = 0.0f; - public float greathammer_negativeDamageModifier = 0.0f; - public float chakram_negativeDamageModifier = 1.0f; - public float scythe_negativeDamageModifier = 0.0f; - public float halberd_negativeDamageModifier = 0.0f; - - @ConfigEntry.Gui.PrefixText - public float iron_damageModifier = 3.0f; - public float gold_damageModifier = 3.0f; - public float diamond_damageModifier = 3.0f; - public float netherite_damageModifier = 3.0f; - public float runic_damageModifier = 3.0f; - public float adamantite_damageModifier = 3.0f; - public float aquarium_damageModifier = 3.0f; - public float banglum_damageModifier = 3.0f; - public float carmot_damageModifier = 3.0f; - public float kyber_damageModifier = 3.0f; - public float mythril_damageModifier = 3.0f; - public float orichalcum_damageModifier = 3.0f; - public float durasteel_damageModifier = 3.0f; - public float osmium_damageModifier = 3.0f; - public float prometheum_damageModifier = 3.0f; - public float quadrillum_damageModifier = 3.0f; - public float runite_damageModifier = 3.0f; - public float starPlatinum_damageModifier = 3.0f; - public float bronze_damageModifier = 3.0f; - public float copper_damageModifier = 3.0f; - public float steel_damageModifier = 3.0f; - public float palladium_damageModifier = 3.0f; - public float stormyx_damageModifier = 3.0f; - public float celestium_damageModifier = 3.0f; - public float metallurgium_damageModifier = 3.0f; - public float gobber_damageModifier = 1.0f; - public float gobberNether_damageModifier = 3.0f; - public float gobberEnd_damageModifier = 6.0f; - - @ConfigEntry.Gui.PrefixText - public float longsword_attackSpeed = -2.4f; - public float twinblade_attackSpeed = -2.0f; - public float rapier_attackSpeed = -1.8f; - public float katana_attackSpeed = -2.0f; - public float sai_attackSpeed = -1.5f; - public float spear_attackSpeed = -2.7f; - public float glaive_attackSpeed = -2.6f; - public float warglaive_attackSpeed = -2.2f; - public float cutlass_attackSpeed = -2.0f; - public float claymore_attackSpeed = -2.8f; - public float greataxe_attackSpeed = -3.1f; - public float greathammer_attackSpeed = -3.2f; - public float chakram_attackSpeed = -3.0f; - public float scythe_attackSpeed = -2.7f; - public float halberd_attackSpeed = -2.8f; - - @ConfigEntry.Gui.PrefixText - public float brimstone_damageModifier = 6.0f; - public float thewatcher_damageModifier = 6.0f; - public float stormsedge_damageModifier = 3.0f; - public float stormbringer_damageModifier = 3.0f; - public float swordonastick_damageModifier = 5.0f; - public float bramblethorn_damageModifier = 3.0f; - public float watchingwarglaive_damageModifier = 3.0f; - public float longswordofplague_damageModifier = 3.0f; - public float emberblade_damageModifier = 3.0f; - public float hearthflame_damageModifier = 8.0f; - public float soulkeeper_damageModifier = 8.0f; - public float twistedblade_damageModifier = 4.0f; - public float soulstealer_damageModifier = 0.0f; - public float soulrender_damageModifier = 4.0f; - public float mjolnir_damageModifier = 3.0f; - public float soulpyre_damageModifier = 7.0f; - public float frostfall_damageModifier = 5.0f; - public float moltenedge_damageModifier = 4.0f; - public float livyatan_damageModifier = 4.0f; - public float icewhisper_damageModifier = 7.0f; - public float arcanethyst_damageModifier = 7.0f; - public float thunderbrand_damageModifier = 7.0f; - public float lichblade_damageModifier = 7.0f; - public float shadowsting_damageModifier = -2.0f; - public float sunfire_damageModifier = 3.0f; - public float harbinger_damageModifier = 3.0f; - public float whisperwind_damageModifier = 3.0f; - public float emberlash_damageModifier = 0.0f; - public float waxweaver_damageModifier = 6.0f; - public float hiveheart_damageModifier = 7.0f; - public float starsedge_damageModifier = 3.0f; - public float wickpiercer_damageModifier = 4.0f; - public float dreadtide_damageModifier = 3.0f; - public float tempest_damageModifier = 0.0f; - public float flamewind_damageModifier = 3.0f; - public float ribboncleaver_damageModifier = 7.0f; - public float magiscythe_damageModifier = 4.0f; - public float enigma_damageModifier = 7.0f; - public float magispear_damageModifier = 4.0f; - public float magiblade_damageModifier = 3.0f; - public float caelestis_damageModifier = 6.0f; - - @ConfigEntry.Gui.PrefixText - public float brimstone_attackSpeed = -2.8f; - public float thewatcher_attackSpeed = -2.8f; - public float stormsedge_attackSpeed = -2.0f; - public float stormbringer_attackSpeed = -2.4f; - public float swordonastick_attackSpeed = -2.6f; - public float bramblethorn_attackSpeed = -1.8f; - public float watchingwarglaive_attackSpeed = -2.2f; - public float longswordofplague_attackSpeed = -2.4f; - public float emberblade_attackSpeed = -2.4f; - public float hearthflame_attackSpeed = -3.2f; - public float soulkeeper_attackSpeed = -2.9f; - public float twistedblade_attackSpeed = -2.6f; - public float soulstealer_attackSpeed = -1.5f; - public float soulrender_attackSpeed = -2.4f; - public float mjolnir_attackSpeed = -3.0f; - public float soulpyre_attackSpeed = -3.0f; - public float frostfall_attackSpeed = -2.5f; - public float moltenedge_attackSpeed = -2.1f; - public float livyatan_attackSpeed = -2.1f; - public float icewhisper_attackSpeed = -2.7f; - public float arcanethyst_attackSpeed = -2.7f; - public float thunderbrand_attackSpeed = -2.7f; - public float lichblade_attackSpeed = -3.1f; - public float shadowsting_attackSpeed = -1.7f; - public float sunfire_attackSpeed = -2.4f; - public float harbinger_attackSpeed = -2.4f; - public float whisperwind_attackSpeed = -2.0f; - public float emberlash_attackSpeed = -1.5f; - public float waxweaver_attackSpeed = -2.9f; - public float hiveheart_attackSpeed = -3.0f; - public float starsedge_attackSpeed = -2.0f; - public float wickpiercer_attackSpeed = -2.1f; - public float dreadtide_attackSpeed = -2.0f; - public float tempest_attackSpeed = -2.5f; - public float flamewind_attackSpeed = -2.6f; - public float ribboncleaver_attackSpeed = -3.2f; - public float magiscythe_attackSpeed = -2.4f; - public float enigma_attackSpeed = -3.2f; - public float magispear_attackSpeed = -2.5f; - public float magiblade_attackSpeed = -2.0f; - public float caelestis_attackSpeed = -2.9f; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.annotations.Action; +import me.fzzyhmstrs.fzzy_config.annotations.RequiresAction; +import me.fzzyhmstrs.fzzy_config.config.Config; +import me.fzzyhmstrs.fzzy_config.config.ConfigSection; +import me.fzzyhmstrs.fzzy_config.validation.misc.ValidatedCondition; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.SimplySwords; + +@RequiresAction(action = Action.RESTART) +public class WeaponAttributesConfig extends Config { + + public WeaponAttributesConfig() { + super(Identifier.of(SimplySwords.MOD_ID, "weapon_attributes")); + } + + public TypeDamageModifier typeDamageModifier = new TypeDamageModifier(); + public MaterialDamageModifier materialDamageModifier = new MaterialDamageModifier(); + public TypeAttackSpeed typeAttackSpeed = new TypeAttackSpeed(); + public UniqueDamageModifier uniqueDamageModifier = new UniqueDamageModifier(); + public UniqueAttackSpeed uniqueAttackSpeed = new UniqueAttackSpeed(); + + @RequiresAction(action = Action.RESTART) + public static class TypeDamageModifier extends ConfigSection { + public float chakram_damageModifier = -1.0f; + public float claymore_damageModifier = 2.0f; + public float cutlass_damageModifier = 0.0f; + public float glaive_damageModifier = 0.0f; + public float greataxe_damageModifier = 3.0f; + public float greathammer_damageModifier = 4.0f; + public float halberd_damageModifier = 3.0f; + public float katana_damageModifier = 0.0f; + public float longsword_damageModifier = 0.0f; + public float rapier_damageModifier = -1.0f; + public float sai_damageModifier = -3.0f; + public float scythe_damageModifier = 1.0f; + public float spear_damageModifier = 0.0f; + public float twinblade_damageModifier = 0.0f; + public float warglaive_damageModifier = 0.0f; + } + + @RequiresAction(action = Action.RESTART) + public static class MaterialDamageModifier extends ConfigSection { + public float iron_damageModifier = 3.0f; + public float gold_damageModifier = 3.0f; + public float diamond_damageModifier = 3.0f; + public float netherite_damageModifier = 3.0f; + public float runic_damageModifier = 3.0f; + + //mythic metals compat, all gated behind a mod-loaded condition + public ValidatedCondition adamantite_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition aquarium_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition banglum_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition bronze_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition carmot_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition celestium_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition copper_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition durasteel_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition kyber_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition metallurgium_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition mythril_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition orichalcum_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition osmium_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition palladium_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition prometheum_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition quadrillum_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition runite_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition starPlatinum_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition steel_damageModifier = createCondition(3.0f, "mythicmetals"); + public ValidatedCondition stormyx_damageModifier = createCondition(3.0f, "mythicmetals"); + + //gobber compat - all mod-loaded gated + public ValidatedCondition gobber_damageModifier = createCondition(1.0f, "gobber2"); + public ValidatedCondition gobberNether_damageModifier = createCondition(3.0f, "gobber2"); + public ValidatedCondition gobberEnd_damageModifier = createCondition(6.0f, "gobber2"); + + private ValidatedCondition createCondition(float defaultValue, String modNeeded) { + return new ValidatedFloat(defaultValue) + .toCondition( + () -> Platform.isModLoaded(modNeeded), + Text.translatable("simplyswords.weapon_attributes.materialDamageModifier." + modNeeded), + () -> defaultValue + ).withFailTitle(Text.translatable("simplyswords.weapon_attributes.materialDamageModifier." + modNeeded + ".failTitle")); + } + } + + @RequiresAction(action = Action.RESTART) + public static class TypeAttackSpeed extends ConfigSection { + public float chakram_attackSpeed = -3.0f; + public float claymore_attackSpeed = -2.8f; + public float cutlass_attackSpeed = -2.0f; + public float glaive_attackSpeed = -2.6f; + public float greataxe_attackSpeed = -3.1f; + public float greathammer_attackSpeed = -3.2f; + public float halberd_attackSpeed = -2.8f; + public float katana_attackSpeed = -2.0f; + public float longsword_attackSpeed = -2.4f; + public float rapier_attackSpeed = -1.8f; + public float sai_attackSpeed = -1.5f; + public float scythe_attackSpeed = -2.7f; + public float spear_attackSpeed = -2.7f; + public float twinblade_attackSpeed = -2.0f; + public float warglaive_attackSpeed = -2.2f; + + + } + + @RequiresAction(action = Action.RESTART) + public static class UniqueDamageModifier extends ConfigSection { + public float arcanethyst_damageModifier = 7.0f; + public float bramblethorn_damageModifier = 3.0f; + public float brimstone_damageModifier = 6.0f; + public float caelestis_damageModifier = 6.0f; + public float emberblade_damageModifier = 3.0f; + public float emberlash_damageModifier = 0.0f; + public float enigma_damageModifier = 7.0f; + public float flamewind_damageModifier = 3.0f; + public float frostfall_damageModifier = 5.0f; + public float harbinger_damageModifier = 3.0f; + public float hearthflame_damageModifier = 8.0f; + public float hiveheart_damageModifier = 7.0f; + public float icewhisper_damageModifier = 7.0f; + public float lichblade_damageModifier = 7.0f; + public float livyatan_damageModifier = 4.0f; + public float longswordofplague_damageModifier = 3.0f; + public float magiblade_damageModifier = 3.0f; + public float magiscythe_damageModifier = 4.0f; + public float magispear_damageModifier = 4.0f; + public float mjolnir_damageModifier = 3.0f; + public float moltenedge_damageModifier = 4.0f; + public float ribboncleaver_damageModifier = 7.0f; + public float shadowsting_damageModifier = -2.0f; + public float soulkeeper_damageModifier = 8.0f; + public float soulpyre_damageModifier = 7.0f; + public float soulrender_damageModifier = 4.0f; + public float soulstealer_damageModifier = 0.0f; + public float starsedge_damageModifier = 3.0f; + public float stormsedge_damageModifier = 3.0f; + public float stormbringer_damageModifier = 3.0f; + public float sunfire_damageModifier = 3.0f; + public float swordonastick_damageModifier = 5.0f; + public float tempest_damageModifier = 0.0f; + public float thewatcher_damageModifier = 6.0f; + public float thunderbrand_damageModifier = 7.0f; + public float twistedblade_damageModifier = 4.0f; + public float watchingwarglaive_damageModifier = 3.0f; + public float waxweaver_damageModifier = 6.0f; + public float whisperwind_damageModifier = 3.0f; + public float wickpiercer_damageModifier = 4.0f; + + //eldritch end compat + public ValidatedCondition dreadtide_damageModifier = new ValidatedFloat(3.0f) + .toCondition( + () -> SimplySwords.passVersionCheck("eldritch_end", SimplySwords.minimumEldritchEndVersion), + Text.translatable("simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end"), + () -> 3.0f + ).withFailTitle(Text.translatable("simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end.failTitle")); + } + + @RequiresAction(action = Action.RESTART) + public static class UniqueAttackSpeed extends ConfigSection { + public float arcanethyst_attackSpeed = -2.7f; + public float bramblethorn_attackSpeed = -1.8f; + public float brimstone_attackSpeed = -2.8f; + public float caelestis_attackSpeed = -2.9f; + public float emberblade_attackSpeed = -2.4f; + public float emberlash_attackSpeed = -1.5f; + public float enigma_attackSpeed = -3.2f; + public float flamewind_attackSpeed = -2.6f; + public float frostfall_attackSpeed = -2.5f; + public float harbinger_attackSpeed = -2.4f; + public float hearthflame_attackSpeed = -3.2f; + public float hiveheart_attackSpeed = -3.0f; + public float icewhisper_attackSpeed = -2.7f; + public float lichblade_attackSpeed = -3.1f; + public float livyatan_attackSpeed = -2.1f; + public float longswordofplague_attackSpeed = -2.4f; + public float mjolnir_attackSpeed = -3.0f; + public float magiblade_attackSpeed = -2.0f; + public float magiscythe_attackSpeed = -2.4f; + public float magispear_attackSpeed = -2.5f; + public float moltenedge_attackSpeed = -2.1f; + public float ribboncleaver_attackSpeed = -3.2f; + public float shadowsting_attackSpeed = -1.7f; + public float soulkeeper_attackSpeed = -2.9f; + public float soulpyre_attackSpeed = -3.0f; + public float soulrender_attackSpeed = -2.4f; + public float soulstealer_attackSpeed = -1.5f; + public float starsedge_attackSpeed = -2.0f; + public float stormsedge_attackSpeed = -2.0f; + public float stormbringer_attackSpeed = -2.4f; + public float sunfire_attackSpeed = -2.4f; + public float swordonastick_attackSpeed = -2.6f; + public float tempest_attackSpeed = -2.5f; + public float thewatcher_attackSpeed = -2.8f; + public float thunderbrand_attackSpeed = -2.7f; + public float twistedblade_attackSpeed = -2.6f; + public float watchingwarglaive_attackSpeed = -2.2f; + public float waxweaver_attackSpeed = -2.9f; + public float whisperwind_attackSpeed = -2.0f; + public float wickpiercer_attackSpeed = -2.1f; + + //eldritch end compat + public ValidatedCondition dreadtide_attackSpeed = new ValidatedFloat(-2.0f) + .toCondition( + () -> SimplySwords.passVersionCheck("eldritch_end", SimplySwords.minimumEldritchEndVersion), + Text.translatable("simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end"), + () -> -2.0f + ).withFailTitle(Text.translatable("simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end.failTitle")); + } } \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/settings/ChanceDurationRadiusSettings.java b/common/src/main/java/net/sweenus/simplyswords/config/settings/ChanceDurationRadiusSettings.java new file mode 100644 index 00000000..baf4f942 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/config/settings/ChanceDurationRadiusSettings.java @@ -0,0 +1,37 @@ +package net.sweenus.simplyswords.config.settings; + +import me.fzzyhmstrs.fzzy_config.annotations.Translation; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.item.tooltip.TooltipAppender; + +import java.util.function.Supplier; + +public class ChanceDurationRadiusSettings extends TooltipSettings { + + public ChanceDurationRadiusSettings(int chance, int duration, double radius, Supplier appender) { + super(appender); + this.chance = chance; + this.duration = duration; + this.radius = radius; + } + + public ChanceDurationRadiusSettings(int chance, int duration, double radius) { + super(); + this.chance = chance; + this.duration = duration; + this.radius = radius; + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 0) + public int duration; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedDouble.Restrict(min = 0.0) + public double radius; +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/settings/ChanceDurationSettings.java b/common/src/main/java/net/sweenus/simplyswords/config/settings/ChanceDurationSettings.java new file mode 100644 index 00000000..84811850 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/config/settings/ChanceDurationSettings.java @@ -0,0 +1,31 @@ +package net.sweenus.simplyswords.config.settings; + +import me.fzzyhmstrs.fzzy_config.annotations.Translation; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.item.tooltip.TooltipAppender; + +import java.util.function.Supplier; + +public class ChanceDurationSettings extends TooltipSettings { + + public ChanceDurationSettings(int chance, int duration, Supplier appender) { + super(appender); + this.chance = chance; + this.duration = duration; + } + + public ChanceDurationSettings(int chance, int duration) { + super(); + this.chance = chance; + this.duration = duration; + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 0) + public int duration; + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/settings/ItemStackTooltipAppender.java b/common/src/main/java/net/sweenus/simplyswords/config/settings/ItemStackTooltipAppender.java new file mode 100644 index 00000000..335ad687 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/config/settings/ItemStackTooltipAppender.java @@ -0,0 +1,48 @@ +package net.sweenus.simplyswords.config.settings; + +import net.minecraft.component.type.AttributeModifiersComponent; +import net.minecraft.item.Item; +import net.minecraft.item.tooltip.TooltipAppender; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class ItemStackTooltipAppender implements Supplier { + + @SafeVarargs + public ItemStackTooltipAppender(Supplier... itemStacks) { + this.appenders = Arrays.stream(itemStacks).map(StackAppender::new).toList(); + } + + private final List appenders; + + private final static AttributeModifiersComponent hider = new AttributeModifiersComponent(new ArrayList<>(), false); + + @Override + public TooltipAppender get() { + long threeSeconds = System.currentTimeMillis() / 3000L; + + return appenders.get((int) (threeSeconds % appenders.size())); + } + + private record StackAppender(Supplier stack) implements TooltipAppender { + + @Override + public void appendTooltip(Item.TooltipContext context, Consumer tooltip, TooltipType type) { + Item s = stack.get(); + if (s == null) return; + List list = new ArrayList<>(); + s.appendTooltip(s.getDefaultStack(), context, list, type); + if (!list.isEmpty() && Objects.equals(list.get(0).getString(), "")) { + list.remove(0); + } + list.forEach(tooltip); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/config/settings/TooltipSettings.java b/common/src/main/java/net/sweenus/simplyswords/config/settings/TooltipSettings.java new file mode 100644 index 00000000..03d077f4 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/config/settings/TooltipSettings.java @@ -0,0 +1,89 @@ +package net.sweenus.simplyswords.config.settings; + +import me.fzzyhmstrs.fzzy_config.util.Translatable; +import me.fzzyhmstrs.fzzy_config.util.Walkable; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipAppender; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +/** + * A settings block that will provide a tooltip from the supplied TooltipAppender + */ +public class TooltipSettings implements Translatable, Walkable { + + public TooltipSettings(@Nullable Supplier appender) { + this.appender = appender; + } + + public TooltipSettings(ItemStack stack) { + this(() -> new ItemStackAppender(stack)); + } + + public TooltipSettings() { + this((Supplier) null); + } + + @Nullable + Supplier appender; + + @NotNull + @Override + public String translationKey() { + return ""; + } + + @NotNull + @Override + public String descriptionKey() { + return ""; + } + + @NotNull + @Override + public MutableText translation(@Nullable String fallback) { + return Translatable.super.translation(fallback); + } + + @NotNull + @Override + public MutableText description(@Nullable String fallback) { + System.out.println("description"); + if (appender == null) return Text.empty(); + final MutableText[] desc = {null}; + appender.get().appendTooltip(Item.TooltipContext.DEFAULT, (text) -> { + if (desc[0] == null) { + desc[0] = text.copy(); + } else { + desc[0].append(Text.literal("\n")).append(text); + } + }, TooltipType.BASIC); + return desc[0]; + } + + @Override + public boolean hasTranslation() { + return false; + } + + @Override + public boolean hasDescription() { + System.out.println("description check??"); + return appender != null; + } + + private static record ItemStackAppender(ItemStack stack) implements TooltipAppender { + + @Override + public void appendTooltip(Item.TooltipContext context, Consumer tooltip, TooltipType type) { + stack.getTooltip(context, null, type).forEach(tooltip); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/AstralShiftEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/AstralShiftEffect.java index cdcea18d..2a3d437d 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/AstralShiftEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/AstralShiftEffect.java @@ -2,7 +2,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectCategory; @@ -13,7 +12,7 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.Box; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; @@ -24,20 +23,20 @@ public AstralShiftEffect(StatusEffectCategory statusEffectCategory, int color) { super (statusEffectCategory, color); } @Override - public void applyUpdateEffect(LivingEntity entity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity entity, int amplifier) { if (!entity.getWorld().isClient()) { ServerWorld world = (ServerWorld) entity.getWorld(); if (entity instanceof PlayerEntity player) { - if (player.hasStatusEffect(this)) { - StatusEffectInstance effectInstance = player.getStatusEffect(this); + if (player.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.ASTRAL_SHIFT))) { + StatusEffectInstance effectInstance = player.getStatusEffect(EffectRegistry.getReference(EffectRegistry.ASTRAL_SHIFT)); if (effectInstance != null && effectInstance.getDuration() < 10) { double x = entity.getX(); double y = entity.getY(); double z = entity.getZ(); - float damageMulti = (int) Config.getFloat("astralShiftDamageModifier", "UniqueEffects", ConfigDefaultValues.astralShiftDamageModifier); - float damageMax = (int) Config.getFloat("astralShiftDamageMax", "UniqueEffects", ConfigDefaultValues.astralShiftDamageMax); + float damageMulti = Config.uniqueEffects.astralShift.damageModifier; + float damageMax = Config.uniqueEffects.astralShift.damageMax; double radius = 8; float damage = Math.min((amplifier) * damageMulti, damageMax); @@ -64,22 +63,18 @@ public void applyUpdateEffect(LivingEntity entity, int amplifier) { HelperMethods.spawnRainingParticles(world, ParticleTypes.EXPLOSION, target, 2, 1); } } - entity.removeStatusEffect(this); + entity.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.ASTRAL_SHIFT)); } } } } super.applyUpdateEffect(entity, amplifier); + return true; } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; } - - - @Override - public void onRemoved(LivingEntity entity, AttributeContainer attributes, int amplifier) { - } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/BattleFatigueEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/BattleFatigueEffect.java index 2decd760..8d633236 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/BattleFatigueEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/BattleFatigueEffect.java @@ -10,10 +10,11 @@ public BattleFatigueEffect(StatusEffectCategory statusEffectCategory, int color) } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { super.applyUpdateEffect(pLivingEntity, pAmplifier); + return true; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/EchoEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/EchoEffect.java index b927ce1a..a4991c21 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/EchoEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/EchoEffect.java @@ -4,7 +4,6 @@ import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectCategory; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.registry.EffectRegistry; public class EchoEffect extends StatusEffect { @@ -13,20 +12,21 @@ public EchoEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { - int damage = Config.getInt("echoDamage", "StatusEffects", ConfigDefaultValues.echoDamage); if (livingEntity.age % 15 == 0) { + int damage = Config.statusEffects.echoDamage; livingEntity.timeUntilRegen = 0; livingEntity.damage(livingEntity.getDamageSources().magic(), damage+amplifier); - livingEntity.removeStatusEffect(EffectRegistry.ECHO.get()); + livingEntity.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.ECHO)); } } super.applyUpdateEffect(livingEntity, amplifier); + return true; } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/ElementalVortexEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/ElementalVortexEffect.java index d78986c6..372f82ef 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/ElementalVortexEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/ElementalVortexEffect.java @@ -10,7 +10,6 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.Box; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; @@ -32,14 +31,12 @@ public void setAdditionalData(int data) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { ServerWorld serverWorld = (ServerWorld) livingEntity.getWorld(); - float abilityDamageFire = 0; - float abilityDamageFrost = 0; - SoundHelper.loopSound(livingEntity, SoundRegistry.AMBIENCE_WIND_LOOP.getId(), 20); + SoundHelper.loopSound(livingEntity, SoundRegistry.AMBIENCE_WIND_LOOP.getId(), 20); - if (livingEntity.getStatusEffect(EffectRegistry.ELEMENTAL_VORTEX.get()) instanceof SimplySwordsStatusEffectInstance statusEffect) { + if (livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.ELEMENTAL_VORTEX)) instanceof SimplySwordsStatusEffectInstance statusEffect) { sourceEntity = statusEffect.getSourceEntity(); additionalData = statusEffect.getAdditionalData(); } @@ -50,14 +47,11 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, livingEntity)) { if (additionalData != 0) { - DamageSource damageSource = livingEntity.getDamageSources().indirectMagic(le, livingEntity); - damageSource = livingEntity.getDamageSources().indirectMagic(livingEntity, sourceEntity); - float spellScalingModifier = Config.getFloat("vortexSpellScaling", "UniqueEffects", ConfigDefaultValues.vortexSpellScaling); - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "frost") > 1) - abilityDamageFrost = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "frost"); - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire") > 1) - abilityDamageFire = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire"); - le.timeUntilRegen = 0; + DamageSource damageSource = livingEntity.getDamageSources().indirectMagic(livingEntity, sourceEntity); + float spellScalingModifier = Config.uniqueEffects.vortex.spellScaling; + float abilityDamageFrost = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "frost"); + float abilityDamageFire = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire"); + le.timeUntilRegen = 0; le.damage(damageSource, (3 + ((float) amplifier / 2)) + (abilityDamageFire + abilityDamageFrost)); } @@ -72,17 +66,18 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return false; } @Override - public void onRemoved(LivingEntity entity, AttributeContainer attributes, int amplifier) { + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { SoundHelper.stopLoopingSound(entity, SoundRegistry.AMBIENCE_WIND_LOOP.getId()); - super.onRemoved(entity, attributes, amplifier); + super.onRemoved(attributes); } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return super.canApplyUpdateEffect(pDuration, pAmplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/FatalFlickerEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/FatalFlickerEffect.java index b34f480e..431ab6a3 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/FatalFlickerEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/FatalFlickerEffect.java @@ -11,7 +11,6 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.util.HelperMethods; @@ -24,8 +23,8 @@ public FatalFlickerEffect(StatusEffectCategory statusEffectCategory, int color) } public static void performDash(LivingEntity user, World world, int radius) { - int dashDistance = (int) Config.getFloat("fatalFlickerDashVelocity", "UniqueEffects", ConfigDefaultValues.fatalFlickerDashVelocity); - int maxAmplifier = (int) Config.getFloat("fatalFlickerMaxStacks", "UniqueEffects", ConfigDefaultValues.fatalFlickerMaxStacks); + float dashDistance = Config.uniqueEffects.fatalFlicker.dashVelocity; + int maxAmplifier = Config.uniqueEffects.fatalFlicker.maxStacks; int amplifier = 1; user.setVelocity(user.getRotationVector().multiply(+dashDistance)); @@ -43,7 +42,7 @@ public static void performDash(LivingEntity user, World world, int radius) { } for (Entity entity : entities) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - HelperMethods.incrementStatusEffect(le, EffectRegistry.ECHO.get(), 20, amplifier, maxAmplifier); + HelperMethods.incrementStatusEffect(le, EffectRegistry.getReference(EffectRegistry.ECHO), 20, amplifier, maxAmplifier); } } @@ -56,15 +55,15 @@ public static void performDash(LivingEntity user, World world, int radius) { } @Override - public void applyUpdateEffect(LivingEntity user, int amplifier) { + public boolean applyUpdateEffect(LivingEntity user, int amplifier) { super.applyUpdateEffect(user, amplifier); if (!user.getWorld().isClient()) { - int ability_timer = Objects.requireNonNull(user.getStatusEffect(EffectRegistry.FATAL_FLICKER.get())).getDuration(); + int ability_timer = Objects.requireNonNull(user.getStatusEffect(EffectRegistry.getReference(EffectRegistry.FATAL_FLICKER))).getDuration(); World world = user.getWorld(); - int radius = (int) Config.getFloat("fatalFlickerRadius", "UniqueEffects", ConfigDefaultValues.fatalFlickerRadius); + int radius = Config.uniqueEffects.fatalFlicker.radius; //Player dash forward if (ability_timer >= 5) { @@ -96,10 +95,11 @@ public void applyUpdateEffect(LivingEntity user, int amplifier) { } } } + return true; } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/FireVortexEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/FireVortexEffect.java index b760265d..c253b6d2 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/FireVortexEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/FireVortexEffect.java @@ -1,13 +1,13 @@ package net.sweenus.simplyswords.effect; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.util.HelperMethods; @@ -27,11 +27,10 @@ public void setAdditionalData(int data) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { ServerWorld serverWorld = (ServerWorld) livingEntity.getWorld(); - float abilityDamage = 0; - if (livingEntity.getStatusEffect(EffectRegistry.FIRE_VORTEX.get()) instanceof SimplySwordsStatusEffectInstance statusEffect) { + if (livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.FIRE_VORTEX)) instanceof SimplySwordsStatusEffectInstance statusEffect) { sourceEntity = statusEffect.getSourceEntity(); additionalData = statusEffect.getAdditionalData(); } @@ -39,11 +38,11 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (livingEntity.age % Math.max(1, (15 - (amplifier))) == 0 && additionalData != 0) { DamageSource damageSource = livingEntity.getDamageSources().magic(); livingEntity.timeUntilRegen = 0; - if (sourceEntity != null) { + float abilityDamage = 0; + if (sourceEntity != null) { damageSource = livingEntity.getDamageSources().indirectMagic(livingEntity, sourceEntity); - float spellScalingModifier = Config.getFloat("vortexSpellScaling", "UniqueEffects", ConfigDefaultValues.vortexSpellScaling); - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire") > 1) - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire"); + float spellScalingModifier = Config.uniqueEffects.vortex.spellScaling; + abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire"); if (livingEntity instanceof PlayerEntity && sourceEntity instanceof PlayerEntity sourcePlayer) damageSource = livingEntity.getDamageSources().playerAttack(sourcePlayer); } @@ -56,10 +55,16 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return super.canApplyUpdateEffect(pDuration, pAmplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/FlameSeedEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/FlameSeedEffect.java index e9436bad..3b7671ff 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/FlameSeedEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/FlameSeedEffect.java @@ -2,6 +2,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.entity.effect.StatusEffects; @@ -13,7 +14,6 @@ import net.minecraft.sound.SoundEvents; import net.minecraft.util.math.Box; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; @@ -34,16 +34,16 @@ public void setAdditionalData(int data) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { int duration = 0; if (!livingEntity.getWorld().isClient()) { ServerWorld serverWorld = (ServerWorld) livingEntity.getWorld(); - float abilityDamage = Config.getFloat("emberstormDamage", "UniqueEffects", ConfigDefaultValues.emberstormDamage); + float abilityDamage = Config.uniqueEffects.emberstorm.damage; float volume = 0.3f; float pitch = 1.3f; int frequency = 20; SoundEvent soundEvent = SoundEvents.ENTITY_GENERIC_BURN; - if (livingEntity.getStatusEffect(EffectRegistry.FLAMESEED.get()) instanceof SimplySwordsStatusEffectInstance statusEffect) { + if (livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.FLAMESEED)) instanceof SimplySwordsStatusEffectInstance statusEffect) { sourceEntity = statusEffect.getSourceEntity(); additionalData = statusEffect.getAdditionalData(); duration = statusEffect.getDuration(); @@ -59,12 +59,12 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { HelperMethods.spawnOrbitParticles(serverWorld, livingEntity.getPos(), ParticleTypes.POOF, 1, 10); HelperMethods.spawnOrbitParticles(serverWorld, livingEntity.getPos(), ParticleTypes.EXPLOSION, 0.5, 2); HelperMethods.spawnOrbitParticles(serverWorld, livingEntity.getPos(), ParticleTypes.WARPED_SPORE, 1, 10); - abilityDamage = Config.getFloat("emberstormDetonationDamage", "UniqueEffects", ConfigDefaultValues.emberstormDetonationDamage); + abilityDamage = Config.uniqueEffects.emberstorm.detonationDamage; volume = 0.6f; pitch = 1.0f; soundEvent = SoundRegistry.SPELL_FIRE.get(); if (livingEntity.distanceTo(sourceEntity) < 30) { - int maxHaste = (int) Config.getFloat("emberstormMaxHaste", "UniqueEffects", ConfigDefaultValues.emberstormMaxHaste); + int maxHaste = Config.uniqueEffects.emberstorm.maxHaste; HelperMethods.incrementStatusEffect(sourceEntity, StatusEffects.HASTE, 120, 1, maxHaste); //HelperMethods.spawnWaistHeightParticles(serverWorld, ParticleTypes.EFFECT, sourceEntity, livingEntity, 20); } @@ -73,10 +73,10 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { for (Entity entity : serverWorld.getOtherEntities(livingEntity, box, EntityPredicates.VALID_LIVING_ENTITY)) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, sourceEntity)) { le.damage(damageSource, (abilityDamage)); - if (!le.hasStatusEffect(EffectRegistry.FLAMESEED.get()) && additionalData > 0) { + if (!le.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.FLAMESEED)) && additionalData > 0) { additionalData -= 1; SimplySwordsStatusEffectInstance flamSeedEffect = new SimplySwordsStatusEffectInstance( - EffectRegistry.FLAMESEED.get(), 101, 0, false, + EffectRegistry.getReference(EffectRegistry.FLAMESEED), 101, 0, false, false, true); flamSeedEffect.setSourceEntity(sourceEntity); flamSeedEffect.setAdditionalData(additionalData); @@ -89,7 +89,7 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (sourceEntity != null) { damageSource = livingEntity.getDamageSources().indirectMagic(livingEntity, sourceEntity); - float spellScalingModifier = Config.getFloat("emberstormSpellScaling", "UniqueEffects", ConfigDefaultValues.emberstormSpellScaling); + float spellScalingModifier = Config.uniqueEffects.emberstorm.spellScaling; if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire") > abilityDamage) abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "fire"); } @@ -106,10 +106,16 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return super.canApplyUpdateEffect(pDuration, pAmplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/FreezeEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/FreezeEffect.java index 568d3367..ae6f3083 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/FreezeEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/FreezeEffect.java @@ -10,18 +10,19 @@ public FreezeEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { if (!pLivingEntity.getWorld().isClient()) { double x = pLivingEntity.getX(); double y = pLivingEntity.getY(); double z = pLivingEntity.getZ(); - pLivingEntity.teleport(x, y, z); + pLivingEntity.teleport(x, y, z, false); pLivingEntity.setVelocity(0, 0, 0); } super.applyUpdateEffect(pLivingEntity, pAmplifier); + return true; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/FrenzyEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/FrenzyEffect.java index b3d810a8..68f5cf20 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/FrenzyEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/FrenzyEffect.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.effect; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.particle.ParticleTypes; import net.sweenus.simplyswords.item.custom.WickpiercerSwordItem; @@ -13,16 +14,22 @@ public FrenzyEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { if (!(livingEntity.getMainHandStack().getItem() instanceof WickpiercerSwordItem) && !(livingEntity.getOffHandStack().getItem() instanceof WickpiercerSwordItem)) - livingEntity.removeStatusEffect(EffectRegistry.FRENZY.get()); + livingEntity.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.FRENZY)); } super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return super.canApplyUpdateEffect(pDuration, pAmplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/FrostVortexEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/FrostVortexEffect.java index 6bfb8dcb..4a38460c 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/FrostVortexEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/FrostVortexEffect.java @@ -1,13 +1,13 @@ package net.sweenus.simplyswords.effect; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.util.HelperMethods; @@ -27,11 +27,11 @@ public void setAdditionalData(int data) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { ServerWorld serverWorld = (ServerWorld) livingEntity.getWorld(); float abilityDamage = 0; - if (livingEntity.getStatusEffect(EffectRegistry.FROST_VORTEX.get()) instanceof SimplySwordsStatusEffectInstance statusEffect) { + if (livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.FROST_VORTEX)) instanceof SimplySwordsStatusEffectInstance statusEffect) { sourceEntity = statusEffect.getSourceEntity(); additionalData = statusEffect.getAdditionalData(); } @@ -41,9 +41,8 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { livingEntity.timeUntilRegen = 0; if (sourceEntity != null) { damageSource = livingEntity.getDamageSources().indirectMagic(livingEntity, sourceEntity); - float spellScalingModifier = Config.getFloat("vortexSpellScaling", "UniqueEffects", ConfigDefaultValues.vortexSpellScaling); - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "frost") > 1) - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "frost"); + float spellScalingModifier = Config.uniqueEffects.vortex.spellScaling; + abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, sourceEntity, "frost"); if (livingEntity instanceof PlayerEntity && sourceEntity instanceof PlayerEntity sourcePlayer) damageSource = livingEntity.getDamageSources().playerAttack(sourcePlayer); } @@ -56,10 +55,16 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return super.canApplyUpdateEffect(pDuration, pAmplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/HighOrbitingEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/HighOrbitingEffect.java index c535a4bc..86ef4821 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/HighOrbitingEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/HighOrbitingEffect.java @@ -22,7 +22,7 @@ public HighOrbitingEffect(StatusEffectCategory statusEffectCategory, int color) private double currentAngle = 0.0; @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient) { ServerWorld serverWorld = (ServerWorld) livingEntity.getWorld(); Vec3d center = livingEntity.getPos().add(0, (livingEntity.getHeight() + yOffset), 0); // Center around the entity's waist @@ -51,6 +51,7 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return true; } private void spawnParticles(ServerWorld serverWorld, double x, double y, double z) { diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/ImmolationEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/ImmolationEffect.java index 67b8471e..d71d019b 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/ImmolationEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/ImmolationEffect.java @@ -6,12 +6,14 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; -import net.minecraft.nbt.NbtCompound; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.sound.SoundCategory; import net.minecraft.util.math.Box; +import net.sweenus.simplyswords.api.SimplySwordsAPI; +import net.sweenus.simplyswords.power.GemPowerComponent; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.GemPowerRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; @@ -24,7 +26,7 @@ public ImmolationEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { if (!pLivingEntity.getWorld().isClient()) { if (pLivingEntity instanceof PlayerEntity player) { if (pLivingEntity.age % 15 == 0) { @@ -36,43 +38,30 @@ public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { HelperMethods.spawnParticle(player.getWorld(), ParticleTypes.LAVA, player.getX(), player.getY()+0.5, player.getZ(), 0.5, 0.3, -0.2); HelperMethods.spawnParticle(player.getWorld(), ParticleTypes.SMOKE, player.getX(), player.getY()+0.5, player.getZ(), 0, 0, 0); - float abilityDamage = (player.getHealth() / 3); - ItemStack checkMainStack = player.getMainHandStack(); ItemStack checkOffStack = player.getOffHandStack(); if (checkMainStack.getItem() instanceof SwordItem || checkOffStack.getItem() instanceof SwordItem) { - - //Check mainhand for immolation effect. Remove effect if not present - if (player.getMainHandStack().hasNbt()) { - NbtCompound rpnbt = player.getMainHandStack().getNbt(); - if (rpnbt != null) { - if (!player.getMainHandStack().getNbt().getString("runic_power").equals("immolation") - && !player.getMainHandStack().getNbt().getString("nether_power").equals("radiance")) { - player.removeStatusEffect(EffectRegistry.IMMOLATION.get()); - } - } - } - //Check offhand for immolation effect. Remove effect if not present - if (player.getMainHandStack().hasNbt()) { - NbtCompound rpnbt = player.getOffHandStack().getNbt(); - if (rpnbt != null) { - if (!player.getOffHandStack().getNbt().getString("runic_power").equals("immolation") - && !player.getOffHandStack().getNbt().getString("nether_power").equals("radiance")) { - player.removeStatusEffect(EffectRegistry.IMMOLATION.get()); - } - } + GemPowerComponent mainComponent = SimplySwordsAPI.getComponent(checkMainStack); + GemPowerComponent offComponent = SimplySwordsAPI.getComponent(checkOffStack); + if (!(mainComponent.hasRunic(GemPowerRegistry.IMMOLATION) + || offComponent.hasRunic(GemPowerRegistry.IMMOLATION) + || mainComponent.hasNether(GemPowerRegistry.RADIANCE) + || offComponent.hasNether(GemPowerRegistry.RADIANCE))) { + player.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.IMMOLATION)); } + } else { + player.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.IMMOLATION)); } - else {player.removeStatusEffect(EffectRegistry.IMMOLATION.get());} + float abilityDamage = (player.getHealth() / 3); //Damage Box box = HelperMethods.createBox(pLivingEntity, pAmplifier); for (Entity entities : player.getWorld().getOtherEntities(player, box, EntityPredicates.VALID_LIVING_ENTITY)) { if (entities != null) { - if ((entities instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, player)){ + if ((entities instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, player)) { le.timeUntilRegen = 0; le.damage(player.getDamageSources().indirectMagic(player, player), abilityDamage); le.setOnFireFor(1); @@ -84,13 +73,6 @@ public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { } } - super.applyUpdateEffect(pLivingEntity, pAmplifier); - - } - - @Override - public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { - return true; + return super.applyUpdateEffect(pLivingEntity, pAmplifier); } - -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/MagislamEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/MagislamEffect.java index 6e6dd68c..1ae00ab0 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/MagislamEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/MagislamEffect.java @@ -2,6 +2,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.particle.ParticleTypes; @@ -11,7 +12,6 @@ import net.minecraft.sound.SoundEvents; import net.minecraft.util.math.Box; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.util.HelperMethods; @@ -26,17 +26,17 @@ public MagislamEffect(StatusEffectCategory statusEffectCategory, int color) { @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { if (livingEntity instanceof PlayerEntity player) { - int ability_timer = Objects.requireNonNull(player.getStatusEffect(EffectRegistry.MAGISLAM.get())).getDuration(); - int radius = (int) Config.getFloat("magislamRadius", "UniqueEffects", ConfigDefaultValues.magislamRadius); + int ability_timer = Objects.requireNonNull(player.getStatusEffect(EffectRegistry.getReference(EffectRegistry.MAGISLAM))).getDuration(); + double radius = Config.uniqueEffects.magislam.radius; double leapVelocity = 1.5; double height = 0.9; double descentVelocity = 1; - double damage_multiplier = Config.getFloat("magislamDamageModifier", "UniqueEffects", ConfigDefaultValues.magislamDamageModifier); - double damage = (HelperMethods.getAttackDamage(livingEntity.getMainHandStack()) * damage_multiplier); + double damage_multiplier = Config.uniqueEffects.magislam.damageModifier; + double damage = (HelperMethods.getEntityAttackDamage(livingEntity) * damage_multiplier); if (ability_timer >= 60) { player.setVelocity(livingEntity.getRotationVector().multiply(+leapVelocity)); @@ -59,15 +59,21 @@ else if (ability_timer <= 50) { } HelperMethods.spawnOrbitParticles((ServerWorld) player.getWorld(), player.getPos(), ParticleTypes.CAMPFIRE_COSY_SMOKE, 2, 8); HelperMethods.spawnOrbitParticles((ServerWorld) player.getWorld(), player.getPos(), ParticleTypes.EXPLOSION, 1, 3); - player.getWorld().playSoundFromEntity(null, player, SoundEvents.ENTITY_GENERIC_EXPLODE, + player.getWorld().playSoundFromEntity(null, player, SoundEvents.ENTITY_GENERIC_EXPLODE.value(), SoundCategory.PLAYERS, 0.9f, 1.1f); - player.removeStatusEffect(EffectRegistry.MAGISLAM.get()); - player.removeStatusEffect(EffectRegistry.RESILIENCE.get()); + player.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.MAGISLAM)); + player.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.RESILIENCE)); } } } } super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @@ -76,4 +82,4 @@ public boolean canApplyUpdateEffect(int duration, int amplifier) { return true; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/MagistormEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/MagistormEffect.java index 5ff27a3a..477c199b 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/MagistormEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/MagistormEffect.java @@ -11,7 +11,6 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.util.math.Box; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.item.custom.MagiscytheSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; @@ -30,20 +29,19 @@ public MagistormEffect(StatusEffectCategory statusEffectCategory, int color) { width = 4; } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { ServerWorld world = (ServerWorld) livingEntity.getWorld(); double x = livingEntity.getX(); double y = livingEntity.getY(); double z = livingEntity.getZ(); - float damage = Config.getFloat("magistormDamage", "UniqueEffects", ConfigDefaultValues.magistormDamage); - double radius = Config.getFloat("magistormRadius", "UniqueEffects", ConfigDefaultValues.magistormRadius); - float duration = Config.getFloat("magistormDuration", "UniqueEffects", ConfigDefaultValues.magistormDuration); + double radius = Config.uniqueEffects.magistorm.radius; + float duration = Config.uniqueEffects.magistorm.duration; int frequency = Math.max(3, 10 - amplifier); - float spellScalingModifier = Config.getFloat("magistormSpellScaling", "UniqueEffects", ConfigDefaultValues.magistormSpellScaling); - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, livingEntity, "arcane") > damage) - damage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, livingEntity, "arcane"); + float spellScalingModifier = Config.uniqueEffects.magistorm.spellScaling; + + float damage = Math.max(Config.uniqueEffects.magistorm.damage, HelperMethods.commonSpellAttributeScaling(spellScalingModifier, livingEntity, "arcane")); DamageSource damageSource = livingEntity.getDamageSources().indirectMagic(livingEntity, livingEntity); if (livingEntity.age % frequency == 0 && livingEntity instanceof PlayerEntity player) { @@ -65,13 +63,14 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { SoundCategory.PLAYERS, 0.1f, 1.0f + (player.getRandom().nextFloat())); if (new Random().nextInt(100) < 5) - HelperMethods.incrementStatusEffect(livingEntity, EffectRegistry.MAGISTORM.get(), (int) duration, 1, 10); + HelperMethods.incrementStatusEffect(livingEntity, EffectRegistry.getReference(EffectRegistry.MAGISTORM), (int) duration, 1, 10); } } } } super.applyUpdateEffect(livingEntity, amplifier); + return false; } @@ -81,4 +80,4 @@ public boolean canApplyUpdateEffect(int duration, int amplifier) { return super.canApplyUpdateEffect(duration, amplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/OnslaughtEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/OnslaughtEffect.java index 860d3413..f238d1e2 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/OnslaughtEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/OnslaughtEffect.java @@ -14,7 +14,7 @@ public OnslaughtEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { if (!pLivingEntity.getWorld().isClient()) { if (pLivingEntity instanceof PlayerEntity) { @@ -31,14 +31,14 @@ public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { } //If Onslaught is expiring, remove all haste and grant weakness. Also expire Onslaught early. - if (pLivingEntity.hasStatusEffect(EffectRegistry.ONSLAUGHT.get())) { - StatusEffectInstance statusEffect = pLivingEntity.getStatusEffect(EffectRegistry.ONSLAUGHT.get()); + if (pLivingEntity.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.ONSLAUGHT))) { + StatusEffectInstance statusEffect = pLivingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.ONSLAUGHT)); assert statusEffect != null; if (statusEffect.getDuration() < 10 && pLivingEntity.hasStatusEffect(StatusEffects.HASTE)) { pLivingEntity.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, 80, 0), pLivingEntity); pLivingEntity.removeStatusEffect(StatusEffects.HASTE); - pLivingEntity.removeStatusEffect(EffectRegistry.ONSLAUGHT.get()); + pLivingEntity.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.ONSLAUGHT)); } } } @@ -46,6 +46,7 @@ public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { super.applyUpdateEffect(pLivingEntity, pAmplifier); + return true; } @Override @@ -53,4 +54,4 @@ public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/OrbitingEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/OrbitingEffect.java index a4c214ef..8039427d 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/OrbitingEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/OrbitingEffect.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.effect; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.particle.ParticleEffect; @@ -8,7 +9,7 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.Vec3d; -public class OrbitingEffect extends StatusEffect { +public abstract class OrbitingEffect extends StatusEffect { protected ParticleEffect particleType = ParticleTypes.SMOKE; // Default particle type public OrbitingEffect(StatusEffectCategory statusEffectCategory, int color) { super (statusEffectCategory, color); @@ -17,7 +18,7 @@ public OrbitingEffect(StatusEffectCategory statusEffectCategory, int color) { private double currentAngle = 0.0; @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient) { ServerWorld serverWorld = (ServerWorld) livingEntity.getWorld(); Vec3d center = livingEntity.getPos().add(0, livingEntity.getHeight() / 2.0, 0); // Center around the entity's waist @@ -50,6 +51,7 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return true; } // Protected method to set the particle type @@ -57,6 +59,8 @@ protected void setParticleType(ParticleEffect particleType) { this.particleType = particleType; } + public abstract void onRemoved(LivingEntity entity, AttributeContainer attributes); + @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/PainEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/PainEffect.java index 3f682306..02fd4b57 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/PainEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/PainEffect.java @@ -23,11 +23,11 @@ public void setAdditionalData(int data) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { int startingTickFrequency = 15; - if (livingEntity.getStatusEffect(EffectRegistry.PAIN.get()) instanceof SimplySwordsStatusEffectInstance statusEffect) { + if (livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.PAIN)) instanceof SimplySwordsStatusEffectInstance statusEffect) { sourceEntity = statusEffect.getSourceEntity(); additionalData = statusEffect.getAdditionalData(); } @@ -44,10 +44,11 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return true; } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/ResilienceEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/ResilienceEffect.java index 8315479e..701a984f 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/ResilienceEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/ResilienceEffect.java @@ -9,10 +9,11 @@ public ResilienceEffect(StatusEffectCategory statusEffectCategory, int color) { super (statusEffectCategory, color); } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { super.applyUpdateEffect(pLivingEntity, pAmplifier); + return true; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/RibboncleaveEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/RibboncleaveEffect.java index f44afdf3..f93172a8 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/RibboncleaveEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/RibboncleaveEffect.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.effect; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.particle.ParticleTypes; import net.sweenus.simplyswords.item.custom.RibboncleaverSwordItem; @@ -13,16 +14,22 @@ public RibboncleaveEffect(StatusEffectCategory statusEffectCategory, int color) } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { if (!(livingEntity.getMainHandStack().getItem() instanceof RibboncleaverSwordItem)) - livingEntity.removeStatusEffect(EffectRegistry.RIBBONCLEAVE.get()); + livingEntity.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.RIBBONCLEAVE)); } super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return super.canApplyUpdateEffect(pDuration, pAmplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/RibbonwrathEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/RibbonwrathEffect.java index ad9e278f..9e403e6b 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/RibbonwrathEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/RibbonwrathEffect.java @@ -11,10 +11,11 @@ public RibbonwrathEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { super.applyUpdateEffect(pLivingEntity, pAmplifier); + return true; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/SmoulderingEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/SmoulderingEffect.java index 4e43a2c3..cbff8248 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/SmoulderingEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/SmoulderingEffect.java @@ -10,11 +10,12 @@ public SmoulderingEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { } super.applyUpdateEffect(livingEntity, amplifier); + return true; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/SporeSwarmEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/SporeSwarmEffect.java index 82152688..3d21a9d4 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/SporeSwarmEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/SporeSwarmEffect.java @@ -21,7 +21,7 @@ public SporeSwarmEffect(StatusEffectCategory statusEffectCategory, int color) { setParticleType3(ParticleTypes.WARPED_SPORE); } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { ServerWorld world = (ServerWorld) livingEntity.getWorld(); double x = livingEntity.getX(); @@ -40,12 +40,12 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if ((livingEntity.getMainHandStack().getItem() instanceof BrambleSwordItem) && (livingEntity.getOffHandStack().getItem() instanceof BrambleSwordItem)) maxAmp = 74; SimplySwordsStatusEffectInstance effect = HelperMethods.incrementSimplySwordsStatusEffect( - ee, EffectRegistry.PAIN.get(), 60, 1, maxAmp); + ee, EffectRegistry.getReference(EffectRegistry.PAIN), 60, 1, maxAmp); effect.setSourceEntity(livingEntity); effect.setAdditionalData(0); ee.addStatusEffect(effect); HelperMethods.spawnWaistHeightParticles(world, ParticleTypes.SMOKE, ee, livingEntity, 10); - HelperMethods.incrementStatusEffect(livingEntity, EffectRegistry.SPORE_SWARM.get(), 200, 1, 4); + HelperMethods.incrementStatusEffect(livingEntity, EffectRegistry.getReference(EffectRegistry.SPORE_SWARM), 200, 1, 4); } } } @@ -53,6 +53,7 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { super.applyUpdateEffect(livingEntity, amplifier); + return false; } @@ -62,4 +63,4 @@ public boolean canApplyUpdateEffect(int duration, int amplifier) { return super.canApplyUpdateEffect(duration, amplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/StormEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/StormEffect.java index b2e81fff..d308cd6a 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/StormEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/StormEffect.java @@ -11,22 +11,21 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.Box; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.util.HelperMethods; public class StormEffect extends StatusEffect { public StormEffect(StatusEffectCategory statusEffectCategory, int color) {super (statusEffectCategory, color); } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { if (!pLivingEntity.getWorld().isClient()) { ServerWorld world = (ServerWorld)pLivingEntity.getWorld(); - int hradius = (int) Config.getFloat("stormRadius", "UniqueEffects", ConfigDefaultValues.stormRadius); - int vradius = (int) (Config.getFloat("stormRadius", "UniqueEffects", ConfigDefaultValues.stormRadius) / 2); + double hRadius = Config.uniqueEffects.storm.radius; + double vRadius = Config.uniqueEffects.storm.radius / 2f; double x = pLivingEntity.getX(); double y = pLivingEntity.getY(); double z = pLivingEntity.getZ(); var pPlayer = pLivingEntity.getAttacker(); - Box box = new Box(x + hradius, y +vradius, z + hradius, x - hradius, y - vradius, z - hradius); + Box box = new Box(x + hRadius, y +vRadius, z + hRadius, x - hRadius, y - vRadius, z - hRadius); for(Entity e: world.getOtherEntities(pPlayer, box, EntityPredicates.VALID_LIVING_ENTITY)) { @@ -46,6 +45,7 @@ public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { super.applyUpdateEffect(pLivingEntity, pAmplifier); + return true; } @@ -55,4 +55,4 @@ public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/VoidAssaultEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/VoidAssaultEffect.java index cbbbac37..15388ceb 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/VoidAssaultEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/VoidAssaultEffect.java @@ -1,11 +1,11 @@ package net.sweenus.simplyswords.effect; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.particle.ParticleTypes; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.registry.EffectRegistry; @@ -24,11 +24,11 @@ public void setAdditionalData(int data) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { - int voidcallerStartingTickFrequency = (int) Config.getFloat("voidcallerStartingTickFrequency", "UniqueEffects", ConfigDefaultValues.voidcallerStartingTickFrequency); + int voidcallerStartingTickFrequency = Config.uniqueEffects.voidcaller.get().startingTickFrequency; - if (livingEntity.getStatusEffect(EffectRegistry.VOIDASSAULT.get()) instanceof SimplySwordsStatusEffectInstance statusEffect) { + if (livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.VOIDASSAULT)) instanceof SimplySwordsStatusEffectInstance statusEffect) { sourceEntity = statusEffect.getSourceEntity(); additionalData = statusEffect.getAdditionalData(); } @@ -42,10 +42,16 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @Override public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return super.canApplyUpdateEffect(pDuration, pAmplifier); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/VoidcloakEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/VoidcloakEffect.java index f081b343..92e70d01 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/VoidcloakEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/VoidcloakEffect.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.effect; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.AttributeContainer; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.particle.ParticleTypes; @@ -11,8 +12,14 @@ public VoidcloakEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { super.applyUpdateEffect(livingEntity, amplifier); + return false; + } + + @Override + public void onRemoved(LivingEntity entity, AttributeContainer attributes) { + } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/WardEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/WardEffect.java index 5b6e5e2b..4053dff0 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/WardEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/WardEffect.java @@ -15,7 +15,7 @@ public WardEffect(StatusEffectCategory statusEffectCategory, int color) { } @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient()) { if (livingEntity instanceof PlayerEntity) { if (livingEntity.age % 20 == 0) { @@ -24,6 +24,7 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return true; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/WideOrbitingEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/WideOrbitingEffect.java index 6525ccd4..1c661651 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/WideOrbitingEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/WideOrbitingEffect.java @@ -21,7 +21,7 @@ public WideOrbitingEffect(StatusEffectCategory statusEffectCategory, int color) private double currentAngle = 0.0; @Override - public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { + public boolean applyUpdateEffect(LivingEntity livingEntity, int amplifier) { if (!livingEntity.getWorld().isClient) { ServerWorld serverWorld = (ServerWorld) livingEntity.getWorld(); Vec3d center = livingEntity.getPos().add(0, (livingEntity.getHeight() / yOffset), 0); // Center around the entity's waist @@ -51,6 +51,7 @@ public void applyUpdateEffect(LivingEntity livingEntity, int amplifier) { } } super.applyUpdateEffect(livingEntity, amplifier); + return true; } private void spawnParticles(ServerWorld serverWorld, double x, double y, double z) { diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/WildfireEffect.java b/common/src/main/java/net/sweenus/simplyswords/effect/WildfireEffect.java index 52ad1061..bb72594a 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/WildfireEffect.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/WildfireEffect.java @@ -8,27 +8,25 @@ import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.Box; -import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.util.HelperMethods; public class WildfireEffect extends StatusEffect { public WildfireEffect(StatusEffectCategory statusEffectCategory, int color) {super (statusEffectCategory, color); } @Override - public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { + public boolean applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { if (!pLivingEntity.getWorld().isClient()) { LivingEntity pPlayer = pLivingEntity.getAttacker(); - if (pPlayer != null){ + if (pPlayer != null) { if (pPlayer instanceof PlayerEntity) { ServerWorld world = (ServerWorld) pLivingEntity.getWorld(); - int hradius = (int) Config.getFloat("wildfireRadius", "RunicEffects", ConfigDefaultValues.wildfireRadius); - int vradius = (int) (Config.getFloat("wildfireRadius", "RunicEffects", ConfigDefaultValues.wildfireRadius) / 2); + double hradius = Config.gemPowers.wildfire.radius; + double vradius = Config.gemPowers.wildfire.radius / 2.0; double x = pLivingEntity.getX(); double y = pLivingEntity.getY(); double z = pLivingEntity.getZ(); - int pduration = (int) SimplySwords.runicEffectsConfig.wildfireDuration / 20; + int pduration = Config.gemPowers.wildfire.duration / 20; Box box = new Box(x + hradius, y + vradius, z + hradius, x - hradius, y - vradius, z - hradius); for (Entity e : world.getEntitiesByType(pLivingEntity.getType(), box, EntityPredicates.VALID_ENTITY)) { @@ -43,6 +41,7 @@ public void applyUpdateEffect(LivingEntity pLivingEntity, int pAmplifier) { super.applyUpdateEffect(pLivingEntity, pAmplifier); + return true; } @Override @@ -50,4 +49,4 @@ public boolean canApplyUpdateEffect(int pDuration, int pAmplifier) { return true; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/effect/instance/SimplySwordsStatusEffectInstance.java b/common/src/main/java/net/sweenus/simplyswords/effect/instance/SimplySwordsStatusEffectInstance.java index 8a9ba7e8..d07eb67f 100644 --- a/common/src/main/java/net/sweenus/simplyswords/effect/instance/SimplySwordsStatusEffectInstance.java +++ b/common/src/main/java/net/sweenus/simplyswords/effect/instance/SimplySwordsStatusEffectInstance.java @@ -3,13 +3,14 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.registry.entry.RegistryEntry; public class SimplySwordsStatusEffectInstance extends StatusEffectInstance { public LivingEntity sourceEntity; public int additionalData; - public SimplySwordsStatusEffectInstance(StatusEffect type, int duration, int amplifier, boolean ambient, boolean showParticles, boolean showIcon) { + public SimplySwordsStatusEffectInstance(RegistryEntry type, int duration, int amplifier, boolean ambient, boolean showParticles, boolean showIcon) { super(type, duration, amplifier, ambient, showParticles, showIcon); } diff --git a/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardDarkEntity.java b/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardDarkEntity.java index 568e2d62..4f1ea465 100644 --- a/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardDarkEntity.java +++ b/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardDarkEntity.java @@ -19,7 +19,6 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; @@ -31,15 +30,14 @@ public class BattleStandardDarkEntity extends PathAwareEntity { public static final Supplier> TYPE = Suppliers.memoize(() -> EntityType.Builder.create(BattleStandardDarkEntity::new, SpawnGroup.MISC).build("battlestandarddark")); - float abilityDamage = Config.getFloat("abyssalStandardDamage", "UniqueEffects", ConfigDefaultValues.abyssalStandardDamage); - float spellScalingModifier = Config.getFloat("abyssalStandardSpellScaling", "UniqueEffects", ConfigDefaultValues.abyssalStandardSpellScaling); public PlayerEntity ownerEntity; public String standardType; public int decayRate; public static DefaultAttributeContainer.Builder createBattleStandardDarkAttributes() { return MobEntity.createMobAttributes().add(EntityAttributes.GENERIC_MAX_HEALTH, 150.0).add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.0f) - .add(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, 100.0f); + .add(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, 100.0f) + .add(EntityAttributes.GENERIC_STEP_HEIGHT, 3.0); } public BattleStandardDarkEntity(EntityType entityType, World world) { @@ -77,16 +75,12 @@ public void baseTick() { if (!ownerEntity.isAlive()) this.setHealth(this.getHealth() - 1000); int radius = 6; - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, ownerEntity, "soul") > 0) - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, ownerEntity, "soul"); if (standardType.equals("enigma") && !this.isInvisible()) this.setInvisible(true); if (standardType.equals("enigma")) { radius = 2; - this.setStepHeight(3f); - int moveRadius = (int) Config.getFloat("enigmaChaseRadius", "UniqueEffects", ConfigDefaultValues.enigmaChaseRadius); - abilityDamage = 1; + double moveRadius = Config.uniqueEffects.enigma.enigmaChaseRadius; Box box = HelperMethods.createBox(this, moveRadius); Entity closestEntity = this.getWorld().getOtherEntities(this, box, EntityPredicates.VALID_LIVING_ENTITY).stream() .filter(entity -> { @@ -107,6 +101,8 @@ public void baseTick() { } } + float abilityDamage = standardType.equals("enigma") ? 1f : HelperMethods.spellScaledDamage("soul", ownerEntity, Config.uniqueEffects.abyssalStandard.spellScaling, Config.uniqueEffects.abyssalStandard.damage); + //AOE Aura if (this.age % 10 == 0) { Box box = new Box(this.getX() + radius, this.getY() + (float) radius / 3, this.getZ() + radius, @@ -123,7 +119,7 @@ public void baseTick() { le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, 0), this); if (standardType.equals("enigma")) { SimplySwordsStatusEffectInstance effect = HelperMethods.incrementSimplySwordsStatusEffect( - le, EffectRegistry.PAIN.get(), 60, 1, 49); + le, EffectRegistry.getReference(EffectRegistry.PAIN), 60, 1, 49); effect.setSourceEntity(ownerEntity); effect.setAdditionalData(0); le.addStatusEffect(effect); @@ -184,4 +180,4 @@ public void baseTick() { } super.baseTick(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardEntity.java b/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardEntity.java index 3ee3edef..af6d74b5 100644 --- a/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardEntity.java +++ b/common/src/main/java/net/sweenus/simplyswords/entity/BattleStandardEntity.java @@ -8,6 +8,7 @@ import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.mob.MobEntity; @@ -15,11 +16,11 @@ import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.registry.Registries; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.Identifier; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; @@ -30,10 +31,6 @@ public class BattleStandardEntity extends PathAwareEntity { public static final Supplier> TYPE = Suppliers.memoize(() -> EntityType.Builder.create(BattleStandardEntity::new, SpawnGroup.MISC).build("battlestandard")); - float abilityDamage = Config.getFloat("righteousStandardDamage", "UniqueEffects", ConfigDefaultValues.righteousStandardDamage); - float abilityHeal = 3; - float abilityHealScalingModifier = Config.getFloat("righteousStandardSpellScalingHeal", "UniqueEffects", ConfigDefaultValues.righteousStandardSpellScalingHeal); - float spellScalingModifier = Config.getFloat("righteousStandardSpellScaling", "UniqueEffects", ConfigDefaultValues.righteousStandardSpellScaling); public LivingEntity ownerEntity; public String standardType; public int decayRate; @@ -91,10 +88,9 @@ public void baseTick() { if (!ownerEntity.isAlive()) this.setHealth(this.getHealth() - 1000); int radius = 6; - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, ownerEntity, "fire") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, ownerEntity, "fire"); - } - //AOE Aura + float abilityDamage = HelperMethods.spellScaledDamage("fire", ownerEntity, Config.uniqueEffects.righteousStandard.spellScaling, Config.uniqueEffects.righteousStandard.damage); + // AOE Aura + //living entity, ownerEntity, abilityDamage, if (this.age % 10 == 0) { Box box = new Box(this.getX() + radius, this.getY() + (float) radius / 3, this.getZ() + radius, this.getX() - radius, this.getY() - (float) radius / 3, this.getZ() - radius); @@ -103,18 +99,19 @@ public void baseTick() { && le != ownerEntity && !(le instanceof BattleStandardEntity) && !(le instanceof BattleStandardDarkEntity)) { - //Sunfire negative effects + // Sunfire negative effects switch (standardType) { case "sunfire" -> { le.damage(ownerEntity.getDamageSources().magic(), abilityDamage); le.setOnFireFor(1); le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, 1), this); } - //Nullification negative effects + // Nullification negative effects case "nullification" -> { - for (StatusEffectInstance statusEffect : le.getStatusEffects()) { - if (statusEffect != null && statusEffect.getEffectType().isBeneficial()) { - le.removeStatusEffect(statusEffect.getEffectType()); + for (StatusEffectInstance statusEffectInstance : le.getStatusEffects()) { + StatusEffect statusEffect = statusEffectInstance.getEffectType().value(); + if (statusEffect != null && statusEffect.isBeneficial()) { + le.removeStatusEffect(statusEffectInstance.getEffectType()); break; } } @@ -125,9 +122,8 @@ public void baseTick() { le.damage(ownerEntity.getDamageSources().magic(), abilityDamage); if (negativeEffect != null) { try { - le.addStatusEffect(new StatusEffectInstance( - Registries.STATUS_EFFECT.get(new Identifier(negativeEffect)), - 20, negativeEffectAmplifier), this); + RegistryEntry negativeEffectEntry = Registries.STATUS_EFFECT.getEntry(Identifier.of(negativeEffect)).orElseThrow(); + le.addStatusEffect(new StatusEffectInstance(negativeEffectEntry, 20, negativeEffectAmplifier), this); } catch (Exception e) { errorCatch(negativeEffect); this.setHealth(this.getHealth() - 1000); @@ -135,9 +131,8 @@ public void baseTick() { } if (negativeEffectSecondary != null) { try { - le.addStatusEffect(new StatusEffectInstance( - Registries.STATUS_EFFECT.get(new Identifier(negativeEffectSecondary)), - 20, negativeEffectAmplifier), this); + RegistryEntry negativeEffectSecondaryEntry = Registries.STATUS_EFFECT.getEntry(Identifier.of(negativeEffectSecondary)).orElseThrow(); + le.addStatusEffect(new StatusEffectInstance(negativeEffectSecondaryEntry, 20, negativeEffectAmplifier), this); } catch (Exception e) { errorCatch(negativeEffectSecondary); this.setHealth(this.getHealth() - 1000); @@ -151,6 +146,7 @@ public void baseTick() { 0, 0, 0); } + //Landing effects if (this.getHealth() > this.getMaxHealth() - 2 && this.isOnGround()) { HelperMethods.spawnParticle(getWorld(), ParticleTypes.LAVA, @@ -176,21 +172,21 @@ public void baseTick() { this.getX() - radius, this.getY() - (float) radius / 3, this.getZ() - radius); for (Entity entities : getWorld().getOtherEntities(this, box, EntityPredicates.VALID_LIVING_ENTITY)) { if (entities instanceof LivingEntity le && !HelperMethods.checkFriendlyFire(le, ownerEntity)) { - if (HelperMethods.commonSpellAttributeScaling(abilityHealScalingModifier, ownerEntity, "healing") > 0) { - abilityHeal = HelperMethods.commonSpellAttributeScaling(abilityHealScalingModifier, ownerEntity, "healing"); - } + float abilityHeal = HelperMethods.spellScaledDamage("healing", ownerEntity, Config.uniqueEffects.righteousStandard.spellScalingHeal, 3f); //Sunfire positive effects switch (standardType) { case "sunfire" -> { le.heal(abilityHeal); le.addStatusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 90, 1), this); } - //Nullification positive effects +// Nullification positive effects case "nullification" -> { - for (StatusEffectInstance statusEffect : le.getStatusEffects()) { - if (statusEffect != null && !statusEffect.getEffectType().isBeneficial() - && !Objects.equals(statusEffect.getEffectType(), EffectRegistry.BATTLE_FATIGUE.get())) { - le.removeStatusEffect(statusEffect.getEffectType()); + for (StatusEffectInstance statusEffectInstance : le.getStatusEffects()) { + RegistryEntry effectEntry = statusEffectInstance.getEffectType(); + StatusEffect effect = effectEntry.value(); + if (effect != null && !effect.isBeneficial() + && !Objects.equals(effectEntry, EffectRegistry.getReference(EffectRegistry.BATTLE_FATIGUE))) { + le.removeStatusEffect(effectEntry); break; } } @@ -201,9 +197,8 @@ public void baseTick() { le.heal(abilityHeal); if (positiveEffect != null) { try { - le.addStatusEffect(new StatusEffectInstance( - Registries.STATUS_EFFECT.get(new Identifier(positiveEffect)), - 85, positiveEffectAmplifier), this); + RegistryEntry positiveEffectEntry = Registries.STATUS_EFFECT.getEntry(Identifier.of(positiveEffect)).orElseThrow(); + le.addStatusEffect(new StatusEffectInstance(positiveEffectEntry, 85, positiveEffectAmplifier), this); } catch (Exception e) { errorCatch(positiveEffect); this.setHealth(this.getHealth() - 1000); @@ -211,9 +206,8 @@ public void baseTick() { } if (positiveEffectSecondary != null) { try { - le.addStatusEffect(new StatusEffectInstance( - Registries.STATUS_EFFECT.get(new Identifier(positiveEffectSecondary)), - 85, positiveEffectAmplifier), this); + RegistryEntry positiveEffectSecondaryEntry = Registries.STATUS_EFFECT.getEntry(Identifier.of(positiveEffectSecondary)).orElseThrow(); + le.addStatusEffect(new StatusEffectInstance(positiveEffectSecondaryEntry, 85, positiveEffectAmplifier), this); } catch (Exception e) { errorCatch(positiveEffectSecondary); this.setHealth(this.getHealth() - 1000); @@ -244,4 +238,4 @@ public void baseTick() { } super.baseTick(); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/entity/SimplySwordsBeeEntity.java b/common/src/main/java/net/sweenus/simplyswords/entity/SimplySwordsBeeEntity.java index 3acb49da..e36320c1 100644 --- a/common/src/main/java/net/sweenus/simplyswords/entity/SimplySwordsBeeEntity.java +++ b/common/src/main/java/net/sweenus/simplyswords/entity/SimplySwordsBeeEntity.java @@ -8,7 +8,6 @@ import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.mob.MobEntity; import net.minecraft.entity.passive.BeeEntity; -import net.minecraft.world.EntityView; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; @@ -52,10 +51,10 @@ public UUID getOwnerUuid() { } //I think this is just Entity.getWorld()? What even are mappings - @Override - public EntityView method_48926() { - return this.getWorld(); - } + //@Override + //public EntityView method_48926() { + //return this.getWorld(); + //} 1.21 public void setOwner(LivingEntity livingEntity) { this.ownerUuid = livingEntity.getUuid(); diff --git a/common/src/main/java/net/sweenus/simplyswords/item/ContainedRemnantItem.java b/common/src/main/java/net/sweenus/simplyswords/item/ContainedRemnantItem.java index a5dd23c6..44beb854 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/ContainedRemnantItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/ContainedRemnantItem.java @@ -1,17 +1,17 @@ package net.sweenus.simplyswords.item; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.item.TooltipContext; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Rarity; -import net.minecraft.world.World; import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; @@ -24,12 +24,11 @@ public ContainedRemnantItem() { @Override public Text getName(ItemStack stack) { - Style LEGENDARY = HelperMethods.getStyle("legendary"); - return Text.translatable(this.getTranslationKey(stack)).setStyle(LEGENDARY); + return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.LEGENDARY); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.contained_remnant_description").formatted(Formatting.GRAY)); @@ -56,4 +55,4 @@ public void appendTooltip(ItemStack itemStack, World world, List tooltip, } } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/EmpoweredRemnantItem.java b/common/src/main/java/net/sweenus/simplyswords/item/EmpoweredRemnantItem.java index c9019bd6..562ac263 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/EmpoweredRemnantItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/EmpoweredRemnantItem.java @@ -1,15 +1,15 @@ package net.sweenus.simplyswords.item; -import net.minecraft.client.item.TooltipContext; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Rarity; -import net.minecraft.world.World; import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; @@ -22,12 +22,11 @@ public EmpoweredRemnantItem() { @Override public Text getName(ItemStack stack) { - Style UNIQUE = HelperMethods.getStyle("unique"); - return Text.translatable(this.getTranslationKey(stack)).setStyle(UNIQUE); + return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.UNIQUE); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.remnant_description").formatted(Formatting.GRAY, Formatting.ITALIC)); @@ -36,4 +35,4 @@ public void appendTooltip(ItemStack itemStack, World world, List tooltip, tooltip.add(Text.translatable("item.simplyswords.remnant_description4").formatted(Formatting.GRAY, Formatting.ITALIC)); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/GobberEndSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/GobberEndSwordItem.java index 08381d12..d4444aa3 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/GobberEndSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/GobberEndSwordItem.java @@ -1,16 +1,13 @@ package net.sweenus.simplyswords.item; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; -import net.minecraft.world.World; import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import java.util.ArrayList; import java.util.Arrays; @@ -19,9 +16,8 @@ public class GobberEndSwordItem extends SwordItem { String[] repairIngredient; - public GobberEndSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, String... repairIngredient) { - super(toolMaterial, attackDamage, attackSpeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS)); + public GobberEndSwordItem(ToolMaterial toolMaterial, String... repairIngredient) { + super(toolMaterial, new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS)); this.repairIngredient = repairIngredient; } @@ -30,24 +26,26 @@ public boolean canRepair(ItemStack stack, ItemStack ingredient) { List potentialIngredients = new ArrayList<>(List.of()); Arrays.stream(repairIngredient).toList().forEach(repIngredient -> potentialIngredients.add( - Registries.ITEM.get(new Identifier(repIngredient)))); + Registries.ITEM.get(Identifier.of(repIngredient)))); return potentialIngredients.contains(ingredient.getItem()); } //Unbreakable weapon support for Gobber - static boolean unbreakable = Config.getBoolean("compatGobberEndWeaponsUnbreakable", "General", ConfigDefaultValues.compatGobberEndWeaponsUnbreakable); + static boolean unbreakable = Config.general.compatGobberEndWeaponsUnbreakable.get(); + /* 1.21 @Override public void onCraft(ItemStack stack, World world, PlayerEntity player) { if(world.isClient) return; - if(unbreakable) + if(Config.general.compatGobberEndWeaponsUnbreakable.get();) { stack.getOrCreateNbt().putBoolean("Unbreakable", true); } } + */ -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/GobberNetherSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/GobberNetherSwordItem.java index a446bd1c..da2c6a08 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/GobberNetherSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/GobberNetherSwordItem.java @@ -16,9 +16,8 @@ public class GobberNetherSwordItem extends SwordItem { String[] repairIngredient; - public GobberNetherSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, String... repairIngredient) { - super(toolMaterial, attackDamage, attackSpeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS)); + public GobberNetherSwordItem(ToolMaterial toolMaterial, String... repairIngredient) { + super(toolMaterial, new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS)); this.repairIngredient = repairIngredient; } @@ -27,7 +26,7 @@ public boolean canRepair(ItemStack stack, ItemStack ingredient) { List potentialIngredients = new ArrayList<>(List.of()); Arrays.stream(repairIngredient).toList().forEach(repIngredient -> potentialIngredients.add( - Registries.ITEM.get(new Identifier(repIngredient)))); + Registries.ITEM.get(Identifier.of(repIngredient)))); return potentialIngredients.contains(ingredient.getItem()); diff --git a/common/src/main/java/net/sweenus/simplyswords/item/ModToolMaterial.java b/common/src/main/java/net/sweenus/simplyswords/item/ModToolMaterial.java index 969cc490..68dfb483 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/ModToolMaterial.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/ModToolMaterial.java @@ -1,18 +1,19 @@ package net.sweenus.simplyswords.item; import com.google.common.base.Suppliers; -import net.fabricmc.yarn.constants.MiningLevels; +import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.item.ToolMaterial; import net.minecraft.recipe.Ingredient; +import net.minecraft.registry.tag.TagKey; import net.sweenus.simplyswords.registry.ItemsRegistry; import java.util.function.Supplier; public enum ModToolMaterial implements ToolMaterial { - RUNIC(MiningLevels.NETHERITE, 2031, 9.0f, 5.0f, 25, Items.NETHERITE_INGOT), - UNIQUE(MiningLevels.NETHERITE, 3270, 15.0f, 5.0f, 30, ItemsRegistry.RUNIC_TABLET.get()), + RUNIC(4, 2031, 9.0f, 5.0f, 25, Items.NETHERITE_INGOT), + UNIQUE(4, 3270, 15.0f, 5.0f, 30, ItemsRegistry.RUNIC_TABLET.get()), //MYTHIC METALS ADAMANTITE(4, 1024, 7.0F, 5F, 16, Items.DIAMOND), @@ -80,8 +81,8 @@ public float getAttackDamage() { } @Override - public int getMiningLevel() { - return this.miningLevel; + public TagKey getInverseTag() { + return null; } @Override diff --git a/common/src/main/java/net/sweenus/simplyswords/item/NetherfusedGemItem.java b/common/src/main/java/net/sweenus/simplyswords/item/NetherfusedGemItem.java index 8258c5f8..b2f18061 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/NetherfusedGemItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/NetherfusedGemItem.java @@ -1,182 +1,86 @@ package net.sweenus.simplyswords.item; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.util.ValidationResult; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.StackReference; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.ClickType; import net.minecraft.util.Formatting; import net.minecraft.util.Rarity; import net.minecraft.world.World; import net.sweenus.simplyswords.SimplySwords; -import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.api.SimplySwordsAPI; +import net.sweenus.simplyswords.power.GemPowerComponent; +import net.sweenus.simplyswords.power.GemPowerFiller; +import net.sweenus.simplyswords.power.PowerType; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class NetherfusedGemItem extends Item { +public class NetherfusedGemItem extends Item implements GemPowerFiller { public NetherfusedGemItem() { super(new Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof().maxCount(1)); } + @Override + public ValidationResult fill(ItemStack stack, GemPowerComponent component) { + GemPowerComponent gemComponent = SimplySwordsAPI.getComponent(stack); + if (!gemComponent.hasNetherPower() || !component.netherPower().value().isEmpty() || !component.hasNetherPower()) { + return ValidationResult.Companion.error(component, "Can't socket to the provided component"); + } + return ValidationResult.Companion.success(component.fill( + (hasRunic, oldRunic) -> oldRunic, + (hasNether, oldNether) -> gemComponent.netherPower() + )); + } + @Override public boolean onClicked(ItemStack stack, ItemStack otherStack, Slot slot, ClickType clickType, PlayerEntity player, StackReference cursorStackReference) { - if (stack.getOrCreateNbt().getString("nether_power").isEmpty()) { - - String netherfusedPowerSelection = HelperMethods.chooseNetherfusedPower(); - stack.getOrCreateNbt().putString("nether_power", netherfusedPowerSelection); + if (!stack.contains(ComponentTypeRegistry.GEM_POWER.get())) { + stack.set(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.nether(GemPowerRegistry.gemRandomPower(PowerType.NETHER))); } return false; } @Override - public void onCraft(ItemStack stack, World world, PlayerEntity player) { + public void onCraft(ItemStack stack, World world) { if (world.isClient) return; - String netherfusedPowerSelection = HelperMethods.chooseNetherfusedPower(); - stack.getOrCreateNbt().putString("nether_power", netherfusedPowerSelection); - + if (!stack.contains(ComponentTypeRegistry.GEM_POWER.get())) { + stack.set(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.runic(GemPowerRegistry.gemRandomPower(PowerType.NETHER))); + } } @Override public Text getName(ItemStack stack) { - Style LEGENDARY = HelperMethods.getStyle("legendary"); - return Text.translatable(this.getTranslationKey(stack)).setStyle(LEGENDARY); + return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.NETHERFUSED); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style LEGENDARY = HelperMethods.getStyle("legendary"); - Style TEXT = HelperMethods.getStyle("text"); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - if (itemStack.getOrCreateNbt().getString("nether_power").isEmpty()) { - tooltip.add(Text.translatable("item.simplyswords.netherfused_gem.tooltip1").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip2").setStyle(TEXT)); + GemPowerComponent component = SimplySwordsAPI.getComponent(itemStack); + + if(component.isEmpty()) { + tooltip.add(Text.translatable("item.simplyswords.netherfused_gem.tooltip1").setStyle(Styles.LEGENDARY)); + tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip2").setStyle(Styles.TEXT)); } else { - if (itemStack.getOrCreateNbt().getString("nether_power").contains("greater")) { - tooltip.add(Text.translatable("item.simplyswords.greater_nether_power").setStyle(LEGENDARY)); - } - switch (itemStack.getOrCreateNbt().getString("nether_power")) { - case "echo" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description3").setStyle(TEXT)); - } - case "berserk" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description3").setStyle(TEXT)); - } - case "radiance" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description3").setStyle(TEXT)); - } - case "onslaught" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description6").setStyle(TEXT)); - } - case "nullification" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description5").setStyle(TEXT)); - } - case "precise" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.precise.description3").setStyle(TEXT)); - } - case "mighty" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.mighty.description3").setStyle(TEXT)); - } - case "stealthy" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.stealthy").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.stealthy.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.stealthy.description2").setStyle(TEXT)); - } - case "renewed" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.renewed.description4").setStyle(TEXT)); - } - case "accelerant" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.accelerant.description4").setStyle(TEXT)); - } - case "leaping" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.leaping.description3").setStyle(TEXT)); - } - case "spellshield" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellshield").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellshield.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellshield.description2").setStyle(TEXT)); - } - case "spellforged" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellforged.description3").setStyle(TEXT)); - } - case "soulshock" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.soulshock.description3").setStyle(TEXT)); - } - case "spell_standard" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description3").setStyle(TEXT)); - } - case "war_standard" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.warstandard.description3").setStyle(TEXT)); - } - case "deception" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception").setStyle(LEGENDARY)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception.description").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception.description2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.deception.description3").setStyle(TEXT)); - } - } + component.appendTooltip(itemStack, tooltipContext, tooltip, type); } tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.gem_description").formatted(Formatting.GRAY, Formatting.ITALIC)); tooltip.add(Text.translatable("item.simplyswords.gem_description2").formatted(Formatting.GRAY, Formatting.ITALIC)); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/RunefusedGemItem.java b/common/src/main/java/net/sweenus/simplyswords/item/RunefusedGemItem.java index 40804699..b2bb83be 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/RunefusedGemItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/RunefusedGemItem.java @@ -1,146 +1,86 @@ package net.sweenus.simplyswords.item; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.util.ValidationResult; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.StackReference; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.ClickType; import net.minecraft.util.Formatting; import net.minecraft.util.Rarity; import net.minecraft.world.World; import net.sweenus.simplyswords.SimplySwords; -import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.api.SimplySwordsAPI; +import net.sweenus.simplyswords.power.GemPowerComponent; +import net.sweenus.simplyswords.power.GemPowerFiller; +import net.sweenus.simplyswords.power.PowerType; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class RunefusedGemItem extends Item { +public class RunefusedGemItem extends Item implements GemPowerFiller { public RunefusedGemItem() { super(new Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof().maxCount(1)); } + @Override + public ValidationResult fill(ItemStack stack, GemPowerComponent component) { + GemPowerComponent gemComponent = SimplySwordsAPI.getComponent(stack); + if (!gemComponent.hasRunicPower() || !component.runicPower().value().isEmpty() || !component.hasRunicPower()) { + return ValidationResult.Companion.error(component, "Can't socket to the provided component"); + } + return ValidationResult.Companion.success(component.fill( + (hasRunic, oldRunic) -> gemComponent.runicPower(), + (hasNether, oldNether) -> oldNether + )); + } + @Override public boolean onClicked(ItemStack stack, ItemStack otherStack, Slot slot, ClickType clickType, PlayerEntity player, StackReference cursorStackReference) { - if (stack.getOrCreateNbt().getString("runic_power").isEmpty()) { - String runefusedPowerSelection = HelperMethods.chooseRunefusedPower(); - stack.getOrCreateNbt().putString("runic_power", runefusedPowerSelection); + if (!stack.contains(ComponentTypeRegistry.GEM_POWER.get())) { + stack.set(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.runic(GemPowerRegistry.gemRandomPower(PowerType.RUNEFUSED))); } return false; } + @Override - public void onCraft(ItemStack stack, World world, PlayerEntity player) { + public void onCraft(ItemStack stack, World world) { if (world.isClient) return; - String runefusedPowerSelection = HelperMethods.chooseRunefusedPower(); - stack.getOrCreateNbt().putString("runic_power", runefusedPowerSelection); + if (!stack.contains(ComponentTypeRegistry.GEM_POWER.get())) { + stack.set(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.runic(GemPowerRegistry.gemRandomPower(PowerType.RUNEFUSED))); + } } @Override public Text getName(ItemStack stack) { - Style RUNIC = HelperMethods.getStyle("runic"); - return Text.translatable(this.getTranslationKey(stack)).setStyle(RUNIC); + return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.RUNIC); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RUNIC = HelperMethods.getStyle("runic"); - Style TEXT = HelperMethods.getStyle("text"); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - if (itemStack.getOrCreateNbt().getString("runic_power").isEmpty()) { - tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip2").setStyle(TEXT)); + GemPowerComponent component = SimplySwordsAPI.getComponent(itemStack); + + if(component.isEmpty()) { + tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip1").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip2").setStyle(Styles.TEXT)); } else { - if (itemStack.getOrCreateNbt().getString("runic_power").contains("greater")) { - tooltip.add(Text.translatable("item.simplyswords.greater_runic_power").setStyle(RUNIC)); - } - switch (itemStack.getOrCreateNbt().getString("runic_power")) { - case "freeze" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.freeze").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip2").setStyle(TEXT)); - } - case "wildfire" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.wildfire").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip3").setStyle(TEXT)); - } - case "slow", "greater_slow" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.slow").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip3").setStyle(TEXT)); - } - case "swiftness", "greater_swiftness" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.swiftness").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip3").setStyle(TEXT)); - } - case "float", "greater_float" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.float").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip3").setStyle(TEXT)); - } - case "zephyr", "greater_zephyr" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.zephyr").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip3").setStyle(TEXT)); - } - case "shielding", "greater_shielding" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.shielding").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip3").setStyle(TEXT)); - } - case "stoneskin", "greater_stoneskin" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.stoneskin").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip3").setStyle(TEXT)); - } - case "frost_ward" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.frost_ward").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip3").setStyle(TEXT)); - } - case "trailblaze", "greater_trailblaze" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.trailblaze").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip3").setStyle(TEXT)); - } - case "active_defence" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.active_defence").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip3").setStyle(TEXT)); - } - case "weaken", "greater_weaken" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.weaken").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip3").setStyle(TEXT)); - } - case "unstable" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.unstable").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip3").setStyle(TEXT)); - } - case "imbued", "greater_imbued" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.imbued").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip3").setStyle(TEXT)); - } - case "pincushion", "greater_pincushion" -> { - tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.pincushion").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip3").setStyle(TEXT)); - } - } + component.appendTooltip(itemStack, tooltipContext, tooltip, type); } tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.gem_description").formatted(Formatting.GRAY, Formatting.ITALIC)); tooltip.add(Text.translatable("item.simplyswords.gem_description2").formatted(Formatting.GRAY, Formatting.ITALIC)); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/RunicSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/RunicSwordItem.java index f03d303a..ecab6b06 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/RunicSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/RunicSwordItem.java @@ -1,150 +1,101 @@ package net.sweenus.simplyswords.item; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.StackReference; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Style; import net.minecraft.text.Text; -import net.minecraft.util.*; +import net.minecraft.util.ClickType; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.util.UseAction; import net.minecraft.world.World; +import net.sweenus.simplyswords.api.SimplySwordsAPI; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.registry.EffectRegistry; -import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.power.GemPowerComponent; +import net.sweenus.simplyswords.power.PowerType; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; +import net.sweenus.simplyswords.registry.GemPowerRegistry; import net.sweenus.simplyswords.util.HelperMethods; -import net.sweenus.simplyswords.util.RunicMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class RunicSwordItem extends SwordItem { - public static int maxUseTime; - - public RunicSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings.fireproof()); + public RunicSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings.fireproof()); } @Override - public boolean onClicked(ItemStack stack, ItemStack otherStack, Slot slot, ClickType clickType, PlayerEntity player, - StackReference cursorStackReference) { - if (stack.getOrCreateNbt().getString("runic_power").isEmpty()) { - String runicPowerSelection = HelperMethods.chooseRunicPower(); - stack.getOrCreateNbt().putString("runic_power", runicPowerSelection); + public boolean onClicked(ItemStack stack, ItemStack otherStack, Slot slot, ClickType clickType, PlayerEntity player, StackReference cursorStackReference) { + if(!stack.contains(ComponentTypeRegistry.GEM_POWER.get())) { + stack.set(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.runic(GemPowerRegistry.gemRandomPower(PowerType.RUNIC))); } return false; } @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { - if (!attacker.getWorld().isClient()) { - HelperMethods.playHitSounds(attacker, target); - switch (stack.getOrCreateNbt().getString("runic_power")) { - case "freeze" -> RunicMethods.postHitRunicFreeze(target, attacker); - case "wildfire" -> RunicMethods.postHitRunicWildfire(target, attacker); - case "slow" -> RunicMethods.postHitRunicSlow(target, attacker); - case "greater_slow" -> RunicMethods.postHitRunicGreaterSlow(target, attacker); - case "swiftness" -> RunicMethods.postHitRunicSwiftness(attacker); - case "greater_swiftness" -> RunicMethods.postHitRunicGreaterSwiftness(attacker); - case "float" -> RunicMethods.postHitRunicFloat(target, attacker); - case "greater_float" -> RunicMethods.postHitRunicGreaterFloat(target, attacker); - case "zephyr" -> RunicMethods.postHitRunicZephyr(attacker); - case "greater_zephyr" -> RunicMethods.postHitRunicGreaterZephyr(attacker); - case "shielding" -> RunicMethods.postHitRunicShielding(attacker); - case "greater_shielding" -> RunicMethods.postHitRunicGreaterShielding(attacker); - case "stoneskin" -> RunicMethods.postHitRunicStoneskin(attacker); - case "greater_stoneskin" -> RunicMethods.postHitRunicGreaterStoneskin(attacker); - case "trailblaze" -> RunicMethods.postHitRunicTrailblaze(attacker); - case "greater_trailblaze" -> RunicMethods.postHitRunicGreaterTrailblaze(attacker); - case "weaken" -> RunicMethods.postHitRunicWeaken(target, attacker); - case "greater_weaken" -> RunicMethods.postHitRunicGreaterWeaken(target, attacker); - case "imbued" -> RunicMethods.postHitRunicImbued(stack, target, attacker); - case "greater_imbued" -> RunicMethods.postHitRunicGreaterImbued(stack, target, attacker); - case "pincushion" -> RunicMethods.postHitRunicPinCushion(target, attacker); - case "greater_pincushion" -> RunicMethods.postHitRunicGreaterPinCushion(target, attacker); - } + if (!attacker.getWorld().isClient) { + GemPowerComponent component = SimplySwordsAPI.getComponent(stack); + HelperMethods.playHitSounds(attacker, target); + component.postHit(stack, target, attacker); } + return super.postHit(stack, target, attacker); } @Override public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { - if (!world.isClient && stack.getOrCreateNbt().getString("runic_power").contains("momentum")) - RunicMethods.stoppedUsingRunicMomentum(stack, user); + if (!world.isClient) { + GemPowerComponent component = SimplySwordsAPI.getComponent(stack); + component.onStoppedUsing(stack, world, user, remainingUseTicks); + } } @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (!world.isClient) { - if (stack.getOrCreateNbt().getString("runic_power").equals("momentum")) - RunicMethods.usageTickRunicMomentum(stack, user, remainingUseTicks); - else if (stack.getOrCreateNbt().getString("runic_power").equals("greater_momentum")) - RunicMethods.usageTickRunicGreaterMomentum(stack, user, remainingUseTicks); + GemPowerComponent component = SimplySwordsAPI.getComponent(stack); + component.usageTick(world, user, stack, remainingUseTicks); } } + @Override + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + GemPowerComponent component = SimplySwordsAPI.getComponent(stack); + return component.getMaxUseTime(stack); + } + @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { ItemStack itemStack = user.getStackInHand(hand); if (itemStack.getDamage() < itemStack.getMaxDamage() - 1) { - switch (itemStack.getOrCreateNbt().getString("runic_power")) { - case "momentum", "greater_momentum" -> { - user.setCurrentHand(hand); - world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_WIND_SHOOT_FLYBY_02.get(), - user.getSoundCategory(), 0.3f, 1.2f); - return TypedActionResult.consume(itemStack); - } - case "ward" -> { - user.setCurrentHand(hand); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.WARD.get(), 120, 0), user); - user.getItemCooldownManager().set(itemStack.getItem(), 120); - user.setHealth(user.getHealth() / 2); - world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - user.getSoundCategory(), 0.3f, 1.2f); - return TypedActionResult.consume(itemStack); - } - case "immolation" -> { - user.setCurrentHand(hand); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.IMMOLATION.get(), 36000, 0), user); - user.getItemCooldownManager().set(itemStack.getItem(), 40); - world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - user.getSoundCategory(), 0.3f, 0.6f); - return TypedActionResult.consume(itemStack); - } - } + GemPowerComponent component = SimplySwordsAPI.getComponent(itemStack); + return component.use(world, user, hand); } return TypedActionResult.fail(itemStack); } - @Override - public int getMaxUseTime(ItemStack stack) { - String power = stack.getOrCreateNbt().getString("runic_power"); - if (power.equals("momentum")) maxUseTime = 15; - else if (power.equals("ward") || power.equals("immolation")) maxUseTime = 1; - - return maxUseTime; - } - @Override public UseAction getUseAction(ItemStack stack) { return UseAction.BLOCK; } - @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { if ((entity instanceof LivingEntity user) && (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack || user.getEquippedStack(EquipmentSlot.OFFHAND) == stack)) { - if (entity.age % 4 == 0 && Config.getBoolean("enablePassiveParticles", "General", ConfigDefaultValues.enablePassiveParticles)) { + if (entity.age % 4 == 0 && Config.general.enablePassiveParticles) { float randomx = (float) (Math.random() * 6); float randomz = (float) (Math.random() * 6); @@ -155,143 +106,304 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, -3 + randomx, 0.0, -3 + randomz); } if (!world.isClient) { - switch (stack.getOrCreateNbt().getString("runic_power")) { - case "unstable" -> RunicMethods.inventoryTickRunicUnstable(user); - case "active_defence" -> - RunicMethods.inventoryTickRunicActiveDefence(world, user); - case "frost_ward" -> RunicMethods.inventoryTickRunicFrostWard(world, user); - } + GemPowerComponent component = SimplySwordsAPI.getComponent(stack); + component.inventoryTick(stack, world, user, slot, selected); } } super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void onCraft(ItemStack stack, World world, PlayerEntity player) { + public void onCraft(ItemStack stack, World world) { if (world.isClient) return; - String runicPowerSelection = HelperMethods.chooseRunicPower(); - stack.getOrCreateNbt().putString("runic_power", runicPowerSelection); + if(!stack.contains(ComponentTypeRegistry.GEM_POWER.get())) { + stack.set(ComponentTypeRegistry.GEM_POWER.get(), GemPowerComponent.runic(GemPowerRegistry.gemRandomPower(PowerType.RUNIC))); + } } @Override public Text getName(ItemStack stack) { - Style RUNIC = HelperMethods.getStyle("runic"); - return Text.translatable(this.getTranslationKey(stack)).setStyle(RUNIC); + return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.RUNIC); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style RUNIC = HelperMethods.getStyle("runic"); - Style TEXT = HelperMethods.getStyle("text"); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { + tooltip.add(Text.literal("").setStyle(Styles.TEXT)); - tooltip.add(Text.literal("").setStyle(TEXT)); + GemPowerComponent component = SimplySwordsAPI.getComponent(itemStack); - if (itemStack.getOrCreateNbt().getString("runic_power").isEmpty()) { - tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip2").setStyle(TEXT)); + if (component.isEmpty()) { + tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip1").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip2").setStyle(Styles.TEXT)); } else { - if (itemStack.getOrCreateNbt().getString("runic_power").contains("greater")) { - tooltip.add(Text.translatable("item.simplyswords.greater_runic_power").setStyle(RUNIC).formatted(Formatting.BOLD)); - } - switch (itemStack.getOrCreateNbt().getString("runic_power")) { - case "freeze" -> { - tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip2").setStyle(TEXT)); - } - case "wildfire" -> { - tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip3").setStyle(TEXT)); - } - case "slow", "greater_slow" -> { - tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip3").setStyle(TEXT)); - } - case "swiftness", "greater_swiftness" -> { - tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip3").setStyle(TEXT)); - } - case "float", "greater_float" -> { - tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip3").setStyle(TEXT)); - } - case "zephyr", "greater_zephyr" -> { - tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip3").setStyle(TEXT)); - } - case "shielding", "greater_shielding" -> { - tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip3").setStyle(TEXT)); - } - case "stoneskin", "greater_stoneskin" -> { - tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip3").setStyle(TEXT)); - } - case "frost_ward" -> { - tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip3").setStyle(TEXT)); - } - case "trailblaze", "greater_trailblaze" -> { - tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip3").setStyle(TEXT)); - } - case "active_defence" -> { - tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip3").setStyle(TEXT)); - } - case "weaken", "greater_weaken" -> { - tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip3").setStyle(TEXT)); - } - case "unstable" -> { - tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip3").setStyle(TEXT)); + component.appendTooltip(itemStack, tooltipContext, tooltip, type, true); + } + } + + + /* 1.21 temp + @Override + public boolean onClicked(ItemStack stack, ItemStack otherStack, Slot slot, ClickType clickType, PlayerEntity player, + StackReference cursorStackReference) { + if (stack.getOrCreateNbt().getString("runic_power").isEmpty()) { + String runicPowerSelection = HelperMethods.chooseRunicPower(); + stack.getOrCreateNbt().putString("runic_power", runicPowerSelection); } - case "momentum", "greater_momentum" -> { - tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip3").setStyle(TEXT)); + return false; + } + + @Override + public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + if (!attacker.getWorld().isClient()) { + HelperMethods.playHitSounds(attacker, target); + + switch (stack.getOrCreateNbt().getString("runic_power")) { + case "freeze" -> RunicMethods.postHitRunicFreeze(target, attacker); + case "wildfire" -> RunicMethods.postHitRunicWildfire(target, attacker); + case "slow" -> RunicMethods.postHitRunicSlow(target, attacker); + case "greater_slow" -> RunicMethods.postHitRunicGreaterSlow(target, attacker); + case "swiftness" -> RunicMethods.postHitRunicSwiftness(attacker); + case "greater_swiftness" -> RunicMethods.postHitRunicGreaterSwiftness(attacker); + case "float" -> RunicMethods.postHitRunicFloat(target, attacker); + case "greater_float" -> RunicMethods.postHitRunicGreaterFloat(target, attacker); + case "zephyr" -> RunicMethods.postHitRunicZephyr(attacker); + case "greater_zephyr" -> RunicMethods.postHitRunicGreaterZephyr(attacker); + case "shielding" -> RunicMethods.postHitRunicShielding(attacker); + case "greater_shielding" -> RunicMethods.postHitRunicGreaterShielding(attacker); + case "stoneskin" -> RunicMethods.postHitRunicStoneskin(attacker); + case "greater_stoneskin" -> RunicMethods.postHitRunicGreaterStoneskin(attacker); + case "trailblaze" -> RunicMethods.postHitRunicTrailblaze(attacker); + case "greater_trailblaze" -> RunicMethods.postHitRunicGreaterTrailblaze(attacker); + case "weaken" -> RunicMethods.postHitRunicWeaken(target, attacker); + case "greater_weaken" -> RunicMethods.postHitRunicGreaterWeaken(target, attacker); + case "imbued" -> RunicMethods.postHitRunicImbued(stack, target, attacker); + case "greater_imbued" -> RunicMethods.postHitRunicGreaterImbued(stack, target, attacker); + case "pincushion" -> RunicMethods.postHitRunicPinCushion(target, attacker); + case "greater_pincushion" -> RunicMethods.postHitRunicGreaterPinCushion(target, attacker); + } } - case "imbued", "greater_imbued" -> { - tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip3").setStyle(TEXT)); + return super.postHit(stack, target, attacker); + } + + @Override + public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { + if (!world.isClient && stack.getOrCreateNbt().getString("runic_power").contains("momentum")) + RunicMethods.stoppedUsingRunicMomentum(stack, user); + } + + @Override + public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { + if (!world.isClient) { + if (stack.getOrCreateNbt().getString("runic_power").equals("momentum")) + RunicMethods.usageTickRunicMomentum(stack, user, remainingUseTicks); + else if (stack.getOrCreateNbt().getString("runic_power").equals("greater_momentum")) + RunicMethods.usageTickRunicGreaterMomentum(stack, user, remainingUseTicks); } - case "pincushion", "greater_pincushion" -> { - tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip3").setStyle(TEXT)); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + ItemStack itemStack = user.getStackInHand(hand); + + if (itemStack.getDamage() < itemStack.getMaxDamage() - 1) { + switch (itemStack.getOrCreateNbt().getString("runic_power")) { + case "momentum", "greater_momentum" -> { + user.setCurrentHand(hand); + world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_WIND_SHOOT_FLYBY_02.get(), + user.getSoundCategory(), 0.3f, 1.2f); + return TypedActionResult.consume(itemStack); + } + case "ward" -> { + user.setCurrentHand(hand); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.WARD.get(), 120, 0), user); + user.getItemCooldownManager().set(itemStack.getItem(), 120); + user.setHealth(user.getHealth() / 2); + world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + user.getSoundCategory(), 0.3f, 1.2f); + return TypedActionResult.consume(itemStack); + } + case "immolation" -> { + user.setCurrentHand(hand); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.IMMOLATION.get(), 36000, 0), user); + user.getItemCooldownManager().set(itemStack.getItem(), 40); + world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + user.getSoundCategory(), 0.3f, 0.6f); + return TypedActionResult.consume(itemStack); + } + } } - case "ward" -> { - tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip4").setStyle(TEXT)); + return TypedActionResult.fail(itemStack); + } + + @Override + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + String power = stack.getOrCreateNbt().getString("runic_power"); + if (power.equals("momentum")) maxUseTime = 15; + else if (power.equals("ward") || power.equals("immolation")) maxUseTime = 1; + + return maxUseTime; + } + + @Override + public UseAction getUseAction(ItemStack stack) { + return UseAction.BLOCK; + } + + + @Override + public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { + if ((entity instanceof LivingEntity user) && (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack || user.getEquippedStack(EquipmentSlot.OFFHAND) == stack)) { + if (entity.age % 4 == 0 && Config.getBoolean("enablePassiveParticles", "General", ConfigDefaultValues.enablePassiveParticles)) { + float randomx = (float) (Math.random() * 6); + float randomz = (float) (Math.random() * 6); + + world.addParticle(ParticleTypes.ENCHANT, + user.getX() + user.getHandPosOffset(this).getX(), + user.getY() + user.getHandPosOffset(this).getY() + 1.3, + user.getZ() + user.getHandPosOffset(this).getZ(), + -3 + randomx, 0.0, -3 + randomz); + } + if (!world.isClient) { + switch (stack.getOrCreateNbt().getString("runic_power")) { + case "unstable" -> RunicMethods.inventoryTickRunicUnstable(user); + case "active_defence" -> + RunicMethods.inventoryTickRunicActiveDefence(world, user); + case "frost_ward" -> RunicMethods.inventoryTickRunicFrostWard(world, user); + } + } } - case "immolation" -> { - tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip1").setStyle(RUNIC)); - tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip4").setStyle(TEXT)); + super.inventoryTick(stack, world, entity, slot, selected); + } + + @Override + public void onCraft(ItemStack stack, World world, PlayerEntity player) { + if (world.isClient) return; + + String runicPowerSelection = HelperMethods.chooseRunicPower(); + stack.getOrCreateNbt().putString("runic_power", runicPowerSelection); + } + + @Override + public Text getName(ItemStack stack) { + Style RUNIC = HelperMethods.getStyle("runic"); + return Text.translatable(this.getTranslationKey(stack)).setStyle(RUNIC); + } + + @Override + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { + Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); + Style RUNIC = HelperMethods.getStyle("runic"); + Style TEXT = HelperMethods.getStyle("text"); + + tooltip.add(Text.literal("").setStyle(TEXT)); + + if (itemStack.getOrCreateNbt().getString("runic_power").isEmpty()) { + tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.unidentifiedsworditem.tooltip2").setStyle(TEXT)); + } else { + if (itemStack.getOrCreateNbt().getString("runic_power").contains("greater")) { + tooltip.add(Text.translatable("item.simplyswords.greater_runic_power").setStyle(RUNIC).formatted(Formatting.BOLD)); + } + switch (itemStack.getOrCreateNbt().getString("runic_power")) { + case "freeze" -> { + tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip2").setStyle(TEXT)); + } + case "wildfire" -> { + tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip3").setStyle(TEXT)); + } + case "slow", "greater_slow" -> { + tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip3").setStyle(TEXT)); + } + case "swiftness", "greater_swiftness" -> { + tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip3").setStyle(TEXT)); + } + case "float", "greater_float" -> { + tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip3").setStyle(TEXT)); + } + case "zephyr", "greater_zephyr" -> { + tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip3").setStyle(TEXT)); + } + case "shielding", "greater_shielding" -> { + tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip3").setStyle(TEXT)); + } + case "stoneskin", "greater_stoneskin" -> { + tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip3").setStyle(TEXT)); + } + case "frost_ward" -> { + tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip3").setStyle(TEXT)); + } + case "trailblaze", "greater_trailblaze" -> { + tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip3").setStyle(TEXT)); + } + case "active_defence" -> { + tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip3").setStyle(TEXT)); + } + case "weaken", "greater_weaken" -> { + tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip3").setStyle(TEXT)); + } + case "unstable" -> { + tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip3").setStyle(TEXT)); + } + case "momentum", "greater_momentum" -> { + tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip3").setStyle(TEXT)); + } + case "imbued", "greater_imbued" -> { + tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip3").setStyle(TEXT)); + } + case "pincushion", "greater_pincushion" -> { + tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip3").setStyle(TEXT)); + } + case "ward" -> { + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.literal("")); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip4").setStyle(TEXT)); + } + case "immolation" -> { + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip1").setStyle(RUNIC)); + tooltip.add(Text.literal("")); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip4").setStyle(TEXT)); + } + } } } - } - } + + */ } \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/RunicTabletItem.java b/common/src/main/java/net/sweenus/simplyswords/item/RunicTabletItem.java index c89f0b97..d85372a1 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/RunicTabletItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/RunicTabletItem.java @@ -1,15 +1,15 @@ package net.sweenus.simplyswords.item; -import net.minecraft.client.item.TooltipContext; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Rarity; -import net.minecraft.world.World; import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; @@ -22,12 +22,11 @@ public RunicTabletItem() { @Override public Text getName(ItemStack stack) { - Style RUNIC = HelperMethods.getStyle("runic"); - return Text.translatable(this.getTranslationKey(stack)).setStyle(RUNIC); + return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.RUNIC); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.runic_tablet.tooltip").formatted(Formatting.GRAY, Formatting.ITALIC)); @@ -37,4 +36,4 @@ public void appendTooltip(ItemStack itemStack, World world, List tooltip, tooltip.add(Text.translatable("item.simplyswords.runic_tablet.tooltip4").formatted(Formatting.GRAY, Formatting.ITALIC)); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsNetheriteSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsNetheriteSwordItem.java index c437938b..71911821 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsNetheriteSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsNetheriteSwordItem.java @@ -7,7 +7,6 @@ import net.minecraft.item.ToolMaterial; import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; -import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.util.HelperMethods; import java.util.ArrayList; @@ -17,9 +16,8 @@ public class SimplySwordsNetheriteSwordItem extends SwordItem { String[] repairIngredient; - public SimplySwordsNetheriteSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, String... repairIngredient) { - super(toolMaterial, attackDamage, attackSpeed, - new Settings().arch$tab(SimplySwords.SIMPLYSWORDS).fireproof()); + public SimplySwordsNetheriteSwordItem(ToolMaterial toolMaterial, Settings settings, String... repairIngredient) { + super(toolMaterial, settings); this.repairIngredient = repairIngredient; } @@ -28,7 +26,7 @@ public boolean canRepair(ItemStack stack, ItemStack ingredient) { List potentialIngredients = new ArrayList<>(List.of()); Arrays.stream(repairIngredient).toList().forEach(repIngredient -> potentialIngredients.add( - Registries.ITEM.get(new Identifier(repIngredient)))); + Registries.ITEM.get(Identifier.of(repIngredient)))); return potentialIngredients.contains(ingredient.getItem()); diff --git a/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsSwordItem.java index 09889eac..1aed6ad2 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/SimplySwordsSwordItem.java @@ -1,18 +1,16 @@ package net.sweenus.simplyswords.item; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.registry.Registries; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.text.TextColor; import net.minecraft.util.Identifier; -import net.minecraft.world.World; -import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.util.HelperMethods; import java.util.ArrayList; @@ -22,9 +20,8 @@ public class SimplySwordsSwordItem extends SwordItem { String[] repairIngredient; - public SimplySwordsSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, String... repairIngredient) { - super(toolMaterial, attackDamage, attackSpeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS)); + public SimplySwordsSwordItem(ToolMaterial toolMaterial, Settings settings, String... repairIngredient) { + super(toolMaterial, settings); this.repairIngredient = repairIngredient; } @@ -33,7 +30,7 @@ public boolean canRepair(ItemStack stack, ItemStack ingredient) { List potentialIngredients = new ArrayList<>(List.of()); Arrays.stream(repairIngredient).toList().forEach(repIngredient -> potentialIngredients.add( - Registries.ITEM.get(new Identifier(repIngredient)))); + Registries.ITEM.get(Identifier.of(repIngredient)))); return potentialIngredients.contains(ingredient.getItem()); @@ -48,7 +45,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { int rgbPrometheum = 0x3A6A56; @@ -61,7 +58,7 @@ public void appendTooltip(ItemStack itemStack, World world, List tooltip, else if (this.getName(itemStack).getString().contains("Carmot")) tooltip.add(Text.translatable("item.simplyswords.compat.mythicmetals.looting").setStyle(CARMOT)); - super.appendTooltip(itemStack,world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); } } diff --git a/common/src/main/java/net/sweenus/simplyswords/item/TwoHandedWeapon.java b/common/src/main/java/net/sweenus/simplyswords/item/TwoHandedWeapon.java new file mode 100644 index 00000000..7279e648 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/TwoHandedWeapon.java @@ -0,0 +1,4 @@ +package net.sweenus.simplyswords.item; + +public interface TwoHandedWeapon { +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/UniqueSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/UniqueSwordItem.java index 4f164300..417d1851 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/UniqueSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/UniqueSwordItem.java @@ -1,6 +1,5 @@ package net.sweenus.simplyswords.item; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; @@ -8,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.SwordItem; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Style; import net.minecraft.text.Text; @@ -16,15 +16,21 @@ import net.sweenus.simplyswords.api.SimplySwordsAPI; import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class UniqueSwordItem extends SwordItem { +public abstract class UniqueSwordItem extends SwordItem { String iRarity = "UNIQUE"; - public UniqueSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings.fireproof()); + public UniqueSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings.fireproof()); + } + + @Override + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + return 0; } @Override @@ -52,11 +58,6 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public Text getName(ItemStack stack) { - Style COMMON = HelperMethods.getStyle("common"); - Style UNIQUE = HelperMethods.getStyle("unique"); - Style LEGENDARY = HelperMethods.getStyle("legendary"); - Style CORRUPTED = HelperMethods.getStyle("corrupted"); - if (this.getDefaultStack().isOf(ItemsRegistry.AWAKENED_LICHBLADE.get()) || this.getDefaultStack().isOf(ItemsRegistry.HARBINGER.get()) || this.getDefaultStack().isOf(ItemsRegistry.SUNFIRE.get()) @@ -65,16 +66,15 @@ public Text getName(ItemStack stack) { || this.getDefaultStack().isOf(ItemsRegistry.MAGISCYTHE.get()) || this.getDefaultStack().isOf(ItemsRegistry.CAELESTIS.get())) { this.iRarity = "LEGENDARY"; - return Text.translatable(this.getTranslationKey(stack)).setStyle(LEGENDARY); + return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.LEGENDARY); } - if (this.iRarity.equals("UNIQUE")) return Text.translatable(this.getTranslationKey(stack)).setStyle(UNIQUE); - else return Text.translatable(this.getTranslationKey(stack)).setStyle(COMMON); + if (this.iRarity.equals("UNIQUE")) return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.UNIQUE); + else return Text.translatable(this.getTranslationKey(stack)).setStyle(Styles.COMMON); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext - tooltipContext) { - SimplySwordsAPI.appendTooltipGemSocketLogic(itemStack, tooltip); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { + SimplySwordsAPI.appendTooltipGemSocketLogic(itemStack, tooltipContext, tooltip, type); } } \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/component/ChargedLocationComponent.java b/common/src/main/java/net/sweenus/simplyswords/item/component/ChargedLocationComponent.java new file mode 100644 index 00000000..d43758f5 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/component/ChargedLocationComponent.java @@ -0,0 +1,41 @@ +package net.sweenus.simplyswords.item.component; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; + +public record ChargedLocationComponent(int charge, double lastX, double lastY, double lastZ) { + + public ChargedLocationComponent(double lastX, double lastY, double lastZ) { + this(0, lastX, lastY, lastZ); + } + + public ChargedLocationComponent decrement() { + return new ChargedLocationComponent(Math.max(0, charge - 1), lastX, lastY, lastZ); + } + + public static ChargedLocationComponent DEFAULT = new ChargedLocationComponent(0, 0.0, 0.0, 0.0); + + public static Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + Codec.INT.fieldOf("charge").forGetter(ChargedLocationComponent::charge), + Codec.DOUBLE.fieldOf("x").forGetter(ChargedLocationComponent::lastX), + Codec.DOUBLE.fieldOf("y").forGetter(ChargedLocationComponent::lastY), + Codec.DOUBLE.fieldOf("z").forGetter(ChargedLocationComponent::lastZ) + ).apply(instance, ChargedLocationComponent::new)); + + public static PacketCodec PACKET_CODEC = PacketCodec.tuple( + PacketCodecs.INTEGER, + ChargedLocationComponent::charge, + PacketCodecs.DOUBLE, + ChargedLocationComponent::lastX, + PacketCodecs.DOUBLE, + ChargedLocationComponent::lastY, + PacketCodecs.DOUBLE, + ChargedLocationComponent::lastZ, + ChargedLocationComponent::new + ); + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/component/MoltenParticleComponent.java b/common/src/main/java/net/sweenus/simplyswords/item/component/MoltenParticleComponent.java new file mode 100644 index 00000000..6c8e14da --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/component/MoltenParticleComponent.java @@ -0,0 +1,30 @@ +package net.sweenus.simplyswords.item.component; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleTypes; + +public record MoltenParticleComponent(ParticleEffect walk, ParticleEffect sprint, ParticleEffect passive) { + + public static MoltenParticleComponent DEFAULT = new MoltenParticleComponent(ParticleTypes.FALLING_LAVA, ParticleTypes.FALLING_LAVA, ParticleTypes.SMOKE); + + public static Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + ParticleTypes.TYPE_CODEC.fieldOf("walk").forGetter(MoltenParticleComponent::walk), + ParticleTypes.TYPE_CODEC.fieldOf("sprint").forGetter(MoltenParticleComponent::sprint), + ParticleTypes.TYPE_CODEC.fieldOf("passive").forGetter(MoltenParticleComponent::passive) + ).apply(instance, MoltenParticleComponent::new)); + + public static PacketCodec PACKET_CODEC = PacketCodec.tuple( + ParticleTypes.PACKET_CODEC, + MoltenParticleComponent::walk, + ParticleTypes.PACKET_CODEC, + MoltenParticleComponent::sprint, + ParticleTypes.PACKET_CODEC, + MoltenParticleComponent::passive, + MoltenParticleComponent::new + ); +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/component/ParryComponent.java b/common/src/main/java/net/sweenus/simplyswords/item/component/ParryComponent.java new file mode 100644 index 00000000..6e8be502 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/component/ParryComponent.java @@ -0,0 +1,39 @@ +package net.sweenus.simplyswords.item.component; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; + +public record ParryComponent(boolean parried, int parrySuccession) { + + public ParryComponent success() { + return new ParryComponent(true, Math.max(20, parrySuccession + 1)); + } + + public ParryComponent resetFull() { + return DEFAULT; + } + + public ParryComponent resetParry() { + return new ParryComponent(false, parrySuccession); + } + + public static ParryComponent DEFAULT = new ParryComponent(false, 0); + + public static Codec CODEC = RecordCodecBuilder.create( instance -> + instance.group( + Codec.BOOL.fieldOf("parried").forGetter(ParryComponent::parried), + Codec.INT.fieldOf("succession").forGetter(ParryComponent::parrySuccession) + ).apply(instance, ParryComponent::new)); + + public static PacketCodec PACKET_CODEC = PacketCodec.tuple( + PacketCodecs.BOOL, + ParryComponent::parried, + PacketCodecs.INTEGER, + ParryComponent::parrySuccession, + ParryComponent::new + ); + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/component/RelocationComponent.java b/common/src/main/java/net/sweenus/simplyswords/item/component/RelocationComponent.java new file mode 100644 index 00000000..4d0c10dc --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/component/RelocationComponent.java @@ -0,0 +1,58 @@ +package net.sweenus.simplyswords.item.component; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.util.Uuids; + +import java.util.UUID; + +public record RelocationComponent(double relocateX, double relocateY, double relocateZ, UUID relocateTarget, int relocationTimer, boolean canRelocate) { + + public boolean ready() { + return relocationTimer <= 0 && canRelocate; + } + + public boolean almostReady() { + return relocationTimer == 40; + } + + public RelocationComponent tickDown() { + if (this == DEFAULT) return this; + return new RelocationComponent(relocateX, relocateY, relocateZ, relocateTarget, Math.max(0, relocationTimer - 1), canRelocate); + } + + public RelocationComponent clear() { + return DEFAULT; + } + + public static RelocationComponent DEFAULT = new RelocationComponent(0.0, 0.0, 0.0, UUID.randomUUID(), 0, false); + + public static Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + Codec.DOUBLE.fieldOf("x").forGetter(RelocationComponent::relocateX), + Codec.DOUBLE.fieldOf("y").forGetter(RelocationComponent::relocateY), + Codec.DOUBLE.fieldOf("z").forGetter(RelocationComponent::relocateZ), + Uuids.CODEC.fieldOf("target").forGetter(RelocationComponent::relocateTarget), + Codec.INT.fieldOf("timer").forGetter(RelocationComponent::relocationTimer), + Codec.BOOL.fieldOf("canRelocate").forGetter(RelocationComponent::canRelocate) + ).apply(instance, RelocationComponent::new)); + + public static PacketCodec PACKET_CODEC = PacketCodec.tuple( + PacketCodecs.DOUBLE, + RelocationComponent::relocateX, + PacketCodecs.DOUBLE, + RelocationComponent::relocateY, + PacketCodecs.DOUBLE, + RelocationComponent::relocateZ, + PacketCodecs.STRING.xmap(UUID::fromString, UUID::toString), + RelocationComponent::relocateTarget, + PacketCodecs.INTEGER, + RelocationComponent::relocationTimer, + PacketCodecs.BOOL, + RelocationComponent::canRelocate, + RelocationComponent::new + ); +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/component/StoredChargeComponent.java b/common/src/main/java/net/sweenus/simplyswords/item/component/StoredChargeComponent.java new file mode 100644 index 00000000..d3ac773d --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/component/StoredChargeComponent.java @@ -0,0 +1,32 @@ +package net.sweenus.simplyswords.item.component; + +import com.mojang.serialization.Codec; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; + +public record StoredChargeComponent(int charge) { + + public StoredChargeComponent add(int addedCharge) { + return new StoredChargeComponent(this.charge + addedCharge); + } + + public StoredChargeComponent increment() { + return new StoredChargeComponent(charge + 1); + } + + public StoredChargeComponent decrement() { + return new StoredChargeComponent(Math.max(0, charge - 1)); + } + + public StoredChargeComponent set(int newCharge) { + return new StoredChargeComponent(newCharge); + } + + public static StoredChargeComponent DEFAULT = new StoredChargeComponent(0); + + public static Codec CODEC = Codec.INT.xmap(StoredChargeComponent::new, StoredChargeComponent::charge); + + public static PacketCodec PACKET_CODEC = PacketCodecs.INTEGER.xmap(StoredChargeComponent::new, StoredChargeComponent::charge).cast(); + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/component/TargetedLocationComponent.java b/common/src/main/java/net/sweenus/simplyswords/item/component/TargetedLocationComponent.java new file mode 100644 index 00000000..d4548883 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/component/TargetedLocationComponent.java @@ -0,0 +1,56 @@ +package net.sweenus.simplyswords.item.component; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.Uuids; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +public record TargetedLocationComponent(UUID uuid, double lastX, double lastY, double lastZ) { + + public TargetedLocationComponent(double lastX, double lastY, double lastZ) { + this(UUID.randomUUID(), lastX, lastY, lastZ); + } + + @Nullable + public LivingEntity getEntity(ServerWorld world) { + if (uuid == DEFAULT_UUID) return null; + Entity entity = world.getEntity(uuid); + return entity instanceof LivingEntity ? (LivingEntity) entity : null; + } + + public TargetedLocationComponent setTarget(Entity newTarget) { + return new TargetedLocationComponent(newTarget.getUuid(), lastX, lastY, lastZ); + } + + private static final UUID DEFAULT_UUID = UUID.randomUUID(); + public static TargetedLocationComponent DEFAULT = new TargetedLocationComponent(DEFAULT_UUID, 0.0, 0.0, 0.0); + + public static Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + Uuids.CODEC.fieldOf("uuid").forGetter(TargetedLocationComponent::uuid), + Codec.DOUBLE.fieldOf("x").forGetter(TargetedLocationComponent::lastX), + Codec.DOUBLE.fieldOf("y").forGetter(TargetedLocationComponent::lastY), + Codec.DOUBLE.fieldOf("z").forGetter(TargetedLocationComponent::lastZ) + ).apply(instance, TargetedLocationComponent::new)); + + public static PacketCodec PACKET_CODEC = PacketCodec.tuple( + PacketCodecs.STRING.xmap(UUID::fromString, UUID::toString), + TargetedLocationComponent::uuid, + PacketCodecs.DOUBLE, + TargetedLocationComponent::lastX, + PacketCodecs.DOUBLE, + TargetedLocationComponent::lastY, + PacketCodecs.DOUBLE, + TargetedLocationComponent::lastZ, + TargetedLocationComponent::new + ); + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/ArcanethystSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/ArcanethystSwordItem.java index 54505e18..21ebdeca 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/ArcanethystSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/ArcanethystSwordItem.java @@ -1,6 +1,8 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -9,41 +11,36 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; 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; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.AbilityMethods; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class ArcanethystSwordItem extends UniqueSwordItem { - public ArcanethystSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class ArcanethystSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + public ArcanethystSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - int radius = (int) Config.getFloat("arcaneAssaultRadius", "UniqueEffects", ConfigDefaultValues.arcaneAssaultRadius); - float abilityDamage = Config.getFloat("arcaneAssaultDamage", "UniqueEffects", ConfigDefaultValues.arcaneAssaultDamage); - int arcane_timer_max = (int) Config.getFloat("arcaneAssaultDuration", "UniqueEffects", ConfigDefaultValues.arcaneAssaultDuration); - int skillCooldown = (int) Config.getFloat("arcaneAssaultCooldown", "UniqueEffects", ConfigDefaultValues.arcaneAssaultCooldown); - int chargeChance = (int) Config.getFloat("arcaneAssaultChance", "UniqueEffects", ConfigDefaultValues.arcaneAssaultChance); - int spellScalingModifier = (int) Config.getFloat("arcaneAssaultSpellScaling", "UniqueEffects", ConfigDefaultValues.arcaneAssaultSpellScaling); - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= chargeChance) { + if (attacker.getRandom().nextInt(100) <= Config.uniqueEffects.arcaneAssault.chance) { target.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, 60, 1), attacker); attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_BOW_SHOOT_IMPACT_01.get(), attacker.getSoundCategory(), 0.5f, 1.2f); @@ -70,14 +67,15 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && user instanceof PlayerEntity) { - AbilityMethods.tickAbilityArcaneAssault(stack, world, user, remainingUseTicks, arcane_timer_max, abilityDamage, - skillCooldown, radius); + int radius = Config.uniqueEffects.arcaneAssault.radius; + float abilityDamage = HelperMethods.spellScaledDamage("arcane", user, Config.uniqueEffects.arcaneAssault.spellScaling, Config.uniqueEffects.arcaneAssault.damage); + AbilityMethods.tickAbilityArcaneAssault(stack, world, user, remainingUseTicks, abilityDamage, radius); } } @Override - public int getMaxUseTime(ItemStack stack) { - return arcane_timer_max; + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + return Config.uniqueEffects.arcaneAssault.duration; } @Override @@ -88,42 +86,52 @@ public UseAction getUseAction(ItemStack stack) { @Override public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { if (!world.isClient && (user instanceof PlayerEntity player)) { - player.getItemCooldownManager().set(stack.getItem(), skillCooldown); + player.getItemCooldownManager().set(stack.getItem(), Config.uniqueEffects.arcaneAssault.cooldown); } } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "arcane") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "arcane"); - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.DRAGON_BREATH, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.DRAGON_BREATH, ParticleTypes.DRAGON_BREATH, ParticleTypes.REVERSE_PORTAL, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip6").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.arcanethystsworditem.tooltip6").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleArcane")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.ARCANETHYST::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 25; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 220; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 1f; + @ValidatedInt.Restrict(min = 0) + public int duration = 120; + @ValidatedInt.Restrict(min = 1) + public int radius = 6; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.4f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/BrambleSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/BrambleSwordItem.java index 5b20b4b8..1dd31256 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/BrambleSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/BrambleSwordItem.java @@ -1,39 +1,40 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class BrambleSwordItem extends UniqueSwordItem { - public BrambleSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public BrambleSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { - int fhitchance = (int) Config.getFloat("brambleChance", "UniqueEffects", ConfigDefaultValues.brambleChance); + int hitChance = Config.uniqueEffects.bramble.chance; HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= fhitchance) { - if (!attacker.hasStatusEffect(EffectRegistry.SPORE_SWARM.get())) - attacker.addStatusEffect(new StatusEffectInstance(EffectRegistry.SPORE_SWARM.get(), 200, 2, false, false, true)); + if (attacker.getRandom().nextInt(100) <= hitChance) { + if (!attacker.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.SPORE_SWARM))) + attacker.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.SPORE_SWARM), 200, 2, false, false, true)); } } @@ -42,29 +43,35 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SPORE_BLOSSOM_AIR, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SPORE_BLOSSOM_AIR, ParticleTypes.SPORE_BLOSSOM_AIR, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip8").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.bramblesworditem.tooltip8").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.BRAMBLETHORN::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 45; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/FireSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/BrimstoneClaymoreItem.java similarity index 72% rename from common/src/main/java/net/sweenus/simplyswords/item/custom/FireSwordItem.java rename to common/src/main/java/net/sweenus/simplyswords/item/custom/BrimstoneClaymoreItem.java index 9f413338..d33ec559 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/FireSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/BrimstoneClaymoreItem.java @@ -1,37 +1,39 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class FireSwordItem extends UniqueSwordItem { - public FireSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class BrimstoneClaymoreItem extends UniqueSwordItem implements TwoHandedWeapon { + public BrimstoneClaymoreItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { ServerWorld world = (ServerWorld) attacker.getWorld(); - int fhitchance = (int) Config.getFloat("brimstoneChance", "UniqueEffects", ConfigDefaultValues.brimstoneChance); + int fhitchance = Config.uniqueEffects.brimstone.chance; HelperMethods.playHitSounds(attacker, target); if (attacker.getRandom().nextInt(100) <= fhitchance && attacker instanceof PlayerEntity player) { @@ -50,7 +52,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack livingEntity.setOnFireFor(3); livingEntity.takeKnockback(1, 0.1, 0.1); livingEntity.timeUntilRegen = 0; - livingEntity.damage(damageSource, (float) HelperMethods.getAttackDamage(stack)); + livingEntity.damage(damageSource, (float) HelperMethods.getEntityAttackDamage(attacker)); livingEntity.timeUntilRegen = 0; } } @@ -74,22 +76,28 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.FALLING_LAVA, ParticleTypes.FALLING_LAVA, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.FALLING_LAVA, ParticleTypes.FALLING_LAVA, ParticleTypes.SMOKE, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style TEXT = HelperMethods.getStyle("text"); - Style ABILITY = HelperMethods.getStyle("ability"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.firesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.firesworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.firesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.firesworditem.tooltip2").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.BRIMSTONE_CLAYMORE::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/CaelestisSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/CaelestisSwordItem.java index 90455ba2..e5177610 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/CaelestisSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/CaelestisSwordItem.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,28 +9,29 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class CaelestisSwordItem extends UniqueSwordItem { - public CaelestisSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public CaelestisSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { @@ -42,14 +44,14 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int skillCooldown = (int) Config.getFloat("astralShiftCooldown", "UniqueEffects", ConfigDefaultValues.astralShiftCooldown); - int duration = (int) Config.getFloat("astralShiftDuration", "UniqueEffects", ConfigDefaultValues.astralShiftDuration); + int skillCooldown = Config.uniqueEffects.astralShift.cooldown; + int duration = Config.uniqueEffects.astralShift.duration; world.playSound(null, user.getBlockPos(), SoundRegistry.ACTIVATE_PLINTH_03.get(), user.getSoundCategory(), 0.4f, 1.3f); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.ASTRAL_SHIFT.get(), + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.ASTRAL_SHIFT, duration, 0, false, false, true)); user.addStatusEffect(new StatusEffectInstance(StatusEffects.DARKNESS, duration, 0, false, false, true)); @@ -62,37 +64,49 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.ENCHANT, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.ENCHANT, ParticleTypes.ENCHANT, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip7", - (int) Config.getFloat("astralShiftDuration", "UniqueEffects", ConfigDefaultValues.astralShiftDuration) / 20).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip7", Config.uniqueEffects.astralShift.duration / 20).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip10").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip11").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip12").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip10").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip11").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.caelestissworditem.tooltip12").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.CAELESTIS::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 5; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 420; + @ValidatedFloat.Restrict(min = 0) + public float damageMax = 300f; + @ValidatedFloat.Restrict(min = 0f) + public float damageModifier = 1.0f; + @ValidatedInt.Restrict(min = 0) + public int duration = 100; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/DormantRelicSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/DormantRelicSwordItem.java index ddcbaf83..a8161665 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/DormantRelicSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/DormantRelicSwordItem.java @@ -1,14 +1,13 @@ package net.sweenus.simplyswords.item.custom; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Hand; @@ -17,17 +16,17 @@ import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class DormantRelicSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - public DormantRelicSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public DormantRelicSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - @Override + @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); return super.postHit(stack, target, attacker); @@ -40,19 +39,16 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style TEXT = HelperMethods.getStyle("text"); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.dormantrelicsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dormantrelicsworditem.tooltip2").setStyle(Styles.TEXT)); if (this.asItem().equals(ItemsRegistry.DECAYING_RELIC.get())) { tooltip.add(Text.literal("")); if (Screen.hasAltDown()) { @@ -64,6 +60,6 @@ public void appendTooltip(ItemStack itemStack, World world, List tooltip, } } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/DreadtideSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/DreadtideSwordItem.java index ac751ce6..f510aed0 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/DreadtideSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/DreadtideSwordItem.java @@ -1,43 +1,48 @@ package net.sweenus.simplyswords.item.custom; import elocindev.necronomicon.api.text.TextAPI; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; +import net.minecraft.registry.Registries; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvent; import net.minecraft.text.MutableText; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; +import net.minecraft.util.Identifier; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; +import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class DreadtideSwordItem extends UniqueSwordItem { - public DreadtideSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public DreadtideSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { @@ -50,8 +55,8 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (!user.getWorld().isClient() && world instanceof ServerWorld serverWorld) { - int voidcallerDuration = (int) Config.getFloat("voidcallerDuration", "UniqueEffects", ConfigDefaultValues.voidcallerDuration); - float voidcallerDamageModifier = Config.getFloat("voidcallerDamageModifier", "UniqueEffects", ConfigDefaultValues.voidcallerDamageModifier); + int voidcallerDuration = Config.uniqueEffects.voidcaller.get().duration; + float voidcallerDamageModifier = Config.uniqueEffects.voidcaller.get().damageModifier; int skillCooldown = 20; Box box = HelperMethods.createBox(user, 10); @@ -63,7 +68,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han if ((closestEntity instanceof LivingEntity ee)) { if (HelperMethods.checkFriendlyFire(ee, user)) { - StatusEffectInstance voidcloakEffect = user.getStatusEffect(EffectRegistry.VOIDCLOAK.get()); + StatusEffectInstance voidcloakEffect = user.getStatusEffect(EffectRegistry.getReference(EffectRegistry.VOIDCLOAK)); if (voidcloakEffect != null) { SoundEvent soundSelect = SoundRegistry.MAGIC_SHAMANIC_VOICE_04.get(); List sounds = new ArrayList<>(); @@ -86,12 +91,12 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han user.getSoundCategory(), 0.3f, 1.3f); SimplySwordsStatusEffectInstance voidAssaultEffect = new SimplySwordsStatusEffectInstance( - EffectRegistry.VOIDASSAULT.get(), voidcallerDuration, voidcloakEffect.getAmplifier(), false, + EffectRegistry.getReference(EffectRegistry.VOIDASSAULT), voidcallerDuration, voidcloakEffect.getAmplifier(), false, false, true); voidAssaultEffect.setSourceEntity(user); - voidAssaultEffect.setAdditionalData((int) (getAttackDamage() * voidcallerDamageModifier)); + voidAssaultEffect.setAdditionalData((int) (HelperMethods.getEntityAttackDamage(user) * voidcallerDamageModifier)); ee.addStatusEffect(voidAssaultEffect); - user.removeStatusEffect(EffectRegistry.VOIDCLOAK.get()); + user.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.VOIDCLOAK)); user.getItemCooldownManager().set(this, skillCooldown); } } @@ -104,9 +109,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); @@ -119,33 +122,53 @@ public Text getName(ItemStack stack) { } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style CORRUPTED_LIGHT = HelperMethods.getStyle("corrupted_light"); - Style CORRUPTED_ABILITY = HelperMethods.getStyle("corrupted_ability"); - Style TEXT = HelperMethods.getStyle("corrupted_text"); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { MutableText ability_icon = Text.empty().append("\uA996 "); - MutableText type = TextAPI.Styles.getGradient(Text.translatable("item.eldritch_end.corrupted_item.type"), 1, 6043781, 9326287, 1.0F); + MutableText types = TextAPI.Styles.getGradient(Text.translatable("item.eldritch_end.corrupted_item.type"), 1, 6043781, 9326287, 1.0F); - tooltip.add(Text.literal("\uA999 ").append(type.fillStyle(type.getStyle().withUnderline(true)))); + tooltip.add(Text.literal("\uA999 ").append(types.fillStyle(types.getStyle().withUnderline(true)))); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip1").setStyle(CORRUPTED_ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip5").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip1").setStyle(Styles.CORRUPTED_ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip5").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip7").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip7").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(ability_icon.append(Text.translatable("item.simplyswords.onrightclick").setStyle(CORRUPTED_LIGHT))); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip10").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip11").setStyle(TEXT)); + tooltip.add(ability_icon.append(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.CORRUPTED_LIGHT))); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip10").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip11").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.literal("\uA999 ").append(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip12").setStyle(HelperMethods.getStyle("corrupted")))); - tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip13").setStyle(HelperMethods.getStyle("corrupted"))); + tooltip.add(Text.literal("\uA999 ").append(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip12").setStyle(Styles.CORRUPTED))); + tooltip.add(Text.translatable("item.simplyswords.dreadtidesworditem.tooltip13").setStyle(Styles.CORRUPTED)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(() -> Registries.ITEM.get(Identifier.of(SimplySwords.MOD_ID, "dreadtide")))); + } + + @ValidatedFloat.Restrict(min = 0) + public float damageModifier = 1.0f; + @ValidatedInt.Restrict(min = 0) + public int duration = 250; + @ValidatedInt.Restrict(min = 1) + public int corruptionFrequency = 60; + @ValidatedFloat.Restrict(min = 0) + public float corruptionPerTick = 1.0f; + @ValidatedInt.Restrict(min = 0) + public int corruptionDuration = 1200; + @ValidatedFloat.Restrict(min = 0) + public float corruptionMax = 100f; + @ValidatedInt.Restrict(min = 1) + public int startingTickFrequency = 12; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberIreSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberIreSwordItem.java index cdf5e373..17d86b82 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberIreSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberIreSwordItem.java @@ -1,6 +1,6 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.annotations.Translation; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -10,35 +10,37 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; -import net.minecraft.particle.DefaultParticleType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; +import net.minecraft.particle.SimpleParticleType; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Style; 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; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; import java.util.Optional; public class EmberIreSwordItem extends UniqueSwordItem { - public EmberIreSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public EmberIreSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - private static DefaultParticleType particleWalk = ParticleTypes.FALLING_LAVA; - private static DefaultParticleType particleSprint = ParticleTypes.FALLING_LAVA; - private static DefaultParticleType particlePassive = ParticleTypes.SMOKE; + private static SimpleParticleType particleWalk = ParticleTypes.FALLING_LAVA; + private static SimpleParticleType particleSprint = ParticleTypes.FALLING_LAVA; + private static SimpleParticleType particlePassive = ParticleTypes.SMOKE; @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { @@ -61,7 +63,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { - if (!world.isClient && remainingUseTicks %10 == 0 && remainingUseTicks < getMaxUseTime(stack) - 5) { + if (!world.isClient && remainingUseTicks %10 == 0 && remainingUseTicks < getMaxUseTime(stack, user) - 5) { world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_RECHARGE.get(), user.getSoundCategory(), 0.2f, 1.1f - (remainingUseTicks * 0.001f)); @@ -76,7 +78,7 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { if (!world.isClient && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { Optional targetEntityReturn = HelperMethods.findClosestTarget(user, 18, 3); - double damageAmount = HelperMethods.getAttackDamage(stack) * 0.3; + double damageAmount = HelperMethods.getEntityAttackDamage(user) * 0.3; if (targetEntityReturn.isPresent() && HelperMethods.checkFriendlyFire(targetEntityReturn.get(), user)) { LivingEntity targetEntity = targetEntityReturn.get(); SoundEvent soundSelect = SoundRegistry.ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_03.get(); @@ -93,14 +95,14 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int } final float minAdditionalDamage = 0.0f; - final float maxAdditionalDamage = (float) (HelperMethods.getAttackDamage(stack) * 3); - float chargeRatio = 1.0f - ((float) remainingUseTicks / getMaxUseTime(stack)); + final float maxAdditionalDamage = (float) (HelperMethods.getEntityAttackDamage(user) * 3); + float chargeRatio = 1.0f - ((float) remainingUseTicks / getMaxUseTime(stack, user)); float additionalDamage = minAdditionalDamage + (maxAdditionalDamage - minAdditionalDamage) * chargeRatio; float finalDamage = (float) damageAmount + additionalDamage; targetEntity.timeUntilRegen = 0; targetEntity.damage(damageSource, finalDamage); - world.playSound(null, targetEntity.getBlockPos(), SoundEvents.ENTITY_GENERIC_EXPLODE, + world.playSound(null, targetEntity.getBlockPos(), SoundEvents.ENTITY_GENERIC_EXPLODE.value(), user.getSoundCategory(), 0.4f, 1.1f); HelperMethods.spawnOrbitParticles((ServerWorld) world, targetEntity.getPos(), ParticleTypes.EXPLOSION, 1, 1 ); HelperMethods.spawnOrbitParticles((ServerWorld) world, targetEntity.getPos(), ParticleTypes.POOF, 1, 20 ); @@ -108,13 +110,13 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int user.setVelocity(user.getVelocity().x, 0, user.getVelocity().z); user.velocityModified = true; - int fhitchance = (int) Config.getFloat("emberIreChance", "UniqueEffects", ConfigDefaultValues.emberIreChance); - int fduration = (int) Config.getFloat("emberIreDuration", "UniqueEffects", ConfigDefaultValues.emberIreDuration); + int hitChance = Config.uniqueEffects.emberIre.chance; + int duration = Config.uniqueEffects.emberIre.duration; - if (user.getRandom().nextInt((int) (250 - (chargeRatio * 100))) <= fhitchance) { - user.addStatusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, fduration, 0), user); - user.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, fduration, 1), user); - user.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, fduration, 0), user); + if (user.getRandom().nextInt((int) (250 - (chargeRatio * 100))) <= hitChance) { + user.addStatusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, duration, 0), user); + user.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, 1), user); + user.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, 0), user); world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_SPELL_01.get(), user.getSoundCategory(), 0.5f, 2f); particlePassive = ParticleTypes.LAVA; @@ -127,7 +129,7 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int } @Override - public int getMaxUseTime(ItemStack stack) { + public int getMaxUseTime(ItemStack stack, LivingEntity user) { return 80; } @@ -145,35 +147,38 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, particleSprint = ParticleTypes.FALLING_LAVA; } } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, particleWalk, particleSprint, particlePassive, true); + int stepMod = 7 - (int)(world.getTime() % 7); + HelperMethods.createFootfalls(entity, stack, world, particleWalk, particleSprint, particlePassive, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip1").setStyle(ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip1").setStyle(Styles.ABILITY)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip5").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip5").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip8").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip8").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip10").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip11").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip10").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberiresworditem.tooltip11").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + @Translation(prefix = "", negate = true) + public static class EffectSettings extends ChanceDurationSettings { + + public EffectSettings() { + super(30, 150, new ItemStackTooltipAppender(ItemsRegistry.EMBERBLADE::get)); + } } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberlashSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberlashSwordItem.java index 001cd1e1..fc0428b7 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberlashSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/EmberlashSwordItem.java @@ -1,6 +1,8 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; @@ -8,57 +10,51 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class EmberlashSwordItem extends UniqueSwordItem { - public EmberlashSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public EmberlashSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; + public static float tooltipEffectDamage = 0.20f; @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { ServerWorld world = (ServerWorld) attacker.getWorld(); - DamageSource damageSource = world.getDamageSources().generic(); - float abilityDamage = getAttackDamage(); - float spellScalingModifier = Config.getFloat("smoulderSpellScaling", "UniqueEffects", ConfigDefaultValues.smoulderSpellScaling); - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, attacker, "fire") > getAttackDamage()) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, attacker, "fire"); - scalesWithSpellPower = true; - } - - if (attacker instanceof PlayerEntity player) - damageSource = attacker.getDamageSources().playerAttack(player); - int maximum_stacks = (int) Config.getFloat("smoulderMaxStacks", "UniqueEffects", ConfigDefaultValues.smoulderMaxStacks); HelperMethods.playHitSounds(attacker, target); - if (target.hasStatusEffect(EffectRegistry.SMOULDERING.get())) { + if (target.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.SMOULDERING))) { target.timeUntilRegen = 0; - StatusEffectInstance smoulderingEffect = target.getStatusEffect(EffectRegistry.SMOULDERING.get()); + StatusEffectInstance smoulderingEffect = target.getStatusEffect(EffectRegistry.getReference(EffectRegistry.SMOULDERING)); if (smoulderingEffect != null) { + DamageSource damageSource = attacker instanceof PlayerEntity player ? player.getDamageSources().playerAttack(player) : world.getDamageSources().generic(); + float abilityDamage = Math.max(HelperMethods.commonSpellAttributeScaling(Config.uniqueEffects.smoulder.spellScaling, attacker, "fire"), (float) HelperMethods.getEntityAttackDamage(attacker)); float damageMultiplier = 0.15f * smoulderingEffect.getAmplifier(); target.damage(damageSource, abilityDamage * damageMultiplier); } } - HelperMethods.incrementStatusEffect(target, EffectRegistry.SMOULDERING.get(), 100, 1, maximum_stacks+1); + int maximum_stacks = Config.uniqueEffects.smoulder.maxStacks; + HelperMethods.incrementStatusEffect(target, EffectRegistry.getReference(EffectRegistry.SMOULDERING), 100, 1, maximum_stacks + 1); } return super.postHit(stack, target, attacker); @@ -66,7 +62,6 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int skillCooldown = (int) Config.getFloat("smoulderCooldown", "UniqueEffects", ConfigDefaultValues.smoulderCooldown); user.swingHand(hand); world.playSound(null, user.getBlockPos(), SoundRegistry.SPELL_FIRE.get(), user.getSoundCategory(), 0.5f, 1.0f); @@ -74,43 +69,54 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han user.setVelocity(user.getRotationVector().negate().multiply(+1.5)); user.setVelocity(user.getVelocity().x, 0, user.getVelocity().z); // Prevent user flying to the heavens user.velocityModified = true; - user.heal(user.getMaxHealth() * 0.15f); - user.getItemCooldownManager().set(this, skillCooldown); + user.heal(user.getMaxHealth() * Config.uniqueEffects.smoulder.heal / 100f); + user.getItemCooldownManager().set(this, Config.uniqueEffects.smoulder.cooldown); return super.use(world, user, hand); } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.FALLING_LAVA, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.FALLING_LAVA, ParticleTypes.SMOKE, ParticleTypes.SMOKE, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip5", getAttackDamage() * 0.20f).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip5", tooltipEffectDamage).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip7", Config.getFloat("smoulderHeal", "UniqueEffects",ConfigDefaultValues.smoulderHeal)).setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.emberlashsworditem.tooltip7", Config.uniqueEffects.smoulder.heal).setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFire")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.EMBERLASH::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 80; + @ValidatedFloat.Restrict(min = 0f, max = 100f) + public float heal = 15f; + @ValidatedInt.Restrict(min = 1) + public int maxStacks = 5; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 0.4f; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/EnigmaSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/EnigmaSwordItem.java index 9617a927..80e39d92 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/EnigmaSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/EnigmaSwordItem.java @@ -1,9 +1,10 @@ package net.sweenus.simplyswords.item.custom; import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SpawnReason; @@ -11,18 +12,19 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.BlockStateParticleEffect; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.entity.BattleStandardDarkEntity; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; @@ -30,16 +32,15 @@ import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class EnigmaSwordItem extends UniqueSwordItem { - public EnigmaSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public EnigmaSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { @@ -66,14 +67,14 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han if (banner != null) { banner.setVelocity(0, -1, 0); banner.ownerEntity = user; - banner.decayRate = (int) Config.getFloat("enigmaDecayRate", "UniqueEffects", ConfigDefaultValues.enigmaDecayRate); + banner.decayRate = Config.uniqueEffects.enigma.enigmaDecayRate; banner.standardType = "enigma"; banner.setCustomName(Text.translatable("entity.simplyswords.battlestandard.name", user.getName())); banner.setCustomNameVisible(false); banner.setInvisible(true); - banner.addStatusEffect( new StatusEffectInstance(EffectRegistry.ELEMENTAL_VORTEX.get(), 900, 11, false, false, false)); + banner.addStatusEffect( new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.ELEMENTAL_VORTEX), 900, 11, false, false, false)); } - user.getItemCooldownManager().set(this.getDefaultStack().getItem(), (int) Config.getFloat("enigmaCooldown", "UniqueEffects", ConfigDefaultValues.enigmaCooldown)); + user.getItemCooldownManager().set(this, Config.uniqueEffects.enigma.enigmaCooldown); } } return super.use(world, user, hand); @@ -81,8 +82,6 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; //Drag weapon particles if (entity.isOnGround() && Platform.isModLoaded("bettercombat") && HelperMethods.isWalking(entity) @@ -123,23 +122,35 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip8").setStyle(TEXT)); - - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.enigmasworditem.tooltip8").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.ENIGMA::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int enigmaCooldown = 800; + @ValidatedDouble.Restrict(min = 1.0) + public double enigmaChaseRadius = 16.0; + @ValidatedInt.Restrict(min = 1) + public int enigmaDecayRate = 2; + + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/FlamewindSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/FlamewindSwordItem.java index 9c9a8844..204c861a 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/FlamewindSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/FlamewindSwordItem.java @@ -1,40 +1,42 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvent; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.Comparator; import java.util.List; public class FlamewindSwordItem extends UniqueSwordItem { - public FlamewindSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public FlamewindSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { @@ -50,8 +52,8 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (!user.getWorld().isClient() && world instanceof ServerWorld serverWorld) { int flameSeedDuration = 101; - int flameSeedSpreadCap = (int) Config.getFloat("emberstormSpreadCap", "UniqueEffects", ConfigDefaultValues.emberstormSpreadCap); - int skillCooldown = (int) Config.getFloat("emberstormCooldown", "UniqueEffects", ConfigDefaultValues.emberstormCooldown); + int flameSeedSpreadCap = Config.uniqueEffects.emberstorm.spreadCap; + int skillCooldown = Config.uniqueEffects.emberstorm.cooldown; Box box = HelperMethods.createBox(user, 10); Entity closestEntity = world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY).stream() @@ -60,7 +62,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han if (closestEntity != null) { if ((closestEntity instanceof LivingEntity ee)) { - if (HelperMethods.checkFriendlyFire(ee, user) && !ee.hasStatusEffect(EffectRegistry.FLAMESEED.get())) { + if (HelperMethods.checkFriendlyFire(ee, user) && !ee.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.FLAMESEED))) { SoundEvent soundSelect = SoundRegistry.SPELL_FIRE.get(); int particleCount = 20; // Number of particles along the line @@ -69,7 +71,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han user.getSoundCategory(), 0.3f, 1.3f); SimplySwordsStatusEffectInstance flamSeedEffect = new SimplySwordsStatusEffectInstance( - EffectRegistry.FLAMESEED.get(), flameSeedDuration, 0, false, + EffectRegistry.getReference(EffectRegistry.FLAMESEED), flameSeedDuration, 0, false, false, true); flamSeedEffect.setSourceEntity(user); flamSeedEffect.setAdditionalData(flameSeedSpreadCap); @@ -84,44 +86,55 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(0.5f, entity, "fire") > 0) { - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.FLAME, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.FLAME, ParticleTypes.FLAME, ParticleTypes.ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip6").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip10").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip11", - (int) Config.getFloat("emberstormSpreadCap", "UniqueEffects", ConfigDefaultValues.emberstormSpreadCap)).setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip10").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.flamewindsworditem.tooltip11", Config.uniqueEffects.emberstorm.spreadCap).setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFire")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.FLAMEWIND::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 980; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 5f; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 0.4f; + @ValidatedFloat.Restrict(min = 0f) + public float detonationDamage = 15f; + @ValidatedInt.Restrict(min = 0) + public int maxHaste = 10; + @ValidatedInt.Restrict(min = 1) + public int spreadCap = 6; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/FrostfallSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/FrostfallSwordItem.java index 2346dbaa..e5ef2afb 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/FrostfallSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/FrostfallSwordItem.java @@ -1,8 +1,12 @@ package net.sweenus.simplyswords.item.custom; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.client.item.TooltipContext; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -10,10 +14,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -21,136 +25,130 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.ChargedLocationComponent; +import net.sweenus.simplyswords.item.component.StoredChargeComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class FrostfallSwordItem extends UniqueSwordItem { - public FrostfallSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public FrostfallSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - - private final int abilityCooldown = (int) Config.getFloat("frostFuryCooldown", "UniqueEffects", ConfigDefaultValues.frostFuryCooldown); - int radius = (int) Config.getFloat("frostFuryRadius", "UniqueEffects", ConfigDefaultValues.frostFuryRadius); - float abilityDamage = Config.getFloat("frostFuryDamage", "UniqueEffects", ConfigDefaultValues.frostFuryDamage); - int proc_chance = (int) Config.getFloat("frostFuryChance", "UniqueEffects", ConfigDefaultValues.frostFuryChance); - int shatter_timer_max = (int) Config.getFloat("frostFuryDuration", "UniqueEffects", ConfigDefaultValues.frostFuryDuration); - float spellScalingModifier = Config.getFloat("frostFurySpellScaling", "UniqueEffects", ConfigDefaultValues.frostFurySpellScaling); - int shatter_timer; - int player_shatter_timer; - double lastX; - double lastY; - double lastZ; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { - if (!attacker.getWorld().isClient()) { - ServerWorld world = (ServerWorld) attacker.getWorld(); - HelperMethods.playHitSounds(attacker, target); - //AOE freeze - if (attacker.getRandom().nextInt(100) <= proc_chance) { - Box box = new Box(target.getX() + radius, target.getY() + radius, target.getZ() + radius, - target.getX() - radius, target.getY() - radius, target.getZ() - radius); - for (Entity entity : world.getOtherEntities(attacker, box, EntityPredicates.VALID_LIVING_ENTITY)) { - if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, attacker)) { - le.addStatusEffect(new StatusEffectInstance(EffectRegistry.FREEZE.get(), shatter_timer_max + 10, 0), attacker); - le.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, shatter_timer_max - 10, 4), attacker); - world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_01.get(), - le.getSoundCategory(), 0.1f, 3f); - BlockPos pos = BlockPos.ofFloored(le.getX(), le.getY(), le.getZ()); - BlockPos pos2 = BlockPos.ofFloored(le.getX(), le.getY() + 1, le.getZ()); - BlockState state = Blocks.ICE.getDefaultState(); - if (world.getBlockState(pos) == Blocks.AIR.getDefaultState()) - world.setBlockState(pos, state); - if (world.getBlockState(pos2) == Blocks.AIR.getDefaultState()) - world.setBlockState(pos2, state); - } + if (attacker.getWorld().isClient()) super.postHit(stack, target, attacker); + + ServerWorld world = (ServerWorld) attacker.getWorld(); + HelperMethods.playHitSounds(attacker, target); + //AOE freeze + int proc_chance = Config.uniqueEffects.frostFury.chance; + double radius = Config.uniqueEffects.frostFury.radius; + int shatter_timer_max = Config.uniqueEffects.frostFury.duration; + if (attacker.getRandom().nextInt(100) <= proc_chance) { + Box box = new Box(target.getX() + radius, target.getY() + radius, target.getZ() + radius, + target.getX() - radius, target.getY() - radius, target.getZ() - radius); + for (Entity entity : world.getOtherEntities(attacker, box, EntityPredicates.VALID_LIVING_ENTITY)) { + if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, attacker)) { + le.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.FREEZE), shatter_timer_max + 10, 0), attacker); + le.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, shatter_timer_max - 10, 4), attacker); + world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_01.get(), + le.getSoundCategory(), 0.1f, 3f); + BlockPos pos = BlockPos.ofFloored(le.getX(), le.getY(), le.getZ()); + BlockPos pos2 = BlockPos.ofFloored(le.getX(), le.getY() + 1, le.getZ()); + BlockState state = Blocks.ICE.getDefaultState(); + if (world.getBlockState(pos) == Blocks.AIR.getDefaultState()) + world.setBlockState(pos, state); + if (world.getBlockState(pos2) == Blocks.AIR.getDefaultState()) + world.setBlockState(pos2, state); } - shatter_timer = shatter_timer_max; } + stack.set(ComponentTypeRegistry.STORED_CHARGE.get(), new StoredChargeComponent(shatter_timer_max)); } return super.postHit(stack, target, attacker); } @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - if (!user.getWorld().isClient()) { - lastX = user.getX(); - lastY = user.getY(); - lastZ = user.getZ(); - - world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), - user.getSoundCategory(), 0.6f, 2f); - - double xpos = user.getX() - 2; - double ypos = user.getY(); - double zpos = user.getZ() - 2; - user.setVelocity(0, 0, 0); // Stop player in place - user.velocityModified = true; - user.teleport(lastX, lastY, lastZ); //Ensure they don't end up stuck inside a block - - for (int i = 3; i > 0; i--) { - for (int j = 3; j > 0; j--) { - BlockPos poscheck = BlockPos.ofFloored(xpos + i, ypos, zpos + j); - BlockPos poscheck2 = BlockPos.ofFloored(xpos + i, ypos + 1, zpos + j); - BlockPos poscheck3 = BlockPos.ofFloored(xpos + i, ypos + 2, zpos + j); - BlockPos poscheck4 = BlockPos.ofFloored(xpos + i, ypos - 1, zpos + j); - - BlockState currentState = world.getBlockState(poscheck); - BlockState currentState2 = world.getBlockState(poscheck2); - BlockState currentState3 = world.getBlockState(poscheck3); - BlockState currentState4 = world.getBlockState(poscheck4); - BlockState state = Blocks.ICE.getDefaultState(); - if (i + j != 4) { - if (currentState == Blocks.AIR.getDefaultState() || currentState == Blocks.SNOW.getDefaultState() || currentState == Blocks.GRASS.getDefaultState() - || currentState == Blocks.LARGE_FERN.getDefaultState() || currentState == Blocks.FERN.getDefaultState()) - world.setBlockState(poscheck, state); - if (currentState2 == Blocks.AIR.getDefaultState() || currentState2 == Blocks.SNOW.getDefaultState() || currentState2 == Blocks.GRASS.getDefaultState() - || currentState2 == Blocks.LARGE_FERN.getDefaultState() || currentState2 == Blocks.FERN.getDefaultState()) - world.setBlockState(poscheck2, state); - } - if (currentState3 == Blocks.AIR.getDefaultState() || currentState3 == Blocks.SNOW.getDefaultState() || currentState3 == Blocks.GRASS.getDefaultState() - || currentState3 == Blocks.LARGE_FERN.getDefaultState() || currentState3 == Blocks.FERN.getDefaultState()) - world.setBlockState(poscheck3, state); - if (currentState4 == Blocks.AIR.getDefaultState() || currentState4 == Blocks.SNOW.getDefaultState() || currentState4 == Blocks.GRASS.getDefaultState() - || currentState4 == Blocks.LARGE_FERN.getDefaultState() || currentState4 == Blocks.FERN.getDefaultState()) - world.setBlockState(poscheck4, state); + if (user.getWorld().isClient()) return super.use(world, user, hand); + + double lastX = user.getX(); + double lastY = user.getY(); + double lastZ = user.getZ(); + + world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), + user.getSoundCategory(), 0.6f, 2f); + + double xPos = user.getX() - 2; + double yPos = user.getY(); + double zPos = user.getZ() - 2; + user.setVelocity(0, 0, 0); // Stop player in place + user.velocityModified = true; + user.teleport(lastX, lastY, lastZ, false); // Ensure they don't end up stuck inside a block + + for (int i = 3; i > 0; i--) { + for (int j = 3; j > 0; j--) { + BlockPos poscheck = BlockPos.ofFloored(xPos + i, yPos, zPos + j); + BlockPos poscheck2 = BlockPos.ofFloored(xPos + i, yPos + 1, zPos + j); + BlockPos poscheck3 = BlockPos.ofFloored(xPos + i, yPos + 2, zPos + j); + BlockPos poscheck4 = BlockPos.ofFloored(xPos + i, yPos - 1, zPos + j); + + BlockState currentState = world.getBlockState(poscheck); + BlockState currentState2 = world.getBlockState(poscheck2); + BlockState currentState3 = world.getBlockState(poscheck3); + BlockState currentState4 = world.getBlockState(poscheck4); + BlockState state = Blocks.ICE.getDefaultState(); + if (i + j != 4) { + if (currentState == Blocks.AIR.getDefaultState() || currentState == Blocks.SNOW.getDefaultState() || currentState == Blocks.GRASS_BLOCK.getDefaultState() + || currentState == Blocks.LARGE_FERN.getDefaultState() || currentState == Blocks.FERN.getDefaultState()) + world.setBlockState(poscheck, state); + if (currentState2 == Blocks.AIR.getDefaultState() || currentState2 == Blocks.SNOW.getDefaultState() || currentState2 == Blocks.GRASS_BLOCK.getDefaultState() + || currentState2 == Blocks.LARGE_FERN.getDefaultState() || currentState2 == Blocks.FERN.getDefaultState()) + world.setBlockState(poscheck2, state); } + if (currentState3 == Blocks.AIR.getDefaultState() || currentState3 == Blocks.SNOW.getDefaultState() || currentState3 == Blocks.GRASS_BLOCK.getDefaultState() + || currentState3 == Blocks.LARGE_FERN.getDefaultState() || currentState3 == Blocks.FERN.getDefaultState()) + world.setBlockState(poscheck3, state); + if (currentState4 == Blocks.AIR.getDefaultState() || currentState4 == Blocks.SNOW.getDefaultState() || currentState4 == Blocks.GRASS_BLOCK.getDefaultState() + || currentState4 == Blocks.LARGE_FERN.getDefaultState() || currentState4 == Blocks.FERN.getDefaultState()) + world.setBlockState(poscheck4, state); } - user.teleport(lastX, lastY, lastZ); - user.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, shatter_timer_max, 4), user); - user.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, shatter_timer_max, 4), user); - user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, shatter_timer_max, 4), user); - user.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, shatter_timer_max, 2), user); - player_shatter_timer = shatter_timer_max; - user.getItemCooldownManager().set(this, abilityCooldown); } + user.teleport(lastX, lastY, lastZ, false); + int shatter_timer_max = Config.uniqueEffects.frostFury.duration; + user.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, shatter_timer_max, 4), user); + user.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, shatter_timer_max, 4), user); + user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, shatter_timer_max, 4), user); + user.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, shatter_timer_max, 2), user); + ItemStack stack = user.getStackInHand(hand); + stack.set(ComponentTypeRegistry.CHARGED_LOCATION.get(), new ChargedLocationComponent(shatter_timer_max, lastX, lastY, lastZ)); + user.getItemCooldownManager().set(this, Config.uniqueEffects.frostFury.cooldown); return super.use(world, user, hand); } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { if (!world.isClient && (entity instanceof PlayerEntity player)) { - if (shatter_timer > 0) { - shatter_timer--; - } - if (player_shatter_timer > 0) { - player_shatter_timer--; - } - if (shatter_timer == 1) { + StoredChargeComponent shatterComponent = stack.apply(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT, StoredChargeComponent::decrement); + ChargedLocationComponent chargedLocationComponent = stack.apply(ComponentTypeRegistry.CHARGED_LOCATION.get(), ChargedLocationComponent.DEFAULT, ChargedLocationComponent::decrement); + if (shatterComponent != null && shatterComponent.charge() == 1) { + double radius = Config.uniqueEffects.frostFury.radius; Box box = new Box(player.getX() + radius + 10, player.getY() + radius + 10, player.getZ() + radius + 10, player.getX() - radius - 10, player.getY() - radius - 10, player.getZ() - radius - 10); for (Entity otherEntity : world.getOtherEntities(player, box, EntityPredicates.VALID_LIVING_ENTITY)) { //Ice shatter if (otherEntity instanceof LivingEntity le) { - if (le.hasStatusEffect(EffectRegistry.FREEZE.get())) { + if (le.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.FREEZE))) { + float abilityDamage = HelperMethods.spellScaledDamage("frost", player, Config.uniqueEffects.frostFury.spellScaling, Config.uniqueEffects.frostFury.damage); world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_02.get(), le.getSoundCategory(), 0.2f, 3f); le.damage(player.getDamageSources().indirectMagic(entity, entity), abilityDamage); @@ -184,20 +182,21 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } } } + stack.set(ComponentTypeRegistry.STORED_CHARGE.get(), null); } - if (player_shatter_timer == 1) { + if (chargedLocationComponent != null && chargedLocationComponent.charge() == 1) { world.playSoundFromEntity(null, player, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_02.get(), player.getSoundCategory(), 0.6f, 3f); - double xpos = lastX - 2; - double ypos = lastY; - double zpos = lastZ - 2; + double xPos = chargedLocationComponent.lastX() - 2; + double yPos = chargedLocationComponent.lastY(); + double zPos = chargedLocationComponent.lastZ() - 2; for (int i = 3; i > 0; i--) { for (int j = 3; j > 0; j--) { - BlockPos poscheck = BlockPos.ofFloored(xpos + i, ypos, zpos + j); - BlockPos poscheck2 = BlockPos.ofFloored(xpos + i, ypos + 1, zpos + j); - BlockPos poscheck3 = BlockPos.ofFloored(xpos + i, ypos + 2, zpos + j); - BlockPos poscheck4 = BlockPos.ofFloored(xpos + i, ypos - 1, zpos + j); + BlockPos poscheck = BlockPos.ofFloored(xPos + i, yPos, zPos + j); + BlockPos poscheck2 = BlockPos.ofFloored(xPos + i, yPos + 1, zPos + j); + BlockPos poscheck3 = BlockPos.ofFloored(xPos + i, yPos + 2, zPos + j); + BlockPos poscheck4 = BlockPos.ofFloored(xPos + i, yPos - 1, zPos + j); BlockState currentState = world.getBlockState(poscheck); BlockState currentState2 = world.getBlockState(poscheck2); @@ -216,36 +215,47 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } } } - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "frost") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "frost"); - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SNOWFLAKE, ParticleTypes.SNOWFLAKE, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SNOWFLAKE, ParticleTypes.SNOWFLAKE, ParticleTypes.WHITE_ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip4", shatter_timer_max / 20, abilityDamage).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip3").setStyle(Styles.TEXT)); + float abilityDamage = HelperMethods.spellScaledDamage("frost", MinecraftClient.getInstance().player, Config.uniqueEffects.frostFury.spellScaling, Config.uniqueEffects.frostFury.damage); + tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip4", Config.uniqueEffects.frostFury.duration / 20, abilityDamage).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip5", shatter_timer_max / 20).setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip6").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip5", Config.uniqueEffects.frostFury.duration / 20).setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.frostfallsworditem.tooltip6").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFrost")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.FROSTFALL::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 380; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 18f; + @ValidatedInt.Restrict(min = 0) + public int duration = 80; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 3.0; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.4f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/HarbingerSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/HarbingerSwordItem.java index edcd7f5f..f47d5464 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/HarbingerSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/HarbingerSwordItem.java @@ -1,8 +1,10 @@ package net.sweenus.simplyswords.item.custom; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SpawnReason; @@ -11,6 +13,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; import net.minecraft.text.Style; @@ -19,29 +22,28 @@ import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.entity.BattleStandardDarkEntity; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EntityRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class HarbingerSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - int skillCooldown = (int) Config.getFloat("abyssalStandardCooldown", "UniqueEffects", ConfigDefaultValues.abyssalStandardCooldown); - int abilityChance = (int) Config.getFloat("abyssalStandardChance", "UniqueEffects", ConfigDefaultValues.abyssalStandardChance); - public HarbingerSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public HarbingerSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - @Override + @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); - if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= abilityChance && attacker instanceof PlayerEntity) { + if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= Config.uniqueEffects.abyssalStandard.chance && attacker instanceof PlayerEntity) { attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), attacker.getSoundCategory(), 0.3f, 1.6f); target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, 160, 0), attacker); @@ -69,7 +71,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han banner.standardType = "harbinger"; banner.setCustomName(Text.translatable("entity.simplyswords.battlestandard.name", user.getName())); } - user.getItemCooldownManager().set(this.getDefaultStack().getItem(), skillCooldown); + user.getItemCooldownManager().set(this.getDefaultStack().getItem(), Config.uniqueEffects.abyssalStandard.cooldown); } } return super.use(world, user, hand); @@ -77,35 +79,44 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(2, entity, "soul") > 0) { - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip6").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip6").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleSoul")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.HARBINGER::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 700; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 3f; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.2f; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/VolcanicFurySwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/HearthflameSwordItem.java similarity index 64% rename from common/src/main/java/net/sweenus/simplyswords/item/custom/VolcanicFurySwordItem.java rename to common/src/main/java/net/sweenus/simplyswords/item/custom/HearthflameSwordItem.java index b975b61b..14bd13b2 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/VolcanicFurySwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/HearthflameSwordItem.java @@ -1,6 +1,8 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -9,10 +11,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -20,28 +22,26 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.StoredChargeComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.AbilityMethods; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class VolcanicFurySwordItem extends UniqueSwordItem { - public VolcanicFurySwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class HearthflameSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + public HearthflameSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - int radius = (int) Config.getFloat("volcanicFuryRadius", "UniqueEffects", ConfigDefaultValues.volcanicFuryRadius); - float abilityDamage = Config.getFloat("volcanicFuryDamage", "UniqueEffects", ConfigDefaultValues.volcanicFuryDamage); int ability_timer_max = 120; - int skillCooldown = (int) Config.getFloat("volcanicFuryCooldown", "UniqueEffects", ConfigDefaultValues.volcanicFuryCooldown); - int chargeChance = (int) Config.getFloat("volcanicFuryChance", "UniqueEffects", ConfigDefaultValues.volcanicFuryChance); - float spellPowerModifier = Config.getFloat("volcanicFurySpellScaling", "UniqueEffects", ConfigDefaultValues.volcanicFurySpellScaling); - int chargePower; @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { @@ -49,7 +49,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack ServerWorld world = (ServerWorld) attacker.getWorld(); HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= chargeChance) { + if (attacker.getRandom().nextInt(100) <= Config.uniqueEffects.volcanicFury.chance) { target.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, 10, 1), attacker); target.setVelocity(target.getX() - attacker.getX(), 0.5, target.getZ() - attacker.getZ()); target.setOnFireFor(5); @@ -85,16 +85,20 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && (user instanceof PlayerEntity player)) { + int radius = Config.uniqueEffects.volcanicFury.radius; + float spellScaling = HelperMethods.commonSpellAttributeScaling(Config.uniqueEffects.volcanicFury.spellScaling, user, "fire"); + float abilityDamage = spellScaling > 0f ? spellScaling : Config.uniqueEffects.volcanicFury.damage; + int chargePower = stack.getOrDefault(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT).charge(); AbilityMethods.tickAbilityVolcanicFury(stack, world, user, remainingUseTicks, ability_timer_max, - abilityDamage, skillCooldown, radius, chargePower); + abilityDamage, Config.uniqueEffects.volcanicFury.cooldown, radius, chargePower); if (player.age % 20 == 0) { - chargePower += 2; + stack.apply(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT, comp -> comp.add(2)); } } } @Override - public int getMaxUseTime(ItemStack stack) { + public int getMaxUseTime(ItemStack stack, LivingEntity user) { return ability_timer_max; } @@ -107,7 +111,7 @@ public UseAction getUseAction(ItemStack stack) { public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { if (!world.isClient) { if (user instanceof PlayerEntity player) { - player.getItemCooldownManager().set(this, skillCooldown); + player.getItemCooldownManager().set(this, Config.uniqueEffects.volcanicFury.chance); } int choose_sound = (int) (Math.random() * 30); if (choose_sound <= 10) @@ -120,16 +124,20 @@ else if (choose_sound <= 30) world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_03.get(), user.getSoundCategory(), 0.6f, 1.2f); //Damage + int radius = Config.uniqueEffects.volcanicFury.radius; Box box = new Box(user.getX() + radius, user.getY() + radius, user.getZ() + radius, user.getX() - radius, user.getY() - radius, user.getZ() - radius); for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire((LivingEntity) entity, user)) { float choose = (float) (Math.random() * 1); + float spellScaling = HelperMethods.commonSpellAttributeScaling(Config.uniqueEffects.volcanicFury.spellScaling, user, "fire"); + float abilityDamage = spellScaling > 0f ? spellScaling : Config.uniqueEffects.volcanicFury.damage; + int chargePower = stack.getOrDefault(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT).charge(); le.damage(user.getDamageSources().indirectMagic(user, user), abilityDamage * (chargePower * 0.3f)); le.setOnFireFor(6); world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_POISON_ATTACK_01.get(), le.getSoundCategory(), 0.1f, choose); - chargePower = 0; + stack.set(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT); le.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, 10, 1), user); le.setVelocity(le.getX() - user.getX(), 0.5, le.getZ() - user.getZ()); } @@ -139,40 +147,48 @@ else if (choose_sound <= 30) @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellPowerModifier, entity, "fire") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellPowerModifier, entity, "fire"); - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip6").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip9").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.volcanicfurysworditem.tooltip9").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFire")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.HEARTHFLAME::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 25; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 300; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 3f; + @ValidatedInt.Restrict(min = 1) + public int radius = 3; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.4f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/HiveheartSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/HiveheartSwordItem.java index c76664a9..9c200390 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/HiveheartSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/HiveheartSwordItem.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SpawnReason; @@ -10,36 +11,37 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.entity.SimplySwordsBeeEntity; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EntityRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class HiveheartSwordItem extends UniqueSwordItem { - public HiveheartSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public HiveheartSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { ServerWorld serverWorld = (ServerWorld) attacker.getWorld(); - int skillCooldown = (int) Config.getFloat("hivemindCooldown", "UniqueEffects", ConfigDefaultValues.hivemindCooldown); - float skillDamage = Config.getFloat("hivemindDamage", "UniqueEffects", ConfigDefaultValues.hivemindDamage); + int skillCooldown = Config.uniqueEffects.hivemind.cooldown; + float skillDamage = Config.uniqueEffects.hivemind.damage; HelperMethods.playHitSounds(attacker, target); if (attacker instanceof PlayerEntity player && !player.getItemCooldownManager().isCoolingDown(stack.getItem())) { @@ -54,7 +56,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack beeEntity.shouldAngerAt(target); beeEntity.setInvulnerable(true); beeEntity.setOwner(attacker); - double attackDamage = (1 + skillDamage * this.getAttackDamage()); + double attackDamage = (1 + skillDamage * HelperMethods.getEntityAttackDamage(attacker)); EntityAttributeInstance attackAttribute = beeEntity.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE); if (attackAttribute != null) attackAttribute.setBaseValue(attackDamage); @@ -68,8 +70,8 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int regenDuration = (int) Config.getFloat("hivemindDuration", "UniqueEffects", ConfigDefaultValues.hivemindDuration); - int skillCooldown = (int) Config.getFloat("hivemindCooldown", "UniqueEffects", ConfigDefaultValues.hivemindCooldown); + int regenDuration = Config.uniqueEffects.hivemind.duration; + int skillCooldown = Config.uniqueEffects.hivemind.cooldown; HelperMethods.incrementStatusEffect(user, StatusEffects.REGENERATION, regenDuration, 1, 3); ItemStack stack = user.getMainHandStack(); world.playSound(null, user.getBlockPos(), SoundRegistry.SPELL_MISC_02.get(), @@ -81,33 +83,42 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.FALLING_HONEY, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.FALLING_HONEY, ParticleTypes.LANDING_HONEY, ParticleTypes.LANDING_HONEY, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip6", Config.getFloat("hivemindCooldown", "UniqueEffects", ConfigDefaultValues.hivemindCooldown) / 20).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip6", Config.uniqueEffects.hivemind.cooldown / 20).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip10").setStyle(TEXT)); - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.hiveheartsworditem.tooltip10").setStyle(Styles.TEXT)); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.HIVEHEART::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 60; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 1.1f; + @ValidatedInt.Restrict(min = 0) + public int duration = 450; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/IcewhisperSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/IcewhisperSwordItem.java index 5b37fe13..cbca0679 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/IcewhisperSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/IcewhisperSwordItem.java @@ -1,6 +1,8 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -9,9 +11,9 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -19,30 +21,25 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.ChargedLocationComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.AbilityMethods; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class IcewhisperSwordItem extends UniqueSwordItem { - public IcewhisperSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class IcewhisperSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + public IcewhisperSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - int radius = (int) Config.getFloat("permafrostRadius", "UniqueEffects", ConfigDefaultValues.permafrostRadius); - float abilityDamage = Config.getFloat("permafrostDamage", "UniqueEffects", ConfigDefaultValues.permafrostDamage); - int blizzard_timer_max = (int) Config.getFloat("permafrostDuration", "UniqueEffects", ConfigDefaultValues.permafrostDuration); - int skillCooldown = (int) Config.getFloat("permafrostCooldown", "UniqueEffects", ConfigDefaultValues.permafrostCooldown); - float spellScalingModifier = Config.getFloat("permafrostSpellScaling", "UniqueEffects", ConfigDefaultValues.permafrostSpellScaling); - double lastX; - double lastY; - double lastZ; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); @@ -55,10 +52,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han if (itemStack.getDamage() >= itemStack.getMaxDamage() - 1) { return TypedActionResult.fail(itemStack); } - - lastX = user.getX(); - lastY = user.getY(); - lastZ = user.getZ(); + itemStack.set(ComponentTypeRegistry.CHARGED_LOCATION.get(), new ChargedLocationComponent(user.getX(), user.getY(), user.getZ())); user.setCurrentHand(hand); return TypedActionResult.consume(itemStack); @@ -67,14 +61,19 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && user instanceof PlayerEntity) { - AbilityMethods.tickAbilityPermafrost(stack, world, user, remainingUseTicks, blizzard_timer_max, abilityDamage, - skillCooldown, radius, lastX, lastY, lastZ); + + ChargedLocationComponent location = stack.getOrDefault(ComponentTypeRegistry.CHARGED_LOCATION.get(), ChargedLocationComponent.DEFAULT); + int radius = Config.uniqueEffects.permafrost.radius; + float abilityDamage = HelperMethods.spellScaledDamage("frost", user, Config.uniqueEffects.permafrost.spellScaling, Config.uniqueEffects.permafrost.damage); + + AbilityMethods.tickAbilityPermafrost(stack, world, user, remainingUseTicks, abilityDamage, + radius, location.lastX(), location.lastY(), location.lastZ()); } } @Override - public int getMaxUseTime(ItemStack stack) { - return blizzard_timer_max; + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + return Config.uniqueEffects.permafrost.duration; } @Override @@ -85,19 +84,15 @@ public UseAction getUseAction(ItemStack stack) { @Override public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { if (!world.isClient && (user instanceof PlayerEntity player)) { + int skillCooldown = Config.uniqueEffects.permafrost.cooldown; player.getItemCooldownManager().set(stack.getItem(), skillCooldown); } } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "frost") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "frost"); - scalesWithSpellPower = true; - } - if (!world.isClient && (entity instanceof PlayerEntity player)) { - + int radius = Config.uniqueEffects.permafrost.radius; //AOE Aura if (player.age % 35 == 0 && player.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { Box box = new Box(player.getX() + radius, player.getY() + radius, player.getZ() + radius, @@ -106,18 +101,13 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, if ((otherEntity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, player)) { if (le.hasStatusEffect(StatusEffects.SLOWNESS)) { int a = (le.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() + 1); - - if (a < 4) { - le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, a), player); - } else { - le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, a - 1), player); - } + le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, Math.max(a, 3)), player); } else { le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, 0), player); } float choose = (float) (Math.random() * 1); - world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), - le.getSoundCategory(), 0.1f, choose); + world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), le.getSoundCategory(), 0.1f, choose); + float abilityDamage = HelperMethods.spellScaledDamage("frost", entity, Config.uniqueEffects.permafrost.spellScaling, Config.uniqueEffects.permafrost.damage); le.damage(player.getDamageSources().indirectMagic(entity, entity), abilityDamage); } } @@ -143,32 +133,45 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } } } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SNOWFLAKE, ParticleTypes.SNOWFLAKE, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SNOWFLAKE, ParticleTypes.SNOWFLAKE, ParticleTypes.WHITE_ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { + double radius = Config.uniqueEffects.permafrost.radius; tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip3", radius).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip3", radius).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip6", radius * 2).setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.icewhispersworditem.tooltip6", radius * 2).setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFrost")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.ICEWHISPER::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 600; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 1f; + @ValidatedInt.Restrict(min = 0) + public int duration = 200; + @ValidatedInt.Restrict(min = 1) + public int radius = 4; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 0.9f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/LichbladeSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/LichbladeSwordItem.java index 63dc9d68..467c9e71 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/LichbladeSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/LichbladeSwordItem.java @@ -1,6 +1,9 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -9,9 +12,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.text.Style; +import net.minecraft.server.world.ServerWorld; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -19,39 +23,26 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.StoredChargeComponent; +import net.sweenus.simplyswords.item.component.TargetedLocationComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.AbilityMethods; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class LichbladeSwordItem extends UniqueSwordItem { - public LichbladeSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class LichbladeSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + public LichbladeSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - float overallAbsorptionCap = Config.getFloat("abilityAbsorptionCap", "UniqueEffects", ConfigDefaultValues.abilityAbsorptionCap); - int radius = (int) Config.getFloat("soulAnguishRadius", "UniqueEffects", ConfigDefaultValues.soulAnguishRadius); - float absorptionCap = Config.getFloat("soulAnguishAbsorptionCap", "UniqueEffects", ConfigDefaultValues.soulAnguishAbsorptionCap); - float abilityDamage = Config.getFloat("soulAnguishDamage", "UniqueEffects", ConfigDefaultValues.soulAnguishDamage); - int maxDuration = (int) Config.getFloat("soulAnguishDuration", "UniqueEffects", ConfigDefaultValues.soulAnguishDuration); - int skillCooldown = (int) Config.getFloat("soulAnguishCooldown", "UniqueEffects", ConfigDefaultValues.soulAnguishCooldown); - float healAmount = Config.getFloat("soulAnguishHeal", "UniqueEffects", ConfigDefaultValues.soulAnguishHeal); - int range = (int) Config.getFloat("soulAnguishRange", "UniqueEffects", ConfigDefaultValues.soulAnguishRange); - float spellScalingModifier = Config.getFloat("soulAnguishSpellScaling", "UniqueEffects", ConfigDefaultValues.soulAnguishSpellScaling); - public int damageTracker = 0; - double lastX; - double lastY; - double lastZ; - double targetX; - double targetY; - double targetZ; - LivingEntity abilityTarget; @Override @@ -69,14 +60,12 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han if (itemStack.isOf(ItemsRegistry.SLUMBERING_LICHBLADE.get())) { return TypedActionResult.pass(itemStack); } - abilityTarget = (LivingEntity) HelperMethods.getTargetedEntity(user, range); + LivingEntity abilityTarget = (LivingEntity) HelperMethods.getTargetedEntity(user, Config.uniqueEffects.soulAnguish.range); if (abilityTarget != null) { abilityTarget.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, 10, 0), user); world.playSoundFromEntity(null, user, SoundRegistry.DARK_SWORD_ENCHANT.get(), user.getSoundCategory(), 0.5f, 0.5f); - lastX = user.getX(); - lastY = user.getY(); - lastZ = user.getZ(); + itemStack.set(ComponentTypeRegistry.TARGETED_LOCATION.get(), new TargetedLocationComponent(abilityTarget.getUuid(), user.getX(), user.getY(), user.getZ())); } user.setCurrentHand(hand); return TypedActionResult.consume(itemStack); @@ -84,13 +73,21 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { - if (!world.isClient() && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && abilityTarget != null) { + if (world.isClient) return; + TargetedLocationComponent targetLocation = stack.getOrDefault(ComponentTypeRegistry.TARGETED_LOCATION.get(), TargetedLocationComponent.DEFAULT); + LivingEntity abilityTarget = targetLocation.getEntity((ServerWorld) world); + if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && abilityTarget != null) { //Return to user after the duration or after the enemy dies & buff user + int maxDuration = Config.uniqueEffects.soulAnguish.duration; + int radius = Config.uniqueEffects.soulAnguish.radius; + if (stack.isOf(ItemsRegistry.AWAKENED_LICHBLADE.get())) { if (abilityTarget.isDead() || abilityTarget == user || remainingUseTicks < maxDuration) { + stack.set(ComponentTypeRegistry.TARGETED_LOCATION.get(), targetLocation.setTarget(user)); abilityTarget = user; - if (user.squaredDistanceTo(lastX, lastY, lastZ) < radius) { - user.setAbsorptionAmount(Math.min(overallAbsorptionCap, user.getAbsorptionAmount() + Math.min(damageTracker / 2f, absorptionCap))); + if (user.squaredDistanceTo(targetLocation.lastX(), targetLocation.lastY(), targetLocation.lastZ()) < radius) { + int damageTracker = stack.getOrDefault(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT).charge(); + user.setAbsorptionAmount(Math.min(Config.uniqueEffects.abilityAbsorptionCap, user.getAbsorptionAmount() + Math.min(damageTracker / 2f, Config.uniqueEffects.soulAnguish.absorptionCap))); user.stopUsingItem(); world.playSoundFromEntity(null, user, SoundRegistry.DARK_SWORD_SPELL.get(), user.getSoundCategory(), 0.04f, 0.5f); @@ -99,11 +96,15 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai } else if (stack.isOf(ItemsRegistry.WAKING_LICHBLADE.get()) && (abilityTarget.isDead() || remainingUseTicks < maxDuration)) { user.stopUsingItem(); } + //Move aura to target + double lastX = targetLocation.lastX(); + double lastY = targetLocation.lastY(); + double lastZ = targetLocation.lastZ(); if (user.age % 5 == 0) { - targetX = abilityTarget.getX(); - targetY = abilityTarget.getY(); - targetZ = abilityTarget.getZ(); + double targetX = abilityTarget.getX(); + double targetY = abilityTarget.getY(); + double targetZ = abilityTarget.getZ(); if (targetX > lastX) lastX += 1; if (targetX < lastX) lastX -= 1; @@ -112,14 +113,16 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai if (targetY > lastY) lastY += 1; if (targetY < lastY) lastY -= 1; } - AbilityMethods.tickAbilitySoulAnguish(stack, world, user, abilityDamage, radius, lastX, lastY, lastZ, - healAmount, abilityTarget); + stack.set(ComponentTypeRegistry.TARGETED_LOCATION.get(), new TargetedLocationComponent(abilityTarget.getUuid(), lastX, lastY, lastZ)); + float abilityDamage = HelperMethods.spellScaledDamage("soul", user, Config.uniqueEffects.soulAnguish.spellScaling, Config.uniqueEffects.soulAnguish.damage); + float healAmount = Config.uniqueEffects.soulAnguish.heal; + AbilityMethods.tickAbilitySoulAnguish(stack, world, user, abilityDamage, radius, lastX, lastY, lastZ, healAmount, abilityTarget); } } @Override - public int getMaxUseTime(ItemStack stack) { - return maxDuration * 2; + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + return Config.uniqueEffects.soulAnguish.duration * 2; } @Override @@ -129,92 +132,114 @@ public UseAction getUseAction(ItemStack stack) { @Override public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { - damageTracker = 0; - if (!world.isClient && (user instanceof PlayerEntity player) && abilityTarget != null) { - player.getItemCooldownManager().set(stack.getItem(), skillCooldown); + TargetedLocationComponent targetLocation = stack.get(ComponentTypeRegistry.TARGETED_LOCATION.get()); + if (!world.isClient && (user instanceof PlayerEntity player) && targetLocation != null && ((ServerWorld)world).getEntity(targetLocation.uuid()) != null) { + player.getItemCooldownManager().set(stack.getItem(), Config.uniqueEffects.soulAnguish.cooldown); } + stack.set(ComponentTypeRegistry.STORED_CHARGE.get(), null); + stack.set(ComponentTypeRegistry.TARGETED_LOCATION.get(), null); } @Override public void inventoryTick(ItemStack stack, World world, Entity user, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, user, "soul") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, user, "soul"); - scalesWithSpellPower = true; - } - if (!user.getWorld().isClient() && user instanceof LivingEntity livingUser) { + if (!user.getWorld().isClient() + && user instanceof LivingEntity livingUser + && livingUser.age % 35 == 0 + && livingUser.getEquippedStack(EquipmentSlot.MAINHAND) == stack + && !livingUser.isUsingItem()) { + + float abilityDamage = HelperMethods.spellScaledDamage("soul", user, Config.uniqueEffects.soulAnguish.spellScaling, Config.uniqueEffects.soulAnguish.damage); + int radius = Config.uniqueEffects.soulAnguish.radius; + //AOE Aura - if (livingUser.age % 35 == 0 && livingUser.getEquippedStack(EquipmentSlot.MAINHAND) == stack && !livingUser.isUsingItem()) { - Box box = new Box(livingUser.getX() + radius, livingUser.getY() + radius, livingUser.getZ() + radius, - livingUser.getX() - radius, livingUser.getY() - radius, livingUser.getZ() - radius); - for (Entity entity : world.getOtherEntities(livingUser, box, EntityPredicates.VALID_LIVING_ENTITY)) { - if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire((LivingEntity) entity, livingUser)) { - le.damage(livingUser.getDamageSources().indirectMagic(user, user), abilityDamage); - } + Box box = new Box(livingUser.getX() + radius, livingUser.getY() + radius, livingUser.getZ() + radius, + livingUser.getX() - radius, livingUser.getY() - radius, livingUser.getZ() - radius); + for (Entity entity : world.getOtherEntities(livingUser, box, EntityPredicates.VALID_LIVING_ENTITY)) { + if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire((LivingEntity) entity, livingUser)) { + le.damage(livingUser.getDamageSources().indirectMagic(user, user), abilityDamage); } - world.playSoundFromEntity(null, livingUser, SoundRegistry.DARK_SWORD_BLOCK.get(), - livingUser.getSoundCategory(), 0.1f, 0.2f); - double xpos = livingUser.getX() - (radius + 1); - double ypos = livingUser.getY(); - double zpos = livingUser.getZ() - (radius + 1); - - for (int i = radius * 2; i > 0; i--) { - for (int j = radius * 2; j > 0; j--) { - float choose = (float) (Math.random() * 1); - HelperMethods.spawnParticle(world, ParticleTypes.SCULK_SOUL, - xpos + i + choose, ypos, zpos + j + choose, - 0, 0.1, 0); - HelperMethods.spawnParticle(world, ParticleTypes.SOUL, - xpos + i + choose, ypos + 0.1, zpos + j + choose, - 0, 0, 0); - HelperMethods.spawnParticle(world, ParticleTypes.MYCELIUM, - xpos + i + choose, ypos + 2, zpos + j + choose, - 0, 0, 0); - } + } + world.playSoundFromEntity(null, livingUser, SoundRegistry.DARK_SWORD_BLOCK.get(), + livingUser.getSoundCategory(), 0.1f, 0.2f); + double xPos = livingUser.getX() - (radius + 1); + double yPos = livingUser.getY(); + double zPos = livingUser.getZ() - (radius + 1); + + for (int i = radius * 2; i > 0; i--) { + for (int j = radius * 2; j > 0; j--) { + float choose = (float) (Math.random() * 1); + HelperMethods.spawnParticle(world, ParticleTypes.SCULK_SOUL, + xPos + i + choose, yPos, zPos + j + choose, + 0, 0.1, 0); + HelperMethods.spawnParticle(world, ParticleTypes.SOUL, + xPos + i + choose, yPos + 0.1, zPos + j + choose, + 0, 0, 0); + HelperMethods.spawnParticle(world, ParticleTypes.MYCELIUM, + xPos + i + choose, yPos + 2, zPos + j + choose, + 0, 0, 0); } } + } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(user, stack, world, stepMod, ParticleTypes.SOUL, ParticleTypes.SOUL, - ParticleTypes.MYCELIUM, true); + HelperMethods.createFootfalls(user, stack, world, ParticleTypes.SOUL, ParticleTypes.SOUL, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, user, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); if (itemStack.isOf(ItemsRegistry.SLUMBERING_LICHBLADE.get())) - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip1").setStyle(ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip1").setStyle(Styles.ABILITY)); else if (itemStack.isOf(ItemsRegistry.WAKING_LICHBLADE.get())) - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip1.2").setStyle(ABILITY)); - else tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip1.3").setStyle(ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip1.2").setStyle(Styles.ABILITY)); + else tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip1.3").setStyle(Styles.ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip3", radius).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add( Text.translatable("item.simplyswords.lichbladesworditem.tooltip3").setStyle(Styles.TEXT)); if (!itemStack.isOf(ItemsRegistry.SLUMBERING_LICHBLADE.get())) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip6").setStyle(Styles.TEXT)); if (itemStack.isOf(ItemsRegistry.AWAKENED_LICHBLADE.get())) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip9").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.lichbladesworditem.tooltip9").setStyle(Styles.TEXT)); } } - if (scalesWithSpellPower) { + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleSoul")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.SLUMBERING_LICHBLADE::get, ItemsRegistry.WAKING_LICHBLADE::get, ItemsRegistry.AWAKENED_LICHBLADE::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int absorptionCap = 8; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 700; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 4f; + @ValidatedInt.Restrict(min = 0) + public int duration = 200; + @ValidatedFloat.Restrict(min = 0f) + public float heal = 0.5f; + @ValidatedInt.Restrict(min = 1) + public int radius = 3; + @ValidatedDouble.Restrict(min = 1.0) + public double range = 22.0; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.6f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/LivyatanSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/LivyatanSwordItem.java index 1b7d1da9..475421fb 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/LivyatanSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/LivyatanSwordItem.java @@ -1,8 +1,12 @@ package net.sweenus.simplyswords.item.custom; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.client.item.TooltipContext; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -10,10 +14,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -21,92 +25,89 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.StoredChargeComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class LivyatanSwordItem extends UniqueSwordItem { - public LivyatanSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public LivyatanSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - int radius = (int) Config.getFloat("frostShatterRadius", "UniqueEffects", ConfigDefaultValues.frostShatterRadius); - float abilityDamage = Config.getFloat("frostShatterDamage", "UniqueEffects", ConfigDefaultValues.frostShatterDamage); - int proc_chance = (int) Config.getFloat("frostShatterChance", "UniqueEffects", ConfigDefaultValues.frostShatterChance); - int shatter_timer_max = (int) Config.getFloat("frostShatterDuration", "UniqueEffects", ConfigDefaultValues.frostShatterDuration); - float spellScalingModifier = Config.getFloat("frostShatterSpellScaling", "UniqueEffects", ConfigDefaultValues.frostShatterSpellScaling); - int shatter_timer; - int shatter_bonus; - int player_shatter_timer; - double lastX; - double lastY; - double lastZ; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { - if (!attacker.getWorld().isClient()) { - ServerWorld world = (ServerWorld) attacker.getWorld(); - HelperMethods.playHitSounds(attacker, target); - //AOE freeze - if (attacker.getRandom().nextInt(100) <= proc_chance) { - Box box = new Box(target.getX() + radius, target.getY() + radius, target.getZ() + radius, - target.getX() - radius, target.getY() - radius, target.getZ() - radius); - for (Entity entity : world.getOtherEntities(attacker, box, EntityPredicates.VALID_LIVING_ENTITY)) { - if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, attacker)) { - le.addStatusEffect(new StatusEffectInstance(EffectRegistry.FREEZE.get(), shatter_timer_max + 10, 0), attacker); - le.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, shatter_timer_max - 10, 4), attacker); - world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_01.get(), - le.getSoundCategory(), 0.1f, 3f); - BlockPos pos = BlockPos.ofFloored(le.getX(), le.getY(), le.getZ()); - BlockPos pos2 = BlockPos.ofFloored(le.getX(), le.getY() + 1, le.getZ()); - BlockState state = Blocks.ICE.getDefaultState(); - if (world.getBlockState(pos) == Blocks.AIR.getDefaultState()) - world.setBlockState(pos, state); - if (world.getBlockState(pos2) == Blocks.AIR.getDefaultState()) - world.setBlockState(pos2, state); - } + if (attacker.getWorld().isClient()) return super.postHit(stack, target, attacker); + + ServerWorld world = (ServerWorld) attacker.getWorld(); + HelperMethods.playHitSounds(attacker, target); + //AOE freeze + + int proc_chance = Config.uniqueEffects.frostShatter.chance; + double radius = Config.uniqueEffects.frostShatter.radius; + int shatter_timer_max = Config.uniqueEffects.frostShatter.duration; + + if (attacker.getRandom().nextInt(100) <= proc_chance) { + Box box = new Box(target.getX() + radius, target.getY() + radius, target.getZ() + radius, + target.getX() - radius, target.getY() - radius, target.getZ() - radius); + for (Entity entity : world.getOtherEntities(attacker, box, EntityPredicates.VALID_LIVING_ENTITY)) { + if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, attacker)) { + le.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.FREEZE), shatter_timer_max + 10, 0), attacker); + le.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, shatter_timer_max - 10, 4), attacker); + world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_01.get(), + le.getSoundCategory(), 0.1f, 3f); + BlockPos pos = BlockPos.ofFloored(le.getX(), le.getY(), le.getZ()); + BlockPos pos2 = BlockPos.ofFloored(le.getX(), le.getY() + 1, le.getZ()); + BlockState state = Blocks.ICE.getDefaultState(); + if (world.getBlockState(pos) == Blocks.AIR.getDefaultState()) + world.setBlockState(pos, state); + if (world.getBlockState(pos2) == Blocks.AIR.getDefaultState()) + world.setBlockState(pos2, state); } - shatter_timer = shatter_timer_max; } + stack.set(ComponentTypeRegistry.STORED_CHARGE.get(), new StoredChargeComponent(shatter_timer_max)); } return super.postHit(stack, target, attacker); } @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - if (!user.getWorld().isClient() && shatter_timer > 0) { - shatter_bonus = shatter_timer / 5; - shatter_timer = 2; + if (user.getWorld().isClient()) return super.use(world, user, hand); + ItemStack stack = user.getStackInHand(hand); + StoredChargeComponent shatterTimer = stack.getOrDefault(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT); + if (shatterTimer.charge() > 0) { + stack.set(ComponentTypeRegistry.STORED_BONUS.get(), new StoredChargeComponent(shatterTimer.charge() / 5)); + stack.set(ComponentTypeRegistry.STORED_CHARGE.get(), shatterTimer.set(2)); } return super.use(world, user, hand); } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "frost") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "frost"); - scalesWithSpellPower = true; - } - if (!world.isClient && entity instanceof PlayerEntity && shatter_timer > 0) { - shatter_timer--; - if (shatter_timer == 1) { + float abilityDamage = HelperMethods.spellScaledDamage("frost", entity, Config.uniqueEffects.frostShatter.spellScaling, Config.uniqueEffects.frostShatter.damage); + if (!world.isClient && entity instanceof PlayerEntity) { + StoredChargeComponent shatterTimer = stack.apply(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT, StoredChargeComponent::decrement); + if (shatterTimer != null && shatterTimer.charge() == 1) { + double radius = Config.uniqueEffects.frostShatter.radius; Box box = new Box(entity.getX() + radius + 10, entity.getY() + radius + 10, entity.getZ() + radius + 10, entity.getX() - radius - 10, entity.getY() - radius - 10, entity.getZ() - radius - 10); for (Entity otherEntity : world.getOtherEntities(entity, box, EntityPredicates.VALID_LIVING_ENTITY)) { //Ice shatter if (otherEntity instanceof LivingEntity le) { - if (le.hasStatusEffect(EffectRegistry.FREEZE.get())) { - le.removeStatusEffect(EffectRegistry.FREEZE.get()); + if (le.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.FREEZE))) { + le.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.FREEZE)); le.removeStatusEffect(StatusEffects.RESISTANCE); - world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_02.get(), - le.getSoundCategory(), 0.2f, 3f); - le.damage(entity.getDamageSources().indirectMagic(entity, entity), abilityDamage + shatter_bonus); + world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_02.get(), le.getSoundCategory(), 0.2f, 3f); + StoredChargeComponent shatterBonus = stack.getOrDefault(ComponentTypeRegistry.STORED_BONUS.get(), StoredChargeComponent.DEFAULT); + le.damage(entity.getDamageSources().indirectMagic(entity, entity), abilityDamage + shatterBonus.charge()); } double xpos = le.getX() - 2; double ypos = le.getY(); @@ -136,35 +137,48 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } } } - shatter_bonus = 0; + stack.set(ComponentTypeRegistry.STORED_BONUS.get(), null); + stack.set(ComponentTypeRegistry.STORED_CHARGE.get(), null); } } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SNOWFLAKE, ParticleTypes.SNOWFLAKE, - ParticleTypes.WHITE_ASH, true); + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SNOWFLAKE, ParticleTypes.SNOWFLAKE, ParticleTypes.WHITE_ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip4", shatter_timer_max / 20, abilityDamage).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip3").setStyle(Styles.TEXT)); + float abilityDamage = HelperMethods.spellScaledDamage("frost", MinecraftClient.getInstance().player, Config.uniqueEffects.frostShatter.spellScaling, Config.uniqueEffects.frostShatter.damage); + tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip4", Config.uniqueEffects.frostShatter.duration / 20, abilityDamage).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip6").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.livyatansworditem.tooltip6").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFrost")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.LIVYATAN::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 18f; + @ValidatedInt.Restrict(min = 0) + public int duration = 80; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 3.0; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.7f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/MagibladeSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/MagibladeSwordItem.java index fcca2f9c..cec7b60d 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/MagibladeSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/MagibladeSwordItem.java @@ -1,34 +1,37 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Style; 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; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class MagibladeSwordItem extends UniqueSwordItem { - public MagibladeSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public MagibladeSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { @@ -51,13 +54,13 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (!world.isClient) { - if ((remainingUseTicks %5 == 0 && remainingUseTicks < getMaxUseTime(stack) - 5)) { + if ((remainingUseTicks %5 == 0 && remainingUseTicks < getMaxUseTime(stack, user) - 5)) { if (remainingUseTicks < 10) { onStoppedUsing(stack, world, user, remainingUseTicks); } } - if (remainingUseTicks == getMaxUseTime(stack)-1) { + if (remainingUseTicks == getMaxUseTime(stack, user) - 1) { world.playSoundFromEntity(null, user, SoundEvents.ENTITY_WARDEN_SONIC_CHARGE, user.getSoundCategory(), 0.6f, 1.4f); } @@ -65,7 +68,7 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai } @Override - public int getMaxUseTime(ItemStack stack) { + public int getMaxUseTime(ItemStack stack, LivingEntity user) { return 40; } @@ -77,10 +80,10 @@ public UseAction getUseAction(ItemStack stack) { @Override public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { if (!user.getWorld().isClient() && user instanceof PlayerEntity player) { - int skillCooldown = (int) Config.getFloat("magibladeCooldown", "UniqueEffects", ConfigDefaultValues.magibladeCooldown); - float damageModifier = Config.getFloat("magibladeDamageModifier", "UniqueEffects", ConfigDefaultValues.magibladeDamageModifier); - float damage = (float) (HelperMethods.getAttackDamage(stack) * damageModifier); - float distance = Config.getFloat("magibladeSonicDistance", "UniqueEffects", ConfigDefaultValues.magibladeSonicDistance); + int skillCooldown = Config.uniqueEffects.magiblade.cooldown; + float damageModifier = Config.uniqueEffects.magiblade.damageModifier; + float damage = (float) (HelperMethods.getEntityAttackDamage(user) * damageModifier); + float distance = Config.uniqueEffects.magiblade.sonicDistance; DamageSource damageSource = player.getDamageSources().playerAttack(player); if (remainingUseTicks < 11) { @@ -98,32 +101,45 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.ENCHANT, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.ENCHANT, ParticleTypes.ENCHANT, ParticleTypes.ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip9").setStyle(TEXT)); - - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magibladesworditem.tooltip9").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.MAGIBLADE::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 35; + @ValidatedFloat.Restrict(min = 0f) + public float damageModifier = 0.7f; + @ValidatedInt.Restrict(min = 0, max = 100) + public int repelChance = 55; + @ValidatedFloat.Restrict(min = 1f) + public float repelRadius = 4f; + @ValidatedFloat.Restrict(min = 1f) + public float sonicDistance = 16f; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/MagiscytheSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/MagiscytheSwordItem.java index b9058605..947efb23 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/MagiscytheSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/MagiscytheSwordItem.java @@ -1,6 +1,9 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -8,48 +11,48 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; import java.util.Random; public class MagiscytheSwordItem extends UniqueSwordItem { - public MagiscytheSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public MagiscytheSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { HelperMethods.playHitSounds(attacker, target); ServerWorld world = (ServerWorld) attacker.getWorld(); - if (attacker.hasStatusEffect(EffectRegistry.MAGISTORM.get())) { + if (attacker.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.MAGISTORM))) { world.playSound(null, attacker.getBlockPos(), SoundRegistry.ELEMENTAL_BOW_SCIFI_SHOOT_IMPACT_03.get(), attacker.getSoundCategory(), 0.1f, 1.9f); - float repairChance = Config.getFloat("magistormRepairChance", "UniqueEffects", ConfigDefaultValues.magistormRepairChance); + float repairChance = Config.uniqueEffects.magistorm.repairChance; Random random = new Random(); for (EquipmentSlot slot : EquipmentSlot.values()) { - if (slot.getType() == EquipmentSlot.Type.ARMOR || slot == EquipmentSlot.MAINHAND || slot == EquipmentSlot.OFFHAND) { + if (slot.getType() == EquipmentSlot.Type.HUMANOID_ARMOR || slot == EquipmentSlot.MAINHAND || slot == EquipmentSlot.OFFHAND) { ItemStack item = attacker.getEquippedStack(slot); if (!item.isEmpty() && random.nextFloat() < repairChance && item.getDamage() > 0) { - item.setDamage((int) (item.getDamage() - HelperMethods.getAttackDamage(stack))); + item.setDamage((int) (item.getDamage() - HelperMethods.getEntityAttackDamage(attacker))); break; } } @@ -61,12 +64,12 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int skillCooldown = (int) Config.getFloat("magistormCooldown", "UniqueEffects", ConfigDefaultValues.magistormCooldown); - int baseEffectDuration = (int) Config.getFloat("magistormDuration", "UniqueEffects", ConfigDefaultValues.magistormDuration); + int skillCooldown = Config.uniqueEffects.magistorm.cooldown; + int baseEffectDuration = Config.uniqueEffects.magistorm.duration; world.playSound(null, user.getBlockPos(), SoundRegistry.MAGIC_SHAMANIC_NORDIC_22.get(), user.getSoundCategory(), 0.2f, 1.1f); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.MAGISTORM.get(), baseEffectDuration, 1)); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.MAGISTORM), baseEffectDuration, 1)); user.getItemCooldownManager().set(this, skillCooldown); return super.use(world, user, hand); @@ -74,42 +77,54 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(0.5f, entity, "arcane") > 0) { - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.ENCHANT, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.ENCHANT, ParticleTypes.ENCHANT, ParticleTypes.ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip5").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip5").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip10").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip11").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip12").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip10").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip11").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magiscythesworditem.tooltip12").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleArcane")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.MAGISCYTHE::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 980; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 3f; + @ValidatedInt.Restrict(min = 0) + public int duration = 400; + @ValidatedDouble.Restrict(min = 1f) + public double radius = 4.0; + @ValidatedFloat.Restrict(min = 0f, max = 1f) + public float repairChance = 0.25f; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 0.5f; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/MagispearSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/MagispearSwordItem.java index d9ffa443..8c174bc3 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/MagispearSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/MagispearSwordItem.java @@ -1,45 +1,48 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; import java.util.Random; public class MagispearSwordItem extends UniqueSwordItem { - public MagispearSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public MagispearSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { HelperMethods.playHitSounds(attacker, target); ServerWorld world = (ServerWorld) attacker.getWorld(); - float hitChance = Config.getFloat("magislamMagicChance", "UniqueEffects", ConfigDefaultValues.magislamMagicChance); + float hitChance = Config.uniqueEffects.magislam.magicChance; int random = new Random().nextInt(100); if (random < hitChance) { - float damage = (float) (HelperMethods.getAttackDamage(stack) * Config.getFloat("magislamMagicModifier", "UniqueEffects", ConfigDefaultValues.magislamMagicModifier)); + float damage = Config.uniqueEffects.magislam.magicModifier; target.timeUntilRegen = 0; target.damage(attacker.getDamageSources().indirectMagic(attacker, attacker), damage); target.timeUntilRegen = 0; @@ -52,12 +55,12 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int skillCooldown = (int) Config.getFloat("magislamCooldown", "UniqueEffects", ConfigDefaultValues.magislamCooldown); + int skillCooldown = Config.uniqueEffects.magislam.cooldown; world.playSound(null, user.getBlockPos(), SoundRegistry.MAGIC_SHAMANIC_NORDIC_27.get(), user.getSoundCategory(), 0.2f, 1.1f); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.MAGISLAM.get(), 62, 1)); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.RESILIENCE.get(), 64, 3)); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.MAGISLAM), 62, 1)); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.RESILIENCE), 64, 3)); user.getItemCooldownManager().set(this, skillCooldown); return super.use(world, user, hand); @@ -65,32 +68,45 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.ENCHANT, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.ENCHANT, ParticleTypes.ENCHANT, ParticleTypes.ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip9").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.magispearsworditem.tooltip9").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.MAGISPEAR::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 140; + @ValidatedFloat.Restrict(min = 0f) + public float damageModifier = 2.0f; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 4.0; + @ValidatedInt.Restrict(min = 0, max = 100) + public int magicChance = 35; + @ValidatedFloat.Restrict(min = 0f) + public float magicModifier = 0.5f; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/MoltenEdgeSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/MoltenEdgeSwordItem.java index e7f814e3..bd617315 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/MoltenEdgeSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/MoltenEdgeSwordItem.java @@ -1,6 +1,8 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -9,85 +11,86 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; -import net.minecraft.particle.DefaultParticleType; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.MoltenParticleComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class MoltenEdgeSwordItem extends UniqueSwordItem { - public MoltenEdgeSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public MoltenEdgeSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - private static DefaultParticleType particleWalk = ParticleTypes.FALLING_LAVA; - private static DefaultParticleType particleSprint = ParticleTypes.FALLING_LAVA; - private static DefaultParticleType particlePassive = ParticleTypes.SMOKE; - - private final int abilityCooldown = (int) Config.getFloat("moltenRoarCooldown", "UniqueEffects", ConfigDefaultValues.moltenRoarCooldown); - int radius = (int) Config.getFloat("moltenRoarRadius", "UniqueEffects", ConfigDefaultValues.moltenRoarRadius); - int knockbackStrength = (int) Config.getFloat("moltenRoarKnockbackStrength", "UniqueEffects", ConfigDefaultValues.moltenRoarKnockbackStrength); - int proc_chance = (int) Config.getFloat("moltenRoarChance", "UniqueEffects", ConfigDefaultValues.moltenRoarChance); - int roar_timer_max = (int) Config.getFloat("moltenRoarDuration", "UniqueEffects", ConfigDefaultValues.moltenRoarDuration); - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { - if (!attacker.getWorld().isClient()) { - ServerWorld world = (ServerWorld) attacker.getWorld(); - HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= proc_chance) { - world.playSoundFromEntity(null, attacker, SoundRegistry.ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_03.get(), - attacker.getSoundCategory(), 0.6f, 2f); - if (attacker.getRandom().nextInt(100) <= 50) { - if (attacker.getHealth() > 2) - attacker.setOnFireFor(3); - if (attacker.getHealth() < 4) - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 60, 3), attacker); - } else if (attacker.getRandom().nextInt(100) > 50) { - target.setOnFireFor(3); - } + if (attacker.getWorld().isClient()) return super.postHit(stack, target, attacker); + + int proc_chance = Config.uniqueEffects.moltenRoar.chance; + + ServerWorld world = (ServerWorld) attacker.getWorld(); + HelperMethods.playHitSounds(attacker, target); + if (attacker.getRandom().nextInt(100) <= proc_chance) { + world.playSoundFromEntity(null, attacker, SoundRegistry.ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_03.get(), + attacker.getSoundCategory(), 0.6f, 2f); + if (attacker.getRandom().nextInt(100) <= 50) { + if (attacker.getHealth() > 2) + attacker.setOnFireFor(3); + if (attacker.getHealth() < 4) + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 60, 3), attacker); + } else if (attacker.getRandom().nextInt(100) > 50) { + target.setOnFireFor(3); } } + return super.postHit(stack, target, attacker); } @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - if (!user.getWorld().isClient()) { - int amp = 0; - Box box = new Box(user.getX() + radius, user.getY() + radius, user.getZ() + radius, - user.getX() - radius, user.getY() - radius, user.getZ() - radius); - for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { - if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - amp++; - le.setVelocity((le.getX() - user.getX()) / knockbackStrength, 0.6, (le.getZ() - user.getZ()) / knockbackStrength); - le.setOnFireFor(3); - } + if (user.getWorld().isClient()) return super.use(world, user, hand); + + double radius = Config.uniqueEffects.moltenRoar.radius; + double knockbackStrength = Config.uniqueEffects.moltenRoar.knockbackStrength; + int abilityCooldown = Config.uniqueEffects.moltenRoar.cooldown; + + int amp = 0; + Box box = new Box(user.getX() + radius, user.getY() + radius, user.getZ() + radius, + user.getX() - radius, user.getY() - radius, user.getZ() - radius); + for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { + if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { + amp++; + le.setVelocity((le.getX() - user.getX()) / knockbackStrength, 0.6, (le.getZ() - user.getZ()) / knockbackStrength); + le.setOnFireFor(3); } - world.playSoundFromEntity(null, user, SoundRegistry.DARK_SWORD_ENCHANT.get(), - user.getSoundCategory(), 0.7f, 1.5f); - int duration = roar_timer_max * amp / 2; - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.ONSLAUGHT.get(), duration, 0), user); - user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration, 3), user); - user.getItemCooldownManager().set(this, abilityCooldown); - particlePassive = ParticleTypes.LARGE_SMOKE; - particleWalk = ParticleTypes.LAVA; - particleSprint = ParticleTypes.LAVA; } + world.playSoundFromEntity(null, user, SoundRegistry.DARK_SWORD_ENCHANT.get(), + user.getSoundCategory(), 0.7f, 1.5f); + int duration = Config.uniqueEffects.moltenRoar.duration * amp / 2; + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.ONSLAUGHT), duration, 0), user); + user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration, 3), user); + user.getItemCooldownManager().set(this, abilityCooldown); + + ItemStack stack = user.getStackInHand(hand); + stack.set(ComponentTypeRegistry.MOLTEN_PARTICLE.get(), new MoltenParticleComponent(ParticleTypes.LAVA, ParticleTypes.LAVA, ParticleTypes.LARGE_SMOKE)); + return super.use(world, user, hand); } @@ -98,52 +101,57 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, if (player.age % 40 == 0) { if (player.getHealth() < player.getMaxHealth() / 2 && player.getHealth() > player.getMaxHealth() / 3) { amp = 1; - particlePassive = ParticleTypes.LARGE_SMOKE; - particleWalk = ParticleTypes.FALLING_LAVA; - particleSprint = ParticleTypes.FALLING_LAVA; + stack.set(ComponentTypeRegistry.MOLTEN_PARTICLE.get(), new MoltenParticleComponent(ParticleTypes.FALLING_LAVA, ParticleTypes.FALLING_LAVA, ParticleTypes.LARGE_SMOKE)); } else if (player.getHealth() < player.getMaxHealth() / 3 && player.getHealth() > 2) { amp = 2; - particlePassive = ParticleTypes.LARGE_SMOKE; - particleWalk = ParticleTypes.FALLING_LAVA; - particleSprint = ParticleTypes.FALLING_LAVA; + stack.set(ComponentTypeRegistry.MOLTEN_PARTICLE.get(), new MoltenParticleComponent(ParticleTypes.FALLING_LAVA, ParticleTypes.FALLING_LAVA, ParticleTypes.LARGE_SMOKE)); } else if (player.getHealth() <= 2) { amp = 3; - particlePassive = ParticleTypes.LARGE_SMOKE; - particleWalk = ParticleTypes.LAVA; - particleSprint = ParticleTypes.LAVA; + stack.set(ComponentTypeRegistry.MOLTEN_PARTICLE.get(), new MoltenParticleComponent(ParticleTypes.LAVA, ParticleTypes.LAVA, ParticleTypes.LARGE_SMOKE)); } else { - particlePassive = ParticleTypes.SMOKE; - particleWalk = ParticleTypes.FALLING_LAVA; - particleSprint = ParticleTypes.FALLING_LAVA; + stack.set(ComponentTypeRegistry.MOLTEN_PARTICLE.get(), MoltenParticleComponent.DEFAULT); } player.addStatusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 40, amp), player); player.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, 40, amp - 1), player); } } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, particleWalk, particleSprint, particlePassive, true); + MoltenParticleComponent component = stack.getOrDefault(ComponentTypeRegistry.MOLTEN_PARTICLE.get(), MoltenParticleComponent.DEFAULT); + HelperMethods.createFootfalls(entity, stack, world, component.walk(), component.sprint(), component.passive(), true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip7", roar_timer_max / 20).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.moltenedgesworditem.tooltip7").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.MOLTEN_EDGE::get)); + } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 320; + @ValidatedInt.Restrict(min = 0) + public int duration = 100; + @ValidatedFloat.Restrict(min = 0f) + public double knockbackStrength = 5f; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 5.0; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/PlagueSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/PlagueSwordItem.java index 87d2f869..2e07e88a 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/PlagueSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/PlagueSwordItem.java @@ -1,36 +1,37 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class PlagueSwordItem extends UniqueSwordItem { - public PlagueSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public PlagueSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { - int phitchance = (int) Config.getFloat("plagueChance", "UniqueEffects", ConfigDefaultValues.plagueChance); + int hitChance = Config.uniqueEffects.plague.chance; HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= phitchance) { + if (attacker.getRandom().nextInt(100) <= hitChance) { //Convert Haste if (target.hasStatusEffect(StatusEffects.HASTE)) { @@ -109,23 +110,29 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SPORE_BLOSSOM_AIR, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SPORE_BLOSSOM_AIR, ParticleTypes.SPORE_BLOSSOM_AIR, ParticleTypes.FALLING_SPORE_BLOSSOM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.plaguesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.plaguesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.plaguesworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.plaguesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.plaguesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.plaguesworditem.tooltip3").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.TOXIC_LONGSWORD::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 55; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/RibboncleaverSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/RibboncleaverSwordItem.java index ce21f522..5dd6b9f9 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/RibboncleaverSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/RibboncleaverSwordItem.java @@ -1,40 +1,41 @@ package net.sweenus.simplyswords.item.custom; import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.BlockStateParticleEffect; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class RibboncleaverSwordItem extends UniqueSwordItem { - public RibboncleaverSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public RibboncleaverSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { @@ -47,8 +48,8 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int skillCooldown = (int) Config.getFloat("ribbonwrathCooldown", "UniqueEffects", ConfigDefaultValues.ribbonwrathCooldown); - int resilienceAmplifier = (int) Config.getFloat("ribbonwrathResilienceAmplifier", "UniqueEffects", ConfigDefaultValues.ribbonwrathResilienceAmplifier); + int skillCooldown = Config.uniqueEffects.ribbonwrath.cooldown; + int resilienceAmplifier = Config.uniqueEffects.ribbonwrath.resilienceAmplifier; world.playSound(null, user.getBlockPos(), SoundRegistry.ELEMENTAL_BOW_EARTH_SHOOT_IMPACT_03.get(), @@ -59,9 +60,9 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han user.setVelocity(user.getRotationVector().multiply(+1.7)); user.setVelocity(user.getVelocity().x, 0, user.getVelocity().z); // Prevent user flying to the heavens user.velocityModified = true; - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.RIBBONCLEAVE.get(), + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.RIBBONCLEAVE), 60, 0, false, false, true)); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.RESILIENCE.get(), + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.RESILIENCE), 15, resilienceAmplifier, false, false, true)); user.getItemCooldownManager().set(this, skillCooldown); @@ -70,10 +71,6 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - //HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.FALLING_OBSIDIAN_TEAR, - // ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); //Drag weapon particles if (entity.isOnGround() && Platform.isModLoaded("bettercombat") && HelperMethods.isWalking(entity) @@ -114,25 +111,36 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip10").setStyle(TEXT)); - - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ribboncleaversworditem.tooltip10").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.RIBBONCLEAVER::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 40; + @ValidatedDouble.Restrict(min = 0.0) + public double damageBonusPercent = 0.95; + @ValidatedInt.Restrict(min = 0) + public int resilienceAmplifier = 1; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/RighteousRelicSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/RighteousRelicSwordItem.java index 06495b3e..8151c942 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/RighteousRelicSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/RighteousRelicSwordItem.java @@ -1,6 +1,5 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,6 +7,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.text.Style; import net.minecraft.text.Text; @@ -15,25 +15,23 @@ import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class RighteousRelicSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - int abilityChance = (int) Config.getFloat("righteousStandardChance", "UniqueEffects", ConfigDefaultValues.righteousStandardChance); - public RighteousRelicSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public RighteousRelicSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); - if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= abilityChance && attacker instanceof PlayerEntity) { + if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= Config.uniqueEffects.righteousStandard.chance && attacker instanceof PlayerEntity) { attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), attacker.getSoundCategory(), 0.3f, 1.7f); attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 40, 0), attacker); @@ -48,24 +46,19 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.poweredrelicsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.poweredrelicsworditem.tooltip2").setStyle(Styles.TEXT)); - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/ShadowstingSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/ShadowstingSwordItem.java index 74951c35..ad38371a 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/ShadowstingSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/ShadowstingSwordItem.java @@ -1,8 +1,9 @@ package net.sweenus.simplyswords.item.custom; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -10,42 +11,39 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class ShadowstingSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - int skillCooldown = (int) Config.getFloat("shadowmistCooldown", "UniqueEffects", ConfigDefaultValues.shadowmistCooldown); - int abilityChance = (int) Config.getFloat("shadowmistChance", "UniqueEffects", ConfigDefaultValues.shadowmistChance); - int damageArmorMultiplier = (int) (Config.getFloat("shadowmistDamageMulti", "UniqueEffects", ConfigDefaultValues.shadowmistDamageMulti) * 2); - int blindDuration = (int) Config.getFloat("shadowmistBlindDuration", "UniqueEffects", ConfigDefaultValues.shadowmistBlindDuration); - int radius = (int) Config.getFloat("shadowmistRadius", "UniqueEffects", ConfigDefaultValues.shadowmistRadius); - - public ShadowstingSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + + public ShadowstingSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); if (!attacker.getWorld().isClient()) { - if (attacker.getRandom().nextInt(100) <= abilityChance && attacker instanceof PlayerEntity) { + if (attacker.getRandom().nextInt(100) <= Config.uniqueEffects.shadowmist.chance && attacker instanceof PlayerEntity) { attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), attacker.getSoundCategory(), 0.3f, 1.8f); - int extraDamage = (target.getArmor() * damageArmorMultiplier) / 2; + float extraDamage = (target.getArmor() * Config.uniqueEffects.shadowmist.damageMulti) / 2; target.damage(attacker.getDamageSources().indirectMagic(attacker, attacker), extraDamage); } } @@ -56,13 +54,14 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack public TypedActionResult use(World world, PlayerEntity user, Hand hand) { world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_SWORD_EARTH_ATTACK_01.get(), user.getSoundCategory(), 0.4f, 1.6f); - user.getItemCooldownManager().set(this.getDefaultStack().getItem(), skillCooldown); + user.getItemCooldownManager().set(this.getDefaultStack().getItem(), Config.uniqueEffects.shadowmist.cooldown); + int radius = Config.uniqueEffects.shadowmist.radius; Box box = new Box(user.getX() + radius, user.getY() + radius, user.getZ() + radius, user.getX() - radius, user.getY() - radius, user.getZ() - radius); for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - le.addStatusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, blindDuration, 3), user); + le.addStatusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, Config.uniqueEffects.shadowmist.blindDuration, 3), user); } } @@ -91,35 +90,48 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han BlockState currentStateHigh = world.getBlockState(user.getBlockPos().up(1).offset(user.getMovementDirection(), 5)); BlockState state = Blocks.AIR.getDefaultState(); if (currentStateLow == state && currentStateHigh == state) { - user.teleport(targetPositionX, targetPositionY, targetPositionZ); + user.teleport(targetPositionX, targetPositionY, targetPositionZ, false); } return super.use(world, user, hand); } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip5").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.shadowmistsworditem.tooltip5").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.SHADOWSTING::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 25; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 200; + @ValidatedFloat.Restrict(min = 0) + public float damageMulti = 0.8f; + @ValidatedInt.Restrict(min = 1) + public int radius = 4; + @ValidatedInt.Restrict(min = 0) + public int blindDuration = 60; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulPyreSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulPyreSwordItem.java index d52fd257..8fff3e4f 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulPyreSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulPyreSwordItem.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,37 +9,35 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.text.Style; +import net.minecraft.server.world.ServerWorld; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.RelocationComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class SoulPyreSwordItem extends UniqueSwordItem { - public SoulPyreSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class SoulPyreSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + public SoulPyreSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private int relocationTimer; - private static int stepMod = 0; - private final int relocationDuration = (int) Config.getFloat("soultetherDuration", "UniqueEffects", ConfigDefaultValues.soultetherDuration); - private boolean canRelocate; - private LivingEntity relocateTarget; - private double relocateX; - private double relocateY; - private double relocateZ; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { @@ -50,36 +49,33 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (!user.getWorld().isClient()) { - int range = (int) Config.getFloat("soultetherRange", "UniqueEffects", ConfigDefaultValues.soultetherRange); - int radius = (int) Config.getFloat("soultetherRadius", "UniqueEffects", ConfigDefaultValues.soultetherRadius); - int ignite_duration = (int) (Config.getFloat("soultetherIgniteDuration", "UniqueEffects", ConfigDefaultValues.soultetherIgniteDuration) / 20); - int resistance_duration = (int) Config.getFloat("soultetherResistanceDuration", "UniqueEffects", ConfigDefaultValues.soultetherResistanceDuration); + double range = Config.uniqueEffects.soultether.range; + double radius = Config.uniqueEffects.soultether.radius; + int ignite_duration = Config.uniqueEffects.soultether.igniteDuration / 20; + int resistance_duration = Config.uniqueEffects.soultether.resistanceDuration; + int relocationDuration = Config.uniqueEffects.soultether.duration; //Position swap target & player LivingEntity target = (LivingEntity) HelperMethods.getTargetedEntity(user, range); if (target != null && HelperMethods.checkFriendlyFire(target, user)) { - relocateX = user.getX(); - relocateY = user.getY(); - relocateZ = user.getZ(); - relocateTarget = target; - double rememberx = target.getX(); - double remembery = target.getY(); - double rememberz = target.getZ(); + ItemStack stack = user.getStackInHand(hand); + double rememberX = target.getX(); + double rememberY = target.getY(); + double rememberZ = target.getZ(); target.teleport(user.getX(), user.getY(), user.getZ(), true); - user.teleport(rememberx, remembery, rememberz, true); + user.teleport(rememberX, rememberY, rememberZ, true); world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_SWORD_SCIFI_ATTACK_01.get(), user.getSoundCategory(), 0.3f, 1f); user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, resistance_duration, 0), user); user.addStatusEffect(new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, resistance_duration, 0), user); user.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, relocationDuration, 3), user); - target.addStatusEffect(new StatusEffectInstance(EffectRegistry.FREEZE.get(), relocationDuration - 10, 0), user); - canRelocate = true; - relocationTimer = relocationDuration; + target.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.FREEZE), relocationDuration - 10, 0), user); + stack.set(ComponentTypeRegistry.RELOCATION.get(), new RelocationComponent(user.getX(), user.getY(), user.getZ(), target.getUuid(), relocationDuration, true)); //AOE ignite & pull - Box box = new Box(rememberx + radius, remembery + radius, rememberz + radius, - rememberx - radius, remembery - radius, rememberz - radius); + Box box = new Box(rememberX + radius, rememberY + radius, rememberZ + radius, + rememberX - radius, rememberY - radius, rememberZ - radius); for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - le.setVelocity((rememberx - le.getX()) / 4, (remembery - le.getY()) / 4, (rememberz - le.getZ()) / 4); + le.setVelocity((rememberX - le.getX()) / 4, (rememberY - le.getY()) / 4, (rememberZ - le.getZ()) / 4); le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 40, 3), user); world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_03.get(), le.getSoundCategory(), 0.1f, 3f); @@ -94,52 +90,68 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (!world.isClient && (entity instanceof PlayerEntity player) && canRelocate) { - relocationTimer--; - if (relocationTimer <= 0) { - if (relocateTarget != null) { - relocateTarget.teleport(player.getX(), player.getY(), player.getZ(), true); + if (!world.isClient && (entity instanceof PlayerEntity player)) { + RelocationComponent component = stack.apply(ComponentTypeRegistry.RELOCATION.get(), RelocationComponent.DEFAULT, RelocationComponent::tickDown); + if (component != null) { + if (component.ready()) { + Entity relocateTarget = ((ServerWorld) world).getEntity(component.relocateTarget()); + if (relocateTarget instanceof LivingEntity livingTarget) { + livingTarget.teleport(player.getX(), player.getY(), player.getZ(), true); + } + player.teleport(component.relocateX(), component.relocateY(), component.relocateZ(), true); + world.playSoundFromEntity(null, player, SoundRegistry.ELEMENTAL_SWORD_SCIFI_ATTACK_03.get(), + player.getSoundCategory(), 0.3f, 1f); + stack.set(ComponentTypeRegistry.RELOCATION.get(), null); + } else if (component.almostReady()) { + world.playSoundFromEntity(null, player, SoundRegistry.ELEMENTAL_BOW_RECHARGE.get(), + player.getSoundCategory(), 0.3f, 0.4f); } - player.teleport(relocateX, relocateY, relocateZ, true); - world.playSoundFromEntity(null, player, SoundRegistry.ELEMENTAL_SWORD_SCIFI_ATTACK_03.get(), - player.getSoundCategory(), 0.3f, 1f); - canRelocate = false; - } else if (relocationTimer == 40) { - world.playSoundFromEntity(null, player, SoundRegistry.ELEMENTAL_BOW_RECHARGE.get(), - player.getSoundCategory(), 0.3f, 0.4f); } } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SOUL_FIRE_FLAME, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SOUL_FIRE_FLAME, ParticleTypes.SOUL_FIRE_FLAME, ParticleTypes.MYCELIUM, true); - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SMALL_FLAME, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SMALL_FLAME, ParticleTypes.SMALL_FLAME, ParticleTypes.MYCELIUM, false); - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SMOKE, ParticleTypes.SMOKE, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SMOKE, ParticleTypes.SMOKE, ParticleTypes.MYCELIUM, false); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip1").setStyle(ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip1").setStyle(Styles.ABILITY)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip6").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip7", relocationDuration / 20).setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip9").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip7", Config.uniqueEffects.soultether.duration / 20).setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulpyresworditem.tooltip9").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.SOULPYRE::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int duration = 120; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 8.0; + @ValidatedDouble.Restrict(min = 1.0) + public double range = 32.0; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + @ValidatedInt.Restrict(min = 0) + public int igniteDuration = 120; + @ValidatedInt.Restrict(min = 0) + public int resistanceDuration = 60; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulkeeperSwordItem.java similarity index 66% rename from common/src/main/java/net/sweenus/simplyswords/item/custom/SoulSwordItem.java rename to common/src/main/java/net/sweenus/simplyswords/item/custom/SoulkeeperSwordItem.java index 9f5ce336..0bc40830 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulkeeperSwordItem.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,50 +9,52 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class SoulSwordItem extends UniqueSwordItem { - public SoulSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class SoulkeeperSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + public SoulkeeperSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { - int fhitchance = (int) Config.getFloat("soulMeldChance", "UniqueEffects", ConfigDefaultValues.soulMeldChance); - int fduration = (int) Config.getFloat("soulMeldDuration", "UniqueEffects", ConfigDefaultValues.soulMeldDuration); + int hitChance = Config.uniqueEffects.soulkeeper.chance; + int duration = Config.uniqueEffects.soulkeeper.duration; HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= fhitchance) { + if (attacker.getRandom().nextInt(100) <= hitChance) { //world.playSoundFromEntity(null, target, SoundRegistry.MAGIC_BOW_CHARGE_SHORT_VERSION.get(), SoundCategory.PLAYERS, 0.3f, 1.2f); if (attacker.hasStatusEffect(StatusEffects.MINING_FATIGUE) && attacker.hasStatusEffect(StatusEffects.RESISTANCE)) { int a = (attacker.getStatusEffect(StatusEffects.MINING_FATIGUE).getAmplifier() + 1); if ((attacker.getStatusEffect(StatusEffects.MINING_FATIGUE).getAmplifier() <= 2)) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, fduration, a), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, fduration, a), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, duration, a), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration, a), attacker); } } else { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, fduration, 1), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, fduration, 1), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.MINING_FATIGUE, duration, 1), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration, 1), attacker); } } } @@ -61,8 +64,8 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (!user.getWorld().isClient()) { - int hradius = (int) Config.getFloat("soulMeldRadius", "UniqueEffects", ConfigDefaultValues.soulMeldRadius); - int vradius = (int) (Config.getFloat("soulMeldRadius", "UniqueEffects", ConfigDefaultValues.soulMeldRadius) / 2); + double hradius = Config.uniqueEffects.soulkeeper.radius; + double vradius = Config.uniqueEffects.soulkeeper.radius; double x = user.getX(); double y = user.getY(); double z = user.getZ(); @@ -91,29 +94,37 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SOUL, ParticleTypes.SOUL, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SOUL, ParticleTypes.SOUL, ParticleTypes.SPORE_BLOSSOM_AIR, false); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip1").setStyle(Styles.NETHERFUSED)); + tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.soulsworditem.tooltip6").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.SOULKEEPER::get)); + } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 75; + @ValidatedInt.Restrict(min = 0) + public int duration = 250; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 5.0; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/RendSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulrenderSwordItem.java similarity index 60% rename from common/src/main/java/net/sweenus/simplyswords/item/custom/RendSwordItem.java rename to common/src/main/java/net/sweenus/simplyswords/item/custom/SoulrenderSwordItem.java index d53a0618..a025144b 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/RendSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/SoulrenderSwordItem.java @@ -1,6 +1,9 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,43 +11,41 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class RendSwordItem extends UniqueSwordItem { - public RendSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class SoulrenderSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + public SoulrenderSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - float abilityDamage = Config.getFloat("soulrendDamageMulti", "UniqueEffects", ConfigDefaultValues.soulrendDamageMulti); - float spellScalingModifier = Config.getFloat("soulrendDamageSpellScaling", "UniqueEffects", ConfigDefaultValues.soulrendDamageSpellScaling); - - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { ServerWorld world = (ServerWorld) attacker.getWorld(); - int fhitchance = (int) Config.getFloat("soulrendChance", "UniqueEffects", ConfigDefaultValues.soulrendChance); - int fduration = (int) Config.getFloat("soulrendDuration", "UniqueEffects", ConfigDefaultValues.soulrendDuration); - int maxstacks = (int) Config.getFloat("soulrendMaxStacks", "UniqueEffects", ConfigDefaultValues.soulrendMaxStacks); + int hitChance = Config.uniqueEffects.soulRend.chance; + int duration = Config.uniqueEffects.soulRend.duration; + int maxStacks = Config.uniqueEffects.soulRend.maxStacks; - if (attacker.getRandom().nextInt(100) <= fhitchance) { + if (attacker.getRandom().nextInt(100) <= hitChance) { int choose_sound = (int) (Math.random() * 30); if (choose_sound <= 10) @@ -61,20 +62,20 @@ else if (choose_sound <= 30) int a = (target.getStatusEffect(StatusEffects.WEAKNESS).getAmplifier() + 1); if ((target.getStatusEffect(StatusEffects.WEAKNESS).getAmplifier() <= 0)) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, fduration, a), attacker); + target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, duration, a), attacker); } } else { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, fduration, 0), attacker); + target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, duration, 0), attacker); } if (target.hasStatusEffect(StatusEffects.SLOWNESS)) { int a = (target.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() + 1); - if ((target.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() < maxstacks)) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, fduration, a), attacker); + if ((target.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() < maxStacks)) { + target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, a), attacker); } } else { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, fduration, 0), attacker); + target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 0), attacker); } } } @@ -84,11 +85,10 @@ else if (choose_sound <= 30) @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (!user.getWorld().isClient()) { - float heal_amount = Config.getFloat("soulrendHealMulti", "UniqueEffects", ConfigDefaultValues.soulrendHealMulti); + float heal_amount = Config.uniqueEffects.soulRend.healMulti; int healamp = 0; - boolean cantrigger = false; - int hradius = (int) Config.getFloat("soulrendRadius", "UniqueEffects", ConfigDefaultValues.soulrendRadius); - int vradius = (int) (Config.getFloat("soulrendRadius", "UniqueEffects", ConfigDefaultValues.soulrendRadius) / 2); + double hradius = Config.uniqueEffects.soulRend.radius; + double vradius = Config.uniqueEffects.soulRend.radius / 2.0; double x = user.getX(); double y = user.getY(); double z = user.getZ(); @@ -100,21 +100,22 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han && le.hasStatusEffect(StatusEffects.WEAKNESS) && HelperMethods.checkFriendlyFire(le, user)) { healamp += (le.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier()); - cantrigger = true; - le.damage(user.getDamageSources().indirectMagic(user, user), le.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() * abilityDamage); + float scaling = HelperMethods.commonSpellAttributeScaling(Config.uniqueEffects.soulRend.spellScaling, entity, "soul"); + float multiplier = scaling > 0f ? scaling : Config.uniqueEffects.soulRend.damageMulti; + le.damage(user.getDamageSources().indirectMagic(user, user), le.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() * multiplier); le.removeStatusEffect(StatusEffects.WEAKNESS); le.removeStatusEffect(StatusEffects.SLOWNESS); world.playSoundFromEntity(null, entity, SoundRegistry.DARK_SWORD_SPELL.get(), entity.getSoundCategory(), 0.1f, 2f); } } - if (cantrigger) { - healamp = (int) (healamp * heal_amount); + if (healamp > 0) { + float heal = ((float)healamp * heal_amount); - if (healamp < 1) healamp = 1; - else if (healamp > 6) healamp = 6; + if (heal < 1f) heal = 1f; + else if (heal > 6f) heal = 6f; - user.heal(healamp); + user.heal(heal); } } return super.use(world, user, hand); @@ -122,36 +123,49 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "soul") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "soul"); - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.SOUL, ParticleTypes.SCULK_SOUL, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.SOUL, ParticleTypes.SCULK_SOUL, ParticleTypes.WARPED_SPORE, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip6").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.rendsworditem.tooltip6").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleSoul")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.SOULRENDER::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 85; + @ValidatedInt.Restrict(min = 0) + public int duration = 500; + @ValidatedInt.Restrict(min = 1) + public int maxStacks = 8; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 10.0; + + @ValidatedFloat.Restrict(min = 0f) + public float healMulti = 0.5f; + @ValidatedFloat.Restrict(min = 0f) + public float damageMulti = 3f; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 0.4f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/StarsEdgeSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/StarsEdgeSwordItem.java index f74d0795..c4e95792 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/StarsEdgeSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/StarsEdgeSwordItem.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; @@ -9,36 +10,37 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class StarsEdgeSwordItem extends UniqueSwordItem { - public StarsEdgeSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public StarsEdgeSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { - float skillDamageModifier = Config.getFloat("celestialSurgeDamageModifier", "UniqueEffects", ConfigDefaultValues.celestialSurgeDamageModifier); - float skillLifestealModifier = Config.getFloat("celestialSurgeLifestealModifier", "UniqueEffects", ConfigDefaultValues.celestialSurgeLifestealModifier); + float skillDamageModifier = Config.uniqueEffects.celestialSurge.damageModifier; + float skillLifestealModifier = Config.uniqueEffects.celestialSurge.lifestealModifier; ServerWorld world = (ServerWorld) attacker.getWorld(); DamageSource damageSource = world.getDamageSources().generic(); - float abilityDamage = getAttackDamage(); + float abilityDamage = (float) HelperMethods.getEntityAttackDamage(attacker); if (attacker instanceof PlayerEntity player) damageSource = attacker.getDamageSources().playerAttack(player); @@ -58,9 +60,9 @@ else if (world.isNight()) { @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int skillCooldown = (int) Config.getFloat("celestialSurgeCooldown", "UniqueEffects", ConfigDefaultValues.celestialSurgeCooldown); - int skillDuration = (int) Config.getFloat("celestialSurgeDuration", "UniqueEffects", ConfigDefaultValues.celestialSurgeDuration); - int skillStacks = (int) Config.getFloat("celestialSurgeStacks", "UniqueEffects", ConfigDefaultValues.celestialSurgeStacks); + int skillCooldown = Config.uniqueEffects.celestialSurge.cooldown; + int skillDuration = Config.uniqueEffects.celestialSurge.duration; + int skillStacks = Config.uniqueEffects.celestialSurge.stacks; if (!user.hasStatusEffect(StatusEffects.SPEED)) { user.swingHand(hand); @@ -91,34 +93,49 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.FALLING_OBSIDIAN_TEAR, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.FALLING_OBSIDIAN_TEAR, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - float skillDamageModifier = Config.getFloat("celestialSurgeDamageModifier", "UniqueEffects", ConfigDefaultValues.celestialSurgeDamageModifier); + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { + + float skillDamageModifier = Config.uniqueEffects.celestialSurge.damageModifier; tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip3", getAttackDamage() * skillDamageModifier).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip3", skillDamageModifier).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip5").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip5").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip8").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.starsedgesworditem.tooltip8").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.STARS_EDGE::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 120; + @ValidatedInt.Restrict(min = 0) + public int duration = 120; + @ValidatedFloat.Restrict(min = 0f) + public float damageModifier = 0.40f; + @ValidatedFloat.Restrict(min = 0f) + public float lifestealModifier = 0.10f; + @ValidatedInt.Restrict(min = 1) + public int stacks = 6; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/StealSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/StealSwordItem.java index ae86d9b5..0b17cc5e 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/StealSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/StealSwordItem.java @@ -1,7 +1,10 @@ package net.sweenus.simplyswords.item.custom; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -9,10 +12,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -20,35 +23,33 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class StealSwordItem extends UniqueSwordItem { - public StealSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public StealSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - float abilityDamage = 5; - float spellScalingModifier = Config.getFloat("stealSpellScaling", "UniqueEffects", ConfigDefaultValues.stealSpellScaling); - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { ServerWorld sworld = (ServerWorld) attacker.getWorld(); - int fhitchance = (int) Config.getFloat("stealChance", "UniqueEffects", ConfigDefaultValues.stealChance); - int fduration = (int) Config.getFloat("stealDuration", "UniqueEffects", ConfigDefaultValues.stealDuration); + int hitChance = Config.uniqueEffects.steal.chance; + int duration = Config.uniqueEffects.steal.duration; attacker.setVelocity(attacker.getRotationVector().multiply(+1)); attacker.velocityModified = true; HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= fhitchance) { + if (attacker.getRandom().nextInt(100) <= hitChance) { int choose_sound = (int) (Math.random() * 30); if (choose_sound <= 10) { sworld.playSoundFromEntity(null, target, SoundRegistry.MAGIC_SWORD_ATTACK_WITH_BLOOD_01.get(), @@ -61,9 +62,9 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack target.getSoundCategory(), 0.5f, 2f); } - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, fduration, 2), attacker); - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, fduration, 1), attacker); - target.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, fduration, 1), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, 2), attacker); + target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 1), attacker); + target.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, duration, 1), attacker); } } return super.postHit(stack, target, attacker); @@ -72,8 +73,8 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (!user.getWorld().isClient()) { - int sradius = (int) Config.getFloat("stealRadius", "UniqueEffects", ConfigDefaultValues.stealRadius); - int vradius = (int) (Config.getFloat("stealRadius", "UniqueEffects", ConfigDefaultValues.stealRadius) / 2); + double sradius = Config.uniqueEffects.steal.radius; + double vradius = Config.uniqueEffects.steal.radius / 2.0; double x = user.getX(); double y = user.getY(); @@ -83,15 +84,16 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han x - sradius, y - vradius, z - sradius); for (Entity entity : sworld.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - int iduration = (int) Config.getFloat("stealInvisDuration", "UniqueEffects", ConfigDefaultValues.stealInvisDuration); - int bduration = (int) Config.getFloat("stealBlindDuration", "UniqueEffects", ConfigDefaultValues.stealBlindDuration); + int iduration = Config.uniqueEffects.steal.invisDuration; + int bduration = Config.uniqueEffects.steal.blindDuration; if (le.hasStatusEffect(StatusEffects.SLOWNESS) && le.hasStatusEffect(StatusEffects.GLOWING)) { if (le.distanceTo(user) > 5) { //can we check target here? le.addStatusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, bduration, 1), user); - user.teleport(le.getX(), le.getY(), le.getZ()); + user.teleport(le.getX(), le.getY(), le.getZ(), false); sworld.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_SWORD_SCIFI_ATTACK_03.get(), le.getSoundCategory(), 0.3f, 1.5f); + float abilityDamage = HelperMethods.spellScaledDamage("soul", user, Config.uniqueEffects.steal.spellScaling, 5); le.damage(user.getDamageSources().freeze(), abilityDamage); } else { user.addStatusEffect(new StatusEffectInstance(StatusEffects.INVISIBILITY, iduration, 1), user); @@ -111,13 +113,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "soul") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "soul"); - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.NAUTILUS, ParticleTypes.NAUTILUS, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.NAUTILUS, ParticleTypes.NAUTILUS, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @@ -127,29 +123,46 @@ public boolean postMine(ItemStack stack, World world, BlockState state, BlockPos } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip7").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip7").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip10").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stealsworditem.tooltip10").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleSoul")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.SOULSTEALER::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 25; + @ValidatedInt.Restrict(min = 0) + public int duration = 400; + @ValidatedDouble.Restrict(min = 1.0) + public double radius = 30.0; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 2.6f; + + @ValidatedInt.Restrict(min = 0) + public int blindDuration = 200; + @ValidatedInt.Restrict(min = 0) + public int invisDuration = 120; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/StormSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/StormSwordItem.java index 3bbdba14..ce839ca5 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/StormSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/StormSwordItem.java @@ -1,6 +1,6 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,38 +8,39 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; 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; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.AbilityMethods; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class StormSwordItem extends UniqueSwordItem { - public StormSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public StormSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { HelperMethods.playHitSounds(attacker, target); - int phitchance = (int) Config.getFloat("stormChance", "UniqueEffects", ConfigDefaultValues.stormChance); + int hitChance = Config.uniqueEffects.storm.chance; - if (attacker.getRandom().nextInt(100) <= phitchance) { - target.addStatusEffect(new StatusEffectInstance(EffectRegistry.STORM.get(), 2, 1), attacker); + if (attacker.getRandom().nextInt(100) <= hitChance) { + target.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.STORM), 2, 1), attacker); } } return super.postHit(stack, target, attacker); @@ -53,7 +54,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han } user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, 20, 5), user); user.setCurrentHand(hand); - int cooldown = (int) Config.getFloat("stormCooldown", "UniqueEffects", ConfigDefaultValues.stormCooldown); + int cooldown = Config.uniqueEffects.storm.cooldown; user.getItemCooldownManager().set(this, cooldown); return TypedActionResult.consume(itemStack); } @@ -61,15 +62,15 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (!world.isClient) { - int radius = (int) Config.getFloat("stormRadius", "UniqueEffects", ConfigDefaultValues.stormRadius); - int cooldown = (int) Config.getFloat("stormCooldown", "UniqueEffects", ConfigDefaultValues.stormCooldown); + int radius = Config.uniqueEffects.storm.radius; + int cooldown = Config.uniqueEffects.storm.cooldown; AbilityMethods.tickAbilityStorm(stack, world, user, remainingUseTicks, cooldown, radius); } } @Override - public int getMaxUseTime(ItemStack stack) { - return (int) Config.getFloat("stormDuration", "UniqueEffects", ConfigDefaultValues.stormDuration); + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + return Config.uniqueEffects.storm.duration; } @Override @@ -79,28 +80,41 @@ public UseAction getUseAction(ItemStack stack) { @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.FIREWORK, ParticleTypes.FIREWORK, ParticleTypes.ELECTRIC_SPARK, false); + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.FIREWORK, ParticleTypes.FIREWORK, ParticleTypes.ELECTRIC_SPARK, false); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormsworditem.tooltip6").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.MJOLNIR::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 700; + @ValidatedInt.Restrict(min = 0) + public int duration = 200; + @ValidatedInt.Restrict(min = 1) + public int frequency = 10; + @ValidatedInt.Restrict(min = 1) + public int radius = 10; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/StormbringerSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/StormbringerSwordItem.java index 2941c783..b3250728 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/StormbringerSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/StormbringerSwordItem.java @@ -1,6 +1,8 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,9 +10,9 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; @@ -18,28 +20,26 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.item.component.ParryComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class StormbringerSwordItem extends UniqueSwordItem { - private static int stepMod = 0; public static boolean scalesWithSpellPower; int radius = 3; - int ability_timer_max = (int) Config.getFloat("shockDeflectBlockDuration", "UniqueEffects", ConfigDefaultValues.shockDeflectBlockDuration); - int skillCooldown = (int) Config.getFloat("shockDeflectCooldown", "UniqueEffects", ConfigDefaultValues.shockDeflectCooldown); - int perfectParryWindow = (int) Config.getFloat("shockDeflectParryDuration", "UniqueEffects", ConfigDefaultValues.shockDeflectParryDuration); - float abilityDamage = Config.getFloat("shockDeflectDamage", "UniqueEffects", ConfigDefaultValues.shockDeflectDamage); - float spellScalingModifier = Config.getFloat("shockDeflectSpellScaling", "UniqueEffects", ConfigDefaultValues.shockDeflectSpellScaling); - boolean parrySuccess; int parrySuccession; - public StormbringerSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public StormbringerSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override @@ -54,7 +54,9 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han if (itemStack.getDamage() >= itemStack.getMaxDamage() - 1) { return TypedActionResult.fail(itemStack); } - world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_PARRY_02.get(), user.getSoundCategory(), 0.8f, (float) (0.8f * (parrySuccession * 0.1))); + int ability_timer_max = Config.uniqueEffects.shockDeflect.blockDuration; + ParryComponent parryComponent = itemStack.getOrDefault(ComponentTypeRegistry.PARRY.get(), ParryComponent.DEFAULT); + world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_PARRY_02.get(), user.getSoundCategory(), 0.8f, (float) (0.8f * (parryComponent.parrySuccession() * 0.1))); user.addStatusEffect(new StatusEffectInstance(StatusEffects.ABSORPTION, ability_timer_max, 2), user); user.setCurrentHand(hand); return TypedActionResult.consume(itemStack); @@ -72,13 +74,12 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai //Parry attack if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - if (le.handSwinging && remainingUseTicks > getMaxUseTime(stack) - perfectParryWindow) { - parrySuccess = true; - if (parrySuccession < 20) parrySuccession += 1; + if (le.handSwinging && remainingUseTicks > getMaxUseTime(stack, user) - Config.uniqueEffects.shockDeflect.parryDuration) { + ParryComponent parryComponent = stack.apply(ComponentTypeRegistry.PARRY.get(), ParryComponent.DEFAULT, ParryComponent::success); user.stopUsingItem(); le.handSwinging = false; world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_PARRY_01.get(), - user.getSoundCategory(), 1f, (float) (0.8f * (parrySuccession * 0.1))); + user.getSoundCategory(), 1f, (float) (0.8f * ((parryComponent != null ? parryComponent.parrySuccession() : 0) * 0.1))); } } } @@ -88,7 +89,9 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai @Override public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { if (!world.isClient) { - if (parrySuccess) { + int skillCooldown = Config.uniqueEffects.shockDeflect.cooldown; + ParryComponent parryComponent = stack.getOrDefault(ComponentTypeRegistry.PARRY.get(), ParryComponent.DEFAULT); + if (parryComponent.parried()) { //Damage Box box = new Box(user.getX() + radius, user.getY() + radius, user.getZ() + radius, user.getX() - radius, user.getY() - radius, user.getZ() - radius); @@ -97,7 +100,8 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int //damage & knockback if ((entities instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { float choose = (float) (Math.random() * 1); - le.damage(user.getDamageSources().indirectMagic(user, user), abilityDamage + parrySuccession); + float abilityDamage = HelperMethods.spellScaledDamage("lightning", user, Config.uniqueEffects.shockDeflect.spellScaling, Config.uniqueEffects.shockDeflect.damage); + le.damage(user.getDamageSources().indirectMagic(user, user), abilityDamage + parryComponent.parrySuccession()); world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_POISON_ATTACK_01.get(), le.getSoundCategory(), 0.3f, choose); le.setVelocity(le.getX() - user.getX(), 0.1, le.getZ() - user.getZ()); @@ -109,22 +113,21 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int } } world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_THUNDER_SHOOT_IMPACT_01.get(), - user.getSoundCategory(), (float) (0.2f * (parrySuccession * 0.04)), 0.8f); - if (user instanceof PlayerEntity player) player.getItemCooldownManager().set(stack.getItem(), (skillCooldown / 2) + (parrySuccession * 2)); - } - if (!parrySuccess) { + user.getSoundCategory(), (float) (0.2f * (parryComponent.parrySuccession() * 0.04)), 0.8f); + if (user instanceof PlayerEntity player) player.getItemCooldownManager().set(stack.getItem(), (skillCooldown / 2) + (parryComponent.parrySuccession() * 2)); + stack.set(ComponentTypeRegistry.PARRY.get(), parryComponent.resetParry()); + } else { if (user instanceof PlayerEntity player) { player.getItemCooldownManager().set(stack.getItem(), skillCooldown); } - parrySuccession = 0; + stack.set(ComponentTypeRegistry.PARRY.get(), parryComponent.resetFull()); } - parrySuccess = false; } } @Override - public int getMaxUseTime(ItemStack stack) { - return ability_timer_max; + public int getMaxUseTime(ItemStack stack, LivingEntity user) { + return Config.uniqueEffects.shockDeflect.cooldown; } @Override @@ -134,43 +137,53 @@ public UseAction getUseAction(ItemStack stack) { @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "lightning") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "lightning"); - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip1").setStyle(ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip1").setStyle(Styles.ABILITY)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip9").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip9").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip10").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip11").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip10").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormbringersworditem.tooltip11").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleLightning")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.STORMBRINGER::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 90; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 12f; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 2.3f; + + @ValidatedInt.Restrict(min = 0) + public int blockDuration = 35; + @ValidatedInt.Restrict(min = 0) + public int parryDuration = 10; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/StormsEdgeSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/StormsEdgeSwordItem.java index 10514a7a..57a278e6 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/StormsEdgeSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/StormsEdgeSwordItem.java @@ -1,6 +1,6 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -9,36 +9,38 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; 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; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.AbilityMethods; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class StormsEdgeSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - int radius = 1; - int ability_timer_max = 13; - int skillCooldown = (int) Config.getFloat("stormJoltCooldown", "UniqueEffects", ConfigDefaultValues.stormJoltCooldown); - int chargeChance = (int) Config.getFloat("stormJoltChance", "UniqueEffects", ConfigDefaultValues.stormJoltChance); - - public StormsEdgeSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + + public StormsEdgeSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } + private static final int radius = 1; + private static final int ability_timer_max = 13; + @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); + int chargeChance = Config.uniqueEffects.stormJolt.chance; if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= chargeChance && (attacker instanceof PlayerEntity player) && player.getItemCooldownManager().getCooldownProgress(this, 1f) > 0) { player.getItemCooldownManager().set(this, 0); @@ -65,6 +67,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (!world.isClient && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { + int skillCooldown = Config.uniqueEffects.stormJolt.cooldown; AbilityMethods.tickAbilityStormJolt(stack, world, user, remainingUseTicks, skillCooldown, radius); } } @@ -80,7 +83,7 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int } @Override - public int getMaxUseTime(ItemStack stack) { + public int getMaxUseTime(ItemStack stack, LivingEntity user) { return ability_timer_max; } @@ -91,27 +94,34 @@ public UseAction getUseAction(ItemStack stack) { @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip5").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stormsedgesworditem.tooltip5").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.STORMS_EDGE::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 100; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/SunfireSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/SunfireSwordItem.java index 44883cb9..7c468039 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/SunfireSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/SunfireSwordItem.java @@ -1,8 +1,10 @@ package net.sweenus.simplyswords.item.custom; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SpawnReason; @@ -11,37 +13,36 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.entity.BattleStandardEntity; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EntityRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class SunfireSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - int skillCooldown = (int) Config.getFloat("righteousStandardCooldown", "UniqueEffects", ConfigDefaultValues.righteousStandardCooldown); - int abilityChance = (int) Config.getFloat("righteousStandardChance", "UniqueEffects", ConfigDefaultValues.righteousStandardChance); - public SunfireSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public SunfireSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); - if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= abilityChance) { + if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= Config.uniqueEffects.righteousStandard.chance) { attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), attacker.getSoundCategory(), 0.3f, 1.7f); attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 40, 1), attacker); @@ -69,7 +70,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han banner.standardType = "sunfire"; banner.setCustomName(Text.translatable("entity.simplyswords.battlestandard.name", user.getName())); } - user.getItemCooldownManager().set(this.getDefaultStack().getItem(), skillCooldown); + user.getItemCooldownManager().set(this.getDefaultStack().getItem(), Config.uniqueEffects.righteousStandard.cooldown); } } return super.use(world, user, hand); @@ -77,36 +78,46 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(2, entity, "fire") > 0) { - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip6").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.sunfiresworditem.tooltip6").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFire")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleHealing")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.SUNFIRE::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 700; + @ValidatedFloat.Restrict(min = 0) + public float damage = 3f; + @ValidatedFloat.Restrict(min = 0) + public float spellScaling = 1.1f; + @ValidatedFloat.Restrict(min = 0) + public float spellScalingHeal = 1.3f; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/TaintedRelicSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/TaintedRelicSwordItem.java index 04a739f4..d09b0f5d 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/TaintedRelicSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/TaintedRelicSwordItem.java @@ -1,6 +1,5 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,33 +7,30 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class TaintedRelicSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - int abilityChance = (int) Config.getFloat("abyssalStandardChance", "UniqueEffects", ConfigDefaultValues.abyssalStandardChance); - - public TaintedRelicSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public TaintedRelicSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); - if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= abilityChance && attacker instanceof PlayerEntity) { + if (!attacker.getWorld().isClient() && attacker.getRandom().nextInt(100) <= Config.uniqueEffects.abyssalStandard.chance && attacker instanceof PlayerEntity) { attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), attacker.getSoundCategory(), 0.3f, 1.7f); target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, 160, 0), attacker); @@ -49,24 +45,19 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.harbingersworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.poweredrelicsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.poweredrelicsworditem.tooltip2").setStyle(Styles.TEXT)); - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/TempestSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/TempestSwordItem.java index 1f81e315..326d2f6b 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/TempestSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/TempestSwordItem.java @@ -1,6 +1,9 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import dev.architectury.registry.registries.RegistrySupplier; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffect; @@ -8,46 +11,47 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvent; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.ArrayList; import java.util.List; public class TempestSwordItem extends UniqueSwordItem { - public TempestSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public TempestSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { - int vortexMaxStacks = (int) Config.getFloat("vortexMaxStacks", "UniqueEffects", ConfigDefaultValues.vortexMaxStacks); + int vortexMaxStacks = Config.uniqueEffects.vortex.maxStacks; ServerWorld serverWorld = (ServerWorld) attacker.getWorld(); HelperMethods.playHitSounds(attacker, target); SoundEvent soundSelect; ParticleEffect particleSelect; - StatusEffect statusSelect; + RegistryEntry statusSelect; List sounds = new ArrayList<>(); sounds.add(SoundRegistry.SPELL_FIRE.get()); @@ -61,11 +65,11 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack particles.add(ParticleTypes.SMOKE); particles.add(ParticleTypes.CLOUD); - List status = new ArrayList<>(); - status.add(EffectRegistry.FIRE_VORTEX.get()); - status.add(EffectRegistry.FROST_VORTEX.get()); - status.add(EffectRegistry.FIRE_VORTEX.get()); - status.add(EffectRegistry.FROST_VORTEX.get()); + List> status = new ArrayList<>(); + status.add(EffectRegistry.getReference(EffectRegistry.FIRE_VORTEX)); + status.add(EffectRegistry.getReference(EffectRegistry.FROST_VORTEX)); + status.add(EffectRegistry.getReference(EffectRegistry.FIRE_VORTEX)); + status.add(EffectRegistry.getReference(EffectRegistry.FROST_VORTEX)); int random = attacker.getRandom().nextInt(3); soundSelect = sounds.get(random); @@ -82,7 +86,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack target, statusSelect, 500, 1, vortexMaxStacks); effect.setSourceEntity(attacker); - effect.setAdditionalData((int) getAttackDamage() / 3); + effect.setAdditionalData((int) HelperMethods.getEntityAttackDamage(attacker) / 3); target.addStatusEffect(effect); } @@ -93,18 +97,17 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (!user.getWorld().isClient() && world instanceof ServerWorld serverWorld) { - int vortexMaxSize = (int) Config.getFloat("vortexMaxSize", "UniqueEffects", ConfigDefaultValues.vortexMaxSize); - int vortexDuration = (int) Config.getFloat("vortexDuration", "UniqueEffects", ConfigDefaultValues.vortexDuration); - int vortexSpellScaling = (int) Config.getFloat("vortexSpellScaling", "UniqueEffects", ConfigDefaultValues.vortexSpellScaling); + int vortexMaxSize = Config.uniqueEffects.vortex.maxSize; + int vortexDuration = Config.uniqueEffects.vortex.duration; int skillCooldown = 200; Box box = HelperMethods.createBox(user, 15); boolean soundHasPlayed = false; for (Entity entity : serverWorld.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - if (le.hasStatusEffect(EffectRegistry.FIRE_VORTEX.get()) && le.hasStatusEffect(EffectRegistry.FROST_VORTEX.get())) { - StatusEffectInstance frostVortex = le.getStatusEffect(EffectRegistry.FROST_VORTEX.get()); - StatusEffectInstance fireVortex = le.getStatusEffect(EffectRegistry.FIRE_VORTEX.get()); + if (le.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.FIRE_VORTEX)) && le.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.FROST_VORTEX))) { + StatusEffectInstance frostVortex = le.getStatusEffect(EffectRegistry.getReference(EffectRegistry.FROST_VORTEX)); + StatusEffectInstance fireVortex = le.getStatusEffect(EffectRegistry.getReference(EffectRegistry.FIRE_VORTEX)); int totalAmplifier = 0; if (fireVortex != null && frostVortex != null) totalAmplifier = fireVortex.getAmplifier() + frostVortex.getAmplifier(); @@ -117,11 +120,11 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han soundHasPlayed = true; } - SimplySwordsStatusEffectInstance status = HelperMethods.incrementSimplySwordsStatusEffect(user, EffectRegistry.ELEMENTAL_VORTEX.get(), vortexDuration, totalAmplifier, vortexMaxSize); + SimplySwordsStatusEffectInstance status = HelperMethods.incrementSimplySwordsStatusEffect(user, EffectRegistry.getReference(EffectRegistry.ELEMENTAL_VORTEX), vortexDuration, totalAmplifier, vortexMaxSize); status.setAdditionalData(Math.max(1, totalAmplifier)); status.setSourceEntity(user); - le.removeStatusEffect(EffectRegistry.FIRE_VORTEX.get()); - le.removeStatusEffect(EffectRegistry.FROST_VORTEX.get()); + le.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.FIRE_VORTEX)); + le.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.FROST_VORTEX)); user.getItemCooldownManager().set(this, skillCooldown); } } @@ -134,45 +137,52 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(0.5f, entity, "frost") > 0 - || HelperMethods.commonSpellAttributeScaling(0.5f, entity, "fire") > 0) { - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.BUBBLE, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.BUBBLE, ParticleTypes.BUBBLE_COLUMN_UP, ParticleTypes.BUBBLE_POP, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip5").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip5").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip6").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip7").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip9").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip10").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip11").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip7").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip9").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip10").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.tempestsworditem.tooltip11").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFrost")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleFire")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.TEMPEST::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int duration = 1200; + @ValidatedInt.Restrict(min = 1) + public int maxSize = 30; + @ValidatedInt.Restrict(min = 1) + public int maxStacks = 10; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 0.3f; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/ThunderbrandSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/ThunderbrandSwordItem.java index bc8c36fe..bc3764f2 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/ThunderbrandSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/ThunderbrandSwordItem.java @@ -1,6 +1,8 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import dev.architectury.platform.Platform; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -9,40 +11,39 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; 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; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.AbilityMethods; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class ThunderbrandSwordItem extends UniqueSwordItem { - public ThunderbrandSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class ThunderbrandSwordItem extends UniqueSwordItem implements TwoHandedWeapon { + + public ThunderbrandSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - public static boolean scalesWithSpellPower; - int radius = (int) Config.getFloat("thunderBlitzRadius", "UniqueEffects", ConfigDefaultValues.thunderBlitzRadius); - float abilityDamage = Config.getFloat("thunderBlitzDamage", "UniqueEffects", ConfigDefaultValues.thunderBlitzDamage); - int ability_timer_max = 50; - int skillCooldown = (int) Config.getFloat("thunderBlitzCooldown", "UniqueEffects", ConfigDefaultValues.thunderBlitzCooldown); - int chargeChance = (int) Config.getFloat("thunderBlitzChance", "UniqueEffects", ConfigDefaultValues.thunderBlitzChance); - float spellScalingModifier = Config.getFloat("thunderBlitzSpellScaling", "UniqueEffects", ConfigDefaultValues.thunderBlitzSpellScaling); + private static final int ability_timer_max = 50; @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); if (!attacker.getWorld().isClient()) { + int chargeChance = Config.uniqueEffects.thunderBlitz.chance; if (attacker.getRandom().nextInt(100) <= chargeChance && (attacker instanceof PlayerEntity player) && player.getItemCooldownManager().getCooldownProgress(this, 1f) > 0) { player.getItemCooldownManager().set(this, 0); attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_BLOCK_01.get(), @@ -69,6 +70,11 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { if (!world.isClient && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && user.isOnGround()) { + + float abilityDamage = HelperMethods.spellScaledDamage("lightning", user, Config.uniqueEffects.thunderBlitz.spellScaling, Config.uniqueEffects.thunderBlitz.damage); + int skillCooldown = Config.uniqueEffects.thunderBlitz.cooldown; + int radius = Config.uniqueEffects.thunderBlitz.radius; + AbilityMethods.tickAbilityThunderBlitz(stack, world, user, remainingUseTicks, ability_timer_max, abilityDamage, skillCooldown, radius); } @@ -85,7 +91,7 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int } @Override - public int getMaxUseTime(ItemStack stack) { + public int getMaxUseTime(ItemStack stack, LivingEntity user) { return ability_timer_max; } @@ -96,38 +102,46 @@ public UseAction getUseAction(ItemStack stack) { @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "lightning") > 0) { - abilityDamage = HelperMethods.commonSpellAttributeScaling(spellScalingModifier, entity, "lightning"); - scalesWithSpellPower = true; - } - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclickheld").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip7").setStyle(TEXT)); - if (scalesWithSpellPower) { + tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.thunderbrandsworditem.tooltip7").setStyle(Styles.TEXT)); + if (Platform.isModLoaded("spell_power")) { tooltip.add(Text.literal("")); tooltip.add(Text.translatable("item.simplyswords.compat.scaleLightning")); } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.THUNDERBRAND::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 250; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 3f; + @ValidatedInt.Restrict(min = 1) + public int radius = 2; + @ValidatedFloat.Restrict(min = 0f) + public float spellScaling = 1.7f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/HasteSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/TwistedBladeItem.java similarity index 58% rename from common/src/main/java/net/sweenus/simplyswords/item/custom/HasteSwordItem.java rename to common/src/main/java/net/sweenus/simplyswords/item/custom/TwistedBladeItem.java index 576e410c..a961b49c 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/HasteSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/TwistedBladeItem.java @@ -1,6 +1,6 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,51 +8,55 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class HasteSwordItem extends UniqueSwordItem { - public HasteSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); +public class TwistedBladeItem extends UniqueSwordItem implements TwoHandedWeapon { + public TwistedBladeItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; + private static int stepMod = 0; @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { ServerWorld world = (ServerWorld) attacker.getWorld(); - int fhitchance = (int) Config.getFloat("ferocityChance", "UniqueEffects", ConfigDefaultValues.ferocityChance); - int fduration = (int) Config.getFloat("ferocityDuration", "UniqueEffects", ConfigDefaultValues.ferocityDuration); - int maximum_stacks = (int) Config.getFloat("ferocityMaxStacks", "UniqueEffects", ConfigDefaultValues.ferocityMaxStacks); + int hitChance = Config.uniqueEffects.ferocity.chance; + int duration = Config.uniqueEffects.ferocity.duration; + int maxStacks = Config.uniqueEffects.ferocity.maxStacks; HelperMethods.playHitSounds(attacker, target); - if (attacker.getRandom().nextInt(100) <= fhitchance) { + if (attacker.getRandom().nextInt(100) <= hitChance) { if (attacker.hasStatusEffect(StatusEffects.HASTE)) { int a = (attacker.getStatusEffect(StatusEffects.HASTE).getAmplifier() + 1); world.playSoundFromEntity(null, attacker, SoundRegistry.ELEMENTAL_BOW_HOLY_SHOOT_IMPACT_02.get(), attacker.getSoundCategory(), 0.3f, 1f + (a / 10f)); - if ((attacker.getStatusEffect(StatusEffects.HASTE).getAmplifier() < maximum_stacks)) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, fduration, a), attacker); + if ((attacker.getStatusEffect(StatusEffects.HASTE).getAmplifier() < maxStacks)) { + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, a), attacker); } else { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, fduration, a - 1), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, a - 1), attacker); } } else { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, fduration, 1), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, 1), attacker); } } } @@ -62,7 +66,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { if (user.hasStatusEffect(StatusEffects.HASTE)) { - int strength_tier = (int) Config.getFloat("ferocityStrengthTier", "UniqueEffects", ConfigDefaultValues.ferocityStrengthTier); + int strength_tier = Config.uniqueEffects.ferocity.strengthTier; int a = (user.getStatusEffect(StatusEffects.HASTE).getAmplifier() * 20); user.addStatusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, a, strength_tier), user); @@ -76,29 +80,39 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.ENTITY_EFFECT, - ParticleTypes.ENTITY_EFFECT, ParticleTypes.ENTITY_EFFECT, false); + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.ASH, + ParticleTypes.ASH, ParticleTypes.ASH, false); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip6").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.ferocitysworditem.tooltip6").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.TWISTED_BLADE::get)); + } - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 75; + @ValidatedInt.Restrict(min = 0) + public int duration = 100; + @ValidatedInt.Restrict(min = 0) + public int maxStacks = 15; + @ValidatedInt.Restrict(min = 0) + public int strengthTier = 2; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/WatcherClaymoreItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/WatcherClaymoreItem.java new file mode 100644 index 00000000..ddcb5589 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/WatcherClaymoreItem.java @@ -0,0 +1,11 @@ +package net.sweenus.simplyswords.item.custom; + +import net.minecraft.item.ToolMaterial; +import net.sweenus.simplyswords.item.TwoHandedWeapon; + +public class WatcherClaymoreItem extends WatcherSwordItem implements TwoHandedWeapon { + + public WatcherClaymoreItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/WatcherSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/WatcherSwordItem.java index 23c25a22..de59b502 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/WatcherSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/WatcherSwordItem.java @@ -1,50 +1,53 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class WatcherSwordItem extends UniqueSwordItem { - public WatcherSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public WatcherSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { ServerWorld world = (ServerWorld) attacker.getWorld(); - int watcherChance = (int) Config.getFloat("watcherChance", "UniqueEffects", ConfigDefaultValues.watcherChance); - int omenChance = (int) Config.getFloat("omenChance", "UniqueEffects", ConfigDefaultValues.omenChance); + int watcherChance = Config.uniqueEffects.watcher.watcherChance; + int omenChance = Config.uniqueEffects.watcher.omenChance; HelperMethods.playHitSounds(attacker, target); if (attacker.getRandom().nextInt(100) <= watcherChance) { - int hradius = (int) (Config.getFloat("watcherRadius", "UniqueEffects", ConfigDefaultValues.watcherRadius)); - int vradius = (int) (Config.getFloat("watcherRadius", "UniqueEffects", ConfigDefaultValues.watcherRadius) / 2); + double hradius = Config.uniqueEffects.watcher.watcherRadius; + double vradius = Config.uniqueEffects.watcher.watcherRadius / 2.0; double x = target.getX(); double y = target.getY(); double z = target.getZ(); - float rAmount = Config.getFloat("watcherRestoreAmount", "UniqueEffects", ConfigDefaultValues.watcherRestoreAmount); + float rAmount = Config.uniqueEffects.watcher.watcherRestoreAmount; Box box = new Box(x + hradius, y + vradius, z + hradius, x - hradius, y - vradius, z - hradius); @@ -61,13 +64,13 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack if (attacker.getRandom().nextInt(100) <= omenChance) { BlockPos position = target.getBlockPos(); - float overallAbsorptionCap = Config.getFloat("abilityAbsorptionCap", "UniqueEffects", ConfigDefaultValues.abilityAbsorptionCap); - float absorptionCap = Config.getFloat("omenAbsorptionCap", "UniqueEffects", ConfigDefaultValues.omenAbsorptionCap); - float threshold = Config.getFloat("omenInstantKillThreshold", "UniqueEffects", ConfigDefaultValues.omenInstantKillThreshold) * target.getMaxHealth(); + float overallAbsorptionCap = Config.uniqueEffects.abilityAbsorptionCap; + float absorptionCap = Config.uniqueEffects.watcher.omenAbsorptionCap; + float threshold = Config.uniqueEffects.watcher.omenInstantKillThreshold * target.getMaxHealth(); float remainingHealth = target.getHealth(); if (remainingHealth <= threshold) { - attacker.setAbsorptionAmount(Math.min(overallAbsorptionCap, attacker.getAbsorptionAmount() + remainingHealth)); + attacker.setAbsorptionAmount(Math.min(Math.min(absorptionCap, overallAbsorptionCap), attacker.getAbsorptionAmount() + remainingHealth)); world.playSound(null, position, SoundRegistry.ELEMENTAL_BOW_SCIFI_SHOOT_IMPACT_03.get(), target.getSoundCategory(), 0.7f, 1.2f); target.damage(attacker.getDamageSources().indirectMagic(attacker, attacker), 1000); @@ -79,29 +82,44 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.ENCHANT, ParticleTypes.ENCHANT, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.ENCHANT, ParticleTypes.ENCHANT, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip3", - (Config.getFloat("omenInstantKillThreshold", "UniqueEffects", ConfigDefaultValues.omenInstantKillThreshold) * 100)).setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip4").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip3", (Config.uniqueEffects.watcher.omenInstantKillThreshold * 100)).setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip4").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip5").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip7").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip5").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.watchersworditem.tooltip7").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.WATCHER_CLAYMORE::get, ItemsRegistry.WATCHING_WARGLAIVE::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int watcherChance = 5; + @ValidatedDouble.Restrict(min = 1.0) + public double watcherRadius = 8.0; + @ValidatedFloat.Restrict(min = 0f) + public float watcherRestoreAmount = 0.5f; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + @ValidatedFloat.Restrict(min = 0, max = 100) + public float omenAbsorptionCap = 20f; + @ValidatedInt.Restrict(min = 0, max = 100) + public int omenChance = 5; + @ValidatedFloat.Restrict(min = 0f, max = 1f) + public float omenInstantKillThreshold = 0.25f; } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/WatchingWarglaiveItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/WatchingWarglaiveItem.java new file mode 100644 index 00000000..7ac39200 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/WatchingWarglaiveItem.java @@ -0,0 +1,10 @@ +package net.sweenus.simplyswords.item.custom; + +import net.minecraft.item.ToolMaterial; + +public class WatchingWarglaiveItem extends WatcherSwordItem { + + public WatchingWarglaiveItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/WaxweaverSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/WaxweaverSwordItem.java index 5740c041..f06d6d1e 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/WaxweaverSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/WaxweaverSwordItem.java @@ -1,36 +1,37 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class WaxweaverSwordItem extends UniqueSwordItem { - public WaxweaverSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public WaxweaverSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { - int maximum_stacks = (int) Config.getFloat("waxweaveMaxStacks", "UniqueEffects", ConfigDefaultValues.waxweaveMaxStacks); + int maximum_stacks = Config.uniqueEffects.waxweave.maxStacks; HelperMethods.playHitSounds(attacker, target); if (target.isOnFire()) { @@ -50,32 +51,39 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.WHITE_ASH, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.WHITE_ASH, ParticleTypes.WHITE_ASH, ParticleTypes.WHITE_ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip3").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip3").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip7").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip7").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip9", Config.getFloat("waxweaveCooldown", "UniqueEffects", ConfigDefaultValues.waxweaveCooldown) / 20).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip9", Config.uniqueEffects.waxweave.cooldown / 20).setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.WAXWEAVER::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 1200; + @ValidatedInt.Restrict(min = 1) + public int maxStacks = 3; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/WhisperwindSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/WhisperwindSwordItem.java index 6bef0596..3907ae8f 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/WhisperwindSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/WhisperwindSwordItem.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.effect.StatusEffectInstance; @@ -8,35 +9,36 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; -public class WhisperwindSwordItem extends UniqueSwordItem { - private static int stepMod = 0; - int skillCooldown = (int) Config.getFloat("fatalFlickerCooldown", "UniqueEffects", ConfigDefaultValues.fatalFlickerCooldown); - int abilityChance = (int) Config.getFloat("fatalFlickerChance", "UniqueEffects", ConfigDefaultValues.fatalFlickerChance); +public class WhisperwindSwordItem extends UniqueSwordItem implements TwoHandedWeapon { - public WhisperwindSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public WhisperwindSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { HelperMethods.playHitSounds(attacker, target); if (!attacker.getWorld().isClient()) { - if (attacker.getRandom().nextInt(100) <= abilityChance && (attacker instanceof PlayerEntity player)) { + if (attacker.getRandom().nextInt(100) <= Config.uniqueEffects.fatalFlicker.chance && (attacker instanceof PlayerEntity player)) { attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), attacker.getSoundCategory(), 0.3f, 1.8f); player.getItemCooldownManager().set(this.getDefaultStack().getItem(), 0); @@ -49,39 +51,52 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack public TypedActionResult use(World world, PlayerEntity user, Hand hand) { world.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_BOW_SCIFI_SHOOT_IMPACT_01.get(), user.getSoundCategory(), 0.6f, 1.0f); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.FATAL_FLICKER.get(), 12)); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.FATAL_FLICKER), 12)); user.addStatusEffect(new StatusEffectInstance(StatusEffects.ABSORPTION, 100)); - user.getItemCooldownManager().set(this.getDefaultStack().getItem(), skillCooldown); + user.getItemCooldownManager().set(this.getDefaultStack().getItem(), Config.uniqueEffects.fatalFlicker.cooldown); return super.use(world, user, hand); } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, ParticleTypes.MYCELIUM, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip2").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip2").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip7").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.whisperwindsworditem.tooltip7").setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.WHISPERWIND::get)); + } + + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + @ValidatedInt.Restrict(min = 0) + public int cooldown = 175; + @ValidatedInt.Restrict(min = 1) + public int maxStacks = 99; + @ValidatedInt.Restrict(min = 1) + public int radius = 3; + @ValidatedFloat.Restrict(min = 0f) + public float dashVelocity = 3f; - super.appendTooltip(itemStack, world, tooltip, tooltipContext); } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/item/custom/WickpiercerSwordItem.java b/common/src/main/java/net/sweenus/simplyswords/item/custom/WickpiercerSwordItem.java index 660f3d5b..4baeec6f 100644 --- a/common/src/main/java/net/sweenus/simplyswords/item/custom/WickpiercerSwordItem.java +++ b/common/src/main/java/net/sweenus/simplyswords/item/custom/WickpiercerSwordItem.java @@ -1,6 +1,7 @@ package net.sweenus.simplyswords.item.custom; -import net.minecraft.client.item.TooltipContext; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; @@ -8,33 +9,34 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.settings.ItemStackTooltipAppender; +import net.sweenus.simplyswords.config.settings.TooltipSettings; import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; import java.util.List; public class WickpiercerSwordItem extends UniqueSwordItem { - public WickpiercerSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, Settings settings) { - super(toolMaterial, attackDamage, attackSpeed, settings); + public WickpiercerSwordItem(ToolMaterial toolMaterial, Settings settings) { + super(toolMaterial, settings); } - private static int stepMod = 0; - @Override public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { if (!attacker.getWorld().isClient()) { - float damageModifier = Config.getFloat("flickerFuryDamage", "UniqueEffects", ConfigDefaultValues.flickerFuryDamage); + float damageModifier = Config.uniqueEffects.flickerFury.damage; HelperMethods.playHitSounds(attacker, target); ServerWorld world = (ServerWorld) attacker.getWorld(); @@ -42,9 +44,9 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack if (attacker instanceof PlayerEntity player) damageSource = attacker.getDamageSources().playerAttack(player); - if (attacker.hasStatusEffect(EffectRegistry.FRENZY.get())) { + if (attacker.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.FRENZY))) { target.timeUntilRegen = 0; - target.damage(damageSource, this.getAttackDamage() * damageModifier); + target.damage(damageSource, (float) (HelperMethods.getEntityAttackDamage(attacker) * damageModifier)); world.playSound(null, attacker.getBlockPos(), SoundRegistry.SPELL_FIRE.get(), attacker.getSoundCategory(), 0.2f, 1.9f); } @@ -55,8 +57,8 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack @Override public TypedActionResult use(World world, PlayerEntity user, Hand hand) { - int skillCooldown = (int) Config.getFloat("flickerFuryCooldown", "UniqueEffects", ConfigDefaultValues.flickerFuryCooldown); - int baseEffectDuration = (int) Config.getFloat("flickerFuryDuration", "UniqueEffects", ConfigDefaultValues.flickerFuryDuration); + int skillCooldown = Config.uniqueEffects.flickerFury.cooldown; + int baseEffectDuration = Config.uniqueEffects.flickerFury.duration; int effectDuration = baseEffectDuration; ItemStack mainhand = user.getMainHandStack(); ItemStack offhand = user.getOffHandStack(); @@ -66,7 +68,7 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han world.playSound(null, user.getBlockPos(), SoundRegistry.SPELL_FIRE.get(), user.getSoundCategory(), 0.5f, 1.0f); - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.FRENZY.get(), effectDuration, 0)); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.FRENZY), effectDuration, 0)); user.getItemCooldownManager().set(this, skillCooldown); return super.use(world, user, hand); @@ -74,36 +76,45 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - if (stepMod > 0) stepMod--; - if (stepMod <= 0) stepMod = 7; - HelperMethods.createFootfalls(entity, stack, world, stepMod, ParticleTypes.WHITE_ASH, + HelperMethods.createFootfalls(entity, stack, world, ParticleTypes.WHITE_ASH, ParticleTypes.WHITE_ASH, ParticleTypes.WHITE_ASH, true); super.inventoryTick(stack, world, entity, slot, selected); } @Override - public void appendTooltip(ItemStack itemStack, World world, List tooltip, TooltipContext tooltipContext) { - Style RIGHTCLICK = HelperMethods.getStyle("rightclick"); - Style ABILITY = HelperMethods.getStyle("ability"); - Style TEXT = HelperMethods.getStyle("text"); - + public void appendTooltip(ItemStack itemStack, TooltipContext tooltipContext, List tooltip, TooltipType type) { tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip1").setStyle(ABILITY)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip6").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip7").setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip1").setStyle(Styles.ABILITY)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip6").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip7").setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip8").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip9", Config.getFloat("waxweaveCooldown", "UniqueEffects", ConfigDefaultValues.waxweaveCooldown) / 20).setStyle(TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip8").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.waxweaversworditem.tooltip9", Config.uniqueEffects.waxweave.cooldown / 20).setStyle(Styles.TEXT)); tooltip.add(Text.literal("")); - tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(RIGHTCLICK)); - tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip2").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip3").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip4").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip5").setStyle(TEXT)); - tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip6", Config.getFloat("flickerFuryDuration", "UniqueEffects", ConfigDefaultValues.flickerFuryDuration) / 20).setStyle(TEXT)); - - super.appendTooltip(itemStack, world, tooltip, tooltipContext); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wickpiercersworditem.tooltip6", Config.uniqueEffects.flickerFury.duration / 20).setStyle(Styles.TEXT)); + + super.appendTooltip(itemStack, tooltipContext, tooltip, type); + } + + public static class EffectSettings extends TooltipSettings { + + public EffectSettings() { + super(new ItemStackTooltipAppender(ItemsRegistry.WICKPIERCER::get)); + } + + @ValidatedInt.Restrict(min = 0) + public int cooldown = 220; + @ValidatedFloat.Restrict(min = 0f) + public float damage = 1.0f; + @ValidatedInt.Restrict(min = 0) + public int duration = 40; + } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/mixin/LivingEntityMixin.java b/common/src/main/java/net/sweenus/simplyswords/mixin/LivingEntityMixin.java index ec92bad8..045ce1ab 100644 --- a/common/src/main/java/net/sweenus/simplyswords/mixin/LivingEntityMixin.java +++ b/common/src/main/java/net/sweenus/simplyswords/mixin/LivingEntityMixin.java @@ -13,7 +13,6 @@ import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.compat.eldritch_end.EldritchEndCompatMethods; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.ItemsRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; @@ -42,7 +41,7 @@ public abstract class LivingEntityMixin { && (stack.isOf(ItemsRegistry.WAXWEAVER.get()) || stack.isOf(ItemsRegistry.WICKPIERCER.get()))) { - int skillCooldown = (int) Config.getFloat("waxweaveCooldown", "UniqueEffects", ConfigDefaultValues.waxweaveCooldown); + int skillCooldown = Config.uniqueEffects.waxweave.cooldown; player.setHealth(player.getMaxHealth()); HelperMethods.incrementStatusEffect(player, StatusEffects.RESISTANCE, 100, 2, 3); player.getItemCooldownManager().set(stack.getItem(), skillCooldown); @@ -60,13 +59,13 @@ public abstract class LivingEntityMixin { private float simplyswords$modifyDamageAmount(float amount, DamageSource source) { LivingEntity livingEntity = (LivingEntity) (Object) this; if (!livingEntity.getWorld().isClient()) { - StatusEffectInstance voidcloakEffect = livingEntity.getStatusEffect(EffectRegistry.VOIDCLOAK.get()); - StatusEffectInstance ribbonwrathEffect = livingEntity.getStatusEffect(EffectRegistry.RIBBONWRATH.get()); + StatusEffectInstance voidcloakEffect = livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.VOIDCLOAK)); + StatusEffectInstance ribbonwrathEffect = livingEntity.getStatusEffect(EffectRegistry.getReference(EffectRegistry.RIBBONWRATH)); if (voidcloakEffect != null) { int amplifier = voidcloakEffect.getAmplifier(); float reductionFactor = 1 - (amplifier + 1) * 0.10f; // +1 because amplifier starts at 0 amount *= reductionFactor; - HelperMethods.decrementStatusEffect(livingEntity, EffectRegistry.VOIDCLOAK.get()); + HelperMethods.decrementStatusEffect(livingEntity, EffectRegistry.getReference(EffectRegistry.VOIDCLOAK)); } if (ribbonwrathEffect != null) { float reductionFactor = 0.85f; @@ -82,7 +81,7 @@ public abstract class LivingEntityMixin { if (!livingEntity.getWorld().isClient()) { if (SimplySwords.passVersionCheck("eldritch_end", minimumEldritchEndVersion) - && Registries.STATUS_EFFECT.get(new Identifier("simplyswords:voidhunger")) != null) + && Registries.STATUS_EFFECT.get(Identifier.of("simplyswords:voidhunger")) != null) EldritchEndCompatMethods.generateVoidcloakStacks(livingEntity); } } diff --git a/common/src/main/java/net/sweenus/simplyswords/mixin/ServerPlayerEntityMixin.java b/common/src/main/java/net/sweenus/simplyswords/mixin/ServerPlayerEntityMixin.java index 89d6bac6..28ae1c7c 100644 --- a/common/src/main/java/net/sweenus/simplyswords/mixin/ServerPlayerEntityMixin.java +++ b/common/src/main/java/net/sweenus/simplyswords/mixin/ServerPlayerEntityMixin.java @@ -23,7 +23,7 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; +import net.sweenus.simplyswords.config.LootConfig; import net.sweenus.simplyswords.item.custom.CaelestisSwordItem; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.ItemsRegistry; @@ -49,21 +49,21 @@ public abstract class ServerPlayerEntityMixin { if (player instanceof ServerPlayerEntity serverPlayer) { //Effect Resilience - if (serverPlayer.hasStatusEffect(EffectRegistry.RESILIENCE.get())) { - HelperMethods.decrementStatusEffect(serverPlayer, EffectRegistry.RESILIENCE.get()); + if (serverPlayer.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.RESILIENCE))) { + HelperMethods.decrementStatusEffect(serverPlayer, EffectRegistry.getReference(EffectRegistry.RESILIENCE)); cir.setReturnValue(false); - if (!player.hasStatusEffect(EffectRegistry.MAGISLAM.get())) + if (!player.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.MAGISLAM))) serverPlayer.getWorld().playSoundFromEntity(null, serverPlayer, SoundRegistry.MAGIC_SWORD_PARRY_03.get(), SoundCategory.PLAYERS, 0.7f, 0.5f + (serverPlayer.getRandom().nextBetween(1, 5) * 0.1f)); } - if (serverPlayer.hasStatusEffect(EffectRegistry.ASTRAL_SHIFT.get())) { - StatusEffectInstance astralShiftInstance = player.getStatusEffect(EffectRegistry.ASTRAL_SHIFT.get()); + if (serverPlayer.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.ASTRAL_SHIFT))) { + StatusEffectInstance astralShiftInstance = player.getStatusEffect(EffectRegistry.getReference(EffectRegistry.ASTRAL_SHIFT)); if (astralShiftInstance != null) { int duration = astralShiftInstance.getDuration(); if (duration > 10) { - HelperMethods.incrementStatusEffect(serverPlayer, EffectRegistry.ASTRAL_SHIFT.get(), duration, (int) Math.max(1, (amount / 10)), 99); + HelperMethods.incrementStatusEffect(serverPlayer, EffectRegistry.getReference(EffectRegistry.ASTRAL_SHIFT), duration, (int) Math.max(1, (amount / 10)), 99); AbilityMethods.astralShiftSounds(serverPlayer); cir.setReturnValue(false); } @@ -105,7 +105,7 @@ public abstract class ServerPlayerEntityMixin { if (serverPlayer.getMainHandStack().isOf(ItemsRegistry.RIBBONCLEAVER.get()) || serverPlayer.getMainHandStack().isOf(ItemsRegistry.ENIGMA.get())) { int frequency = 6; if (serverPlayer.age % 20 == 0 && serverPlayer.getMainHandStack().isOf(ItemsRegistry.RIBBONCLEAVER.get())) - serverPlayer.addStatusEffect(new StatusEffectInstance(EffectRegistry.RIBBONWRATH.get(), + serverPlayer.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.RIBBONWRATH), 30, 0, true, false, false)); if (player.age % frequency == 0 && player.isSprinting() && player.isOnGround()) { @@ -119,8 +119,8 @@ public abstract class ServerPlayerEntityMixin { //Magiblade repellent if (serverPlayer.getMainHandStack().isOf(ItemsRegistry.MAGIBLADE.get())) { int frequency = 8; - int radius = (int) Config.getFloat("magibladeRepelRadius", "UniqueEffects", ConfigDefaultValues.magibladeRepelRadius); - int chance = (int) Config.getFloat("magibladeRepelChance", "UniqueEffects", ConfigDefaultValues.magibladeRepelChance); + double radius = Config.uniqueEffects.magiblade.repelRadius; + int chance = Config.uniqueEffects.magiblade.repelChance; int totalChance = new Random().nextInt(100); if (serverPlayer.age % frequency == 0 && totalChance < chance) { Box box = HelperMethods.createBox(player, radius); @@ -157,15 +157,15 @@ public abstract class ServerPlayerEntityMixin { ItemStack decayingRelic = ItemsRegistry.DECAYING_RELIC.get().asItem().getDefaultStack(); ItemStack runicTablet = ItemsRegistry.RUNIC_TABLET.get().asItem().getDefaultStack(); Random random = new Random(); - TagKey desiredItemsTag = TagKey.of(Registries.ITEM.getKey(), new Identifier("simplyswords", "conditional_uniques_type_1")); - TagKey endItemsTag = TagKey.of(Registries.ITEM.getKey(), new Identifier("simplyswords", "conditional_uniques_type_2")); + TagKey desiredItemsTag = TagKey.of(Registries.ITEM.getKey(), Identifier.of("simplyswords", "conditional_uniques_type_1")); + TagKey endItemsTag = TagKey.of(Registries.ITEM.getKey(), Identifier.of("simplyswords", "conditional_uniques_type_2")); int chance = random.nextInt(100); for (int i = 0; i < serverPlayer.getInventory().size(); i++) { ItemStack stackInSlot = serverPlayer.getInventory().getStack(i); if (stackInSlot.isOf(containedRemnant.getItem()) || stackInSlot.isOf(tamperedRemnant.getItem())) { - if (chance < 21 && Config.getBoolean("enableContainedRemnants", "Loot", ConfigDefaultValues.enableContainedRemnants)) { + if (chance < 21 && LootConfig.INSTANCE.enableContainedRemnants.get()) { List itemsFromTag = Registries.ITEM.stream() .filter(item -> item.getDefaultStack().isIn(desiredItemsTag)) .toList(); @@ -250,8 +250,8 @@ else if (serverPlayer.getInventory().getStack(i).isOf(ItemsRegistry.TAMPERED_REM if (!target.handleAttack(player)) { ServerWorld serverWorld = (ServerWorld) player.getWorld(); //Ribboncleaver Cleave buff - if (serverPlayer.hasStatusEffect(EffectRegistry.RIBBONCLEAVE.get())) { - serverPlayer.removeStatusEffect(EffectRegistry.RIBBONCLEAVE.get()); + if (serverPlayer.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.RIBBONCLEAVE))) { + serverPlayer.removeStatusEffect(EffectRegistry.getReference(EffectRegistry.RIBBONCLEAVE)); HelperMethods.spawnOrbitParticles(serverWorld, target.getPos().add(0, 0.3, 0), ParticleTypes.POOF, 0.5, 6); HelperMethods.spawnOrbitParticles(serverWorld, target.getPos().add(0, 0.5, 0), @@ -266,4 +266,4 @@ else if (serverPlayer.getInventory().getStack(i).isOf(ItemsRegistry.TAMPERED_REM } -} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/GemPower.java b/common/src/main/java/net/sweenus/simplyswords/power/GemPower.java new file mode 100644 index 00000000..8a736eb8 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/GemPower.java @@ -0,0 +1,75 @@ +package net.sweenus.simplyswords.power; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipAppender; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.Consumer; + +/** + * A Runic, Nether, or other type of gem power + *

+ * For the pre-existing gem types, it's best to use the subclasses made for that purpose + * @see RunicGemPower + * @see RunefusedGemPower + * @see NetherGemPower + */ +public class GemPower implements TooltipAppender { + + public GemPower(boolean isGreater, PowerType... applicableTypes) { + this.isGreater = isGreater; + this.applicableTypes = Arrays.stream(applicableTypes).toList(); + } + + private final boolean isGreater; + private final List applicableTypes; + + public boolean isGreater() { return isGreater; } + public List applicableTypes() { return applicableTypes; } + + @Override + public void appendTooltip(Item.TooltipContext context, Consumer tooltip, TooltipType type) { + List list = new ArrayList<>(); + appendTooltip(ItemStack.EMPTY, context, list, type, false); + for (Text text : list) { + tooltip.accept(text); + } + } + + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) {} + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) {} + public void inventoryTick(ItemStack stack, World world, LivingEntity user, int slot, boolean selected) {} + + TypedActionResult use(World world, PlayerEntity user, Hand hand, ItemStack itemStack) { return TypedActionResult.fail(itemStack); } + void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) {} + void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) {} + int getMaxUseTime(ItemStack stack) { return 0; } + + public boolean isEmpty() { return false; } + + ////////////////////////////// + + public static GemPower EMPTY = new EmptyGemPower(); + + private static class EmptyGemPower extends GemPower { + + public EmptyGemPower() { + super(false); + } + + @Override + public boolean isEmpty() { + return true; + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/GemPowerComponent.java b/common/src/main/java/net/sweenus/simplyswords/power/GemPowerComponent.java new file mode 100644 index 00000000..6ca01a4e --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/GemPowerComponent.java @@ -0,0 +1,155 @@ +package net.sweenus.simplyswords.power; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.entry.RegistryFixedCodec; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.util.Styles; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.function.BiFunction; + +public record GemPowerComponent(boolean hasRunicPower, boolean hasNetherPower, RegistryEntry runicPower, RegistryEntry netherPower) { + + public static final Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + Codec.BOOL.fieldOf("has_runic_power").forGetter(GemPowerComponent::hasRunicPower), + Codec.BOOL.fieldOf("has_nether_power").forGetter(GemPowerComponent::hasNetherPower), + RegistryFixedCodec.of(GemPowerRegistry.REGISTRY.key()).fieldOf("runic_power").forGetter(GemPowerComponent::runicPower), + RegistryFixedCodec.of(GemPowerRegistry.REGISTRY.key()).fieldOf("nether_power").forGetter(GemPowerComponent::netherPower) + ).apply(instance, GemPowerComponent::new) + ); + + public static final PacketCodec PACKET_CODEC = PacketCodec.tuple( + PacketCodecs.BOOL, + GemPowerComponent::hasRunicPower, + PacketCodecs.BOOL, + GemPowerComponent::hasNetherPower, + PacketCodecs.registryEntry(GemPowerRegistry.REGISTRY.key()), + GemPowerComponent::runicPower, + PacketCodecs.registryEntry(GemPowerRegistry.REGISTRY.key()), + GemPowerComponent::netherPower, + GemPowerComponent::new + ); + + public static final GemPowerComponent DEFAULT = new GemPowerComponent(false, false, GemPowerRegistry.EMPTY, GemPowerRegistry.EMPTY); + + public static GemPowerComponent runic(@NotNull RegistryEntry power) { + return new GemPowerComponent(true, false, power, GemPowerRegistry.EMPTY); + } + + public static GemPowerComponent nether(@NotNull RegistryEntry power) { + return new GemPowerComponent(false, true, GemPowerRegistry.EMPTY, power); + } + + public static GemPowerComponent create(@Nullable RegistryEntry runic, @Nullable RegistryEntry nether) { + return new GemPowerComponent(runic != null, nether != null, runic != null ? runic : GemPowerRegistry.EMPTY, nether != null ? nether : GemPowerRegistry.EMPTY); + } + + public static GemPowerComponent createEmpty(boolean hasRunic, boolean hasNether) { + return new GemPowerComponent(hasRunic, hasNether, GemPowerRegistry.EMPTY, GemPowerRegistry.EMPTY); + } + + public GemPowerComponent fill(BiFunction, RegistryEntry> runicFiller, BiFunction, RegistryEntry> netherFiller) { + return new GemPowerComponent(this.hasRunicPower, this.hasNetherPower, runicFiller.apply(this.hasRunicPower, this.runicPower), netherFiller.apply(this.hasNetherPower, this.netherPower)); + } + + public boolean canBeFilled() { + return hasRunicPower || hasNetherPower; + } + + public boolean isEmpty() { + return runicPower.value().isEmpty() && netherPower.value().isEmpty(); + } + + public boolean hasPower(RegistryEntry power) { + if (isEmpty()) return false; + return (!this.runicPower.value().isEmpty() && power.getKeyOrValue() == this.runicPower.getKeyOrValue()) || (!this.netherPower.value().isEmpty() && power.getKeyOrValue() == this.netherPower.getKeyOrValue()); + } + + public boolean hasRunic(RegistryEntry power) { + return (!this.runicPower.value().isEmpty() && power.getKeyOrValue().equals(this.runicPower.getKeyOrValue())); + } + + public boolean hasNether(RegistryEntry power) { + return (!this.netherPower.value().isEmpty() && power.getKeyOrValue() == this.netherPower.getKeyOrValue()); + } + + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + runicPower.value().postHit(stack, target, attacker); + netherPower.value().postHit(stack, target, attacker); + } + + public TypedActionResult use(World world, PlayerEntity user, Hand hand) { + ItemStack itemStack = user.getStackInHand(hand); + TypedActionResult result1 = runicPower.value().use(world, user, hand, itemStack); + TypedActionResult result2 = netherPower.value().use(world, user, hand, itemStack); + if (result1.getResult().compareTo(result2.getResult()) < 0) { + return result1; + } else { + return result2; + } + } + + public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { + runicPower.value().usageTick(world, user, stack, remainingUseTicks); + netherPower.value().usageTick(world, user, stack, remainingUseTicks); + } + + public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { + runicPower.value().onStoppedUsing(stack, world, user, remainingUseTicks); + netherPower.value().onStoppedUsing(stack, world, user, remainingUseTicks); + } + + public int getMaxUseTime(ItemStack stack) { + return Math.max(runicPower.value().getMaxUseTime(stack), netherPower.value().getMaxUseTime(stack)); + } + + public void inventoryTick(ItemStack stack, World world, LivingEntity user, int slot, boolean selected) { + runicPower.value().inventoryTick(stack, world, user, slot, selected); + netherPower.value().inventoryTick(stack, world, user, slot, selected); + } + + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type) { + appendTooltip(itemStack, tooltipContext, tooltip, type, false); + } + + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (runicPower.value().isGreater()) { + tooltip.add(Text.translatable("item.simplyswords.greater_runic_power").setStyle(Styles.RUNIC)); + } + if (!runicPower.value().isEmpty()) { + runicPower.value().appendTooltip(itemStack, tooltipContext, tooltip, type, isRunic); + if (!netherPower.value().isEmpty()) { + tooltip.add(Text.literal("")); + } + } else if (!isRunic && hasRunicPower) { + tooltip.add(Text.translatable("item.simplyswords.empty_runic_slot").formatted(Formatting.GRAY)); + } + + if (netherPower.value().isGreater()) { + tooltip.add(Text.translatable("item.simplyswords.greater_nether_power").setStyle(Styles.NETHERFUSED)); + } + if (!netherPower.value().isEmpty()) { + netherPower.value().appendTooltip(itemStack, tooltipContext, tooltip, type, isRunic); + } else if (!isRunic && hasNetherPower) { + tooltip.add(Text.translatable("item.simplyswords.empty_nether_slot").formatted(Formatting.GRAY)); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/GemPowerFiller.java b/common/src/main/java/net/sweenus/simplyswords/power/GemPowerFiller.java new file mode 100644 index 00000000..af980967 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/GemPowerFiller.java @@ -0,0 +1,8 @@ +package net.sweenus.simplyswords.power; + +import me.fzzyhmstrs.fzzy_config.util.ValidationResult; +import net.minecraft.item.ItemStack; + +public interface GemPowerFiller { + ValidationResult fill(ItemStack stack, GemPowerComponent component); +} diff --git a/common/src/main/java/net/sweenus/simplyswords/power/NetherGemPower.java b/common/src/main/java/net/sweenus/simplyswords/power/NetherGemPower.java new file mode 100644 index 00000000..84dd9099 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/NetherGemPower.java @@ -0,0 +1,9 @@ +package net.sweenus.simplyswords.power; + +public class NetherGemPower extends GemPower { + + public NetherGemPower(boolean isGreater) { + //runefused gems also work in runic weapons + super(isGreater, PowerType.RUNIC, PowerType.RUNEFUSED); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/PowerType.java b/common/src/main/java/net/sweenus/simplyswords/power/PowerType.java new file mode 100644 index 00000000..69e229c9 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/PowerType.java @@ -0,0 +1,20 @@ +package net.sweenus.simplyswords.power; + +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import dev.architectury.registry.registries.RegistrySupplier; +import net.sweenus.simplyswords.registry.GemPowerRegistry; + +import java.util.List; + +public enum PowerType { + RUNIC, + RUNEFUSED, + NETHER; + + private final Supplier>> entrySupplier = Suppliers.memoize(() -> GemPowerRegistry.REGISTRY.entrySet().stream().map(entry -> GemPowerRegistry.REGISTRY.wrap(entry.getValue())).filter(entry -> entry.get().applicableTypes().contains(this)).toList()); + + public List> getEntries() { + return entrySupplier.get(); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/RunefusedGemPower.java b/common/src/main/java/net/sweenus/simplyswords/power/RunefusedGemPower.java new file mode 100644 index 00000000..defe0cd7 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/RunefusedGemPower.java @@ -0,0 +1,9 @@ +package net.sweenus.simplyswords.power; + +public class RunefusedGemPower extends GemPower { + + public RunefusedGemPower(boolean isGreater) { + //runefused gems also work in runic weapons + super(isGreater, PowerType.RUNIC, PowerType.RUNEFUSED); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/RunicGemPower.java b/common/src/main/java/net/sweenus/simplyswords/power/RunicGemPower.java new file mode 100644 index 00000000..010d57ab --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/RunicGemPower.java @@ -0,0 +1,24 @@ +package net.sweenus.simplyswords.power; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; + +public class RunicGemPower extends GemPower { + + public RunicGemPower(boolean isGreater) { + super(isGreater, PowerType.RUNIC); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand, ItemStack itemStack) { return TypedActionResult.fail(itemStack); } + @Override + public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) {} + @Override + public int getMaxUseTime(ItemStack stack) { return 0; } + @Override + public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) {} +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/ActiveDefencePower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/ActiveDefencePower.java new file mode 100644 index 00000000..4dc800d6 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/ActiveDefencePower.java @@ -0,0 +1,91 @@ +package net.sweenus.simplyswords.power.powers; + +import me.fzzyhmstrs.fzzy_config.annotations.Translation; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.projectile.ArrowEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.predicate.entity.EntityPredicates; +import net.minecraft.text.Text; +import net.minecraft.util.math.Box; +import net.minecraft.world.World; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class ActiveDefencePower extends RunefusedGemPower { + + public ActiveDefencePower() { + super(false); + } + + @Override + public void inventoryTick(ItemStack stack, World world, LivingEntity user, int slot, boolean selected) { + if (user instanceof PlayerEntity player && player.getInventory().contains(Items.ARROW.getDefaultStack())) { + int frequency = Config.gemPowers.activeDefence.frequency; + if (player.age % frequency == 0) { + double sradius = Config.gemPowers.activeDefence.radius; + double vradius = Config.gemPowers.activeDefence.radius / 2.0; + double x = player.getX(); + double y = player.getY(); + double z = player.getZ(); + Box box = new Box(x + sradius, y + vradius, z + sradius, x - sradius, y - vradius, z - sradius); + for (Entity entity : world.getOtherEntities(player, box, EntityPredicates.VALID_LIVING_ENTITY)) { + + if (entity instanceof LivingEntity le && HelperMethods.checkFriendlyFire(le, player)) { + + int arrowSlot = player.getInventory().getSlotWithStack(Items.ARROW.getDefaultStack()); + ItemStack arrowStack = player.getInventory().getStack(arrowSlot); + int randomc = (int) (Math.random() * 100); + if (randomc < 15) { + arrowStack.decrement(1); + } + ArrowEntity arrow = new ArrowEntity(EntityType.ARROW, world); + arrow.updatePosition(player.getX(), (player.getY() + 1.5), player.getZ()); + arrow.setOwner(player); + arrow.setVelocity(le.getX() - player.getX(), (le.getY() - player.getY()) - 1, le.getZ() - player.getZ()); + world.spawnEntity(arrow); + break; + } + } + } + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.active_defence").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.activedefencesworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends TooltipSettings { + + public Settings() { + super(GemPowerRegistry.ACTIVE_DEFENCE); + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 1) + public int frequency = 20; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedDouble.Restrict(min = 0.0) + public double radius = 5.0; + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/BerserkPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/BerserkPower.java new file mode 100644 index 00000000..b4f09566 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/BerserkPower.java @@ -0,0 +1,36 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.power.NetherGemPower; +import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class BerserkPower extends NetherGemPower { + + public BerserkPower() { + super(false); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int amp = HelperMethods.isUniqueTwohanded(stack) ? 4 : 2; + if (attacker.getArmor() < 10) { + target.setHealth(target.getHealth() - amp); + attacker.heal((float) amp / 2); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk").setStyle(Styles.NETHERFUSED)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.berserk.description3").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/EchoPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/EchoPower.java new file mode 100644 index 00000000..d2e7d414 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/EchoPower.java @@ -0,0 +1,35 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.power.NetherGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class EchoPower extends NetherGemPower { + + public EchoPower() { + super(false); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int amp = HelperMethods.isUniqueTwohanded(stack) ? 2 : 0; + target.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.ECHO), 20, amp), attacker); + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo").setStyle(Styles.NETHERFUSED)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.echo.description3").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/FloatPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/FloatPower.java new file mode 100644 index 00000000..d560a8ed --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/FloatPower.java @@ -0,0 +1,53 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class FloatPower extends RunefusedGemPower { + + public FloatPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.floating.chance; + int duration = Config.gemPowers.floating.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + target.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, duration, this.isGreater() ? 3 : 2), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.float").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.levitationsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 50, GemPowerRegistry.FLOAT); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/FreezePower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/FreezePower.java new file mode 100644 index 00000000..b718ac30 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/FreezePower.java @@ -0,0 +1,57 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class FreezePower extends RunefusedGemPower { + + public FreezePower() { + super(false); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.freeze.chance; + int freezeDuration = Config.gemPowers.freeze.duration; + int duration = freezeDuration * 3; + + target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 1), attacker); + + if (attacker.getRandom().nextInt(100) <= hitChance) { + target.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.FREEZE), freezeDuration, 1), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.freeze").setStyle(Styles.RUNIC)); + + tooltip.add(Text.translatable("item.simplyswords.freezesworditem.tooltip2").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 120, GemPowerRegistry.FREEZE); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/FrostWardPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/FrostWardPower.java new file mode 100644 index 00000000..99125209 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/FrostWardPower.java @@ -0,0 +1,93 @@ +package net.sweenus.simplyswords.power.powers; + +import me.fzzyhmstrs.fzzy_config.annotations.Translation; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.entity.projectile.thrown.SnowballEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.predicate.entity.EntityPredicates; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.Text; +import net.minecraft.util.math.Box; +import net.minecraft.world.World; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.util.HelperMethods; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class FrostWardPower extends RunefusedGemPower { + + public FrostWardPower() { + super(false); + } + + @Override + public void inventoryTick(ItemStack stack, World world, LivingEntity user, int slot, boolean selected) { + int frequency = Config.gemPowers.frostWard.frequency; + + if (user.age % frequency == 0) { + int duration = Config.gemPowers.frostWard.duration; + double sRadius = Config.gemPowers.frostWard.radius; + double vRadius = Config.gemPowers.frostWard.radius / 2.0; + double x = user.getX(); + double y = user.getY(); + double z = user.getZ(); + ServerWorld serverWorld = (ServerWorld) world; + Box box = new Box(x + sRadius, y + vRadius, z + sRadius, x - sRadius, y - vRadius, z - sRadius); + for (Entity entity : serverWorld.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { + + if (entity instanceof LivingEntity le && HelperMethods.checkFriendlyFire(le, user)) { + + if (le.distanceTo(user) < sRadius) { + SnowballEntity snowball = new SnowballEntity(EntityType.SNOWBALL, serverWorld); + snowball.updatePosition(user.getX(), (user.getY() + 1.5), user.getZ()); + snowball.setOwner(user); + le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration)); + snowball.setVelocity(le.getX() - user.getX(), (le.getY() - user.getY()) - 1, le.getZ() - user.getZ()); + serverWorld.spawnEntity(snowball); + } + } + } + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.frost_ward").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.frostwardsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends TooltipSettings { + + public Settings() { + super(GemPowerRegistry.FROST_WARD); + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 1) + public int frequency = 20; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedDouble.Restrict(min = 0.0) + public double radius = 5.0; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 0) + public int duration = 60; + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/ImbuedPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/ImbuedPower.java new file mode 100644 index 00000000..bb1ddb68 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/ImbuedPower.java @@ -0,0 +1,59 @@ +package net.sweenus.simplyswords.power.powers; + +import me.fzzyhmstrs.fzzy_config.annotations.Translation; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class ImbuedPower extends RunefusedGemPower { + + public ImbuedPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.imbued.chance; + + int damage = (this.isGreater() ? 10 : 6) - ((stack.getDamage() / stack.getMaxDamage()) * 100) / 20; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + target.timeUntilRegen = 0; + target.damage(attacker.getDamageSources().magic(), damage); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.2f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.imbued").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.imbuedsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends TooltipSettings { + + public Settings() { + super(GemPowerRegistry.IMBUED); + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 0, max = 100) + public int chance = 15; + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/ImmolationPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/ImmolationPower.java new file mode 100644 index 00000000..325c923d --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/ImmolationPower.java @@ -0,0 +1,49 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; +import net.sweenus.simplyswords.power.RunicGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class ImmolationPower extends RunicGemPower { + + public ImmolationPower() { + super(false); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand, ItemStack itemStack) { + user.setCurrentHand(hand); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.IMMOLATION), 36000, 0), user); + user.getItemCooldownManager().set(itemStack.getItem(), 40); + world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + user.getSoundCategory(), 0.3f, 0.6f); + return TypedActionResult.consume(itemStack); + } + + @Override + public int getMaxUseTime(ItemStack stack) { + return 1; + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip1").setStyle(Styles.RUNIC)); + tooltip.add(Text.literal("")); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.immolationsworditem.tooltip4").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/MomentumPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/MomentumPower.java new file mode 100644 index 00000000..c4ad57ed --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/MomentumPower.java @@ -0,0 +1,74 @@ +package net.sweenus.simplyswords.power.powers; + +import me.fzzyhmstrs.fzzy_config.annotations.Translation; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.minecraft.world.World; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.power.RunicGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class MomentumPower extends RunicGemPower { + + public MomentumPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) { + int skillCooldown = Config.gemPowers.momentum.cooldown; + + if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && user.isOnGround()) { + //Player dash forward + if (remainingUseTicks == (this.isGreater() ? 10 : 12) || remainingUseTicks == 13 && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { + user.setVelocity(user.getRotationVector().multiply(+3)); + user.setVelocity(user.getVelocity().x, 0, user.getVelocity().z); // Prevent player flying to the heavens + user.velocityModified = true; + if (user instanceof PlayerEntity player) { + player.getItemCooldownManager().set(stack.getItem(), skillCooldown); + } + } + } + } + + @Override + public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) { + if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { + user.setVelocity(0, 0, 0); // Stop player at end of charge + user.velocityModified = true; + } + } + + @Override + public int getMaxUseTime(ItemStack stack) { + return 15; + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip1").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.momentumsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends TooltipSettings { + + public Settings() { + super(GemPowerRegistry.MOMENTUM); + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 1) + public int cooldown = 140; + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/NullificationPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/NullificationPower.java new file mode 100644 index 00000000..6a55f652 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/NullificationPower.java @@ -0,0 +1,64 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.entity.BattleStandardEntity; +import net.sweenus.simplyswords.power.NetherGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.EntityRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class NullificationPower extends NetherGemPower { + + public NullificationPower() { + super(false); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + if (!attacker.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.BATTLE_FATIGUE))) { + if (!attacker.getWorld().isClient()) { + ServerWorld serverWorld = (ServerWorld) attacker.getWorld(); + BlockState currentState = serverWorld.getBlockState(attacker.getBlockPos().up(4).offset(attacker.getMovementDirection(), 3)); + BlockState state = Blocks.AIR.getDefaultState(); + if (currentState == state) { + serverWorld.playSoundFromEntity(null, attacker, SoundRegistry.ELEMENTAL_SWORD_EARTH_ATTACK_01.get(), + attacker.getSoundCategory(), 0.4f, 0.8f); + BattleStandardEntity banner = EntityRegistry.BATTLESTANDARD.get().spawn( + serverWorld, + attacker.getBlockPos().up(4).offset(attacker.getMovementDirection(), 3), + SpawnReason.MOB_SUMMONED); + if (banner != null) { + banner.setVelocity(0, -1, 0); + banner.ownerEntity = attacker; + banner.decayRate = 3; + banner.standardType = "nullification"; + banner.setCustomName(Text.translatable("entity.simplyswords.battlestandard.name", attacker.getName())); + } + attacker.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.BATTLE_FATIGUE), 800, 0), attacker); + } + } + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification").setStyle(Styles.NETHERFUSED)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.nullification.description5").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/OnslaughtPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/OnslaughtPower.java new file mode 100644 index 00000000..180b05ce --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/OnslaughtPower.java @@ -0,0 +1,39 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.power.NetherGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class OnslaughtPower extends NetherGemPower { + + public OnslaughtPower() { + super(false); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + if (target.hasStatusEffect(StatusEffects.SLOWNESS) && !attacker.hasStatusEffect(StatusEffects.WEAKNESS)) { + attacker.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.ONSLAUGHT), 80, 0), attacker); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught").setStyle(Styles.NETHERFUSED)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description4").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description5").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.onslaught.description6").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/PincushionPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/PincushionPower.java new file mode 100644 index 00000000..f7b766c2 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/PincushionPower.java @@ -0,0 +1,37 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class PincushionPower extends RunefusedGemPower { + + public PincushionPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int stuckArrows = attacker.getStuckArrowCount(); + target.damage(attacker.getDamageSources().generic(), (this.isGreater() ? stuckArrows * 2 : stuckArrows)); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.pincushion").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.pincushionsworditem.tooltip3").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/RadiancePower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/RadiancePower.java new file mode 100644 index 00000000..d7bf4d38 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/RadiancePower.java @@ -0,0 +1,36 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.power.NetherGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class RadiancePower extends NetherGemPower { + + public RadiancePower() { + super(false); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + if (target.hasStatusEffect(StatusEffects.WEAKNESS)) { + attacker.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.IMMOLATION), 200, 4), attacker); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance").setStyle(Styles.NETHERFUSED)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.netherfused_power.radiance.description3").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/ShieldingPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/ShieldingPower.java new file mode 100644 index 00000000..126d97ef --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/ShieldingPower.java @@ -0,0 +1,53 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class ShieldingPower extends RunefusedGemPower { + + public ShieldingPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.shielding.chance; + int duration = Config.gemPowers.shielding.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.ABSORPTION, duration, this.isGreater() ? 1 : 0), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.float").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.shieldingsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 120, GemPowerRegistry.SHIELDING); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/SlowPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/SlowPower.java new file mode 100644 index 00000000..e7f3988b --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/SlowPower.java @@ -0,0 +1,55 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class SlowPower extends RunefusedGemPower { + + public SlowPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.slow.chance; + int duration = Config.gemPowers.slow.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 2), attacker); + if (this.isGreater()) { + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.slow").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.slownesssworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(50, 50, GemPowerRegistry.SLOW); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/StoneskinPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/StoneskinPower.java new file mode 100644 index 00000000..61687e65 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/StoneskinPower.java @@ -0,0 +1,55 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class StoneskinPower extends RunefusedGemPower { + + public StoneskinPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.stoneskin.chance; + int duration = Config.gemPowers.stoneskin.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration, this.isGreater() ? 2 : 1), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, duration, 0), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, this.isGreater() ? 1 : 0), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.ELEMENTAL_SWORD_EARTH_ATTACK_02.get(), + attacker.getSoundCategory(), 0.3f, this.isGreater() ? 1.1f : 1.3f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.stoneskin").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.stoneskinsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 60, GemPowerRegistry.STONESKIN); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/SwiftnessPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/SwiftnessPower.java new file mode 100644 index 00000000..193f0eb1 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/SwiftnessPower.java @@ -0,0 +1,53 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class SwiftnessPower extends RunefusedGemPower { + + public SwiftnessPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.swiftness.chance; + int duration = Config.gemPowers.swiftness.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, this.isGreater() ? 1 : 0), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.swiftness").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.speedsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 300, GemPowerRegistry.SWIFTNESS); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/TrailblazePower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/TrailblazePower.java new file mode 100644 index 00000000..bc22a98b --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/TrailblazePower.java @@ -0,0 +1,54 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class TrailblazePower extends RunefusedGemPower { + + public TrailblazePower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.trailblaze.chance; + int duration = Config.gemPowers.trailblaze.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, this.isGreater() ? 2 : 1), attacker); + attacker.setOnFireFor(duration / 20f); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.trailblaze").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.trailblazesworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 120, GemPowerRegistry.TRAILBLAZE); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/UnstablePower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/UnstablePower.java new file mode 100644 index 00000000..fea00fb1 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/UnstablePower.java @@ -0,0 +1,84 @@ +package net.sweenus.simplyswords.power.powers; + +import me.fzzyhmstrs.fzzy_config.annotations.Translation; +import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.minecraft.world.World; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.TooltipSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class UnstablePower extends RunefusedGemPower { + + public UnstablePower() { + super(false); + } + + @Override + public void inventoryTick(ItemStack stack, World world, LivingEntity user, int slot, boolean selected) { + int duration = Config.gemPowers.unstable.duration; + int frequency = Config.gemPowers.unstable.frequency; + + if (user.age % frequency == 0) { + int random = (int) (Math.random() * 100); + if (random < 10) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration)); + else if (random < 20) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration)); + else if (random < 30) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, duration)); + else if (random < 40) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.INVISIBILITY, duration)); + else if (random < 50) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, duration)); + else if (random < 60) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.JUMP_BOOST, duration)); + else if (random < 70) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration)); + else if (random < 80) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.DOLPHINS_GRACE, duration)); + else if (random < 90) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, duration)); + else if (random < 95) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, duration)); + else if (random < 100) + user.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOW_FALLING, duration)); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.unstable").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.unstablesworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends TooltipSettings { + + public Settings() { + super(GemPowerRegistry.UNSTABLE); + } + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 1) + public int frequency = 140; + + @Translation(prefix = "simplyswords.config.basic_settings") + @ValidatedInt.Restrict(min = 0) + public int duration = 140; + } + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/WardPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/WardPower.java new file mode 100644 index 00000000..69e51ba0 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/WardPower.java @@ -0,0 +1,50 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.minecraft.util.Hand; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; +import net.sweenus.simplyswords.power.RunicGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class WardPower extends RunicGemPower { + + public WardPower() { + super(false); + } + + @Override + public TypedActionResult use(World world, PlayerEntity user, Hand hand, ItemStack itemStack) { + user.setCurrentHand(hand); + user.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.WARD), 120, 0), user); + user.getItemCooldownManager().set(itemStack.getItem(), 120); + user.setHealth(user.getHealth() / 2); + world.playSoundFromEntity(null, user, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + user.getSoundCategory(), 0.3f, 1.2f); + return TypedActionResult.consume(itemStack); + } + + @Override + public int getMaxUseTime(ItemStack stack) { + return 1; + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip1").setStyle(Styles.RUNIC)); + tooltip.add(Text.literal("")); + tooltip.add(Text.translatable("item.simplyswords.onrightclick").setStyle(Styles.RIGHT_CLICK)); + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip3").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wardsworditem.tooltip4").setStyle(Styles.TEXT)); + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/WeakenPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/WeakenPower.java new file mode 100644 index 00000000..cabca252 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/WeakenPower.java @@ -0,0 +1,54 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class WeakenPower extends RunefusedGemPower { + + public WeakenPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.weaken.chance; + int duration = Config.gemPowers.weaken.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, duration, this.isGreater() ? 1 : 0), attacker); + target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, this.isGreater() ? 2 : 1), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.weaken").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.weakensworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 120, GemPowerRegistry.WEAKEN); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/WildfirePower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/WildfirePower.java new file mode 100644 index 00000000..44613bea --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/WildfirePower.java @@ -0,0 +1,53 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationRadiusSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.EffectRegistry; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class WildfirePower extends RunefusedGemPower { + + public WildfirePower() { + super(false); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.wildfire.chance; + int duration = Config.gemPowers.wildfire.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + target.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.WILDFIRE), duration, 3), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.wildfire").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.wildfiresworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationRadiusSettings { + + public Settings() { + super(10, 180, 10.0, GemPowerRegistry.WILDFIRE); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/power/powers/ZephyrPower.java b/common/src/main/java/net/sweenus/simplyswords/power/powers/ZephyrPower.java new file mode 100644 index 00000000..9ffed1dc --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/power/powers/ZephyrPower.java @@ -0,0 +1,54 @@ +package net.sweenus.simplyswords.power.powers; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; +import net.minecraft.text.Text; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.config.settings.ChanceDurationSettings; +import net.sweenus.simplyswords.power.RunefusedGemPower; +import net.sweenus.simplyswords.registry.GemPowerRegistry; +import net.sweenus.simplyswords.registry.SoundRegistry; +import net.sweenus.simplyswords.util.Styles; + +import java.util.List; + +public class ZephyrPower extends RunefusedGemPower { + + public ZephyrPower(boolean isGreater) { + super(isGreater); + } + + @Override + public void postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) { + int hitChance = Config.gemPowers.zephyr.chance; + int duration = Config.gemPowers.zephyr.duration; + + if (attacker.getRandom().nextInt(100) <= hitChance) { + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, this.isGreater() ? 1 : 0), attacker); + attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, this.isGreater() ? 1 : 0), attacker); + attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), + attacker.getSoundCategory(), 0.1f, 1.8f); + } + } + + @Override + public void appendTooltip(ItemStack itemStack, Item.TooltipContext tooltipContext, List tooltip, TooltipType type, boolean isRunic) { + if (isRunic) + tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip1").setStyle(Styles.RUNIC)); + else + tooltip.add(Text.translatable("item.simplyswords.uniquesworditem.runefused_power.zephyr").setStyle(Styles.RUNIC)); + tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip2").setStyle(Styles.TEXT)); + tooltip.add(Text.translatable("item.simplyswords.zephyrsworditem.tooltip3").setStyle(Styles.TEXT)); + } + + public static class Settings extends ChanceDurationSettings { + + public Settings() { + super(15, 180, GemPowerRegistry.ZEPHYR); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/registry/ComponentTypeRegistry.java b/common/src/main/java/net/sweenus/simplyswords/registry/ComponentTypeRegistry.java new file mode 100644 index 00000000..f13ee92b --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/registry/ComponentTypeRegistry.java @@ -0,0 +1,29 @@ +package net.sweenus.simplyswords.registry; + +import dev.architectury.registry.registries.DeferredRegister; +import dev.architectury.registry.registries.RegistrySupplier; +import net.minecraft.component.ComponentType; +import net.minecraft.registry.RegistryKeys; +import net.sweenus.simplyswords.SimplySwords; +import net.sweenus.simplyswords.item.component.ChargedLocationComponent; +import net.sweenus.simplyswords.item.component.MoltenParticleComponent; +import net.sweenus.simplyswords.item.component.ParryComponent; +import net.sweenus.simplyswords.item.component.RelocationComponent; +import net.sweenus.simplyswords.item.component.StoredChargeComponent; +import net.sweenus.simplyswords.item.component.TargetedLocationComponent; +import net.sweenus.simplyswords.power.GemPowerComponent; + +public class ComponentTypeRegistry { + + public static final DeferredRegister> COMPONENT_TYPES = DeferredRegister.create(SimplySwords.MOD_ID, RegistryKeys.DATA_COMPONENT_TYPE); + + public static final RegistrySupplier> GEM_POWER = COMPONENT_TYPES.register("gem_power", () -> ComponentType.builder().codec(GemPowerComponent.CODEC).packetCodec(GemPowerComponent.PACKET_CODEC).build()); + public static final RegistrySupplier> STORED_CHARGE = COMPONENT_TYPES.register("stored_charge", () -> ComponentType.builder().codec(StoredChargeComponent.CODEC).packetCodec(StoredChargeComponent.PACKET_CODEC).build()); + public static final RegistrySupplier> STORED_BONUS = COMPONENT_TYPES.register("stored_bonus", () -> ComponentType.builder().codec(StoredChargeComponent.CODEC).packetCodec(StoredChargeComponent.PACKET_CODEC).build()); + public static final RegistrySupplier> CHARGED_LOCATION = COMPONENT_TYPES.register("charged_location", () -> ComponentType.builder().codec(ChargedLocationComponent.CODEC).packetCodec(ChargedLocationComponent.PACKET_CODEC).build()); + public static final RegistrySupplier> TARGETED_LOCATION = COMPONENT_TYPES.register("targeted_location", () -> ComponentType.builder().codec(TargetedLocationComponent.CODEC).packetCodec(TargetedLocationComponent.PACKET_CODEC).build()); + public static final RegistrySupplier> RELOCATION = COMPONENT_TYPES.register("relocation", () -> ComponentType.builder().codec(RelocationComponent.CODEC).packetCodec(RelocationComponent.PACKET_CODEC).build()); + public static final RegistrySupplier> MOLTEN_PARTICLE = COMPONENT_TYPES.register("molten_particle", () -> ComponentType.builder().codec(MoltenParticleComponent.CODEC).packetCodec(MoltenParticleComponent.PACKET_CODEC).build()); + public static final RegistrySupplier> PARRY = COMPONENT_TYPES.register("parry", () -> ComponentType.builder().codec(ParryComponent.CODEC).packetCodec(ParryComponent.PACKET_CODEC).build()); + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/registry/EffectRegistry.java b/common/src/main/java/net/sweenus/simplyswords/registry/EffectRegistry.java index a6097dd8..58d16151 100644 --- a/common/src/main/java/net/sweenus/simplyswords/registry/EffectRegistry.java +++ b/common/src/main/java/net/sweenus/simplyswords/registry/EffectRegistry.java @@ -7,15 +7,46 @@ import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectCategory; import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.util.Identifier; import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.effect.*; +import net.sweenus.simplyswords.effect.AstralShiftEffect; +import net.sweenus.simplyswords.effect.BattleFatigueEffect; +import net.sweenus.simplyswords.effect.EchoEffect; +import net.sweenus.simplyswords.effect.ElementalVortexEffect; +import net.sweenus.simplyswords.effect.FatalFlickerEffect; +import net.sweenus.simplyswords.effect.FireVortexEffect; +import net.sweenus.simplyswords.effect.FlameSeedEffect; +import net.sweenus.simplyswords.effect.FreezeEffect; +import net.sweenus.simplyswords.effect.FrenzyEffect; +import net.sweenus.simplyswords.effect.FrostVortexEffect; +import net.sweenus.simplyswords.effect.ImmolationEffect; +import net.sweenus.simplyswords.effect.MagislamEffect; +import net.sweenus.simplyswords.effect.MagistormEffect; +import net.sweenus.simplyswords.effect.OnslaughtEffect; +import net.sweenus.simplyswords.effect.PainEffect; +import net.sweenus.simplyswords.effect.ResilienceEffect; +import net.sweenus.simplyswords.effect.RibboncleaveEffect; +import net.sweenus.simplyswords.effect.RibbonwrathEffect; +import net.sweenus.simplyswords.effect.SmoulderingEffect; +import net.sweenus.simplyswords.effect.SporeSwarmEffect; +import net.sweenus.simplyswords.effect.StormEffect; +import net.sweenus.simplyswords.effect.VoidAssaultEffect; +import net.sweenus.simplyswords.effect.VoidcloakEffect; +import net.sweenus.simplyswords.effect.WardEffect; +import net.sweenus.simplyswords.effect.WildfireEffect; public class EffectRegistry { public static final DeferredRegister EFFECT = DeferredRegister.create(SimplySwords.MOD_ID, RegistryKeys.STATUS_EFFECT); + //This is currently REQUIRED as a wrapper around a call to one of the effects below, since Architectury has a bug involving RegistrySuppliers not being able to save properly. + //Once they fix that bug, this could be removed (but also works fine as is) + public static RegistryEntry getReference(RegistrySupplier input) { + return EFFECT.getRegistrar().getHolder(input.getId()); + } + public static final RegistrySupplier WILDFIRE = EFFECT.register("wildfire", () -> new WildfireEffect(StatusEffectCategory.HARMFUL, 1124687)); public static final RegistrySupplier STORM = EFFECT.register("storm", () -> @@ -40,39 +71,39 @@ public class EffectRegistry { public static final RegistrySupplier FRENZY = EFFECT.register("frenzy", () -> new FrenzyEffect(StatusEffectCategory.BENEFICIAL, 1124687) .addAttributeModifier(EntityAttributes.GENERIC_ATTACK_SPEED, - "54e1b9b9-6de9-49bb-a716-564b3d375892", + Identifier.of("54e1b9b9-6de9-49bb-a716-564b3d375892"), 0.8, - EntityAttributeModifier.Operation.MULTIPLY_TOTAL)); + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); public static final RegistrySupplier VOIDCLOAK = EFFECT.register("voidcloak", () -> new VoidcloakEffect(StatusEffectCategory.BENEFICIAL, 1124687) .addAttributeModifier(EntityAttributes.GENERIC_ATTACK_SPEED, - "d07f34ad-6367-4a86-b47a-736947e2c008", + Identifier.of("d07f34ad-6367-4a86-b47a-736947e2c008"), 0.1, - EntityAttributeModifier.Operation.MULTIPLY_TOTAL)); + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); public static final RegistrySupplier VOIDASSAULT = EFFECT.register("void_assault", () -> new VoidAssaultEffect(StatusEffectCategory.HARMFUL, 1124687)); public static final RegistrySupplier FIRE_VORTEX = EFFECT.register("fire_vortex", () -> new FireVortexEffect(StatusEffectCategory.HARMFUL, 1124687) .addAttributeModifier(EntityAttributes.GENERIC_ARMOR, - "f20d79bc-5f73-49d3-9e3f-30bf9a8da15a", + Identifier.of("f20d79bc-5f73-49d3-9e3f-30bf9a8da15a"), -0.01, - EntityAttributeModifier.Operation.MULTIPLY_TOTAL) + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL) .addAttributeModifier(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, - "3f68cd63-6fc5-4a23-87bd-c5902579d9db", + Identifier.of("3f68cd63-6fc5-4a23-87bd-c5902579d9db"), 85, - EntityAttributeModifier.Operation.MULTIPLY_TOTAL)); + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); public static final RegistrySupplier FROST_VORTEX = EFFECT.register("frost_vortex", () -> new FrostVortexEffect(StatusEffectCategory.HARMFUL, 1124687) .addAttributeModifier(EntityAttributes.GENERIC_MOVEMENT_SPEED, - "d0814391-9325-441e-bc7e-ace3f8f89a21", + Identifier.of("d0814391-9325-441e-bc7e-ace3f8f89a21"), -0.01, - EntityAttributeModifier.Operation.MULTIPLY_TOTAL) + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL) .addAttributeModifier(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, - "8b1fc18c-9539-4718-af61-224d0ccd274f", + Identifier.of("8b1fc18c-9539-4718-af61-224d0ccd274f"), 85, - EntityAttributeModifier.Operation.MULTIPLY_TOTAL)); + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); public static final RegistrySupplier ELEMENTAL_VORTEX = EFFECT.register("elemental_vortex", () -> new ElementalVortexEffect(StatusEffectCategory.BENEFICIAL, 1124687)); @@ -83,20 +114,20 @@ public class EffectRegistry { public static final RegistrySupplier RIBBONWRATH = EFFECT.register("ribbonwrath", () -> new RibbonwrathEffect(StatusEffectCategory.HARMFUL, 1124687) .addAttributeModifier(EntityAttributes.GENERIC_MOVEMENT_SPEED, - "325de159-03bd-421c-8dd0-53e0090857ed", + Identifier.of("325de159-03bd-421c-8dd0-53e0090857ed"), -0.05, - EntityAttributeModifier.Operation.MULTIPLY_TOTAL)); + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); public static final RegistrySupplier RIBBONCLEAVE = EFFECT.register("ribboncleave", () -> new RibboncleaveEffect(StatusEffectCategory.BENEFICIAL, 1124687) .addAttributeModifier(EntityAttributes.GENERIC_ATTACK_DAMAGE, - "c8fb5e9f-c446-4475-b73f-a2290196210f", - Config.getFloat("ribbonwrathDamageBonusPercent", "UniqueEffects", ConfigDefaultValues.ribbonwrathDamageBonusPercent), - EntityAttributeModifier.Operation.MULTIPLY_TOTAL) + Identifier.of("c8fb5e9f-c446-4475-b73f-a2290196210f"), + Config.uniqueEffects.ribbonwrath.damageBonusPercent, + EntityAttributeModifier.Operation.ADD_MULTIPLIED_TOTAL) .addAttributeModifier(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, - "1b147b80-6598-48d4-917f-7da3032c070f", + Identifier.of("1b147b80-6598-48d4-917f-7da3032c070f"), 1, - EntityAttributeModifier.Operation.ADDITION)); + EntityAttributeModifier.Operation.ADD_VALUE)); public static final RegistrySupplier RESILIENCE = EFFECT.register("resilience", () -> new ResilienceEffect(StatusEffectCategory.BENEFICIAL, 1124687)); diff --git a/common/src/main/java/net/sweenus/simplyswords/registry/EntityRegistry.java b/common/src/main/java/net/sweenus/simplyswords/registry/EntityRegistry.java index 3c26b02e..74e14acf 100644 --- a/common/src/main/java/net/sweenus/simplyswords/registry/EntityRegistry.java +++ b/common/src/main/java/net/sweenus/simplyswords/registry/EntityRegistry.java @@ -20,7 +20,7 @@ public class EntityRegistry { public static final RegistrySupplier> SIMPLYBEEENTITY = ENTITIES.register( "simplybeeentity", () -> EntityType.Builder.create(SimplySwordsBeeEntity::new, SpawnGroup.CREATURE) - .build(new Identifier(SimplySwords.MOD_ID, "simplybeeentity").toString()) + .build(Identifier.of(SimplySwords.MOD_ID, "simplybeeentity").toString()) ); diff --git a/common/src/main/java/net/sweenus/simplyswords/registry/GemPowerRegistry.java b/common/src/main/java/net/sweenus/simplyswords/registry/GemPowerRegistry.java new file mode 100644 index 00000000..0910b52a --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/registry/GemPowerRegistry.java @@ -0,0 +1,105 @@ +package net.sweenus.simplyswords.registry; + +import dev.architectury.registry.registries.Registrar; +import dev.architectury.registry.registries.RegistrarManager; +import dev.architectury.registry.registries.RegistrySupplier; +import dev.architectury.registry.registries.options.DefaultIdRegistrarOption; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.SimplySwords; +import net.sweenus.simplyswords.config.Config; +import net.sweenus.simplyswords.power.GemPower; +import net.sweenus.simplyswords.power.PowerType; +import net.sweenus.simplyswords.power.powers.ActiveDefencePower; +import net.sweenus.simplyswords.power.powers.BerserkPower; +import net.sweenus.simplyswords.power.powers.EchoPower; +import net.sweenus.simplyswords.power.powers.FloatPower; +import net.sweenus.simplyswords.power.powers.FreezePower; +import net.sweenus.simplyswords.power.powers.FrostWardPower; +import net.sweenus.simplyswords.power.powers.ImbuedPower; +import net.sweenus.simplyswords.power.powers.ImmolationPower; +import net.sweenus.simplyswords.power.powers.MomentumPower; +import net.sweenus.simplyswords.power.powers.NullificationPower; +import net.sweenus.simplyswords.power.powers.OnslaughtPower; +import net.sweenus.simplyswords.power.powers.PincushionPower; +import net.sweenus.simplyswords.power.powers.RadiancePower; +import net.sweenus.simplyswords.power.powers.ShieldingPower; +import net.sweenus.simplyswords.power.powers.SlowPower; +import net.sweenus.simplyswords.power.powers.StoneskinPower; +import net.sweenus.simplyswords.power.powers.SwiftnessPower; +import net.sweenus.simplyswords.power.powers.TrailblazePower; +import net.sweenus.simplyswords.power.powers.UnstablePower; +import net.sweenus.simplyswords.power.powers.WardPower; +import net.sweenus.simplyswords.power.powers.WeakenPower; +import net.sweenus.simplyswords.power.powers.WildfirePower; +import net.sweenus.simplyswords.power.powers.ZephyrPower; +import net.sweenus.simplyswords.util.HelperMethods; + +import java.util.List; +import java.util.function.Supplier; + +public class GemPowerRegistry { + + public static void register() {} + + public static Registrar REGISTRY = RegistrarManager.get("simplyswords") + .builder(Identifier.of(SimplySwords.MOD_ID, "gem_power")) + .option(new DefaultIdRegistrarOption(Identifier.of(SimplySwords.MOD_ID, "empty_power"))) + .build(); + + private static RegistrySupplier register(String path, Supplier power) { + return REGISTRY.register(Identifier.of(SimplySwords.MOD_ID, path), power); + } + + public static List> getPowers(PowerType powerType) { + return powerType.getEntries().stream().filter(entry -> !Config.gemPowers.disabledPowers.contains(entry.getId())).toList(); + } + + public static RegistryEntry gemRandomPower(PowerType powerType) { + List> powers = getPowers(powerType); + if (powers.isEmpty()) { + return EMPTY; + } + return powers.get(HelperMethods.random().nextInt(powers.size())); + } + + public static RegistrySupplier EMPTY = register("empty_power", () -> GemPower.EMPTY); + + public static RegistrySupplier ACTIVE_DEFENCE = register("active_defence", ActiveDefencePower::new); + public static RegistrySupplier FLOAT = register("float", () -> new FloatPower(false)); + public static RegistrySupplier GREATER_FLOAT = register("greater_float", () -> new FloatPower(true)); + public static RegistrySupplier FREEZE = register("freeze", FreezePower::new); + public static RegistrySupplier SHIELDING = register("shielding", () -> new ShieldingPower(false)); + public static RegistrySupplier GREATER_SHIELDING = register("greater_shielding", () -> new ShieldingPower(true)); + public static RegistrySupplier SLOW = register("slow", () -> new SlowPower(false)); + public static RegistrySupplier GREATER_SLOW = register("greater_slow", () -> new SlowPower(true)); + public static RegistrySupplier STONESKIN = register("stoneskin", () -> new StoneskinPower(false)); + public static RegistrySupplier GREATER_STONESKIN = register("greater_stoneskin", () -> new StoneskinPower(true)); + public static RegistrySupplier SWIFTNESS = register("swiftness", () -> new SwiftnessPower(false)); + public static RegistrySupplier GREATER_SWIFTNESS = register("greater_swiftness", () -> new SwiftnessPower(true)); + public static RegistrySupplier TRAILBLAZE = register("trailblaze", () -> new TrailblazePower(false)); + public static RegistrySupplier GREATER_TRAILBLAZE = register("greater_trailblaze", () -> new TrailblazePower(true)); + public static RegistrySupplier WEAKEN = register("weaken", () -> new WeakenPower(false)); + public static RegistrySupplier GREATER_WEAKEN = register("greater_weaken", () -> new WeakenPower(true)); + public static RegistrySupplier ZEPHYR = register("zephyr", () -> new ZephyrPower(false)); + public static RegistrySupplier GREATER_ZEPHYR = register("greater_zephyr", () -> new ZephyrPower(true)); + public static RegistrySupplier FROST_WARD = register("frost_ward", FrostWardPower::new); + public static RegistrySupplier WILDFIRE = register("wildfire", WildfirePower::new); + public static RegistrySupplier UNSTABLE = register("unstable", UnstablePower::new); + public static RegistrySupplier IMBUED = register("imbued", () -> new ImbuedPower(false)); + public static RegistrySupplier GREATER_IMBUED = register("greater_imbued", () -> new ImbuedPower(true)); + public static RegistrySupplier PINCUSHION = register("pincushion", () -> new PincushionPower(false)); + public static RegistrySupplier GREATER_PINCUSHION = register("greater_pincushion", () -> new PincushionPower(true)); + + public static RegistrySupplier MOMENTUM = register("momentum", () -> new MomentumPower(false)); + public static RegistrySupplier GREATER_MOMENTUM = register("greater_momentum", () -> new MomentumPower(true)); + public static RegistrySupplier WARD = register("ward", WardPower::new); + public static RegistrySupplier IMMOLATION = register("immolation", ImmolationPower::new); + + public static RegistrySupplier ECHO = register("echo", EchoPower::new); + public static RegistrySupplier BERSERK = register("berserk", BerserkPower::new); + public static RegistrySupplier RADIANCE = register("radiance", RadiancePower::new); + public static RegistrySupplier ONSLAUGHT = register("onslaught", OnslaughtPower::new); + public static RegistrySupplier NULLIFICATION = register("nullification", NullificationPower::new); + +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/registry/ItemsRegistry.java b/common/src/main/java/net/sweenus/simplyswords/registry/ItemsRegistry.java index e958d007..e0ad3b85 100644 --- a/common/src/main/java/net/sweenus/simplyswords/registry/ItemsRegistry.java +++ b/common/src/main/java/net/sweenus/simplyswords/registry/ItemsRegistry.java @@ -9,155 +9,183 @@ import net.minecraft.util.Rarity; import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.item.*; -import net.sweenus.simplyswords.item.custom.*; - +import net.sweenus.simplyswords.item.ContainedRemnantItem; +import net.sweenus.simplyswords.item.EmpoweredRemnantItem; +import net.sweenus.simplyswords.item.ModToolMaterial; +import net.sweenus.simplyswords.item.NetherfusedGemItem; +import net.sweenus.simplyswords.item.RunefusedGemItem; +import net.sweenus.simplyswords.item.RunicSwordItem; +import net.sweenus.simplyswords.item.RunicTabletItem; +import net.sweenus.simplyswords.item.SimplySwordsNetheriteSwordItem; +import net.sweenus.simplyswords.item.SimplySwordsSwordItem; +import net.sweenus.simplyswords.item.custom.ArcanethystSwordItem; +import net.sweenus.simplyswords.item.custom.BrambleSwordItem; +import net.sweenus.simplyswords.item.custom.BrimstoneClaymoreItem; +import net.sweenus.simplyswords.item.custom.CaelestisSwordItem; +import net.sweenus.simplyswords.item.custom.DormantRelicSwordItem; +import net.sweenus.simplyswords.item.custom.EmberIreSwordItem; +import net.sweenus.simplyswords.item.custom.EmberlashSwordItem; +import net.sweenus.simplyswords.item.custom.EnigmaSwordItem; +import net.sweenus.simplyswords.item.custom.FlamewindSwordItem; +import net.sweenus.simplyswords.item.custom.FrostfallSwordItem; +import net.sweenus.simplyswords.item.custom.HarbingerSwordItem; +import net.sweenus.simplyswords.item.custom.HearthflameSwordItem; +import net.sweenus.simplyswords.item.custom.HiveheartSwordItem; +import net.sweenus.simplyswords.item.custom.IcewhisperSwordItem; +import net.sweenus.simplyswords.item.custom.LichbladeSwordItem; +import net.sweenus.simplyswords.item.custom.LivyatanSwordItem; +import net.sweenus.simplyswords.item.custom.MagibladeSwordItem; +import net.sweenus.simplyswords.item.custom.MagiscytheSwordItem; +import net.sweenus.simplyswords.item.custom.MagispearSwordItem; +import net.sweenus.simplyswords.item.custom.MoltenEdgeSwordItem; +import net.sweenus.simplyswords.item.custom.PlagueSwordItem; +import net.sweenus.simplyswords.item.custom.RibboncleaverSwordItem; +import net.sweenus.simplyswords.item.custom.RighteousRelicSwordItem; +import net.sweenus.simplyswords.item.custom.ShadowstingSwordItem; +import net.sweenus.simplyswords.item.custom.SoulPyreSwordItem; +import net.sweenus.simplyswords.item.custom.SoulkeeperSwordItem; +import net.sweenus.simplyswords.item.custom.SoulrenderSwordItem; +import net.sweenus.simplyswords.item.custom.StarsEdgeSwordItem; +import net.sweenus.simplyswords.item.custom.StealSwordItem; +import net.sweenus.simplyswords.item.custom.StormSwordItem; +import net.sweenus.simplyswords.item.custom.StormbringerSwordItem; +import net.sweenus.simplyswords.item.custom.StormsEdgeSwordItem; +import net.sweenus.simplyswords.item.custom.SunfireSwordItem; +import net.sweenus.simplyswords.item.custom.TaintedRelicSwordItem; +import net.sweenus.simplyswords.item.custom.TempestSwordItem; +import net.sweenus.simplyswords.item.custom.ThunderbrandSwordItem; +import net.sweenus.simplyswords.item.custom.TwistedBladeItem; +import net.sweenus.simplyswords.item.custom.WatcherClaymoreItem; +import net.sweenus.simplyswords.item.custom.WatchingWarglaiveItem; +import net.sweenus.simplyswords.item.custom.WaxweaverSwordItem; +import net.sweenus.simplyswords.item.custom.WhisperwindSwordItem; +import net.sweenus.simplyswords.item.custom.WickpiercerSwordItem; + +@SuppressWarnings({"SpellCheckingInspection", "UnstableApiUsage"}) public class ItemsRegistry { - static float iron_modifier = Config.getFloat("iron_damageModifier", "WeaponAttributes", ConfigDefaultValues.iron_damageModifier); - static float gold_modifier = Config.getFloat("gold_damageModifier", "WeaponAttributes", ConfigDefaultValues.gold_damageModifier); - static float diamond_modifier = Config.getFloat("diamond_damageModifier", "WeaponAttributes", ConfigDefaultValues.diamond_damageModifier); - static float netherite_modifier = Config.getFloat("netherite_damageModifier", "WeaponAttributes", ConfigDefaultValues.netherite_damageModifier); - static float runic_modifier = Config.getFloat("runic_damageModifier", "WeaponAttributes", ConfigDefaultValues.runic_damageModifier); - - - static float longsword_positive_modifier = Config.getFloat("longsword_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.longsword_positiveDamageModifier); - static float twinblade_positive_modifier = Config.getFloat("twinblade_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.twinblade_positiveDamageModifier); - static float rapier_positive_modifier = Config.getFloat("rapier_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.rapier_positiveDamageModifier); - static float katana_positive_modifier = Config.getFloat("katana_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.katana_positiveDamageModifier); - static float sai_positive_modifier = Config.getFloat("sai_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.sai_positiveDamageModifier); - static float spear_positive_modifier = Config.getFloat("spear_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.spear_positiveDamageModifier); - static float glaive_positive_modifier = Config.getFloat("glaive_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.glaive_positiveDamageModifier); - static float warglaive_positive_modifier = Config.getFloat("warglaive_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.warglaive_positiveDamageModifier); - static float cutlass_positive_modifier = Config.getFloat("cutlass_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.cutlass_positiveDamageModifier); - static float claymore_positive_modifier = Config.getFloat("claymore_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.claymore_positiveDamageModifier); - static float greataxe_positive_modifier = Config.getFloat("greataxe_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.greataxe_positiveDamageModifier); - static float greathammer_positive_modifier = Config.getFloat("greathammer_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.greathammer_positiveDamageModifier); - static float chakram_positive_modifier = Config.getFloat("chakram_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.chakram_positiveDamageModifier); - static float scythe_positive_modifier = Config.getFloat("scythe_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.scythe_positiveDamageModifier); - static float halberd_positive_modifier = Config.getFloat("halberd_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.halberd_positiveDamageModifier); - - static float longsword_negative_modifier = Config.getFloat("longsword_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.longsword_negativeDamageModifier); - static float twinblade_negative_modifier = Config.getFloat("twinblade_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.twinblade_negativeDamageModifier); - static float rapier_negative_modifier = Config.getFloat("rapier_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.rapier_negativeDamageModifier); - static float sai_negative_modifier = Config.getFloat("sai_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.sai_negativeDamageModifier); - static float spear_negative_modifier = Config.getFloat("spear_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.spear_negativeDamageModifier); - static float katana_negative_modifier = Config.getFloat("katana_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.katana_negativeDamageModifier); - static float glaive_negative_modifier = Config.getFloat("glaive_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.glaive_negativeDamageModifier); - static float warglaive_negative_modifier = Config.getFloat("warglaive_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.warglaive_negativeDamageModifier); - static float cutlass_negative_modifier = Config.getFloat("cutlass_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.cutlass_negativeDamageModifier); - static float claymore_negative_modifier = Config.getFloat("claymore_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.claymore_negativeDamageModifier); - static float greataxe_negative_modifier = Config.getFloat("greataxe_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.greataxe_negativeDamageModifier); - static float greathammer_negative_modifier = Config.getFloat("greathammer_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.greathammer_negativeDamageModifier); - static float chakram_negative_modifier = Config.getFloat("chakram_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.chakram_negativeDamageModifier); - static float scythe_negative_modifier = Config.getFloat("scythe_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.scythe_negativeDamageModifier); - static float halberd_negative_modifier = Config.getFloat("halberd_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.halberd_negativeDamageModifier); - - static float longsword_attackspeed = Config.getFloat("longsword_attackSpeed", "WeaponAttributes", ConfigDefaultValues.longsword_attackSpeed); - static float twinblade_attackspeed = Config.getFloat("twinblade_attackSpeed", "WeaponAttributes", ConfigDefaultValues.twinblade_attackSpeed); - static float rapier_attackspeed = Config.getFloat("rapier_attackSpeed", "WeaponAttributes", ConfigDefaultValues.rapier_attackSpeed); - static float sai_attackspeed = Config.getFloat("sai_attackSpeed", "WeaponAttributes", ConfigDefaultValues.sai_attackSpeed); - static float spear_attackspeed = Config.getFloat("spear_attackSpeed", "WeaponAttributes", ConfigDefaultValues.spear_attackSpeed); - static float katana_attackspeed = Config.getFloat("katana_attackSpeed", "WeaponAttributes", ConfigDefaultValues.katana_attackSpeed); - static float glaive_attackspeed = Config.getFloat("glaive_attackSpeed", "WeaponAttributes", ConfigDefaultValues.glaive_attackSpeed); - static float warglaive_attackspeed = Config.getFloat("warglaive_attackSpeed", "WeaponAttributes", ConfigDefaultValues.warglaive_attackSpeed); - static float cutlass_attackspeed = Config.getFloat("cutlass_attackSpeed", "WeaponAttributes", ConfigDefaultValues.cutlass_attackSpeed); - static float claymore_attackspeed = Config.getFloat("claymore_attackSpeed", "WeaponAttributes", ConfigDefaultValues.claymore_attackSpeed); - static float greataxe_attackspeed = Config.getFloat("greataxe_attackSpeed", "WeaponAttributes", ConfigDefaultValues.greataxe_attackSpeed); - static float greathammer_attackspeed = Config.getFloat("greathammer_attackSpeed", "WeaponAttributes", ConfigDefaultValues.greathammer_attackSpeed); - static float chakram_attackspeed = Config.getFloat("chakram_attackSpeed", "WeaponAttributes", ConfigDefaultValues.chakram_attackSpeed); - static float scythe_attackspeed = Config.getFloat("scythe_attackSpeed", "WeaponAttributes", ConfigDefaultValues.scythe_attackSpeed); - static float halberd_attackspeed = Config.getFloat("halberd_attackSpeed", "WeaponAttributes", ConfigDefaultValues.halberd_attackSpeed); - - static float brimstone_attackspeed = Config.getFloat("brimstone_attackSpeed", "WeaponAttributes", ConfigDefaultValues.brimstone_attackSpeed); - static float thewatcher_attackspeed = Config.getFloat("thewatcher_attackSpeed", "WeaponAttributes", ConfigDefaultValues.thewatcher_attackSpeed); - static float stormsedge_attackspeed = Config.getFloat("stormsedge_attackSpeed", "WeaponAttributes", ConfigDefaultValues.stormsedge_attackSpeed); - static float stormbringer_attackspeed = Config.getFloat("stormbringer_attackSpeed", "WeaponAttributes", ConfigDefaultValues.stormbringer_attackSpeed); - static float swordonastick_attackspeed = Config.getFloat("swordonastick_attackSpeed", "WeaponAttributes", ConfigDefaultValues.swordonastick_attackSpeed); - static float bramblethorn_attackspeed = Config.getFloat("bramblethorn_attackSpeed", "WeaponAttributes", ConfigDefaultValues.bramblethorn_attackSpeed); - static float watchingwarglaive_attackspeed = Config.getFloat("watchingwarglaive_attackSpeed", "WeaponAttributes", ConfigDefaultValues.watchingwarglaive_attackSpeed); - static float longswordofplague_attackspeed = Config.getFloat("longswordofplague_attackSpeed", "WeaponAttributes", ConfigDefaultValues.longswordofplague_attackSpeed); - static float emberblade_attackspeed = Config.getFloat("emberblade_attackSpeed", "WeaponAttributes", ConfigDefaultValues.emberblade_attackSpeed); - static float hearthflame_attackspeed = Config.getFloat("hearthflame_attackSpeed", "WeaponAttributes", ConfigDefaultValues.hearthflame_attackSpeed); - static float soulkeeper_attackspeed = Config.getFloat("soulkeeper_attackSpeed", "WeaponAttributes", ConfigDefaultValues.soulkeeper_attackSpeed); - static float twistedblade_attackspeed = Config.getFloat("twistedblade_attackSpeed", "WeaponAttributes", ConfigDefaultValues.twistedblade_attackSpeed); - static float soulstealer_attackspeed = Config.getFloat("soulstealer_attackSpeed", "WeaponAttributes", ConfigDefaultValues.soulstealer_attackSpeed); - static float soulrender_attackspeed = Config.getFloat("soulrender_attackSpeed", "WeaponAttributes", ConfigDefaultValues.soulrender_attackSpeed); - static float mjolnir_attackspeed = Config.getFloat("mjolnir_attackSpeed", "WeaponAttributes", ConfigDefaultValues.mjolnir_attackSpeed); - static float soulpyre_attackspeed = Config.getFloat("soulpyre_attackSpeed", "WeaponAttributes", ConfigDefaultValues.soulpyre_attackSpeed); - static float frostfall_attackspeed = Config.getFloat("frostfall_attackSpeed", "WeaponAttributes", ConfigDefaultValues.frostfall_attackSpeed); - static float moltenedge_attackspeed = Config.getFloat("moltenedge_attackSpeed", "WeaponAttributes", ConfigDefaultValues.moltenedge_attackSpeed); - static float livyatan_attackspeed = Config.getFloat("livyatan_attackSpeed", "WeaponAttributes", ConfigDefaultValues.livyatan_attackSpeed); - static float icewhisper_attackspeed = Config.getFloat("icewhisper_attackSpeed", "WeaponAttributes", ConfigDefaultValues.icewhisper_attackSpeed); - static float arcanethyst_attackspeed = Config.getFloat("arcanethyst_attackSpeed", "WeaponAttributes", ConfigDefaultValues.arcanethyst_attackSpeed); - static float thunderbrand_attackspeed = Config.getFloat("thunderbrand_attackSpeed", "WeaponAttributes", ConfigDefaultValues.thunderbrand_attackSpeed); - static float lichblade_attackspeed = Config.getFloat("lichblade_attackSpeed", "WeaponAttributes", ConfigDefaultValues.lichblade_attackSpeed); - static float shadowsting_attackspeed = Config.getFloat("shadowsting_attackSpeed", "WeaponAttributes", ConfigDefaultValues.shadowsting_attackSpeed); - static float sunfire_attackspeed = Config.getFloat("sunfire_attackSpeed", "WeaponAttributes", ConfigDefaultValues.sunfire_attackSpeed); - static float harbinger_attackspeed = Config.getFloat("harbinger_attackSpeed", "WeaponAttributes", ConfigDefaultValues.harbinger_attackSpeed); - static float whisperwind_attackspeed = Config.getFloat("whisperwind_attackSpeed", "WeaponAttributes", ConfigDefaultValues.whisperwind_attackSpeed); - static float emberlash_attackspeed = Config.getFloat("emberlash_attackSpeed", "WeaponAttributes", ConfigDefaultValues.emberlash_attackSpeed); - static float waxweaver_attackspeed = Config.getFloat("waxweaver_attackSpeed", "WeaponAttributes", ConfigDefaultValues.waxweaver_attackSpeed); - static float hiveheart_attackspeed = Config.getFloat("hiveheart_attackSpeed", "WeaponAttributes", ConfigDefaultValues.hiveheart_attackSpeed); - static float starsedge_attackspeed = Config.getFloat("starsedge_attackSpeed", "WeaponAttributes", ConfigDefaultValues.starsedge_attackSpeed); - static float wickpiercer_attackspeed = Config.getFloat("wickpiercer_attackSpeed", "WeaponAttributes", ConfigDefaultValues.wickpiercer_attackSpeed); - static float tempest_attackspeed = Config.getFloat("tempest_attackSpeed", "WeaponAttributes", ConfigDefaultValues.tempest_attackSpeed); - static float flamewind_attackspeed = Config.getFloat("flamewind_attackSpeed", "WeaponAttributes", ConfigDefaultValues.flamewind_attackSpeed); - static float ribboncleaver_attackspeed = Config.getFloat("ribboncleaver_attackSpeed", "WeaponAttributes", ConfigDefaultValues.ribboncleaver_attackSpeed); - static float magiscythe_attackspeed = Config.getFloat("magiscythe_attackSpeed", "WeaponAttributes", ConfigDefaultValues.magiscythe_attackSpeed); - static float enigma_attackspeed = Config.getFloat("enigma_attackSpeed", "WeaponAttributes", ConfigDefaultValues.enigma_attackSpeed); - static float magispear_attackspeed = Config.getFloat("magispear_attackSpeed", "WeaponAttributes", ConfigDefaultValues.magispear_attackSpeed); - static float magiblade_attackspeed = Config.getFloat("magiblade_attackSpeed", "WeaponAttributes", ConfigDefaultValues.magiblade_attackSpeed); - static float caelestis_attackspeed = Config.getFloat("caelestis_attackSpeed", "WeaponAttributes", ConfigDefaultValues.caelestis_attackSpeed); - - - - static float brimstone_damage_modifier = Config.getFloat("brimstone_damageModifier", "WeaponAttributes", ConfigDefaultValues.brimstone_damageModifier); - static float thewatcher_damage_modifier = Config.getFloat("thewatcher_damageModifier", "WeaponAttributes", ConfigDefaultValues.thewatcher_damageModifier); - static float stormsedge_damage_modifier = Config.getFloat("stormsedge_damageModifier", "WeaponAttributes", ConfigDefaultValues.stormsedge_damageModifier); - static float stormbringer_damage_modifier = Config.getFloat("stormbringer_damageModifier", "WeaponAttributes", ConfigDefaultValues.stormbringer_damageModifier); - static float swordonastick_damage_modifier = Config.getFloat("swordonastick_damageModifier", "WeaponAttributes", ConfigDefaultValues.swordonastick_damageModifier); - static float bramblethorn_damage_modifier = Config.getFloat("bramblethorn_damageModifier", "WeaponAttributes", ConfigDefaultValues.bramblethorn_damageModifier); - static float watchingwarglaive_damage_modifier = Config.getFloat("watchingwarglaive_damageModifier", "WeaponAttributes", ConfigDefaultValues.watchingwarglaive_damageModifier); - static float longswordofplague_damage_modifier = Config.getFloat("longswordofplague_damageModifier", "WeaponAttributes", ConfigDefaultValues.longswordofplague_damageModifier); - static float emberblade_damage_modifier = Config.getFloat("emberblade_damageModifier", "WeaponAttributes", ConfigDefaultValues.emberblade_damageModifier); - static float hearthflame_damage_modifier = Config.getFloat("hearthflame_damageModifier", "WeaponAttributes", ConfigDefaultValues.hearthflame_damageModifier); - static float soulkeeper_damage_modifier = Config.getFloat("soulkeeper_damageModifier", "WeaponAttributes", ConfigDefaultValues.soulkeeper_damageModifier); - static float twistedblade_damage_modifier = Config.getFloat("twistedblade_damageModifier", "WeaponAttributes", ConfigDefaultValues.twistedblade_damageModifier); - static float soulstealer_damage_modifier = Config.getFloat("soulstealer_damageModifier", "WeaponAttributes", ConfigDefaultValues.soulstealer_damageModifier); - static float soulrender_damage_modifier = Config.getFloat("soulrender_damageModifier", "WeaponAttributes", ConfigDefaultValues.soulrender_damageModifier); - static float mjolnir_damage_modifier = Config.getFloat("mjolnir_damageModifier", "WeaponAttributes", ConfigDefaultValues.mjolnir_damageModifier); - static float soulpyre_damage_modifier = Config.getFloat("soulpyre_damageModifier", "WeaponAttributes", ConfigDefaultValues.soulpyre_damageModifier); - static float frostfall_damage_modifier = Config.getFloat("frostfall_damageModifier", "WeaponAttributes", ConfigDefaultValues.frostfall_damageModifier); - static float moltenedge_damage_modifier = Config.getFloat("moltenedge_damageModifier", "WeaponAttributes", ConfigDefaultValues.moltenedge_damageModifier); - static float livyatan_damage_modifier = Config.getFloat("livyatan_damageModifier", "WeaponAttributes", ConfigDefaultValues.livyatan_damageModifier); - static float icewhisper_damage_modifier = Config.getFloat("icewhisper_damageModifier", "WeaponAttributes", ConfigDefaultValues.icewhisper_damageModifier); - static float arcanethyst_damage_modifier = Config.getFloat("arcanethyst_damageModifier", "WeaponAttributes", ConfigDefaultValues.arcanethyst_damageModifier); - static float thunderbrand_damage_modifier = Config.getFloat("thunderbrand_damageModifier", "WeaponAttributes", ConfigDefaultValues.thunderbrand_damageModifier); - static float lichblade_damage_modifier = Config.getFloat("lichblade_damageModifier", "WeaponAttributes", ConfigDefaultValues.lichblade_damageModifier); - static float shadowsting_damage_modifier = Config.getFloat("shadowsting_damageModifier", "WeaponAttributes", ConfigDefaultValues.shadowsting_damageModifier); - static float sunfire_damage_modifier = Config.getFloat("sunfire_damageModifier", "WeaponAttributes", ConfigDefaultValues.sunfire_damageModifier); - static float harbinger_damage_modifier = Config.getFloat("harbinger_damageModifier", "WeaponAttributes", ConfigDefaultValues.harbinger_damageModifier); - static float whisperwind_damage_modifier = Config.getFloat("whisperwind_damageModifier", "WeaponAttributes", ConfigDefaultValues.whisperwind_damageModifier); - static float emberlash_damage_modifier = Config.getFloat("emberlash_damageModifier", "WeaponAttributes", ConfigDefaultValues.emberlash_damageModifier); - static float waxweaver_damage_modifier = Config.getFloat("waxweaver_damageModifier", "WeaponAttributes", ConfigDefaultValues.waxweaver_damageModifier); - static float hiveheart_damage_modifier = Config.getFloat("hiveheart_damageModifier", "WeaponAttributes", ConfigDefaultValues.hiveheart_damageModifier); - static float starsedge_damage_modifier = Config.getFloat("starsedge_damageModifier", "WeaponAttributes", ConfigDefaultValues.starsedge_damageModifier); - static float wickpiercer_damage_modifier = Config.getFloat("wickpiercer_damageModifier", "WeaponAttributes", ConfigDefaultValues.wickpiercer_damageModifier); - static float tempest_damage_modifier = Config.getFloat("tempest_damageModifier", "WeaponAttributes", ConfigDefaultValues.tempest_damageModifier); - static float flamewind_damage_modifier = Config.getFloat("flamewind_damageModifier", "WeaponAttributes", ConfigDefaultValues.flamewind_damageModifier); - static float ribboncleaver_damage_modifier = Config.getFloat("ribboncleaver_damageModifier", "WeaponAttributes", ConfigDefaultValues.ribboncleaver_damageModifier); - static float magiscythe_damage_modifier = Config.getFloat("magiscythe_damageModifier", "WeaponAttributes", ConfigDefaultValues.magiscythe_damageModifier); - static float enigma_damage_modifier = Config.getFloat("enigma_damageModifier", "WeaponAttributes", ConfigDefaultValues.enigma_damageModifier); - static float magispear_damage_modifier = Config.getFloat("magispear_damageModifier", "WeaponAttributes", ConfigDefaultValues.magispear_damageModifier); - static float magiblade_damage_modifier = Config.getFloat("magiblade_damageModifier", "WeaponAttributes", ConfigDefaultValues.magiblade_damageModifier); - static float caelestis_damage_modifier = Config.getFloat("caelestis_damageModifier", "WeaponAttributes", ConfigDefaultValues.caelestis_damageModifier); - + static float iron_modifier = Config.weaponAttribute.materialDamageModifier.iron_damageModifier; + static float gold_modifier = Config.weaponAttribute.materialDamageModifier.gold_damageModifier; + static float diamond_modifier = Config.weaponAttribute.materialDamageModifier.diamond_damageModifier; + static float netherite_modifier = Config.weaponAttribute.materialDamageModifier.netherite_damageModifier; + static float runic_modifier = Config.weaponAttribute.materialDamageModifier.runic_damageModifier; + + static float longsword_modifier = Config.weaponAttribute.typeDamageModifier.longsword_damageModifier; + static float twinblade_modifier = Config.weaponAttribute.typeDamageModifier.twinblade_damageModifier; + static float rapier_modifier = Config.weaponAttribute.typeDamageModifier.rapier_damageModifier; + static float katana_modifier = Config.weaponAttribute.typeDamageModifier.katana_damageModifier; + static float sai_modifier = Config.weaponAttribute.typeDamageModifier.sai_damageModifier; + static float spear_modifier = Config.weaponAttribute.typeDamageModifier.spear_damageModifier; + static float glaive_modifier = Config.weaponAttribute.typeDamageModifier.glaive_damageModifier; + static float warglaive_modifier = Config.weaponAttribute.typeDamageModifier.warglaive_damageModifier; + static float cutlass_modifier = Config.weaponAttribute.typeDamageModifier.cutlass_damageModifier; + static float claymore_modifier = Config.weaponAttribute.typeDamageModifier.claymore_damageModifier; + static float greataxe_modifier = Config.weaponAttribute.typeDamageModifier.greataxe_damageModifier; + static float greathammer_modifier = Config.weaponAttribute.typeDamageModifier.greathammer_damageModifier; + static float chakram_modifier = Config.weaponAttribute.typeDamageModifier.chakram_damageModifier; + static float scythe_modifier = Config.weaponAttribute.typeDamageModifier.scythe_damageModifier; + static float halberd_modifier = Config.weaponAttribute.typeDamageModifier.halberd_damageModifier; + + static float longsword_attackspeed = Config.weaponAttribute.typeAttackSpeed.longsword_attackSpeed; + static float twinblade_attackspeed = Config.weaponAttribute.typeAttackSpeed.twinblade_attackSpeed; + static float rapier_attackspeed = Config.weaponAttribute.typeAttackSpeed.rapier_attackSpeed; + static float sai_attackspeed = Config.weaponAttribute.typeAttackSpeed.sai_attackSpeed; + static float spear_attackspeed = Config.weaponAttribute.typeAttackSpeed.spear_attackSpeed; + static float katana_attackspeed = Config.weaponAttribute.typeAttackSpeed.katana_attackSpeed; + static float glaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.glaive_attackSpeed; + static float warglaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.warglaive_attackSpeed; + static float cutlass_attackspeed = Config.weaponAttribute.typeAttackSpeed.cutlass_attackSpeed; + static float claymore_attackspeed = Config.weaponAttribute.typeAttackSpeed.claymore_attackSpeed; + static float greataxe_attackspeed = Config.weaponAttribute.typeAttackSpeed.greataxe_attackSpeed; + static float greathammer_attackspeed = Config.weaponAttribute.typeAttackSpeed.greathammer_attackSpeed; + static float chakram_attackspeed = Config.weaponAttribute.typeAttackSpeed.chakram_attackSpeed; + static float scythe_attackspeed = Config.weaponAttribute.typeAttackSpeed.scythe_attackSpeed; + static float halberd_attackspeed = Config.weaponAttribute.typeAttackSpeed.halberd_attackSpeed; + + static float brimstone_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.brimstone_attackSpeed; + static float thewatcher_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.thewatcher_attackSpeed; + static float stormsedge_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.stormsedge_attackSpeed; + static float stormbringer_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.stormbringer_attackSpeed; + static float swordonastick_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.swordonastick_attackSpeed; + static float bramblethorn_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.bramblethorn_attackSpeed; + static float watchingwarglaive_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.watchingwarglaive_attackSpeed; + static float longswordofplague_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.longswordofplague_attackSpeed; + static float emberblade_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.emberblade_attackSpeed; + static float hearthflame_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.hearthflame_attackSpeed; + static float soulkeeper_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.soulkeeper_attackSpeed; + static float twistedblade_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.twistedblade_attackSpeed; + static float soulstealer_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.soulstealer_attackSpeed; + static float soulrender_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.soulrender_attackSpeed; + static float mjolnir_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.mjolnir_attackSpeed; + static float soulpyre_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.soulpyre_attackSpeed; + static float frostfall_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.frostfall_attackSpeed; + static float moltenedge_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.moltenedge_attackSpeed; + static float livyatan_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.livyatan_attackSpeed; + static float icewhisper_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.icewhisper_attackSpeed; + static float arcanethyst_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.arcanethyst_attackSpeed; + static float thunderbrand_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.thunderbrand_attackSpeed; + static float lichblade_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.lichblade_attackSpeed; + static float shadowsting_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.shadowsting_attackSpeed; + static float sunfire_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.sunfire_attackSpeed; + static float harbinger_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.harbinger_attackSpeed; + static float whisperwind_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.whisperwind_attackSpeed; + static float emberlash_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.emberlash_attackSpeed; + static float waxweaver_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.waxweaver_attackSpeed; + static float hiveheart_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.hiveheart_attackSpeed; + static float starsedge_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.starsedge_attackSpeed; + static float wickpiercer_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.wickpiercer_attackSpeed; + static float tempest_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.tempest_attackSpeed; + static float flamewind_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.flamewind_attackSpeed; + static float ribboncleaver_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.ribboncleaver_attackSpeed; + static float magiscythe_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.magiscythe_attackSpeed; + static float enigma_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.enigma_attackSpeed; + static float magispear_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.magispear_attackSpeed; + static float magiblade_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.magiblade_attackSpeed; + static float caelestis_attackspeed = Config.weaponAttribute.uniqueAttackSpeed.caelestis_attackSpeed; + + static float brimstone_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.brimstone_damageModifier; + static float thewatcher_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.thewatcher_damageModifier; + static float stormsedge_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.stormsedge_damageModifier; + static float stormbringer_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.stormbringer_damageModifier; + static float swordonastick_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.swordonastick_damageModifier; + static float bramblethorn_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.bramblethorn_damageModifier; + static float watchingwarglaive_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.watchingwarglaive_damageModifier; + static float longswordofplague_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.longswordofplague_damageModifier; + static float emberblade_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.emberblade_damageModifier; + static float hearthflame_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.hearthflame_damageModifier; + static float soulkeeper_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.soulkeeper_damageModifier; + static float twistedblade_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.twistedblade_damageModifier; + static float soulstealer_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.soulstealer_damageModifier; + static float soulrender_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.soulrender_damageModifier; + static float mjolnir_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.mjolnir_damageModifier; + static float soulpyre_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.soulpyre_damageModifier; + static float frostfall_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.frostfall_damageModifier; + static float moltenedge_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.moltenedge_damageModifier; + static float livyatan_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.livyatan_damageModifier; + static float icewhisper_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.icewhisper_damageModifier; + static float arcanethyst_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.arcanethyst_damageModifier; + static float thunderbrand_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.thunderbrand_damageModifier; + static float lichblade_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.lichblade_damageModifier; + static float shadowsting_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.shadowsting_damageModifier; + static float sunfire_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.sunfire_damageModifier; + static float harbinger_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.harbinger_damageModifier; + static float whisperwind_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.whisperwind_damageModifier; + static float emberlash_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.emberlash_damageModifier; + static float waxweaver_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.waxweaver_damageModifier; + static float hiveheart_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.hiveheart_damageModifier; + static float starsedge_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.starsedge_damageModifier; + static float wickpiercer_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.wickpiercer_damageModifier; + static float tempest_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.tempest_damageModifier; + static float flamewind_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.flamewind_damageModifier; + static float ribboncleaver_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.ribboncleaver_damageModifier; + static float magiscythe_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.magiscythe_damageModifier; + static float enigma_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.enigma_damageModifier; + static float magispear_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.magispear_damageModifier; + static float magiblade_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.magiblade_damageModifier; + static float caelestis_damage_modifier = Config.weaponAttribute.uniqueDamageModifier.caelestis_damageModifier; public static final DeferredRegister ITEM = DeferredRegister.create(SimplySwords.MOD_ID, RegistryKeys.ITEM); - public static final RegistrySupplier RUNIC_TABLET = ITEM.register("runic_tablet", RunicTabletItem::new); public static final RegistrySupplier RUNEFUSED_GEM = ITEM.register("runefused_gem", RunefusedGemItem::new); public static final RegistrySupplier NETHERFUSED_GEM = ITEM.register("netherfused_gem", NetherfusedGemItem::new); @@ -168,795 +196,852 @@ public class ItemsRegistry { public static final RegistrySupplier IRON_LONGSWORD = ITEM.register("iron_longsword", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + longsword_positive_modifier - longsword_negative_modifier), - longsword_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + longsword_modifier), longsword_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_TWINBLADE = ITEM.register( "iron_twinblade", () -> + public static final RegistrySupplier IRON_TWINBLADE = ITEM.register("iron_twinblade", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + twinblade_positive_modifier - twinblade_negative_modifier), - twinblade_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + twinblade_modifier), twinblade_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_RAPIER = ITEM.register( "iron_rapier", () -> + public static final RegistrySupplier IRON_RAPIER = ITEM.register("iron_rapier", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + rapier_positive_modifier - rapier_negative_modifier), - rapier_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + rapier_modifier), rapier_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_KATANA = ITEM.register( "iron_katana", () -> + public static final RegistrySupplier IRON_KATANA = ITEM.register("iron_katana", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + katana_positive_modifier - katana_negative_modifier), - katana_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + katana_modifier), katana_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_SAI = ITEM.register( "iron_sai", () -> + public static final RegistrySupplier IRON_SAI = ITEM.register("iron_sai", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + sai_positive_modifier - sai_negative_modifier), - sai_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + sai_modifier), sai_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_SPEAR = ITEM.register( "iron_spear", () -> + public static final RegistrySupplier IRON_SPEAR = ITEM.register("iron_spear", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + spear_positive_modifier - spear_negative_modifier), - spear_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + spear_modifier), spear_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_GLAIVE = ITEM.register( "iron_glaive", () -> + public static final RegistrySupplier IRON_GLAIVE = ITEM.register("iron_glaive", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + glaive_positive_modifier - glaive_negative_modifier), - glaive_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + glaive_modifier), glaive_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_WARGLAIVE = ITEM.register( "iron_warglaive", () -> + public static final RegistrySupplier IRON_WARGLAIVE = ITEM.register("iron_warglaive", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + warglaive_positive_modifier - warglaive_negative_modifier), - warglaive_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + warglaive_modifier), warglaive_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_CUTLASS = ITEM.register( "iron_cutlass", () -> + public static final RegistrySupplier IRON_CUTLASS = ITEM.register("iron_cutlass", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + cutlass_positive_modifier - cutlass_negative_modifier), - cutlass_attackspeed, - "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_CLAYMORE = ITEM.register( "iron_claymore", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + cutlass_modifier), cutlass_attackspeed)), "minecraft:iron_ingot")); + + public static final RegistrySupplier IRON_CLAYMORE = ITEM.register("iron_claymore", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + claymore_positive_modifier - claymore_negative_modifier), - claymore_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + claymore_modifier), claymore_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_GREATHAMMER = ITEM.register( "iron_greathammer", () -> + public static final RegistrySupplier IRON_GREATHAMMER = ITEM.register("iron_greathammer", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + greathammer_positive_modifier - greathammer_negative_modifier), - greathammer_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + greathammer_modifier), greathammer_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_GREATAXE = ITEM.register( "iron_greataxe", () -> + public static final RegistrySupplier IRON_GREATAXE = ITEM.register("iron_greataxe", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + greataxe_positive_modifier - greataxe_negative_modifier), - greataxe_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + greataxe_modifier), greataxe_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_CHAKRAM = ITEM.register( "iron_chakram", () -> + public static final RegistrySupplier IRON_CHAKRAM = ITEM.register("iron_chakram", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + chakram_positive_modifier - chakram_negative_modifier), - chakram_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + chakram_modifier), chakram_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_SCYTHE = ITEM.register( "iron_scythe", () -> + public static final RegistrySupplier IRON_SCYTHE = ITEM.register("iron_scythe", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + scythe_positive_modifier - scythe_negative_modifier), - scythe_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + scythe_modifier), scythe_attackspeed)), "minecraft:iron_ingot")); - public static final RegistrySupplier IRON_HALBERD = ITEM.register( "iron_halberd", () -> + public static final RegistrySupplier IRON_HALBERD = ITEM.register("iron_halberd", () -> new SimplySwordsSwordItem( ToolMaterials.IRON, - (int) (iron_modifier + halberd_positive_modifier - halberd_negative_modifier), - halberd_attackspeed, - "minecraft:iron_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.COMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.IRON, + (int) (iron_modifier + halberd_modifier), halberd_attackspeed)), "minecraft:iron_ingot")); - //GOLD - public static final RegistrySupplier GOLD_LONGSWORD = ITEM.register( "gold_longsword", () -> + // GOLD + public static final RegistrySupplier GOLD_LONGSWORD = ITEM.register("gold_longsword", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + longsword_positive_modifier - longsword_negative_modifier), - longsword_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + longsword_modifier), longsword_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_TWINBLADE = ITEM.register( "gold_twinblade", () -> + public static final RegistrySupplier GOLD_TWINBLADE = ITEM.register("gold_twinblade", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + twinblade_positive_modifier - twinblade_negative_modifier), - twinblade_attackspeed, - "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_RAPIER = ITEM.register( "gold_rapier", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + twinblade_modifier), twinblade_attackspeed)), "minecraft:gold_ingot")); + + public static final RegistrySupplier GOLD_RAPIER = ITEM.register("gold_rapier", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + rapier_positive_modifier - rapier_negative_modifier), - rapier_attackspeed, - "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_KATANA = ITEM.register( "gold_katana", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + rapier_modifier), rapier_attackspeed)), "minecraft:gold_ingot")); + + public static final RegistrySupplier GOLD_KATANA = ITEM.register("gold_katana", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + katana_positive_modifier - katana_negative_modifier), - katana_attackspeed, - "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_SAI = ITEM.register( "gold_sai", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + katana_modifier), katana_attackspeed)), "minecraft:gold_ingot")); + + public static final RegistrySupplier GOLD_SAI = ITEM.register("gold_sai", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + sai_positive_modifier - sai_negative_modifier), - sai_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + sai_modifier), sai_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_SPEAR = ITEM.register( "gold_spear", () -> + public static final RegistrySupplier GOLD_SPEAR = ITEM.register("gold_spear", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + spear_positive_modifier - spear_negative_modifier), - spear_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + spear_modifier), spear_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_GLAIVE = ITEM.register( "gold_glaive", () -> + public static final RegistrySupplier GOLD_GLAIVE = ITEM.register("gold_glaive", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + glaive_positive_modifier - glaive_negative_modifier), - glaive_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + glaive_modifier), glaive_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_WARGLAIVE = ITEM.register( "gold_warglaive", () -> + public static final RegistrySupplier GOLD_WARGLAIVE = ITEM.register("gold_warglaive", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + warglaive_positive_modifier - warglaive_negative_modifier), - warglaive_attackspeed, - "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_CUTLASS = ITEM.register( "gold_cutlass", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + warglaive_modifier), warglaive_attackspeed)), "minecraft:gold_ingot")); + + public static final RegistrySupplier GOLD_CUTLASS = ITEM.register("gold_cutlass", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + cutlass_positive_modifier - cutlass_negative_modifier), - cutlass_attackspeed, - "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_CLAYMORE = ITEM.register( "gold_claymore", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + cutlass_modifier), cutlass_attackspeed)), "minecraft:gold_ingot")); + + public static final RegistrySupplier GOLD_CLAYMORE = ITEM.register("gold_claymore", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + claymore_positive_modifier - claymore_negative_modifier), - claymore_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + claymore_modifier), claymore_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_GREATHAMMER = ITEM.register( "gold_greathammer", () -> + public static final RegistrySupplier GOLD_GREATHAMMER = ITEM.register("gold_greathammer", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + greathammer_positive_modifier - greathammer_negative_modifier), - greathammer_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + greathammer_modifier), greathammer_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_GREATAXE = ITEM.register( "gold_greataxe", () -> + public static final RegistrySupplier GOLD_GREATAXE = ITEM.register("gold_greataxe", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + greataxe_positive_modifier - greataxe_negative_modifier), - greataxe_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + greataxe_modifier), greataxe_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_CHAKRAM = ITEM.register( "gold_chakram", () -> + public static final RegistrySupplier GOLD_CHAKRAM = ITEM.register("gold_chakram", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + chakram_positive_modifier - chakram_negative_modifier), - chakram_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + chakram_modifier), chakram_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_SCYTHE = ITEM.register( "gold_scythe", () -> + public static final RegistrySupplier GOLD_SCYTHE = ITEM.register("gold_scythe", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + scythe_positive_modifier - scythe_negative_modifier), - scythe_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + scythe_modifier), scythe_attackspeed)), "minecraft:gold_ingot")); - public static final RegistrySupplier GOLD_HALBERD = ITEM.register( "gold_halberd", () -> + public static final RegistrySupplier GOLD_HALBERD = ITEM.register("gold_halberd", () -> new SimplySwordsSwordItem( ToolMaterials.GOLD, - (int) (gold_modifier + halberd_positive_modifier - halberd_negative_modifier), - halberd_attackspeed, - "minecraft:gold_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.UNCOMMON) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.GOLD, + (int) (gold_modifier + halberd_modifier), halberd_attackspeed)), "minecraft:gold_ingot")); - //DIAMOND - public static final RegistrySupplier DIAMOND_LONGSWORD = ITEM.register( "diamond_longsword", () -> + // DIAMOND + public static final RegistrySupplier DIAMOND_LONGSWORD = ITEM.register("diamond_longsword", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + longsword_positive_modifier - longsword_negative_modifier), - longsword_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + longsword_modifier), longsword_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_TWINBLADE = ITEM.register( "diamond_twinblade", () -> + public static final RegistrySupplier DIAMOND_TWINBLADE = ITEM.register("diamond_twinblade", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + twinblade_positive_modifier - twinblade_negative_modifier), - twinblade_attackspeed, - "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_RAPIER = ITEM.register( "diamond_rapier", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + twinblade_modifier), twinblade_attackspeed)), "minecraft:diamond")); + + public static final RegistrySupplier DIAMOND_RAPIER = ITEM.register("diamond_rapier", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + rapier_positive_modifier - rapier_negative_modifier), - rapier_attackspeed, - "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_KATANA = ITEM.register( "diamond_katana", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + rapier_modifier), rapier_attackspeed)), "minecraft:diamond")); + + public static final RegistrySupplier DIAMOND_KATANA = ITEM.register("diamond_katana", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + katana_positive_modifier - katana_negative_modifier), - katana_attackspeed, - "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_SAI = ITEM.register( "diamond_sai", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + katana_modifier), katana_attackspeed)), "minecraft:diamond")); + + public static final RegistrySupplier DIAMOND_SAI = ITEM.register("diamond_sai", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + sai_positive_modifier - sai_negative_modifier), - sai_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + sai_modifier), sai_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_SPEAR = ITEM.register( "diamond_spear", () -> + public static final RegistrySupplier DIAMOND_SPEAR = ITEM.register("diamond_spear", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + spear_positive_modifier - spear_negative_modifier), - spear_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + spear_modifier), spear_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_GLAIVE = ITEM.register( "diamond_glaive", () -> + public static final RegistrySupplier DIAMOND_GLAIVE = ITEM.register("diamond_glaive", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + glaive_positive_modifier - glaive_negative_modifier), - glaive_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + glaive_modifier), glaive_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_WARGLAIVE = ITEM.register( "diamond_warglaive", () -> + public static final RegistrySupplier DIAMOND_WARGLAIVE = ITEM.register("diamond_warglaive", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + warglaive_positive_modifier - warglaive_negative_modifier), - warglaive_attackspeed, - "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_CUTLASS = ITEM.register( "diamond_cutlass", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + warglaive_modifier), warglaive_attackspeed)), "minecraft:diamond")); + + public static final RegistrySupplier DIAMOND_CUTLASS = ITEM.register("diamond_cutlass", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + cutlass_positive_modifier - cutlass_negative_modifier), - cutlass_attackspeed, - "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_CLAYMORE = ITEM.register( "diamond_claymore", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + cutlass_modifier), cutlass_attackspeed)), "minecraft:diamond")); + + public static final RegistrySupplier DIAMOND_CLAYMORE = ITEM.register("diamond_claymore", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + claymore_positive_modifier - claymore_negative_modifier), - claymore_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + claymore_modifier), claymore_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_GREATHAMMER = ITEM.register( "diamond_greathammer", () -> + public static final RegistrySupplier DIAMOND_GREATHAMMER = ITEM.register("diamond_greathammer", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + greathammer_positive_modifier - greathammer_negative_modifier), - greathammer_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + greathammer_modifier), greathammer_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_GREATAXE = ITEM.register( "diamond_greataxe", () -> + public static final RegistrySupplier DIAMOND_GREATAXE = ITEM.register("diamond_greataxe", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + greataxe_positive_modifier - greataxe_negative_modifier), - greataxe_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + greataxe_modifier), greataxe_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_CHAKRAM = ITEM.register( "diamond_chakram", () -> + public static final RegistrySupplier DIAMOND_CHAKRAM = ITEM.register("diamond_chakram", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + chakram_positive_modifier - chakram_negative_modifier), - chakram_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + chakram_modifier), chakram_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_SCYTHE = ITEM.register( "diamond_scythe", () -> + public static final RegistrySupplier DIAMOND_SCYTHE = ITEM.register("diamond_scythe", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + scythe_positive_modifier - scythe_negative_modifier), - scythe_attackspeed, - "minecraft:diamond")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + scythe_modifier), scythe_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier DIAMOND_HALBERD = ITEM.register( "diamond_halberd", () -> + public static final RegistrySupplier DIAMOND_HALBERD = ITEM.register("diamond_halberd", () -> new SimplySwordsSwordItem( ToolMaterials.DIAMOND, - (int) (diamond_modifier + halberd_positive_modifier - halberd_negative_modifier), - halberd_attackspeed, - "minecraft:diamond")); - - //NETHERITE + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.DIAMOND, + (int) (diamond_modifier + halberd_modifier), halberd_attackspeed)), "minecraft:diamond")); - public static final RegistrySupplier NETHERITE_LONGSWORD = ITEM.register( "netherite_longsword", () -> - new SimplySwordsNetheriteSwordItem(ToolMaterials.NETHERITE, - (int) (netherite_modifier + longsword_positive_modifier - longsword_negative_modifier), - longsword_attackspeed, - "minecraft:netherite_ingot")); + // NETHERITE + public static final RegistrySupplier NETHERITE_LONGSWORD = ITEM.register("netherite_longsword", () -> + new SimplySwordsNetheriteSwordItem( + ToolMaterials.NETHERITE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + longsword_modifier), longsword_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_TWINBLADE = ITEM.register( "netherite_twinblade", () -> + public static final RegistrySupplier NETHERITE_TWINBLADE = ITEM.register("netherite_twinblade", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + twinblade_positive_modifier - twinblade_negative_modifier), - twinblade_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + twinblade_modifier), twinblade_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_RAPIER = ITEM.register( "netherite_rapier", () -> + public static final RegistrySupplier NETHERITE_RAPIER = ITEM.register("netherite_rapier", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (iron_modifier + rapier_positive_modifier - rapier_negative_modifier), - rapier_attackspeed, - "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_KATANA = ITEM.register( "netherite_katana", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + rapier_modifier), rapier_attackspeed)), "minecraft:netherite_ingot")); + + public static final RegistrySupplier NETHERITE_KATANA = ITEM.register("netherite_katana", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + katana_positive_modifier - katana_negative_modifier), - katana_attackspeed, - "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_SAI = ITEM.register( "netherite_sai", () -> + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + katana_modifier), katana_attackspeed)), "minecraft:netherite_ingot")); + + public static final RegistrySupplier NETHERITE_SAI = ITEM.register("netherite_sai", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + sai_positive_modifier - sai_negative_modifier), - sai_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + sai_modifier), sai_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_SPEAR = ITEM.register( "netherite_spear", () -> + public static final RegistrySupplier NETHERITE_SPEAR = ITEM.register("netherite_spear", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + spear_positive_modifier - spear_negative_modifier), - spear_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + spear_modifier), spear_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_GLAIVE = ITEM.register( "netherite_glaive", () -> + public static final RegistrySupplier NETHERITE_GLAIVE = ITEM.register("netherite_glaive", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + glaive_positive_modifier - glaive_negative_modifier), - glaive_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + glaive_modifier), glaive_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_WARGLAIVE = ITEM.register( "netherite_warglaive", () -> + public static final RegistrySupplier NETHERITE_WARGLAIVE = ITEM.register("netherite_warglaive", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + warglaive_positive_modifier - warglaive_negative_modifier), - warglaive_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + warglaive_modifier), warglaive_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_CUTLASS = ITEM.register( "netherite_cutlass", () -> + public static final RegistrySupplier NETHERITE_CUTLASS = ITEM.register("netherite_cutlass", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + cutlass_positive_modifier - cutlass_negative_modifier), - cutlass_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + cutlass_modifier), cutlass_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_CLAYMORE = ITEM.register( "netherite_claymore", () -> + public static final RegistrySupplier NETHERITE_CLAYMORE = ITEM.register("netherite_claymore", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + claymore_positive_modifier - claymore_negative_modifier), - claymore_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + claymore_modifier), claymore_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_GREATHAMMER = ITEM.register( "netherite_greathammer", () -> + public static final RegistrySupplier NETHERITE_GREATHAMMER = ITEM.register("netherite_greathammer", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + greathammer_positive_modifier - greathammer_negative_modifier), - greathammer_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + greathammer_modifier), greathammer_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_GREATAXE = ITEM.register( "netherite_greataxe", () -> + public static final RegistrySupplier NETHERITE_GREATAXE = ITEM.register("netherite_greataxe", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + greataxe_positive_modifier - greataxe_negative_modifier), - greataxe_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + greataxe_modifier), greataxe_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_CHAKRAM = ITEM.register( "netherite_chakram", () -> + public static final RegistrySupplier NETHERITE_CHAKRAM = ITEM.register("netherite_chakram", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + chakram_positive_modifier - chakram_negative_modifier), - chakram_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + chakram_modifier), chakram_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_SCYTHE = ITEM.register( "netherite_scythe", () -> + public static final RegistrySupplier NETHERITE_SCYTHE = ITEM.register("netherite_scythe", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + scythe_positive_modifier - scythe_negative_modifier), - scythe_attackspeed, - "minecraft:netherite_ingot")); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + scythe_modifier), scythe_attackspeed)), "minecraft:netherite_ingot")); - public static final RegistrySupplier NETHERITE_HALBERD = ITEM.register( "netherite_halberd", () -> + public static final RegistrySupplier NETHERITE_HALBERD = ITEM.register("netherite_halberd", () -> new SimplySwordsNetheriteSwordItem( ToolMaterials.NETHERITE, - (int) (netherite_modifier + halberd_positive_modifier - halberd_negative_modifier), - halberd_attackspeed, - "minecraft:netherite_ingot")); - - - //RUNIC - public static final RegistrySupplier RUNIC_LONGSWORD = ITEM.register( "runic_longsword", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + longsword_positive_modifier - longsword_negative_modifier), - longsword_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_TWINBLADE = ITEM.register( "runic_twinblade", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + twinblade_positive_modifier - twinblade_negative_modifier), - twinblade_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_RAPIER = ITEM.register( "runic_rapier", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + rapier_positive_modifier - rapier_negative_modifier), - rapier_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_KATANA = ITEM.register( "runic_katana", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + katana_positive_modifier - katana_negative_modifier), - katana_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_SAI = ITEM.register( "runic_sai", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + sai_positive_modifier - sai_negative_modifier), - sai_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_SPEAR = ITEM.register( "runic_spear", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + spear_positive_modifier - spear_negative_modifier), - spear_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_GLAIVE = ITEM.register( "runic_glaive", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + glaive_positive_modifier - glaive_negative_modifier), - glaive_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_CUTLASS = ITEM.register( "runic_cutlass", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + cutlass_positive_modifier - cutlass_negative_modifier), - cutlass_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - public static final RegistrySupplier RUNIC_CLAYMORE = ITEM.register( "runic_claymore", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + claymore_positive_modifier - claymore_negative_modifier), - claymore_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_CHAKRAM = ITEM.register( "runic_chakram", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + chakram_positive_modifier - chakram_negative_modifier), - chakram_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_GREATAXE = ITEM.register( "runic_greataxe", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + greataxe_positive_modifier - greataxe_negative_modifier), - greataxe_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_GREATHAMMER = ITEM.register( "runic_greathammer", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + greathammer_positive_modifier - greathammer_negative_modifier), - greathammer_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - public static final RegistrySupplier RUNIC_WARGLAIVE = ITEM.register( "runic_warglaive", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + warglaive_positive_modifier - warglaive_negative_modifier), - warglaive_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_SCYTHE = ITEM.register( "runic_scythe", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + scythe_positive_modifier - scythe_negative_modifier), - scythe_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - public static final RegistrySupplier RUNIC_HALBERD = ITEM.register( "runic_halberd", () -> - new RunicSwordItem(ModToolMaterial.RUNIC, - (int) (runic_modifier + halberd_positive_modifier - halberd_negative_modifier), - halberd_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE))); - - //SPECIAL - public static final RegistrySupplier BRIMSTONE_CLAYMORE = ITEM.register( "brimstone_claymore", () -> - new FireSwordItem(ModToolMaterial.UNIQUE, - (int) (brimstone_damage_modifier), - brimstone_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier WATCHER_CLAYMORE = ITEM.register( "watcher_claymore", () -> - new WatcherSwordItem(ModToolMaterial.UNIQUE, - (int) (thewatcher_damage_modifier), - thewatcher_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier STORMS_EDGE = ITEM.register( "storms_edge", () -> - new StormsEdgeSwordItem(ModToolMaterial.UNIQUE, - (int) (stormsedge_damage_modifier), - stormsedge_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier STORMBRINGER = ITEM.register( "stormbringer", () -> - new StormbringerSwordItem(ModToolMaterial.UNIQUE, - (int) (stormbringer_damage_modifier), - stormbringer_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier SWORD_ON_A_STICK = ITEM.register( "sword_on_a_stick", () -> - new SwordItem(ToolMaterials.WOOD, - (int) (swordonastick_damage_modifier), - swordonastick_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC))); - - public static final RegistrySupplier BRAMBLETHORN = ITEM.register( "bramblethorn", () -> - new BrambleSwordItem(ModToolMaterial.UNIQUE, - (int) (bramblethorn_damage_modifier), - bramblethorn_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier WATCHING_WARGLAIVE = ITEM.register( "watching_warglaive", () -> - new WatcherSwordItem(ModToolMaterial.UNIQUE, - (int) (watchingwarglaive_damage_modifier), - watchingwarglaive_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - public static final RegistrySupplier TOXIC_LONGSWORD = ITEM.register( "toxic_longsword", () -> - new PlagueSwordItem(ModToolMaterial.UNIQUE, - (int) (longswordofplague_damage_modifier), - longswordofplague_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier EMBERBLADE = ITEM.register( "emberblade", () -> - new EmberIreSwordItem(ModToolMaterial.UNIQUE, - (int) (emberblade_damage_modifier), - emberblade_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier HEARTHFLAME = ITEM.register( "hearthflame", () -> - new VolcanicFurySwordItem(ModToolMaterial.UNIQUE, - (int) (hearthflame_damage_modifier), - hearthflame_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier SOULKEEPER = ITEM.register( "soulkeeper", () -> - new SoulSwordItem(ModToolMaterial.UNIQUE, - (int) (soulkeeper_damage_modifier), - soulkeeper_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier TWISTED_BLADE = ITEM.register( "twisted_blade", () -> - new HasteSwordItem(ModToolMaterial.UNIQUE, - (int) (twistedblade_damage_modifier), - twistedblade_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.NETHERITE, + (int) (netherite_modifier + halberd_modifier), halberd_attackspeed)), "minecraft:netherite_ingot")); + + // RUNIC + public static final RegistrySupplier RUNIC_LONGSWORD = ITEM.register("runic_longsword", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + longsword_modifier), longsword_attackspeed)))); + + public static final RegistrySupplier RUNIC_TWINBLADE = ITEM.register("runic_twinblade", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + twinblade_modifier), twinblade_attackspeed)))); + + public static final RegistrySupplier RUNIC_RAPIER = ITEM.register("runic_rapier", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + rapier_modifier), rapier_attackspeed)))); + + public static final RegistrySupplier RUNIC_KATANA = ITEM.register("runic_katana", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + katana_modifier), katana_attackspeed)))); + + public static final RegistrySupplier RUNIC_SAI = ITEM.register("runic_sai", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + sai_modifier), sai_attackspeed)))); + + public static final RegistrySupplier RUNIC_SPEAR = ITEM.register("runic_spear", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + spear_modifier), spear_attackspeed)))); + + public static final RegistrySupplier RUNIC_GLAIVE = ITEM.register("runic_glaive", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + glaive_modifier), glaive_attackspeed)))); + + public static final RegistrySupplier RUNIC_WARGLAIVE = ITEM.register("runic_warglaive", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + warglaive_modifier), warglaive_attackspeed)))); + + public static final RegistrySupplier RUNIC_CUTLASS = ITEM.register("runic_cutlass", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + cutlass_modifier), cutlass_attackspeed)))); + + public static final RegistrySupplier RUNIC_CLAYMORE = ITEM.register("runic_claymore", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + claymore_modifier), claymore_attackspeed)))); + + public static final RegistrySupplier RUNIC_CHAKRAM = ITEM.register("runic_chakram", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + chakram_modifier), chakram_attackspeed)))); + + public static final RegistrySupplier RUNIC_GREATAXE = ITEM.register("runic_greataxe", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + greataxe_modifier), greataxe_attackspeed)))); + + public static final RegistrySupplier RUNIC_GREATHAMMER = ITEM.register("runic_greathammer", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + greathammer_modifier), greathammer_attackspeed)))); + + public static final RegistrySupplier RUNIC_SCYTHE = ITEM.register("runic_scythe", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + scythe_modifier), scythe_attackspeed)))); + + public static final RegistrySupplier RUNIC_HALBERD = ITEM.register("runic_halberd", () -> + new RunicSwordItem( + ModToolMaterial.RUNIC, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.RARE) + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.RUNIC, + (int) (runic_modifier + halberd_modifier), halberd_attackspeed)))); + + // SPECIAL + public static final RegistrySupplier BRIMSTONE_CLAYMORE = ITEM.register("brimstone_claymore", () -> + new BrimstoneClaymoreItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) brimstone_damage_modifier, brimstone_attackspeed)))); + + public static final RegistrySupplier WATCHER_CLAYMORE = ITEM.register("watcher_claymore", () -> + new WatcherClaymoreItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) thewatcher_damage_modifier, thewatcher_attackspeed)))); + + public static final RegistrySupplier STORMS_EDGE = ITEM.register("storms_edge", () -> + new StormsEdgeSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) stormsedge_damage_modifier, stormsedge_attackspeed)))); + + public static final RegistrySupplier STORMBRINGER = ITEM.register("stormbringer", () -> + new StormbringerSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) stormbringer_damage_modifier, stormbringer_attackspeed)))); + + public static final RegistrySupplier SWORD_ON_A_STICK = ITEM.register("sword_on_a_stick", () -> + new SwordItem( + ToolMaterials.WOOD, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC) + .attributeModifiers(SwordItem.createAttributeModifiers(ToolMaterials.WOOD, + (int) swordonastick_damage_modifier, swordonastick_attackspeed)))); + + public static final RegistrySupplier BRAMBLETHORN = ITEM.register("bramblethorn", () -> + new BrambleSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) bramblethorn_damage_modifier, bramblethorn_attackspeed)))); + + public static final RegistrySupplier WATCHING_WARGLAIVE = ITEM.register("watching_warglaive", () -> + new WatchingWarglaiveItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) watchingwarglaive_damage_modifier, watchingwarglaive_attackspeed)))); + + public static final RegistrySupplier TOXIC_LONGSWORD = ITEM.register("toxic_longsword", () -> + new PlagueSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) longswordofplague_damage_modifier, longswordofplague_attackspeed)))); + + public static final RegistrySupplier EMBERBLADE = ITEM.register("emberblade", () -> + new EmberIreSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) emberblade_damage_modifier, emberblade_attackspeed)))); + + public static final RegistrySupplier HEARTHFLAME = ITEM.register("hearthflame", () -> + new HearthflameSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) hearthflame_damage_modifier, hearthflame_attackspeed)))); + + public static final RegistrySupplier SOULKEEPER = ITEM.register("soulkeeper", () -> + new SoulkeeperSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) soulkeeper_damage_modifier, soulkeeper_attackspeed)))); + + public static final RegistrySupplier TWISTED_BLADE = ITEM.register("twisted_blade", () -> + new TwistedBladeItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) twistedblade_damage_modifier, twistedblade_attackspeed)))); public static final RegistrySupplier SOULSTEALER = ITEM.register("soulstealer", () -> - new StealSwordItem(ModToolMaterial.UNIQUE, - (int) (soulstealer_damage_modifier), - soulstealer_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier SOULRENDER = ITEM.register( "soulrender", () -> - new RendSwordItem(ModToolMaterial.UNIQUE, - (int) (soulrender_damage_modifier), - soulrender_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier SOULPYRE = ITEM.register( "soulpyre", () -> - new SoulPyreSwordItem(ModToolMaterial.UNIQUE, - (int) (soulpyre_damage_modifier), - soulpyre_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier FROSTFALL = ITEM.register( "frostfall", () -> - new FrostfallSwordItem(ModToolMaterial.UNIQUE, - (int) (frostfall_damage_modifier), - frostfall_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier MOLTEN_EDGE = ITEM.register( "molten_edge", () -> - new MoltenEdgeSwordItem(ModToolMaterial.UNIQUE, - (int) (moltenedge_damage_modifier), - moltenedge_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier LIVYATAN = ITEM.register( "livyatan", () -> - new LivyatanSwordItem(ModToolMaterial.UNIQUE, - (int) (livyatan_damage_modifier), - livyatan_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier ICEWHISPER = ITEM.register( "icewhisper", () -> - new IcewhisperSwordItem(ModToolMaterial.UNIQUE, - (int) (icewhisper_damage_modifier), - icewhisper_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - public static final RegistrySupplier ARCANETHYST = ITEM.register( "arcanethyst", () -> - new ArcanethystSwordItem(ModToolMaterial.UNIQUE, - (int) (arcanethyst_damage_modifier), - arcanethyst_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier THUNDERBRAND = ITEM.register( "thunderbrand", () -> - new ThunderbrandSwordItem(ModToolMaterial.UNIQUE, - (int) (thunderbrand_damage_modifier), - thunderbrand_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - /* - public static final RegistrySupplier THE_DISPATCHER = ITEM.register( "the_dispatcher", () -> - new RendSwordItem(ModToolMaterial.UNIQUE, - (int) (thedispatcher_damage_modifier), - thedispatcher_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - */ - - public static final RegistrySupplier MJOLNIR = ITEM.register( "mjolnir", () -> - new StormSwordItem(ModToolMaterial.UNIQUE, - (int) (mjolnir_damage_modifier), - mjolnir_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier SLUMBERING_LICHBLADE = ITEM.register( "slumbering_lichblade", () -> - new LichbladeSwordItem(ModToolMaterial.UNIQUE, - (int) (lichblade_damage_modifier), - lichblade_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier WAKING_LICHBLADE = ITEM.register( "waking_lichblade", () -> - new LichbladeSwordItem(ModToolMaterial.UNIQUE, - (int) (lichblade_damage_modifier), - lichblade_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier AWAKENED_LICHBLADE = ITEM.register( "awakened_lichblade", () -> - new LichbladeSwordItem(ModToolMaterial.UNIQUE, - (int) (lichblade_damage_modifier), - lichblade_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier SHADOWSTING = ITEM.register( "shadowsting", () -> - new ShadowstingSwordItem(ModToolMaterial.UNIQUE, - (int) (shadowsting_damage_modifier), - shadowsting_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier DORMANT_RELIC = ITEM.register( "dormant_relic", () -> - new DormantRelicSwordItem(ModToolMaterial.UNIQUE, - (int) (sunfire_damage_modifier), - sunfire_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier RIGHTEOUS_RELIC = ITEM.register( "righteous_relic", () -> - new RighteousRelicSwordItem(ModToolMaterial.UNIQUE, - (int) (sunfire_damage_modifier), - sunfire_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier TAINTED_RELIC = ITEM.register( "tainted_relic", () -> - new TaintedRelicSwordItem(ModToolMaterial.UNIQUE, - (int) (harbinger_damage_modifier), - harbinger_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier SUNFIRE = ITEM.register( "sunfire", () -> - new SunfireSwordItem(ModToolMaterial.UNIQUE, - (int) (sunfire_damage_modifier), - sunfire_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier HARBINGER = ITEM.register( "harbinger", () -> - new HarbingerSwordItem(ModToolMaterial.UNIQUE, - (int) (harbinger_damage_modifier), - harbinger_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier WHISPERWIND = ITEM.register( "whisperwind", () -> - new WhisperwindSwordItem(ModToolMaterial.UNIQUE, - (int) (whisperwind_damage_modifier), - whisperwind_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - -/* - public static final RegistrySupplier STORMSCALE = ITEM.register( "stormscale", () -> - new TaintedRelicSwordItem(ModToolMaterial.UNIQUE, - (int) (harbinger_damage_modifier), - harbinger_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - -*/ - - public static final RegistrySupplier EMBERLASH = ITEM.register( "emberlash", () -> - new EmberlashSwordItem(ModToolMaterial.UNIQUE, - (int) (emberlash_damage_modifier), - emberlash_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier WAXWEAVER = ITEM.register( "waxweaver", () -> - new WaxweaverSwordItem(ModToolMaterial.UNIQUE, - (int) (waxweaver_damage_modifier), - waxweaver_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier HIVEHEART = ITEM.register( "hiveheart", () -> - new HiveheartSwordItem(ModToolMaterial.UNIQUE, - (int) (hiveheart_damage_modifier), - hiveheart_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier STARS_EDGE = ITEM.register( "stars_edge", () -> - new StarsEdgeSwordItem(ModToolMaterial.UNIQUE, - (int) (starsedge_damage_modifier), - starsedge_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier WICKPIERCER = ITEM.register( "wickpiercer", () -> - new WickpiercerSwordItem(ModToolMaterial.UNIQUE, - (int) (wickpiercer_damage_modifier), - wickpiercer_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier TEMPEST = ITEM.register( "tempest", () -> - new TempestSwordItem(ModToolMaterial.UNIQUE, - (int) (tempest_damage_modifier), - tempest_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier FLAMEWIND = ITEM.register( "flamewind", () -> - new FlamewindSwordItem(ModToolMaterial.UNIQUE, - (int) (flamewind_damage_modifier), - flamewind_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier RIBBONCLEAVER = ITEM.register( "ribboncleaver", () -> - new RibboncleaverSwordItem(ModToolMaterial.UNIQUE, - (int) (ribboncleaver_damage_modifier), - ribboncleaver_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); + new StealSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) soulstealer_damage_modifier, soulstealer_attackspeed)))); + + public static final RegistrySupplier SOULRENDER = ITEM.register("soulrender", () -> + new SoulrenderSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) soulrender_damage_modifier, soulrender_attackspeed)))); + + public static final RegistrySupplier SOULPYRE = ITEM.register("soulpyre", () -> + new SoulPyreSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) soulpyre_damage_modifier, soulpyre_attackspeed)))); + + public static final RegistrySupplier FROSTFALL = ITEM.register("frostfall", () -> + new FrostfallSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) frostfall_damage_modifier, frostfall_attackspeed)))); + + public static final RegistrySupplier MOLTEN_EDGE = ITEM.register("molten_edge", () -> + new MoltenEdgeSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) moltenedge_damage_modifier, moltenedge_attackspeed)))); + + public static final RegistrySupplier LIVYATAN = ITEM.register("livyatan", () -> + new LivyatanSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) livyatan_damage_modifier, livyatan_attackspeed)))); + + public static final RegistrySupplier ICEWHISPER = ITEM.register("icewhisper", () -> + new IcewhisperSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) icewhisper_damage_modifier, icewhisper_attackspeed)))); + + public static final RegistrySupplier ARCANETHYST = ITEM.register("arcanethyst", () -> + new ArcanethystSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) arcanethyst_damage_modifier, arcanethyst_attackspeed)))); + + public static final RegistrySupplier THUNDERBRAND = ITEM.register("thunderbrand", () -> + new ThunderbrandSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) thunderbrand_damage_modifier, thunderbrand_attackspeed)))); + + public static final RegistrySupplier MJOLNIR = ITEM.register("mjolnir", () -> + new StormSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) mjolnir_damage_modifier, mjolnir_attackspeed)))); + + public static final RegistrySupplier SLUMBERING_LICHBLADE = ITEM.register("slumbering_lichblade", () -> + new LichbladeSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) lichblade_damage_modifier, lichblade_attackspeed)))); + + public static final RegistrySupplier WAKING_LICHBLADE = ITEM.register("waking_lichblade", () -> + new LichbladeSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) lichblade_damage_modifier, lichblade_attackspeed)))); + + public static final RegistrySupplier AWAKENED_LICHBLADE = ITEM.register("awakened_lichblade", () -> + new LichbladeSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) lichblade_damage_modifier, lichblade_attackspeed)))); + + public static final RegistrySupplier SHADOWSTING = ITEM.register("shadowsting", () -> + new ShadowstingSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) shadowsting_damage_modifier, shadowsting_attackspeed)))); + + public static final RegistrySupplier DORMANT_RELIC = ITEM.register("dormant_relic", () -> + new DormantRelicSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) sunfire_damage_modifier, sunfire_attackspeed)))); + + public static final RegistrySupplier RIGHTEOUS_RELIC = ITEM.register("righteous_relic", () -> + new RighteousRelicSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) sunfire_damage_modifier, sunfire_attackspeed)))); + + public static final RegistrySupplier TAINTED_RELIC = ITEM.register("tainted_relic", () -> + new TaintedRelicSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) harbinger_damage_modifier, harbinger_attackspeed)))); + + public static final RegistrySupplier SUNFIRE = ITEM.register("sunfire", () -> + new SunfireSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) sunfire_damage_modifier, sunfire_attackspeed)))); + + public static final RegistrySupplier HARBINGER = ITEM.register("harbinger", () -> + new HarbingerSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) harbinger_damage_modifier, harbinger_attackspeed)))); + + public static final RegistrySupplier WHISPERWIND = ITEM.register("whisperwind", () -> + new WhisperwindSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) whisperwind_damage_modifier, whisperwind_attackspeed)))); + + public static final RegistrySupplier EMBERLASH = ITEM.register("emberlash", () -> + new EmberlashSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) emberlash_damage_modifier, emberlash_attackspeed)))); + + public static final RegistrySupplier WAXWEAVER = ITEM.register("waxweaver", () -> + new WaxweaverSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) waxweaver_damage_modifier, waxweaver_attackspeed)))); + + public static final RegistrySupplier HIVEHEART = ITEM.register("hiveheart", () -> + new HiveheartSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) hiveheart_damage_modifier, hiveheart_attackspeed)))); + + public static final RegistrySupplier STARS_EDGE = ITEM.register("stars_edge", () -> + new StarsEdgeSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) starsedge_damage_modifier, starsedge_attackspeed)))); + + public static final RegistrySupplier WICKPIERCER = ITEM.register("wickpiercer", () -> + new WickpiercerSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) wickpiercer_damage_modifier, wickpiercer_attackspeed)))); + + public static final RegistrySupplier TEMPEST = ITEM.register("tempest", () -> + new TempestSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) tempest_damage_modifier, tempest_attackspeed)))); + + public static final RegistrySupplier FLAMEWIND = ITEM.register("flamewind", () -> + new FlamewindSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) flamewind_damage_modifier, flamewind_attackspeed)))); + + public static final RegistrySupplier RIBBONCLEAVER = ITEM.register("ribboncleaver", () -> + new RibboncleaverSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) ribboncleaver_damage_modifier, ribboncleaver_attackspeed)))); public static final RegistrySupplier DECAYING_RELIC = ITEM.register( "decaying_relic", () -> - new DormantRelicSwordItem(ModToolMaterial.UNIQUE, - (int) (magiscythe_damage_modifier), - magiscythe_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier MAGISCYTHE = ITEM.register( "magiscythe", () -> - new MagiscytheSwordItem(ModToolMaterial.UNIQUE, - (int) (magiscythe_damage_modifier), - magiscythe_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier ENIGMA = ITEM.register( "enigma", () -> - new EnigmaSwordItem(ModToolMaterial.UNIQUE, - (int) (enigma_damage_modifier), - enigma_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier MAGISPEAR = ITEM.register( "magispear", () -> - new MagispearSwordItem(ModToolMaterial.UNIQUE, - (int) (magispear_damage_modifier), - magispear_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier MAGIBLADE = ITEM.register( "magiblade", () -> - new MagibladeSwordItem(ModToolMaterial.UNIQUE, - (int) (magiblade_damage_modifier), - magiblade_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - public static final RegistrySupplier CAELESTIS = ITEM.register( "caelestis", () -> - new CaelestisSwordItem(ModToolMaterial.UNIQUE, - (int) (caelestis_damage_modifier), - caelestis_attackspeed, - new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof())); - - -} + new DormantRelicSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) magiscythe_damage_modifier, magiscythe_attackspeed)))); + + public static final RegistrySupplier MAGISCYTHE = ITEM.register("magiscythe", () -> + new MagiscytheSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) magiscythe_damage_modifier, magiscythe_attackspeed)))); + + public static final RegistrySupplier ENIGMA = ITEM.register("enigma", () -> + new EnigmaSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) enigma_damage_modifier, enigma_attackspeed)))); + + public static final RegistrySupplier MAGISPEAR = ITEM.register("magispear", () -> + new MagispearSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) magispear_damage_modifier, magispear_attackspeed)))); + + public static final RegistrySupplier MAGIBLADE = ITEM.register("magiblade", () -> + new MagibladeSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) magiblade_damage_modifier, magiblade_attackspeed)))); + + public static final RegistrySupplier CAELESTIS = ITEM.register("caelestis", () -> + new CaelestisSwordItem( + ModToolMaterial.UNIQUE, + new Item.Settings().arch$tab(SimplySwords.SIMPLYSWORDS).rarity(Rarity.EPIC).fireproof() + .attributeModifiers(SwordItem.createAttributeModifiers(ModToolMaterial.UNIQUE, + (int) caelestis_damage_modifier, caelestis_attackspeed)))); +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/registry/SoundRegistry.java b/common/src/main/java/net/sweenus/simplyswords/registry/SoundRegistry.java index c476d915..848c8688 100644 --- a/common/src/main/java/net/sweenus/simplyswords/registry/SoundRegistry.java +++ b/common/src/main/java/net/sweenus/simplyswords/registry/SoundRegistry.java @@ -12,336 +12,336 @@ public class SoundRegistry { public static final DeferredRegister SOUND = DeferredRegister.create(SimplySwords.MOD_ID, RegistryKeys.SOUND_EVENT); public static final RegistrySupplier SWING_SMALL = SOUND.register("swing_small", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "swing_small"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "swing_small"))); public static final RegistrySupplier SWING_SCIFI = SOUND.register("swing_scifi", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "swing_scifi"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "swing_scifi"))); public static final RegistrySupplier SWING_NORMAL = SOUND.register("swing_normal", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "swing_normal"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "swing_normal"))); public static final RegistrySupplier SWING_WOOSH = SOUND.register("swing_woosh", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "swing_woosh"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "swing_woosh"))); public static final RegistrySupplier THROW_MJOLNIR = SOUND.register("throw_mjolnir", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "throw_mjolnir"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "throw_mjolnir"))); public static final RegistrySupplier THROW_MJOLNIR_SHORT = SOUND.register("throw_mjolnir_short", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "throw_mjolnir_short"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "throw_mjolnir_short"))); public static final RegistrySupplier THROW_MJOLNIR_LONG = SOUND.register("throw_mjolnir_long", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "throw_mjolnir_long"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "throw_mjolnir_long"))); public static final RegistrySupplier SWING_OMEN_ONE = SOUND.register("swing_omen_one", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "swing_omen_one"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "swing_omen_one"))); public static final RegistrySupplier SWING_OMEN_TWO = SOUND.register("swing_omen_two", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "swing_omen_two"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "swing_omen_two"))); public static final RegistrySupplier DARK_SWORD_ATTACK_01 = SOUND.register("dark_sword_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_attack_01"))); public static final RegistrySupplier DARK_SWORD_ATTACK_02 = SOUND.register("dark_sword_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_attack_02"))); public static final RegistrySupplier DARK_SWORD_ATTACK_03 = SOUND.register("dark_sword_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_attack_03"))); public static final RegistrySupplier DARK_SWORD_ATTACK_WITH_BLOOD_01 = SOUND.register("dark_sword_attack_with_blood_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_attack_with_blood_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_attack_with_blood_01"))); public static final RegistrySupplier DARK_SWORD_ATTACK_WITH_BLOOD_02 = SOUND.register("dark_sword_attack_with_blood_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_attack_with_blood_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_attack_with_blood_02"))); public static final RegistrySupplier DARK_SWORD_ATTACK_WITH_BLOOD_03 = SOUND.register("dark_sword_attack_with_blood_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_attack_with_blood_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_attack_with_blood_03"))); public static final RegistrySupplier DARK_SWORD_BLOCK = SOUND.register("dark_sword_block", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_block"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_block"))); public static final RegistrySupplier DARK_SWORD_BREAKS = SOUND.register("dark_sword_breaks", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_breaks"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_breaks"))); public static final RegistrySupplier DARK_SWORD_ENCHANT = SOUND.register("dark_sword_enchant", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_enchant"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_enchant"))); public static final RegistrySupplier DARK_SWORD_PARRY = SOUND.register("dark_sword_parry", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_parry"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_parry"))); public static final RegistrySupplier DARK_SWORD_SPELL = SOUND.register("dark_sword_spell", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_spell"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_spell"))); public static final RegistrySupplier DARK_SWORD_UNFOLD = SOUND.register("dark_sword_unfold", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_unfold"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_unfold"))); public static final RegistrySupplier DARK_SWORD_WHOOSH_01 = SOUND.register("dark_sword_whoosh_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_whoosh_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_whoosh_01"))); public static final RegistrySupplier DARK_SWORD_WHOOSH_02 = SOUND.register("dark_sword_whoosh_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_whoosh_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_whoosh_02"))); public static final RegistrySupplier DARK_SWORD_WHOOSH_03 = SOUND.register("dark_sword_whoosh_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_whoosh_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_whoosh_03"))); public static final RegistrySupplier DARK_SWORD_WHOOSH_04 = SOUND.register("dark_sword_whoosh_04", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_sword_whoosh_04"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_sword_whoosh_04"))); public static final RegistrySupplier ELEMENTAL_BOW_EARTH_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_earth_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_EARTH_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_earth_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_EARTH_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_earth_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_EARTH_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_earth_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_EARTH_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_earth_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_EARTH_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_earth_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_earth_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_BOW_FIRE_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_fire_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_FIRE_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_fire_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_FIRE_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_fire_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_fire_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_fire_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_FIRE_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_fire_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_fire_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_BOW_HOLY_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_holy_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_HOLY_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_holy_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_HOLY_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_holy_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_HOLY_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_holy_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_HOLY_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_holy_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_HOLY_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_holy_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_holy_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_BOW_ICE_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_ice_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_ICE_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_ice_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_ICE_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_ice_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_ICE_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_ice_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_ICE_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_ice_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_ice_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_ice_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_BOW_POISON_ATTACK_01 = SOUND.register("elemental_bow_poison_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_poison_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_poison_attack_01"))); public static final RegistrySupplier ELEMENTAL_BOW_POISON_ATTACK_02 = SOUND.register("elemental_bow_poison_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_poison_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_poison_attack_02"))); public static final RegistrySupplier ELEMENTAL_BOW_POISON_ATTACK_03 = SOUND.register("elemental_bow_poison_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_poison_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_poison_attack_03"))); public static final RegistrySupplier ELEMENTAL_BOW_RECHARGE = SOUND.register("elemental_bow_recharge", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_recharge"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_recharge"))); public static final RegistrySupplier ELEMENTAL_BOW_SCIFI_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_sci-fi_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_SCIFI_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_sci-fi_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_SCIFI_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_sci-fi_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_SCIFI_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_sci-fi_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_SCIFI_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_sci-fi_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_SCIFI_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_sci-fi_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_sci-fi_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_BOW_THUNDER_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_thunder_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_THUNDER_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_thunder_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_THUNDER_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_thunder_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_THUNDER_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_thunder_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_THUNDER_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_thunder_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_THUNDER_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_thunder_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_thunder_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_BOW_WATER_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_water_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_water_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_water_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_WATER_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_water_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_water_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_water_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_WATER_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_water_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_water_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_water_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_WATER_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_water_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_water_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_water_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_WATER_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_water_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_water_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_water_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_WATER_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_water_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_water_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_water_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_BOW_WIND_SHOOT_FLYBY_01 = SOUND.register("elemental_bow_wind_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_flyby_01"))); public static final RegistrySupplier ELEMENTAL_BOW_WIND_SHOOT_FLYBY_02 = SOUND.register("elemental_bow_wind_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_flyby_02"))); public static final RegistrySupplier ELEMENTAL_BOW_WIND_SHOOT_FLYBY_03 = SOUND.register("elemental_bow_wind_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_flyby_03"))); public static final RegistrySupplier ELEMENTAL_BOW_WIND_SHOOT_IMPACT_01 = SOUND.register("elemental_bow_wind_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_impact_01"))); public static final RegistrySupplier ELEMENTAL_BOW_WIND_SHOOT_IMPACT_02 = SOUND.register("elemental_bow_wind_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_impact_02"))); public static final RegistrySupplier ELEMENTAL_BOW_WIND_SHOOT_IMPACT_03 = SOUND.register("elemental_bow_wind_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_bow_wind_shoot_impact_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_EARTH_ATTACK_01 = SOUND.register("elemental_sword_earth_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_earth_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_earth_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_EARTH_ATTACK_02 = SOUND.register("elemental_sword_earth_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_earth_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_earth_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_EARTH_ATTACK_03 = SOUND.register("elemental_sword_earth_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_earth_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_earth_attack_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_FIRE_ATTACK_01 = SOUND.register("elemental_sword_fire_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_fire_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_fire_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_FIRE_ATTACK_02 = SOUND.register("elemental_sword_fire_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_fire_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_fire_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_FIRE_ATTACK_03 = SOUND.register("elemental_sword_fire_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_fire_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_fire_attack_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_HOLY_ATTACK_01 = SOUND.register("elemental_sword_holy_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_holy_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_holy_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_HOLY_ATTACK_02 = SOUND.register("elemental_sword_holy_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_holy_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_holy_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_HOLY_ATTACK_03 = SOUND.register("elemental_sword_holy_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_holy_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_holy_attack_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_ICE_ATTACK_01 = SOUND.register("elemental_sword_ice_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_ice_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_ice_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_ICE_ATTACK_02 = SOUND.register("elemental_sword_ice_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_ice_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_ice_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_ICE_ATTACK_03 = SOUND.register("elemental_sword_ice_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_ice_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_ice_attack_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_SCIFI_ATTACK_01 = SOUND.register("elemental_sword_sci-fi_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_sci-fi_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_sci-fi_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_SCIFI_ATTACK_02 = SOUND.register("elemental_sword_sci-fi_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_sci-fi_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_sci-fi_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_SCIFI_ATTACK_03 = SOUND.register("elemental_sword_sci-fi_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_sci-fi_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_sci-fi_attack_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_THUNDER_ATTACK_01 = SOUND.register("elemental_sword_thunder_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_thunder_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_thunder_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_THUNDER_ATTACK_02 = SOUND.register("elemental_sword_thunder_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_thunder_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_thunder_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_THUNDER_ATTACK_03 = SOUND.register("elemental_sword_thunder_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_thunder_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_thunder_attack_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_WATER_ATTACK_01 = SOUND.register("elemental_sword_water_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_water_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_water_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_WATER_ATTACK_02 = SOUND.register("elemental_sword_water_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_water_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_water_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_WATER_ATTACK_03 = SOUND.register("elemental_sword_water_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_water_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_water_attack_03"))); public static final RegistrySupplier ELEMENTAL_SWORD_WIND_ATTACK_01 = SOUND.register("elemental_sword_wind_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_wind_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_wind_attack_01"))); public static final RegistrySupplier ELEMENTAL_SWORD_WIND_ATTACK_02 = SOUND.register("elemental_sword_wind_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_wind_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_wind_attack_02"))); public static final RegistrySupplier ELEMENTAL_SWORD_WIND_ATTACK_03 = SOUND.register("elemental_sword_wind_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "elemental_sword_wind_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "elemental_sword_wind_attack_03"))); public static final RegistrySupplier MAGIC_BOW_CHARGE_LONG_VERSION = SOUND.register("magic_bow_charge_long_version", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_charge_long_version"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_charge_long_version"))); public static final RegistrySupplier MAGIC_BOW_CHARGE_SHORT_VERSION = SOUND.register("magic_bow_charge_short_version", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_charge_short_version"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_charge_short_version"))); public static final RegistrySupplier MAGIC_BOW_PULL_BACK_LONG_VERSION_01 = SOUND.register("magic_bow_pull_back_long_version_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_pull_back_long_version_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_pull_back_long_version_01"))); public static final RegistrySupplier MAGIC_BOW_PULL_BACK_LONG_VERSION_02 = SOUND.register("magic_bow_pull_back_long_version_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_pull_back_long_version_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_pull_back_long_version_02"))); public static final RegistrySupplier MAGIC_BOW_PULL_BACK_LONG_VERSION_03 = SOUND.register("magic_bow_pull_back_long_version_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_pull_back_long_version_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_pull_back_long_version_03"))); public static final RegistrySupplier MAGIC_BOW_PULL_BACK_SHORT_VERSION_01 = SOUND.register("magic_bow_pull_back_short_version_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_pull_back_short_version_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_pull_back_short_version_01"))); public static final RegistrySupplier MAGIC_BOW_PULL_BACK_SHORT_VERSION_02 = SOUND.register("magic_bow_pull_back_short_version_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_pull_back_short_version_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_pull_back_short_version_02"))); public static final RegistrySupplier MAGIC_BOW_PULL_BACK_SHORT_VERSION_03 = SOUND.register("magic_bow_pull_back_short_version_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_pull_back_short_version_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_pull_back_short_version_03"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_FLYBY_01 = SOUND.register("magic_bow_shoot_flyby_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_flyby_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_flyby_01"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_FLYBY_02 = SOUND.register("magic_bow_shoot_flyby_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_flyby_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_flyby_02"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_FLYBY_03 = SOUND.register("magic_bow_shoot_flyby_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_flyby_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_flyby_03"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_IMPACT_01 = SOUND.register("magic_bow_shoot_impact_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_impact_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_impact_01"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_IMPACT_02 = SOUND.register("magic_bow_shoot_impact_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_impact_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_impact_02"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_IMPACT_03 = SOUND.register("magic_bow_shoot_impact_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_impact_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_impact_03"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_MISS_01 = SOUND.register("magic_bow_shoot_miss_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_miss_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_miss_01"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_MISS_02 = SOUND.register("magic_bow_shoot_miss_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_miss_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_miss_02"))); public static final RegistrySupplier MAGIC_BOW_SHOOT_MISS_03 = SOUND.register("magic_bow_shoot_miss_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_bow_shoot_miss_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_bow_shoot_miss_03"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_01 = SOUND.register("magic_sword_attack_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_01"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_02 = SOUND.register("magic_sword_attack_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_02"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_03 = SOUND.register("magic_sword_attack_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_03"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_04 = SOUND.register("magic_sword_attack_04", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_04"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_04"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_WITH_BLOOD_01 = SOUND.register("magic_sword_attack_with_blood_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_01"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_WITH_BLOOD_02 = SOUND.register("magic_sword_attack_with_blood_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_02"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_WITH_BLOOD_03 = SOUND.register("magic_sword_attack_with_blood_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_03"))); public static final RegistrySupplier MAGIC_SWORD_ATTACK_WITH_BLOOD_04 = SOUND.register("magic_sword_attack_with_blood_04", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_04"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_attack_with_blood_04"))); public static final RegistrySupplier MAGIC_SWORD_BLOCK_01 = SOUND.register("magic_sword_block_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_block_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_block_01"))); public static final RegistrySupplier MAGIC_SWORD_BLOCK_02 = SOUND.register("magic_sword_block_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_block_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_block_02"))); public static final RegistrySupplier MAGIC_SWORD_BREAKS = SOUND.register("magic_sword_breaks", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_breaks"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_breaks"))); public static final RegistrySupplier MAGIC_SWORD_PARRY_01 = SOUND.register("magic_sword_parry_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_parry_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_parry_01"))); public static final RegistrySupplier MAGIC_SWORD_PARRY_02 = SOUND.register("magic_sword_parry_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_parry_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_parry_02"))); public static final RegistrySupplier MAGIC_SWORD_PARRY_03 = SOUND.register("magic_sword_parry_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_parry_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_parry_03"))); public static final RegistrySupplier MAGIC_SWORD_PARRY_04 = SOUND.register("magic_sword_parry_04", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_parry_04"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_parry_04"))); public static final RegistrySupplier MAGIC_SWORD_PARRY_VARIOUS_HITS = SOUND.register("magic_sword_parry_various_hits", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_parry_various_hits"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_parry_various_hits"))); public static final RegistrySupplier MAGIC_SWORD_SPELL_01 = SOUND.register("magic_sword_spell_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_spell_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_spell_01"))); public static final RegistrySupplier MAGIC_SWORD_SPELL_02 = SOUND.register("magic_sword_spell_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_spell_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_spell_02"))); public static final RegistrySupplier MAGIC_SWORD_SPELL_03 = SOUND.register("magic_sword_spell_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_spell_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_spell_03"))); public static final RegistrySupplier MAGIC_SWORD_WHOOSH_01 = SOUND.register("magic_sword_whoosh_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_whoosh_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_whoosh_01"))); public static final RegistrySupplier MAGIC_SWORD_WHOOSH_02 = SOUND.register("magic_sword_whoosh_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_whoosh_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_whoosh_02"))); public static final RegistrySupplier MAGIC_SWORD_WHOOSH_03 = SOUND.register("magic_sword_whoosh_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_whoosh_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_whoosh_03"))); public static final RegistrySupplier MAGIC_SWORD_WHOOSH_04 = SOUND.register("magic_sword_whoosh_04", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_whoosh_04"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_whoosh_04"))); public static final RegistrySupplier MAGIC_SWORD_WHOOSH_05 = SOUND.register("magic_sword_whoosh_05", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_whoosh_05"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_whoosh_05"))); public static final RegistrySupplier MAGIC_SWORD_WHOOSH_06 = SOUND.register("magic_sword_whoosh_06", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_whoosh_06"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_whoosh_06"))); public static final RegistrySupplier MAGIC_SWORD_WHOOSH_07 = SOUND.register("magic_sword_whoosh_07", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_sword_whoosh_07"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_sword_whoosh_07"))); public static final RegistrySupplier SPELL_FIRE = SOUND.register("spell_fire", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "spell_fire"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "spell_fire"))); public static final RegistrySupplier SLASH_01 = SOUND.register("slash_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "slash_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "slash_01"))); public static final RegistrySupplier SPELL_MISC_02 = SOUND.register("spell_misc_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "spell_misc_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "spell_misc_02"))); public static final RegistrySupplier MAGIC_SHAMANIC_VOICE_04 = SOUND.register("magic_shamanic_voice_04", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_voice_04"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_voice_04"))); public static final RegistrySupplier MAGIC_SHAMANIC_VOICE_12 = SOUND.register("magic_shamanic_voice_12", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_voice_12"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_voice_12"))); public static final RegistrySupplier MAGIC_SHAMANIC_VOICE_15 = SOUND.register("magic_shamanic_voice_15", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_voice_15"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_voice_15"))); public static final RegistrySupplier MAGIC_SHAMANIC_VOICE_20 = SOUND.register("magic_shamanic_voice_20", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_voice_20"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_voice_20"))); public static final RegistrySupplier MAGIC_SHAMANIC_NORDIC_02 = SOUND.register("magic_shamanic_nordic_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_nordic_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_nordic_02"))); public static final RegistrySupplier MAGIC_SHAMANIC_NORDIC_21 = SOUND.register("magic_shamanic_nordic_21", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_nordic_21"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_nordic_21"))); public static final RegistrySupplier MAGIC_SHAMANIC_NORDIC_22 = SOUND.register("magic_shamanic_nordic_22", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_nordic_22"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_nordic_22"))); public static final RegistrySupplier MAGIC_SHAMANIC_NORDIC_23 = SOUND.register("magic_shamanic_nordic_23", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_nordic_23"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_nordic_23"))); public static final RegistrySupplier MAGIC_SHAMANIC_NORDIC_27 = SOUND.register("magic_shamanic_nordic_27", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "magic_shamanic_nordic_27"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "magic_shamanic_nordic_27"))); public static final RegistrySupplier AMBIENCE_WIND_LOOP = SOUND.register("ambience_wind_loop", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "ambience_wind_loop"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "ambience_wind_loop"))); public static final RegistrySupplier STONE_SLIDE_LOOP_03 = SOUND.register("stone_slide_loop_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "stone_slide_loop_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "stone_slide_loop_03"))); public static final RegistrySupplier OBJECT_IMPACT_THUD = SOUND.register("object_impact_thud", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "object_impact_thud"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "object_impact_thud"))); public static final RegistrySupplier OBJECT_IMPACT_THUD_REPEAT = SOUND.register("object_impact_thud_repeat", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "object_impact_thud_repeat"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "object_impact_thud_repeat"))); public static final RegistrySupplier ACTIVATE_PLINTH_03 = SOUND.register("activate_plinth_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "activate_plinth_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "activate_plinth_03"))); public static final RegistrySupplier DARK_ACTIVATION_DISTORTED = SOUND.register("dark_activation_distorted", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "dark_activation_distorted"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "dark_activation_distorted"))); public static final RegistrySupplier DISTORTION_ARC_01 = SOUND.register("distortion_arc_01", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "distortion_arc_01"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "distortion_arc_01"))); public static final RegistrySupplier DISTORTION_ARC_02 = SOUND.register("distortion_arc_02", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "distortion_arc_02"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "distortion_arc_02"))); public static final RegistrySupplier DISTORTION_ARC_03 = SOUND.register("distortion_arc_03", () -> - SoundEvent.of(new Identifier(SimplySwords.MOD_ID, "distortion_arc_03"))); + SoundEvent.of(Identifier.of(SimplySwords.MOD_ID, "distortion_arc_03"))); } \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/util/AbilityMethods.java b/common/src/main/java/net/sweenus/simplyswords/util/AbilityMethods.java index f6279a21..430a05fc 100644 --- a/common/src/main/java/net/sweenus/simplyswords/util/AbilityMethods.java +++ b/common/src/main/java/net/sweenus/simplyswords/util/AbilityMethods.java @@ -1,6 +1,11 @@ package net.sweenus.simplyswords.util; -import net.minecraft.entity.*; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LightningEntity; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnReason; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; @@ -14,8 +19,8 @@ import net.minecraft.util.math.Box; import net.minecraft.world.World; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.item.custom.LichbladeSwordItem; +import net.sweenus.simplyswords.item.component.StoredChargeComponent; +import net.sweenus.simplyswords.registry.ComponentTypeRegistry; import net.sweenus.simplyswords.registry.EffectRegistry; import net.sweenus.simplyswords.registry.SoundRegistry; @@ -75,7 +80,7 @@ public static void tickAbilityStormJolt(ItemStack stack, World world, LivingEnti public static void tickAbilityStorm(ItemStack stack, World world, LivingEntity user, int ability_timer, int skillCooldown, int radius) { if (!user.getWorld().isClient()) { - int frequency = (int) Config.getFloat("stormFrequency", "UniqueEffects", ConfigDefaultValues.stormFrequency); + int frequency = Config.uniqueEffects.storm.frequency; if (user.age % frequency == 0) { double x = user.getX(); double y = user.getY(); @@ -89,7 +94,7 @@ public static void tickAbilityStorm(ItemStack stack, World world, LivingEntity u if ((entity instanceof LivingEntity ee)) { if (HelperMethods.checkFriendlyFire(ee, user) && choose > 0.7) { var stormtarget = ee.getBlockPos(); - ee.addStatusEffect(new StatusEffectInstance(EffectRegistry.FREEZE.get(), frequency+5, 0), user); + ee.addStatusEffect(new StatusEffectInstance(EffectRegistry.getReference(EffectRegistry.FREEZE), frequency+5, 0), user); LightningEntity storm = EntityType.LIGHTNING_BOLT.spawn(sworld, stormtarget, SpawnReason.TRIGGERED); if (storm != null) { storm.setCosmetic(true); @@ -194,113 +199,111 @@ public static void tickAbilitySoulAnguish(ItemStack stack, World world, LivingEn float soundDistance = 0.2f - (float) user.squaredDistanceTo(lastX, lastY, lastZ) / 800; //Target tracking cloud - if (user.age % 5 == 0 && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { - Box box = new Box(lastX + radius, lastY + radius, lastZ + radius, - lastX - radius, lastY - radius, lastZ - radius); - for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { + if (user.age % 5 != 0 || user.getEquippedStack(EquipmentSlot.MAINHAND) != stack) return; + Box box = new Box(lastX + radius, lastY + radius, lastZ + radius, + lastX - radius, lastY - radius, lastZ - radius); + for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { - if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire((LivingEntity) entity, user)) { + if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire((LivingEntity) entity, user)) { - //Heal effect - float choose = (float) (Math.random() * 1); - if (user.getRandom().nextInt(100) <= 8) { - world.playSoundFromEntity(null, le, SoundRegistry.DARK_SWORD_BREAKS.get(), - le.getSoundCategory(), soundDistance, choose); - user.heal(healAmount); - } - ((LichbladeSwordItem)stack.getItem()).damageTracker++; - le.damage(user.getDamageSources().indirectMagic(user, user), abilityDamage); + //Heal effect + float choose = (float) (Math.random() * 1); + if (user.getRandom().nextInt(100) <= 8) { + world.playSoundFromEntity(null, le, SoundRegistry.DARK_SWORD_BREAKS.get(), + le.getSoundCategory(), soundDistance, choose); + user.heal(healAmount); } + stack.apply(ComponentTypeRegistry.STORED_CHARGE.get(), StoredChargeComponent.DEFAULT, StoredChargeComponent::increment); + le.damage(user.getDamageSources().indirectMagic(user, user), abilityDamage); } - world.playSound(null, lastX, lastY, lastZ, SoundRegistry.DARK_SWORD_BLOCK.get(), - user.getSoundCategory(), soundDistance, 0.3f, 100); + } + world.playSound(null, lastX, lastY, lastZ, SoundRegistry.DARK_SWORD_BLOCK.get(), + user.getSoundCategory(), soundDistance, 0.3f, 100); - double xpos = lastX - (radius + 1); - double ypos = lastY; - double zpos = lastZ - (radius + 1); - world.playSound(xpos, ypos, zpos, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), - user.getSoundCategory(), 0.1f, 0.2f, true); + double xPos = lastX - (radius + 1); + double yPos = lastY; + double zPos = lastZ - (radius + 1); + world.playSound(xPos, yPos, zPos, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), + user.getSoundCategory(), 0.1f, 0.2f, true); - for (int i = radius * 2; i > 0; i--) { - for (int j = radius * 2; j > 0; j--) { - float choose = (float) (Math.random() * 1); - HelperMethods.spawnParticle(world, ParticleTypes.MYCELIUM, - xpos + i + choose, ypos, zpos + j + choose, - choose / 3, -0.3, choose / 3); - choose = (float) (Math.random() * 1); - HelperMethods.spawnParticle(world, ParticleTypes.SOUL, - xpos + i + choose, ypos, zpos + j + choose, - choose / 3, 0, choose / 3); - } + for (int i = radius * 2; i > 0; i--) { + for (int j = radius * 2; j > 0; j--) { + float choose = (float) (Math.random() * 1); + HelperMethods.spawnParticle(world, ParticleTypes.MYCELIUM, + xPos + i + choose, yPos, zPos + j + choose, + choose / 3, -0.3, choose / 3); + choose = (float) (Math.random() * 1); + HelperMethods.spawnParticle(world, ParticleTypes.SOUL, + xPos + i + choose, yPos, zPos + j + choose, + choose / 3, 0, choose / 3); } } + } } //Icewhisper - Permafrost public static void tickAbilityPermafrost(ItemStack stack, World world, LivingEntity user, - int ability_timer, int ability_timer_max, float abilityDamage, - int skillCooldown, int radius, + int ability_timer, float abilityDamage, int radius, double lastX, double lastY, double lastZ) { - if (!user.getWorld().isClient()) { - int rradius = radius * 2; - if (ability_timer < 5) user.stopUsingItem(); + if (user.getWorld().isClient()) return; - //AOE Blizzard - if (user.age % 10 == 0 && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { - if (user instanceof PlayerEntity player) { - player.getHungerManager().addExhaustion(0.8f); - } - Box box = new Box(user.getX() + rradius, user.getY() + radius, user.getZ() + rradius, - user.getX() - rradius, user.getY() - radius, user.getZ() - rradius); - for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { + int rradius = radius * 2; + if (ability_timer < 5) user.stopUsingItem(); - if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { - if (le.hasStatusEffect(StatusEffects.SLOWNESS)) { + //AOE Blizzard + if (user.age % 10 != 0 || user.getEquippedStack(EquipmentSlot.MAINHAND) != stack) return; - int a = (le.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() + 1); + if (user instanceof PlayerEntity player) { + player.getHungerManager().addExhaustion(0.8f); + } + Box box = new Box(user.getX() + rradius, user.getY() + radius, user.getZ() + rradius, + user.getX() - rradius, user.getY() - radius, user.getZ() - rradius); + for (Entity entity : world.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { - if (a < 4) { - le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, a), user); - } else { - le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, a - 1), user); - } - } else { - le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, 0), user); - } - float choose = (float) (Math.random() * 1); - world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), - user.getSoundCategory(), 0.1f, choose); - le.damage(world.getDamageSources().indirectMagic(user, user), abilityDamage * 3); - } - } + if ((entity instanceof LivingEntity le) && HelperMethods.checkFriendlyFire(le, user)) { + if (le.hasStatusEffect(StatusEffects.SLOWNESS)) { - double xpos = lastX - (rradius + 1); - double ypos = lastY; - double zpos = lastZ - (rradius + 1); - world.playSound(xpos, ypos, zpos, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), - user.getSoundCategory(), 0.1f, 0.2f, true); + int a = (le.getStatusEffect(StatusEffects.SLOWNESS).getAmplifier() + 1); - for (int i = rradius * 2; i > 0; i--) { - for (int j = rradius * 2; j > 0; j--) { - float choose = (float) (Math.random() * 1); - HelperMethods.spawnParticle(world, ParticleTypes.SNOWFLAKE, - xpos + i + choose, ypos + 6, zpos + j + choose, - choose / 3, -0.3, choose / 3); - choose = (float) (Math.random() * 1); - HelperMethods.spawnParticle(world, ParticleTypes.WHITE_ASH, - xpos + i + choose, ypos + 6, zpos + j + choose, - choose / 3, 0, choose / 3); + if (a < 4) { + le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, a), user); + } else { + le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, a - 1), user); } + } else { + le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 120, 0), user); } + float choose = (float) (Math.random() * 1); + world.playSoundFromEntity(null, le, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), + user.getSoundCategory(), 0.1f, choose); + le.damage(world.getDamageSources().indirectMagic(user, user), abilityDamage * 3); + } + } + + double xpos = lastX - (rradius + 1); + double ypos = lastY; + double zpos = lastZ - (rradius + 1); + world.playSound(xpos, ypos, zpos, SoundRegistry.ELEMENTAL_BOW_ICE_SHOOT_IMPACT_03.get(), + user.getSoundCategory(), 0.1f, 0.2f, true); + + for (int i = rradius * 2; i > 0; i--) { + for (int j = rradius * 2; j > 0; j--) { + float choose = (float) (Math.random() * 1); + HelperMethods.spawnParticle(world, ParticleTypes.SNOWFLAKE, + xpos + i + choose, ypos + 6, zpos + j + choose, + choose / 3, -0.3, choose / 3); + choose = (float) (Math.random() * 1); + HelperMethods.spawnParticle(world, ParticleTypes.WHITE_ASH, + xpos + i + choose, ypos + 6, zpos + j + choose, + choose / 3, 0, choose / 3); } } } //Arcanethyst - Arcane Assault public static void tickAbilityArcaneAssault(ItemStack stack, World world, LivingEntity user, - int ability_timer, int ability_timer_max, float abilityDamage, - int skillCooldown, int radius) { + int ability_timer, float abilityDamage, int radius) { if (!user.getWorld().isClient()) { if (ability_timer < 5) user.stopUsingItem(); @@ -410,6 +413,7 @@ public static void tickAbilityVolcanicFury(ItemStack stack, World world, LivingE } } } + public static void astralShiftSounds(ServerPlayerEntity serverPlayer) { SoundEvent[] soundOptions = new SoundEvent[]{ SoundRegistry.DISTORTION_ARC_01.get(), @@ -425,8 +429,7 @@ public static void astralShiftSounds(ServerPlayerEntity serverPlayer) { } public static boolean astralShiftPassive(ServerPlayerEntity serverPlayer) { - int chance = (int) Config.getFloat("astralShiftChance", "UniqueEffects", ConfigDefaultValues.astralShiftChance); - return (serverPlayer.getRandom().nextInt(100) < chance); + return (serverPlayer.getRandom().nextInt(100) < Config.uniqueEffects.astralShift.chance); } diff --git a/common/src/main/java/net/sweenus/simplyswords/util/EnchantRandomlyFromTagLootFunction.java b/common/src/main/java/net/sweenus/simplyswords/util/EnchantRandomlyFromTagLootFunction.java new file mode 100644 index 00000000..b92d6930 --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/util/EnchantRandomlyFromTagLootFunction.java @@ -0,0 +1,83 @@ +package net.sweenus.simplyswords.util; + +import com.mojang.logging.LogUtils; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.function.LootFunction; +import net.minecraft.loot.function.LootFunctionType; +import net.minecraft.loot.function.LootFunctionTypes; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.entry.RegistryEntryList; +import net.minecraft.registry.tag.TagKey; +import net.minecraft.util.Util; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.random.Random; +import org.slf4j.Logger; + +import java.util.List; +import java.util.Optional; + +public class EnchantRandomlyFromTagLootFunction implements LootFunction { + + private static final Logger LOGGER = LogUtils.getLogger(); + + EnchantRandomlyFromTagLootFunction(TagKey tagKey) { + this.tagKey = tagKey; + } + + private final TagKey tagKey; + private RegistryEntryList enchants; + + + @Override + public LootFunctionType getType() { + //This isn't typically safe (should have its own type), but since we are never using this function in data packs, should be ok + return LootFunctionTypes.ENCHANT_RANDOMLY; + } + + @Override + public ItemStack apply(ItemStack itemStack, LootContext lootContext) { + if (enchants == null) + enchants = lootContext.getLookup().getOrThrow(RegistryKeys.ENCHANTMENT).getOrThrow(tagKey); + List> list = enchants.stream().toList(); + Random random = lootContext.getRandom(); + Optional> optional = Util.getRandomOrEmpty(list, random); + if (optional.isEmpty()) { + LOGGER.warn("Couldn't find a compatible enchantment for {}", itemStack); + return itemStack; + } else { + return addEnchantmentToStack(itemStack, optional.get(), random); + } + } + + public static EnchantRandomlyFromTagLootFunction.Builder create(TagKey tagKey) { + return new Builder(tagKey); + } + + private static ItemStack addEnchantmentToStack(ItemStack stack, RegistryEntry enchantment, Random random) { + int i = MathHelper.nextInt(random, enchantment.value().getMinLevel(), enchantment.value().getMaxLevel()); + if (stack.isOf(Items.BOOK)) { + stack = new ItemStack(Items.ENCHANTED_BOOK); + } + + stack.addEnchantment(enchantment, i); + return stack; + } + + public static class Builder implements LootFunction.Builder { + + public Builder(TagKey tagKey) { + this.tagKey = tagKey; + } + + private final TagKey tagKey; + + @Override + public LootFunction build() { + return new EnchantRandomlyFromTagLootFunction(tagKey); + } + } +} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/util/FileCopier.java b/common/src/main/java/net/sweenus/simplyswords/util/FileCopier.java index b55e59a7..b9e92e51 100644 --- a/common/src/main/java/net/sweenus/simplyswords/util/FileCopier.java +++ b/common/src/main/java/net/sweenus/simplyswords/util/FileCopier.java @@ -17,7 +17,7 @@ public class FileCopier { public static void copyFileToConfigDirectory() throws IOException { if (!Platform.isModLoaded(SimplySwords.MOD_ID) || !SimplySwords.passVersionCheck("eldritch_end", SimplySwords.minimumEldritchEndVersion) - || Platform.isForge()) + || Platform.isNeoForge()) return; Optional simplySwords$safeRecipePath = Platform.getMod(SimplySwords.MOD_ID).findResource( diff --git a/common/src/main/java/net/sweenus/simplyswords/util/HelperMethods.java b/common/src/main/java/net/sweenus/simplyswords/util/HelperMethods.java index 1bbfdcd2..0b4d685d 100644 --- a/common/src/main/java/net/sweenus/simplyswords/util/HelperMethods.java +++ b/common/src/main/java/net/sweenus/simplyswords/util/HelperMethods.java @@ -6,7 +6,6 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.Tameable; import net.minecraft.entity.attribute.EntityAttributeInstance; -import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.decoration.ArmorStandEntity; @@ -16,8 +15,8 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.projectile.ProjectileUtil; import net.minecraft.item.ItemStack; -import net.minecraft.particle.DefaultParticleType; import net.minecraft.particle.ParticleEffect; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.scoreboard.AbstractTeam; import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundCategory; @@ -32,24 +31,32 @@ import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.SimplySwordsExpectPlatform; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; import net.sweenus.simplyswords.effect.instance.SimplySwordsStatusEffectInstance; import net.sweenus.simplyswords.entity.BattleStandardDarkEntity; import net.sweenus.simplyswords.entity.BattleStandardEntity; -import net.sweenus.simplyswords.registry.ItemsRegistry; +import net.sweenus.simplyswords.item.TwoHandedWeapon; import net.sweenus.simplyswords.registry.SoundRegistry; -import java.util.*; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.Random; import static net.sweenus.simplyswords.SimplySwords.minimumSpellPowerVersion; public class HelperMethods { + private static final Random random = new Random(); + + public static Random random() { + return random; + } + /* * getTargetedEntity taken heavily from ZsoltMolnarrr's CombatSpells * https://github.com/ZsoltMolnarrr/SpellEngine/blob/1.19.2/common/src/main/java/net/spell_engine/utils/TargetHelper.java#L136 */ - public static Entity getTargetedEntity(Entity user, int range) { + public static Entity getTargetedEntity(Entity user, double range) { Vec3d rayCastOrigin = user.getEyePos(); Vec3d userView = user.getRotationVec(1.0F).normalize().multiply(range); Vec3d rayCastEnd = rayCastOrigin.add(userView); @@ -66,44 +73,6 @@ public static boolean isWalking(Entity entity) { return entity instanceof PlayerEntity player && (!player.isDead() && (player.isSwimming() || player.getVelocity().horizontalLength() > 0.1)); } - public static Style getStyle(String styleType) { - int rgbCommon = 0xFFFFFF; - int rgbRunic = 0x9D62CA; - int rgbUnique = 0xE2A834; - int rgbLegendary = 0xE26234; - int rgbAbility = 0xE2A834; - int rgbRightClick = 0x20BD69; - int rgbCorrupted = 0x544988; - int rgbCorruptedLight = 0x7140A3; - int rgbCorruptedAbility = 0xA987C2; - int rgbCorruptedText = 0x7E7883; - int rgbText = 0xE0E0E0; - Style COMMON = Style.EMPTY.withColor(TextColor.fromRgb(rgbCommon)); - Style UNIQUE = Style.EMPTY.withColor(TextColor.fromRgb(rgbUnique)); - Style LEGENDARY = Style.EMPTY.withColor(TextColor.fromRgb(rgbLegendary)); - Style ABILITY = Style.EMPTY.withColor(TextColor.fromRgb(rgbAbility)); - Style RIGHTCLICK = Style.EMPTY.withColor(TextColor.fromRgb(rgbRightClick)); - Style RUNIC = Style.EMPTY.withColor(TextColor.fromRgb(rgbRunic)); - Style CORRUPTED = Style.EMPTY.withColor(TextColor.fromRgb(rgbCorrupted)); - Style CORRUPTED_LIGHT = Style.EMPTY.withColor(TextColor.fromRgb(rgbCorruptedLight)); - Style CORRUPTED_ABILITY = Style.EMPTY.withColor(TextColor.fromRgb(rgbCorruptedAbility)); - Style CORRUPTED_TEXT = Style.EMPTY.withColor(TextColor.fromRgb(rgbCorruptedText)); - Style TEXT = Style.EMPTY.withColor(TextColor.fromRgb(rgbText)); - - return switch (styleType) { - case "unique" -> UNIQUE; - case "legendary" -> LEGENDARY; - case "ability" -> ABILITY; - case "rightclick" -> RIGHTCLICK; - case "runic" -> RUNIC; - case "corrupted" -> CORRUPTED; - case "corrupted_light" -> CORRUPTED_LIGHT; - case "corrupted_ability" -> CORRUPTED_ABILITY; - case "corrupted_text" -> CORRUPTED_TEXT; - case "text" -> TEXT; - default -> COMMON; - }; - } //Check if we should be able to hit the target public static boolean checkFriendlyFire(LivingEntity target, LivingEntity attacker) { @@ -162,8 +131,8 @@ public static void spawnParticle(World world, ParticleEffect particle, double xp public static void playHitSounds(LivingEntity attacker, LivingEntity target) { if (!attacker.getWorld().isClient()) { ServerWorld world = (ServerWorld) attacker.getWorld(); - boolean impactsounds_enabled = Config.getBoolean("enableWeaponImpactSounds", "General",ConfigDefaultValues.enableWeaponImpactSounds); - float impactsounds_volume = Config.getFloat("weaponImpactSoundsVolume", "General",ConfigDefaultValues.weaponImpactSoundsVolume); + boolean impactsounds_enabled = Config.general.enableWeaponImpactSounds; + float impactsounds_volume = Config.general.weaponImpactSoundsVolume; if (impactsounds_enabled) { int choose_sound = (int) (Math.random() * 30); @@ -180,136 +149,13 @@ else if (choose_sound <= 40) } } - public static boolean checkRunicBlacklist(String runicPower) { - return switch (runicPower) { - case "active_defence" -> Config.getBoolean("enableActiveDefence", "RunicEffects",ConfigDefaultValues.enableActiveDefence); - case "float" -> Config.getBoolean("enableFloat", "RunicEffects",ConfigDefaultValues.enableFloat); - case "greater_float" -> Config.getBoolean("enableGreaterFloat", "RunicEffects",ConfigDefaultValues.enableGreaterFloat); - case "freeze" -> Config.getBoolean("enableFreeze", "RunicEffects",ConfigDefaultValues.enableFreeze); - case "shielding" -> Config.getBoolean("enableShielding", "RunicEffects",ConfigDefaultValues.enableShielding); - case "greater_shielding" -> Config.getBoolean("enableGreaterShielding", "RunicEffects",ConfigDefaultValues.enableGreaterShielding); - case "slow" -> Config.getBoolean("enableSlow", "RunicEffects",ConfigDefaultValues.enableSlow); - case "greater_slow" -> Config.getBoolean("enableGreaterSlow", "RunicEffects",ConfigDefaultValues.enableGreaterSlow); - case "stoneskin" -> Config.getBoolean("enableStoneskin", "RunicEffects",ConfigDefaultValues.enableStoneskin); - case "greater_stoneskin" -> Config.getBoolean("enableGreaterStoneskin", "RunicEffects",ConfigDefaultValues.enableGreaterStoneskin); - case "swiftness" -> Config.getBoolean("enableSwiftness", "RunicEffects",ConfigDefaultValues.enableSwiftness); - case "greater_swiftness" -> Config.getBoolean("enableGreaterSwiftness", "RunicEffects",ConfigDefaultValues.enableGreaterSwiftness); - case "trailblaze" -> Config.getBoolean("enableTrailblaze", "RunicEffects",ConfigDefaultValues.enableTrailblaze); - case "greater_trailblaze" -> Config.getBoolean("enableGreaterTrailblaze", "RunicEffects",ConfigDefaultValues.enableGreaterTrailblaze); - case "weaken" -> Config.getBoolean("enableWeaken", "RunicEffects",ConfigDefaultValues.enableWeaken); - case "greater_weaken" -> Config.getBoolean("enableGreaterWeaken", "RunicEffects",ConfigDefaultValues.enableGreaterWeaken); - case "zephyr" -> Config.getBoolean("enableZephyr", "RunicEffects",ConfigDefaultValues.enableZephyr); - case "greater_zephyr" -> Config.getBoolean("enableGreaterZephyr", "RunicEffects",ConfigDefaultValues.enableGreaterZephyr); - case "frost_ward" -> Config.getBoolean("enableFrostWard", "RunicEffects",ConfigDefaultValues.enableFrostWard); - case "wildfire" -> Config.getBoolean("enableWildfire", "RunicEffects",ConfigDefaultValues.enableWildfire); - case "unstable" -> Config.getBoolean("enableUnstable", "RunicEffects",ConfigDefaultValues.enableUnstable); - case "momentum" -> Config.getBoolean("enableMomentum", "RunicEffects",ConfigDefaultValues.enableMomentum); - case "greater_momentum" -> Config.getBoolean("enableGreaterMomentum", "RunicEffects",ConfigDefaultValues.enableGreaterMomentum); - case "imbued" -> Config.getBoolean("enableImbued", "RunicEffects",ConfigDefaultValues.enableImbued); - case "greater_imbued" -> Config.getBoolean("enableGreaterImbued", "RunicEffects",ConfigDefaultValues.enableGreaterImbued); - case "pincushion" -> Config.getBoolean("enablePincushion", "RunicEffects",ConfigDefaultValues.enablePincushion); - case "greater_pincushion" -> Config.getBoolean("enableGreaterPincushion", "RunicEffects",ConfigDefaultValues.enableGreaterPincushion); - case "ward" -> Config.getBoolean("enableWard", "RunicEffects",ConfigDefaultValues.enableWard); - case "immolation" -> Config.getBoolean("enableImmolate", "RunicEffects",ConfigDefaultValues.enableImmolate); - default -> false; - }; - } - - public static boolean checkNetherBlacklist(String netherPower) { - return switch (netherPower) { - case "echo" -> Config.getBoolean("enableEcho", "GemEffects",ConfigDefaultValues.enableEcho); - case "berserk" -> Config.getBoolean("enableBerserk", "GemEffects",ConfigDefaultValues.enableBerserk); - case "radiance" -> Config.getBoolean("enableRadiance", "GemEffects",ConfigDefaultValues.enableRadiance); - case "onslaught" -> Config.getBoolean("enableOnslaught", "GemEffects",ConfigDefaultValues.enableOnslaught); - case "nullification" -> Config.getBoolean("enableNullification", "GemEffects",ConfigDefaultValues.enableNullification); - case "precise" -> Config.getBoolean("enablePrecise", "GemEffects",ConfigDefaultValues.enablePrecise); - case "mighty" -> Config.getBoolean("enableMighty", "GemEffects",ConfigDefaultValues.enableMighty); - case "stealthy" -> Config.getBoolean("enableStealthy", "GemEffects",ConfigDefaultValues.enableStealthy); - case "renewed" -> Config.getBoolean("enableRenewed", "GemEffects",ConfigDefaultValues.enableRenewed); - case "accelerant" -> Config.getBoolean("enableAccelerant", "GemEffects",ConfigDefaultValues.enableAccelerant); - case "leaping" -> Config.getBoolean("enableLeaping", "GemEffects",ConfigDefaultValues.enableLeaping); - case "spellshield" -> Config.getBoolean("enableSpellshield", "GemEffects",ConfigDefaultValues.enableSpellshield); - case "spellforged" -> Config.getBoolean("enableSpellforged", "GemEffects",ConfigDefaultValues.enableSpellforged); - case "soulshock" -> Config.getBoolean("enableSoulshock", "GemEffects",ConfigDefaultValues.enableSoulshock); - case "spell_standard" -> Config.getBoolean("enableSpellStandard", "GemEffects",ConfigDefaultValues.enableSpellStandard); - case "war_standard" -> Config.getBoolean("enableWarStandard", "GemEffects",ConfigDefaultValues.enableWarStandard); - case "deception" -> Config.getBoolean("enableDeception", "GemEffects",ConfigDefaultValues.enableDeception); - default -> false; - }; - } - - // choose Powers from provided list - public static String chooseRunicPower() { - List runicList = Arrays.asList( - "active_defence", "float", "greater_float", "freeze", "shielding", "greater_shielding", "slow", - "greater_slow", "stoneskin", "greater_stoneskin", "swiftness", "greater_swiftness", "trailblaze", - "greater_trailblaze", "weaken", "greater_weaken", "zephyr", "greater_zephyr", "frost_ward", - "wildfire", "unstable", "momentum", "greater_momentum", "imbued", "greater_imbued", "pincushion", - "greater_pincushion", "ward", "immolation"); - - String runicSelection; - do { - Random choose = new Random(); - int randomIndex = choose.nextInt(runicList.size()); - runicSelection = runicList.get(randomIndex); - } while (!checkRunicBlacklist(runicSelection)); - return runicSelection; - } - - public static String chooseRunefusedPower() { - List runicList = Arrays.asList( - "active_defence", "float", "greater_float", "freeze", "shielding", "greater_shielding", "slow", - "greater_slow", "stoneskin", "greater_stoneskin", "swiftness", "greater_swiftness", "trailblaze", - "greater_trailblaze", "weaken", "greater_weaken", "zephyr", "greater_zephyr", "frost_ward", "wildfire", - "unstable", "imbued", "greater_imbued", "pincushion", "greater_pincushion"); - - String runicSelection; - do { - Random choose = new Random(); - int randomIndex = choose.nextInt(runicList.size()); - runicSelection = runicList.get(randomIndex); - } while (!checkRunicBlacklist(runicSelection)); - return runicSelection; - } - - public static String chooseNetherfusedPower() { - List netherList; - if (Platform.isModLoaded("simplyskills")) - netherList = Arrays.asList("echo", "berserk", "radiance", "onslaught", "nullification", - "precise", "mighty", "stealthy", "renewed", "accelerant", "leaping", "spellshield", "spellforged", - "soulshock", "spell_standard", "war_standard", "deception"); - else - netherList = Arrays.asList("echo", "berserk", "radiance", "onslaught", "nullification"); - - String netherSelection; - do { - Random choose = new Random(); - int randomIndex = choose.nextInt(netherList.size()); - netherSelection = netherList.get(randomIndex); - } while (!checkNetherBlacklist(netherSelection)); - return netherSelection; - } - //Check if item is a unique 2H weapon public static boolean isUniqueTwohanded(ItemStack stack) { - return stack.isOf(ItemsRegistry.SOULPYRE.get()) || - stack.isOf(ItemsRegistry.SOULKEEPER.get()) || - stack.isOf(ItemsRegistry.TWISTED_BLADE.get()) || - stack.isOf(ItemsRegistry.HEARTHFLAME.get()) || - stack.isOf(ItemsRegistry.SOULRENDER.get()) || - stack.isOf(ItemsRegistry.SLUMBERING_LICHBLADE.get()) || - stack.isOf(ItemsRegistry.WAKING_LICHBLADE.get()) || - stack.isOf(ItemsRegistry.AWAKENED_LICHBLADE.get()) || - stack.isOf(ItemsRegistry.BRIMSTONE_CLAYMORE.get()) || - stack.isOf(ItemsRegistry.ICEWHISPER.get()) || - stack.isOf(ItemsRegistry.ARCANETHYST.get()) || - stack.isOf(ItemsRegistry.THUNDERBRAND.get()) || - stack.isOf(ItemsRegistry.WHISPERWIND.get()) || - stack.isOf(ItemsRegistry.WATCHER_CLAYMORE.get()); + return stack.getItem() instanceof TwoHandedWeapon; } //Create Box - public static Box createBox(Entity entity, int radius) { + public static Box createBox(Entity entity, double radius) { return new Box(entity.getX() + radius, entity.getY() + (float) radius / 3, entity.getZ() + radius, entity.getX() - radius, entity.getY() - (float) radius / 3, entity.getZ() - radius); } @@ -327,7 +173,7 @@ public static Vec3d getPositionLookingAt(PlayerEntity player, int range) { public static void incrementStatusEffect( LivingEntity livingEntity, - StatusEffect statusEffect, + RegistryEntry statusEffect, int duration, int amplifier, int amplifierMax) { @@ -350,7 +196,7 @@ public static void incrementStatusEffect( public static SimplySwordsStatusEffectInstance incrementSimplySwordsStatusEffect( LivingEntity livingEntity, - StatusEffect statusEffect, + RegistryEntry statusEffect, int duration, int amplifier, int amplifierMax) { @@ -377,7 +223,7 @@ public static SimplySwordsStatusEffectInstance incrementSimplySwordsStatusEffect return statusReturn; } - public static void decrementStatusEffect(LivingEntity livingEntity, StatusEffect statusEffect) { + public static void decrementStatusEffect(LivingEntity livingEntity, RegistryEntry statusEffect) { if (livingEntity.hasStatusEffect(statusEffect)) { int currentAmplifier = livingEntity.getStatusEffect(statusEffect).getAmplifier(); @@ -395,9 +241,10 @@ public static void decrementStatusEffect(LivingEntity livingEntity, StatusEffect } // createFootfalls - creates weapon footfall particle effects (footsteps) - public static void createFootfalls(Entity entity, ItemStack stack, World world, int stepMod, DefaultParticleType particle, - DefaultParticleType sprintParticle, DefaultParticleType passiveParticle, boolean passiveParticles) { - if ((entity instanceof PlayerEntity player) && Config.getBoolean("enableWeaponFootfalls", "General",ConfigDefaultValues.enableWeaponFootfalls) && player.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { + public static void createFootfalls(Entity entity, ItemStack stack, World world, ParticleEffect particle, + ParticleEffect sprintParticle, ParticleEffect passiveParticle, boolean passiveParticles) { + int stepMod = 7 - (int)(world.getTime() % 7); + if ((entity instanceof PlayerEntity player) && Config.general.enableWeaponFootfalls && player.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { if (isWalking(player) && !player.isSwimming() && player.isOnGround()) { if (stepMod == 6) { if (player.isSprinting()) { @@ -425,7 +272,7 @@ public static void createFootfalls(Entity entity, ItemStack stack, World world, } } } - if (passiveParticles && Config.getBoolean("enablePassiveParticles", "General",ConfigDefaultValues.enablePassiveParticles)) { + if (passiveParticles && Config.general.enablePassiveParticles) { float randomy = (float) (Math.random()); if (stepMod == 1) { world.addParticle(passiveParticle, player.getX() - player.getHandPosOffset(stack.getItem()).getX(), @@ -501,10 +348,14 @@ public static void spawnRainingParticles(ServerWorld world, ParticleEffect parti } } + public static float spellScaledDamage(String spellSchool, Entity entity, float damageModifier, float damageFallback) { + float scaling = commonSpellAttributeScaling(damageModifier, entity, spellSchool); + return scaling > 0 ? scaling : damageFallback; + } public static float commonSpellAttributeScaling(float damageModifier, Entity entity, String magicSchool) { if (Platform.isModLoaded("spell_power") && Platform.isFabric()) - if ((entity instanceof PlayerEntity player) && Config.getBoolean("compatEnableSpellPowerScaling", "General",ConfigDefaultValues.compatEnableSpellPowerScaling) && SimplySwords.passVersionCheck("spell_power", minimumSpellPowerVersion)) + if ((entity instanceof PlayerEntity player) && Config.general.compatEnableSpellPowerScaling.get() && SimplySwords.passVersionCheck("spell_power", minimumSpellPowerVersion)) return SimplySwordsExpectPlatform.getSpellPowerDamage(damageModifier, player, magicSchool); return 0f; @@ -539,13 +390,13 @@ public static List getNearbyLivingEntities(World world, Vec3d posi return world.getEntitiesByClass(LivingEntity.class, searchBox, entity -> true); } - //Get Item attack damage - public static double getAttackDamage(ItemStack stack){ - return stack.getItem().getAttributeModifiers(EquipmentSlot.MAINHAND) - .get(EntityAttributes.GENERIC_ATTACK_DAMAGE) - .stream() - .mapToDouble(EntityAttributeModifier::getValue) - .sum(); + //Get entity attack damage + public static double getEntityAttackDamage(LivingEntity livingEntity){ + EntityAttributeInstance attackDamageAttribute = livingEntity.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE); + if (attackDamageAttribute != null) { + return attackDamageAttribute.getValue(); + } + return 0; } public static void applyDamageWithoutKnockback(LivingEntity target, DamageSource source, float amount) { diff --git a/common/src/main/java/net/sweenus/simplyswords/util/ModLootTableModifiers.java b/common/src/main/java/net/sweenus/simplyswords/util/ModLootTableModifiers.java index 766a6c1f..6cda21ba 100644 --- a/common/src/main/java/net/sweenus/simplyswords/util/ModLootTableModifiers.java +++ b/common/src/main/java/net/sweenus/simplyswords/util/ModLootTableModifiers.java @@ -1,38 +1,44 @@ package net.sweenus.simplyswords.util; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; import dev.architectury.event.events.common.LootEvent; +import net.minecraft.item.Item; import net.minecraft.loot.LootPool; +import net.minecraft.loot.LootTable; import net.minecraft.loot.condition.RandomChanceLootCondition; import net.minecraft.loot.entry.ItemEntry; -import net.minecraft.loot.function.EnchantRandomlyLootFunction; import net.minecraft.loot.provider.number.ConstantLootNumberProvider; -import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.config.SimplySwordsConfig; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.tag.EnchantmentTags; +import net.minecraft.util.Identifier; +import net.sweenus.simplyswords.config.LootConfig; +import net.sweenus.simplyswords.item.UniqueSwordItem; import net.sweenus.simplyswords.registry.ItemsRegistry; +import java.util.List; + public class ModLootTableModifiers { - public static void init() { + //supplies a list of every unique sword item currently registered + private static final Supplier> swords = Suppliers.memoize(() -> Registries.ITEM.stream().filter(it -> it instanceof UniqueSwordItem).toList()); + - float standardLootWeight = Config.getFloat("standardLootTableWeight", "Loot", ConfigDefaultValues.standardLootTableWeight); - float rareLootWeight = Config.getFloat("rareLootTableWeight", "Loot", ConfigDefaultValues.rareLootTableWeight); - float runicLootWeight = Config.getFloat("runicLootTableWeight", "Loot", ConfigDefaultValues.runicLootTableWeight); - float uniqueLootWeight = Config.getFloat("uniqueLootTableWeight", "Loot", ConfigDefaultValues.uniqueLootTableWeight); + public static void init() { + // 1.21 temp //STANDARD - LootEvent.MODIFY_LOOT_TABLE.register(((lootTables, id, context, builtin) -> { - if (Config.getBoolean("enableLootDrops", "Loot", ConfigDefaultValues.enableLootDrops) && id.getPath().contains("chests") && !id.getPath().contains("spectrum")) { + LootEvent.MODIFY_LOOT_TABLE.register(((RegistryKey key, LootEvent.LootTableModificationContext context, boolean builtin) -> { + Identifier id = key.getValue(); + if (LootConfig.INSTANCE.enableLootDrops.get() && id.getPath().contains("chests") && !id.getPath().contains("spectrum")) { //System.out.println( id.getNamespace() + ":" + id.getPath()); //PRINT POSSIBLE PATHS - if (!Config.getBoolean("enableLootInVillages", "Loot", ConfigDefaultValues.enableLootInVillages) && id.getPath().contains("village")) { - //Do nothing - } - else { + if (LootConfig.INSTANCE.enableLootInVillages.get() || !id.getPath().contains("village")) { LootPool.Builder pool = LootPool.builder() .rolls(ConstantLootNumberProvider.create(1)) - .conditionally(RandomChanceLootCondition.builder(standardLootWeight)) // 1 = 100% of the time - .apply(EnchantRandomlyLootFunction.builder()) + .conditionally(RandomChanceLootCondition.builder(LootConfig.INSTANCE.standardLootTableWeight.get())) // 1 = 100% of the time + .apply(EnchantRandomlyFromTagLootFunction.create(EnchantmentTags.ON_RANDOM_LOOT)) //This is not ideal, but forge doesn't expose the registry wrapper so... .with(ItemEntry.builder(ItemsRegistry.IRON_LONGSWORD.get())) .with(ItemEntry.builder(ItemsRegistry.IRON_TWINBLADE.get())) .with(ItemEntry.builder(ItemsRegistry.IRON_RAPIER.get())) @@ -70,16 +76,14 @@ public static void init() { })); //RARE - LootEvent.MODIFY_LOOT_TABLE.register(((lootTables, id, context, builtin) -> { - if (Config.getBoolean("enableLootDrops", "Loot", ConfigDefaultValues.enableLootDrops) && id.getPath().contains("chests") && !id.getPath().contains("spectrum")) { - if (!Config.getBoolean("enableLootInVillages", "Loot", ConfigDefaultValues.enableLootInVillages) && id.getPath().contains("village")) { - //Do nothing - } - else { + LootEvent.MODIFY_LOOT_TABLE.register(((RegistryKey key, LootEvent.LootTableModificationContext context, boolean builtin) -> { + Identifier id = key.getValue(); + if (LootConfig.INSTANCE.enableLootDrops.get() && id.getPath().contains("chests") && !id.getPath().contains("spectrum")) { + if (LootConfig.INSTANCE.enableLootInVillages.get() || !id.getPath().contains("village")) { LootPool.Builder pool = LootPool.builder() .rolls(ConstantLootNumberProvider.create(1)) - .conditionally(RandomChanceLootCondition.builder(rareLootWeight)) // 1 = 100% of the time - .apply(EnchantRandomlyLootFunction.builder()) + .conditionally(RandomChanceLootCondition.builder(LootConfig.INSTANCE.rareLootTableWeight.get())) // 1 = 100% of the time + .apply(EnchantRandomlyFromTagLootFunction.create(EnchantmentTags.ON_RANDOM_LOOT)) //This is not ideal, but forge doesn't expose the registry wrapper so... .with(ItemEntry.builder(ItemsRegistry.DIAMOND_LONGSWORD.get())) .with(ItemEntry.builder(ItemsRegistry.DIAMOND_TWINBLADE.get())) .with(ItemEntry.builder(ItemsRegistry.DIAMOND_RAPIER.get())) @@ -100,16 +104,15 @@ public static void init() { } } })); - //RARE 2 - LootEvent.MODIFY_LOOT_TABLE.register(((lootTables, id, context, builtin) -> { - if (Config.getBoolean("enableLootDrops", "Loot", ConfigDefaultValues.enableLootDrops) && id.getPath().contains("chests") && !id.getPath().contains("spectrum")) { - if (!Config.getBoolean("enableLootInVillages", "Loot", ConfigDefaultValues.enableLootInVillages) && id.getPath().contains("village")) { - //Do nothing - } - else { + + //Runic / Rare 2 + LootEvent.MODIFY_LOOT_TABLE.register(((RegistryKey key, LootEvent.LootTableModificationContext context, boolean builtin) -> { + Identifier id = key.getValue(); + if (LootConfig.INSTANCE.enableLootDrops.get() && id.getPath().contains("chests") && !id.getPath().contains("spectrum")) { + if (LootConfig.INSTANCE.enableLootInVillages.get() || !id.getPath().contains("village")) { LootPool.Builder pool = LootPool.builder() .rolls(ConstantLootNumberProvider.create(1)) - .conditionally(RandomChanceLootCondition.builder(runicLootWeight)) // 1 = 100% of the time + .conditionally(RandomChanceLootCondition.builder(LootConfig.INSTANCE.runicLootTableWeight.get())) // 1 = 100% of the time .with(ItemEntry.builder(ItemsRegistry.RUNIC_TABLET.get())); context.addPool(pool); } @@ -119,164 +122,32 @@ public static void init() { //UNIQUE // Check each loot table against the listed namespaces in the loot_config.json, if there's a match modify the // table according to the config. Otherwise, use the loot global loot modifiers set in the general_config.json - LootEvent.MODIFY_LOOT_TABLE.register(((lootTables, id, context, builtin) -> { - if (Config.getBoolean("enableLootDrops", "Loot", ConfigDefaultValues.enableLootDrops)) { - if (SimplySwordsConfig.getLootList(id.toString())) { - float lootChance = SimplySwordsConfig.getLootModifiers(id.toString()); - if (lootChance > 0.0) { // If chance is set to 0 treat as a blacklist and don't inject the loot at all - LootPool.Builder pool = LootPool.builder() - .rolls(ConstantLootNumberProvider.create(1)) - .conditionally(RandomChanceLootCondition.builder(lootChance)); - if (Config.getBoolean("enableTheWatcher", "Loot", ConfigDefaultValues.enableTheWatcher)) - pool.with(ItemEntry.builder(ItemsRegistry.WATCHER_CLAYMORE.get())); - if (Config.getBoolean("enableWatchingWarglaive", "Loot", ConfigDefaultValues.enableWatchingWarglaive)) - pool.with(ItemEntry.builder(ItemsRegistry.WATCHING_WARGLAIVE.get())); - if (Config.getBoolean("enableLongswordOfThePlague", "Loot", ConfigDefaultValues.enableLongswordOfThePlague)) - pool.with(ItemEntry.builder(ItemsRegistry.TOXIC_LONGSWORD.get())); - if (Config.getBoolean("enableSwordOnAStick", "Loot", ConfigDefaultValues.enableSwordOnAStick)) - pool.with(ItemEntry.builder(ItemsRegistry.SWORD_ON_A_STICK.get())); - if (Config.getBoolean("enableBramblethorn", "Loot", ConfigDefaultValues.enableBramblethorn)) - pool.with(ItemEntry.builder(ItemsRegistry.BRAMBLETHORN.get())); - if (Config.getBoolean("enableStormsEdge", "Loot", ConfigDefaultValues.enableStormsEdge)) - pool.with(ItemEntry.builder(ItemsRegistry.STORMS_EDGE.get())); - if (Config.getBoolean("enableStormbringer", "Loot", ConfigDefaultValues.enableStormbringer)) - pool.with(ItemEntry.builder(ItemsRegistry.STORMBRINGER.get())); - if (Config.getBoolean("enableMjolnir", "Loot", ConfigDefaultValues.enableMjolnir)) - pool.with(ItemEntry.builder(ItemsRegistry.MJOLNIR.get())); - if (Config.getBoolean("enableEmberblade", "Loot", ConfigDefaultValues.enableEmberblade)) - pool.with(ItemEntry.builder(ItemsRegistry.EMBERBLADE.get())); - if (Config.getBoolean("enableHearthflame", "Loot", ConfigDefaultValues.enableHearthflame)) - pool.with(ItemEntry.builder(ItemsRegistry.HEARTHFLAME.get())); - if (Config.getBoolean("enableTwistedBlade", "Loot", ConfigDefaultValues.enableTwistedBlade)) - pool.with(ItemEntry.builder(ItemsRegistry.TWISTED_BLADE.get())); - if (Config.getBoolean("enableSoulrender", "Loot", ConfigDefaultValues.enableSoulrender)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULRENDER.get())); - if (Config.getBoolean("enableSoulpyre", "Loot", ConfigDefaultValues.enableSoulpyre)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULPYRE.get())); - if (Config.getBoolean("enableSoulkeeper", "Loot", ConfigDefaultValues.enableSoulkeeper)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULKEEPER.get())); - if (Config.getBoolean("enableSoulstealer", "Loot", ConfigDefaultValues.enableSoulstealer)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULSTEALER.get())); - if (Config.getBoolean("enableFrostfall", "Loot", ConfigDefaultValues.enableFrostfall)) - pool.with(ItemEntry.builder(ItemsRegistry.FROSTFALL.get())); - if (Config.getBoolean("enableMoltenEdge", "Loot", ConfigDefaultValues.enableMoltenEdge)) - pool.with(ItemEntry.builder(ItemsRegistry.MOLTEN_EDGE.get())); - if (Config.getBoolean("enableLivyatan", "Loot", ConfigDefaultValues.enableLivyatan)) - pool.with(ItemEntry.builder(ItemsRegistry.LIVYATAN.get())); - if (Config.getBoolean("enableIcewhisper", "Loot", ConfigDefaultValues.enableIcewhisper)) - pool.with(ItemEntry.builder(ItemsRegistry.ICEWHISPER.get())); - if (Config.getBoolean("enableArcanethyst", "Loot", ConfigDefaultValues.enableArcanethyst)) - pool.with(ItemEntry.builder(ItemsRegistry.ARCANETHYST.get())); - if (Config.getBoolean("enableThunderbrand", "Loot", ConfigDefaultValues.enableThunderbrand)) - pool.with(ItemEntry.builder(ItemsRegistry.THUNDERBRAND.get())); - if (Config.getBoolean("enableBrimstone", "Loot", ConfigDefaultValues.enableBrimstone)) - pool.with(ItemEntry.builder(ItemsRegistry.BRIMSTONE_CLAYMORE.get())); - if (Config.getBoolean("enableSlumberingLichblade", "Loot", ConfigDefaultValues.enableSlumberingLichblade)) - pool.with(ItemEntry.builder(ItemsRegistry.SLUMBERING_LICHBLADE.get())); - if (Config.getBoolean("enableShadowsting", "Loot", ConfigDefaultValues.enableShadowsting)) - pool.with(ItemEntry.builder(ItemsRegistry.SHADOWSTING.get())); - if (Config.getBoolean("enableDormantRelic", "Loot", ConfigDefaultValues.enableDormantRelic)) - pool.with(ItemEntry.builder(ItemsRegistry.DORMANT_RELIC.get())); - if (Config.getBoolean("enableWhisperwind", "Loot", ConfigDefaultValues.enableWhisperwind)) - pool.with(ItemEntry.builder(ItemsRegistry.WHISPERWIND.get())); - if (Config.getBoolean("enableEmberlash", "Loot", ConfigDefaultValues.enableEmberlash)) - pool.with(ItemEntry.builder(ItemsRegistry.EMBERLASH.get())); - if (Config.getBoolean("enableWaxweaver", "Loot", ConfigDefaultValues.enableWaxweaver)) - pool.with(ItemEntry.builder(ItemsRegistry.WAXWEAVER.get())); - if (Config.getBoolean("enableHiveheart", "Loot", ConfigDefaultValues.enableHiveheart)) - pool.with(ItemEntry.builder(ItemsRegistry.HIVEHEART.get())); - if (Config.getBoolean("enableStarsEdge", "Loot", ConfigDefaultValues.enableStarsEdge)) - pool.with(ItemEntry.builder(ItemsRegistry.STARS_EDGE.get())); - if (Config.getBoolean("enableWickpiercer", "Loot", ConfigDefaultValues.enableWickpiercer)) - pool.with(ItemEntry.builder(ItemsRegistry.WICKPIERCER.get())); - if (Config.getBoolean("enableTempest", "Loot", ConfigDefaultValues.enableTempest)) - pool.with(ItemEntry.builder(ItemsRegistry.TEMPEST.get())); - if (Config.getBoolean("enableFlamewind", "Loot", ConfigDefaultValues.enableFlamewind)) - pool.with(ItemEntry.builder(ItemsRegistry.FLAMEWIND.get())); - if (Config.getBoolean("enableRibboncleaver", "Loot", ConfigDefaultValues.enableRibboncleaver)) - pool.with(ItemEntry.builder(ItemsRegistry.RIBBONCLEAVER.get())); - if (Config.getBoolean("enableCaelestis", "Loot", ConfigDefaultValues.enableCaelestis)) - pool.with(ItemEntry.builder(ItemsRegistry.CAELESTIS.get())); + LootEvent.MODIFY_LOOT_TABLE.register(((RegistryKey key, LootEvent.LootTableModificationContext context, boolean builtin) -> { + Identifier id = key.getValue(); + if (LootConfig.INSTANCE.enableLootDrops.get()) { + Float lootChance = LootConfig.INSTANCE.uniqueLootTableOptions.get(id); + if (lootChance != null && lootChance > 0f) { - context.addPool(pool); - } + LootPool.Builder pool = LootPool.builder() + .rolls(ConstantLootNumberProvider.create(1)) + .conditionally(RandomChanceLootCondition.builder(lootChance)); + + swords.get().stream().filter(it -> !LootConfig.INSTANCE.disabledUniqueWeaponLoot.contains(it)).forEach( item -> + pool.with(ItemEntry.builder(item)) + ); + + context.addPool(pool); } else { if (id.getPath().contains("chests") && !id.getPath().contains("spectrum")) { LootPool.Builder pool = LootPool.builder() .rolls(ConstantLootNumberProvider.create(1)) - .conditionally(RandomChanceLootCondition.builder(uniqueLootWeight)); // 1 = 100% of the time - if (Config.getBoolean("enableTheWatcher", "Loot", ConfigDefaultValues.enableTheWatcher)) - pool.with(ItemEntry.builder(ItemsRegistry.WATCHER_CLAYMORE.get())); - if (Config.getBoolean("enableWatchingWarglaive", "Loot", ConfigDefaultValues.enableWatchingWarglaive)) - pool.with(ItemEntry.builder(ItemsRegistry.WATCHING_WARGLAIVE.get())); - if (Config.getBoolean("enableLongswordOfThePlague", "Loot", ConfigDefaultValues.enableLongswordOfThePlague)) - pool.with(ItemEntry.builder(ItemsRegistry.TOXIC_LONGSWORD.get())); - if (Config.getBoolean("enableSwordOnAStick", "Loot", ConfigDefaultValues.enableSwordOnAStick)) - pool.with(ItemEntry.builder(ItemsRegistry.SWORD_ON_A_STICK.get())); - if (Config.getBoolean("enableBramblethorn", "Loot", ConfigDefaultValues.enableBramblethorn)) - pool.with(ItemEntry.builder(ItemsRegistry.BRAMBLETHORN.get())); - if (Config.getBoolean("enableStormsEdge", "Loot", ConfigDefaultValues.enableStormsEdge)) - pool.with(ItemEntry.builder(ItemsRegistry.STORMS_EDGE.get())); - if (Config.getBoolean("enableStormbringer", "Loot", ConfigDefaultValues.enableStormbringer)) - pool.with(ItemEntry.builder(ItemsRegistry.STORMBRINGER.get())); - if (Config.getBoolean("enableMjolnir", "Loot", ConfigDefaultValues.enableMjolnir)) - pool.with(ItemEntry.builder(ItemsRegistry.MJOLNIR.get())); - if (Config.getBoolean("enableEmberblade", "Loot", ConfigDefaultValues.enableEmberblade)) - pool.with(ItemEntry.builder(ItemsRegistry.EMBERBLADE.get())); - if (Config.getBoolean("enableHearthflame", "Loot", ConfigDefaultValues.enableHearthflame)) - pool.with(ItemEntry.builder(ItemsRegistry.HEARTHFLAME.get())); - if (Config.getBoolean("enableTwistedBlade", "Loot", ConfigDefaultValues.enableTwistedBlade)) - pool.with(ItemEntry.builder(ItemsRegistry.TWISTED_BLADE.get())); - if (Config.getBoolean("enableSoulrender", "Loot", ConfigDefaultValues.enableSoulrender)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULRENDER.get())); - if (Config.getBoolean("enableSoulpyre", "Loot", ConfigDefaultValues.enableSoulpyre)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULPYRE.get())); - if (Config.getBoolean("enableSoulkeeper", "Loot", ConfigDefaultValues.enableSoulkeeper)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULKEEPER.get())); - if (Config.getBoolean("enableSoulstealer", "Loot", ConfigDefaultValues.enableSoulstealer)) - pool.with(ItemEntry.builder(ItemsRegistry.SOULSTEALER.get())); - if (Config.getBoolean("enableFrostfall", "Loot", ConfigDefaultValues.enableFrostfall)) - pool.with(ItemEntry.builder(ItemsRegistry.FROSTFALL.get())); - if (Config.getBoolean("enableMoltenEdge", "Loot", ConfigDefaultValues.enableMoltenEdge)) - pool.with(ItemEntry.builder(ItemsRegistry.MOLTEN_EDGE.get())); - if (Config.getBoolean("enableLivyatan", "Loot", ConfigDefaultValues.enableLivyatan)) - pool.with(ItemEntry.builder(ItemsRegistry.LIVYATAN.get())); - if (Config.getBoolean("enableIcewhisper", "Loot", ConfigDefaultValues.enableIcewhisper)) - pool.with(ItemEntry.builder(ItemsRegistry.ICEWHISPER.get())); - if (Config.getBoolean("enableArcanethyst", "Loot", ConfigDefaultValues.enableArcanethyst)) - pool.with(ItemEntry.builder(ItemsRegistry.ARCANETHYST.get())); - if (Config.getBoolean("enableThunderbrand", "Loot", ConfigDefaultValues.enableThunderbrand)) - pool.with(ItemEntry.builder(ItemsRegistry.THUNDERBRAND.get())); - if (Config.getBoolean("enableBrimstone", "Loot", ConfigDefaultValues.enableBrimstone)) - pool.with(ItemEntry.builder(ItemsRegistry.BRIMSTONE_CLAYMORE.get())); - if (Config.getBoolean("enableSlumberingLichblade", "Loot", ConfigDefaultValues.enableSlumberingLichblade)) - pool.with(ItemEntry.builder(ItemsRegistry.SLUMBERING_LICHBLADE.get())); - if (Config.getBoolean("enableShadowsting", "Loot", ConfigDefaultValues.enableShadowsting)) - pool.with(ItemEntry.builder(ItemsRegistry.SHADOWSTING.get())); - if (Config.getBoolean("enableDormantRelic", "Loot", ConfigDefaultValues.enableDormantRelic)) - pool.with(ItemEntry.builder(ItemsRegistry.DORMANT_RELIC.get())); - if (Config.getBoolean("enableWhisperwind", "Loot", ConfigDefaultValues.enableWhisperwind)) - pool.with(ItemEntry.builder(ItemsRegistry.WHISPERWIND.get())); - if (Config.getBoolean("enableEmberlash", "Loot", ConfigDefaultValues.enableEmberlash)) - pool.with(ItemEntry.builder(ItemsRegistry.EMBERLASH.get())); - if (Config.getBoolean("enableWaxweaver", "Loot", ConfigDefaultValues.enableWaxweaver)) - pool.with(ItemEntry.builder(ItemsRegistry.WAXWEAVER.get())); - if (Config.getBoolean("enableHiveheart", "Loot", ConfigDefaultValues.enableHiveheart)) - pool.with(ItemEntry.builder(ItemsRegistry.HIVEHEART.get())); - if (Config.getBoolean("enableStarsEdge", "Loot", ConfigDefaultValues.enableStarsEdge)) - pool.with(ItemEntry.builder(ItemsRegistry.STARS_EDGE.get())); - if (Config.getBoolean("enableWickpiercer", "Loot", ConfigDefaultValues.enableWickpiercer)) - pool.with(ItemEntry.builder(ItemsRegistry.WICKPIERCER.get())); - if (Config.getBoolean("enableTempest", "Loot", ConfigDefaultValues.enableTempest)) - pool.with(ItemEntry.builder(ItemsRegistry.TEMPEST.get())); - if (Config.getBoolean("enableFlamewind", "Loot", ConfigDefaultValues.enableFlamewind)) - pool.with(ItemEntry.builder(ItemsRegistry.FLAMEWIND.get())); - if (Config.getBoolean("enableRibboncleaver", "Loot", ConfigDefaultValues.enableRibboncleaver)) - pool.with(ItemEntry.builder(ItemsRegistry.RIBBONCLEAVER.get())); - if (Config.getBoolean("enableCaelestis", "Loot", ConfigDefaultValues.enableCaelestis)) - pool.with(ItemEntry.builder(ItemsRegistry.CAELESTIS.get())); + .conditionally(RandomChanceLootCondition.builder(LootConfig.INSTANCE.uniqueLootTableWeight.get())); // 1 = 100% of the time + + swords.get().stream().filter(it -> !LootConfig.INSTANCE.disabledUniqueWeaponLoot.contains(it)).forEach( item -> + pool.with(ItemEntry.builder(item)) + ); context.addPool(pool); } @@ -284,5 +155,6 @@ public static void init() { } })); + } } \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/util/RunicMethods.java b/common/src/main/java/net/sweenus/simplyswords/util/RunicMethods.java deleted file mode 100644 index 26d36c01..00000000 --- a/common/src/main/java/net/sweenus/simplyswords/util/RunicMethods.java +++ /dev/null @@ -1,509 +0,0 @@ -package net.sweenus.simplyswords.util; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.entity.*; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.ArrowEntity; -import net.minecraft.entity.projectile.thrown.SnowballEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.text.Text; -import net.minecraft.util.math.Box; -import net.minecraft.world.World; -import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.entity.BattleStandardEntity; -import net.sweenus.simplyswords.registry.EffectRegistry; -import net.sweenus.simplyswords.registry.EntityRegistry; -import net.sweenus.simplyswords.registry.SoundRegistry; - -public class RunicMethods { - - // ------- POSTHIT ------- // - - // Runic Power - FREEZE - public static void postHitRunicFreeze(LivingEntity target, LivingEntity attacker) { - - int hitChance = (int) Config.getFloat("freezeChance", "RunicEffects", ConfigDefaultValues.freezeChance); - int freezeDuration = (int) Config.getFloat("freezeDuration", "RunicEffects", ConfigDefaultValues.freezeDuration); - int duration = freezeDuration * 3; - - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 1), attacker); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(EffectRegistry.FREEZE.get(), freezeDuration, 1), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - WILDFIRE - public static void postHitRunicWildfire(LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("wildfireChance", "RunicEffects", ConfigDefaultValues.wildfireChance); - int duration = (int) Config.getFloat("wildfireDuration", "RunicEffects", ConfigDefaultValues.wildfireDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(EffectRegistry.WILDFIRE.get(), duration, 3), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - SLOW - public static void postHitRunicSlow(LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("slowChance", "RunicEffects", ConfigDefaultValues.slowChance); - int duration = (int) Config.getFloat("slowDuration", "RunicEffects", ConfigDefaultValues.slowDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 1), attacker); - } - } - - // Runic Power - GREATER SLOW - public static void postHitRunicGreaterSlow(LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("slowChance", "RunicEffects", ConfigDefaultValues.slowChance); - int duration = (int) Config.getFloat("slowDuration", "RunicEffects", ConfigDefaultValues.slowDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 2), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - SWIFTNESS - public static void postHitRunicSwiftness(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("swiftnessChance", "RunicEffects", ConfigDefaultValues.swiftnessChance); - int duration = (int) Config.getFloat("swiftnessDuration", "RunicEffects", ConfigDefaultValues.swiftnessDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, 0), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - GREATER SWIFTNESS - public static void postHitRunicGreaterSwiftness(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("swiftnessChance", "RunicEffects", ConfigDefaultValues.swiftnessChance); - int duration = (int) Config.getFloat("swiftnessDuration", "RunicEffects", ConfigDefaultValues.swiftnessDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, 1), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - FLOAT - public static void postHitRunicFloat(LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("floatChance", "RunicEffects", ConfigDefaultValues.floatChance); - int duration = (int) Config.getFloat("floatDuration", "RunicEffects", ConfigDefaultValues.floatDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, duration, 2), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - GREATER FLOAT - public static void postHitRunicGreaterFloat(LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("floatChance", "RunicEffects", ConfigDefaultValues.floatChance); - int duration = (int) Config.getFloat("floatDuration", "RunicEffects", ConfigDefaultValues.floatDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, duration, 3), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - ZEPHYR - public static void postHitRunicZephyr(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("zephyrChance", "RunicEffects", ConfigDefaultValues.zephyrChance); - int duration = (int) Config.getFloat("zephyrDuration", "RunicEffects", ConfigDefaultValues.zephyrDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, 0), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, 0), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - GREATER ZEPHYR - public static void postHitRunicGreaterZephyr(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("zephyrChance", "RunicEffects", ConfigDefaultValues.zephyrChance); - int duration = (int) Config.getFloat("zephyrDuration", "RunicEffects", ConfigDefaultValues.zephyrDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration, 1), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, 1), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - SHIELDING - public static void postHitRunicShielding(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("shieldingChance", "RunicEffects", ConfigDefaultValues.shieldingChance); - int duration = (int) Config.getFloat("shieldingDuration", "RunicEffects", ConfigDefaultValues.shieldingDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.ABSORPTION, duration, 0), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - GREATER SHIELDING - public static void postHitRunicGreaterShielding(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("shieldingChance", "RunicEffects", ConfigDefaultValues.shieldingChance); - int duration = (int) Config.getFloat("shieldingDuration", "RunicEffects", ConfigDefaultValues.shieldingDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.ABSORPTION, duration, 1), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - STONESKIN - public static void postHitRunicStoneskin(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("stoneskinChance", "RunicEffects", ConfigDefaultValues.stoneskinChance); - int duration = (int) Config.getFloat("stoneskinDuration", "RunicEffects", ConfigDefaultValues.stoneskinDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration, 1), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, duration, 0), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 0), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.ELEMENTAL_SWORD_EARTH_ATTACK_02.get(), - attacker.getSoundCategory(), 0.3f, 1.3f); - } - } - - // Runic Power - GREATER STONESKIN - public static void postHitRunicGreaterStoneskin(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("stoneskinChance", "RunicEffects", ConfigDefaultValues.stoneskinChance); - int duration = (int) Config.getFloat("stoneskinDuration", "RunicEffects", ConfigDefaultValues.stoneskinDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration, 2), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, duration, 0), attacker); - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 1), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.ELEMENTAL_SWORD_EARTH_ATTACK_02.get(), - attacker.getSoundCategory(), 0.3f, 1.1f); - } - } - - // Runic Power - TRAILBLAZE - public static void postHitRunicTrailblaze(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("trailblazeChance", "RunicEffects", ConfigDefaultValues.trailblazeChance); - int duration = (int) Config.getFloat("trailblazeDuration", "RunicEffects", ConfigDefaultValues.trailblazeDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, 1), attacker); - attacker.setOnFireFor(duration / 20); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - GREATER TRAILBLAZE - public static void postHitRunicGreaterTrailblaze(LivingEntity attacker) { - int hitChance = (int) Config.getFloat("trailblazeChance", "RunicEffects", ConfigDefaultValues.trailblazeChance); - int duration = (int) Config.getFloat("trailblazeDuration", "RunicEffects", ConfigDefaultValues.trailblazeDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - attacker.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration, 2), attacker); - attacker.setOnFireFor(duration / 20); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - WEAKNESS - public static void postHitRunicWeaken(LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("weakenChance", "RunicEffects", ConfigDefaultValues.weakenChance); - int duration = (int) Config.getFloat("weakenDuration", "RunicEffects", ConfigDefaultValues.weakenDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, duration, 0), attacker); - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 1), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - GREATER WEAKNESS - public static void postHitRunicGreaterWeaken(LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("weakenChance", "RunicEffects", ConfigDefaultValues.weakenChance); - int duration = (int) Config.getFloat("weakenDuration", "RunicEffects", ConfigDefaultValues.weakenDuration); - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, duration, 1), attacker); - target.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration, 2), attacker); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - } - - // Runic Power - IMBUED - public static void postHitRunicImbued(ItemStack stack, LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("imbuedChance", "RunicEffects", ConfigDefaultValues.imbuedChance); - int damage = 6 - ((stack.getDamage() / stack.getMaxDamage()) * 100) / 20; - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.timeUntilRegen = 0; - target.damage(attacker.getDamageSources().magic(), damage); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.2f, 1.8f); - } - } - - // Runic Power - GREATER IMBUED - public static void postHitRunicGreaterImbued(ItemStack stack, LivingEntity target, LivingEntity attacker) { - int hitChance = (int) Config.getFloat("imbuedChance", "RunicEffects", ConfigDefaultValues.imbuedChance); - int damage = 10 - ((stack.getDamage() / stack.getMaxDamage()) * 100) / 10; - - if (attacker.getRandom().nextInt(100) <= hitChance) { - target.timeUntilRegen = 0; - target.damage(attacker.getDamageSources().magic(), damage); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.2f, 1.8f); - } - } - - // Runic Power - PinCushion - public static void postHitRunicPinCushion(LivingEntity target, LivingEntity attacker) { - int stuckArrows = attacker.getStuckArrowCount(); - target.damage(attacker.getDamageSources().generic(), stuckArrows); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - - // Runic Power - Greater PinCushion - public static void postHitRunicGreaterPinCushion(LivingEntity target, LivingEntity attacker) { - int stuckArrows = attacker.getStuckArrowCount(); - target.damage(attacker.getDamageSources().generic(), stuckArrows * 2); - attacker.getWorld().playSoundFromEntity(null, attacker, SoundRegistry.MAGIC_SWORD_SPELL_02.get(), - attacker.getSoundCategory(), 0.1f, 1.8f); - } - - // Nether Power - ECHO - public static void postHitNetherEcho(ItemStack stack, LivingEntity target, LivingEntity attacker) { - int amp = 0; - //increase damage if 2H wep - if (HelperMethods.isUniqueTwohanded(stack)) - amp = 2; - target.addStatusEffect(new StatusEffectInstance(EffectRegistry.ECHO.get(), 20, amp), attacker); - } - - // Nether Power - BERSERK - public static void postHitNetherBerserk(ItemStack stack, LivingEntity target, LivingEntity attacker) { - int amp = 2; - //increase damage if 2H wep - if (HelperMethods.isUniqueTwohanded(stack)) - amp = 4; - if (attacker.getArmor() < 10) { - target.setHealth(target.getHealth() - amp); - attacker.heal((float) amp / 2); - } - } - - // Nether Power - RADIANCE - public static void postHitNetherRadiance(LivingEntity target, LivingEntity attacker) { - if (target.hasStatusEffect(StatusEffects.WEAKNESS)) { - attacker.addStatusEffect(new StatusEffectInstance(EffectRegistry.IMMOLATION.get(), 200, 4), attacker); - } - } - - // Nether Power - ONSLAUGHT - public static void postHitNetherOnslaught(LivingEntity target, LivingEntity attacker) { - if (target.hasStatusEffect(StatusEffects.SLOWNESS) && !attacker.hasStatusEffect(StatusEffects.WEAKNESS)) { - attacker.addStatusEffect(new StatusEffectInstance(EffectRegistry.ONSLAUGHT.get(), 80, 0), attacker); - } - } - - // Nether Power - NULLIFICATION - public static void postHitNetherNullification(LivingEntity user) { - if (!user.hasStatusEffect(EffectRegistry.BATTLE_FATIGUE.get())) { - if (!user.getWorld().isClient()) { - ServerWorld serverWorld = (ServerWorld) user.getWorld(); - BlockState currentState = serverWorld.getBlockState(user.getBlockPos().up(4).offset(user.getMovementDirection(), 3)); - BlockState state = Blocks.AIR.getDefaultState(); - if (currentState == state) { - serverWorld.playSoundFromEntity(null, user, SoundRegistry.ELEMENTAL_SWORD_EARTH_ATTACK_01.get(), - user.getSoundCategory(), 0.4f, 0.8f); - BattleStandardEntity banner = EntityRegistry.BATTLESTANDARD.get().spawn( - serverWorld, - user.getBlockPos().up(4).offset(user.getMovementDirection(), 3), - SpawnReason.MOB_SUMMONED); - if (banner != null) { - banner.setVelocity(0, -1, 0); - banner.ownerEntity = user; - banner.decayRate = 3; - banner.standardType = "nullification"; - banner.setCustomName(Text.translatable("entity.simplyswords.battlestandard.name", user.getName())); - } - user.addStatusEffect(new StatusEffectInstance(EffectRegistry.BATTLE_FATIGUE.get(), 800, 0), user); - } - } - } - } - - - // Runic Power - EMPTY - public static void postHitRunicEmpty(ItemStack stack, LivingEntity target, LivingEntity attacker) { - - - } - - // ------- ON STOPPED USING ------- // - - public static void stoppedUsingRunicMomentum(ItemStack stack, LivingEntity user) { - //Player dash end - if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { - user.setVelocity(0, 0, 0); // Stop player at end of charge - user.velocityModified = true; - } - } - - - // ------- USAGE TICK ------- // - - - //Runic Power - MOMENTUM - public static void usageTickRunicMomentum(ItemStack stack, LivingEntity user, int remainingUseTicks) { - int skillCooldown = (int) Config.getFloat("momentumCooldown", "RunicEffects", ConfigDefaultValues.momentumCooldown); - if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && user.isOnGround()) { - //Player dash forward - if (remainingUseTicks == 12 || remainingUseTicks == 13 && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { - user.setVelocity(user.getRotationVector().multiply(+3)); - user.setVelocity(user.getVelocity().x, 0, user.getVelocity().z); // Prevent player flying to the heavens - user.velocityModified = true; - if (user instanceof PlayerEntity player) { - player.getItemCooldownManager().set(stack.getItem(), skillCooldown); - } - } - } - } - - //Runic Power - GREATER MOMENTUM - public static void usageTickRunicGreaterMomentum(ItemStack stack, LivingEntity user, int remainingUseTicks) { - int skillCooldown = (int) Config.getFloat("momentumCooldown", "RunicEffects", ConfigDefaultValues.momentumCooldown); - if (user.getEquippedStack(EquipmentSlot.MAINHAND) == stack && user.isOnGround()) { - //Player dash forward - if (remainingUseTicks == 10 || remainingUseTicks == 13 && user.getEquippedStack(EquipmentSlot.MAINHAND) == stack) { - user.setVelocity(user.getRotationVector().multiply(+3)); - user.setVelocity(user.getVelocity().x, 0, user.getVelocity().z); // Prevent player flying to the heavens - user.velocityModified = true; - if (user instanceof PlayerEntity player) { - player.getItemCooldownManager().set(stack.getItem(), skillCooldown); - } - } - } - } - - // ------- INVENTORY TICK ------- // - - - // Runic Power - UNSTABLE - public static void inventoryTickRunicUnstable(LivingEntity user) { - int duration = (int) Config.getFloat("unstableDuration", "RunicEffects", ConfigDefaultValues.unstableDuration); - int frequency = (int) Config.getFloat("unstableFrequency", "RunicEffects", ConfigDefaultValues.unstableFrequency); - if (user.age % frequency == 0) { - int random = (int) (Math.random() * 100); - if (random < 10) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.SPEED, duration)); - else if (random < 20) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.RESISTANCE, duration)); - else if (random < 30) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, duration)); - else if (random < 40) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.INVISIBILITY, duration)); - else if (random < 50) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.FIRE_RESISTANCE, duration)); - else if (random < 60) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.JUMP_BOOST, duration)); - else if (random < 70) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.HASTE, duration)); - else if (random < 80) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.DOLPHINS_GRACE, duration)); - else if (random < 90) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.WEAKNESS, duration)); - else if (random < 95) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.LEVITATION, duration)); - else if (random < 100) - user.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOW_FALLING, duration)); - } - } - - // Runic Power - ACTIVE DEFENCE - public static void inventoryTickRunicActiveDefence(World world, LivingEntity user) { - if (!world.isClient() && user instanceof PlayerEntity player && player.getInventory().contains(Items.ARROW.getDefaultStack())) { - int frequency = (int) Config.getFloat("activeDefenceFrequency", "RunicEffects", ConfigDefaultValues.activeDefenceFrequency); - if (player.age % frequency == 0) { - int sradius = (int) Config.getFloat("activeDefenceRadius", "RunicEffects", ConfigDefaultValues.activeDefenceRadius); - int vradius = (int) (Config.getFloat("activeDefenceRadius", "RunicEffects", ConfigDefaultValues.activeDefenceRadius) / 2); - double x = player.getX(); - double y = player.getY(); - double z = player.getZ(); - Box box = new Box(x + sradius, y + vradius, z + sradius, x - sradius, y - vradius, z - sradius); - for (Entity entity : world.getOtherEntities(player, box, EntityPredicates.VALID_LIVING_ENTITY)) { - - if (entity instanceof LivingEntity le && HelperMethods.checkFriendlyFire(le, player)) { - - int arrowSlot = player.getInventory().getSlotWithStack(Items.ARROW.getDefaultStack()); - ItemStack arrowStack = player.getInventory().getStack(arrowSlot); - int randomc = (int) (Math.random() * 100); - if (randomc < 15) { - arrowStack.decrement(1); - } - ArrowEntity arrow = new ArrowEntity(EntityType.ARROW, world); - arrow.updatePosition(player.getX(), (player.getY() + 1.5), player.getZ()); - arrow.setOwner(player); - arrow.setVelocity(le.getX() - player.getX(), (le.getY() - player.getY()) - 1, le.getZ() - player.getZ()); - world.spawnEntity(arrow); - break; - } - } - } - } - } - - // Runic Power - FROST WARD - public static void inventoryTickRunicFrostWard(World world, LivingEntity user) { - int frequency = (int) Config.getFloat("frostWardFrequency", "RunicEffects", ConfigDefaultValues.frostWardFrequency); - int duration = (int) Config.getFloat("frostWardDuration", "RunicEffects", ConfigDefaultValues.frostWardDuration); - if (user.age % frequency == 0) { - int sradius = (int) Config.getFloat("frostWardRadius", "RunicEffects", ConfigDefaultValues.frostWardRadius); - int vradius = (int) (Config.getFloat("frostWardRadius", "RunicEffects", ConfigDefaultValues.frostWardRadius) / 2); - double x = user.getX(); - double y = user.getY(); - double z = user.getZ(); - ServerWorld serverWorld = (ServerWorld) world; - Box box = new Box(x + sradius, y + vradius, z + sradius, x - sradius, y - vradius, z - sradius); - for (Entity entity : serverWorld.getOtherEntities(user, box, EntityPredicates.VALID_LIVING_ENTITY)) { - - if (entity instanceof LivingEntity le && HelperMethods.checkFriendlyFire(le, user)) { - - if (le.distanceTo(user) < sradius) { - SnowballEntity snowball = new SnowballEntity(EntityType.SNOWBALL, serverWorld); - snowball.updatePosition(user.getX(), (user.getY() + 1.5), user.getZ()); - snowball.setOwner(user); - le.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, duration)); - snowball.setVelocity(le.getX() - user.getX(), (le.getY() - user.getY()) - 1, le.getZ() - user.getZ()); - serverWorld.spawnEntity(snowball); - } - } - } - } - } -} \ No newline at end of file diff --git a/common/src/main/java/net/sweenus/simplyswords/util/SoundHelper.java b/common/src/main/java/net/sweenus/simplyswords/util/SoundHelper.java index 1008d669..25179bba 100644 --- a/common/src/main/java/net/sweenus/simplyswords/util/SoundHelper.java +++ b/common/src/main/java/net/sweenus/simplyswords/util/SoundHelper.java @@ -33,7 +33,7 @@ public static void loopSound(LivingEntity entity, Identifier soundId, int soundD // Schedule the sound to play repeatedly scheduler.scheduleAtFixedRate(() -> { - if (entity.isAlive() && entity.hasStatusEffect(EffectRegistry.ELEMENTAL_VORTEX.get())) { + if (entity.isAlive() && entity.hasStatusEffect(EffectRegistry.getReference(EffectRegistry.ELEMENTAL_VORTEX))) { playSound(serverWorld, entity, soundEvent); } else { stopLoopingSound(entity, soundId); // Stop the scheduler if the entity is no longer valid diff --git a/common/src/main/java/net/sweenus/simplyswords/util/Styles.java b/common/src/main/java/net/sweenus/simplyswords/util/Styles.java new file mode 100644 index 00000000..3a1f979e --- /dev/null +++ b/common/src/main/java/net/sweenus/simplyswords/util/Styles.java @@ -0,0 +1,24 @@ +package net.sweenus.simplyswords.util; + +import net.minecraft.text.Style; +import net.minecraft.text.TextColor; + +public class Styles { + public static Style COMMON = color(0xFFFFFF); + public static Style RUNIC = color(0x9D62CA); + public static Style UNIQUE = color(0xE2A834); + public static Style LEGENDARY = color(0xE26234); + public static Style NETHERFUSED = LEGENDARY; + public static Style ABILITY = UNIQUE; + public static Style RIGHT_CLICK = color(0x20BD69); + public static Style CORRUPTED = color(0x544988); + public static Style CORRUPTED_LIGHT = color(0x7140A3); + public static Style CORRUPTED_ABILITY = color(0xA987C2); + public static Style CORRUPTED_TEXT = color(0x7E7883); + public static Style TEXT = color(0xE0E0E0); + + private static Style color(int color) { + return Style.EMPTY.withColor(TextColor.fromRgb(color)); + } + +} \ No newline at end of file diff --git a/common/src/main/resources/assets/simplyswords/lang/en_us.json b/common/src/main/resources/assets/simplyswords/lang/en_us.json index deb71931..acd63ba2 100644 --- a/common/src/main/resources/assets/simplyswords/lang/en_us.json +++ b/common/src/main/resources/assets/simplyswords/lang/en_us.json @@ -117,12 +117,12 @@ "item.simplyswords.tempest": "Tempest", "item.simplyswords.flamewind": "Flamewind", "item.simplyswords.ribboncleaver": "Ribboncleaver", - "item.simplyswords.decaying_relic": "Decaying relic", - "item.simplyswords.magiscythe": "Magiscythe", - "item.simplyswords.enigma": "Enigma", - "item.simplyswords.magispear": "Magispear", - "item.simplyswords.magiblade": "Magiblade", - "item.simplyswords.caelestis": "Caelestis", + "item.simplyswords.decaying_relic": "Decaying relic", + "item.simplyswords.magiscythe": "Magiscythe", + "item.simplyswords.enigma": "Enigma", + "item.simplyswords.magispear": "Magispear", + "item.simplyswords.magiblade": "Magiblade", + "item.simplyswords.caelestis": "Caelestis", "item.simplyswords.runic_tablet": "Runic Tablet", @@ -130,7 +130,7 @@ "item.simplyswords.netherfused_gem": "Netherfused Gem", "item.simplyswords.empowered_remnant": "Empowered Remnant", "item.simplyswords.contained_remnant": "Contained Remnant", - "item.simplyswords.tampered_remnant": "Tampered Remnant", + "item.simplyswords.tampered_remnant": "Tampered Remnant", "item.simplyswords.mythicmetals_compat.adamantite.adamantite_claymore": "Adamantite Claymore", @@ -507,28 +507,28 @@ "item.simplyswords.empty_runic_slot": "[ empty rune socket ]", "item.simplyswords.empty_nether_slot": "[ empty nether socket ]", "item.simplyswords.filled_runic_slot": "[ runefused gem ]", - "item.simplyswords.contained_remnant_description": "Stabilised and contained energy", - "item.simplyswords.contained_remnant_description2": "sourced from remnants.", - "item.simplyswords.contained_remnant_description3": "Its form appears to be changing", - "item.simplyswords.contained_remnant_description4": "when in close proximity to you.", - "item.simplyswords.contained_remnant_description5": "Keeping this item in your inventory", - "item.simplyswords.contained_remnant_description6": "may yield further insights.", - "item.simplyswords.contained_remnant_description7": "Try keeping this in your inventory", - "item.simplyswords.contained_remnant_description8": "alongside a Runic Tablet while", - "item.simplyswords.contained_remnant_description9": "exploring the End dimension.", - "item.simplyswords.contained_remnant.event": "A Remnant in your inventory seems to have changed form", - "item.simplyswords.contained_remnant.event2": "A Remnant in your inventory is acting strangely", - "item.simplyswords.tampered_remnant_description3": "It appears to have been tampered", - "item.simplyswords.tampered_remnant_description4": "with somehow...", - "item.simplyswords.decayingrelicsworditem.tooltip1": "Try keeping this in your inventory", - "item.simplyswords.decayingrelicsworditem.tooltip2": "while exploring the deepest,", - "item.simplyswords.decayingrelicsworditem.tooltip3": "darkest depths of the Overworld.", - "item.simplyswords.magicythe.event": "Your Decaying Relic has begun making sounds", - "item.simplyswords.magicythe.event2": "Your Decaying Relic seems to be reacting to this area", - "item.simplyswords.magiblade.event": "Your Decaying Relic seems to be quivering", - "item.simplyswords.magiblade.event2": "Your Decaying Relic seems gravitated to the block beneath you", - "item.simplyswords.magispear.event": "Your Decaying Relic seems to have been influenced by something", - "item.simplyswords.magispear.event2": "Your Decaying Relic seems to be reacting to the darkness", + "item.simplyswords.contained_remnant_description": "Stabilised and contained energy", + "item.simplyswords.contained_remnant_description2": "sourced from remnants.", + "item.simplyswords.contained_remnant_description3": "Its form appears to be changing", + "item.simplyswords.contained_remnant_description4": "when in close proximity to you.", + "item.simplyswords.contained_remnant_description5": "Keeping this item in your inventory", + "item.simplyswords.contained_remnant_description6": "may yield further insights.", + "item.simplyswords.contained_remnant_description7": "Try keeping this in your inventory", + "item.simplyswords.contained_remnant_description8": "alongside a Runic Tablet while", + "item.simplyswords.contained_remnant_description9": "exploring the End dimension.", + "item.simplyswords.contained_remnant.event": "A Remnant in your inventory seems to have changed form", + "item.simplyswords.contained_remnant.event2": "A Remnant in your inventory is acting strangely", + "item.simplyswords.tampered_remnant_description3": "It appears to have been tampered", + "item.simplyswords.tampered_remnant_description4": "with somehow...", + "item.simplyswords.decayingrelicsworditem.tooltip1": "Try keeping this in your inventory", + "item.simplyswords.decayingrelicsworditem.tooltip2": "while exploring the deepest,", + "item.simplyswords.decayingrelicsworditem.tooltip3": "darkest depths of the Overworld.", + "item.simplyswords.magicythe.event": "Your Decaying Relic has begun making sounds", + "item.simplyswords.magicythe.event2": "Your Decaying Relic seems to be reacting to this area", + "item.simplyswords.magiblade.event": "Your Decaying Relic seems to be quivering", + "item.simplyswords.magiblade.event2": "Your Decaying Relic seems gravitated to the block beneath you", + "item.simplyswords.magispear.event": "Your Decaying Relic seems to have been influenced by something", + "item.simplyswords.magispear.event2": "Your Decaying Relic seems to be reacting to the darkness", @@ -556,12 +556,12 @@ "effect.simplyswords.ribboncleave": "Ribboncleave", "effect.simplyswords.resilience": "Resilience", "effect.simplyswords.battle_fatigue": "Battle Fatigue", - "effect.simplyswords.pain": "Pain", - "effect.simplyswords.spore_swarm": "Spore Swarm", - "effect.simplyswords.magistorm": "Magistorm", - "effect.simplyswords.magislam": "Magislam", + "effect.simplyswords.pain": "Pain", + "effect.simplyswords.spore_swarm": "Spore Swarm", + "effect.simplyswords.magistorm": "Magistorm", + "effect.simplyswords.magislam": "Magislam", "effect.simplyswords.astral_shift": "Astral Shift", - "effect.simplyswords.fatal_flicker": "Fatal Flicker", + "effect.simplyswords.fatal_flicker": "Fatal Flicker", "item.simplyswords.onrightclick": "On Right Click:", "item.simplyswords.onrightclickheld": "Hold Right Click:", @@ -856,67 +856,66 @@ "item.simplyswords.ribboncleaversworditem.tooltip9": "to deal +95% damage to a", "item.simplyswords.ribboncleaversworditem.tooltip10": "single target.", - "item.simplyswords.magiscythesworditem.tooltip1": "Unique Effect: Magistorm", - "item.simplyswords.magiscythesworditem.tooltip2": "Attacking enemies while", - "item.simplyswords.magiscythesworditem.tooltip3": "Magistorm is active grants a", - "item.simplyswords.magiscythesworditem.tooltip4": "chance to repair an equipped", - "item.simplyswords.magiscythesworditem.tooltip5": "item.", - "item.simplyswords.magiscythesworditem.tooltip6": "A localised magical storm", - "item.simplyswords.magiscythesworditem.tooltip7": "manifests above you, dealing", - "item.simplyswords.magiscythesworditem.tooltip8": "damage to nearby enemies.", - "item.simplyswords.magiscythesworditem.tooltip9": "Each time the storm strikes,", - "item.simplyswords.magiscythesworditem.tooltip10": "it has a chance to refresh its", - "item.simplyswords.magiscythesworditem.tooltip11": "duration and increases its", - "item.simplyswords.magiscythesworditem.tooltip12": "severity.", - - "item.simplyswords.enigmasworditem.tooltip1": "Unique Effect: Galeforce", - "item.simplyswords.enigmasworditem.tooltip2": "While you are near to your", - "item.simplyswords.enigmasworditem.tooltip3": "twister, gain Haste.", - "item.simplyswords.enigmasworditem.tooltip4": "Summon a twister that chases", - "item.simplyswords.enigmasworditem.tooltip5": "down nearby enemies, dealing", - "item.simplyswords.enigmasworditem.tooltip6": "increased damage the longer", - "item.simplyswords.enigmasworditem.tooltip7": "an enemy remains trapped", - "item.simplyswords.enigmasworditem.tooltip8": "within.", - - "item.simplyswords.magibladesworditem.tooltip1": "Unique Effect: Magisonic", - "item.simplyswords.magibladesworditem.tooltip2": "The Magiblade occasionally", - "item.simplyswords.magibladesworditem.tooltip3": "detects and repels approaching", - "item.simplyswords.magibladesworditem.tooltip4": "enemies.", - "item.simplyswords.magibladesworditem.tooltip5": "After a short delay, your", - "item.simplyswords.magibladesworditem.tooltip6": "Magiblade releases a sonic", - "item.simplyswords.magibladesworditem.tooltip7": "boom in front of you, dealing", - "item.simplyswords.magibladesworditem.tooltip8": "damage to enemies caught in", - "item.simplyswords.magibladesworditem.tooltip9": "its path.", - - "item.simplyswords.magispearsworditem.tooltip1": "Unique Effect: Magislam", - "item.simplyswords.magispearsworditem.tooltip2": "When attacking enemies,", - "item.simplyswords.magispearsworditem.tooltip3": "you have a chance to deal", - "item.simplyswords.magispearsworditem.tooltip4": "additional magic damage.", - "item.simplyswords.magispearsworditem.tooltip5": "Powered by the Magispear,", - "item.simplyswords.magispearsworditem.tooltip6": "you perform a forward leap,", - "item.simplyswords.magispearsworditem.tooltip7": "followed by a slam attack,", - "item.simplyswords.magispearsworditem.tooltip8": "damaging nearby enemies.", - "item.simplyswords.magispearsworditem.tooltip9": "You are immune while leaping.", - - "item.simplyswords.caelestissworditem.tooltip1": "Unique Effect: Astral Shift", - "item.simplyswords.caelestissworditem.tooltip2": "While wielded, grants a chance", - "item.simplyswords.caelestissworditem.tooltip3": "to completely avoid incoming", - "item.simplyswords.caelestissworditem.tooltip4": "damage.", - "item.simplyswords.caelestissworditem.tooltip5": "Briefly step into the astral plane,", - "item.simplyswords.caelestissworditem.tooltip6": "becoming immune to damage for", - "item.simplyswords.caelestissworditem.tooltip7": "%ds", - "item.simplyswords.caelestissworditem.tooltip8": "Upon leaving the astral plane,", - "item.simplyswords.caelestissworditem.tooltip9": "release a violent explosion,", - "item.simplyswords.caelestissworditem.tooltip10": "dealing area damage relative", - "item.simplyswords.caelestissworditem.tooltip11": "to the damage negated while", - "item.simplyswords.caelestissworditem.tooltip12": "in the astral plane.", + "item.simplyswords.magiscythesworditem.tooltip1": "Unique Effect: Magistorm", + "item.simplyswords.magiscythesworditem.tooltip2": "Attacking enemies while", + "item.simplyswords.magiscythesworditem.tooltip3": "Magistorm is active grants a", + "item.simplyswords.magiscythesworditem.tooltip4": "chance to repair an equipped", + "item.simplyswords.magiscythesworditem.tooltip5": "item.", + "item.simplyswords.magiscythesworditem.tooltip6": "A localised magical storm", + "item.simplyswords.magiscythesworditem.tooltip7": "manifests above you, dealing", + "item.simplyswords.magiscythesworditem.tooltip8": "damage to nearby enemies.", + "item.simplyswords.magiscythesworditem.tooltip9": "Each time the storm strikes,", + "item.simplyswords.magiscythesworditem.tooltip10": "it has a chance to refresh its", + "item.simplyswords.magiscythesworditem.tooltip11": "duration and increases its", + "item.simplyswords.magiscythesworditem.tooltip12": "severity.", + + "item.simplyswords.enigmasworditem.tooltip1": "Unique Effect: Galeforce", + "item.simplyswords.enigmasworditem.tooltip2": "While you are near to your", + "item.simplyswords.enigmasworditem.tooltip3": "twister, gain Haste.", + "item.simplyswords.enigmasworditem.tooltip4": "Summon a twister that chases", + "item.simplyswords.enigmasworditem.tooltip5": "down nearby enemies, dealing", + "item.simplyswords.enigmasworditem.tooltip6": "increased damage the longer", + "item.simplyswords.enigmasworditem.tooltip7": "an enemy remains trapped", + "item.simplyswords.enigmasworditem.tooltip8": "within.", + + "item.simplyswords.magibladesworditem.tooltip1": "Unique Effect: Magisonic", + "item.simplyswords.magibladesworditem.tooltip2": "The Magiblade occasionally", + "item.simplyswords.magibladesworditem.tooltip3": "detects and repels approaching", + "item.simplyswords.magibladesworditem.tooltip4": "enemies.", + "item.simplyswords.magibladesworditem.tooltip5": "After a short delay, your", + "item.simplyswords.magibladesworditem.tooltip6": "Magiblade releases a sonic", + "item.simplyswords.magibladesworditem.tooltip7": "boom in front of you, dealing", + "item.simplyswords.magibladesworditem.tooltip8": "damage to enemies caught in", + "item.simplyswords.magibladesworditem.tooltip9": "its path.", + + "item.simplyswords.magispearsworditem.tooltip1": "Unique Effect: Magislam", + "item.simplyswords.magispearsworditem.tooltip2": "When attacking enemies,", + "item.simplyswords.magispearsworditem.tooltip3": "you have a chance to deal", + "item.simplyswords.magispearsworditem.tooltip4": "additional magic damage.", + "item.simplyswords.magispearsworditem.tooltip5": "Powered by the Magispear,", + "item.simplyswords.magispearsworditem.tooltip6": "you perform a forward leap,", + "item.simplyswords.magispearsworditem.tooltip7": "followed by a slam attack,", + "item.simplyswords.magispearsworditem.tooltip8": "damaging nearby enemies.", + "item.simplyswords.magispearsworditem.tooltip9": "You are immune while leaping.", + + "item.simplyswords.caelestissworditem.tooltip1": "Unique Effect: Astral Shift", + "item.simplyswords.caelestissworditem.tooltip2": "While wielded, grants a chance", + "item.simplyswords.caelestissworditem.tooltip3": "to completely avoid incoming", + "item.simplyswords.caelestissworditem.tooltip4": "damage.", + "item.simplyswords.caelestissworditem.tooltip5": "Briefly step into the astral plane,", + "item.simplyswords.caelestissworditem.tooltip6": "becoming immune to damage for", + "item.simplyswords.caelestissworditem.tooltip7": "%ds", + "item.simplyswords.caelestissworditem.tooltip8": "Upon leaving the astral plane,", + "item.simplyswords.caelestissworditem.tooltip9": "release a violent explosion,", + "item.simplyswords.caelestissworditem.tooltip10": "dealing area damage relative", + "item.simplyswords.caelestissworditem.tooltip11": "to the damage negated while", + "item.simplyswords.caelestissworditem.tooltip12": "in the astral plane.", "item.simplyswords.dormantrelicsworditem.tooltip2": "A faint power seems to emanate from within.", "item.simplyswords.poweredrelicsworditem.tooltip2": "A growing power seems to emanate from within.", - "item.simplyswords.levitationsworditem.tooltip1": "Runic Power: Float", "item.simplyswords.uniquesworditem.runefused_power.float": "[ Runefused: Float ]", "item.simplyswords.levitationsworditem.tooltip2": "Chance on hit to reverse the effects", @@ -996,7 +995,6 @@ "item.simplyswords.runic_tablet.tooltip4": "Unique weapons.", - "item.simplyswords.uniquesworditem.netherfused_power.echo": "[ Netherfused: Echo ]", "item.simplyswords.uniquesworditem.netherfused_power.echo.description": "Your weapon swings echo, dealing", "item.simplyswords.uniquesworditem.netherfused_power.echo.description2": "additional unmitigated damage ", @@ -1103,621 +1101,510 @@ "item.simplyswords.compat.scaleHealing": "§7Ability scales with §aHealing§7 spell power", - "text.autoconfig.simplyswords_main.title" : "Simply Swords", - "text.autoconfig.simplyswords_main.category.general" : "General", - "text.autoconfig.simplyswords_main.category.gem_effects" : "Gem Effects", - "text.autoconfig.simplyswords_main.category.loot" : "Loot", - "text.autoconfig.simplyswords_main.category.runic_effects" : "Runic Effects", - "text.autoconfig.simplyswords_main.category.status_effects" : "Status Effects", - "text.autoconfig.simplyswords_main.category.unique_effects" : "Unique Effects", - "text.autoconfig.simplyswords_main.category.weapon_attributes" : "Weapon Attributes", - - - - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_positiveDamageModifier.@PrefixText" : "§a[WEAPON ATTRIBUTES CONFIGURATION]§7\nThese values should be §4THE SAME ON BOTH CLIENT AND SERVER§7\nThe damage values of weapons can be modified by adjusting their weights.\nThis is not the outputted damage value you see in game, but it affects it directly.\nCalculation: vanilla tool material damage + base_modifier + positive_modifier - negative_modifier = actual modifier.\nChanges require game restart to take effect.\n\n§a[Positive Damage Modifiers]§7\nExample use-case: Adding 3 to a value below will INCREASE the in-game damage of that weapon type by 3.", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_positiveDamageModifier": "Longsword + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twinblade_positiveDamageModifier": "Twinblade + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.rapier_positiveDamageModifier": "Rapier + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.katana_positiveDamageModifier": "Katana + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sai_positiveDamageModifier": "Sai + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.spear_positiveDamageModifier": "Spear + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.glaive_positiveDamageModifier": "Glaive + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.warglaive_positiveDamageModifier": "Warglaive + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.cutlass_positiveDamageModifier": "Cutlass + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.claymore_positiveDamageModifier": "Claymore + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greataxe_positiveDamageModifier": "Greataxe + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greathammer_positiveDamageModifier": "Greathammer + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.chakram_positiveDamageModifier": "Chakram + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.scythe_positiveDamageModifier": "Scythe + damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.halberd_positiveDamageModifier": "Halberd + damage modifier", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_negativeDamageModifier.@PrefixText" : "§a[Negative Damage Modifiers]§7\nAdding 3 to a value below will DECREASE the in-game damage of that weapon type by 3.", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_negativeDamageModifier": "Longsword - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twinblade_negativeDamageModifier": "Twinblade - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.rapier_negativeDamageModifier": "Rapier - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.katana_negativeDamageModifier": "Katana - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sai_negativeDamageModifier": "Sai - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.spear_negativeDamageModifier": "Spear - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.glaive_negativeDamageModifier": "Glaive - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.warglaive_negativeDamageModifier": "Warglaive - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.cutlass_negativeDamageModifier": "Cutlass - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.claymore_negativeDamageModifier": "Claymore - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greataxe_negativeDamageModifier": "Greataxe - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greathammer_negativeDamageModifier": "Greathammer - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.chakram_negativeDamageModifier": "Chakram - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.scythe_negativeDamageModifier": "Scythe - damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.halberd_negativeDamageModifier": "Halberd - damage modifier", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.iron_damageModifier.@PrefixText" : "§a[Base Damage Modifiers]§7\nPositive & Negative damage modifiers scale off these base values.", - "text.autoconfig.simplyswords_main.option.weapon_attributes.iron_damageModifier": "Iron base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gold_damageModifier": "Gold base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.diamond_damageModifier": "Diamond base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.netherite_damageModifier": "Netherite base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.runic_damageModifier": "Runic base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.adamantite_damageModifier": "Adamantite base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.aquarium_damageModifier": "Aquarium base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.banglum_damageModifier": "Banglum base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.carmot_damageModifier": "Carmot base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.kyber_damageModifier": "Kyber base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.mythril_damageModifier": "Mythril base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.orichalcum_damageModifier": "Orichalcum base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.durasteel_damageModifier": "Durasteel base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.osmium_damageModifier": "Osmium base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.prometheum_damageModifier": "Prometheum base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.quadrillum_damageModifier": "Quadrillum base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.runite_damageModifier": "Runite base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.starPlatinum_damageModifier": "Star Platinum base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.bronze_damageModifier": "Bronze base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.copper_damageModifier": "Copper base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.steel_damageModifier": "Steel base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.palladium_damageModifier": "Palladium base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormyx_damageModifier": "Stormyx base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.celestium_damageModifier": "Celestium base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.metallurgium_damageModifier": "Metallurgium base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gobber_damageModifier": "Gobber base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gobberNether_damageModifier": "Gobber Nether base damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gobberEnd_damageModifier": "Gobber End base damage modifier", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_attackSpeed.@PrefixText" : "§a[Attack Speed Modifiers]§7\nRecommended range: -1.0 to -3.7, with -1.0 being fast and -3.7 being slow.", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_attackSpeed": "Longsword attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twinblade_attackSpeed": "Twinblade attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.rapier_attackSpeed": "Rapier attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.katana_attackSpeed": "Katana attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sai_attackSpeed": "Sai attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.spear_attackSpeed": "Spear attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.glaive_attackSpeed": "Glaive attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.warglaive_attackSpeed": "Warglaive attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.cutlass_attackSpeed": "Cutlass attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.claymore_attackSpeed": "Claymore attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greataxe_attackSpeed": "Greataxe attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greathammer_attackSpeed": "Greathammer damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.chakram_attackSpeed": "Chakram attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.scythe_attackSpeed": "Scythe attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.halberd_attackSpeed": "Halberd attack speed", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_damageModifier.@PrefixText" : "§6[UNIQUE ATTRIBUTES CONFIGURATION]§7\nUniques scale a little bit differently and only require one modifier.\nThis is not the outputted damage value you see in game, but it affects it directly.\nCalculation: Vanilla netherite tool damage + damage_modifier = actual modifier.\n\n§6[Damage Modifiers]§7\nExample use-case: Adding 3 to a value below will INCREASE the in-game damage of that weapon by 3.", - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_damageModifier": "§6Brimstone§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thewatcher_damageModifier": "§6The Watcher§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormsedge_damageModifier": "§6Storm's Edge§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormbringer_damageModifier": "§6Stormbringer§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.swordonastick_damageModifier": "Sword on a Stick damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.bramblethorn_damageModifier": "§6Bramblethorn§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.watchingwarglaive_damageModifier": "§6Watching Warglaive§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longswordofplague_damageModifier": "§6Longsword of The Plague§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberblade_damageModifier": "§6Emberblade§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hearthflame_damageModifier": "§6Hearthflame§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulkeeper_damageModifier": "§6Soulkeeper§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twistedblade_damageModifier": "§6Twisted Blade§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulstealer_damageModifier": "§6Soulstealer§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulrender_damageModifier": "§6Soulrender§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.mjolnir_damageModifier": "§6Mjolnir§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulpyre_damageModifier": "§6Soulpyre§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.frostfall_damageModifier": "§6Frostfall§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.moltenedge_damageModifier": "§6Molten Edge§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.livyatan_damageModifier": "§6Livyatan§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.icewhisper_damageModifier": "§6Icewhisper§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.arcanethyst_damageModifier": "§6Arcanethyst§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thunderbrand_damageModifier": "§6Thunderbrand§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.lichblade_damageModifier": "§6Lichblade§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.shadowsting_damageModifier": "§6Shadowsting§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sunfire_damageModifier": "§6Sunfire§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.harbinger_damageModifier": "§6Harbinger§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.whisperwind_damageModifier": "§6Whisperwind§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberlash_damageModifier": "§6Emberlash§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.waxweaver_damageModifier": "§6Waxweaver§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hiveheart_damageModifier": "§6Hiveheart§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.starsedge_damageModifier": "§6Star's Edge§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.wickpiercer_damageModifier": "§6Wickpiercer§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.dreadtide_damageModifier": "§6Dreadtide§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.tempest_damageModifier": "§6Tempest§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.flamewind_damageModifier": "§6Flamewind§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.ribboncleaver_damageModifier": "§6Ribboncleaver§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiscythe_damageModifier": "§6Magiscythe§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.enigma_damageModifier": "§6Enigma§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magispear_damageModifier": "§6Magispear§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiblade_damageModifier": "§6Magiblade§7 damage modifier", - "text.autoconfig.simplyswords_main.option.weapon_attributes.caelestis_damageModifier": "§6Caelestis§7 damage modifier", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_attackSpeed.@PrefixText" : "§6[Attack Speed Modifiers]§7\nRecommended range: -1.0 to -3.7, with -1.0 being fast and -3.7 being slow.", - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_attackSpeed": "§6Brimstone§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thewatcher_attackSpeed": "§6The Watcher§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormsedge_attackSpeed": "§6Storm's Edge§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormbringer_attackSpeed": "§6Stormbringer§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.swordonastick_attackSpeed": "§6Sword on a Stick attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.bramblethorn_attackSpeed": "§6Bramblethorn§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.watchingwarglaive_attackSpeed": "§6Watching Warglaive§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longswordofplague_attackSpeed": "§6Longsword of The Plague§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberblade_attackSpeed": "§6Emberblade§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hearthflame_attackSpeed": "§6Hearthflame§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulkeeper_attackSpeed": "§6Soulkeeper§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twistedblade_attackSpeed": "§6Twisted Blade§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulstealer_attackSpeed": "§6Soulstealer§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulrender_attackSpeed": "§6Soulrender§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.mjolnir_attackSpeed": "§6Mjolnir§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulpyre_attackSpeed": "§6Soulpyre§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.frostfall_attackSpeed": "§6Frostfall§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.moltenedge_attackSpeed": "§6Molten Edge§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.livyatan_attackSpeed": "§6Livyatan§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.icewhisper_attackSpeed": "§6Icewhisper§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.arcanethyst_attackSpeed": "§6Arcanethyst§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thunderbrand_attackSpeed": "§6Thunderbrand§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.lichblade_attackSpeed": "§6Lichblade§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.shadowsting_attackSpeed": "§6Shadowsting§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sunfire_attackSpeed": "§6Sunfire§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.harbinger_attackSpeed": "§6Harbinger§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.whisperwind_attackSpeed": "§6Whisperwind§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberlash_attackSpeed": "§6Emberlash§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.waxweaver_attackSpeed": "§6Waxweaver§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hiveheart_attackSpeed": "§6Hiveheart§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.starsedge_attackSpeed": "§6Star's Edge§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.wickpiercer_attackSpeed": "§6Wickpiercer§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.dreadtide_attackSpeed": "§6Dreadtide§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.tempest_attackSpeed": "§6Tempest§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.flamewind_attackSpeed": "§6Flamewind§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.ribboncleaver_attackSpeed": "§6Ribboncleaver§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiscythe_attackSpeed": "§6Magiscythe§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.enigma_attackSpeed": "§6Enigma§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magispear_attackSpeed": "§6Magispear§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiblade_attackSpeed": "§6Magiblade§7 attack speed", - "text.autoconfig.simplyswords_main.option.weapon_attributes.caelestis_attackSpeed": "§6Caelestis§7 attack speed", - - - - "text.autoconfig.simplyswords_main.option.runic_effects.enableActiveDefence.@PrefixText" : "§a[Runic Power Blacklisting]§7\nSetting any of the below values to false will prevent that runic power from being obtainable.", - "text.autoconfig.simplyswords_main.option.runic_effects.enableActiveDefence": "Enable Active Defence", - "text.autoconfig.simplyswords_main.option.runic_effects.enableFloat": "Enable Float", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterFloat": "Enable Greater Float", - "text.autoconfig.simplyswords_main.option.runic_effects.enableFreeze": "Enable Freeze", - "text.autoconfig.simplyswords_main.option.runic_effects.enableShielding": "Enable Shielding", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterShielding": "Enable Greater Shielding", - "text.autoconfig.simplyswords_main.option.runic_effects.enableSlow": "Enable Slow", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterSlow": "Enable Greater Slow", - "text.autoconfig.simplyswords_main.option.runic_effects.enableStoneskin": "Enable Stoneskin", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterStoneskin": "Enable Greater Stoneskin", - "text.autoconfig.simplyswords_main.option.runic_effects.enableSwiftness": "Enable Swiftness", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterSwiftness": "Enable Greater Swiftness", - "text.autoconfig.simplyswords_main.option.runic_effects.enableTrailblaze": "Enable Trailblaze", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterTrailblaze": "Enable Greater Trailblaze", - "text.autoconfig.simplyswords_main.option.runic_effects.enableWeaken": "Enable Weaken", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterWeaken": "Enable Greater Weaken", - "text.autoconfig.simplyswords_main.option.runic_effects.enableZephyr": "Enable Zephyr", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterZephyr": "Enable Greater Zephyr", - "text.autoconfig.simplyswords_main.option.runic_effects.enableFrostWard": "Enable Frost Ward", - "text.autoconfig.simplyswords_main.option.runic_effects.enableWildfire": "Enable Wildfire", - "text.autoconfig.simplyswords_main.option.runic_effects.enableUnstable": "Enable Unstable", - "text.autoconfig.simplyswords_main.option.runic_effects.enableMomentum": "Enable Momentum", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterMomentum": "Enable Greater Momentum", - "text.autoconfig.simplyswords_main.option.runic_effects.enableImbued": "Enable Imbued", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterImbued": "Enable Greater Imbued", - "text.autoconfig.simplyswords_main.option.runic_effects.enablePincushion": "Enable Pincushion", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterPincushion": "Enable Greater Pincushion", - "text.autoconfig.simplyswords_main.option.runic_effects.enableWard": "Enable Ward", - "text.autoconfig.simplyswords_main.option.runic_effects.enableImmolate": "Enable Immolate", - - "text.autoconfig.simplyswords_main.option.loot.enableLootDrops.@Tooltip" : "Disabling this setting will prevent Simply Swords from generating loot in chests.", - "text.autoconfig.simplyswords_main.option.loot.enableLootDrops.@PrefixText" : "§6[Loot Blacklisting]§7\nSetting any of the below values to false will prevent that item from generating in loot.\nThe item will still exist in the creative menu, but will be unobtainable through ordinary survival gameplay. ", - "text.autoconfig.simplyswords_main.option.loot.enableLootDrops": "Enable loot drops", - "text.autoconfig.simplyswords_main.option.loot.enableLootInVillages.@Tooltip" : "When enabled, Simply Swords loot can spawn in village chests.", - "text.autoconfig.simplyswords_main.option.loot.enableLootInVillages": "Enable loot drops in villages", - "text.autoconfig.simplyswords_main.option.loot.standardLootTableWeight.@Tooltip": "Chance for Iron > Gold weapons to appear in chests. 1.00 = 100%.", - "text.autoconfig.simplyswords_main.option.loot.standardLootTableWeight": "Standard loot chance", - "text.autoconfig.simplyswords_main.option.loot.rareLootTableWeight.@Tooltip": "Chance for Diamond weapons to appear in chests. 1.00 = 100%.", - "text.autoconfig.simplyswords_main.option.loot.rareLootTableWeight": "Rare loot chance", - "text.autoconfig.simplyswords_main.option.loot.runicLootTableWeight.@Tooltip": "Chance for Runic Tablets to appear in chests. 1.00 = 100%.", - "text.autoconfig.simplyswords_main.option.loot.runicLootTableWeight": "Runic loot chance", - "text.autoconfig.simplyswords_main.option.loot.uniqueLootTableWeight.@Tooltip": "Chance for Unique weapons to appear in chests. 1.00 = 100%.", - "text.autoconfig.simplyswords_main.option.loot.uniqueLootTableWeight": "Unique loot chance", - "text.autoconfig.simplyswords_main.option.loot.enableContainedRemnants.@Tooltip": "Whether contained remnants change form or not. Disable this if you disable unique weapon drops.", - "text.autoconfig.simplyswords_main.option.loot.enableContainedRemnants": "Enable Contained Remnants", - "text.autoconfig.simplyswords_main.option.loot.enableBrimstone": "Brimstone can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableTheWatcher": "The Watcher can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableStormsEdge": "Storm's Edge can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableStormbringer": "Stormbringer can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableSwordOnAStick": "Sword on a Stick can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableBramblethorn": "Bramblethorn can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableWatchingWarglaive": "Watching Warglaive can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableLongswordOfThePlague": "Longsword of The Plague can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableEmberblade": "Emberblade can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableHearthflame": "Hearthflame can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableSoulkeeper": "Soulkeeper can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableTwistedBlade": "Twisted Blade can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableSoulstealer": "Soulstealer can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableSoulrender": "Soulrender can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableMjolnir": "Mjolnir can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableSoulpyre": "Soulpyre can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableFrostfall": "Frostfall can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableMoltenEdge": "Molten Edge can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableLivyatan": "Livyatan can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableIcewhisper": "Icewhisper can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableArcanethyst": "Arcanethyst can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableThunderbrand": "Thunderbrand can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableSlumberingLichblade": "Lichblade can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableShadowsting": "Shadowsting can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableDormantRelic": "Dormant Relic can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableWhisperwind": "Whisperwind can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableEmberlash": "Emberlash can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableWaxweaver": "Waxweaver can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableHiveheart": "Hiveheart can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableStarsEdge": "Star's Edge can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableWickpiercer": "Wickpiercer can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableTempest": "Tempest can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableFlamewind": "Flamewind can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableRibboncleaver": "Ribboncleaver can be looted", - "text.autoconfig.simplyswords_main.option.loot.enableCaelestis": "Caelestis can be looted", - - "text.autoconfig.simplyswords_main.option.general.enableWeaponImpactSounds": "Enable weapon impact sounds", - "text.autoconfig.simplyswords_main.option.general.weaponImpactSoundsVolume": "Weapon impact sounds volume", - "text.autoconfig.simplyswords_main.option.general.enableWeaponFootfalls": "Enable weapon footfalls", - "text.autoconfig.simplyswords_main.option.general.enablePassiveParticles": "Enable passive particles", - "text.autoconfig.simplyswords_main.option.general.enableUniqueGemSockets.@Tooltip" : "If disabled, gem slots will no longer appear on freshly generated Unique weapons. Not retroactive.", - "text.autoconfig.simplyswords_main.option.general.enableUniqueGemSockets": "Enable Unique gem sockets", - "text.autoconfig.simplyswords_main.option.general.compatGobberEndWeaponsUnbreakable": "§a[Compat]§7 Enable Gobber unbreakable End weapons", - "text.autoconfig.simplyswords_main.option.general.compatEnableSpellPowerScaling.@Tooltip" : "§a[When Spell Power is installed]§7\nIf enabled, some weapon effects will scale with Spell Power attributes.", - "text.autoconfig.simplyswords_main.option.general.compatEnableSpellPowerScaling": "§a[Compat]§7 Enable Spell Power scaling", - - "text.autoconfig.simplyswords_main.option.unique_effects.abilityAbsorptionCap" : "Absorption cap", - "text.autoconfig.simplyswords_main.option.unique_effects.abilityAbsorptionCap.@Tooltip" : "Abilities cannot give the user more absorption than this value", - - "text.autoconfig.simplyswords_main.option.unique_effects.watcherChance.@PrefixText" : "§6[The Watcher & Watching Warglaives]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.watcherChance": "Watcher chance", - "text.autoconfig.simplyswords_main.option.unique_effects.watcherRestoreAmount": "Watcher restore amount", - "text.autoconfig.simplyswords_main.option.unique_effects.watcherRadius": "Watcher radius", - "text.autoconfig.simplyswords_main.option.unique_effects.omenChance": "Omen chance", - "text.autoconfig.simplyswords_main.option.unique_effects.omenAbsorptionCap": "Omen absorption cap", - "text.autoconfig.simplyswords_main.option.unique_effects.omenInstantKillThreshold": "Omen instant-kill threshold", - - "text.autoconfig.simplyswords_main.option.unique_effects.stealChance.@PrefixText" : "§6[Soulstealer]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.stealChance": "Steal chance", - "text.autoconfig.simplyswords_main.option.unique_effects.stealDuration": "Steal duration", - "text.autoconfig.simplyswords_main.option.unique_effects.stealInvisDuration": "Steal Invisible duration", - "text.autoconfig.simplyswords_main.option.unique_effects.stealBlindDuration": "Steal Blind duration", - "text.autoconfig.simplyswords_main.option.unique_effects.stealRadius": "Steal radius", - "text.autoconfig.simplyswords_main.option.unique_effects.stealSpellScaling": "Steal Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldChance.@PrefixText" : "§6[Soulkeeper]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldChance": "Soulmeld chance", - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldDuration": "Soulmeld duration", - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldRadius": "Soulmeld Iradius", - - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendChance.@PrefixText" : "§6[Soulrender]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendChance": "Soulrend chance", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendDuration": "Soulrend duration", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendDamageMulti": "Soulrend damage multiplier", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendHealMulti": "Soulrend heal multiplier", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendRadius": "Soulrend radius", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendMaxStacks": "Soulrend max stacks", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendDamageSpellScaling": "Soulrend Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityChance.@PrefixText" : "§6[Twisted Blade]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityChance": "Ferocity chance", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityDuration": "Ferocity duration", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityMaxStacks": "Ferocity max stacks", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityStrengthTier": "Ferocity strength amplifier", - - "text.autoconfig.simplyswords_main.option.unique_effects.emberIreChance.@PrefixText" : "§6[Emberblade]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.emberIreChance": "Ember Ire chance", - "text.autoconfig.simplyswords_main.option.unique_effects.emberIreDuration": "Ember Ire duration", - - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryChance.@PrefixText" : "§6[Hearthflame]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryChance": "Volcanic Fury chance", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryRadius": "Volcanic Fury radius", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryCooldown": "Volcanic Fury cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryDamage": "Volcanic Fury damage", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFurySpellScaling": "Volcanic Fury Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.stormChance.@PrefixText" : "§6[Mjolnir]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.stormChance": "Storm chance", - "text.autoconfig.simplyswords_main.option.unique_effects.stormRadius": "Storm radius", - "text.autoconfig.simplyswords_main.option.unique_effects.stormCooldown": "Storm cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.stormFrequency": "Storm frequency", - "text.autoconfig.simplyswords_main.option.unique_effects.stormDuration": "Storm duration", - - "text.autoconfig.simplyswords_main.option.unique_effects.plagueChance.@PrefixText" : "§6[Longsword of The Plague]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.plagueChance": "Plague chance", - - "text.autoconfig.simplyswords_main.option.unique_effects.brimstoneChance.@PrefixText" : "§6[Brimstone Claymore]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.brimstoneChance": "Brimstone chance", - - "text.autoconfig.simplyswords_main.option.unique_effects.brambleChance.@PrefixText" : "§6[Bramblethorn]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.brambleChance": "Bramble chance", - - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherRange.@PrefixText" : "§6[Soulpyre]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherRange": "Soultether range", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherRadius": "Soultether radius", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherDuration": "Soultether duration", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherIgniteDuration": "Soultether Ignite duration", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherResistanceDuration": "Soultether Resistance duration", - - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryCooldown.@PrefixText" : "§6[Frostfall]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryCooldown": "Frost Fury cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryRadius": "Frost Fury radius", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryDamage": "Frost Fury damage", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryChance": "Frost Fury chance", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryDuration": "Frost Fury duration", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFurySpellScaling": "Frost Fury Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarCooldown.@PrefixText" : "§6[Molten Edge]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarCooldown": "Molten Roar cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarRadius": "Molten Roar radius", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarKnockbackStrength": "Molten Roar Knockback strength", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarChance": "Molten Roar chance", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarDuration": "Molten Roar duration", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterRadius.@PrefixText" : "§6[Livyatan]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterRadius": "Frost Shatter radius", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterDamage": "Frost Shatter damage", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterChance": "Frost Shatter chance", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterDuration": "Frost Shatter duration", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterSpellScaling": "Frost Shatter Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostRadius.@PrefixText" : "§6[Icewhisper]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostRadius": "Permafrost radius", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostDamage": "Permafrost damage", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostCooldown": "Permafrost cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostDuration": "Permafrost duration", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostSpellScaling": "Permafrost Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultRadius.@PrefixText" : "§6[Arcanethyst]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultRadius": "Arcane Assault radius", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultDamage": "Arcane Assault damage", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultCooldown": "Arcane Assault cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultChance": "Arcane Assault chance", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultDuration": "Arcane Assault duration", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultSpellScaling": "Arcane Assault Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzRadius.@PrefixText" : "§6[Thunderbrand]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzRadius": "Thunder Blitz radius", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzDamage": "Thunder Blitz damage", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzCooldown": "Thunder Blitz cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzChance": "Thunder Blitz chance", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzSpellScaling": "Thunder Blitz Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.stormJoltCooldown.@PrefixText" : "§6[Storm's Edge]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.stormJoltCooldown": "Storm Jolt cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.stormJoltChance": "Storm Jolt chance", - - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishRadius.@PrefixText" : "§6[Lichblade]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishRadius": "Soul Anguish radius", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishAbsorptionCap": "Soul Anguish absorption cap", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishDamage": "Soul Anguish damage", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishCooldown": "Soul Anguish cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishDuration": "Soul Anguish duration", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishHeal": "Soul Anguish heal", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishRange": "Soul Anguish range", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishSpellScaling": "Soul Anguish Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectBlockDuration.@PrefixText" : "§6[Stormbringer]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectBlockDuration": "Shock Deflect radius", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectDamage": "Shock Deflect damage", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectCooldown": "Shock Deflect cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectParryDuration": "Shock Deflect chance", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectSpellScaling": "Shock Deflect Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistCooldown.@PrefixText" : "§6[Shadowsting]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistCooldown": "Shadowmist cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistChance": "Shadowmist chance", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistDamageMulti": "Shadowmist damage multiplier", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistBlindDuration": "Shadowmist Blind duration", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistRadius": "Shadowmist radius", - - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardCooldown.@PrefixText" : "§6[Abyssal Standard]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardCooldown": "Abyssal Standard cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardChance": "Abyssal Standard chance", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardDamage": "Abyssal Standard damage", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardSpellScaling": "Abyssal Standard Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardCooldown.@PrefixText" : "§6[Abyssal Standard]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardCooldown": "Righteous Standard cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardChance": "Righteous Standard chance", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardDamage": "Righteous Standard damage", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardSpellScaling": "Righteous Standard Spell Power DMG multi", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardSpellScalingHeal": "Righteous Standard Spell Power HEAL multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerCooldown.@PrefixText" : "§6[Whisperwind]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerCooldown": "Fatal Flicker cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerChance": "Fatal Flicker chance", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerRadius": "Fatal Flicker radius", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerMaxStacks": "Fatal Flicker max stacks", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerDashVelocity": "Fatal Flicker dash velocity", - - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderCooldown.@PrefixText" : "§6[Emberlash]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderCooldown": "Smoulder cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderMaxStacks": "Smoulder max stacks", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderHeal": "Smoulder heal percent", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderSpellScaling": "Smoulder Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.waxweaveCooldown.@PrefixText" : "§6[Waxweaver]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.waxweaveCooldown": "Waxweave cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.waxweaveMaxStacks": "Waxweave max stacks", - - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindCooldown.@PrefixText" : "§6[Hiveheart]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindCooldown": "Hivemind cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindDuration": "Hivemind duration", - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindDamage": "Hivemind damage modifier", - - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeCooldown.@PrefixText" : "§6[Star's Edge]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeCooldown": "Celestial Surge cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeDuration": "Celestial Surge duration", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeStacks": "Celestial Surge Haste stacks", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeDamageModifier": "Celestial Surge Damage modifier", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeLifestealModifier": "Celestial Surge Lifesteal modifier", - - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryCooldown.@PrefixText" : "§6[Wickpiercer]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryCooldown": "Flicker Fury cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryDuration": "Flicker Fury duration", - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryDamage": "Flicker Fury damage modifier", - - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerDuration.@PrefixText" : "§6[Dreadtide]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerDuration": "Voidcaller duration", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerStartingTickFrequency": "Voidcaller starting tick frequency", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerDamageModifier": "Voidcaller damage modifier", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionFrequency": "Voidcaller Corruption frequency", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionPerTick": "Voidcaller Corruption per tick", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionDuration": "Voidcaller Corruption duration", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionMax": "Voidcaller Corruption max", - - "text.autoconfig.simplyswords_main.option.unique_effects.vortexDuration.@PrefixText" : "§6[Tempest]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexDuration": "Vortex duration", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexMaxSize": "Vortex max size", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexMaxStacks": "Vortex max stacks", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexSpellScaling": "Vortex Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormSpreadCap.@PrefixText" : "§6[Flamewind]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormSpreadCap": "Emberstorm spread cap", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormDamage": "Emberstorm damage", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormDetonationDamage": "Emberstorm detonation damage", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormCooldown": "Emberstorm cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormMaxHaste": "Emberstorm Haste max", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormSpellScaling": "Emberstorm Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathCooldown.@PrefixText" : "§6[Ribboncleaver]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathCooldown": "Ribbonwrath cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathResilienceAmplifier": "Ribbonwrath resilience amplifier", - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathDamageBonusPercent": "Ribbonwrath damage bonus percent", - - "text.autoconfig.simplyswords_main.option.unique_effects.magistormCooldown.@PrefixText" : "§6[Magiscythe]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormCooldown": "Magiscythe cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormDuration": "Magistorm duration", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormRadius": "Magistorm radius", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormDamage": "Magistorm damage", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormRepairChance": "Magistorm repair chance", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormSpellScaling": "Magistorm Spell Power DMG multi", - - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaCooldown.@PrefixText" : "§6[Enigma]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaCooldown": "Enigma cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaDecayRate": "Enigma decay rate", - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaChaseRadius": "Enigma chase radius", - - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeCooldown.@PrefixText" : "§6[Magiblade]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeCooldown": "Magisonic cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeSonicDistance": "Magisonic sonic distance", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeDamageModifier": "Magisonic damage modifier", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeRepelChance": "Magisonic repel chance", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeRepelRadius": "Magisonic repel radius", - - "text.autoconfig.simplyswords_main.option.unique_effects.magislamCooldown.@PrefixText" : "§6[Magispear]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamCooldown": "Magislam cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamRadius": "Magislam radius", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamDamageModifier": "Magislam damage modifier", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamMagicChance": "Magislam magic chance", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamMagicModifier": "Magislam magic modifier", - - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftCooldown.@PrefixText" : "§6[Caelestis]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftCooldown": "Astral Shift cooldown", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftDuration": "Astral Shift duration", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftDamageModifier": "Astral Shift damage modifier", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftDamageMax": "Astral Shift damage max", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftChance": "Astral Shift avoidance chance", - - - "text.autoconfig.simplyswords_main.option.runic_effects.swiftnessChance.@PrefixText" : "§b[Swiftness]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.swiftnessChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.swiftnessDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.slowChance.@PrefixText" : "§b[Slow]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.slowChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.slowDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.poisonChance.@PrefixText" : "§b[Poison]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.poisonChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.poisonDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.freezeChance.@PrefixText" : "§b[Freeze]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.freezeChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.freezeDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireChance.@PrefixText" : "§b[Wildfire]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireDuration": "Duration", - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireRadius": "Radius", - - "text.autoconfig.simplyswords_main.option.runic_effects.floatChance.@PrefixText" : "§b[Float]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.floatChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.floatDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.zephyrChance.@PrefixText" : "§b[Zephyr]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.zephyrChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.zephyrDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.shieldingChance.@PrefixText" : "§b[Shielding]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.shieldingChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.shieldingDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.stoneskinChance.@PrefixText" : "§b[Stoneskin]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.stoneskinChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.stoneskinDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.trailblazeChance.@PrefixText" : "§b[Trailblaze]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.trailblazeChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.trailblazeDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.weakenChance.@PrefixText" : "§b[Weaken]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.weakenChance": "Chance", - "text.autoconfig.simplyswords_main.option.runic_effects.weakenDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.unstableFrequency.@PrefixText" : "§b[Unstable]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.unstableFrequency": "Frequency", - "text.autoconfig.simplyswords_main.option.runic_effects.unstableDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.activeDefenceFrequency.@PrefixText" : "§b[Active Defence]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.activeDefenceFrequency": "Frequency", - "text.autoconfig.simplyswords_main.option.runic_effects.activeDefenceRadius": "Radius", - - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardFrequency.@PrefixText" : "§b[Frost Ward]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardFrequency": "Frequency", - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardRadius": "Radius", - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardDuration": "Duration", - - "text.autoconfig.simplyswords_main.option.runic_effects.momentumCooldown.@PrefixText" : "§b[Momentum]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.momentumCooldown": "Chance", - - "text.autoconfig.simplyswords_main.option.runic_effects.imbuedChance.@PrefixText" : "§b[Imbued]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.imbuedChance": "Chance", - - "text.autoconfig.simplyswords_main.option.gem_effects.enableEcho.@PrefixText" : "§4[Netherfused Gem Blacklisting]§7\nSetting any of the below values to false will prevent that netherfused power from being available via gems.", - "text.autoconfig.simplyswords_main.option.gem_effects.enableEcho": "Enable Echo gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableBerserk": "Enable Berserk gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableRadiance": "Enable Radiance gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableOnslaught": "Enable Onslaught gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableNullification": "Enable Nullification gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enablePrecise.@PrefixText" : "§6[Simply Skills Compatibility Gems]§7\nThese gems can only be acquired when Simply Skills is installed.", - "text.autoconfig.simplyswords_main.option.gem_effects.enablePrecise": "Enable Precise gems", - "text.autoconfig.simplyswords_main.option.gem_effects.preciseChance": "Precise chance", - "text.autoconfig.simplyswords_main.option.gem_effects.enableMighty": "Enable Mighty gems", - "text.autoconfig.simplyswords_main.option.gem_effects.mightyChance": "Mighty chance", - "text.autoconfig.simplyswords_main.option.gem_effects.enableStealthy": "Enable Stealthy gems", - "text.autoconfig.simplyswords_main.option.gem_effects.stealthyChance": "Stealthy chance", - "text.autoconfig.simplyswords_main.option.gem_effects.enableRenewed": "Enable Renewed gems", - "text.autoconfig.simplyswords_main.option.gem_effects.renewedChance": "Renewed chance", - "text.autoconfig.simplyswords_main.option.gem_effects.enableAccelerant": "Enable Accelerant gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableLeaping": "Enable Leaping gems", - "text.autoconfig.simplyswords_main.option.gem_effects.leapingChance": "Leaping chance", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSpellshield": "Enable Spellshield gems", - "text.autoconfig.simplyswords_main.option.gem_effects.spellshieldChance": "Spellshield chance", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSpellforged": "Enable Spellforged gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSoulshock": "Enable Soulshock gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSpellStandard": "Enable Spell Standard gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableWarStandard": "Enable War Standard gems", - "text.autoconfig.simplyswords_main.option.gem_effects.enableDeception": "Enable Deception gems", - - "text.autoconfig.simplyswords_main.option.status_effects.echoDamage": "Echo base damage" + "simplyswords.general" : "General", + "simplyswords.gem_powers" : "Gem Effects", + "simplyswords.loot" : "Loot", + "simplyswords.status_effects" : "Status Effects", + "simplyswords.unique_effects" : "Unique Effects", + "simplyswords.weapon_attributes" : "Weapon Attributes", + + + + "simplyswords.weapon_attributes.typeDamageModifier" : "§a[Weapon Modifiers]§7", + "simplyswords.weapon_attributes.typeDamageModifier.desc" : "The damage values of weapons can be modified by adjusting their weights.\nThis is not the outputted damage value you see in game, but it affects it directly.\nCalculation: vanilla tool material damage + base_modifier + modifier = actual modifier.\nChanges require game restart to take effect.\n\n§a[Damage Modifiers]§7\nExample use-case: Adding 3 to a value below will INCREASE the in-game damage of that weapon type by 3.", + "simplyswords.weapon_attributes.typeDamageModifier.longsword_damageModifier": "Longsword damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.twinblade_damageModifier": "Twinblade damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.rapier_damageModifier": "Rapier damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.katana_damageModifier": "Katana damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.sai_damageModifier": "Sai damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.spear_damageModifier": "Spear damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.glaive_damageModifier": "Glaive damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.warglaive_damageModifier": "Warglaive damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.cutlass_damageModifier": "Cutlass damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.claymore_damageModifier": "Claymore damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.greataxe_damageModifier": "Greataxe damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.greathammer_damageModifier": "Greathammer damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.chakram_damageModifier": "Chakram damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.scythe_damageModifier": "Scythe damage modifier", + "simplyswords.weapon_attributes.typeDamageModifier.halberd_damageModifier": "Halberd damage modifier", + + "simplyswords.weapon_attributes.materialDamageModifier": "§a[Material Modifiers]§7", + "simplyswords.weapon_attributes.materialDamageModifier.desc": "Damage modifiers scale off these base values.", + "simplyswords.weapon_attributes.materialDamageModifier.mythicmetals": "Requires Mythic Metals", + "simplyswords.weapon_attributes.materialDamageModifier.mythicmetals.failTitle": "Disabled", + "simplyswords.weapon_attributes.materialDamageModifier.gobber2": "Requires Gobber", + "simplyswords.weapon_attributes.materialDamageModifier.gobber2.failTitle": "Disabled", + "simplyswords.weapon_attributes.materialDamageModifier.eldritch_end": "Requires Eldritch End", + "simplyswords.weapon_attributes.materialDamageModifier.eldritch_end.failTitle": "Disabled", + "simplyswords.weapon_attributes.materialDamageModifier.iron_damageModifier": "Iron base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.gold_damageModifier": "Gold base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.diamond_damageModifier": "Diamond base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.netherite_damageModifier": "Netherite base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.runic_damageModifier": "Runic base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.adamantite_damageModifier": "Adamantite base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.aquarium_damageModifier": "Aquarium base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.banglum_damageModifier": "Banglum base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.carmot_damageModifier": "Carmot base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.kyber_damageModifier": "Kyber base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.mythril_damageModifier": "Mythril base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.orichalcum_damageModifier": "Orichalcum base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.durasteel_damageModifier": "Durasteel base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.osmium_damageModifier": "Osmium base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.prometheum_damageModifier": "Prometheum base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.quadrillum_damageModifier": "Quadrillum base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.runite_damageModifier": "Runite base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.starPlatinum_damageModifier": "Star Platinum base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.bronze_damageModifier": "Bronze base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.copper_damageModifier": "Copper base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.steel_damageModifier": "Steel base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.palladium_damageModifier": "Palladium base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.stormyx_damageModifier": "Stormyx base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.celestium_damageModifier": "Celestium base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.metallurgium_damageModifier": "Metallurgium base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.gobber_damageModifier": "Gobber base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.gobberNether_damageModifier": "Gobber Nether base damage modifier", + "simplyswords.weapon_attributes.materialDamageModifier.gobberEnd_damageModifier": "Gobber End base damage modifier", + + "simplyswords.weapon_attributes.typeAttackSpeed" : "§a[Attack Speed Modifiers]", + "simplyswords.weapon_attributes.typeAttackSpeed.desc" : "Recommended range: -1.0 to -3.7, with -1.0 being fast and -3.7 being slow.", + "simplyswords.weapon_attributes.typeAttackSpeed.longsword_attackSpeed": "Longsword attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.twinblade_attackSpeed": "Twinblade attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.rapier_attackSpeed": "Rapier attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.katana_attackSpeed": "Katana attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.sai_attackSpeed": "Sai attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.spear_attackSpeed": "Spear attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.glaive_attackSpeed": "Glaive attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.warglaive_attackSpeed": "Warglaive attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.cutlass_attackSpeed": "Cutlass attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.claymore_attackSpeed": "Claymore attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.greataxe_attackSpeed": "Greataxe attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.greathammer_attackSpeed": "Greathammer damage modifier", + "simplyswords.weapon_attributes.typeAttackSpeed.chakram_attackSpeed": "Chakram attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.scythe_attackSpeed": "Scythe attack speed", + "simplyswords.weapon_attributes.typeAttackSpeed.halberd_attackSpeed": "Halberd attack speed", + + "simplyswords.weapon_attributes.uniqueDamageModifier" : "§6[Unique Modifiers]", + "simplyswords.weapon_attributes.uniqueDamageModifier.desc" : "Uniques scale a little bit differently and only require one modifier.\nThis is not the outputted damage value you see in game, but it affects it directly.\nCalculation: Vanilla netherite tool damage + damage_modifier = actual modifier.\n\n§6[Damage Modifiers]§7\nExample use-case: Adding 3 to a value below will INCREASE the in-game damage of that weapon by 3.", + "simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end" : "Requires Eldritch End", + "simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end.failTitle" : "Disabled", + "simplyswords.weapon_attributes.uniqueDamageModifier.brimstone_damageModifier": "§6Brimstone§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.thewatcher_damageModifier": "§6The Watcher§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.stormsedge_damageModifier": "§6Storm's Edge§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.stormbringer_damageModifier": "§6Stormbringer§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.swordonastick_damageModifier": "§6Sword on a Stick§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.bramblethorn_damageModifier": "§6Bramblethorn§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.watchingwarglaive_damageModifier": "§6Watching Warglaive§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.longswordofplague_damageModifier": "§6Longsword of The Plague§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.emberblade_damageModifier": "§6Emberblade§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.hearthflame_damageModifier": "§6Hearthflame§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulkeeper_damageModifier": "§6Soulkeeper§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.twistedblade_damageModifier": "§6Twisted Blade§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulstealer_damageModifier": "§6Soulstealer§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulrender_damageModifier": "§6Soulrender§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.mjolnir_damageModifier": "§6Mjolnir§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulpyre_damageModifier": "§6Soulpyre§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.frostfall_damageModifier": "§6Frostfall§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.moltenedge_damageModifier": "§6Molten Edge§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.livyatan_damageModifier": "§6Livyatan§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.icewhisper_damageModifier": "§6Icewhisper§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.arcanethyst_damageModifier": "§6Arcanethyst§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.thunderbrand_damageModifier": "§6Thunderbrand§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.lichblade_damageModifier": "§6Lichblade§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.shadowsting_damageModifier": "§6Shadowsting§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.sunfire_damageModifier": "§6Sunfire§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.harbinger_damageModifier": "§6Harbinger§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.whisperwind_damageModifier": "§6Whisperwind§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.emberlash_damageModifier": "§6Emberlash§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.waxweaver_damageModifier": "§6Waxweaver§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.hiveheart_damageModifier": "§6Hiveheart§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.starsedge_damageModifier": "§6Star's Edge§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.wickpiercer_damageModifier": "§6Wickpiercer§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.dreadtide_damageModifier": "§6Dreadtide§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.tempest_damageModifier": "§6Tempest§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.flamewind_damageModifier": "§6Flamewind§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.ribboncleaver_damageModifier": "§6Ribboncleaver§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.magiscythe_damageModifier": "§6Magiscythe§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.enigma_damageModifier": "§6Enigma§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.magispear_damageModifier": "§6Magispear§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.magiblade_damageModifier": "§6Magiblade§7 damage modifier", + "simplyswords.weapon_attributes.uniqueDamageModifier.caelestis_damageModifier": "§6Caelestis§7 damage modifier", + + "simplyswords.weapon_attributes.uniqueAttackSpeed" : "§6[Unique Attack Speed Modifiers]", + "simplyswords.weapon_attributes.uniqueAttackSpeed.desc" : "Recommended range: -1.0 to -3.7, with -1.0 being fast and -3.7 being slow.", + "simplyswords.weapon_attributes.uniqueAttackSpeed.brimstone_attackSpeed": "§6Brimstone§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.thewatcher_attackSpeed": "§6The Watcher§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.stormsedge_attackSpeed": "§6Storm's Edge§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.stormbringer_attackSpeed": "§6Stormbringer§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.swordonastick_attackSpeed": "§6Sword on a Stick§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.bramblethorn_attackSpeed": "§6Bramblethorn§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.watchingwarglaive_attackSpeed": "§6Watching Warglaive§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.longswordofplague_attackSpeed": "§6Longsword of The Plague§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.emberblade_attackSpeed": "§6Emberblade§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.hearthflame_attackSpeed": "§6Hearthflame§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulkeeper_attackSpeed": "§6Soulkeeper§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.twistedblade_attackSpeed": "§6Twisted Blade§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulstealer_attackSpeed": "§6Soulstealer§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulrender_attackSpeed": "§6Soulrender§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.mjolnir_attackSpeed": "§6Mjolnir§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulpyre_attackSpeed": "§6Soulpyre§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.frostfall_attackSpeed": "§6Frostfall§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.moltenedge_attackSpeed": "§6Molten Edge§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.livyatan_attackSpeed": "§6Livyatan§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.icewhisper_attackSpeed": "§6Icewhisper§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.arcanethyst_attackSpeed": "§6Arcanethyst§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.thunderbrand_attackSpeed": "§6Thunderbrand§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.lichblade_attackSpeed": "§6Lichblade§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.shadowsting_attackSpeed": "§6Shadowsting§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.sunfire_attackSpeed": "§6Sunfire§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.harbinger_attackSpeed": "§6Harbinger§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.whisperwind_attackSpeed": "§6Whisperwind§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.emberlash_attackSpeed": "§6Emberlash§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.waxweaver_attackSpeed": "§6Waxweaver§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.hiveheart_attackSpeed": "§6Hiveheart§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.starsedge_attackSpeed": "§6Star's Edge§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.wickpiercer_attackSpeed": "§6Wickpiercer§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.dreadtide_attackSpeed": "§6Dreadtide§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.tempest_attackSpeed": "§6Tempest§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.flamewind_attackSpeed": "§6Flamewind§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.ribboncleaver_attackSpeed": "§6Ribboncleaver§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.magiscythe_attackSpeed": "§6Magiscythe§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.enigma_attackSpeed": "§6Enigma§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.magispear_attackSpeed": "§6Magispear§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.magiblade_attackSpeed": "§6Magiblade§7 attack speed", + "simplyswords.weapon_attributes.uniqueAttackSpeed.caelestis_attackSpeed": "§6Caelestis§7 attack speed", + + "simplyswords.loot.enableLootDrops": "Enable loot drops", + "simplyswords.loot.enableLootDrops.desc" : "Disabling this setting will prevent Simply Swords from generating loot in chests.", + "simplyswords.loot.enableLootInVillages": "Enable loot drops in villages", + "simplyswords.loot.enableLootInVillages.desc" : "When enabled, Simply Swords loot can spawn in village chests.", + "simplyswords.loot.standardLootTableWeight": "Standard loot chance", + "simplyswords.loot.standardLootTableWeight.desc": "Chance for Iron > Gold weapons to appear in chests. 1.00 = 100%.", + "simplyswords.loot.rareLootTableWeight": "Rare loot chance", + "simplyswords.loot.rareLootTableWeight.desc": "Chance for Diamond weapons to appear in chests. 1.00 = 100%.", + "simplyswords.loot.runicLootTableWeight": "Runic loot chance", + "simplyswords.loot.runicLootTableWeight.desc": "Chance for Runic Tablets to appear in chests. 1.00 = 100%.", + "simplyswords.loot.uniqueLootTableWeight": "Unique loot chance", + "simplyswords.loot.uniqueLootTableWeight.desc": "Chance for Unique weapons to appear in chests. 1.00 = 100%.", + + "simplyswords.loot.uniqueLootTableOptions": "Unique Weapon Loot Tables", + "simplyswords.loot.uniqueLootTableOptions.desc": "Specific loot tables that unique weapons will appear in, and the chance they appear in that table", + "simplyswords.loot.disabledUniqueWeaponLoot": "Disabled Unique Weapon Loot Drops", + "simplyswords.loot.disabledUniqueWeaponLoot.desc": "§6[Loot Blacklisting]§7\nIncluding the id of any unique sword will prevent that item from generating in loot.\nThe item will still exist in the creative menu, but will be unobtainable through ordinary survival gameplay. ", + + "simplyswords.loot.enableContainedRemnants.condition": "Requires unique loot drop weight > 0f", + "simplyswords.loot.enableContainedRemnants.failTitle": "Disabled", + "simplyswords.loot.enableContainedRemnants": "Enable Contained Remnants", + "simplyswords.loot.enableContainedRemnants.desc": "Whether contained remnants change form or not. Disable this if you disable unique weapon drops.", + + "simplyswords.general.enableWeaponImpactSounds": "Enable weapon impact sounds", + "simplyswords.general.weaponImpactSoundsVolume": "Weapon impact sounds volume", + "simplyswords.general.enableWeaponFootfalls": "Enable weapon footfalls", + "simplyswords.general.enablePassiveParticles": "Enable passive particles", + "simplyswords.general.enableUniqueGemSockets": "Enable Unique gem sockets", + "simplyswords.general.enableUniqueGemSockets.desc" : "If disabled, gem slots will no longer appear on freshly generated Unique weapons. Not retroactive.", + "simplyswords.general.compatGobberEndWeaponsUnbreakable": "§a[Compat]§7 Enable Gobber unbreakable End weapons", + "simplyswords.general.compatGobberEndWeaponsUnbreakable.condition": "Requires Gobber", + "simplyswords.general.compatGobberEndWeaponsUnbreakable.failTitle": "Disabled", + "simplyswords.general.compatEnableSpellPowerScaling": "§a[Compat]§7 Enable Spell Power scaling", + "simplyswords.general.compatEnableSpellPowerScaling.desc": "§a[When Spell Power is installed]§7\nIf enabled, some weapon effects will scale with Spell Power attributes.", + "simplyswords.general.compatEnableSpellPowerScaling.condition": "Requires Spell Power", + "simplyswords.general.compatEnableSpellPowerScaling.failTitle": "Disabled", + + "simplyswords.unique_effects.abilityAbsorptionCap": "Absorption cap", + "simplyswords.unique_effects.abilityAbsorptionCap.desc": "Abilities cannot give the user more absorption than this value", + + "simplyswords.unique_effects.watcher": "§6[The Watcher & Watching Warglaives]§7", + "simplyswords.unique_effects.watcher.watcherChance": "Watcher chance", + "simplyswords.unique_effects.watcher.watcherRadius": "Watcher radius", + "simplyswords.unique_effects.watcher.watcherRestoreAmount": "Watcher restore amount", + "simplyswords.unique_effects.watcher.omenAbsorptionCap": "Omen absorption cap", + "simplyswords.unique_effects.watcher.omenChance": "Omen chance", + "simplyswords.unique_effects.watcher.omenInstantKillThreshold": "Omen instant-kill threshold", + + "simplyswords.unique_effects.steal": "§6[Soulstealer]§7", + "simplyswords.unique_effects.steal.chance": "Steal chance", + "simplyswords.unique_effects.steal.duration": "Steal duration", + "simplyswords.unique_effects.steal.radius": "Steal radius", + "simplyswords.unique_effects.steal.spellScaling": "Steal Spell Power DMG multi", + "simplyswords.unique_effects.steal.blindDuration": "Steal Blind duration", + "simplyswords.unique_effects.steal.invisDuration": "Steal Invisible duration", + + "simplyswords.unique_effects.soulkeeper": "§6[Soulkeeper]§7", + "simplyswords.unique_effects.soulkeeper.chance": "Soulmeld chance", + "simplyswords.unique_effects.soulkeeper.duration": "Soulmeld duration", + "simplyswords.unique_effects.soulkeeper.radius": "Soulmeld radius", + + "simplyswords.unique_effects.soulRend": "§6[Soulrender]§7", + "simplyswords.unique_effects.soulRend.chance": "Soulrend chance", + "simplyswords.unique_effects.soulRend.duration": "Soulrend duration", + "simplyswords.unique_effects.soulRend.maxStacks": "Soulrend max stacks", + "simplyswords.unique_effects.soulRend.radius": "Soulrend radius", + "simplyswords.unique_effects.soulRend.damageMulti": "Soulrend damage multiplier", + "simplyswords.unique_effects.soulRend.healMulti": "Soulrend heal multiplier", + "simplyswords.unique_effects.soulRend.spellScaling": "Soulrend Spell Power DMG multi", + + "simplyswords.unique_effects.ferocity": "§6[Twisted Blade]§7", + "simplyswords.unique_effects.ferocity.chance": "Ferocity chance", + "simplyswords.unique_effects.ferocity.duration": "Ferocity duration", + "simplyswords.unique_effects.ferocity.maxStacks": "Ferocity max stacks", + "simplyswords.unique_effects.ferocity.strengthTier": "Ferocity strength amplifier", + + "simplyswords.unique_effects.emberIre": "§6[Emberblade]§7", + "simplyswords.unique_effects.emberIre.chance": "Ember Ire chance", + "simplyswords.unique_effects.emberIre.duration": "Ember Ire duration", + + "simplyswords.unique_effects.volcanicFury" : "§6[Hearthflame]§7", + "simplyswords.unique_effects.volcanicFury.chance": "Volcanic Fury chance", + "simplyswords.unique_effects.volcanicFury.cooldown": "Volcanic Fury cooldown", + "simplyswords.unique_effects.volcanicFury.damage": "Volcanic Fury damage", + "simplyswords.unique_effects.volcanicFury.radius": "Volcanic Fury radius", + "simplyswords.unique_effects.volcanicFury.spellScaling": "Volcanic Fury Spell Power DMG multi", + + "simplyswords.unique_effects.storm" : "§6[Mjolnir]§7", + "simplyswords.unique_effects.storm.chance": "Storm chance", + "simplyswords.unique_effects.storm.cooldown": "Storm cooldown", + "simplyswords.unique_effects.storm.duration": "Storm duration", + "simplyswords.unique_effects.storm.frequency": "Storm frequency", + "simplyswords.unique_effects.storm.radius": "Storm radius", + + "simplyswords.unique_effects.plague" : "§6[Longsword of The Plague]§7", + "simplyswords.unique_effects.plague.chance": "Plague chance", + + "simplyswords.unique_effects.brimstone" : "§6[Brimstone Claymore]§7", + "simplyswords.unique_effects.brimstone.chance": "Brimstone chance", + + "simplyswords.unique_effects.bramble" : "§6[Bramblethorn]§7", + "simplyswords.unique_effects.bramble.Chance": "Bramble chance", + + "simplyswords.unique_effects.soultether": "§6[Soulpyre]§7", + "simplyswords.unique_effects.soultether.duration": "Soultether duration", + "simplyswords.unique_effects.soultether.range": "Soultether range", + "simplyswords.unique_effects.soultether.radius": "Soultether radius", + "simplyswords.unique_effects.soultether.igniteDuration": "Soultether Ignite duration", + "simplyswords.unique_effects.soultether.resistanceDuration": "Soultether Resistance duration", + + "simplyswords.unique_effects.frostFury": "§6[Frostfall]§7", + "simplyswords.unique_effects.frostFury.chance": "Frost Fury chance", + "simplyswords.unique_effects.frostFury.cooldown": "Frost Fury cooldown", + "simplyswords.unique_effects.frostFury.damage": "Frost Fury damage", + "simplyswords.unique_effects.frostFury.duration": "Frost Fury duration", + "simplyswords.unique_effects.frostFury.radius": "Frost Fury radius", + "simplyswords.unique_effects.frostFury.spellScaling": "Frost Fury Spell Power DMG multi", + + "simplyswords.unique_effects.moltenRoar": "§6[Molten Edge]§7", + "simplyswords.unique_effects.moltenRoar.chance": "Molten Roar chance", + "simplyswords.unique_effects.moltenRoar.cooldown": "Molten Roar cooldown", + "simplyswords.unique_effects.moltenRoar.duration": "Molten Roar duration", + "simplyswords.unique_effects.moltenRoar.knockbackStrength": "Molten Roar Knockback strength", + "simplyswords.unique_effects.moltenRoar.radius": "Molten Roar radius", + + "simplyswords.unique_effects.frostShatter": "§6[Livyatan]§7", + "simplyswords.unique_effects.frostShatter.chance": "Frost Shatter chance", + "simplyswords.unique_effects.frostShatter.damage": "Frost Shatter damage", + "simplyswords.unique_effects.frostShatter.duration": "Frost Shatter duration", + "simplyswords.unique_effects.frostShatter.radius": "Frost Shatter radius", + "simplyswords.unique_effects.frostShatter.spellScaling": "Frost Shatter Spell Power DMG multi", + + "simplyswords.unique_effects.permafrost": "§6[Icewhisper]§7", + "simplyswords.unique_effects.permafrost.cooldown": "Permafrost cooldown", + "simplyswords.unique_effects.permafrost.damage": "Permafrost damage", + "simplyswords.unique_effects.permafrost.duration": "Permafrost duration", + "simplyswords.unique_effects.permafrost.radius": "Permafrost radius", + "simplyswords.unique_effects.permafrost.spellScaling": "Permafrost Spell Power DMG multi", + + "simplyswords.unique_effects.arcaneAssault": "§6[Arcanethyst]§7", + "simplyswords.unique_effects.arcaneAssault.chance": "Arcane Assault chance", + "simplyswords.unique_effects.arcaneAssault.cooldown": "Arcane Assault cooldown", + "simplyswords.unique_effects.arcaneAssault.damage": "Arcane Assault damage", + "simplyswords.unique_effects.arcaneAssault.duration": "Arcane Assault duration", + "simplyswords.unique_effects.arcaneAssault.radius": "Arcane Assault radius", + "simplyswords.unique_effects.arcaneAssault.spellScaling": "Arcane Assault Spell Power DMG multi", + + "simplyswords.unique_effects.thunderBlitz": "§6[Thunderbrand]§7", + "simplyswords.unique_effects.thunderBlitz.chance": "Thunder Blitz chance", + "simplyswords.unique_effects.thunderBlitz.cooldown": "Thunder Blitz cooldown", + "simplyswords.unique_effects.thunderBlitz.damage": "Thunder Blitz damage", + "simplyswords.unique_effects.thunderBlitz.radius": "Thunder Blitz radius", + "simplyswords.unique_effects.thunderBlitz.spellScaling": "Thunder Blitz Spell Power DMG multi", + + "simplyswords.unique_effects.stormJolt": "§6[Storm's Edge]§7", + "simplyswords.unique_effects.stormJolt.chance": "Storm Jolt chance", + "simplyswords.unique_effects.stormJolt.cooldown": "Storm Jolt cooldown", + + "simplyswords.unique_effects.soulAnguish": "§6[Lichblade]§7", + "simplyswords.unique_effects.soulAnguish.absorptionCap": "Soul Anguish absorption cap", + "simplyswords.unique_effects.soulAnguish.cooldown": "Soul Anguish cooldown", + "simplyswords.unique_effects.soulAnguish.damage": "Soul Anguish damage", + "simplyswords.unique_effects.soulAnguish.duration": "Soul Anguish duration", + "simplyswords.unique_effects.soulAnguish.heal": "Soul Anguish heal", + "simplyswords.unique_effects.soulAnguish.radius": "Soul Anguish radius", + "simplyswords.unique_effects.soulAnguish.range": "Soul Anguish range", + "simplyswords.unique_effects.soulAnguish.spellScaling": "Soul Anguish Spell Power DMG multi", + + "simplyswords.unique_effects.shockDeflect": "§6[Stormbringer]§7", + "simplyswords.unique_effects.shockDeflect.Cooldown": "Shock Deflect cooldown", + "simplyswords.unique_effects.shockDeflect.Damage": "Shock Deflect damage", + "simplyswords.unique_effects.shockDeflect.SpellScaling": "Shock Deflect Spell Power DMG multi", + "simplyswords.unique_effects.shockDeflect.BlockDuration": "Shock Deflect radius", + "simplyswords.unique_effects.shockDeflect.ParryDuration": "Shock Deflect chance", + + "simplyswords.unique_effects.shadowmist": "§6[Shadowsting]§7", + "simplyswords.unique_effects.shadowmist.chance": "Shadowmist chance", + "simplyswords.unique_effects.shadowmist.cooldown": "Shadowmist cooldown", + "simplyswords.unique_effects.shadowmist.damageMulti": "Shadowmist damage multiplier", + "simplyswords.unique_effects.shadowmist.radius": "Shadowmist radius", + "simplyswords.unique_effects.shadowmist.blindDuration": "Shadowmist Blind duration", + + "simplyswords.unique_effects.abyssalStandard": "§6[Abyssal Standard]§7", + "simplyswords.unique_effects.abyssalStandard.chance": "Abyssal Standard chance", + "simplyswords.unique_effects.abyssalStandard.cooldown": "Abyssal Standard cooldown", + "simplyswords.unique_effects.abyssalStandard.damage": "Abyssal Standard damage", + "simplyswords.unique_effects.abyssalStandard.spellScaling": "Abyssal Standard Spell Power DMG multi", + + "simplyswords.unique_effects.righteousStandard": "§6[Righteous Standard]§7", + "simplyswords.unique_effects.righteousStandard.chance": "Righteous Standard chance", + "simplyswords.unique_effects.righteousStandard.cooldown": "Righteous Standard cooldown", + "simplyswords.unique_effects.righteousStandard.damage": "Righteous Standard damage", + "simplyswords.unique_effects.righteousStandard.spellScaling": "Righteous Standard Spell Power DMG multi", + "simplyswords.unique_effects.righteousStandard.spellScalingHeal": "Righteous Standard Spell Power HEAL multi", + + "simplyswords.unique_effects.fatalFlicker": "§6[Whisperwind]§7", + "simplyswords.unique_effects.fatalFlicker.chance": "Fatal Flicker chance", + "simplyswords.unique_effects.fatalFlicker.cooldown": "Fatal Flicker cooldown", + "simplyswords.unique_effects.fatalFlicker.maxStacks": "Fatal Flicker max stacks", + "simplyswords.unique_effects.fatalFlicker.radius": "Fatal Flicker radius", + "simplyswords.unique_effects.fatalFlicker.dashVelocity": "Fatal Flicker dash velocity", + + "simplyswords.unique_effects.smoulder": "§6[Emberlash]§7", + "simplyswords.unique_effects.smoulder.cooldown": "Smoulder cooldown", + "simplyswords.unique_effects.smoulder.heal": "Smoulder heal percent", + "simplyswords.unique_effects.smoulder.maxStacks": "Smoulder max stacks", + "simplyswords.unique_effects.smoulder.spellScaling": "Smoulder Spell Power DMG multi", + + "simplyswords.unique_effects.waxweave": "§6[Waxweaver]§7", + "simplyswords.unique_effects.waxweave.cooldown": "Waxweave cooldown", + "simplyswords.unique_effects.waxweave.maxStacks": "Waxweave max stacks", + + "simplyswords.unique_effects.hivemind": "§6[Hiveheart]§7", + "simplyswords.unique_effects.hivemind.cooldown": "Hivemind cooldown", + "simplyswords.unique_effects.hivemind.damage": "Hivemind damage modifier", + "simplyswords.unique_effects.hivemind.duration": "Hivemind duration", + + "simplyswords.unique_effects.celestialSurge": "§6[Star's Edge]§7", + "simplyswords.unique_effects.celestialSurge.cooldown": "Celestial Surge cooldown", + "simplyswords.unique_effects.celestialSurge.duration": "Celestial Surge duration", + "simplyswords.unique_effects.celestialSurge.damageModifier": "Celestial Surge Damage modifier", + "simplyswords.unique_effects.celestialSurge.lifestealModifier": "Celestial Surge Lifesteal modifier", + "simplyswords.unique_effects.celestialSurge.stacks": "Celestial Surge Haste stacks", + + "simplyswords.unique_effects.flickerFury": "§6[Wickpiercer]§7", + "simplyswords.unique_effects.flickerFury.cooldown": "Flicker Fury cooldown", + "simplyswords.unique_effects.flickerFury.damage": "Flicker Fury damage modifier", + "simplyswords.unique_effects.flickerFury.duration": "Flicker Fury duration", + + "simplyswords.unique_effects.vortex": "§6[Tempest]§7", + "simplyswords.unique_effects.vortex.duration": "Vortex duration", + "simplyswords.unique_effects.vortex.maxSize": "Vortex max size", + "simplyswords.unique_effects.vortex.maxStacks": "Vortex max stacks", + "simplyswords.unique_effects.vortex.spellScaling": "Vortex Spell Power DMG multi", + + "simplyswords.unique_effects.voidcaller": "§6[Dreadtide]§7", + "simplyswords.unique_effects.voidcaller.compat": "Requires Eldritch End", + "simplyswords.unique_effects.voidcaller.compat.failTitle": "Disabled", + "simplyswords.unique_effects.voidcaller.damageModifier": "Voidcaller damage modifier", + "simplyswords.unique_effects.voidcaller.duration": "Voidcaller duration", + "simplyswords.unique_effects.voidcaller.startingTickFrequency": "Voidcaller starting tick frequency", + "simplyswords.unique_effects.voidcaller.corruptionFrequency": "Voidcaller Corruption frequency", + "simplyswords.unique_effects.voidcaller.corruptionPerTick": "Voidcaller Corruption per tick", + "simplyswords.unique_effects.voidcaller.corruptionDuration": "Voidcaller Corruption duration", + "simplyswords.unique_effects.voidcaller.corruptionMax": "Voidcaller Corruption max", + + "simplyswords.unique_effects.emberstorm": "§6[Flamewind]§7", + "simplyswords.unique_effects.emberstorm.cooldown": "Emberstorm cooldown", + "simplyswords.unique_effects.emberstorm.damage": "Emberstorm damage", + "simplyswords.unique_effects.emberstorm.spellScaling": "Emberstorm Spell Power DMG multi", + "simplyswords.unique_effects.emberstorm.detonationDamage": "Emberstorm detonation damage", + "simplyswords.unique_effects.emberstorm.maxHaste": "Emberstorm Haste max", + "simplyswords.unique_effects.emberstorm.spreadCap": "Emberstorm spread cap", + + "simplyswords.unique_effects.ribbonwrath" : "§6[Ribboncleaver]§7", + "simplyswords.unique_effects.ribbonwrath.cooldown": "Ribbonwrath cooldown", + "simplyswords.unique_effects.ribbonwrath.damageBonusPercent": "Ribbonwrath damage bonus percent", + "simplyswords.unique_effects.ribbonwrath.resilienceAmplifier": "Ribbonwrath resilience amplifier", + + "simplyswords.unique_effects.magistorm" : "§6[Magiscythe]§7", + "simplyswords.unique_effects.magistorm.cooldown": "Magiscythe cooldown", + "simplyswords.unique_effects.magistorm.damage": "Magistorm damage", + "simplyswords.unique_effects.magistorm.duration": "Magistorm duration", + "simplyswords.unique_effects.magistorm.radius": "Magistorm radius", + "simplyswords.unique_effects.magistorm.repairChance": "Magistorm repair chance", + "simplyswords.unique_effects.magistorm.spellScaling": "Magistorm Spell Power DMG multi", + + "simplyswords.unique_effects.enigma" : "§6[Enigma]§7", + "simplyswords.unique_effects.enigma.cooldown": "Enigma cooldown", + "simplyswords.unique_effects.enigma.chaseRadius": "Enigma chase radius", + "simplyswords.unique_effects.enigma.decayRate": "Enigma decay rate", + + "simplyswords.unique_effects.magiblade" : "§6[Magiblade]§7", + "simplyswords.unique_effects.magiblade.cooldown": "Magisonic cooldown", + "simplyswords.unique_effects.magiblade.damageModifier": "Magisonic damage modifier", + "simplyswords.unique_effects.magiblade.repelChance": "Magisonic repel chance", + "simplyswords.unique_effects.magiblade.repelRadius": "Magisonic repel radius", + "simplyswords.unique_effects.magiblade.sonicDistance": "Magisonic sonic distance", + + "simplyswords.unique_effects.magislam" : "§6[Magispear]§7", + "simplyswords.unique_effects.magislam.cooldown": "Magislam cooldown", + "simplyswords.unique_effects.magislam.damageModifier": "Magislam damage modifier", + "simplyswords.unique_effects.magislam.radius": "Magislam radius", + "simplyswords.unique_effects.magislam.magicChance": "Magislam magic chance", + "simplyswords.unique_effects.magislam.magicModifier": "Magislam magic modifier", + + "simplyswords.unique_effects.astralShift" : "§6[Caelestis]§7", + "simplyswords.unique_effects.astralShift.chance": "Astral Shift avoidance chance", + "simplyswords.unique_effects.astralShift.cooldown": "Astral Shift cooldown", + "simplyswords.unique_effects.astralShift.damageMax": "Astral Shift damage max", + "simplyswords.unique_effects.astralShift.damageModifier": "Astral Shift damage modifier", + "simplyswords.unique_effects.astralShift.duration": "Astral Shift duration", + + "simplyswords.gem_powers.disabledPowers" : "Disabled Gem Powers", + "simplyswords.gem_powers.disabledPowers.desc" : "§a[Runic Power Blacklisting]§7\nAdding a power to this list will prevent that runic power from being obtainable.", + "simplyswords.gem_powers.swiftness" : "§b[Swiftness]§7", + "simplyswords.gem_powers.slow" : "§b[Slow]§7", + "simplyswords.gem_powers.poison" : "§b[Poison]§7", + "simplyswords.gem_powers.freeze" : "§b[Freeze]§7", + "simplyswords.gem_powers.wildfire" : "§b[Wildfire]§7", + "simplyswords.gem_powers.floating" : "§b[Float]§7", + "simplyswords.gem_powers.zephyr" : "§b[Zephyr]§7", + "simplyswords.gem_powers.shielding" : "§b[Shielding]§7", + "simplyswords.gem_powers.stoneskin" : "§b[Stoneskin]§7", + "simplyswords.gem_powers.trailblaze" : "§b[Trailblaze]§7", + "simplyswords.gem_powers.weaken" : "§b[Weaken]§7", + "simplyswords.gem_powers.unstable" : "§b[Unstable]§7", + "simplyswords.gem_powers.activeDefence" : "§b[Active Defence]§7", + "simplyswords.gem_powers.frostWard" : "§b[Frost Ward]§7", + "simplyswords.gem_powers.momentum" : "§b[Momentum]§7", + "simplyswords.gem_powers.imbued" : "§b[Imbued]§7", + "simplyswords.gem_powers.simplySkills": "Simply Skills Powers", + "simplyswords.gem_powers.simplySkills.desc" : "§6[Simply Skills Compatibility Gems]§7\nThese gems can only be acquired when Simply Skills is installed.", + "simplyswords.gem_powers.simplySkills.condition": "Requires Simply Skills", + "simplyswords.gem_powers.simplySkills.failTitle": "Disabled", + "simplyswords.gem_powers.simplySkills.preciseChance": "Precise chance", + "simplyswords.gem_powers.simplySkills.mightyChance": "Mighty chance", + "simplyswords.gem_powers.simplySkills.stealthyChance": "Stealthy chance", + "simplyswords.gem_powers.simplySkills.renewedChance": "Renewed chance", + "simplyswords.gem_powers.simplySkills.leapingChance": "Leaping chance", + "simplyswords.gem_powers.simplySkills.spellshieldChance": "Spellshield chance", + + "simplyswords.status_effects.echoDamage": "Echo base damage", + + "simplyswords.config.basic_settings.chance": "Chance", + "simplyswords.config.basic_settings.chance.desc": "Percent chance the effect occurs", + "simplyswords.config.basic_settings.duration": "Duration", + "simplyswords.config.basic_settings.duration.desc": "Duration of the effect in ticks", + "simplyswords.config.basic_settings.radius": "Radius", + "simplyswords.config.basic_settings.radius.desc": "Radius of the effect in blocks", + "simplyswords.config.basic_settings.frequency": "Frequency", + "simplyswords.config.basic_settings.frequency.desc": "How often the effect occurs; 'once per X ticks'", + "simplyswords.config.basic_settings.cooldown": "Cooldown", + "simplyswords.config.basic_settings.cooldown.desc": "Delay in ticks after activating the effect" } \ No newline at end of file diff --git a/common/src/main/resources/assets/simplyswords/lang/ru_ru.json b/common/src/main/resources/assets/simplyswords/lang/ru_ru.json index 0d25f181..4098b418 100644 --- a/common/src/main/resources/assets/simplyswords/lang/ru_ru.json +++ b/common/src/main/resources/assets/simplyswords/lang/ru_ru.json @@ -1,793 +1,1594 @@ { - "item.simplyswords.iron_cutlass": "Железная Сабля", - "item.simplyswords.gold_cutlass": "Золотая Сабля", - "item.simplyswords.diamond_cutlass": "Алмазная Сабля", - "item.simplyswords.netherite_cutlass": "Незеритовая Сабля", - "item.simplyswords.runic_rapier": "Руническая Рапира", - "item.simplyswords.netherite_rapier": "Незеритовая Рапира", - "item.simplyswords.diamond_rapier": "Алмазная Рапира", - "item.simplyswords.gold_rapier": "Золотая Рапира", - "item.simplyswords.iron_rapier": "Железная Рапира", - "item.simplyswords.iron_glaive": "Железная Глефа", - "item.simplyswords.gold_glaive": "Золотая Глефа", - "item.simplyswords.diamond_glaive": "Алмазная Глефа", - "item.simplyswords.netherite_glaive": "Незеритовая Глефа", - "item.simplyswords.iron_warglaive": "Железная Боевая Глефа", - "item.simplyswords.gold_warglaive": "Золотая Боевая Глефа", - "item.simplyswords.diamond_warglaive": "Алмазная Боевая Глефа", - "item.simplyswords.netherite_warglaive": "Незеритовая Боевая Глефа", - "item.simplyswords.iron_spear": "Железное Копьё", - "item.simplyswords.gold_spear": "Золотое Копьё", - "item.simplyswords.diamond_spear": "Алмазное Копьё", - "item.simplyswords.netherite_spear": "Незеритовое Копьё", - "item.simplyswords.iron_sai": "Железная Сая", - "item.simplyswords.diamond_sai": "Алмазная Сая", - "item.simplyswords.gold_sai": "Золотая Сая", - "item.simplyswords.netherite_sai": "Незеритовая Сая", - "item.simplyswords.iron_halberd": "Железная Алебарда", - "item.simplyswords.gold_halberd": "Золотая Алебарда", - "item.simplyswords.diamond_halberd": "Алмазная Алебарда", - "item.simplyswords.netherite_halberd": "Незеритовая Алебарда", - "item.simplyswords.runic_halberd": "Руническая Алебарда", - "item.simplyswords.iron_katana": "Железная Катана", - "item.simplyswords.gold_katana": "Золотая Катана", - "item.simplyswords.diamond_katana": "Алмазная Катана", - "item.simplyswords.netherite_katana": "Незеритовая Катана", - "item.simplyswords.runic_cutlass": "Руническая Сабля", - "item.simplyswords.runic_katana": "Руническая Катана", - "item.simplyswords.runic_sai": "Руническая Сая", - "item.simplyswords.diamond_claymore": "Алмазный Клеймор", - "item.simplyswords.netherite_claymore": "Незеритовый Клеймор", - "item.simplyswords.runic_claymore": "Рунический Клеймор", - "item.simplyswords.watcher_claymore": "Смотритель", - "item.simplyswords.brimstone_claymore": "Пламенный Клеймор", - "item.simplyswords.gold_claymore": "Золотой Клеймор", - "item.simplyswords.iron_claymore": "Железный Клеймор", - "item.simplyswords.runic_longsword": "Рунический Длинный меч", - "item.simplyswords.watching_warglaive": "Смотрящая Боевая Глефа", - "item.simplyswords.iron_longsword": "Железный Длинный меч", - "item.simplyswords.gold_longsword": "Золотой Длинный меч", - "item.simplyswords.diamond_longsword": "Алмазный Длинный меч", - "item.simplyswords.netherite_longsword": "Незеритовый Длинный меч", - "item.simplyswords.toxic_longsword": "Чумной Длинный Меч", - "item.simplyswords.runic_twinblade": "Рунический Двойной клинок", - "item.simplyswords.runic_glaive": "Руническая Глефа", - "item.simplyswords.runic_spear": "Руническое Копьё", - "item.simplyswords.runic_warglaive": "Руническая Боевая Глефа", - "item.simplyswords.runic_greathammer": "Рунический Большой Молот", - "item.simplyswords.runic_greataxe": "Рунический Большой Топор", - "item.simplyswords.iron_twinblade": "Железный Двойной Клинок", - "item.simplyswords.gold_twinblade": "Золотой Двойной Клинок", - "item.simplyswords.diamond_twinblade": "Алмазный Двойной Клинок", - "item.simplyswords.netherite_twinblade": "Незеритовый Двойной Клинок", - "item.simplyswords.iron_greathammer": "Железный Большой Молот", - "item.simplyswords.gold_greathammer": "Золотой Большой Молот", - "item.simplyswords.diamond_greathammer": "Алмазный Большой Молот", - "item.simplyswords.netherite_greathammer": "Незеритовый Большой Молот", - "item.simplyswords.iron_greataxe": "Железный Большой Топор", - "item.simplyswords.gold_greataxe": "Золотой Большой Топор", - "item.simplyswords.diamond_greataxe": "Алмазный Большой Топор", - "item.simplyswords.netherite_greataxe": "Незеритовый Большой Топор", - "item.simplyswords.iron_chakram": "Железный Чакрам", - "item.simplyswords.gold_chakram": "Золотой Чакрам", - "item.simplyswords.diamond_chakram": "Алмазный Чакрам", - "item.simplyswords.netherite_chakram": "Незеритовый Чакрам", - "item.simplyswords.iron_scythe": "Железная Коса", - "item.simplyswords.gold_scythe": "Золотая Коса", - "item.simplyswords.diamond_scythe": "Алмазная Коса", - "item.simplyswords.netherite_scythe": "Незеритовая Коса", - "item.simplyswords.runic_chakram": "Рунический Чакрам", - "item.simplyswords.runic_scythe": "Руническая Коса", - "item.simplyswords.storms_edge": "Клинок шторма", - "item.simplyswords.stormbringer": "Вестник шторма", - "item.simplyswords.sword_on_a_stick": "Меч на палке", - "item.simplyswords.bramblethorn": "Терновник", - "item.simplyswords.magic_estoc": "Зачарованная шпага", - "item.simplyswords.mjolnir": "Мьёльнир", - "item.simplyswords.emberblade": "Огненное Лезвие", - "item.simplyswords.hearthflame": "Сердце Пламени", - "item.simplyswords.twisted_blade": "Фламберг", - "item.simplyswords.twilight": "Сумеречный", - "item.simplyswords.soulkeeper": "Хранитель Душ", - "item.simplyswords.soulstealer": "Вор Душ", - "item.simplyswords.soulrender": "Душераздиратель", - "item.simplyswords.soulpyre": "Выжигатель Душ", - "item.simplyswords.frostfall": "Морозный Упадок", - "item.simplyswords.molten_edge": "Расплавленный Топор", - "item.simplyswords.livyatan": "Левиафан", - "item.simplyswords.icewhisper": "Ледяной Шепот", - "item.simplyswords.arcanethyst": "Чародей", - "item.simplyswords.thunderbrand": "Громовержец", - "item.simplyswords.sunfire": "Солнечный огонь", - "item.simplyswords.slumbering_lichblade": "Дремлющий Клинок-Лича", - "item.simplyswords.waking_lichblade": "Пробуждающийся Клинок-Лича", - "item.simplyswords.awakened_lichblade": "Пробудившийся Клинок-Лича", - "item.simplyswords.shadowsting": "Теневой укус", - "item.simplyswords.dormant_relic": "Спящая реликвия", - "item.simplyswords.righteous_relic": "Праведная реликвия", - "item.simplyswords.tainted_relic": "Порченая реликвия", - "item.simplyswords.harbinger": "Предвестник", - - "item.simplyswords.runic_tablet": "Руническая Скрижаль", - "item.simplyswords.runefused_gem": "Руноплавленная Руна", - "item.simplyswords.netherfused_gem": "Незеритоплавленная Руна", - "item.simplyswords.empowered_remnant": "Усиливающий остаток", - - - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_claymore": "Адамантитовый Клеймор", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_cutlass": "Адамантитовая Сабля", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_glaive": "Адамантитовая Глефа", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_katana": "Адамантитовая Катана", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_longsword": "Адамантитовый Длинный меч", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_rapier": "Адамантитовая Рапира", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_sai": "Адамантитовая Сая", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_spear": "Адамантитовое Копьё", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_twinblade": "Адамантитовый Двойной клинок", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_warglaive": "Адамантитовая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_greathammer": "Адамантитовый Большой молот", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_greataxe": "Адамантитовый Большой топор", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_chakram": "Адамантитовый Чакрам", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_scythe": "Адамантитовая Коса", - "item.simplyswords.mythicmetals_compat.adamantite.adamantite_halberd": "Адамантитовая Алебарда", - - - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_claymore": "Акваривый Клеймор", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_cutlass": "Акваривая Сабля", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_glaive": "Акваривая Глефа", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_katana": "Акваривая Катана", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_longsword": "Акваривый Длинный меч", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_rapier": "Акваривая Рапира", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_sai": "Акваривая Сая", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_spear": "Акваривое Копьё", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_twinblade": "Акваривый Двойной клинок", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_warglaive": "Акваривая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_greathammer": "Акваривый Большой молот", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_greataxe": "Акваривый Большой топор", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_chakram": "Акваривый Чакрам", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_scythe": "Акваривая Коса", - "item.simplyswords.mythicmetals_compat.aquarium.aquarium_halberd": "Акваривая Алебарда", - - - - "item.simplyswords.mythicmetals_compat.banglum.banglum_claymore": "Банглиевый Клеймор", - "item.simplyswords.mythicmetals_compat.banglum.banglum_cutlass": "Банглиевая Сабля", - "item.simplyswords.mythicmetals_compat.banglum.banglum_glaive": "Банглиевая Глефа", - "item.simplyswords.mythicmetals_compat.banglum.banglum_katana": "Банглиевая Катана", - "item.simplyswords.mythicmetals_compat.banglum.banglum_longsword": "Банглиевый Длинный меч", - "item.simplyswords.mythicmetals_compat.banglum.banglum_rapier": "Банглиевая Рапира", - "item.simplyswords.mythicmetals_compat.banglum.banglum_sai": "Банглиевая Сая", - "item.simplyswords.mythicmetals_compat.banglum.banglum_spear": "Банглиевое Копьё", - "item.simplyswords.mythicmetals_compat.banglum.banglum_twinblade": "Банглиевый Двойной клинок", - "item.simplyswords.mythicmetals_compat.banglum.banglum_warglaive": "Банглиевая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.banglum.banglum_greathammer": "Банглиевый Большой молот", - "item.simplyswords.mythicmetals_compat.banglum.banglum_greataxe": "Банглиевый Большой топор", - "item.simplyswords.mythicmetals_compat.banglum.banglum_chakram": "Банглиевый Чакрам", - "item.simplyswords.mythicmetals_compat.banglum.banglum_scythe": "Банглиевая Коса", - "item.simplyswords.mythicmetals_compat.banglum.banglum_halberd": "Банглиевая Алебарда", - - - "item.simplyswords.mythicmetals_compat.carmot.carmot_claymore": "Кармотовый Клеймор", - "item.simplyswords.mythicmetals_compat.carmot.carmot_cutlass": "Кармотовая Сабля", - "item.simplyswords.mythicmetals_compat.carmot.carmot_glaive": "Кармотовая Глефа", - "item.simplyswords.mythicmetals_compat.carmot.carmot_katana": "Кармотовая Катана", - "item.simplyswords.mythicmetals_compat.carmot.carmot_longsword": "Кармотовый Длинный меч", - "item.simplyswords.mythicmetals_compat.carmot.carmot_rapier": "Кармотовая Рапира", - "item.simplyswords.mythicmetals_compat.carmot.carmot_sai": "Кармотовая Сая", - "item.simplyswords.mythicmetals_compat.carmot.carmot_spear": "Кармотовое Копьё", - "item.simplyswords.mythicmetals_compat.carmot.carmot_twinblade": "Кармотовый Двойной клинок", - "item.simplyswords.mythicmetals_compat.carmot.carmot_warglaive": "Кармотовая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.carmot.carmot_greathammer": "Кармотовый Большой молот", - "item.simplyswords.mythicmetals_compat.carmot.carmot_greataxe": "Кармотовый Большой топор", - "item.simplyswords.mythicmetals_compat.carmot.carmot_chakram": "Кармотовый Чакрам", - "item.simplyswords.mythicmetals_compat.carmot.carmot_scythe": "Кармотовая Коса", - "item.simplyswords.mythicmetals_compat.carmot.carmot_halberd": "Кармотовая Алебарда", - - - "item.simplyswords.mythicmetals_compat.kyber.kyber_claymore": "Кьюберевый Клеймор", - "item.simplyswords.mythicmetals_compat.kyber.kyber_cutlass": "Кьюберевая Сабля", - "item.simplyswords.mythicmetals_compat.kyber.kyber_glaive": "Кьюберевая Глефа", - "item.simplyswords.mythicmetals_compat.kyber.kyber_katana": "Кьюберевая Катана", - "item.simplyswords.mythicmetals_compat.kyber.kyber_longsword": "Кьюберевый Длинный меч", - "item.simplyswords.mythicmetals_compat.kyber.kyber_rapier": "Кьюберевая Рапира", - "item.simplyswords.mythicmetals_compat.kyber.kyber_Сая": "Кьюберевая Сая", - "item.simplyswords.mythicmetals_compat.kyber.kyber_spear": "Кьюберевое Копьё", - "item.simplyswords.mythicmetals_compat.kyber.kyber_twinblade": "Кьюберевый Двойной клинок", - "item.simplyswords.mythicmetals_compat.kyber.kyber_warglaive": "Кьюберевая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.kyber.kyber_greathammer": "Кьюберевый Большой молот", - "item.simplyswords.mythicmetals_compat.kyber.kyber_greataxe": "Кьюберевый Большой топор", - "item.simplyswords.mythicmetals_compat.kyber.kyber_chakram": "Кьюберевый Чакрам", - "item.simplyswords.mythicmetals_compat.kyber.kyber_scythe": "Кьюберевая Коса", - "item.simplyswords.mythicmetals_compat.kyber.kyber_halberd": "Кьюберевая Алебарда", - - - "item.simplyswords.mythicmetals_compat.mythril.mythril_claymore": "Мифриловый Клеймор", - "item.simplyswords.mythicmetals_compat.mythril.mythril_cutlass": "Мифриловая Сабля", - "item.simplyswords.mythicmetals_compat.mythril.mythril_glaive": "Мифриловая Глефа", - "item.simplyswords.mythicmetals_compat.mythril.mythril_katana": "Мифриловая Катана", - "item.simplyswords.mythicmetals_compat.mythril.mythril_longsword": "Мифриловый Длинный меч", - "item.simplyswords.mythicmetals_compat.mythril.mythril_rapier": "Мифриловая Рапира", - "item.simplyswords.mythicmetals_compat.mythril.mythril_sai": "Мифриловая Сая", - "item.simplyswords.mythicmetals_compat.mythril.mythril_spear": "Мифриловое Копьё", - "item.simplyswords.mythicmetals_compat.mythril.mythril_twinblade": "Мифриловый Двойной клинок", - "item.simplyswords.mythicmetals_compat.mythril.mythril_warglaive": "Мифриловая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.mythril.mythril_greathammer": "Мифриловый Большой молот", - "item.simplyswords.mythicmetals_compat.mythril.mythril_greataxe": "Мифриловый Большой топор", - "item.simplyswords.mythicmetals_compat.mythril.mythril_chakram": "Мифриловый Чакрам", - "item.simplyswords.mythicmetals_compat.mythril.mythril_scythe": "Мифриловая Коса", - "item.simplyswords.mythicmetals_compat.mythril.mythril_halberd": "Мифриловая Алебарда", - - - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_claymore": "Орихалковый Клеймор", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_cutlass": "Орихалковая Сабля", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_glaive": "Орихалковая Глефа", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_katana": "Орихалковая Катана", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_longsword": "Орихалковый Длинный меч", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_rapier": "Орихалковая Рапира", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_sai": "Орихалковая Сая", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_spear": "Орихалковое Копьё", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_twinblade": "Орихалковый Двойной клинок", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_warglaive": "Орихалковая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_greathammer": "Орихалковый Большой молот", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_greataxe": "Орихалковый Большой топор", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_chakram": "Орихалковый Чакрам", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_scythe": "Орихалковая Коса", - "item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_halberd": "Орихалковая Алебарда", - - - "item.simplyswords.mythicmetals_compat.osmium.osmium_claymore": "Осмиевый Клеймор", - "item.simplyswords.mythicmetals_compat.osmium.osmium_cutlass": "Осмиевая Сабля", - "item.simplyswords.mythicmetals_compat.osmium.osmium_glaive": "Осмиевая Глефа", - "item.simplyswords.mythicmetals_compat.osmium.osmium_katana": "Осмиевая Катана", - "item.simplyswords.mythicmetals_compat.osmium.osmium_longsword": "Осмиевый Длинный меч", - "item.simplyswords.mythicmetals_compat.osmium.osmium_rapier": "Осмиевая Рапира", - "item.simplyswords.mythicmetals_compat.osmium.osmium_sai": "Осмиевая Сая", - "item.simplyswords.mythicmetals_compat.osmium.osmium_spear": "Осмиевое Копьё", - "item.simplyswords.mythicmetals_compat.osmium.osmium_twinblade": "Осмиевый Двойной клинок", - "item.simplyswords.mythicmetals_compat.osmium.osmium_warglaive": "Осмиевая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.osmium.osmium_greathammer": "Осмиевый Большой молот", - "item.simplyswords.mythicmetals_compat.osmium.osmium_greataxe": "Осмиевый Большой топор", - "item.simplyswords.mythicmetals_compat.osmium.osmium_chakram": "Осмиевый Чакрам", - "item.simplyswords.mythicmetals_compat.osmium.osmium_scythe": "Осмиевая Коса", - "item.simplyswords.mythicmetals_compat.osmium.osmium_halberd": "Осмиевая Алебарда", - - - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_claymore": "Прометиумовый Клеймор", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_cutlass": "Прометиумовая Сабля", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_glaive": "Прометиумовая Глефа", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_katana": "Прометиумовая Катана", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_longsword": "Прометиумовый Длинный меч", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_rapier": "Прометиумовая Рапира", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_sai": "Прометиумовая Сая", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_spear": "Прометиумовое Копьё", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_twinblade": "Прометиумовый Двойной клинок", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_warglaive": "Прометиумовая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_greathammer": "Прометиумовый Большой молот", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_greataxe": "Прометиумовый Большой топор", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_chakram": "Прометиумовый Чакрам", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_scythe": "Прометиумовая Коса", - "item.simplyswords.mythicmetals_compat.prometheum.prometheum_halberd": "Прометиумовая Алебарда", - - - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_claymore": "Квадриливый Клеймор", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_cutlass": "Квадриливая Сабля", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_glaive": "Квадриливая Глефа", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_katana": "Квадриливая Катана", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_longsword": "Квадриливый Длинный меч", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_rapier": "Квадриливая Рапира", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_sai": "Квадриливая Сая", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_spear": "Квадриливое Копьё", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_twinblade": "Квадриливый Двойной клинок", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_warglaive": "Квадриливая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_greathammer": "Квадриливый Большой молот", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_greataxe": "Квадриливый Большой топор", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_chakram": "Квадриливый Чакрам", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_scythe": "Квадриливая Коса", - "item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_halberd": "Квадриливая Алебарда", - - - "item.simplyswords.mythicmetals_compat.runite.runite_claymore": "Рунитовый Клеймор", - "item.simplyswords.mythicmetals_compat.runite.runite_cutlass": "Рунитовая Сабля", - "item.simplyswords.mythicmetals_compat.runite.runite_glaive": "Рунитовая Глефа", - "item.simplyswords.mythicmetals_compat.runite.runite_katana": "Рунитовая Катана", - "item.simplyswords.mythicmetals_compat.runite.runite_longsword": "Рунитовый Длинный меч", - "item.simplyswords.mythicmetals_compat.runite.runite_rapier": "Рунитовая Рапира", - "item.simplyswords.mythicmetals_compat.runite.runite_sai": "Рунитовая Сая", - "item.simplyswords.mythicmetals_compat.runite.runite_spear": "Рунитовое Копьё", - "item.simplyswords.mythicmetals_compat.runite.runite_twinblade": "Рунитовый Двойной клинок", - "item.simplyswords.mythicmetals_compat.runite.runite_warglaive": "Рунитовая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.runite.runite_greathammer": "Рунитовый Большой молот", - "item.simplyswords.mythicmetals_compat.runite.runite_greataxe": "Рунитовый Большой топор", - "item.simplyswords.mythicmetals_compat.runite.runite_chakram": "Рунитовый Чакрам", - "item.simplyswords.mythicmetals_compat.runite.runite_scythe": "Рунитовая Коса", - "item.simplyswords.mythicmetals_compat.runite.runite_halberd": "Рунитовая Алебарда", - - - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_claymore": "Звёздный Клеймор", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_cutlass": "Звёздная Сабля", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_glaive": "Звёздная Глефа", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_katana": "Звёздная Катана", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_longsword": "Звёздный Длинный меч", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_rapier": "Звёздная Рапира", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_sai": "Звёздная Сая", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_spear": "Звёздное Копьё", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_twinblade": "Звёздный Двойной клинок", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_warglaive": "Звёздная Боевая Глефа", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_greathammer": "Звёздный Большой молот", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_greataxe": "Звёздный Большой топор", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_chakram": "Звёздный Чакрам", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_scythe": "Звёздная Коса", - "item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_halberd": "Звёздная Алебарда", - - - "item.simplyswords.mythicmetals_compat.bronze.bronze_claymore": "Бронзовый Клеймор", - "item.simplyswords.mythicmetals_compat.bronze.bronze_cutlass": "Бронзовая Сабля", - "item.simplyswords.mythicmetals_compat.bronze.bronze_glaive": "Бронзовая Глефа", - "item.simplyswords.mythicmetals_compat.bronze.bronze_katana": "Бронзовая Катана", - "item.simplyswords.mythicmetals_compat.bronze.bronze_longsword": "Бронзовый Длинный меч", - "item.simplyswords.mythicmetals_compat.bronze.bronze_rapier": "Бронзовая Рапира", - "item.simplyswords.mythicmetals_compat.bronze.bronze_sai": "Бронзовая Сая", - "item.simplyswords.mythicmetals_compat.bronze.bronze_spear": "Бронзовое Копьё", - "item.simplyswords.mythicmetals_compat.bronze.bronze_twinblade": "Бронзовый Двойной клинок", - "item.simplyswords.mythicmetals_compat.bronze.bronze_warglaive": "Бронзовая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.bronze.bronze_greathammer": "Бронзовый Большой молот", - "item.simplyswords.mythicmetals_compat.bronze.bronze_greataxe": "Бронзовыый Большой топор", - "item.simplyswords.mythicmetals_compat.bronze.bronze_chakram": "Бронзовый Чакрам", - "item.simplyswords.mythicmetals_compat.bronze.bronze_scythe": "Бронзовая Коса", - "item.simplyswords.mythicmetals_compat.bronze.bronze_halberd": "Бронзовая Алебарда", - - - "item.simplyswords.mythicmetals_compat.palladium.palladium_claymore": "Палладиевый Клеймор", - "item.simplyswords.mythicmetals_compat.palladium.palladium_cutlass": "Палладиевая Сабля", - "item.simplyswords.mythicmetals_compat.palladium.palladium_glaive": "Палладиевая Глефа", - "item.simplyswords.mythicmetals_compat.palladium.palladium_katana": "Палладиевая Катана", - "item.simplyswords.mythicmetals_compat.palladium.palladium_longsword": "Палладиевый Длинный меч", - "item.simplyswords.mythicmetals_compat.palladium.palladium_rapier": "Палладиевая Рапира", - "item.simplyswords.mythicmetals_compat.palladium.palladium_sai": "Палладиевая Сая", - "item.simplyswords.mythicmetals_compat.palladium.palladium_spear": "Палладиевое Копьё", - "item.simplyswords.mythicmetals_compat.palladium.palladium_twinblade": "Палладиевый Двойной клинок", - "item.simplyswords.mythicmetals_compat.palladium.palladium_warglaive": "Палладиевая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.palladium.palladium_greathammer": "Палладиевый Большой молот", - "item.simplyswords.mythicmetals_compat.palladium.palladium_greataxe": "Палладиевый Большой топор", - "item.simplyswords.mythicmetals_compat.palladium.palladium_chakram": "Палладиевый Чакрам", - "item.simplyswords.mythicmetals_compat.palladium.palladium_scythe": "Палладиевая Коса", - "item.simplyswords.mythicmetals_compat.palladium.palladium_halberd": "Палладиевая Алебарда", - - - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_claymore": "Штормиксовый Клеймор", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_cutlass": "Штормиксовая Сабля", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_glaive": "Штормиксовая Глефа", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_katana": "Штормиксовая Катана", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_longsword": "Штормиксовый Длинный меч", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_rapier": "Штормиксовая Рапира", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_sai": "Штормиксовая Сая", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_spear": "Штормиксовое Копьё", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_twinblade": "Штормиксовый Двойной клинок", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_warglaive": "Штормиксовая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_greathammer": "Штормиксовый Большой молот", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_greataxe": "Штормиксовый Большой топор", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_chakram": "Штормиксовый Чакрам", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_scythe": "Штормиксовая Коса", - "item.simplyswords.mythicmetals_compat.stormyx.stormyx_halberd": "Штормиксовая Алебарда", - - - "item.simplyswords.mythicmetals_compat.steel.steel_claymore": "Стальной Клеймор", - "item.simplyswords.mythicmetals_compat.steel.steel_cutlass": "Стальная Сабля", - "item.simplyswords.mythicmetals_compat.steel.steel_glaive": "Стальная Глефа", - "item.simplyswords.mythicmetals_compat.steel.steel_katana": "Стальная Катана", - "item.simplyswords.mythicmetals_compat.steel.steel_longsword": "Стальной Длинный меч", - "item.simplyswords.mythicmetals_compat.steel.steel_rapier": "Стальная Рапира", - "item.simplyswords.mythicmetals_compat.steel.steel_sai": "Стальная Сая", - "item.simplyswords.mythicmetals_compat.steel.steel_spear": "Стальное Копьё", - "item.simplyswords.mythicmetals_compat.steel.steel_twinblade": "Стальной Двойной клинок", - "item.simplyswords.mythicmetals_compat.steel.steel_warglaive": "Стальная Боевая Глефа", - "item.simplyswords.mythicmetals_compat.steel.steel_greathammer": "Стальной Большой молот", - "item.simplyswords.mythicmetals_compat.steel.steel_greataxe": "Стальной Большой топор", - "item.simplyswords.mythicmetals_compat.steel.steel_chakram": "Стальной Чакрам", - "item.simplyswords.mythicmetals_compat.steel.steel_scythe": "Стальная Коса", - "item.simplyswords.mythicmetals_compat.steel.steel_halberd": "Стальная Алебарда", - - - "item.simplyswords.mythicmetals_compat.celestium.celestium_claymore": "Селестиумовый Клеймор", - "item.simplyswords.mythicmetals_compat.celestium.celestium_cutlass": "Селестиумовая Сабля", - "item.simplyswords.mythicmetals_compat.celestium.celestium_glaive": "Селестиумовая Глефа", - "item.simplyswords.mythicmetals_compat.celestium.celestium_katana": "Селестиумовая Катана", - "item.simplyswords.mythicmetals_compat.celestium.celestium_longsword": "Селестиумовый Длинный меч", - "item.simplyswords.mythicmetals_compat.celestium.celestium_rapier": "Селестиумовая Рапира", - "item.simplyswords.mythicmetals_compat.celestium.celestium_sai": "Селестиумовая Сая", - "item.simplyswords.mythicmetals_compat.celestium.celestium_spear": "Селестиумовоё Копьё", - "item.simplyswords.mythicmetals_compat.celestium.celestium_twinblade": "Селестиумовый Двойной клинок", - "item.simplyswords.mythicmetals_compat.celestium.celestium_warglaive": "Селестиумовая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.celestium.celestium_greathammer": "Селестиумовый Большой молот", - "item.simplyswords.mythicmetals_compat.celestium.celestium_greataxe": "Селестиумовый Большой топор", - "item.simplyswords.mythicmetals_compat.celestium.celestium_chakram": "Селестиумовый Чакрам", - "item.simplyswords.mythicmetals_compat.celestium.celestium_scythe": "Селестиумовая Коса", - "item.simplyswords.mythicmetals_compat.celestium.celestium_halberd": "Селестиумовая Алебарда", - - - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_claymore": "Металлургиевый Клеймор", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_cutlass": "Металлургиевая Сабля", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_glaive": "Металлургиевая Глефа", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_katana": "Металлургиевая Катана", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_longsword": "Металлургиевый Длинный меч", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_rapier": "Металлургиевая Рапира", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_sai": "Металлургиевая Сая", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_spear": "Металлургиевое Копьё", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_twinblade": "Металлургиевый Двойной клинок", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_warglaive": "Металлургиевая Боевая Глефа", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_greathammer": "Металлургиевый Большой молот", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_greataxe": "Металлургиевый Большой топор", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_chakram": "Металлургиевый Чакрам", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_scythe": "Металлургиевая Коса", - "item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_halberd": "Металлургиевая Алебарда", - - - "item.simplyswords.mythicmetals_compat.copper.copper_longsword": "Медный Длинный меч", - "item.simplyswords.mythicmetals_compat.durasteel.durasteel_greathammer": "Дюрасталевой Большой молот", - - - "item.simplyswords.gobber_compat.gobber.gobber_claymore": "Gobber Клеймор", - "item.simplyswords.gobber_compat.gobber.gobber_cutlass": "Gobber Сабля", - "item.simplyswords.gobber_compat.gobber.gobber_glaive": "Gobber Глефа", - "item.simplyswords.gobber_compat.gobber.gobber_katana": "Gobber Катана", - "item.simplyswords.gobber_compat.gobber.gobber_longsword": "Gobber Длинный меч", - "item.simplyswords.gobber_compat.gobber.gobber_rapier": "Gobber Рапира", - "item.simplyswords.gobber_compat.gobber.gobber_sai": "Gobber Сая", - "item.simplyswords.gobber_compat.gobber.gobber_spear": "Gobber Копьё", - "item.simplyswords.gobber_compat.gobber.gobber_twinblade": "Gobber Двойной клинок", - "item.simplyswords.gobber_compat.gobber.gobber_warglaive": "Gobber Боевая Глефа", - "item.simplyswords.gobber_compat.gobber.gobber_greathammer": "Gobber Большой молот", - "item.simplyswords.gobber_compat.gobber.gobber_greataxe": "Gobber Большой топор", - "item.simplyswords.gobber_compat.gobber.gobber_chakram": "Gobber Чакрам", - "item.simplyswords.gobber_compat.gobber.gobber_scythe": "Gobber Коса", - - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_claymore": "Nether Клеймор", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_cutlass": "Nether Сабля", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_glaive": "Nether Глефа", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_katana": "Nether Катана", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_longsword": "Nether Длинный меч", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_rapier": "Nether Рапира", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_sai": "Nether Сая", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_spear": "Nether Копьё", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_twinblade": "Nether Двойной клинок", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_warglaive": "Nether Боевая Глефа", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_greathammer": "Nether Большой молот", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_greataxe": "Nether Большой топор", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_chakram": "Nether Чакрам", - "item.simplyswords.gobber_compat.gobber_nether.gobber_nether_scythe": "Nether Коса", - - "item.simplyswords.gobber_compat.gobber_end.gobber_end_claymore": "End Gobber Клеймор", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_cutlass": "End Gobber Сабля", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_glaive": "End Gobber Глефа", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_katana": "End Gobber Катана", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_longsword": "End Gobber Длинный меч", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_rapier": "End Gobber Рапира", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_sai": "End Gobber Сая", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_spear": "End Gobber Копьё", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_twinblade": "End Gobber Двойной клинок", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_warglaive": "End Gobber Боевая Глефа", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_greathammer": "End Gobber Большой молот", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_greataxe": "End Gobber Большой топор", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_chakram": "End Gobber Чакрам", - "item.simplyswords.gobber_compat.gobber_end.gobber_end_scythe": "End Gobber Коса", - - - "itemGroup.simplyswords.simplyswords": "Simply Swords", - "item.simplyswords.awakening": "Awakening LV: %d ", - "item.simplyswords.awakening.exp": "Awakening XP: %d%% ", - "item.simplyswords.awakening.powers": "Awakened Powers:", - "item.simplyswords.greater_runic_power": "Крупная", - "item.simplyswords.runefused_power": "Рунная Сила:", - "item.simplyswords.gem_description": "Может быть вставлен в слот для рун", - "item.simplyswords.gem_description2": "Руна вставляется в Уникальное оружие.", - "item.simplyswords.remnant_description": "Скуйте вместе с Рунической Скрижалью или", - "item.simplyswords.remnant_description2": "Слитком Незерита, чтобы создать руну", - "item.simplyswords.remnant_description3": "Которую можно вставить в уникальное", - "item.simplyswords.remnant_description4": "оружие.", - "item.simplyswords.empty_runic_slot": "[ пустое гнездо для руны ]", - "item.simplyswords.empty_nether_slot": "[ пустое гнездо для адских рун ]", - "item.simplyswords.filled_runic_slot": "[ runefused gem ]", - - "effect.simplyswords.burn": "Пламенный Шар", - "effect.simplyswords.electric": "Зарница", - "effect.simplyswords.freeze": "Заморозка", - "effect.simplyswords.omen": "Знамение", - "effect.simplyswords.watcher": "Смотрящий", - "effect.simplyswords.storm": "Шторм", - "effect.simplyswords.wildfire": "Дикий огонь", - "effect.simplyswords.echo": "Эхо", - "effect.simplyswords.ward": "Вард", - "effect.simplyswords.immolation": "Жертвоприношение", - "effect.simplyswords.onslaught": "Натиск", - - "item.simplyswords.onrightclick": "По Щелчку ПКМ:", - "item.simplyswords.firesworditem.tooltip1": "Уникальный эффект: Пламенный Шар", - "item.simplyswords.firesworditem.tooltip2": "Шанс при попадании извергнуть пламенный шар.", - - "item.simplyswords.bramblesworditem.tooltip1": "Уникальный эффект: Еживика", - "item.simplyswords.bramblesworditem.tooltip2": "Шанс при попадании выпустить облако токсичных", - "item.simplyswords.bramblesworditem.tooltip3": "спор, замедляющих и отравляющих все, что находится поблизости.", - - "item.simplyswords.stormsworditem.tooltip1": "Уникальный эффект: Гроза", - "item.simplyswords.stormsworditem.tooltip2": "Когда идет дождь / мокро: шанс при попадании", - "item.simplyswords.stormsworditem.tooltip3": "обрушить молнию с неба на ваших врагов.", - "item.simplyswords.stormsworditem.tooltip4": "Во время действия заклинания вы получаете сопротивление", - "item.simplyswords.stormsworditem.tooltip5": "и создаете локальную бурю, которая обрушивает молнии", - "item.simplyswords.stormsworditem.tooltip6": "на ближайших врагов.", - - "item.simplyswords.watchersworditem.tooltip1": "Уникальный эффект: Примета", - "item.simplyswords.watchersworditem.tooltip2": "Шанс при попадании заберает жизнь из", - "item.simplyswords.watchersworditem.tooltip3": "цели у которой ниже %d%% HP и дает", - "item.simplyswords.watchersworditem.tooltip4": "поглощение владельцу.", - "item.simplyswords.watchersworditem.tooltip5": "Уникальный эффект: Страж", - "item.simplyswords.watchersworditem.tooltip6": "Шанс при попадании выкачать здоровье", - "item.simplyswords.watchersworditem.tooltip7": "ближайших врагов, исцеляя владельца.", - - "item.simplyswords.plaguesworditem.tooltip1": "Уникальный эффект: Чума", - "item.simplyswords.plaguesworditem.tooltip2": "Шанс при попадании преобразовать положительные эффекты", - "item.simplyswords.plaguesworditem.tooltip3": "в их отрицательный аналог.", - - "item.simplyswords.emberiresworditem.tooltip1": "Уникальный эффект: Гнев Эмбера", - "item.simplyswords.emberiresworditem.tooltip2": "Шанс при попадании окутать владельца", - "item.simplyswords.emberiresworditem.tooltip3": "пламенем, нанося ему урон и придавая силу.", - "item.simplyswords.emberiresworditem.tooltip4": "Поглощайте пламя, теряя силу и", - "item.simplyswords.emberiresworditem.tooltip5": "вызывая огненный шар.", - - "item.simplyswords.volcanicfurysworditem.tooltip1": "Уникальный эффект: Вулканическая Ярость", - "item.simplyswords.volcanicfurysworditem.tooltip2": "Шанс при попадании воспламенить вашу цель", - "item.simplyswords.volcanicfurysworditem.tooltip3": "и отправить ее в полет.", - "item.simplyswords.volcanicfurysworditem.tooltip4": "Направляйте свою ярость, обмениваясь здоровьем, чтобы", - "item.simplyswords.volcanicfurysworditem.tooltip5": "получить сопротивление, вызывая при этом толчки", - "item.simplyswords.volcanicfurysworditem.tooltip6": "которые притягивают врагов к вам.", - "item.simplyswords.volcanicfurysworditem.tooltip7": "Активируйтесь снова, чтобы высвободить свою ярость,", - "item.simplyswords.volcanicfurysworditem.tooltip8": "запуская, воспламеняя и нанося тем больше", - "item.simplyswords.volcanicfurysworditem.tooltip9": "урона, чем длиннее канал.", - - "item.simplyswords.ferocitysworditem.tooltip1": "Уникальный эффект: Свирепость", - "item.simplyswords.ferocitysworditem.tooltip2": "Шанс при попадании увеличить", - "item.simplyswords.ferocitysworditem.tooltip3": "скорость вашей атаки до 15 раз.", - "item.simplyswords.ferocitysworditem.tooltip4": "Потребляйте все складывания, набирая силу,", - "item.simplyswords.ferocitysworditem.tooltip5": "в течение времени, равного количеству", - "item.simplyswords.ferocitysworditem.tooltip6": "потребленных сложений.", - - "item.simplyswords.rendsworditem.tooltip1": "Уникальный эффект: Разрыв Души", - "item.simplyswords.rendsworditem.tooltip2": "Шанс при попадании нанести несколько ослабляющих", - "item.simplyswords.rendsworditem.tooltip3": "эффектов.", - "item.simplyswords.rendsworditem.tooltip4": "Потребляйте все сложения у окружающих врагов,", - "item.simplyswords.rendsworditem.tooltip5": "нанося им урон и исцеляя вас относительно", - "item.simplyswords.rendsworditem.tooltip6": "израсходованных сложений.", - - "item.simplyswords.soulsworditem.tooltip1": "Уникальный эффект: Слияние душ", - "item.simplyswords.soulsworditem.tooltip2": "Шанс при попадании поглотить близлежащие души, усиливая", - "item.simplyswords.soulsworditem.tooltip3": "и замедляя скорость атаки владельца.", - "item.simplyswords.soulsworditem.tooltip4": "Высвобождайте душами, перенося дебафф", - "item.simplyswords.soulsworditem.tooltip5": "скорости атаки на ближайших врагов и", - "item.simplyswords.soulsworditem.tooltip6": "регенерируя владельца.", - - "item.simplyswords.stealsworditem.tooltip1": "Уникальный эффект: Кража Души", - "item.simplyswords.stealsworditem.tooltip2": "Шанс при попадании поглотить душу вашего противника,", - "item.simplyswords.stealsworditem.tooltip3": "ускоряя вас, одновременно замедляя и помечая вашу", - "item.simplyswords.stealsworditem.tooltip4": "цель для смерти.", - "item.simplyswords.stealsworditem.tooltip5": "Если в пределах 3 блоков от бездушной цели, ", - "item.simplyswords.stealsworditem.tooltip6": "верните ее душу и получите невидимость.", - "item.simplyswords.stealsworditem.tooltip7": "Если бездушная цель находится более чем в 3 блоках", - "item.simplyswords.stealsworditem.tooltip8": "от вас, вы притянитесь к цели силой,", - "item.simplyswords.stealsworditem.tooltip9": "ослепляя и нанося ей урон.", - "item.simplyswords.stealsworditem.tooltip10": " ", - - "item.simplyswords.soulpyresworditem.tooltip1": "Уникальный эффект: Нет", - "item.simplyswords.soulpyresworditem.tooltip2": "Спровоцируйте привязывание душ, меняясь местами", - "item.simplyswords.soulpyresworditem.tooltip3": "со своей целью и замораживая ее, одновременно вызывая", - "item.simplyswords.soulpyresworditem.tooltip4": "спешку и сопротивление.", - "item.simplyswords.soulpyresworditem.tooltip5": "Добравшись до места назначения, поджигайте", - "item.simplyswords.soulpyresworditem.tooltip6": "ближайших врагов и подтягивайте их поближе к себе.", - "item.simplyswords.soulpyresworditem.tooltip7": "После %d сек. ваша привязь души разрывается", - "item.simplyswords.soulpyresworditem.tooltip8": "в результате чего вы меняетесь местами со своей целью", - "item.simplyswords.soulpyresworditem.tooltip9": "во второй раз.", - - "item.simplyswords.frostfallsworditem.tooltip1": "Уникальный эффект: Ледяная Ярость", - "item.simplyswords.frostfallsworditem.tooltip2": "Шанс при попадании заковать ближайших врагов в", - "item.simplyswords.frostfallsworditem.tooltip3": "лед, не нанося им никакого урона.", - "item.simplyswords.frostfallsworditem.tooltip4": "После %d сек. лед разбивается вдребезги, нанося %d урона.", - "item.simplyswords.frostfallsworditem.tooltip5": "Заключите себя в лед на %d сек., что сделает вас", - "item.simplyswords.frostfallsworditem.tooltip6": "невосприимчивым к урону и даст вам регенерацию.", - - "item.simplyswords.moltenedgesworditem.tooltip1": "Уникальный эффект: Расплавленный Рёв", - "item.simplyswords.moltenedgesworditem.tooltip2": "Шанс при попадании воспламенить вашего врага или вас самих.", - "item.simplyswords.moltenedgesworditem.tooltip3": "Если мало HP, вместо этого получите регенерацию.", - "item.simplyswords.moltenedgesworditem.tooltip4": "Набирайте силу и скорость относительно недостающих HP.", - "item.simplyswords.moltenedgesworditem.tooltip5": "Издайте мощный рев, отбрасывая назад и", - "item.simplyswords.moltenedgesworditem.tooltip6": "воспламеняя ближайших врагов. Получайте накопление поглощения", - "item.simplyswords.moltenedgesworditem.tooltip7": "и скорости за каждый вражеский удар на %d сек.", - - "item.simplyswords.livyatansworditem.tooltip1": "Уникальный эффект: Ледяной Осколок", - "item.simplyswords.livyatansworditem.tooltip2": "Шанс при попадании заковать ближайших врагов в", - "item.simplyswords.livyatansworditem.tooltip3": "лед, не нанося им никакого урона.", - "item.simplyswords.livyatansworditem.tooltip4": "После %d сек. лед разбивается вдребезги, нанося %d урон.", - "item.simplyswords.livyatansworditem.tooltip5": "Упреждающе разбейте лед, окружающий ваших", - "item.simplyswords.livyatansworditem.tooltip6": "врагов, нанося тем больше урона, чем раньше вы разобьете лед.", - - "item.simplyswords.icewhispersworditem.tooltip1": "Уникальный эффект: Вечная Мерзлота", - "item.simplyswords.icewhispersworditem.tooltip2": "Во время владения получите ледяную ауру, которая наносит", - "item.simplyswords.icewhispersworditem.tooltip3": "урон и замедляет врагов в пределах %d блоков.", - "item.simplyswords.icewhispersworditem.tooltip4": "Откажитесь от своей ледяной ауры и вместо этого вызовите", - "item.simplyswords.icewhispersworditem.tooltip5": "снежную бурю в вашем местоположении, замедляя и нанося", - "item.simplyswords.icewhispersworditem.tooltip6": "увеличенный урон врагам в пределах %d блоков.", - - "item.simplyswords.arcanethystsworditem.tooltip1": "Уникальный эффект: Тайное Нападение", - "item.simplyswords.arcanethystsworditem.tooltip2": "Шанс при попадании получить тайный заряд.", - "item.simplyswords.arcanethystsworditem.tooltip3": "Расходуйте свои тайные заряды, чтобы атаковать", - "item.simplyswords.arcanethystsworditem.tooltip4": "ближайших врагов, усиливаясь с каждым зарядом.", - "item.simplyswords.arcanethystsworditem.tooltip5": "1 Заряд: Поднимает врагов в воздух.", - "item.simplyswords.arcanethystsworditem.tooltip6": "2 Заряд: Наносит урон с течением времени.", - "item.simplyswords.arcanethystsworditem.tooltip7": "3 Заряд: Телепортирует врагов на землю.", - - "item.simplyswords.thunderbrandsworditem.tooltip1": "Уникальный эффект: Громовой Удар", - "item.simplyswords.thunderbrandsworditem.tooltip2": "Шанс при попадании обновить время восстановления способности.", - "item.simplyswords.thunderbrandsworditem.tooltip3": "На мгновение замедлите себя и зарядите свое", - "item.simplyswords.thunderbrandsworditem.tooltip4": "оружие, нанося урон по площади ближайшим врагам.", - "item.simplyswords.thunderbrandsworditem.tooltip5": "После атаки бросайтесь вперед, набирая скорость", - "item.simplyswords.thunderbrandsworditem.tooltip6": "и нанося огромный урон врагам на", - "item.simplyswords.thunderbrandsworditem.tooltip7": "своем пути.", - - "item.simplyswords.stormsedgesworditem.tooltip1": "Уникальный эффект: Штормовой Толчок", - "item.simplyswords.stormsedgesworditem.tooltip2": "Шанс при попадании обновить время восстановления способности.", - "item.simplyswords.stormsedgesworditem.tooltip3": "Бросайтесь вперед, как молния, обретая", - "item.simplyswords.stormsedgesworditem.tooltip4": "мгновенную неуязвимость, а", - "item.simplyswords.stormsedgesworditem.tooltip5": "также сохраняющуюся скорость и спешку.", - - "item.simplyswords.levitationsworditem.tooltip1": "Руническая Сила: Левитация", - "item.simplyswords.uniquesworditem.runefused_power.float": "[ Руна: Левитация ]", - "item.simplyswords.levitationsworditem.tooltip2": "Шанс при попадании нанести эффект", - "item.simplyswords.levitationsworditem.tooltip3": "левитации на цель.", - "item.simplyswords.uniquesworditem.runefused_power.swiftness": "[ Руна: Стремительность ]", - "item.simplyswords.speedsworditem.tooltip1": "Руническая Сила: Стремительность", - "item.simplyswords.speedsworditem.tooltip2": "Шанс при попадании увеличить свою", - "item.simplyswords.speedsworditem.tooltip3": "скорость передвижения на время.", - "item.simplyswords.uniquesworditem.runefused_power.slow": "[ Руна: Медлительность ]", - "item.simplyswords.slownesssworditem.tooltip1": "Руническая Сила: Медлительность", - "item.simplyswords.slownesssworditem.tooltip2": "Шанс замедлителить цель", - "item.simplyswords.slownesssworditem.tooltip3": "на время.", - "item.simplyswords.freezesworditem.tooltip1": "Руническая Сила: Заморозка", - "item.simplyswords.uniquesworditem.runefused_power.freeze": "[ Руна: Заморозка ]", - "item.simplyswords.freezesworditem.tooltip2": "Шанс при попадании охладить или заморозить цель.", - "item.simplyswords.uniquesworditem.runefused_power.wildfire": "[ Руна: Воспламенение ]", - "item.simplyswords.wildfiresworditem.tooltip1": "Руническая Сила: Воспламенение", - "item.simplyswords.wildfiresworditem.tooltip2": "Шанс при попадании воспламенить ближайшие", - "item.simplyswords.wildfiresworditem.tooltip3": "сущности того же типа, что и ваша цель.", - "item.simplyswords.uniquesworditem.runefused_power.zephyr": "[ Руна: Мобильность ]", - "item.simplyswords.zephyrsworditem.tooltip1": "Руническая Сила: Мобильность", - "item.simplyswords.zephyrsworditem.tooltip2": "Шанс получить спешку и скорость", - "item.simplyswords.zephyrsworditem.tooltip3": "при атаке.", - "item.simplyswords.uniquesworditem.runefused_power.shielding": "[ Руна: Экранирование ]", - "item.simplyswords.shieldingsworditem.tooltip1": "Руническая Сила: Экранирование", - "item.simplyswords.shieldingsworditem.tooltip2": "Шанс получить эффект поглощения", - "item.simplyswords.shieldingsworditem.tooltip3": "при ударе.", - "item.simplyswords.uniquesworditem.runefused_power.stoneskin": "[ Руна: Каменная кожа ]", - "item.simplyswords.stoneskinsworditem.tooltip1": "Руническая Сила: Каменная кожа", - "item.simplyswords.stoneskinsworditem.tooltip2": "Шанс получить эффект защиты при ударе", - "item.simplyswords.stoneskinsworditem.tooltip3": "ценой скорости передвижения.", - "item.simplyswords.uniquesworditem.runefused_power.trailblaze": "[ Руна: Первопроходец ] ", - "item.simplyswords.trailblazesworditem.tooltip1": "Руническая Сила: Первопроходец", - "item.simplyswords.trailblazesworditem.tooltip2": "Шанс при попадании получить огнестойкость ", - "item.simplyswords.trailblazesworditem.tooltip3": "и скорость, поджигая себя.", - "item.simplyswords.weakensworditem.tooltip1": "Руническая Сила: Ослабление", - "item.simplyswords.uniquesworditem.runefused_power.weaken": "[ Руна: Ослабление ]", - "item.simplyswords.weakensworditem.tooltip2": "Шанс при ударе наложить слабость", - "item.simplyswords.weakensworditem.tooltip3": "и медлительность на цель.", - "item.simplyswords.unstablesworditem.tooltip1": "Руническая Сила: Нестабильность", - "item.simplyswords.unstablesworditem.tooltip2": "Регулярно дает случайный эффект", - "item.simplyswords.unstablesworditem.tooltip3": "на владельца.", - "item.simplyswords.activedefencesworditem.tooltip1": "Руническая Сила: Активная защита", - "item.simplyswords.activedefencesworditem.tooltip2": "Регулярно выпускает стрелы в ближайших", - "item.simplyswords.activedefencesworditem.tooltip3": "врагов (Требуются стрелы).", - "item.simplyswords.frostwardsworditem.tooltip1": "Руническая Сила: Олединение", - "item.simplyswords.frostwardsworditem.tooltip2": "Регулярно запускает снежки, ухудшающие", - "item.simplyswords.frostwardsworditem.tooltip3": "скорость предвижения противника.", - - "item.simplyswords.momentumsworditem.tooltip1": "Руническая Сила: Мгновение", - "item.simplyswords.uniquesworditem.runefused_power.momentum": "[ Руна: Мгновение ]", - "item.simplyswords.momentumsworditem.tooltip2": "Получите краткий момент сильного", - "item.simplyswords.momentumsworditem.tooltip3": "импульса вперед. ", - "item.simplyswords.imbuedsworditem.tooltip1": "Руническая Сила: Вдохновение", - "item.simplyswords.uniquesworditem.runefused_power.imbued": "[ Руна: Вдохновение ]", - "item.simplyswords.imbuedsworditem.tooltip2": "Шанс при попадании нанести дополнительный", - "item.simplyswords.imbuedsworditem.tooltip3": "магический урон, зависящий от прочности.", - "item.simplyswords.pincushionsworditem.tooltip1": "Руническая Сила: Шипы", - "item.simplyswords.uniquesworditem.runefused_power.pincushion": "[ Руна: Шипы ]", - "item.simplyswords.pincushionsworditem.tooltip2": "Нанесите дополнительный урон за каждую", - "item.simplyswords.pincushionsworditem.tooltip3": "стрелу, застрявшую в вашем теле.", - "item.simplyswords.wardsworditem.tooltip1": "Руническая Сила: Вард", - "item.simplyswords.uniquesworditem.runefused_power.ward": "[ Руна: Вард ]", - "item.simplyswords.wardsworditem.tooltip2": "Принесите в жертву половину вашего текущего HP, чтобы получить", - "item.simplyswords.wardsworditem.tooltip3": "пульсирующее поглощение относительно", - "item.simplyswords.wardsworditem.tooltip4": "оставшегося HP на 6 секунд.", - "item.simplyswords.immolationsworditem.tooltip1": "Руническая Сила: Жертвоприношение", - "item.simplyswords.uniquesworditem.runefused_power.immolation": "[ Руна: Жертвоприношение ]", - "item.simplyswords.immolationsworditem.tooltip2": "Получите ауру Жертвоприношения, которая периодически", - "item.simplyswords.immolationsworditem.tooltip3": "наносит урон вам и ближайшим врагам. Исходящий ", - "item.simplyswords.immolationsworditem.tooltip4": "урон зависит от вашего текущего HP.", - - "item.simplyswords.unidentifiedsworditem.tooltip1": "Руническая Сила: ????", - "item.simplyswords.unidentifiedsworditem.tooltip2": "Нажмите, чтобы узнать силу.", - - "item.simplyswords.uniquesworditem.netherfused_power.echo": "[ Незер-руна: Эхо ]", - "item.simplyswords.uniquesworditem.netherfused_power.echo.description": "Ваше оружие эхом раскачивается, нанося", - "item.simplyswords.uniquesworditem.netherfused_power.echo.description2": "дополнительный урон ", - "item.simplyswords.uniquesworditem.netherfused_power.echo.description3": "после небольшой задержки.", - - "item.simplyswords.uniquesworditem.netherfused_power.berserk": "[ Незер-руна: Берсерк ]", - "item.simplyswords.uniquesworditem.netherfused_power.berserk.description": "Когда у вас значение брони меньше", - "item.simplyswords.uniquesworditem.netherfused_power.berserk.description2": "10, ваши взмахи оружием высасывают ", - "item.simplyswords.uniquesworditem.netherfused_power.berserk.description3": "здоровье из цели.", - - "item.simplyswords.uniquesworditem.netherfused_power.radiance": "[ Незер-руна: Сияние ]", - "item.simplyswords.uniquesworditem.netherfused_power.radiance.description": "При ударе по цели, страдающей", - "item.simplyswords.uniquesworditem.netherfused_power.radiance.description2": "от слабости, на короткое", - "item.simplyswords.uniquesworditem.netherfused_power.radiance.description3": "время получаете эффект жертвоприношение.", - - "item.simplyswords.uniquesworditem.netherfused_power.onslaught": "[ Незер-руна: Натиск ]", - "item.simplyswords.uniquesworditem.netherfused_power.onslaught.description": "При ударе по цели, страдающей", - "item.simplyswords.uniquesworditem.netherfused_power.onslaught.description2": "от замедления, на короткое", - "item.simplyswords.uniquesworditem.netherfused_power.onslaught.description3": "время получаете эффект Натиска.", - "item.simplyswords.uniquesworditem.netherfused_power.onslaught.description4": "(Натиск даёт вам пульсирующий", - "item.simplyswords.uniquesworditem.netherfused_power.onslaught.description5": "эффект спешки, но вызывает", - "item.simplyswords.uniquesworditem.netherfused_power.onslaught.description6": "слабость когда срок действия истекает).", - - "item.simplyswords.uniquesworditem.netherfused_power.nullification": "[ Незер-руна: Нуллификация ]", - "item.simplyswords.uniquesworditem.netherfused_power.nullification.description": "Вызывает Боевой символ при попадании", - "item.simplyswords.uniquesworditem.netherfused_power.nullification.description2": "который периодически очищает", - "item.simplyswords.uniquesworditem.netherfused_power.nullification.description3": "дебаффы с союзных игроков,", - "item.simplyswords.uniquesworditem.netherfused_power.nullification.description4": "так же снимает баффы с", - "item.simplyswords.uniquesworditem.netherfused_power.nullification.description5": "врагов в непосредственной близости от него.", - - "item.simplyswords.common.blacklisteffect": "СПОСОБНОСТЬ ОТКЛЮЧЕНА", - - "entity.simplyswords.battlestandard.name": "%d's Боевой Символ", - - "item.simplyswords.stormbringersworditem.tooltip1": "Уникальный эффект: Отражение удара", - "item.simplyswords.stormbringersworditem.tooltip2": "Сосредоточьте энергию в одной точке вашего", - "item.simplyswords.stormbringersworditem.tooltip3": "клинка, что позволит вам на мгновение блокировать", - "item.simplyswords.stormbringersworditem.tooltip4": "входящие атаки.", - "item.simplyswords.stormbringersworditem.tooltip5": "При удачном тайминге этой способности", - "item.simplyswords.stormbringersworditem.tooltip6": "с вражеским ударом в ближнем бою", - "item.simplyswords.stormbringersworditem.tooltip7": "вы совершите парирование, нанося урон", - "item.simplyswords.stormbringersworditem.tooltip8": "и отбрасывая противника, а также", - "item.simplyswords.stormbringersworditem.tooltip9": "сокращая время действия способности.", - "item.simplyswords.stormbringersworditem.tooltip10": "Последовательное выполнение парирования", - "item.simplyswords.stormbringersworditem.tooltip11": "увеличивает урон способности и ее кулдаун.", - - "item.simplyswords.lichbladesworditem.tooltip1": "Уникальный эффект: Душевная Боль I", - "item.simplyswords.lichbladesworditem.tooltip1.2": "Уникальный эффект: Душевная Боль II", - "item.simplyswords.lichbladesworditem.tooltip1.3": "Уникальный эффект: Душевная Боль III", - "item.simplyswords.lichbladesworditem.tooltip2": "От вас исходят мучительные души,", - "item.simplyswords.lichbladesworditem.tooltip3": "нанося урон всем ближайшим врагам.", - "item.simplyswords.lichbladesworditem.tooltip4": "Прикажите своим душам атаковать,", - "item.simplyswords.lichbladesworditem.tooltip5": "нанося стремительный урон.", - "item.simplyswords.lichbladesworditem.tooltip6": "Шанс вытянуть здоровье.", - "item.simplyswords.lichbladesworditem.tooltip7": "После того как атака стихнет, ваши души", - "item.simplyswords.lichbladesworditem.tooltip8": "вернутся к вам и, достигнув вас,", - "item.simplyswords.lichbladesworditem.tooltip9": "дадут вам Поглощение.", - - "item.simplyswords.shadowmistsworditem.tooltip1": "Уникальный Эффект: Туман теней", - "item.simplyswords.shadowmistsworditem.tooltip2": "Шанс при попадании нанести магический урон,", - "item.simplyswords.shadowmistsworditem.tooltip3": "зависящий от величины брони цели.", - "item.simplyswords.shadowmistsworditem.tooltip4": "Создайте ослепительный теневой туман у своих ног", - "item.simplyswords.shadowmistsworditem.tooltip5": "и сделайте теневой шаг вперед на небольшое расстояние.", - - "item.simplyswords.dormantrelicsworditem.tooltip2": "Кажется, что из него исходит слабая сила.", - "item.simplyswords.poweredrelicsworditem.tooltip2": "Нарастающая сила, кажется, вырывается изнутри.", - - "item.simplyswords.sunfiresworditem.tooltip1": "Уникальный Эффект: Праведный Символ", - "item.simplyswords.sunfiresworditem.tooltip2": "Шанс восстановить здоровье при попадании.", - "item.simplyswords.sunfiresworditem.tooltip3": "Вызывает Праведный боевой символ, который", - "item.simplyswords.sunfiresworditem.tooltip4": "поджигает, наносит урон и замедляет врагов,", - "item.simplyswords.sunfiresworditem.tooltip5": "а также периодически дарит силу и здоровье", - "item.simplyswords.sunfiresworditem.tooltip6": "дружественным игрокам, находящимся рядом.", - - "item.simplyswords.harbingersworditem.tooltip1": "Уникальный Эффект: Символ Бездны", - "item.simplyswords.harbingersworditem.tooltip2": "Шанс при попадании наложить слабость.", - "item.simplyswords.harbingersworditem.tooltip3": "Призывает боевой символ Бездны, который", - "item.simplyswords.harbingersworditem.tooltip4": "притягивает, наносит урон и замедляет врагов,", - "item.simplyswords.harbingersworditem.tooltip5": "а также периодически наделяет спешкой", - "item.simplyswords.harbingersworditem.tooltip6": "дружественных игроков, находящихся поблизости" +"_comment": "Updated by: Heimdallr-1", +"item.simplyswords.iron_cutlass": "Железная абордажная сабля", +"item.simplyswords.gold_cutlass": "Золотая абордажная сабля", +"item.simplyswords.diamond_cutlass": "Алмазная абордажная сабля", +"item.simplyswords.netherite_cutlass": "Незеритовая абордажная сабля", +"item.simplyswords.runic_rapier": "Руническая рапира", +"item.simplyswords.netherite_rapier": "Незеритовая рапира", +"item.simplyswords.diamond_rapier": "Алмазная рапира", +"item.simplyswords.gold_rapier": "Золотая рапира", +"item.simplyswords.iron_rapier": "Железная рапира", +"item.simplyswords.iron_glaive": "Железная глефа", +"item.simplyswords.gold_glaive": "Золотая глефа", +"item.simplyswords.diamond_glaive": "Алмазная глефа", +"item.simplyswords.netherite_glaive": "Незеритовая глефа", +"item.simplyswords.iron_warglaive": "Железная боевой клинок", +"item.simplyswords.gold_warglaive": "Золотой боевой клинок", +"item.simplyswords.diamond_warglaive": "Алмазный боевой клинок", +"item.simplyswords.netherite_warglaive": "Незеритовый боевой клинок", +"item.simplyswords.iron_spear": "Железное копьё", +"item.simplyswords.gold_spear": "Золотое копьё", +"item.simplyswords.diamond_spear": "Алмазное копьё", +"item.simplyswords.netherite_spear": "Незеритовое копьё", +"item.simplyswords.iron_sai": "Железная сай", +"item.simplyswords.diamond_sai": "Алмазная сай", +"item.simplyswords.gold_sai": "Золотая сай", +"item.simplyswords.netherite_sai": "Незеритовая сай", +"item.simplyswords.iron_katana": "Железная катана", +"item.simplyswords.gold_katana": "Золотая катана", +"item.simplyswords.diamond_katana": "Алмазная катана", +"item.simplyswords.netherite_katana": "Незеритовая катана", +"item.simplyswords.runic_cutlass": "Руническая абордажная сабля", +"item.simplyswords.runic_katana": "Руническая катана", +"item.simplyswords.runic_sai": "Руническая сай", +"item.simplyswords.diamond_claymore": "Алмазный клеймор", +"item.simplyswords.netherite_claymore": "Незеритовый клеймор", +"item.simplyswords.runic_claymore": "Рунический клеймор", +"item.simplyswords.watcher_claymore": "Смотритель", +"item.simplyswords.brimstone_claymore": "Серный клеймор", +"item.simplyswords.gold_claymore": "Золотой клеймор", +"item.simplyswords.iron_claymore": "Железный клеймор", +"item.simplyswords.runic_longsword": "Рунический полуторный меч", +"item.simplyswords.watching_warglaive": "Боевой клинок смотрителя", +"item.simplyswords.iron_longsword": "Железный полуторный меч", +"item.simplyswords.gold_longsword": "Золотой полуторный меч", +"item.simplyswords.diamond_longsword": "Алмазный полуторный меч", +"item.simplyswords.netherite_longsword": "Незеритовый полуторный меч", +"item.simplyswords.toxic_longsword": "Полуторный меч чумы", +"item.simplyswords.runic_twinblade": "Рунический парный клинок", +"item.simplyswords.runic_glaive": "Руническая глефа", +"item.simplyswords.runic_spear": "Руническое копьё", +"item.simplyswords.runic_warglaive": "Рунический боевой клинок", +"item.simplyswords.runic_greathammer": "Рунический большой молот", +"item.simplyswords.runic_greataxe": "Рунический большой топор", +"item.simplyswords.iron_twinblade": "Железная парный клинок", +"item.simplyswords.gold_twinblade": "Золотая парный клинок", +"item.simplyswords.diamond_twinblade": "Алмазная парный клинок", +"item.simplyswords.netherite_twinblade": "Незеритовая парный клинок", +"item.simplyswords.iron_greathammer": "Железная большой молот", +"item.simplyswords.gold_greathammer": "Золотая большой молот", +"item.simplyswords.diamond_greathammer": "Алмазная большой молот", +"item.simplyswords.netherite_greathammer": "Незеритовая большой молот", +"item.simplyswords.iron_greataxe": "Железный большой топор", +"item.simplyswords.gold_greataxe": "Золотой большой топор", +"item.simplyswords.diamond_greataxe": "Алмазный большой топор", +"item.simplyswords.netherite_greataxe": "Незеритовый большой топор", +"item.simplyswords.iron_chakram": "Железная чакра", +"item.simplyswords.gold_chakram": "Золотая чакра", +"item.simplyswords.diamond_chakram": "Алмазная чакра", +"item.simplyswords.netherite_chakram": "Незеритовая чакра", +"item.simplyswords.iron_scythe": "Железная коса", +"item.simplyswords.gold_scythe": "Золотая коса", +"item.simplyswords.diamond_scythe": "Алмазная коса", +"item.simplyswords.netherite_scythe": "Незеритовая коса", +"item.simplyswords.runic_chakram": "Руническая чакра", +"item.simplyswords.runic_scythe": "Руническая коса", +"item.simplyswords.iron_halberd": "Железная алебарда", +"item.simplyswords.gold_halberd": "Золотая алебарда", +"item.simplyswords.diamond_halberd": "Алмазная алебарда", +"item.simplyswords.netherite_halberd": "Незеритовая алебарда", +"item.simplyswords.runic_halberd": "Руническая алебарда", +"item.simplyswords.storms_edge": "Клинок Бури", +"item.simplyswords.stormbringer": "Буревестник", +"item.simplyswords.sword_on_a_stick": "Меч на палке", +"item.simplyswords.bramblethorn": "Терновый шип", +"item.simplyswords.magic_estoc": "Зачарованная короткая шпага", +"item.simplyswords.mjolnir": "Мьёльнир", +"item.simplyswords.emberblade": "Янтарный клинок", +"item.simplyswords.hearthflame": "Пламенное сердце", +"item.simplyswords.twisted_blade": "Спиральный клинок", +"item.simplyswords.twilight": "Полумрак", +"item.simplyswords.soulkeeper": "Хранитель душ", +"item.simplyswords.soulstealer": "Похититель душ", +"item.simplyswords.soulrender": "Воздаятель душ", +"item.simplyswords.soulpyre": "Костёр душ", +"item.simplyswords.frostfall": "Морозная гибель", +"item.simplyswords.molten_edge": "Расплавленный клинок", +"item.simplyswords.livyatan": "Левиафан", +"item.simplyswords.icewhisper": "Шепчущий лёд", +"item.simplyswords.arcanethyst": "Миститист", +"item.simplyswords.thunderbrand": "Громовой меч", +"item.simplyswords.slumbering_lichblade": "Дремлющий пьющий клинок", +"item.simplyswords.waking_lichblade": "Бодрствующий пьющий клинок", +"item.simplyswords.awakened_lichblade": "Пробуждённый пьющий клинок", +"item.simplyswords.shadowsting": "Теневое жало", +"item.simplyswords.harbinger": "Предвестник", +"item.simplyswords.sunfire": "Солнечный огонь", +"item.simplyswords.dormant_relic": "Дремлющая реликвия", +"item.simplyswords.tainted_relic": "Омрачённая реликвия", +"item.simplyswords.decaying_relic": "Разлагающаяся реликвия", +"item.simplyswords.righteous_relic": "Благочестивая реликвия", +"item.simplyswords.whisperwind": "Шепчущий ветер", +"item.simplyswords.emberlash": "Янтарная плеть", +"item.simplyswords.waxweaver": "Воскоплёт", +"item.simplyswords.hiveheart": "Сердце улья", +"item.simplyswords.stars_edge": "Клинок звезды", +"item.simplyswords.wickpiercer": "Фитильный пронзатель", +"item.simplyswords.dreadtide": "Прилив ужаса", +"item.simplyswords.tempest": "Вихрь", +"item.simplyswords.flamewind": "Огненный ветер", +"item.simplyswords.ribboncleaver": "Ленточный тесак", +"item.simplyswords.magiscythe": "Магическая коса", +"item.simplyswords.enigma": "Загадка", +"item.simplyswords.magispear": "Магическое копьё", +"item.simplyswords.magiblade": "Магический клинок", +"item.simplyswords.caelestis": "Небесный", + +"item.simplyswords.runic_tablet": "Руническая скрижаль", +"item.simplyswords.runefused_gem": "Наполненный руной самоцвет", +"item.simplyswords.netherfused_gem": "Наполненный Незером самоцвет", +"item.simplyswords.empowered_remnant": "Усиленные остатки", +"item.simplyswords.contained_remnant": "Сдержанные остатки", +"item.simplyswords.tampered_remnant": "Искажённые остатки", + +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_claymore": "Адамантитовый клеймор", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_cutlass": "Адамантитовая абордажная сабля", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_glaive": "Адамантитовая глефа", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_katana": "Адамантитовая катана", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_longsword": "Адамантитовый полуторный меч", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_rapier": "Адамантитовая рапира", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_sai": "Адамантитовый сай", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_spear": "Адамантитовое копьё", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_twinblade": "Адамантитовый парный клинок", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_warglaive": "Адамантитовый боевой клинок", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_greathammer": "Адамантитовый большой молот", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_greataxe": "Адамантитовый большой топор", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_chakram": "Адамантитовый чакра", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_scythe": "Адамантитовая коса", +"item.simplyswords.mythicmetals_compat.adamantite.adamantite_halberd": "Адамантитовый алебарда", + +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_claymore": "Аквариевый клеймор", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_cutlass": "Аквариевая абордажная сабля", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_glaive": "Аквариевая глефа", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_katana": "Аквариевая катана", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_longsword": "Аквариевый полуторный меч", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_rapier": "Аквариевая рапира", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_sai": "Аквариевый сай", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_spear": "Аквариевое копьё", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_twinblade": "Аквариевый парный клинок", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_warglaive": "Аквариевый боевой клинок", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_greathammer": "Аквариевый большой молот", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_greataxe": "Аквариевый большой топор", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_chakram": "Аквариевая чакра", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_scythe": "Аквариевая коса", +"item.simplyswords.mythicmetals_compat.aquarium.aquarium_halberd": "Аквариевая алебарда", + +"item.simplyswords.mythicmetals_compat.banglum.banglum_claymore": "Банглумный клеймор", +"item.simplyswords.mythicmetals_compat.banglum.banglum_cutlass": "Банглумная абордажная сабля", +"item.simplyswords.mythicmetals_compat.banglum.banglum_glaive": "Банглумная глефа", +"item.simplyswords.mythicmetals_compat.banglum.banglum_katana": "Банглумная катана", +"item.simplyswords.mythicmetals_compat.banglum.banglum_longsword": "Банглумный полуторный меч", +"item.simplyswords.mythicmetals_compat.banglum.banglum_rapier": "Банглумная рапира", +"item.simplyswords.mythicmetals_compat.banglum.banglum_sai": "Банглумный сай", +"item.simplyswords.mythicmetals_compat.banglum.banglum_spear": "Банглумное копьё", +"item.simplyswords.mythicmetals_compat.banglum.banglum_twinblade": "Банглумный парный клинок", +"item.simplyswords.mythicmetals_compat.banglum.banglum_warglaive": "Банглумный боевой клинок", +"item.simplyswords.mythicmetals_compat.banglum.banglum_greathammer": "Банглумный большой молот", +"item.simplyswords.mythicmetals_compat.banglum.banglum_greataxe": "Банглумный большой топор", +"item.simplyswords.mythicmetals_compat.banglum.banglum_chakram": "Банглумная чакра", +"item.simplyswords.mythicmetals_compat.banglum.banglum_scythe": "Банглумная коса", +"item.simplyswords.mythicmetals_compat.banglum.banglum_halberd": "Банглумная алебарда", + +"item.simplyswords.mythicmetals_compat.carmot.carmot_claymore": "Кармотовый клеймор", +"item.simplyswords.mythicmetals_compat.carmot.carmot_cutlass": "Кармотовый абордажная сабля", +"item.simplyswords.mythicmetals_compat.carmot.carmot_glaive": "Кармотовый глефа", +"item.simplyswords.mythicmetals_compat.carmot.carmot_katana": "Кармотовый катана", +"item.simplyswords.mythicmetals_compat.carmot.carmot_longsword": "Кармотовый полуторный меч", +"item.simplyswords.mythicmetals_compat.carmot.carmot_rapier": "Кармотовый рапира", +"item.simplyswords.mythicmetals_compat.carmot.carmot_sai": "Кармотовый сай", +"item.simplyswords.mythicmetals_compat.carmot.carmot_spear": "Кармотовый копьё", +"item.simplyswords.mythicmetals_compat.carmot.carmot_twinblade": "Кармотовый парный клинок", +"item.simplyswords.mythicmetals_compat.carmot.carmot_warglaive": "Кармотовый боевой клинок", +"item.simplyswords.mythicmetals_compat.carmot.carmot_greathammer": "Кармотовый большой молот", +"item.simplyswords.mythicmetals_compat.carmot.carmot_greataxe": "Кармотовый большой топор", +"item.simplyswords.mythicmetals_compat.carmot.carmot_chakram": "Кармотовый чакра", +"item.simplyswords.mythicmetals_compat.carmot.carmot_scythe": "Кармотовый коса", +"item.simplyswords.mythicmetals_compat.carmot.carmot_halberd": "Кармотовый алебарда", + +"item.simplyswords.mythicmetals_compat.kyber.kyber_claymore": "Кайберовый клеймор", +"item.simplyswords.mythicmetals_compat.kyber.kyber_cutlass": "Кайберовая абордажная сабля", +"item.simplyswords.mythicmetals_compat.kyber.kyber_glaive": "Кайберовая глефа", +"item.simplyswords.mythicmetals_compat.kyber.kyber_katana": "Кайберовая катана", +"item.simplyswords.mythicmetals_compat.kyber.kyber_longsword": "Кайберовая полуторный меч", +"item.simplyswords.mythicmetals_compat.kyber.kyber_rapier": "Кайберовая рапира", +"item.simplyswords.mythicmetals_compat.kyber.kyber_sai": "Кайберовый сай", +"item.simplyswords.mythicmetals_compat.kyber.kyber_spear": "Кайберовое копьё", +"item.simplyswords.mythicmetals_compat.kyber.kyber_twinblade": "Кайберовый парный клинок", +"item.simplyswords.mythicmetals_compat.kyber.kyber_warglaive": "Кайберовый боевой клинок", +"item.simplyswords.mythicmetals_compat.kyber.kyber_greathammer": "Кайберовый большой молот", +"item.simplyswords.mythicmetals_compat.kyber.kyber_greataxe": "Кайберовый большой топор", +"item.simplyswords.mythicmetals_compat.kyber.kyber_chakram": "Кайберовая чакра", +"item.simplyswords.mythicmetals_compat.kyber.kyber_scythe": "Кайберовая коса", +"item.simplyswords.mythicmetals_compat.kyber.kyber_halberd": "Кайберовая алебарда", + +"item.simplyswords.mythicmetals_compat.mythril.mythril_claymore": "Мифрильный клеймор", +"item.simplyswords.mythicmetals_compat.mythril.mythril_cutlass": "Мифрильная абордажная сабля", +"item.simplyswords.mythicmetals_compat.mythril.mythril_glaive": "Мифрильная глефа", +"item.simplyswords.mythicmetals_compat.mythril.mythril_katana": "Мифрильная катана", +"item.simplyswords.mythicmetals_compat.mythril.mythril_longsword": "Мифрильный полуторный меч", +"item.simplyswords.mythicmetals_compat.mythril.mythril_rapier": "Мифрильная рапира", +"item.simplyswords.mythicmetals_compat.mythril.mythril_sai": "Мифрильная сай", +"item.simplyswords.mythicmetals_compat.mythril.mythril_spear": "Мифрильное копьё", +"item.simplyswords.mythicmetals_compat.mythril.mythril_twinblade": "Мифрильный парный клинок", +"item.simplyswords.mythicmetals_compat.mythril.mythril_warglaive": "Мифрильный боевой клинок", +"item.simplyswords.mythicmetals_compat.mythril.mythril_greathammer": "Мифрильный большой молот", +"item.simplyswords.mythicmetals_compat.mythril.mythril_greataxe": "Мифрильный большой топор", +"item.simplyswords.mythicmetals_compat.mythril.mythril_chakram": "Мифрильная чакра", +"item.simplyswords.mythicmetals_compat.mythril.mythril_scythe": "Мифрильная коса", +"item.simplyswords.mythicmetals_compat.mythril.mythril_halberd": "Мифрильная алебарда", + +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_claymore": "Орихалковый клеймор", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_cutlass": "Орихалковая абордажная сабля", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_glaive": "Орихалковая глефа", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_katana": "Орихалковая катана", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_longsword": "Орихалковый полуторный меч", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_rapier": "Орихалковая рапира", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_sai": "Орихалковый сай", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_spear": "Орихалковое копьё", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_twinblade": "Орихалковый парный клинок", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_warglaive": "Орихалковый боевой клинок", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_greathammer": "Орихалковый большой молот", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_greataxe": "Орихалковый большой топор", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_chakram": "Орихалковая чакра", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_scythe": "Орихалковая коса", +"item.simplyswords.mythicmetals_compat.orichalcum.orichalcum_halberd": "Орихалковая алебарда", + +"item.simplyswords.mythicmetals_compat.osmium.osmium_claymore": "Осмиевый клеймор", +"item.simplyswords.mythicmetals_compat.osmium.osmium_cutlass": "Осмиевая абордажная сабля", +"item.simplyswords.mythicmetals_compat.osmium.osmium_glaive": "Осмиевая глефа", +"item.simplyswords.mythicmetals_compat.osmium.osmium_katana": "Осмиевая катана", +"item.simplyswords.mythicmetals_compat.osmium.osmium_longsword": "Осмиевый полуторный меч", +"item.simplyswords.mythicmetals_compat.osmium.osmium_rapier": "Осмиевая рапира", +"item.simplyswords.mythicmetals_compat.osmium.osmium_sai": "Осмиевый сай", +"item.simplyswords.mythicmetals_compat.osmium.osmium_spear": "Осмиевое копьё", +"item.simplyswords.mythicmetals_compat.osmium.osmium_twinblade": "Осмиевый парный клинок", +"item.simplyswords.mythicmetals_compat.osmium.osmium_warglaive": "Осмиевый боевой клинок", +"item.simplyswords.mythicmetals_compat.osmium.osmium_greathammer": "Осмиевый большой молот", +"item.simplyswords.mythicmetals_compat.osmium.osmium_greataxe": "Осмиевый большой топор", +"item.simplyswords.mythicmetals_compat.osmium.osmium_chakram": "Осмиевая чакра", +"item.simplyswords.mythicmetals_compat.osmium.osmium_scythe": "Осмиевая коса", +"item.simplyswords.mythicmetals_compat.osmium.osmium_halberd": "Осмиевая алебарда", + +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_claymore": "Прометиевый клеймор", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_cutlass": "Прометиевая абордажная сабля", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_glaive": "Прометиевая глефа", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_katana": "Прометиевая катана", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_longsword": "Прометиевый полуторный меч", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_rapier": "Прометиевая рапира", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_sai": "Прометиевый сай", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_spear": "Прометиевое копьё", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_twinblade": "Прометиевый парный клинок", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_warglaive": "Прометиевый боевой клинок", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_greathammer": "Прометиевый большой молот", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_greataxe": "Прометиевый большой топор", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_chakram": "Прометиевая чакра", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_scythe": "Прометиевая коса", +"item.simplyswords.mythicmetals_compat.prometheum.prometheum_halberd": "Прометиевая алебарда", + +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_claymore": "Квадрилловый клеймор", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_cutlass": "Квадрилловая абордажная сабля", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_glaive": "Квадрилловая глефа", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_katana": "Квадрилловая катана", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_longsword": "Квадрилловый полуторный меч", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_rapier": "Квадрилловая рапира", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_sai": "Квадрилловый сай", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_spear": "Квадрилловое копьё", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_twinblade": "Квадрилловый парный клинок", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_warglaive": "Квадрилловый боевой клинок", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_greathammer": "Квадрилловый большой молот", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_greataxe": "Квадрилловый большой топор", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_chakram": "Квадрилловая чакра", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_scythe": "Квадрилловая коса", +"item.simplyswords.mythicmetals_compat.quadrillum.quadrillum_halberd": "Квадрилловая алебарда", + +"item.simplyswords.mythicmetals_compat.runite.runite_claymore": "Рунитовый клеймор", +"item.simplyswords.mythicmetals_compat.runite.runite_cutlass": "Рунитовая абордажная сабля", +"item.simplyswords.mythicmetals_compat.runite.runite_glaive": "Рунитовая глефа", +"item.simplyswords.mythicmetals_compat.runite.runite_katana": "Рунитовая катана", +"item.simplyswords.mythicmetals_compat.runite.runite_longsword": "Рунитовый полуторный меч", +"item.simplyswords.mythicmetals_compat.runite.runite_rapier": "Рунитовая рапира", +"item.simplyswords.mythicmetals_compat.runite.runite_sai": "Рунитовый сай", +"item.simplyswords.mythicmetals_compat.runite.runite_spear": "Рунитовое копьё", +"item.simplyswords.mythicmetals_compat.runite.runite_twinblade": "Рунитовый парный клинок", +"item.simplyswords.mythicmetals_compat.runite.runite_warglaive": "Рунитовый боевой клинок", +"item.simplyswords.mythicmetals_compat.runite.runite_greathammer": "Рунитовый большой молот", +"item.simplyswords.mythicmetals_compat.runite.runite_greataxe": "Рунитовый большой топор", +"item.simplyswords.mythicmetals_compat.runite.runite_chakram": "Рунитовая чакра", +"item.simplyswords.mythicmetals_compat.runite.runite_scythe": "Рунитовая коса", +"item.simplyswords.mythicmetals_compat.runite.runite_halberd": "Рунитовая алебарда", + +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_claymore": "Клеймор из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_cutlass": "Абордажная сабля из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_glaive": "Глефа из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_katana": "Катана из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_longsword": "Полуторный меч из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_rapier": "Рапира из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_sai": "Сай из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_spear": "Копьё из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_twinblade": "Парный клинок из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_warglaive": "Боевой клинок из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_greathammer": "Большой молот из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_greataxe": "Большой топор из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_chakram": "Чакра из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_scythe": "Коса из звёздной платины", +"item.simplyswords.mythicmetals_compat.star_platinum.star_platinum_halberd": "Алебарда из звёздной платины", + +"item.simplyswords.mythicmetals_compat.bronze.bronze_claymore": "Бронзовый клеймор", +"item.simplyswords.mythicmetals_compat.bronze.bronze_cutlass": "Бронзовая абордажная сабля", +"item.simplyswords.mythicmetals_compat.bronze.bronze_glaive": "Бронзовая глефа", +"item.simplyswords.mythicmetals_compat.bronze.bronze_katana": "Бронзовая катана", +"item.simplyswords.mythicmetals_compat.bronze.bronze_longsword": "Бронзовый полуторный меч", +"item.simplyswords.mythicmetals_compat.bronze.bronze_rapier": "Бронзовая рапира", +"item.simplyswords.mythicmetals_compat.bronze.bronze_sai": "Бронзовый сай", +"item.simplyswords.mythicmetals_compat.bronze.bronze_spear": "Бронзовое копьё", +"item.simplyswords.mythicmetals_compat.bronze.bronze_twinblade": "Бронзовый парный клинок", +"item.simplyswords.mythicmetals_compat.bronze.bronze_warglaive": "Бронзовый боевой клинок", +"item.simplyswords.mythicmetals_compat.bronze.bronze_greathammer": "Бронзовый большой молот", +"item.simplyswords.mythicmetals_compat.bronze.bronze_greataxe": "Бронзовый большой топор", +"item.simplyswords.mythicmetals_compat.bronze.bronze_chakram": "Бронзовая чакра", +"item.simplyswords.mythicmetals_compat.bronze.bronze_scythe": "Бронзовая коса", +"item.simplyswords.mythicmetals_compat.bronze.bronze_halberd": "Бронзовая алебарда", + +"item.simplyswords.mythicmetals_compat.palladium.palladium_claymore": "Палладиевый клеймор", +"item.simplyswords.mythicmetals_compat.palladium.palladium_cutlass": "Палладиевый абордажная сабля", +"item.simplyswords.mythicmetals_compat.palladium.palladium_glaive": "Палладиевый глефа", +"item.simplyswords.mythicmetals_compat.palladium.palladium_katana": "Палладиевый катана", +"item.simplyswords.mythicmetals_compat.palladium.palladium_longsword": "Палладиевый полуторный меч", +"item.simplyswords.mythicmetals_compat.palladium.palladium_rapier": "Палладиевый рапира", +"item.simplyswords.mythicmetals_compat.palladium.palladium_sai": "Палладиевый сай", +"item.simplyswords.mythicmetals_compat.palladium.palladium_spear": "Палладиевый копьё", +"item.simplyswords.mythicmetals_compat.palladium.palladium_twinblade": "Палладиевый парный клинок", +"item.simplyswords.mythicmetals_compat.palladium.palladium_warglaive": "Палладиевый боевой клинок", +"item.simplyswords.mythicmetals_compat.palladium.palladium_greathammer": "Палладиевый большой молот", +"item.simplyswords.mythicmetals_compat.palladium.palladium_greataxe": "Палладиевый большой топор", +"item.simplyswords.mythicmetals_compat.palladium.palladium_chakram": "Палладиевый чакра", +"item.simplyswords.mythicmetals_compat.palladium.palladium_scythe": "Палладиевый коса", +"item.simplyswords.mythicmetals_compat.palladium.palladium_halberd": "Палладиевый алебарда", + +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_claymore": "Штормикс-клеймор", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_cutlass": "Штормикс-абордажная сабля", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_glaive": "Штормикс-глефа", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_katana": "Штормикс-катана", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_longsword": "Штормикс-полуторный меч", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_rapier": "Штормикс-рапира", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_sai": "Штормикс-сай", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_spear": "Штормикс-копьё", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_twinblade": "Штормикс-парный клинок", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_warglaive": "Штормикс-боевой клинок", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_greathammer": "Штормикс-большой молот", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_greataxe": "Штормикс-большой топор", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_chakram": "Штормикс-чакра", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_scythe": "Штормикс-коса", +"item.simplyswords.mythicmetals_compat.stormyx.stormyx_halberd": "Штормикс-алебарда", + +"item.simplyswords.mythicmetals_compat.steel.steel_claymore": "Стальной клеймор", +"item.simplyswords.mythicmetals_compat.steel.steel_cutlass": "Стальная абордажная сабля", +"item.simplyswords.mythicmetals_compat.steel.steel_glaive": "Стальная глефа", +"item.simplyswords.mythicmetals_compat.steel.steel_katana": "Стальная катана", +"item.simplyswords.mythicmetals_compat.steel.steel_longsword": "Стальной полуторный меч", +"item.simplyswords.mythicmetals_compat.steel.steel_rapier": "Стальная рапира", +"item.simplyswords.mythicmetals_compat.steel.steel_sai": "Стальной сай", +"item.simplyswords.mythicmetals_compat.steel.steel_spear": "Стальное копьё", +"item.simplyswords.mythicmetals_compat.steel.steel_twinblade": "Стальной парный клинок", +"item.simplyswords.mythicmetals_compat.steel.steel_warglaive": "Стальной боевой клинок", +"item.simplyswords.mythicmetals_compat.steel.steel_greathammer": "Стальной большой молот", +"item.simplyswords.mythicmetals_compat.steel.steel_greataxe": "Стальной большой топор", +"item.simplyswords.mythicmetals_compat.steel.steel_chakram": "Стальная чакра", +"item.simplyswords.mythicmetals_compat.steel.steel_scythe": "Стальная коса", +"item.simplyswords.mythicmetals_compat.steel.steel_halberd": "Стальная алебарда", + +"item.simplyswords.mythicmetals_compat.celestium.celestium_claymore": "Целестиевый клеймор", +"item.simplyswords.mythicmetals_compat.celestium.celestium_cutlass": "Целестиевая абордажная сабля", +"item.simplyswords.mythicmetals_compat.celestium.celestium_glaive": "Целестиевая глефа", +"item.simplyswords.mythicmetals_compat.celestium.celestium_katana": "Целестиевая катана", +"item.simplyswords.mythicmetals_compat.celestium.celestium_longsword": "Целестиевый полуторный меч", +"item.simplyswords.mythicmetals_compat.celestium.celestium_rapier": "Целестиевая рапира", +"item.simplyswords.mythicmetals_compat.celestium.celestium_sai": "Целестиевый сай", +"item.simplyswords.mythicmetals_compat.celestium.celestium_spear": "Целестиевое копьё", +"item.simplyswords.mythicmetals_compat.celestium.celestium_twinblade": "Целестиевый парный клинок", +"item.simplyswords.mythicmetals_compat.celestium.celestium_warglaive": "Целестиевый боевой клинок", +"item.simplyswords.mythicmetals_compat.celestium.celestium_greathammer": "Целестиевый большой молот", +"item.simplyswords.mythicmetals_compat.celestium.celestium_greataxe": "Целестиевый большой топор", +"item.simplyswords.mythicmetals_compat.celestium.celestium_chakram": "Целестиевая чакра", +"item.simplyswords.mythicmetals_compat.celestium.celestium_scythe": "Целестиевая коса", +"item.simplyswords.mythicmetals_compat.celestium.celestium_halberd": "Целестиевая алебарда", + +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_claymore": "Металлургиевый клеймор", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_cutlass": "Металлургиевая абордажная сабля", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_glaive": "Металлургиевая глефа", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_katana": "Металлургиевая катана", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_longsword": "Металлургиевый полуторный меч", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_rapier": "Металлургиевая рапира", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_sai": "Металлургиевый сай", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_spear": "Металлургиевое копьё", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_twinblade": "Металлургиевый парный клинок", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_warglaive": "Металлургиевый боевой клинок", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_greathammer": "Металлургиевый большой молот", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_greataxe": "Металлургиевый большой топор", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_chakram": "Металлургиевая чакра", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_scythe": "Металлургиевая коса", +"item.simplyswords.mythicmetals_compat.metallurgium.metallurgium_halberd": "Металлургиевая алебарда", + +"item.simplyswords.mythicmetals_compat.copper.copper_longsword": "Медный полуторный меч", +"item.simplyswords.mythicmetals_compat.durasteel.durasteel_greathammer": "Дюрастальной большой молот", + +"item.simplyswords.gobber_compat.gobber.gobber_claymore": "Клеймор Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_cutlass": "Сабля Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_glaive": "Глефа Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_katana": "Катана Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_longsword": "Меч Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_rapier": "Рапира Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_sai": "Сай Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_spear": "Копьё Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_twinblade": "Парный клинок Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_warglaive": "Боевой клинок Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_greathammer": "Большой молот", +"item.simplyswords.gobber_compat.gobber.gobber_greataxe": "Большой топор Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_chakram": "Чакра Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_scythe": "Коса Гоббера", +"item.simplyswords.gobber_compat.gobber.gobber_halberd": "Алебарда Гоббера", + +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_claymore": "Незерский клеймор", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_cutlass": "Незерский абордажная сабля", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_glaive": "Незерский глефа", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_katana": "Незерский катана", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_longsword": "Незерский полуторный меч", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_rapier": "Незерский рапира", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_sai": "Незерский сай", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_spear": "Незерский копьё", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_twinblade": "Незерский парный клинок", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_warglaive": "Незерский боевой клинок", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_greathammer": "Незерский большой молот", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_greataxe": "Незерский большой топор", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_chakram": "Незерский чакра", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_scythe": "Незерский коса", +"item.simplyswords.gobber_compat.gobber_nether.gobber_nether_halberd": "Незерский алебарда", + +"item.simplyswords.gobber_compat.gobber_end.gobber_end_claymore": "Клеймор Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_cutlass": "Абордажная сабля", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_glaive": "Глефа Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_katana": "Катана Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_longsword": "Полуторный меч Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_rapier": "Рапира Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_sai": "Сай Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_spear": "Копьё Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_twinblade": "Парный клинок Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_warglaive": "Боевой клинок Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_greathammer": "Большой молот Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_greataxe": "Большой топор Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_chakram": "Чакра Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_scythe": "Коса Гоббера Энда", +"item.simplyswords.gobber_compat.gobber_end.gobber_end_halberd": "Алебарда Гоббера Энда", + +"itemGroup.simplyswords.simplyswords": "Simply Swords", +"item.simplyswords.awakening": "Уровень пробуждения: %d", +"item.simplyswords.awakening.exp": "Опыт пробуждения: %d%%", +"item.simplyswords.awakening.powers": "Пробуждённые силы:", +"item.simplyswords.greater_runic_power": "Искусный", +"item.simplyswords.runefused_power": "Талант, наполненный руной:", +"item.simplyswords.gem_description": "Может быть вставлен на уникальное оружие", +"item.simplyswords.gem_description2": "в соответствующий слот для самоцвета.", +"item.simplyswords.remnant_description": "Создайте при помощи «Рунической скрижали»", +"item.simplyswords.remnant_description2": "или «Незеритового слитка» для", +"item.simplyswords.remnant_description3": "создания самоцвета, помещаемого", +"item.simplyswords.remnant_description4": "в уникальные оружия.", +"item.simplyswords.empty_runic_slot": "[ пустое гнездо для руны ]", +"item.simplyswords.empty_nether_slot": "[ пустое незерское гнездо ]", +"item.simplyswords.filled_runic_slot": "[ наполненный рунами самоцвет ]", +"item.simplyswords.contained_remnant_description": "Стабилизирует и сдерживает энергию,", +"item.simplyswords.contained_remnant_description2": "исходящую из остатков.", +"item.simplyswords.contained_remnant_description3": "Похоже, находясь рядом с Вами", +"item.simplyswords.contained_remnant_description4": "его форма меняется.", +"item.simplyswords.contained_remnant_description5": "Держа этот предмет в своём инвентаре,", +"item.simplyswords.contained_remnant_description6": "можете получить дополнительные не очевидные знания.", +"item.simplyswords.contained_remnant_description7": "Будучи исследуя Энд, сохраните это", +"item.simplyswords.contained_remnant_description8": "в своём инвентаре подле", +"item.simplyswords.contained_remnant_description9": "Рунической скрижали.", +"item.simplyswords.contained_remnant.event": "Похоже, остаток в Вашем инвентаре деформировался.", +"item.simplyswords.contained_remnant.event2": "Как это ни странно, остаток в Вашем инвентаре проявляет себя.", +"item.simplyswords.tampered_remnant_description3": "Кажется, он был", +"item.simplyswords.tampered_remnant_description4": "кем-то испорчен...", +"item.simplyswords.decayingrelicsworditem.tooltip1": "Будучи исследуя глубочайшее место,", +"item.simplyswords.decayingrelicsworditem.tooltip2": "тёмные глубины Наземного мира,", +"item.simplyswords.decayingrelicsworditem.tooltip3": "сохраните это в своём инвентаре.", +"item.simplyswords.magicythe.event": "Ваша Разлагающаяся реликвия начинает издавать звуки.", +"item.simplyswords.magicythe.event2": "Ваша Разлагающаяся реликвия, по всей видимости, реагирует на эту область.", +"item.simplyswords.magiblade.event": "Ваша Разлагающаяся реликвия, кажется, вибрирует.", +"item.simplyswords.magiblade.event2": "Ваша Разлагающаяся реликвия, похоже, тянется к блоку, что находится позади Вас.", +"item.simplyswords.magispear.event": "Похоже, что-то воздействует на Вашу Разлагающуюся реликвию.", +"item.simplyswords.magispear.event2": "Ваша Разлагающаяся реликвия, кажется, реагирует на темноту.", + +"effect.simplyswords.freeze": "Заморозка", +"effect.simplyswords.omen": "Предвестие", +"effect.simplyswords.watcher": "Ангел-хранитель", +"effect.simplyswords.storm": "Гроза", +"effect.simplyswords.wildfire": "Дикий огонь", +"effect.simplyswords.echo": "Эхо", +"effect.simplyswords.ward": "Оберег", +"effect.simplyswords.immolation": "Обжигающий жар", +"effect.simplyswords.onslaught": "Натиск", +"effect.simplyswords.smouldering": "Тление", +"effect.simplyswords.frenzy": "Неистовство", +"effect.simplyswords.voidcloak": "Плащ пустоты", +"effect.simplyswords.void_assault": "Натиск пустоты", +"effect.simplyswords.voidhunger": "Голод пустоты", +"effect.simplyswords.fire_vortex": "Огненный вихрь", +"effect.simplyswords.frost_vortex": "Ледяной вихрь", +"effect.simplyswords.elemental_vortex": "Стихийный вихрь", +"effect.simplyswords.flameseed": "Огненное семя", +"effect.simplyswords.ribbonwrath": "Ленточная ярость", +"effect.simplyswords.ribboncleave": "Ленточный тесак", +"effect.simplyswords.resilience": "Стойкость", +"effect.simplyswords.battle_fatigue": "Боевой психоз", +"effect.simplyswords.pain": "Боль", +"effect.simplyswords.spore_swarm": "Спороносное скопище", +"effect.simplyswords.magistorm": "Магическая гроза", +"effect.simplyswords.magislam": "Магический удар", +"effect.simplyswords.astral_shift": "Астральная изворотливость", +"effect.simplyswords.fatal_flicker": "Смертоносная вспышка", + +"item.simplyswords.onrightclick": "По нажатию ПКМ: ", +"item.simplyswords.onrightclickheld": "Удерживание ПКМ: ", + +"item.simplyswords.firesworditem.tooltip1": "Уникальный эффект: Сера", +"item.simplyswords.firesworditem.tooltip2": "Шанс изрыгнуть взрывную серу при ударе.", + +"item.simplyswords.bramblesworditem.tooltip1": "Уникальный эффект: Терновый шип", +"item.simplyswords.bramblesworditem.tooltip2": "Шанс при ударе высвободить массу ядовитых", +"item.simplyswords.bramblesworditem.tooltip3": "спор, кружащих вокруг Вас и всё сильнее", +"item.simplyswords.bramblesworditem.tooltip4": "наносящих близлежащим врагам смертоносные", +"item.simplyswords.bramblesworditem.tooltip5": "эффекты. Споры продолжают действовать,", +"item.simplyswords.bramblesworditem.tooltip6": "пока их цель находится в зоне их влияния.", +"item.simplyswords.bramblesworditem.tooltip7": "Даже после смены оружия споры остаются", +"item.simplyswords.bramblesworditem.tooltip8": "активными, хоть и с меньшей эффективностью.", + +"item.simplyswords.stormsworditem.tooltip1": "Уникальный эффект: Шторм", +"item.simplyswords.stormsworditem.tooltip2": "Во время дождя или нахождения в воде: шанс при ударе", +"item.simplyswords.stormsworditem.tooltip3": "низвести с неба грозу, поражающую врагов.", +"item.simplyswords.stormsworditem.tooltip4": "Во время направления владелец получает сопротивление", +"item.simplyswords.stormsworditem.tooltip5": "и создаёт локализированный шторм, обрушивающий", +"item.simplyswords.stormsworditem.tooltip6": "молнии на противников поблизости.", + +"item.simplyswords.watchersworditem.tooltip1": "Уникальный эффект: Предвестие", +"item.simplyswords.watchersworditem.tooltip2": "Шанс при ударе лишить жизнь цели,", +"item.simplyswords.watchersworditem.tooltip3": "менее %d%% Здоровья и передать", +"item.simplyswords.watchersworditem.tooltip4": "часть поглощённого здоровья владельцу.", +"item.simplyswords.watchersworditem.tooltip5": "Уникальный эффект: Ангел-хранитель", +"item.simplyswords.watchersworditem.tooltip6": "Шанс при ударе поглотить здоровье близлежащих", +"item.simplyswords.watchersworditem.tooltip7": "врагов, излечивая владельца при каждом ударе.", + +"item.simplyswords.plaguesworditem.tooltip1": "Уникальный эффект: Чума", +"item.simplyswords.plaguesworditem.tooltip2": "Шанс при ударе преобразовать", +"item.simplyswords.plaguesworditem.tooltip3": "усиления в их пагубный аналог.", + +"item.simplyswords.emberiresworditem.tooltip1": "Уникальный эффект: Тлеющая ярость", +"item.simplyswords.emberiresworditem.tooltip2": "Сконцентрируйте энергию в клинке.", +"item.simplyswords.emberiresworditem.tooltip3": "После отпускания энергии выпустите", +"item.simplyswords.emberiresworditem.tooltip4": "раскалённую шрапнель в самую ближайшую", +"item.simplyswords.emberiresworditem.tooltip5": "цель перед Вами, нанося ей усиленный урон", +"item.simplyswords.emberiresworditem.tooltip6": "во время долгого направления. Если Вы", +"item.simplyswords.emberiresworditem.tooltip7": "отпустите энергию в последний момент будет", +"item.simplyswords.emberiresworditem.tooltip8": "выпущена дополнительная. часть шрапнели.", +"item.simplyswords.emberiresworditem.tooltip9": "При отпускании шрапнели есть шанс,", +"item.simplyswords.emberiresworditem.tooltip10": "относительного времени направления,", +"item.simplyswords.emberiresworditem.tooltip11": "получить эффекты: «Скорость», «Спешку» и «Силу».", + +"item.simplyswords.volcanicfurysworditem.tooltip1": "Уникальный эффект: Бурный пыл", +"item.simplyswords.volcanicfurysworditem.tooltip2": "Шанс поджечь и отбросить своего врага", +"item.simplyswords.volcanicfurysworditem.tooltip3": "при ударе. Направьте ярость, обменивая", +"item.simplyswords.volcanicfurysworditem.tooltip4": "здоровье на сопротивление, вызывая", +"item.simplyswords.volcanicfurysworditem.tooltip5": "землетрясение, которое потрясает противников", +"item.simplyswords.volcanicfurysworditem.tooltip6": "перед Вами. Завершив направление,", +"item.simplyswords.volcanicfurysworditem.tooltip7": "высвободите ярость, нанося значительный", +"item.simplyswords.volcanicfurysworditem.tooltip8": "урон поджигая врагов и швыряя их", +"item.simplyswords.volcanicfurysworditem.tooltip9": "при долгом направлении.", + +"item.simplyswords.ferocitysworditem.tooltip1": "Уникальный эффект: Свирепость", +"item.simplyswords.ferocitysworditem.tooltip2": "Шанс при ударе увеличить свою скорость", +"item.simplyswords.ferocitysworditem.tooltip3": "атаки. Эффект суммируется до 15 раз.", +"item.simplyswords.ferocitysworditem.tooltip4": "Потратив всё суммирование (заряды) Вы", +"item.simplyswords.ferocitysworditem.tooltip5": "получите силу на длительность, равную", +"item.simplyswords.ferocitysworditem.tooltip6": "числу потраченных суммирования (зарядов).", + +"item.simplyswords.rendsworditem.tooltip1": "Уникальный эффект: Раздирание души", +"item.simplyswords.rendsworditem.tooltip2": "Шанс при ударе наложить суммирующие", +"item.simplyswords.rendsworditem.tooltip3": "ослабляющие эффекты на врага.", +"item.simplyswords.rendsworditem.tooltip4": "Потратив всё суммирования (заряды) из окружающих врагов,", +"item.simplyswords.rendsworditem.tooltip5": "Вы наносите им урон и исцеляете себя, в зависимости", +"item.simplyswords.rendsworditem.tooltip6": "от количества использованных суммирования (зарядов).", + +"item.simplyswords.soulsworditem.tooltip1": "Уникальный эффект: Слияние с душой", +"item.simplyswords.soulsworditem.tooltip2": "Шанс при ударе поглотить души ближайших", +"item.simplyswords.soulsworditem.tooltip3": "врагов, утяжеляя владельца и замедляя", +"item.simplyswords.soulsworditem.tooltip4": "скорость атаки. Выпущенные души передают", +"item.simplyswords.soulsworditem.tooltip5": "замедление скорости атаки врагам поблизости", +"item.simplyswords.soulsworditem.tooltip6": "и восстанавливают здоровье владельца.", + +"item.simplyswords.stealsworditem.tooltip1": "Уникальный эффект: Похищение души", +"item.simplyswords.stealsworditem.tooltip2": "Шанс при ударе поглотить души", +"item.simplyswords.stealsworditem.tooltip3": "противников, замедляя их и помечая", +"item.simplyswords.stealsworditem.tooltip4": "на гибель, одновременно ускоряя себя.", +"item.simplyswords.stealsworditem.tooltip5": "Находясь в пределах 5 блоков от бездушной", +"item.simplyswords.stealsworditem.tooltip6": "цели Вы возвращаете себе душу, совершая рывок", +"item.simplyswords.stealsworditem.tooltip7": "и становясь невидимым. Находясь более 5", +"item.simplyswords.stealsworditem.tooltip8": "блоков от бездушной цели, то перемещаетесь", +"item.simplyswords.stealsworditem.tooltip9": "к её местоположению, принудительно возвращаете", +"item.simplyswords.stealsworditem.tooltip10": "себе душу, ослепляете и наносите ей урон.", + +"item.simplyswords.soulpyresworditem.tooltip1": "Уникальный эффект: Узы души", +"item.simplyswords.soulpyresworditem.tooltip2": "Инициируйте связь с душой, обменявшись с ней", +"item.simplyswords.soulpyresworditem.tooltip3": "местами и заморозив её. При этом Вы получаете", +"item.simplyswords.soulpyresworditem.tooltip4": "эффект «Спешка» и «Сопротивление».", +"item.simplyswords.soulpyresworditem.tooltip5": "Добравшись до цели, Вы поджигаете близлежащих", +"item.simplyswords.soulpyresworditem.tooltip6": "врагов и притягиваете их к себе.", +"item.simplyswords.soulpyresworditem.tooltip7": "По истечении %d секунд узы", +"item.simplyswords.soulpyresworditem.tooltip8": "разрываются и владелец снова", +"item.simplyswords.soulpyresworditem.tooltip9": "обменивается местами с целью.", + +"item.simplyswords.frostfallsworditem.tooltip1": "Уникальный эффект: Ледяная ярость", +"item.simplyswords.frostfallsworditem.tooltip2": "Шанс при ударе окутать врагов льдом,", +"item.simplyswords.frostfallsworditem.tooltip3": "что временно блокирует нанесение урона.", +"item.simplyswords.frostfallsworditem.tooltip4": "По истечении %d секунд лёд разрушается,", +"item.simplyswords.frostfallsworditem.tooltip5": "причиняя %d урона. Покрытие себя льдом", +"item.simplyswords.frostfallsworditem.tooltip6": "наделяет Вас иммунитетом и регенерацией на %d секунд.", + +"item.simplyswords.moltenedgesworditem.tooltip1": "Уникальный эффект: Плавленный рёв", +"item.simplyswords.moltenedgesworditem.tooltip2": "Шанс поджечь врага или самого себя при ударе.", +"item.simplyswords.moltenedgesworditem.tooltip3": "При низком здоровье Вы получаете регенерацию.", +"item.simplyswords.moltenedgesworditem.tooltip4": "В зависимости от недостающего здоровья Вы получаете", +"item.simplyswords.moltenedgesworditem.tooltip5": "эффект «Сила» и «Скорость». Выпущенный мощный рёв отбрасывает", +"item.simplyswords.moltenedgesworditem.tooltip6": "и поджигает близлежащих врагов. Получение эффекта «Сопротивления»", +"item.simplyswords.moltenedgesworditem.tooltip7": "и «Сильного натиска», продолжительность которых зависит от количества ударов по врагам.", + +"item.simplyswords.livyatansworditem.tooltip1": "Уникальный эффект: Ледяные осколки", +"item.simplyswords.livyatansworditem.tooltip2": "Шанс при ударе окутать врагов льдом,", +"item.simplyswords.livyatansworditem.tooltip3": "что временно блокирует нанесение урона.", +"item.simplyswords.livyatansworditem.tooltip4": "По истечении %d секунд ледяные осколки распадаются,", +"item.simplyswords.livyatansworditem.tooltip5": "причиняя %d урона. Чем быстрее Вы разрушите лёд,", +"item.simplyswords.livyatansworditem.tooltip6": "окутанный на Ваших врагах, тем больше урона нанесёте врагам.", + +"item.simplyswords.icewhispersworditem.tooltip1": "Уникальный эффект: Вечная мерзлота", +"item.simplyswords.icewhispersworditem.tooltip2": "Владение мечом окружает Вас ледяной аурой, которая", +"item.simplyswords.icewhispersworditem.tooltip3": "наносит урон и замедляет врагов в радиусе %d блоков.", +"item.simplyswords.icewhispersworditem.tooltip4": "Возможность истощить голод, чтобы создать", +"item.simplyswords.icewhispersworditem.tooltip5": "ледяной вихрь на месте, замедляющий и наносящий", +"item.simplyswords.icewhispersworditem.tooltip6": "усиленный урон врагам в радиусе %d блоков.", + +"item.simplyswords.arcanethystsworditem.tooltip1": "Уникальный эффект: Чародейская атака", +"item.simplyswords.arcanethystsworditem.tooltip2": "Шанс поднять цель в воздух при ударе.", +"item.simplyswords.arcanethystsworditem.tooltip3": "Направьте чародейскую энергию для", +"item.simplyswords.arcanethystsworditem.tooltip4": "атаки близлежащих врагов, поднимая их в", +"item.simplyswords.arcanethystsworditem.tooltip5": "воздух, нанося постепенный урон, а", +"item.simplyswords.arcanethystsworditem.tooltip6": "затем сбрасывая их на землю.", + +"item.simplyswords.thunderbrandsworditem.tooltip1": "Уникальный эффект: Громовой обстрел", +"item.simplyswords.thunderbrandsworditem.tooltip2": "Шанс обновить перезарядку способности при ударе.", +"item.simplyswords.thunderbrandsworditem.tooltip3": "Заряжая оружие, Вы сразу замедляете себя,", +"item.simplyswords.thunderbrandsworditem.tooltip4": "нанося областной урон близлежащим врагам.", +"item.simplyswords.thunderbrandsworditem.tooltip5": "После завершения зарядки, совершаете рывок, получаете", +"item.simplyswords.thunderbrandsworditem.tooltip6": "спешку и наносите сокрушительный урон врагам", +"item.simplyswords.thunderbrandsworditem.tooltip7": "на своём пути.", + +"item.simplyswords.stormsedgesworditem.tooltip1": "Уникальный эффект: Грозовой удар", +"item.simplyswords.stormsedgesworditem.tooltip2": "Шанс обновить перезарядку способности при ударе.", +"item.simplyswords.stormsedgesworditem.tooltip3": "Молниеносный рывок вперёд, сразу", +"item.simplyswords.stormsedgesworditem.tooltip4": "делает Вас неуязвимым, а также", +"item.simplyswords.stormsedgesworditem.tooltip5": "дарует длительный эффект «Скорость» и «Спешка».", + +"item.simplyswords.lichbladesworditem.tooltip1": "Уникальный эффект: Страдание души I", +"item.simplyswords.lichbladesworditem.tooltip1.2": "Уникальный эффект: Страдание души II", +"item.simplyswords.lichbladesworditem.tooltip1.3": "Уникальный эффект: Страдание души III", +"item.simplyswords.lichbladesworditem.tooltip2": "Из Вас исходят угнетённые души,", +"item.simplyswords.lichbladesworditem.tooltip3": "поражающие близлежащих врагов.", +"item.simplyswords.lichbladesworditem.tooltip4": "Приказывайте душами, направляя их", +"item.simplyswords.lichbladesworditem.tooltip5": "на удалённую цель, чтобы нанести быстрый", +"item.simplyswords.lichbladesworditem.tooltip6": "урон и с шансом высосать здоровье.", +"item.simplyswords.lichbladesworditem.tooltip7": "После атаки души возвращаются к Вам и", +"item.simplyswords.lichbladesworditem.tooltip8": "перед тем, как они доберутся до Вас:", +"item.simplyswords.lichbladesworditem.tooltip9": "получите эффект «Поглощение».", + +"item.simplyswords.stormbringersworditem.tooltip1": "Уникальный эффект: Шоковое отражение", +"item.simplyswords.stormbringersworditem.tooltip2": "Сфокусируйте энергию на кончике своего", +"item.simplyswords.stormbringersworditem.tooltip3": "клинка, что позволяет мгновенно", +"item.simplyswords.stormbringersworditem.tooltip4": "блокировать входящие атаки.", +"item.simplyswords.stormbringersworditem.tooltip5": "При правильном расчёте времени этой", +"item.simplyswords.stormbringersworditem.tooltip6": "способности, удар ближнего боя врага", +"item.simplyswords.stormbringersworditem.tooltip7": "парируется, нанося урон и отбрасывая", +"item.simplyswords.stormbringersworditem.tooltip8": "соперника, но в то же время", +"item.simplyswords.stormbringersworditem.tooltip9": "сокращая перезарядку способности.", +"item.simplyswords.stormbringersworditem.tooltip10": "Серия успешных парирования увеличивает,", +"item.simplyswords.stormbringersworditem.tooltip11": "урон способности и перезарядку.", + +"item.simplyswords.shadowmistsworditem.tooltip1": "Уникальный эффект: Теневой туман", +"item.simplyswords.shadowmistsworditem.tooltip2": "Шанс при ударе нанести масштабируемый магический", +"item.simplyswords.shadowmistsworditem.tooltip3": "урон, зависящий от значения брони целей.", +"item.simplyswords.shadowmistsworditem.tooltip4": "Создайте мрачный туман под ногами, скрывающий Вас,", +"item.simplyswords.shadowmistsworditem.tooltip5": "и переместитесь на короткое расстояние сквозь тень.", + +"item.simplyswords.harbingersworditem.tooltip1": "Уникальный эффект: Знамя бездны", +"item.simplyswords.harbingersworditem.tooltip2": "Шанс нанести слабость при ударе.", +"item.simplyswords.harbingersworditem.tooltip3": "Вызывает Боевое знамя бездны, которое", +"item.simplyswords.harbingersworditem.tooltip4": "притягивает, замедляет и наносит урон врагам.", +"item.simplyswords.harbingersworditem.tooltip5": "Одновременно знамя периодически наделяет", +"item.simplyswords.harbingersworditem.tooltip6": "союзников спешкой в зоне своей окружности.", + +"item.simplyswords.sunfiresworditem.tooltip1": "Уникальный эффект: Праведное знамя", +"item.simplyswords.sunfiresworditem.tooltip2": "Шанс восстановить здоровье при ударе.", +"item.simplyswords.sunfiresworditem.tooltip3": "Вызывает Боевое праведное знамя, которое", +"item.simplyswords.sunfiresworditem.tooltip4": "поджигает, замедляет и наносит урон врагам.", +"item.simplyswords.sunfiresworditem.tooltip5": "Одновременно знамя периодически наделяет союзников", +"item.simplyswords.sunfiresworditem.tooltip6": "силой и здоровьем в зоне своей окружности.", + +"item.simplyswords.whisperwindsworditem.tooltip1": "Уникальный эффект: Смертоносная вспышка", +"item.simplyswords.whisperwindsworditem.tooltip2": "Шанс обновить перезарядку способности при ударе.", +"item.simplyswords.whisperwindsworditem.tooltip3": "Совершите стремительный рывок вперёд, получая", +"item.simplyswords.whisperwindsworditem.tooltip4": "эффект «Сопротивления» и «Поглощения». Враги,", +"item.simplyswords.whisperwindsworditem.tooltip5": "оказавшиеся на Вашем пути, поражаются Эхо,", +"item.simplyswords.whisperwindsworditem.tooltip6": "а каждая цель, попавшая под удар рывка,", +"item.simplyswords.whisperwindsworditem.tooltip7": "увеличивает количество, наносимого Вами урон от Эхо.", + +"item.simplyswords.emberlashsworditem.tooltip1": "Уникальный эффект: Зола", +"item.simplyswords.emberlashsworditem.tooltip2": "Ваши атаки наносят Тление.", +"item.simplyswords.emberlashsworditem.tooltip3": "Атака врагов накладывает Тление, что", +"item.simplyswords.emberlashsworditem.tooltip4": "заставляет Вас наносить дополнительно", +"item.simplyswords.emberlashsworditem.tooltip5": "%d урона за суммирование (заряд).", +"item.simplyswords.emberlashsworditem.tooltip6": "Уклоняясь, Вы прижигаете свои", +"item.simplyswords.emberlashsworditem.tooltip7": "раны, восстанавливая %d%% от Максимального здоровья.", + +"item.simplyswords.waxweaversworditem.tooltip1": "Уникальный эффект: Выработка воска", +"item.simplyswords.waxweaversworditem.tooltip2": "Атака подожжённых врагов наделяет", +"item.simplyswords.waxweaversworditem.tooltip3": "Вас эффектами «Сила» и «Спешка».", +"item.simplyswords.waxweaversworditem.tooltip4": "Находясь на грани смерти, Вы", +"item.simplyswords.waxweaversworditem.tooltip5": "насыщаетесь полностью регенерирующим", +"item.simplyswords.waxweaversworditem.tooltip6": "Вас воском, что исцеляет и наделяет", +"item.simplyswords.waxweaversworditem.tooltip7": "эффектом «Сопротивление» на короткий период", +"item.simplyswords.waxweaversworditem.tooltip8": "времени. Этот эффект происходит лишь", +"item.simplyswords.waxweaversworditem.tooltip9": "раз каждые %d секунд. Только для основной руки.", + +"item.simplyswords.hiveheartsworditem.tooltip1": "Уникальный эффект: Коллективный разум", +"item.simplyswords.hiveheartsworditem.tooltip2": "Выпускайте злых пчёл при ударе,", +"item.simplyswords.hiveheartsworditem.tooltip3": "жалящих Вашу цель, пока не", +"item.simplyswords.hiveheartsworditem.tooltip4": "исчезнут.", +"item.simplyswords.hiveheartsworditem.tooltip5": "Этот эффект происходит лишь", +"item.simplyswords.hiveheartsworditem.tooltip6": "раз каждые %d секунд.", +"item.simplyswords.hiveheartsworditem.tooltip7": "Ваши пчёлы концентрируются на выработке", +"item.simplyswords.hiveheartsworditem.tooltip8": "регенерирующего воска, постепенно", +"item.simplyswords.hiveheartsworditem.tooltip9": "исцеляя Вас, однако ставит способность", +"item.simplyswords.hiveheartsworditem.tooltip10": "«Коллективный разум» на перезарядку.", + +"item.simplyswords.starsedgesworditem.tooltip1": "Уникальный эффект: Звёздная кромка", +"item.simplyswords.starsedgesworditem.tooltip2": "Днём, Ваши атаки наносят %s", +"item.simplyswords.starsedgesworditem.tooltip3": "дополнительного урона. Ночью,", +"item.simplyswords.starsedgesworditem.tooltip4": "Ваши атаки получают эффект «Похищение", +"item.simplyswords.starsedgesworditem.tooltip5": "жизни». Уклонитесь назад, чтобы", +"item.simplyswords.starsedgesworditem.tooltip6": "получить эффект «Скорость». Активируйте", +"item.simplyswords.starsedgesworditem.tooltip7": "второй раз, чтобы совершить рывок, наделяющий", +"item.simplyswords.starsedgesworditem.tooltip8": "Вас эффектом «Сопротивление» и «Спешка».", + +"item.simplyswords.wickpiercersworditem.tooltip1": "Уникальный эффект: Вспышка гнева", +"item.simplyswords.wickpiercersworditem.tooltip2": "Наполните свой разум гневом,", +"item.simplyswords.wickpiercersworditem.tooltip3": "получая существенный бонус", +"item.simplyswords.wickpiercersworditem.tooltip4": "к скорости атаки, позволяющий", +"item.simplyswords.wickpiercersworditem.tooltip5": "с каждым ударом наносить двойной", +"item.simplyswords.wickpiercersworditem.tooltip6": "удар Фитильным пронзателем в течение %d секунд.", + +"item.simplyswords.tempestsworditem.tooltip1": "Уникальный эффект: Вихрь", +"item.simplyswords.tempestsworditem.tooltip2": "Ваши атаки притягивают стихийную", +"item.simplyswords.tempestsworditem.tooltip3": "энергию к цели, постепенно", +"item.simplyswords.tempestsworditem.tooltip4": "нанося ей урон и характерные", +"item.simplyswords.tempestsworditem.tooltip5": "стихийные отрицательные эффекты.", +"item.simplyswords.tempestsworditem.tooltip6": "Этот эффект суммируется.", +"item.simplyswords.tempestsworditem.tooltip7": "Верните себе все ближайшие элементы,", +"item.simplyswords.tempestsworditem.tooltip8": "образуя вокруг Вас вихрь", +"item.simplyswords.tempestsworditem.tooltip9": "стихийной энергии, нанося урон", +"item.simplyswords.tempestsworditem.tooltip10": "близлежащим врагам и", +"item.simplyswords.tempestsworditem.tooltip11": "увеличивающийся в размерах.", + +"item.simplyswords.dreadtidesworditem.tooltip1": "Уникальный эффект: Призыватель бездны", +"item.simplyswords.dreadtidesworditem.tooltip2": "Пассивно генерирует суммирования (заряды)", +"item.simplyswords.dreadtidesworditem.tooltip3": "эффекта «Плащ пустоты», увеличивающий", +"item.simplyswords.dreadtidesworditem.tooltip4": "скорость атаки и понижающий входящий", +"item.simplyswords.dreadtidesworditem.tooltip5": "урон на 10% за суммирование (заряд).", +"item.simplyswords.dreadtidesworditem.tooltip6": "Получение урона сбивает суммирование (заряд).", +"item.simplyswords.dreadtidesworditem.tooltip7": "Макс. 1 суммирование за 20 порчи.", +"item.simplyswords.dreadtidesworditem.tooltip8": "Высвободите Плащ пустоты и", +"item.simplyswords.dreadtidesworditem.tooltip9": "направьте мистическую энергию", +"item.simplyswords.dreadtidesworditem.tooltip10": "прямо к самому близлежащему", +"item.simplyswords.dreadtidesworditem.tooltip11": "врагу, нанося ему быстрый урон.", +"item.simplyswords.dreadtidesworditem.tooltip12": "При владении этим оружием Вы подвергаетесь", +"item.simplyswords.dreadtidesworditem.tooltip13": "порчей в течение долгого времени.", + +"item.simplyswords.flamewindsworditem.tooltip1": "Уникальный эффект: Бушующее пламя", +"item.simplyswords.flamewindsworditem.tooltip2": "Когда взрывается Огненное семя, Вы", +"item.simplyswords.flamewindsworditem.tooltip3": "получаете эффект «Спешка».", +"item.simplyswords.flamewindsworditem.tooltip4": "Посадите Огненное семя в", +"item.simplyswords.flamewindsworditem.tooltip5": "самого ближайшего врага, чтобы", +"item.simplyswords.flamewindsworditem.tooltip6": "в течение долгого времени наносить ему урон.", +"item.simplyswords.flamewindsworditem.tooltip7": "После окончания срока действия, семя", +"item.simplyswords.flamewindsworditem.tooltip8": "взрывается, нанося областной", +"item.simplyswords.flamewindsworditem.tooltip9": "урон и распространяя эффект", +"item.simplyswords.flamewindsworditem.tooltip10": "близлежащим врагам.", +"item.simplyswords.flamewindsworditem.tooltip11": "Распространяется до %d раз.", + +"item.simplyswords.ribboncleaversworditem.tooltip1": "Уникальный эффект: Ленточная ярость", +"item.simplyswords.ribboncleaversworditem.tooltip2": "При владении Ленточным тесаком Ваша ", +"item.simplyswords.ribboncleaversworditem.tooltip3": "скорость передвижения снижается на 5%, но", +"item.simplyswords.ribboncleaversworditem.tooltip4": "получаемый урон уменьшается на 15%.", +"item.simplyswords.ribboncleaversworditem.tooltip5": "Совершив рывок, Вы избегаете несколько", +"item.simplyswords.ribboncleaversworditem.tooltip6": "следующих входящих ударов,", +"item.simplyswords.ribboncleaversworditem.tooltip7": "получаете эффект «Сопротивление", +"item.simplyswords.ribboncleaversworditem.tooltip8": "отбрасыванию» и заставляете свою", +"item.simplyswords.ribboncleaversworditem.tooltip9": "следующую атаку наносить +95%", +"item.simplyswords.ribboncleaversworditem.tooltip10": "урона по одиночной цели.", + +"item.simplyswords.magiscythesworditem.tooltip1": "Уникальный эффект: Магическая буря", +"item.simplyswords.magiscythesworditem.tooltip2": "Атака врагов, когда активна", +"item.simplyswords.magiscythesworditem.tooltip3": "Магическая буря даёт", +"item.simplyswords.magiscythesworditem.tooltip4": "шанс починить оснащённый", +"item.simplyswords.magiscythesworditem.tooltip5": "предмет.", +"item.simplyswords.magiscythesworditem.tooltip6": "Над Вами материализуется", +"item.simplyswords.magiscythesworditem.tooltip7": "Магическая буря, что наносит", +"item.simplyswords.magiscythesworditem.tooltip8": "урон близлежащим врагам.", +"item.simplyswords.magiscythesworditem.tooltip9": "Всякий раз, когда буря наносит", +"item.simplyswords.magiscythesworditem.tooltip10": "урон, у неё есть шанс обновить", +"item.simplyswords.magiscythesworditem.tooltip11": "свою длительность и увеличить", +"item.simplyswords.magiscythesworditem.tooltip12": "свою опасность.", + +"item.simplyswords.enigmasworditem.tooltip1": "Уникальный эффект: Сила шторма", +"item.simplyswords.enigmasworditem.tooltip2": "Когда Вы находитесь рядом со", +"item.simplyswords.enigmasworditem.tooltip3": "смерчем, Вы получаете эффект «Спешка».", +"item.simplyswords.enigmasworditem.tooltip4": "Вызывайте Смерч, что будет гнаться", +"item.simplyswords.enigmasworditem.tooltip5": "за врагами неподалёку, нанося им", +"item.simplyswords.enigmasworditem.tooltip6": "повышенный урон, чем дольше", +"item.simplyswords.enigmasworditem.tooltip7": "враг находится внутри", +"item.simplyswords.enigmasworditem.tooltip8": "ловушки.", + +"item.simplyswords.magibladesworditem.tooltip1": "Уникальный эффект: Магическая звуковая скорость", +"item.simplyswords.magibladesworditem.tooltip2": "Иногда Магический клинок", +"item.simplyswords.magibladesworditem.tooltip3": "обнаруживает и отражает наступающих", +"item.simplyswords.magibladesworditem.tooltip4": "врагов.", +"item.simplyswords.magibladesworditem.tooltip5": "После небольшой задержки, Ваш", +"item.simplyswords.magibladesworditem.tooltip6": "Магический клинок выпускает звуковой", +"item.simplyswords.magibladesworditem.tooltip7": "удар перед Вами, нанося", +"item.simplyswords.magibladesworditem.tooltip8": "урон врагам, попавших", +"item.simplyswords.magibladesworditem.tooltip9": "на его пути.", + +"item.simplyswords.magispearsworditem.tooltip1": "Уникальный эффект: Магический удар", +"item.simplyswords.magispearsworditem.tooltip2": "При атаке врагов у Вас", +"item.simplyswords.magispearsworditem.tooltip3": "есть шанс нанести", +"item.simplyswords.magispearsworditem.tooltip4": "дополнительный магический урон.", +"item.simplyswords.magispearsworditem.tooltip5": "При поддержке Магического копья,", +"item.simplyswords.magispearsworditem.tooltip6": "Вы выполняете рывок, после", +"item.simplyswords.magispearsworditem.tooltip7": "которого следует ударная атака,", +"item.simplyswords.magispearsworditem.tooltip8": "наносящая урон близлежащим врагам.", +"item.simplyswords.magispearsworditem.tooltip9": "Вы невосприимчивы во время скачка.", + +"item.simplyswords.caelestissworditem.tooltip1": "Уникальный эффект: Астральный сдвиг", +"item.simplyswords.caelestissworditem.tooltip2": "При владении мечом предоставляется", +"item.simplyswords.caelestissworditem.tooltip3": "шанс полностью избежать", +"item.simplyswords.caelestissworditem.tooltip4": "входящий урон.", +"item.simplyswords.caelestissworditem.tooltip5": "Вступите в астральный мир", +"item.simplyswords.caelestissworditem.tooltip6": "на некоторое время, становясь неуязвимым", +"item.simplyswords.caelestissworditem.tooltip7": "к урону в течение %d секунд.", +"item.simplyswords.caelestissworditem.tooltip8": "При выходе с астрального мира", +"item.simplyswords.caelestissworditem.tooltip9": "Вы высвобождаете мощный взрыв,", +"item.simplyswords.caelestissworditem.tooltip10": "наносящий областной урон относительно", +"item.simplyswords.caelestissworditem.tooltip11": "нейтрализованного урона, пока Вы находились", +"item.simplyswords.caelestissworditem.tooltip12": "в астральном мире.", + +"item.simplyswords.dormantrelicsworditem.tooltip2": "Кажется, изнутри исходит слабая сила.", +"item.simplyswords.poweredrelicsworditem.tooltip2": "Похоже, изнутри исходит растущая сила.", + +"item.simplyswords.levitationsworditem.tooltip1": "Талант рун: Левитация", +"item.simplyswords.uniquesworditem.runefused_power.float": "[ Наполненный руной: Левитация ]", +"item.simplyswords.levitationsworditem.tooltip2": "Шанс при ударе обратить эффекты", +"item.simplyswords.levitationsworditem.tooltip3": "гравитации на своей цели.", +"item.simplyswords.speedsworditem.tooltip1": "Талант рун: Проворство", +"item.simplyswords.uniquesworditem.runefused_power.swiftness": "[ Наполненный руной: Проворство ]", +"item.simplyswords.speedsworditem.tooltip2": "Шанс при ударе увеличить скорость", +"item.simplyswords.speedsworditem.tooltip3": "передвижения владельцев в течение всего срока.", +"item.simplyswords.slownesssworditem.tooltip1": "Талант рун: Замедление", +"item.simplyswords.uniquesworditem.runefused_power.slow": "[ Наполненный руной: Замедление ]", +"item.simplyswords.slownesssworditem.tooltip2": "Шанс при ударе замедлить цель", +"item.simplyswords.slownesssworditem.tooltip3": "в течение всего срока.", +"item.simplyswords.freezesworditem.tooltip1": "Талант рун: Заморозка", +"item.simplyswords.uniquesworditem.runefused_power.freeze": "[ Наполненный руной: Заморозка ]", +"item.simplyswords.freezesworditem.tooltip2": "Шанс застудить или заморозить цель при ударе.", +"item.simplyswords.wildfiresworditem.tooltip1": "Талант рун: Дикий огонь", +"item.simplyswords.uniquesworditem.runefused_power.wildfire": "[ Наполненный руной: Дикий огонь ]", +"item.simplyswords.wildfiresworditem.tooltip2": "Шанс при ударе поджечь всех поблизости", +"item.simplyswords.wildfiresworditem.tooltip3": "существ того же типа, что и Ваша цель.", +"item.simplyswords.zephyrsworditem.tooltip1": "Талант рун: Зефир", +"item.simplyswords.uniquesworditem.runefused_power.zephyr": "[ Наполненный руной: Зефир ]", +"item.simplyswords.zephyrsworditem.tooltip2": "Шанс при ударе получить скорость", +"item.simplyswords.zephyrsworditem.tooltip3": "к атаке и передвижению.", +"item.simplyswords.shieldingsworditem.tooltip1": "Талант рун: Щит", +"item.simplyswords.uniquesworditem.runefused_power.shielding": "[ Наполненный руной: Щит ]", +"item.simplyswords.shieldingsworditem.tooltip2": "Шанс при ударе получить", +"item.simplyswords.shieldingsworditem.tooltip3": "эффект «Поглощения».", +"item.simplyswords.stoneskinsworditem.tooltip1": "Талант рун: Каменная кожа", +"item.simplyswords.uniquesworditem.runefused_power.stoneskin": "[ Наполненный руной: Каменная кожа ]", +"item.simplyswords.stoneskinsworditem.tooltip2": "Шанс при ударе увеличить эффект", +"item.simplyswords.stoneskinsworditem.tooltip3": "«Сопротивление», ценой скорости.", +"item.simplyswords.trailblazesworditem.tooltip1": "Талант рун: Горящий след", +"item.simplyswords.uniquesworditem.runefused_power.trailblaze": "[ Наполненный руной: Горящий след ]", +"item.simplyswords.trailblazesworditem.tooltip2": "Шанс при ударе получить скорость", +"item.simplyswords.trailblazesworditem.tooltip3": "и самоподжечься.", +"item.simplyswords.weakensworditem.tooltip1": "Талант рун: Ослабление", +"item.simplyswords.uniquesworditem.runefused_power.weaken": "[ Наполненный руной: Ослабление ]", +"item.simplyswords.weakensworditem.tooltip2": "Шанс при ударе замедлить", +"item.simplyswords.weakensworditem.tooltip3": "и ослабить свою цель.", +"item.simplyswords.unstablesworditem.tooltip1": "Талант рун: Нестабильность", +"item.simplyswords.uniquesworditem.runefused_power.unstable": "[ Наполненный руной: Нестабильность ]", +"item.simplyswords.unstablesworditem.tooltip2": "На владельца постоянно накладываются", +"item.simplyswords.unstablesworditem.tooltip3": "случайные эффекты.", +"item.simplyswords.activedefencesworditem.tooltip1": "Талант рун: Активная защита", +"item.simplyswords.uniquesworditem.runefused_power.active_defence": "[ Наполненный руной: Активная защита ]", +"item.simplyswords.activedefencesworditem.tooltip2": "Постоянно выпускает стрелы на", +"item.simplyswords.activedefencesworditem.tooltip3": "близлежащих врагов (Необходимы стрелы).", +"item.simplyswords.frostwardsworditem.tooltip1": "Талант рун: Защита от магии льда", +"item.simplyswords.uniquesworditem.runefused_power.frost_ward": "[ Наполненный руной: Защита от магии льда ]", +"item.simplyswords.frostwardsworditem.tooltip2": "Периодически выпускает снежки, замедляющие", +"item.simplyswords.frostwardsworditem.tooltip3": "передвижение всех близлежащих врагов.", +"item.simplyswords.momentumsworditem.tooltip1": "Талант рун: Импульс", +"item.simplyswords.momentumsworditem.tooltip2": "Получение кратковременного периода", +"item.simplyswords.momentumsworditem.tooltip3": "силы поступательного импульса.", +"item.simplyswords.imbuedsworditem.tooltip1": "Талант рун: Усиление", +"item.simplyswords.uniquesworditem.runefused_power.imbued": "[ Наполненный руной: Усиление]", +"item.simplyswords.imbuedsworditem.tooltip2": "Шанс при ударе нанести дополнительный магический", +"item.simplyswords.imbuedsworditem.tooltip3": "урон, увеличивающийся в зависимости от прочности.", +"item.simplyswords.pincushionsworditem.tooltip1": "Талант рун: Игольница", +"item.simplyswords.uniquesworditem.runefused_power.pincushion": "[ Наполненный руной: Игольница]", +"item.simplyswords.pincushionsworditem.tooltip2": "Нанесение дополнительного урона за", +"item.simplyswords.pincushionsworditem.tooltip3": "каждую воткнутую стрелу на Вашем теле.", +"item.simplyswords.wardsworditem.tooltip1": "Талант рун: Оберег", +"item.simplyswords.wardsworditem.tooltip2": "Жертвуйте половиной своего текущего здоровья", +"item.simplyswords.wardsworditem.tooltip3": "для получения пульсирующего поглощения относительно", +"item.simplyswords.wardsworditem.tooltip4": "оставшегося Вашего здоровья на 6 секунд.", +"item.simplyswords.immolationsworditem.tooltip1": "Талант рун: Обжигающий жар", +"item.simplyswords.immolationsworditem.tooltip2": "Получение ауры обжигающего жара, что", +"item.simplyswords.immolationsworditem.tooltip3": "периодически наносит по Вам урон и ближайшим врагам.", +"item.simplyswords.immolationsworditem.tooltip4": "Исходящий урон увеличивается в зависимости от Вашего текущего здоровья.", +"item.simplyswords.unidentifiedsworditem.tooltip1": "Талант рун: ???", +"item.simplyswords.netherfused_gem.tooltip1": "Талант Незера: ???", +"item.simplyswords.unidentifiedsworditem.tooltip2": "Нажать — определить.", +"item.simplyswords.runic_tablet.tooltip": "Может быть использовано для создания", +"item.simplyswords.runic_tablet.tooltip2": "и изменения таланта Рунического оружия.", +"item.simplyswords.runic_tablet.tooltip3": "Может также быть использовано для", +"item.simplyswords.runic_tablet.tooltip4": "починки Уникального оружия.", + +"item.simplyswords.uniquesworditem.netherfused_power.echo": "[ Наполненный Незером: Эхо ]", +"item.simplyswords.uniquesworditem.netherfused_power.echo.description": "Ваше оружие машет эффектом «Эхо»,", +"item.simplyswords.uniquesworditem.netherfused_power.echo.description2": "нанося дополнительный невообразимый", +"item.simplyswords.uniquesworditem.netherfused_power.echo.description3": "урон после короткой задержки.", + +"item.simplyswords.uniquesworditem.netherfused_power.berserk": "[ Наполненный Незером: Берсерк ]", +"item.simplyswords.uniquesworditem.netherfused_power.berserk.description": "Когда у Вас меньше 10 ед.", +"item.simplyswords.uniquesworditem.netherfused_power.berserk.description2": "брони, Ваши взмахи оружия", +"item.simplyswords.uniquesworditem.netherfused_power.berserk.description3": "высасывают здоровье со цели.", + +"item.simplyswords.uniquesworditem.netherfused_power.radiance": "[ Наполненный Незером: Сияние ]", +"item.simplyswords.uniquesworditem.netherfused_power.radiance.description": "При ударе по цели, поражённой", +"item.simplyswords.uniquesworditem.netherfused_power.radiance.description2": "эффектом слабости, Вы получаете эффект", +"item.simplyswords.uniquesworditem.netherfused_power.radiance.description3": "«Обжигающий жар» в течение короткого срока.", + +"item.simplyswords.uniquesworditem.netherfused_power.onslaught": "[ Наполненный Незером: Натиск ]", +"item.simplyswords.uniquesworditem.netherfused_power.onslaught.description": "При ударе по цели, поражённой эффектом", +"item.simplyswords.uniquesworditem.netherfused_power.onslaught.description2": "замедления, Вы получаете эффект «Натиск»", +"item.simplyswords.uniquesworditem.netherfused_power.onslaught.description3": "в течение короткого срока. (Натиск даёт", +"item.simplyswords.uniquesworditem.netherfused_power.onslaught.description4": "Вам пульсирующий эффект «Спешка»,", +"item.simplyswords.uniquesworditem.netherfused_power.onslaught.description5": "однако при истечении срока действия", +"item.simplyswords.uniquesworditem.netherfused_power.onslaught.description6": "эффекта на Вас накладывается эффект «Слабость»).", + +"item.simplyswords.uniquesworditem.netherfused_power.nullification": "[ Наполненный Незером: Очистка ]", +"item.simplyswords.uniquesworditem.netherfused_power.nullification.description": "При ударе вызывает боевое знамя,", +"item.simplyswords.uniquesworditem.netherfused_power.nullification.description2": "периодически очищающее", +"item.simplyswords.uniquesworditem.netherfused_power.nullification.description3": "негативные эффекты с союзников и", +"item.simplyswords.uniquesworditem.netherfused_power.nullification.description4": "при этом отнимающее усиления", +"item.simplyswords.uniquesworditem.netherfused_power.nullification.description5": "с врагов в зоне своей окружности.", + +"item.simplyswords.uniquesworditem.netherfused_power.precise": "[ Наполненный Незером: Точность ]", +"item.simplyswords.uniquesworditem.netherfused_power.precise.description": "Шанс получить несколько суммирования", +"item.simplyswords.uniquesworditem.netherfused_power.precise.description2": "(зарядов) эффекта «Точность» при", +"item.simplyswords.uniquesworditem.netherfused_power.precise.description3": "активации характерной способности.", + +"item.simplyswords.uniquesworditem.netherfused_power.mighty": "[ Наполненный Незером: Мощь ]", +"item.simplyswords.uniquesworditem.netherfused_power.mighty.description": "Шанс получить несколько суммирования", +"item.simplyswords.uniquesworditem.netherfused_power.mighty.description2": "(зарядов) эффекта «Мощь» при", +"item.simplyswords.uniquesworditem.netherfused_power.mighty.description3": "активации характерной способности.", + +"item.simplyswords.uniquesworditem.netherfused_power.stealthy": "[ Наполненный Незером: Незаметность ]", +"item.simplyswords.uniquesworditem.netherfused_power.stealthy.description": "Шанс получить эффект «Незаметность»", +"item.simplyswords.uniquesworditem.netherfused_power.stealthy.description2": "при активации характерной способности.", + +"item.simplyswords.uniquesworditem.netherfused_power.renewed": "[ Наполненный Незером: Обновлённый ]", +"item.simplyswords.uniquesworditem.netherfused_power.renewed.description": "При активации характерной", +"item.simplyswords.uniquesworditem.netherfused_power.renewed.description2": "способности, у Вас есть шанс", +"item.simplyswords.uniquesworditem.netherfused_power.renewed.description3": "заметно понизить", +"item.simplyswords.uniquesworditem.netherfused_power.renewed.description4": "перезарядку способности.", + +"item.simplyswords.uniquesworditem.netherfused_power.accelerant": "[ Наполненный Незером: Инициатор ]", +"item.simplyswords.uniquesworditem.netherfused_power.accelerant.description": "Характерная способность «Берсерк»", +"item.simplyswords.uniquesworditem.netherfused_power.accelerant.description2": "теперь больше не будет предоставлять", +"item.simplyswords.uniquesworditem.netherfused_power.accelerant.description3": "эффект «Берсерк». Однако его", +"item.simplyswords.uniquesworditem.netherfused_power.accelerant.description4": "перезарядка значительно снизится.", + +"item.simplyswords.uniquesworditem.netherfused_power.leaping": "[ Наполненный Незером: Скачок ]", +"item.simplyswords.uniquesworditem.netherfused_power.leaping.description": "При падении с наскоком", +"item.simplyswords.uniquesworditem.netherfused_power.leaping.description2": "у Вас есть шанс ещё раз совершить", +"item.simplyswords.uniquesworditem.netherfused_power.leaping.description3": "скачок, без промедления.", + +"item.simplyswords.uniquesworditem.netherfused_power.spellshield": "[ Наполненный Незером: Магический щит ]", +"item.simplyswords.uniquesworditem.netherfused_power.spellshield.description": "Шанс при использовании заклинания", +"item.simplyswords.uniquesworditem.netherfused_power.spellshield.description2": "получить эффект «Барьер».", + +"item.simplyswords.uniquesworditem.netherfused_power.spellforged": "[ Наполненный Незером: Ковщик чар ]", +"item.simplyswords.uniquesworditem.netherfused_power.spellforged.description": "Будучи в основной руке, это", +"item.simplyswords.uniquesworditem.netherfused_power.spellforged.description2": "оружие даёт Вам повышенную", +"item.simplyswords.uniquesworditem.netherfused_power.spellforged.description3": "силу заклинания.", + +"item.simplyswords.uniquesworditem.netherfused_power.soulshock": "[ Наполненный Незером: Шок души ]", +"item.simplyswords.uniquesworditem.netherfused_power.soulshock.description": "При удержании, это оружие предоставляет", +"item.simplyswords.uniquesworditem.netherfused_power.soulshock.description2": "Вам увеличение к силе заклинания", +"item.simplyswords.uniquesworditem.netherfused_power.soulshock.description3": "Души и Грозы.", + +"item.simplyswords.uniquesworditem.netherfused_power.spellstandard": "[ Наполненный Незером: Чародейское знамя ]", +"item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description": "Шанс при попадании заклинанием сбросить", +"item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description2": "Чародейское знамя, которое наделяет эффектами", +"item.simplyswords.uniquesworditem.netherfused_power.spellstandard.description3": "«Точность» и «Ковщик чар».", + +"item.simplyswords.uniquesworditem.netherfused_power.warstandard": "[ Наполненный Незером: Боевое знамя ]", +"item.simplyswords.uniquesworditem.netherfused_power.warstandard.description": "При использовании способности «Рывок»,", +"item.simplyswords.uniquesworditem.netherfused_power.warstandard.description2": "выбрасывает Боевое знамя, которое наделяет", +"item.simplyswords.uniquesworditem.netherfused_power.warstandard.description3": "Мощью, и раскрывает близлежащих врагов.", + +"item.simplyswords.uniquesworditem.netherfused_power.deception": "[ Наполненный Незером: Обман ]", +"item.simplyswords.uniquesworditem.netherfused_power.deception.description": "Когда Вы уклоняетесь от атаки с помощью", +"item.simplyswords.uniquesworditem.netherfused_power.deception.description2": "навыка «Освоение уклонения», у Вас есть", +"item.simplyswords.uniquesworditem.netherfused_power.deception.description3": "шанс очистить навык «Раскрытие».", + +"item.simplyswords.common.blacklisteffect": "СПОСОБНОСТЬ ОТКЛЮЧЕНА", +"item.simplyswords.common.showtooltip": "- Удерживание §2ALT§7 — просмотреть гнёзда для самоцветов -", +"item.simplyswords.common.showtooltip.info": "- Удерживание §2ALT§7 для подробной информации -", +"item.simplyswords.compat.mythicmetals.regrowth": "Восстановление", +"item.simplyswords.compat.mythicmetals.looting": "Бонус к добыче", + +"entity.simplyswords.battlestandard.name": "Боевое знамя %d", + +"item.simplyswords.compat.scaleFire": "§7Урон способности зависит от силы §6Огненного§7 заклинания.", +"item.simplyswords.compat.scaleFrost": "§7Урон способности зависит от силы §bЛедяного§7 заклинания.", +"item.simplyswords.compat.scaleLightning": "§7Урон способности зависит от силы §eГрозового§7 заклинания.", +"item.simplyswords.compat.scaleArcane": "§7Урон способности зависит от силы §dМистического§7 заклинания.", +"item.simplyswords.compat.scaleSoul": "§7Урон способности зависит от силы заклинания §9Души§7.", +"item.simplyswords.compat.scaleHealing": "§7Урон способности зависит от силы §aИсцеляющего§7 заклинания.", + +"simplyswords.general": "Основные", +"simplyswords.gem_powers": "Эффекты от самоцвета", +"simplyswords.loot": "Добыча", +"simplyswords.status_effects": "Статусные эффекты", +"simplyswords.unique_effects": "Уникальные эффекты", +"simplyswords.weapon_attributes": "Атрибуты оружия", + +"simplyswords.weapon_attributes.typeDamageModifier": "§a[Модификаторы оружия]§7", +"simplyswords.weapon_attributes.typeDamageModifier.desc": "Отрегулировав весовые значения показателей урона от оружия им можно изменить урон.\nВидимое Вами значение выдаваемого урона не является таковым, однако воздействует напрямую.\nРасчёт: урон материала ванильного инструмента + base_modifier + модификатор = действительный модификатор.\nЧтобы изменения вступили в силу, требуется перезапуск игры.\n\n§a[Модификаторы урона]§7\nПример варианта использования: Добавление 3 в нижеуказанное значение ПОВЫСИТ внутриигровой урон на 3 данному типу оружия.", +"simplyswords.weapon_attributes.typeDamageModifier.longsword_damageModifier": "Модификатор урона для Полуторного меча", +"simplyswords.weapon_attributes.typeDamageModifier.twinblade_damageModifier": "Модификатор урона для Парного клинка", +"simplyswords.weapon_attributes.typeDamageModifier.rapier_damageModifier": "Модификатор урона для Рапиры", +"simplyswords.weapon_attributes.typeDamageModifier.katana_damageModifier": "Модификатор урона для Катаны", +"simplyswords.weapon_attributes.typeDamageModifier.sai_damageModifier": "Модификатор урона для Саи", +"simplyswords.weapon_attributes.typeDamageModifier.spear_damageModifier": "Модификатор урона для Копья", +"simplyswords.weapon_attributes.typeDamageModifier.glaive_damageModifier": "Модификатор урона для Глефы", +"simplyswords.weapon_attributes.typeDamageModifier.warglaive_damageModifier": "Модификатор урона для Боевого клинка", +"simplyswords.weapon_attributes.typeDamageModifier.cutlass_damageModifier": "Модификатор урона для Абордажной сабли", +"simplyswords.weapon_attributes.typeDamageModifier.claymore_damageModifier": "Модификатор урона для Клеймора", +"simplyswords.weapon_attributes.typeDamageModifier.greataxe_damageModifier": "Модификатор урона для Большого топора", +"simplyswords.weapon_attributes.typeDamageModifier.greathammer_damageModifier": "Модификатор урона для Большого молота", +"simplyswords.weapon_attributes.typeDamageModifier.chakram_damageModifier": "Модификатор урона для Чакры", +"simplyswords.weapon_attributes.typeDamageModifier.scythe_damageModifier": "Модификатор урона для Косы", +"simplyswords.weapon_attributes.typeDamageModifier.halberd_damageModifier": "Модификатор урона для Алебарды", + +"simplyswords.weapon_attributes.materialDamageModifier": "§a[Модификаторы материалов]§7", +"simplyswords.weapon_attributes.materialDamageModifier.desc": "Модификаторы урона измеряются по этим базовым значениям.", +"simplyswords.weapon_attributes.materialDamageModifier.mythicmetals": "Требуется мод: Mythic Metals", +"simplyswords.weapon_attributes.materialDamageModifier.mythicmetals.failTitle": "Недоступен", +"simplyswords.weapon_attributes.materialDamageModifier.gobber2": "Требуется мод: Gobber", +"simplyswords.weapon_attributes.materialDamageModifier.gobber2.failTitle": "Недоступен", +"simplyswords.weapon_attributes.materialDamageModifier.eldritch_end": "Требуется мод: Eldritch End", +"simplyswords.weapon_attributes.materialDamageModifier.eldritch_end.failTitle": "Недоступен", +"simplyswords.weapon_attributes.materialDamageModifier.iron_damageModifier": "Модификатор базового урона: Железо", +"simplyswords.weapon_attributes.materialDamageModifier.gold_damageModifier": "Модификатор базового урона: Золото", +"simplyswords.weapon_attributes.materialDamageModifier.diamond_damageModifier": "Модификатор базового урона: Алмаз", +"simplyswords.weapon_attributes.materialDamageModifier.netherite_damageModifier": "Модификатор базового урона: Незерит", +"simplyswords.weapon_attributes.materialDamageModifier.runic_damageModifier": "Модификатор базового урона: Рунический", +"simplyswords.weapon_attributes.materialDamageModifier.adamantite_damageModifier": "Модификатор базового урона: Адамантит", +"simplyswords.weapon_attributes.materialDamageModifier.aquarium_damageModifier": "Модификатор базового урона: Акварий", +"simplyswords.weapon_attributes.materialDamageModifier.banglum_damageModifier": "Модификатор базового урона: Банглум", +"simplyswords.weapon_attributes.materialDamageModifier.carmot_damageModifier": "Модификатор базового урона: Кармот", +"simplyswords.weapon_attributes.materialDamageModifier.kyber_damageModifier": "Модификатор базового урона: Кайбер", +"simplyswords.weapon_attributes.materialDamageModifier.mythril_damageModifier": "Модификатор базового урона: Мифрил", +"simplyswords.weapon_attributes.materialDamageModifier.orichalcum_damageModifier": "Модификатор базового урона: Орихалк", +"simplyswords.weapon_attributes.materialDamageModifier.durasteel_damageModifier": "Модификатор базового урона: Дюрасталь", +"simplyswords.weapon_attributes.materialDamageModifier.osmium_damageModifier": "Модификатор базового урона: Осмий", +"simplyswords.weapon_attributes.materialDamageModifier.prometheum_damageModifier": "Модификатор базового урона: Прометий", +"simplyswords.weapon_attributes.materialDamageModifier.quadrillum_damageModifier": "Модификатор базового урона: Квадрий", +"simplyswords.weapon_attributes.materialDamageModifier.runite_damageModifier": "Модификатор базового урона: Рунит", +"simplyswords.weapon_attributes.materialDamageModifier.starPlatinum_damageModifier": "Star Модификатор базового урона: Платина", +"simplyswords.weapon_attributes.materialDamageModifier.bronze_damageModifier": "Модификатор базового урона: Бронза", +"simplyswords.weapon_attributes.materialDamageModifier.copper_damageModifier": "Модификатор базового урона: Медь", +"simplyswords.weapon_attributes.materialDamageModifier.steel_damageModifier": "Модификатор базового урона: Сталь", +"simplyswords.weapon_attributes.materialDamageModifier.palladium_damageModifier": "Модификатор базового урона: Палладий", +"simplyswords.weapon_attributes.materialDamageModifier.stormyx_damageModifier": "Модификатор базового урона: Штормикс", +"simplyswords.weapon_attributes.materialDamageModifier.celestium_damageModifier": "Модификатор базового урона: Целестий", +"simplyswords.weapon_attributes.materialDamageModifier.metallurgium_damageModifier": "Модификатор базового урона: Металлургий", +"simplyswords.weapon_attributes.materialDamageModifier.gobber_damageModifier": "Модификатор базового урона: Гоббер", +"simplyswords.weapon_attributes.materialDamageModifier.gobberNether_damageModifier": "Модификатор базового урона: Незерский Гоббер", +"simplyswords.weapon_attributes.materialDamageModifier.gobberEnd_damageModifier": "Модификатор базового урона: Гоббер Энда", + +"simplyswords.weapon_attributes.typeAttackSpeed": "§a[Модификаторы скорости атаки]", +"simplyswords.weapon_attributes.typeAttackSpeed.desc": "Рекомендуемая область значений: с -1.0 до -3.7, -1.0 быстрая, а -3.7 медленная.", +"simplyswords.weapon_attributes.typeAttackSpeed.longsword_attackSpeed": "Скорость атаки Полуторного меча", +"simplyswords.weapon_attributes.typeAttackSpeed.twinblade_attackSpeed": "Скорость атаки Парного клинка", +"simplyswords.weapon_attributes.typeAttackSpeed.rapier_attackSpeed": "Скорость атаки Рапиры", +"simplyswords.weapon_attributes.typeAttackSpeed.katana_attackSpeed": "Скорость атаки Катаны", +"simplyswords.weapon_attributes.typeAttackSpeed.sai_attackSpeed": "Скорость атаки Саи", +"simplyswords.weapon_attributes.typeAttackSpeed.spear_attackSpeed": "Скорость атаки Копья", +"simplyswords.weapon_attributes.typeAttackSpeed.glaive_attackSpeed": "Скорость атаки Глефы", +"simplyswords.weapon_attributes.typeAttackSpeed.warglaive_attackSpeed": "Скорость атаки Боевого клинка", +"simplyswords.weapon_attributes.typeAttackSpeed.cutlass_attackSpeed": "Скорость атаки Абордажной сабли", +"simplyswords.weapon_attributes.typeAttackSpeed.claymore_attackSpeed": "Скорость атаки Клеймора", +"simplyswords.weapon_attributes.typeAttackSpeed.greataxe_attackSpeed": "Скорость атаки Большого топора", +"simplyswords.weapon_attributes.typeAttackSpeed.greathammer_attackSpeed": "Модификатор урона Большого молота", +"simplyswords.weapon_attributes.typeAttackSpeed.chakram_attackSpeed": "Скорость атаки Чакры", +"simplyswords.weapon_attributes.typeAttackSpeed.scythe_attackSpeed": "Скорость атаки Косы", +"simplyswords.weapon_attributes.typeAttackSpeed.halberd_attackSpeed": "Скорость атаки Алебарды", + +"simplyswords.weapon_attributes.uniqueDamageModifier": "§6[Уникальные модификаторы]", +"simplyswords.weapon_attributes.uniqueDamageModifier.desc": "Урон уникальных модификаторов определяется немного по-другому и требуют только 1 модификатор.\nВидимое Вами значение выдаваемого урона не является таковым, однако воздействует напрямую.\nРасчёт: Урон ванильного незеритового инструмента + damage_modifier = действительный модификатор.\n\n§6[Модификаторы урона]§7\nПример варианта использования: Добавление 3 в нижеуказанное значение ПОВЫСИТ внутриигровой урон на 3 данному типу оружия.", +"simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end": "Требуется мод: Eldritch End", +"simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end.failTitle": "Недоступен", +"simplyswords.weapon_attributes.uniqueDamageModifier.brimstone_damageModifier": "Модификатор урона: §6Серный клеймор§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.thewatcher_damageModifier": "Модификатор урона: §6Смотритель§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.stormsedge_damageModifier": "Модификатор урона: §6Клинок Бури§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.stormbringer_damageModifier": "Модификатор урона: §6Буревестник§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.swordonastick_damageModifier": "Модификатор урона: §6Меч на палке§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.bramblethorn_damageModifier": "Модификатор урона: §6Терновый шип§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.watchingwarglaive_damageModifier": "Модификатор урона §6Боевой клинок смотрителя§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.longswordofplague_damageModifier": "Модификатор урона §6Полуторный меч чумы§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.emberblade_damageModifier": "Модификатор урона: §6Янтарный клинок§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.hearthflame_damageModifier": "Модификатор урона: §6Пламенное сердце§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.soulkeeper_damageModifier": "Модификатор урона: §6Хранитель душ§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.twistedblade_damageModifier": "Модификатор урона: §6Спиральный клинок§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.soulstealer_damageModifier": "Модификатор урона: §6Похититель душ§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.soulrender_damageModifier": "Модификатор урона: §6Воздаятель душ§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.mjolnir_damageModifier": "Модификатор урона: §6Мьёльнир§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.soulpyre_damageModifier": "Модификатор урона: §6Костёр душ§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.frostfall_damageModifier": "Модификатор урона: §6Морозная гибель§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.moltenedge_damageModifier": "Модификатор урона: §6Расплавленный клинок§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.livyatan_damageModifier": "Модификатор урона: §6Левиафан§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.icewhisper_damageModifier": "Модификатор урона: §6Шепчущий лёд§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.arcanethyst_damageModifier": "Модификатор урона: §6Миститист§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.thunderbrand_damageModifier": "Модификатор урона: §6Громовой меч§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.lichblade_damageModifier": "Модификатор урона: §6Пьющий клинок§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.shadowsting_damageModifier": "Модификатор урона: §6Теневое жало§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.sunfire_damageModifier": "Модификатор урона: §6Солнечный огонь§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.harbinger_damageModifier": "Модификатор урона: §6Предвестник§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.whisperwind_damageModifier": "Модификатор урона: §6Шепчущий лёд§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.emberlash_damageModifier": "Модификатор урона: §6Янтарная плеть§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.waxweaver_damageModifier": "Модификатор урона: §6Воскоплёт§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.hiveheart_damageModifier": "Модификатор урона: §6Сердце улья§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.starsedge_damageModifier": "Модификатор урона: §6Клинок звезды§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.wickpiercer_damageModifier": "Модификатор урона: §6Фитильный пронзатель§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.dreadtide_damageModifier": "Модификатор урона: §6Прилив ужаса§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.tempest_damageModifier": "Модификатор урона: §6Буря§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.flamewind_damageModifier": "Модификатор урона: §6Огненный ветер§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.ribboncleaver_damageModifier": "Модификатор урона: §6Ленточный тесак§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.magiscythe_damageModifier": "Модификатор урона: §6Магическая коса§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.enigma_damageModifier": "Модификатор урона: §6Загадка§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.magispear_damageModifier": "Модификатор урона: §6Магическое копьё§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.magiblade_damageModifier": "Модификатор урона: §6Магический клинок§7", +"simplyswords.weapon_attributes.uniqueDamageModifier.caelestis_damageModifier": "Модификатор урона: §6Небесный§7", + +"simplyswords.weapon_attributes.uniqueAttackSpeed": "§6[Модификаторы скорости атаки уникальных]", +"simplyswords.weapon_attributes.uniqueAttackSpeed.desc": "Рекомендуемая область значений: с -1.0 до -3.7, -1.0 быстрая, а -3.7 медленная.", +"simplyswords.weapon_attributes.uniqueAttackSpeed.brimstone_attackSpeed": "Скорость атаки: §6Серный клеймор§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.thewatcher_attackSpeed": "Скорость атаки: §6Смотрителя§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.stormsedge_attackSpeed": "Скорость атаки: §6Клинок бури§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.stormbringer_attackSpeed": "Скорость атаки: §6Буревестник§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.swordonastick_attackSpeed": "Скорость атаки: §6Меч на палке§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.bramblethorn_attackSpeed": "Скорость атаки: §6Терновый шип§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.watchingwarglaive_attackSpeed": "Скорость атаки: §6Боевой клинок смотрителя§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.longswordofplague_attackSpeed": "Скорость атаки: §6Полуторный меч чумы§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.emberblade_attackSpeed": "Скорость атаки: §6Янтарный клинок§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.hearthflame_attackSpeed": "Скорость атаки: §6Пламенное сердце§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.soulkeeper_attackSpeed": "Скорость атаки: §6Хранитель душ§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.twistedblade_attackSpeed": "Скорость атаки: §6Спиральный клинок§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.soulstealer_attackSpeed": "Скорость атаки: §6Похититель душ§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.soulrender_attackSpeed": "Скорость атаки: §6Воздаятель душ§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.mjolnir_attackSpeed": "Скорость атаки: §6Мьёльнир§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.soulpyre_attackSpeed": "Скорость атаки: §6Костёр душ§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.frostfall_attackSpeed": "Скорость атаки: §6Морозная гибель§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.moltenedge_attackSpeed": "Скорость атаки: §6Расплавленный клинок§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.livyatan_attackSpeed": "Скорость атаки: §6Левиафан§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.icewhisper_attackSpeed": "Скорость атаки: §6Шепчущий лёд§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.arcanethyst_attackSpeed": "Скорость атаки: §6Миститист§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.thunderbrand_attackSpeed": "Скорость атаки: §6Громовой меч§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.lichblade_attackSpeed": "Скорость атаки: §6Пьющий клинок§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.shadowsting_attackSpeed": "Скорость атаки: §6Теневое жало§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.sunfire_attackSpeed": "Скорость атаки: §6Солнечный огонь§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.harbinger_attackSpeed": "Скорость атаки: §6Предвестник§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.whisperwind_attackSpeed": "Скорость атаки: §6Шепчущий лёд§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.emberlash_attackSpeed": "Скорость атаки: §6Янтарная плеть§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.waxweaver_attackSpeed": "Скорость атаки: §6Воскоплёт§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.hiveheart_attackSpeed": "Скорость атаки: §6Сердце улья§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.starsedge_attackSpeed": "Скорость атаки: §6Клинок звезды§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.wickpiercer_attackSpeed": "Скорость атаки: §6Фитильный пронзатель§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.dreadtide_attackSpeed": "Скорость атаки: §6Прилив ужаса§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.tempest_attackSpeed": "Скорость атаки: §6Буря§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.flamewind_attackSpeed": "Скорость атаки: §6Огненный ветер§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.ribboncleaver_attackSpeed": "Скорость атаки: §6Ленточный тесак§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.magiscythe_attackSpeed": "Скорость атаки: §6Магическая коса§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.enigma_attackSpeed": "Скорость атаки: §6Загадка§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.magispear_attackSpeed": "Скорость атаки: §6Магическое копьё§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.magiblade_attackSpeed": "Скорость атаки: §6Магический клинок§7", +"simplyswords.weapon_attributes.uniqueAttackSpeed.caelestis_attackSpeed": "Скорость атаки: §6Небесный§7", + +"simplyswords.loot.enableLootDrops": "Включить выпадение добычи", +"simplyswords.loot.enableLootDrops.desc": "Отключение этого параметра запретит Simply Swords генерировать добычу в сундуках.", +"simplyswords.loot.enableLootInVillages": "Включить выпадение добычи в деревнях", +"simplyswords.loot.enableLootInVillages.desc": "При включении добыча из Simply Swords может появиться в сундуках в деревнях.", +"simplyswords.loot.standardLootTableWeight": "Шанс добычи знамени", +"simplyswords.loot.standardLootTableWeight.desc": "Шанс появления от Железного до Золотого оружия в сундуках. 1.00 = 100%.", +"simplyswords.loot.rareLootTableWeight": "Шанс редкой добычи", +"simplyswords.loot.rareLootTableWeight.desc": "Шанс появления Алмазного оружия в сундуках. 1.00 = 100%.", +"simplyswords.loot.runicLootTableWeight": "Шанс добычи рун", +"simplyswords.loot.runicLootTableWeight.desc": "Шанс появления Рунических скрижалей в сундуках. 1.00 = 100%.", +"simplyswords.loot.uniqueLootTableWeight": "Шанс уникальной добычи", +"simplyswords.loot.uniqueLootTableWeight.desc": "Шанс появления Уникального оружия в сундуках. 1.00 = 100%.", + +"simplyswords.loot.uniqueLootTableOptions": "Таблица добычи уникального оружия", +"simplyswords.loot.uniqueLootTableOptions.desc": "Специальные таблицы добычи в которых будут отображаться уникальные оружия, а их шанс отображается в этой таблице.", + +"simplyswords.loot.disabledUniqueWeaponLoot": "Таблица добычи уникального оружия отключена", +"simplyswords.loot.disabledUniqueWeaponLoot.desc": "§6[Чёрный список добычи]§7\nЗанесение идентификатора любого уникального оружия запретит этому предмету генерироваться в Таблице добычи.\nПредмет всё ещё будет находиться в творческом меню, но будет недоступен в ходе заурядного геймплея в выживании.", + +"simplyswords.loot.enableContainedRemnants.condition": "Требуется весовое значение > 0f для выпадения уникальной добычи.", +"simplyswords.loot.enableContainedRemnants.failTitle": "Недоступен", +"simplyswords.loot.enableContainedRemnants": "Включить Сдержанные остатки", +"simplyswords.loot.enableContainedRemnants.desc": "Изменят ли форму сдержанные остатки. Отключите, если отключили выпадение уникального оружия.", +"simplyswords.general": "Общие настойки", +"simplyswords.general.enableWeaponImpactSounds": "Включить звуки ударов оружия", +"simplyswords.general.weaponImpactSoundsVolume": "Громкость звуков ударов оружия", +"simplyswords.general.enableWeaponFootfalls": "Включить звуки шагов с оснащённым оружием", +"simplyswords.general.enablePassiveParticles": "Включить пассивные частицы", +"simplyswords.general.enableUniqueGemSockets": "Включить уникальные гнёзда для самоцвета", +"simplyswords.general.enableUniqueGemSockets.desc": "Если отключено, слоты для самоцветов больше не будут отображаться на только что сгенерированных Уникального оружия. Не имеет обратной силы.", +"simplyswords.general.compatGobberEndWeaponsUnbreakable": "§a[Совместимость]§7 Включить нерушимые оружия из модов Гоббер и Энда", +"simplyswords.general.compatGobberEndWeaponsUnbreakable.condition": "Требуется мод: Gobber", +"simplyswords.general.compatGobberEndWeaponsUnbreakable.failTitle": "Недоступен", +"simplyswords.general.compatEnableSpellPowerScaling": "§a[Совместимость]§7 Включить шкалирование из мода Spell Power", + +"simplyswords.general.compatEnableSpellPowerScaling.desc": "§a[Если установлен мод Spell Power]§7\nЕсли включено, некоторые эффекты оружия будут шкалироваться вместе с атрибутами Spell Power.", +"simplyswords.general.compatEnableSpellPowerScaling.condition": "Требуется мод: Spell Power", +"simplyswords.general.compatEnableSpellPowerScaling.failTitle": "Недоступен", + +"simplyswords.unique_effects.abilityAbsorptionCap": "Предельное значение эффекта Поглощения", +"simplyswords.unique_effects.abilityAbsorptionCap.desc": "Способности не смогут давать пользователю эффект «Поглощения» сверх этого значения.", + +"simplyswords.unique_effects.watcher": "§6[Смотритель и Боевой клинок смотрителя]§7", +"simplyswords.unique_effects.watcher.watcherChance": "Шанс смотрителя", +"simplyswords.unique_effects.watcher.watcherRadius": "Радиус смотрителя", +"simplyswords.unique_effects.watcher.watcherRestoreAmount": "Количество восстановления Смотрителя", +"simplyswords.unique_effects.watcher.omenAbsorptionCap": "Предел поглощения Предвестия", +"simplyswords.unique_effects.watcher.omenChance": "Шанс Предвестия", +"simplyswords.unique_effects.watcher.omenInstantKillThreshold": "Порог мгновенного убийства Предвестия", + +"simplyswords.unique_effects.steal": "§6[Похититель душ]§7", +"simplyswords.unique_effects.steal.chance": "Шанс похищения", +"simplyswords.unique_effects.steal.duration": "Длительность похищения", +"simplyswords.unique_effects.steal.radius": "Радиус похищения", +"simplyswords.unique_effects.steal.spellScaling": "(Spell Power) множит. урона похищения", +"simplyswords.unique_effects.steal.blindDuration": "Длительность похищения/ослепления", +"simplyswords.unique_effects.steal.invisDuration": "Длительность похищения/невидимости", + +"simplyswords.unique_effects.soulkeeper": "§6[Хранитель душ]§7", +"simplyswords.unique_effects.soulkeeper.chance": "Шанс слияния душ", +"simplyswords.unique_effects.soulkeeper.duration": "Длительность слияния душ", +"simplyswords.unique_effects.soulkeeper.radius": "Радиус слияния душ", + +"simplyswords.unique_effects.soulRend": "§6[Воздаятель душ]§7", +"simplyswords.unique_effects.soulRend.chance": "Шанс раздирания души", +"simplyswords.unique_effects.soulRend.duration": "Длительность раздирания души", +"simplyswords.unique_effects.soulRend.maxStacks": "Макс. суммирования раздирания души", +"simplyswords.unique_effects.soulRend.radius": "Радиус раздирания души", +"simplyswords.unique_effects.soulRend.damageMulti": "Множитель урона раздирания души", +"simplyswords.unique_effects.soulRend.healMulti": "Множитель исцеления раздирания души", +"simplyswords.unique_effects.soulRend.spellScaling": "(Spell Power) множит. урона раздирания души", + +"simplyswords.unique_effects.ferocity": "§6[Спиральный клинок]§7", +"simplyswords.unique_effects.ferocity.chance": "Шанс свирепости", +"simplyswords.unique_effects.ferocity.duration": "Длительность свирепости", +"simplyswords.unique_effects.ferocity.maxStacks": "Макс. суммирования свирепости", +"simplyswords.unique_effects.ferocity.strengthTier": "Усилитель силы свирепости", + +"simplyswords.unique_effects.emberIre": "§6[Янтарный клинок]§7", +"simplyswords.unique_effects.emberIre.chance": "Шанс тлеющей ярости", +"simplyswords.unique_effects.emberIre.duration": "Длительность тлеющей ярости", + +"simplyswords.unique_effects.volcanicFury": "§6[Пламенное сердце]§7", +"simplyswords.unique_effects.volcanicFury.chance": "Шанс бурного пыла", +"simplyswords.unique_effects.volcanicFury.cooldown": "Перезарядка бурного пыла", +"simplyswords.unique_effects.volcanicFury.damage": "Урон бурного пыла", +"simplyswords.unique_effects.volcanicFury.radius": "Радиус бурного пыла", +"simplyswords.unique_effects.volcanicFury.spellScaling": "(Spell Power) множит. урона бурного пыла", + +"simplyswords.unique_effects.storm": "§6[Мьёльнир]§7", +"simplyswords.unique_effects.storm.chance": "Шанс грозы", +"simplyswords.unique_effects.storm.cooldown": "Перезарядка грозы", +"simplyswords.unique_effects.storm.duration": "Длительность грозы", +"simplyswords.unique_effects.storm.frequency": "Частота грозы", +"simplyswords.unique_effects.storm.radius": "Радиус грозы", + +"simplyswords.unique_effects.plague": "§6[Полуторный меч чумы]§7", +"simplyswords.unique_effects.plague.chance": "Шанс чумы", + +"simplyswords.unique_effects.brimstone": "§6[Серный клеймор]§7", +"simplyswords.unique_effects.brimstone.chance": "Шанс серы", + +"simplyswords.unique_effects.bramble": "§6[Терновый шип]§7", +"simplyswords.unique_effects.bramble.Chance": "Шанс тернового шипа", + +"simplyswords.unique_effects.soultether": "§6[Костёр душ]§7", +"simplyswords.unique_effects.soultether.duration": "Длительность узы души", +"simplyswords.unique_effects.soultether.range": "Дальность узы души", +"simplyswords.unique_effects.soultether.radius": "Радиус узы души", +"simplyswords.unique_effects.soultether.duration": "Длительность узы души", +"simplyswords.unique_effects.soultether.igniteDuration": "Длительность узы души/воспламенения", +"simplyswords.unique_effects.soultether.resistanceDuration": "Длительность узы души/сопротивление", + +"simplyswords.unique_effects.frostFury": "§6[Морозная гибель]§7", +"simplyswords.unique_effects.frostFury.chance": "Шанс ледяной ярости", +"simplyswords.unique_effects.frostFury.cooldown": "Перезарядка ледяной ярости", +"simplyswords.unique_effects.frostFury.damage": "Урон ледяной ярости", +"simplyswords.unique_effects.frostFury.duration": "Длительность ледяной ярости", +"simplyswords.unique_effects.frostFury.radius": "Радиус ледяной ярости", +"simplyswords.unique_effects.frostFury.spellScaling": "(Spell Power) множит. урона ледяной ярости", + +"simplyswords.unique_effects.moltenRoar": "§6[Расплавленный клинок]§7", +"simplyswords.unique_effects.moltenRoar.chance": "Шанс плавленного рёва", +"simplyswords.unique_effects.moltenRoar.cooldown": "Перезарядка плавленного рёва", +"simplyswords.unique_effects.moltenRoar.duration": "Длительность плавленного рёва", +"simplyswords.unique_effects.moltenRoar.knockbackStrength": "Сила отбрасывания плавленного рёва", +"simplyswords.unique_effects.moltenRoar.radius": "Радиус плавленного рёва", + +"simplyswords.unique_effects.frostShatter": "§6[Левиафан]§7", +"simplyswords.unique_effects.frostShatter.chance": "Шанс ледяных осколков", +"simplyswords.unique_effects.frostShatter.damage": "Урон ледяных осколков", +"simplyswords.unique_effects.frostShatter.duration": "Длительность ледяных осколков", +"simplyswords.unique_effects.frostShatter.radius": "Радиус ледяных осколков", +"simplyswords.unique_effects.frostShatter.spellScaling": "(Spell Power) множит. урона ледяных осколков", + +"simplyswords.unique_effects.permafrost": "§6[Шепчущий лёд]§7", +"simplyswords.unique_effects.permafrost.cooldown": "Перезарядка вечной мерзлоты", +"simplyswords.unique_effects.permafrost.damage": "Урон вечной мерзлоты", +"simplyswords.unique_effects.permafrost.duration": "Длительность вечной мерзлоты", +"simplyswords.unique_effects.permafrost.radius": "Радиус вечной мерзлоты", +"simplyswords.unique_effects.permafrost.spellScaling": "(Spell Power) множит. урона вечной мерзлоты", + +"simplyswords.unique_effects.arcaneAssault": "§6[Миститист]§7", +"simplyswords.unique_effects.arcaneAssault.chance": "Шанс чародейской атаки", +"simplyswords.unique_effects.arcaneAssault.cooldown": "Перезарядка чародейской атаки", +"simplyswords.unique_effects.arcaneAssault.damage": "Урон чародейской атаки", +"simplyswords.unique_effects.arcaneAssault.duration": "Длительность чародейской атаки", +"simplyswords.unique_effects.arcaneAssault.radius": "Радиус чародейской атаки", +"simplyswords.unique_effects.arcaneAssault.spellScaling": "(Spell Power) множит. урона чародейской атаки", + +"simplyswords.unique_effects.thunderBlitz": "§6[Громовой меч]§7", +"simplyswords.unique_effects.thunderBlitz.chance": "Шанс громового обстрела", +"simplyswords.unique_effects.thunderBlitz.cooldown": "Перезарядка громового обстрела", +"simplyswords.unique_effects.thunderBlitz.damage": "Урон громового обстрела", +"simplyswords.unique_effects.thunderBlitz.radius": "Радиус громового обстрела", +"simplyswords.unique_effects.thunderBlitz.spellScaling": "(Spell Power) множит. урона громового обстрела", + +"simplyswords.unique_effects.stormJolt": "§6[Клинок бури]§7", +"simplyswords.unique_effects.stormJolt.chance": "Шанс грозового удара", +"simplyswords.unique_effects.stormJolt.cooldown": "Перезарядка грозового удара", + +"simplyswords.unique_effects.soulAnguish": "§6[Пьющий клинок]§7", +"simplyswords.unique_effects.soulAnguish.absorptionCap": "Предел поглощения страдания души", +"simplyswords.unique_effects.soulAnguish.cooldown": "Перезарядка страдания души", +"simplyswords.unique_effects.soulAnguish.damage": "Урон страдания души", +"simplyswords.unique_effects.soulAnguish.duration": "Длительность страдания души", +"simplyswords.unique_effects.soulAnguish.heal": "Исцеление страдания души", +"simplyswords.unique_effects.soulAnguish.radius": "Радиус страдания души", +"simplyswords.unique_effects.soulAnguish.range": "Дальность страдания души", +"simplyswords.unique_effects.soulAnguish.spellScaling": "(Spell Power) множит. урона страдания души", + +"simplyswords.unique_effects.shockDeflect": "§6[Буревестник]§7", +"simplyswords.unique_effects.shockDeflect.Cooldown": "Перезарядка шокового отражения", +"simplyswords.unique_effects.shockDeflect.Damage": "Урон шокового отражения", +"simplyswords.unique_effects.shockDeflect.SpellScaling": "(Spell Power) множит. урона шокового отражения", +"simplyswords.unique_effects.shockDeflect.BlockDuration": "Радиус шокового отражения", +"simplyswords.unique_effects.shockDeflect.ParryDuration": "Шанс шокового отражения", + +"simplyswords.unique_effects.shadowmist": "§6[Теневое жало]§7", +"simplyswords.unique_effects.shadowmist.chance": "Шанс теневого тумана", +"simplyswords.unique_effects.shadowmist.cooldown": "Перезарядка теневого тумана", +"simplyswords.unique_effects.shadowmist.damageMulti": "Множитель урона теневого тумана", +"simplyswords.unique_effects.shadowmist.radius": "Радиус теневого тумана", +"simplyswords.unique_effects.shadowmist.blindDuration": "Длительность теневого тумана/ослепления", + +"simplyswords.unique_effects.abyssalStandard": "§6[Знамя бездны]§7", +"simplyswords.unique_effects.abyssalStandard.chance": "Шанс знамени бездны", +"simplyswords.unique_effects.abyssalStandard.cooldown": "Перезарядка знамени бездны", +"simplyswords.unique_effects.abyssalStandard.damage": "Урон знамени бездны", +"simplyswords.unique_effects.abyssalStandard.spellScaling": "(Spell Power) множит. урона знамени бездны", + +"simplyswords.unique_effects.righteousStandard": "§6[Праведное знамя]§7", +"simplyswords.unique_effects.righteousStandard.chance": "Шанс праведного знамени", +"simplyswords.unique_effects.righteousStandard.cooldown": "Перезарядка праведного знамени", +"simplyswords.unique_effects.righteousStandard.damage": "Урон праведного знамени", +"simplyswords.unique_effects.righteousStandard.spellScaling": "(Spell Power) множит. урона праведного знамени", +"simplyswords.unique_effects.righteousStandard.spellScalingHeal": "(Spell Power) множитель ИСЦЕЛЕНИЯ праведного знамени", + +"simplyswords.unique_effects.fatalFlicker": "§6[Шепчущий лёд]§7", +"simplyswords.unique_effects.fatalFlicker.chance": "Шанс смертоносной вспышки", +"simplyswords.unique_effects.fatalFlicker.cooldown": "Перезарядка смертоносной вспышки", +"simplyswords.unique_effects.fatalFlicker.maxStacks": "Макс. суммирования смертоносной вспышки", +"simplyswords.unique_effects.fatalFlicker.radius": "Радиус смертоносной вспышки", +"simplyswords.unique_effects.fatalFlicker.dashVelocity": "Скорость рывка смертоносной вспышки", + +"simplyswords.unique_effects.smoulder": "§6[Янтарная плеть]§7", +"simplyswords.unique_effects.smoulder.cooldown": "Перезарядка тления", +"simplyswords.unique_effects.smoulder.heal": "Процент исцеления тления", +"simplyswords.unique_effects.smoulder.maxStacks": "Макс. суммирования тления", +"simplyswords.unique_effects.smoulder.spellScaling": "(Spell Power) множитель урона тления", + +"simplyswords.unique_effects.waxweave": "§6[Воскоплёт]§7", +"simplyswords.unique_effects.waxweave.cooldown": "Перезарядка выработки воска", +"simplyswords.unique_effects.waxweave.maxStacks": "Макс. суммирования выработки воска", + +"simplyswords.unique_effects.hivemind": "§6[Сердце улья]§7", +"simplyswords.unique_effects.hivemind.cooldown": "Перезарядка коллективного разума", +"simplyswords.unique_effects.hivemind.damage": "Модификатор урона коллективного разума", +"simplyswords.unique_effects.hivemind.duration": "Длительность коллективного разума", + +"simplyswords.unique_effects.celestialSurge": "§6[Клинок звезды]§7", +"simplyswords.unique_effects.celestialSurge.cooldown": "Перезарядка небесного всплеска", +"simplyswords.unique_effects.celestialSurge.duration": "Длительность небесного всплеска", +"simplyswords.unique_effects.celestialSurge.damageModifier": "Множитель урона небесного всплеска", +"simplyswords.unique_effects.celestialSurge.lifestealModifier": "Модификатор небесного всплеска/похищения жизни", +"simplyswords.unique_effects.celestialSurge.stacks": "Суммирования небесного всплеска/спешки", + +"simplyswords.unique_effects.flickerFury": "§6[Фитильный пронзатель]§7", +"simplyswords.unique_effects.flickerFury.cooldown": "Перезарядка вспышки гнева", +"simplyswords.unique_effects.flickerFury.damage": "Модификатор урона вспышки гнева", +"simplyswords.unique_effects.flickerFury.duration": "Длительность вспышки гнева", + +"simplyswords.unique_effects.vortex": "§6[Буря]§7", +"simplyswords.unique_effects.vortex.duration": "Длительность вихря", +"simplyswords.unique_effects.vortex.maxSize": "Макс. размер вихря", +"simplyswords.unique_effects.vortex.maxStacks": "Макс. суммирования вихря", +"simplyswords.unique_effects.vortex.spellScaling": "(Spell Power) множитель урона вихря", + +"simplyswords.unique_effects.voidcaller": "§6[Прилив ужаса]§7", +"simplyswords.unique_effects.voidcaller.compat": "Требуется мод: Eldritch End", +"simplyswords.unique_effects.voidcaller.compat.failTitle": "Недоступен", +"simplyswords.unique_effects.voidcaller.damageModifier": "Модификатор урона призывателя бездны", +"simplyswords.unique_effects.voidcaller.duration": "Длительность призывателя бездны", +"simplyswords.unique_effects.voidcaller.startingTickFrequency": "Частота начала призывателя бездны в тактах", +"simplyswords.unique_effects.voidcaller.corruptionFrequency": "Частота порчи призывателя бездны", +"simplyswords.unique_effects.voidcaller.corruptionPerTick": "Порча в такт призывателя бездны", +"simplyswords.unique_effects.voidcaller.corruptionDuration": "Длительность порчи призывателя бездны", +"simplyswords.unique_effects.voidcaller.corruptionMax": "Макс. количество порчи призывателя бездны", + +"simplyswords.unique_effects.emberstorm": "§6[Огненный ветер]§7", +"simplyswords.unique_effects.emberstorm.cooldown": "Перезарядка бури углей", +"simplyswords.unique_effects.emberstorm.damage": "Урон бури углей", +"simplyswords.unique_effects.emberstorm.spellScaling": "(Spell Power) множитель урона бури углей", +"simplyswords.unique_effects.emberstorm.detonationDamage": "Урон от взрыва бури углей", +"simplyswords.unique_effects.emberstorm.maxHaste": "Макс. количество бури углей/спешки", +"simplyswords.unique_effects.emberstorm.spreadCap": "Предел распространения бури углей", + +"simplyswords.unique_effects.ribbonwrath": "§6[Ленточный тесак]§7", +"simplyswords.unique_effects.ribbonwrath.cooldown": "Перезарядка ленточной ярости", +"simplyswords.unique_effects.ribbonwrath.damageBonusPercent": "Процент бонуса к урону ленточной ярости", +"simplyswords.unique_effects.ribbonwrath.resilienceAmplifier": "Усилитель ленточная ярость/стойкость", + +"simplyswords.unique_effects.magistorm": "§6[Магическая коса]§7", +"simplyswords.unique_effects.magistorm.cooldown": "Перезарядка магической косы", +"simplyswords.unique_effects.magistorm.damage": "Урон магической грозы", +"simplyswords.unique_effects.magistorm.duration": "Длительность магической грозы", +"simplyswords.unique_effects.magistorm.radius": "Радису магической грозы", +"simplyswords.unique_effects.magistorm.repairChance": "Шанс восстановления магической грозы", +"simplyswords.unique_effects.magistorm.spellScaling": "(Spell Power) множитель урона магической грозы", + +"simplyswords.unique_effects.enigma": "§6[Загадка]§7", +"simplyswords.unique_effects.enigma.cooldown": "Перезарядка загадки", +"simplyswords.unique_effects.enigma.chaseRadius": "Радиус преследования загадки", +"simplyswords.unique_effects.enigma.decayRate": "Скорость гниения от загадки", + +"simplyswords.unique_effects.magiblade": "§6[Магический клинок]§7", +"simplyswords.unique_effects.magiblade.cooldown": "Перезарядка магической звуковой скорости", +"simplyswords.unique_effects.magiblade.damageModifier": "Множитель урона магической звуковой скорости", +"simplyswords.unique_effects.magiblade.repelChance": "Шанс отражения магической звуковой скорости", +"simplyswords.unique_effects.magiblade.repelRadius": "Радиус отражения магической звуковой скорости", +"simplyswords.unique_effects.magiblade.sonicDistance": "Расстояние магической звуковой скорости", + +"simplyswords.unique_effects.magislam": "§6[Магическое копьё]§7", +"simplyswords.unique_effects.magislam.cooldown": "Перезарядка магического удара", +"simplyswords.unique_effects.magislam.damageModifier": "Модификатор урона магического удара", +"simplyswords.unique_effects.magislam.radius": "Радиус магического удара", +"simplyswords.unique_effects.magislam.magicChance": "Шанс магии магического удара", +"simplyswords.unique_effects.magislam.magicModifier": "Модификатор магии магического удара", + +"simplyswords.unique_effects.astralShift": "§6[Небесный]§7", +"simplyswords.unique_effects.astralShift.chance": "Шанс избегания таланта: Астральный сдвиг", +"simplyswords.unique_effects.astralShift.cooldown": "Перезарядка таланта: Астральный сдвиг", +"simplyswords.unique_effects.astralShift.damageMax": "Макс. количество урона таланта: Астральный сдвиг", +"simplyswords.unique_effects.astralShift.damageModifier": "Модификатор урона таланта: Астральный сдвиг", +"simplyswords.unique_effects.astralShift.duration": "Продолжительность таланта: Астральный сдвиг", + +"simplyswords.gem_powers": "Рунические и Наполненные таланты самоцветов", +"simplyswords.gem_powers.disabledPowers": "Недоступные таланты самоцветов", +"simplyswords.gem_powers.disabledPowers.desc": "§a[Чёрный список талантов рун]§7\nДобавление таланта в этот перечень запретит доступность Таланта рун.", +"simplyswords.gem_powers.swiftness": "§b[Проворство]§7", +"simplyswords.gem_powers.slow": "§b[Замедление]§7", +"simplyswords.gem_powers.poison": "§b[Отравление]§7", +"simplyswords.gem_powers.freeze": "§b[Заморозка]§7", +"simplyswords.gem_powers.wildfire": "§b[Дикий огонь]§7", +"simplyswords.gem_powers.floating": "§b[Левитация]§7", +"simplyswords.gem_powers.zephyr": "§b[Зефир]§7", +"simplyswords.gem_powers.shielding": "§b[Щит]§7", +"simplyswords.gem_powers.stoneskin": "§b[Каменная кожа]§7", +"simplyswords.gem_powers.trailblaze": "§b[Горящий след]§7", +"simplyswords.gem_powers.weaken": "§b[Ослабление]§7", +"simplyswords.gem_powers.unstable": "§b[Нестабильность]§7", +"simplyswords.gem_powers.activeDefence": "§b[Активная защита]§7", +"simplyswords.gem_powers.frostWard": "§b[Защита от магии льда]§7", +"simplyswords.gem_powers.momentum": "§b[Импульс]§7", +"simplyswords.gem_powers.imbued": "§b[Усиление]§7", +"simplyswords.gem_powers.simplySkills": "Simply Skills: Таланты", +"simplyswords.gem_powers.simplySkills.desc": "§6[Simply Skills: Совместимость со самоцветами]§7\nЭти самоцветы доступны только когда установлен «Simply Skills».", +"simplyswords.gem_powers.simplySkills.condition": "Требуется мод: Simply Skills", +"simplyswords.gem_powers.simplySkills.failTitle": "Недоступен", +"simplyswords.gem_powers.simplySkills.preciseChance": "Шанс таланта: Точность", +"simplyswords.gem_powers.simplySkills.mightyChance": "Шанс таланта: Мощь", +"simplyswords.gem_powers.simplySkills.stealthyChance": "Шанс таланта: Незаметность", +"simplyswords.gem_powers.simplySkills.renewedChance": "Шанс таланта: Обновлённый", +"simplyswords.gem_powers.simplySkills.leapingChance": "Шанс таланта: Скачок", +"simplyswords.gem_powers.simplySkills.spellshieldChance": "Шанс таланта: Магический щит", + +"simplyswords_main.option.status_effects.echoDamage": "Базовый урон от Эхо", + +"simplyswords.config.basic_settings.chance": "Шанс", +"simplyswords.config.basic_settings.chance.desc": "Процентный шанс появления эффекта.", +"simplyswords.config.basic_settings.duration": "Продолжительность", +"simplyswords.config.basic_settings.duration.desc": "Продолжительность эффекта в тактах.", +"simplyswords.config.basic_settings.radius": "Дальность", +"simplyswords.config.basic_settings.radius.desc": "Дальность эффекта в блоках.", +"simplyswords.config.basic_settings.frequency": "Частота", +"simplyswords.config.basic_settings.frequency.desc": "Периодичность появления эффекта '1 раз за Н/Д тактов'", +"simplyswords.config.basic_settings.cooldown": "Перезарядка", +"simplyswords.config.basic_settings.cooldown.desc": "Задержка в тактах после активации эффекта." +"simplyswords.config.basic_settings.chance": "Шанс", +"simplyswords.config.basic_settings.chance.desc": "Процентный шанс появления эффекта.", +"simplyswords.config.basic_settings.duration": "Продолжительность", +"simplyswords.config.basic_settings.duration.desc": "Продолжительность эффекта в тактах.", +"simplyswords.config.basic_settings.radius": "Дальность", +"simplyswords.config.basic_settings.radius.desc": "Дальность эффекта в блоках.", +"simplyswords.config.basic_settings.frequency": "Частота", +"simplyswords.config.basic_settings.frequency.desc": "Периодичность появления эффекта '1 раз за Н/Д тактов'", +"simplyswords.config.basic_settings.cooldown": "Перезарядка", +"simplyswords.config.basic_settings.cooldown.desc": "Задержка в тактах после активации эффекта." } diff --git a/common/src/main/resources/assets/simplyswords/lang/zh_cn.json b/common/src/main/resources/assets/simplyswords/lang/zh_cn.json index 568ad3bc..7a0a8575 100644 --- a/common/src/main/resources/assets/simplyswords/lang/zh_cn.json +++ b/common/src/main/resources/assets/simplyswords/lang/zh_cn.json @@ -124,7 +124,7 @@ "item.simplyswords.magiblade": "秘法双头剑", "item.simplyswords.caelestis": "星阙", - + "item.simplyswords.runic_tablet": "符文石板", "item.simplyswords.runefused_gem": "符文宝石", "item.simplyswords.netherfused_gem": "狱灵宝石", @@ -531,13 +531,13 @@ "item.simplyswords.magispear.event2": "腐朽遗杖似乎对黑暗有一些反应", - + "effect.simplyswords.freeze": "冻结", "effect.simplyswords.omen": "预兆", "effect.simplyswords.watcher": "守望", - "effect.simplyswords.electric": "闪电", + "effect.simplyswords.storm": "闪电", "effect.simplyswords.wildfire": "野火", "effect.simplyswords.echo": "共鸣", "effect.simplyswords.ward": "加护", @@ -897,7 +897,7 @@ "item.simplyswords.magispearsworditem.tooltip7": "随后进行下砸攻击,", "item.simplyswords.magispearsworditem.tooltip8": "伤害周围所有敌人。", "item.simplyswords.magispearsworditem.tooltip9": "你在跃起期间无敌。", - + "item.simplyswords.caelestissworditem.tooltip1": "独特效果:斗转星移", "item.simplyswords.caelestissworditem.tooltip2": "装备这个物品时,", "item.simplyswords.caelestissworditem.tooltip3": "将获得概率完全", @@ -916,7 +916,7 @@ "item.simplyswords.poweredrelicsworditem.tooltip2": "更强的能量从中逸散。", - + "item.simplyswords.levitationsworditem.tooltip1": "符文之力:漂浮", "item.simplyswords.uniquesworditem.runefused_power.float": "[ 符文附加:漂浮 ]", "item.simplyswords.levitationsworditem.tooltip2": "击中时概率反转", @@ -961,11 +961,11 @@ "item.simplyswords.unstablesworditem.tooltip2": "周期性给予持有者", "item.simplyswords.unstablesworditem.tooltip3": "不稳定的状态效果。", "item.simplyswords.activedefencesworditem.tooltip1": "符文之力:主动防御", - "item.simplyswords.uniquesworditem.runefused_power.activedefence": "[ 符文附加:主动防御 ]", + "item.simplyswords.uniquesworditem.runefused_power.active_defence": "[ 符文附加:主动防御 ]", "item.simplyswords.activedefencesworditem.tooltip2": "周期性向周围敌对生物射箭", "item.simplyswords.activedefencesworditem.tooltip3": "(发动需要拥有箭矢)。", "item.simplyswords.frostwardsworditem.tooltip1": "符文之力:霜卫", - "item.simplyswords.uniquesworditem.runefused_power.frostward": "[ 符文附加:霜卫 ]", + "item.simplyswords.uniquesworditem.runefused_power.frost_ward": "[ 符文附加:霜卫 ]", "item.simplyswords.frostwardsworditem.tooltip2": "周期性向周围敌对生物", "item.simplyswords.frostwardsworditem.tooltip3": "发射能减速敌人的雪球。", "item.simplyswords.momentumsworditem.tooltip1": "符文之力:动能", @@ -995,8 +995,8 @@ "item.simplyswords.runic_tablet.tooltip3": "也可用来修", "item.simplyswords.runic_tablet.tooltip4": "复独特武器。", - - + + "item.simplyswords.uniquesworditem.netherfused_power.echo": "[ 狱灵附加:共鸣 ]", "item.simplyswords.uniquesworditem.netherfused_power.echo.description": "你的武器会为目标附着", "item.simplyswords.uniquesworditem.netherfused_power.echo.description2": "共鸣印记,能在短暂延", @@ -1086,7 +1086,7 @@ "item.simplyswords.uniquesworditem.netherfused_power.deception.description": "使用闪避能力规", "item.simplyswords.uniquesworditem.netherfused_power.deception.description2":"避攻击后,有概", "item.simplyswords.uniquesworditem.netherfused_power.deception.description3":"率免除高亮效果。", - + "item.simplyswords.common.blacklisteffect": "能力已被禁用", "item.simplyswords.common.showtooltip": "- 按§2ALT§7以查看宝石槽 -", "item.simplyswords.common.showtooltip.info": "- 按§2ALT§7以查看详情 -", @@ -1103,621 +1103,500 @@ "item.simplyswords.compat.scaleHealing": "§7此能力与§a治愈§7法术强度相关", - "text.autoconfig.simplyswords_main.title" : "简易刀剑", - "text.autoconfig.simplyswords_main.category.general" : "整体", - "text.autoconfig.simplyswords_main.category.gem_effects" : "宝石效果", - "text.autoconfig.simplyswords_main.category.loot" : "战利品", - "text.autoconfig.simplyswords_main.category.runic_effects" : "符文效果", - "text.autoconfig.simplyswords_main.category.status_effects" : "状态效果", - "text.autoconfig.simplyswords_main.category.unique_effects" : "独特效果", - "text.autoconfig.simplyswords_main.category.weapon_attributes" : "武器属性", - - - - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_positiveDamageModifier.@PrefixText" : "§a[武器属性配置]§7\n§4客户端与服务端§7中,这些值应该一致。\n武器的伤害可通过调整它们的权重来调节。\n这会直接影响伤害,但不等于游戏中的外显数值。\n计算方式:材质伤害+基础伤害+伤害增益数-伤害削减数=外显数值\n需要重启游戏来应用更改。\n\n§a[伤害增益数]§7\n使用例:设为3将提升3点外显伤害。", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_positiveDamageModifier": "长剑 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twinblade_positiveDamageModifier": "双头剑 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.rapier_positiveDamageModifier": "细剑 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.katana_positiveDamageModifier": "武士刀 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sai_positiveDamageModifier": "三叉刺 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.spear_positiveDamageModifier": "矛 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.glaive_positiveDamageModifier": "长柄刀 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.warglaive_positiveDamageModifier": "战刃 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.cutlass_positiveDamageModifier": "弯刀 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.claymore_positiveDamageModifier": "阔剑 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greataxe_positiveDamageModifier": "巨斧 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greathammer_positiveDamageModifier": "巨锤 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.chakram_positiveDamageModifier": "环刃 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.scythe_positiveDamageModifier": "长柄镰 + 伤害增益数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.halberd_positiveDamageModifier": "戟 + 伤害增益数", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_negativeDamageModifier.@PrefixText" : "§a[伤害削减数]§7\n将此值设为3将降低3点武器外显数值。", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_negativeDamageModifier": "长剑 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twinblade_negativeDamageModifier": "双头剑 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.rapier_negativeDamageModifier": "细剑 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.katana_negativeDamageModifier": "武士刀 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sai_negativeDamageModifier": "三叉刺 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.spear_negativeDamageModifier": "矛 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.glaive_negativeDamageModifier": "长柄刀 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.warglaive_negativeDamageModifier": "战刃 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.cutlass_negativeDamageModifier": "弯刀 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.claymore_negativeDamageModifier": "阔剑 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greataxe_negativeDamageModifier": "巨斧 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greathammer_negativeDamageModifier": "巨锤 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.chakram_negativeDamageModifier": "环刃 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.scythe_negativeDamageModifier": "长柄镰 - 伤害削减数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.halberd_negativeDamageModifier": "戟 - 伤害削减数", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.iron_damageModifier.@PrefixText" : "§a[基础伤害]§7\n伤害调整数将在此值的基础上进行加减运算。", - "text.autoconfig.simplyswords_main.option.weapon_attributes.iron_damageModifier": "铁制武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gold_damageModifier": "金制武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.diamond_damageModifier": "钻石武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.netherite_damageModifier": "下界合金武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.runic_damageModifier": "符文武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.adamantite_damageModifier": "精金武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.aquarium_damageModifier": "激水武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.banglum_damageModifier": "聚爆石武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.carmot_damageModifier": "点金石武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.kyber_damageModifier": "凯伯武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.mythril_damageModifier": "秘银武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.orichalcum_damageModifier": "山铜武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.durasteel_damageModifier": "韧钢武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.osmium_damageModifier": "锇制武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.prometheum_damageModifier": "钷制武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.quadrillum_damageModifier": "兆金武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.runite_damageModifier": "符石武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.starPlatinum_damageModifier": "星辰铂金武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.bronze_damageModifier": "青铜武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.copper_damageModifier": "铜制武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.steel_damageModifier": "钢制武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.palladium_damageModifier": "钯金武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormyx_damageModifier": "飓霆武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.celestium_damageModifier": "倚天武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.metallurgium_damageModifier": "炼金武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gobber_damageModifier": "戈伯武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gobberNether_damageModifier": "下界戈伯武器 基础伤害", - "text.autoconfig.simplyswords_main.option.weapon_attributes.gobberEnd_damageModifier": "末地戈伯武器 基础伤害", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_attackSpeed.@PrefixText" : "§a[攻速调整数]§7\n推荐范围:-1.0至-3.7,-1.0快,-3.7慢。", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longsword_attackSpeed": "长剑 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twinblade_attackSpeed": "双头剑 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.rapier_attackSpeed": "细剑 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.katana_attackSpeed": "武士刀 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sai_attackSpeed": "三叉刺 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.spear_attackSpeed": "矛 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.glaive_attackSpeed": "长柄刀 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.warglaive_attackSpeed": "战刃 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.cutlass_attackSpeed": "弯刀 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.claymore_attackSpeed": "阔剑 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greataxe_attackSpeed": "巨斧 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.greathammer_attackSpeed": "巨锤 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.chakram_attackSpeed": "环刃 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.scythe_attackSpeed": "长柄镰 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.halberd_attackSpeed": "戟 攻速调整数", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_damageModifier.@PrefixText" : "§6[独特武器属性配置]§7\n独特武器有所不同,且只有一个调整参数。\n这会直接影响伤害,但不等于游戏中的外显数值。\n计算方式:原版下界合金工具伤害+伤害调整数=外显数值。\n\n§6[伤害增益数]§7\n使用例:设为3将提升3点外显伤害。", - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_damageModifier": "§6硫磺阔剑§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thewatcher_damageModifier": "§6守望阔剑§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormsedge_damageModifier": "§6风暴之刃§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormbringer_damageModifier": "§6风暴使者§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.swordonastick_damageModifier": "绑棍的长剑 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.bramblethorn_damageModifier": "§6棘刺§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.watchingwarglaive_damageModifier": "§6守望战刃§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longswordofplague_damageModifier": "§6瘟疫长剑§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberblade_damageModifier": "§6余烬之刃§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hearthflame_damageModifier": "§6炉火巨锤§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulkeeper_damageModifier": "§6聚魂§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twistedblade_damageModifier": "§6扭曲波刃剑§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulstealer_damageModifier": "§6窃魂§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulrender_damageModifier": "§6裂魂§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.mjolnir_damageModifier": "§6雷神之锤§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulpyre_damageModifier": "§6葬魂§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.frostfall_damageModifier": "§6霜降§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.moltenedge_damageModifier": "§6熔火§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.livyatan_damageModifier": "§6利维坦§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.icewhisper_damageModifier": "§6冰语§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.arcanethyst_damageModifier": "§6奥术紫晶戟§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thunderbrand_damageModifier": "§6纵雷§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.lichblade_damageModifier": "§6巫妖巨剑§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.shadowsting_damageModifier": "§6影刺§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sunfire_damageModifier": "§6日炎§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.harbinger_damageModifier": "§6噩兆§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.whisperwind_damageModifier": "§6风之低语§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberlash_damageModifier": "§6余烬鞭挞§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.waxweaver_damageModifier": "§6织蜡§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hiveheart_damageModifier": "§6群蜂之心§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.starsedge_damageModifier": "§6星芒§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.wickpiercer_damageModifier": "§6穿芯§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.dreadtide_damageModifier": "§6怖潮§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.tempest_damageModifier": "§6烈风§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.flamewind_damageModifier": "§6燎原§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.ribboncleaver_damageModifier": "§6荣缎劈刀§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiscythe_damageModifier": "§6秘法之镰§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.enigma_damageModifier": "§6谜风§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magispear_damageModifier": "§6秘法之矛§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiblade_damageModifier": "§6秘法双头剑§7 伤害调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.caelestis_damageModifier": "§6星阙§7 伤害调整数", - - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_attackSpeed.@PrefixText" : "§a[攻速调整数]§7\n推荐范围:-1.0至-3.7,-1.0快,-3.7慢。", - "text.autoconfig.simplyswords_main.option.weapon_attributes.brimstone_attackSpeed": "§6硫磺阔剑§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thewatcher_attackSpeed": "§6守望阔剑§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormsedge_attackSpeed": "§6风暴之刃§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.stormbringer_attackSpeed": "§6风暴使者§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.swordonastick_attackSpeed": "§6绑棍的长剑 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.bramblethorn_attackSpeed": "§6棘刺§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.watchingwarglaive_attackSpeed": "§6守望战刃§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.longswordofplague_attackSpeed": "§6瘟疫长剑§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberblade_attackSpeed": "§6余烬之刃§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hearthflame_attackSpeed": "§6炉火巨锤§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulkeeper_attackSpeed": "§6聚魂§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.twistedblade_attackSpeed": "§6扭曲波刃剑§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulstealer_attackSpeed": "§6窃魂§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulrender_attackSpeed": "§6裂魂§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.mjolnir_attackSpeed": "§6雷神之锤§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.soulpyre_attackSpeed": "§6葬魂§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.frostfall_attackSpeed": "§6霜降§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.moltenedge_attackSpeed": "§6熔火§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.livyatan_attackSpeed": "§6利维坦§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.icewhisper_attackSpeed": "§6冰语§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.arcanethyst_attackSpeed": "§6奥术紫晶戟§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.thunderbrand_attackSpeed": "§6纵雷§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.lichblade_attackSpeed": "§6巫妖巨剑§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.shadowsting_attackSpeed": "§6影刺§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.sunfire_attackSpeed": "§6日炎§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.harbinger_attackSpeed": "§6噩兆§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.whisperwind_attackSpeed": "§6风之低语§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.emberlash_attackSpeed": "§6余烬鞭挞§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.waxweaver_attackSpeed": "§6织蜡§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.hiveheart_attackSpeed": "§6群蜂之心§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.starsedge_attackSpeed": "§6星芒§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.wickpiercer_attackSpeed": "§6穿芯§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.dreadtide_attackSpeed": "§6怖潮§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.tempest_attackSpeed": "§6烈风§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.flamewind_attackSpeed": "§6燎原§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.ribboncleaver_attackSpeed": "§6荣缎劈刀§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiscythe_attackSpeed": "§6秘法之镰§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.enigma_attackSpeed": "§6谜风§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magispear_attackSpeed": "§6秘法之矛§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.magiblade_attackSpeed": "§6秘法双头剑§7 攻速调整数", - "text.autoconfig.simplyswords_main.option.weapon_attributes.caelestis_attackSpeed": "§6星阙§7 攻速调整数", - - - - "text.autoconfig.simplyswords_main.option.runic_effects.enableActiveDefence.@PrefixText" : "§a[符文能力启用项]§7\n禁用符文能力将防止它被获取。", - "text.autoconfig.simplyswords_main.option.runic_effects.enableActiveDefence": "启用 主动防御", - "text.autoconfig.simplyswords_main.option.runic_effects.enableFloat": "启用 漂浮", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterFloat": "启用 符能增强版漂浮", - "text.autoconfig.simplyswords_main.option.runic_effects.enableFreeze": "启用 冰冻", - "text.autoconfig.simplyswords_main.option.runic_effects.enableShielding": "启用 庇佑", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterShielding": "启用 符能增强版庇佑", - "text.autoconfig.simplyswords_main.option.runic_effects.enableSlow": "启用 缓速", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterSlow": "启用 符能增强版缓速", - "text.autoconfig.simplyswords_main.option.runic_effects.enableStoneskin": "启用 石肤", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterStoneskin": "启用 符能增强版石肤", - "text.autoconfig.simplyswords_main.option.runic_effects.enableSwiftness": "启用 极速", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterSwiftness": "启用 符能增强版极速", - "text.autoconfig.simplyswords_main.option.runic_effects.enableTrailblaze": "启用 焰痕", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterTrailblaze": "启用 符能增强版焰痕", - "text.autoconfig.simplyswords_main.option.runic_effects.enableWeaken": "启用 弱化", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterWeaken": "启用 符能增强版弱化", - "text.autoconfig.simplyswords_main.option.runic_effects.enableZephyr": "启用 微风", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterZephyr": "启用 符能增强版微风", - "text.autoconfig.simplyswords_main.option.runic_effects.enableFrostWard": "启用 霜卫", - "text.autoconfig.simplyswords_main.option.runic_effects.enableWildfire": "启用 野火", - "text.autoconfig.simplyswords_main.option.runic_effects.enableUnstable": "启用 不稳定", - "text.autoconfig.simplyswords_main.option.runic_effects.enableMomentum": "启用 动能", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterMomentum": "启用 符能增强版动能", - "text.autoconfig.simplyswords_main.option.runic_effects.enableImbued": "启用 淬魔", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterImbued": "启用 符能增强版淬魔", - "text.autoconfig.simplyswords_main.option.runic_effects.enablePincushion": "启用 针垫", - "text.autoconfig.simplyswords_main.option.runic_effects.enableGreaterPincushion": "启用 符能增强版针垫", - "text.autoconfig.simplyswords_main.option.runic_effects.enableWard": "启用 加护", - "text.autoconfig.simplyswords_main.option.runic_effects.enableImmolate": "启用 献祭", - - "text.autoconfig.simplyswords_main.option.loot.enableLootDrops.@Tooltip" : "禁用此项将防止本模组的物品作为战利品出现在箱子中。", - "text.autoconfig.simplyswords_main.option.loot.enableLootDrops.@PrefixText" : "§6[战利品启用项]§7\n禁用选项将防止它作为战利品出现在箱子中。\n这个物品仍然会出现在创造模式物品栏中,但它在正常的生存模式下已经无法获取。", - "text.autoconfig.simplyswords_main.option.loot.enableLootDrops": "启用战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableLootInVillages.@Tooltip" : "启用时,简易刀剑的战利品可生成在村庄的箱子中。", - "text.autoconfig.simplyswords_main.option.loot.enableLootInVillages": "启用村庄战利品获取", - "text.autoconfig.simplyswords_main.option.loot.standardLootTableWeight.@Tooltip": "铁或金(铁>金)制武器出现在箱子中的概率。1.00 = 100%。", - "text.autoconfig.simplyswords_main.option.loot.standardLootTableWeight": "一般武器出现概率", - "text.autoconfig.simplyswords_main.option.loot.rareLootTableWeight.@Tooltip": "钻石武器出现在箱子中的概率。1.00 = 100%。", - "text.autoconfig.simplyswords_main.option.loot.rareLootTableWeight": "稀有武器出现概率", - "text.autoconfig.simplyswords_main.option.loot.runicLootTableWeight.@Tooltip": "符文武器出现在箱子中的概率。1.00 = 100%。", - "text.autoconfig.simplyswords_main.option.loot.runicLootTableWeight": "符文武器出现概率", - "text.autoconfig.simplyswords_main.option.loot.uniqueLootTableWeight.@Tooltip": "独特武器出现在箱子中的概率。1.00 = 100%。", - "text.autoconfig.simplyswords_main.option.loot.uniqueLootTableWeight": "独特武器出现概率", - "text.autoconfig.simplyswords_main.option.loot.enableContainedRemnants.@Tooltip": "是否强能容器能够改变形态。若已禁用独特武器掉落,请禁用此项。", - "text.autoconfig.simplyswords_main.option.loot.enableContainedRemnants": "启用强能容器", - "text.autoconfig.simplyswords_main.option.loot.enableBrimstone": "硫磺阔剑 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableTheWatcher": "守望阔剑 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableStormsEdge": "风暴之刃 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableStormbringer": "风暴使者 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableSwordOnAStick": "绑棍的长剑 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableBramblethorn": "棘刺 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableWatchingWarglaive": "守望战刃 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableLongswordOfThePlague": "瘟疫长剑 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableEmberblade": "余烬之刃 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableHearthflame": "炉火巨锤 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableSoulkeeper": "聚魂 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableTwistedBlade": "扭曲波刃剑 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableSoulstealer": "窃魂 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableSoulrender": "裂魂 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableMjolnir": "雷神之锤 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableSoulpyre": "葬魂 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableFrostfall": "霜降 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableMoltenEdge": "熔火 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableLivyatan": "利维坦 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableIcewhisper": "冰语 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableArcanethyst": "奥术紫晶戟 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableThunderbrand": "纵雷 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableSlumberingLichblade": "巫妖巨剑 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableShadowsting": "影刺 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableDormantRelic": "沉眠遗剑 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableWhisperwind": "风之低语 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableEmberlash": "余烬鞭挞 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableWaxweaver": "织蜡 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableHiveheart": "群蜂之心 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableStarsEdge": "星芒 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableWickpiercer": "穿芯 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableTempest": "烈风 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableFlamewind": "燎原 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableRibboncleaver": "荣缎劈刀 可通过战利品获取", - "text.autoconfig.simplyswords_main.option.loot.enableCaelestis": "星阙 可通过战利品获取", - - "text.autoconfig.simplyswords_main.option.general.enableWeaponImpactSounds": "启用武器击中音效", - "text.autoconfig.simplyswords_main.option.general.weaponImpactSoundsVolume": "击中音效音量", - "text.autoconfig.simplyswords_main.option.general.enableWeaponFootfalls": "启用武器脚步声", - "text.autoconfig.simplyswords_main.option.general.enablePassiveParticles": "启用被动粒子效果", - "text.autoconfig.simplyswords_main.option.general.enableUniqueGemSockets.@Tooltip" : "若禁用,宝石槽将不再出现在新获取的独特武器上。不具备追溯效力。", - "text.autoconfig.simplyswords_main.option.general.enableUniqueGemSockets": "启用独特武器宝石槽", - "text.autoconfig.simplyswords_main.option.general.compatGobberEndWeaponsUnbreakable": "§a[兼容]§7 启用戈伯模组中,不可破坏的末地戈伯武器", - "text.autoconfig.simplyswords_main.option.general.compatEnableSpellPowerScaling.@Tooltip" : "§a[安装Spell Power后]§7\n若启用,一些武器的能力将与法术强度属性相挂钩。", - "text.autoconfig.simplyswords_main.option.general.compatEnableSpellPowerScaling": "§a[兼容]§7 启用法术强度关联性", - - "text.autoconfig.simplyswords_main.option.unique_effects.abilityAbsorptionCap" : "伤害吸收上限", - "text.autoconfig.simplyswords_main.option.unique_effects.abilityAbsorptionCap.@Tooltip" : "所有能力给予的伤害吸收值都不能大于此值", - - "text.autoconfig.simplyswords_main.option.unique_effects.watcherChance.@PrefixText" : "§6[守望阔剑 & 守望战刃]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.watcherChance": "守望阔剑 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.watcherRestoreAmount": "守望阔剑 生命回复量", - "text.autoconfig.simplyswords_main.option.unique_effects.watcherRadius": "守望阔剑 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.omenChance": "预兆 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.omenAbsorptionCap": "预兆 伤害吸收上限", - "text.autoconfig.simplyswords_main.option.unique_effects.omenInstantKillThreshold": "预兆 秒杀阈值", - - "text.autoconfig.simplyswords_main.option.unique_effects.stealChance.@PrefixText" : "§6[窃魂]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.stealChance": "灵魂窃取 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.stealDuration": "灵魂窃取 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.stealInvisDuration": "灵魂窃取 隐身时长", - "text.autoconfig.simplyswords_main.option.unique_effects.stealBlindDuration": "灵魂窃取 致盲时长", - "text.autoconfig.simplyswords_main.option.unique_effects.stealRadius": "灵魂窃取 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.stealSpellScaling": "灵魂窃取 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldChance.@PrefixText" : "§6[聚魂]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldChance": "灵魂融合 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldDuration": "灵魂融合 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.soulMeldRadius": "灵魂融合 范围", - - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendChance.@PrefixText" : "§6[裂魂]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendChance": "灵魂撕裂 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendDuration": "灵魂撕裂 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendDamageMulti": "灵魂撕裂 伤害倍率", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendHealMulti": "灵魂撕裂 治疗量倍率", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendRadius": "灵魂撕裂 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendMaxStacks": "灵魂撕裂 最大存储量", - "text.autoconfig.simplyswords_main.option.unique_effects.soulrendDamageSpellScaling": "灵魂撕裂 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityChance.@PrefixText" : "§6[扭曲波刃剑]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityChance": "凶猛 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityDuration": "凶猛 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityMaxStacks": "凶猛 最大存储量", - "text.autoconfig.simplyswords_main.option.unique_effects.ferocityStrengthTier": "凶猛 力量等级", - - "text.autoconfig.simplyswords_main.option.unique_effects.emberIreChance.@PrefixText" : "§6[余烬之刃]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.emberIreChance": "余烬怒火 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.emberIreDuration": "余烬怒火 时长", - - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryChance.@PrefixText" : "§6[炉火巨锤]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryChance": "火山之怒 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryRadius": "火山之怒 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryCooldown": "火山之怒 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFuryDamage": "火山之怒 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.volcanicFurySpellScaling": "火山之怒 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.stormChance.@PrefixText" : "§6[雷神之锤]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.stormChance": "风暴 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.stormRadius": "风暴 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.stormCooldown": "风暴 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.stormFrequency": "风暴 频率", - "text.autoconfig.simplyswords_main.option.unique_effects.stormDuration": "风暴 持续时间", - - "text.autoconfig.simplyswords_main.option.unique_effects.plagueChance.@PrefixText" : "§6[瘟疫长剑]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.plagueChance": "瘟疫 概率", - - "text.autoconfig.simplyswords_main.option.unique_effects.brimstoneChance.@PrefixText" : "§6[硫磺阔剑]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.brimstoneChance": "硫磺 概率", - - "text.autoconfig.simplyswords_main.option.unique_effects.brambleChance.@PrefixText" : "§6[棘刺]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.brambleChance": "木棘 概率", - - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherRange.@PrefixText" : "§6[葬魂]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherRange": "灵魂锁链 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherRadius": "灵魂锁链 半径", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherDuration": "灵魂锁链 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherIgniteDuration": "灵魂锁链 点燃时长", - "text.autoconfig.simplyswords_main.option.unique_effects.soultetherResistanceDuration": "灵魂锁链 抗性提升时长", - - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryCooldown.@PrefixText" : "§6[霜降]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryCooldown": "霜怒 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryRadius": "霜怒 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryDamage": "霜怒 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryChance": "霜怒 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFuryDuration": "霜怒 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.frostFurySpellScaling": "霜怒 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarCooldown.@PrefixText" : "§6[熔火]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarCooldown": "狂咆之炎 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarRadius": "狂咆之炎 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarKnockbackStrength": "狂咆之炎 击退力度", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarChance": "狂咆之炎 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.moltenRoarDuration": "狂咆之炎 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterRadius.@PrefixText" : "§6[利维坦]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterRadius": "冰解 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterDamage": "冰解 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterChance": "冰解 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterDuration": "冰解 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.frostShatterSpellScaling": "冰解 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostRadius.@PrefixText" : "§6[冰语]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostRadius": "永冻 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostDamage": "永冻 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostCooldown": "永冻 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostDuration": "永冻 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.permafrostSpellScaling": "永冻 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultRadius.@PrefixText" : "§6[奥术紫晶戟]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultRadius": "奥术之力 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultDamage": "奥术之力 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultCooldown": "奥术之力 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultChance": "奥术之力 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultDuration": "奥术之力 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.arcaneAssaultSpellScaling": "奥术之力 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzRadius.@PrefixText" : "§6[纵雷]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzRadius": "霆闪 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzDamage": "霆闪 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzCooldown": "霆闪 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzChance": "霆闪 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.thunderBlitzSpellScaling": "霆闪 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.stormJoltCooldown.@PrefixText" : "§6[风暴之刃]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.stormJoltCooldown": "霆闪 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.stormJoltChance": "霆闪 概率", - - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishRadius.@PrefixText" : "§6[巫妖巨剑]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishRadius": "悲魂 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishAbsorptionCap": "悲魂 伤害吸收上限", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishDamage": "悲魂 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishCooldown": "悲魂 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishDuration": "悲魂 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishHeal": "悲魂 治疗量", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishRange": "悲魂 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.soulAnguishSpellScaling": "悲魂 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectBlockDuration.@PrefixText" : "§6[风暴使者]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectBlockDuration": "冲震 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectDamage": "冲震 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectCooldown": "冲震 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectParryDuration": "冲震 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.shockDeflectSpellScaling": "冲震 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistCooldown.@PrefixText" : "§6[影刺]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistCooldown": "遮影 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistChance": "遮影 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistDamageMulti": "遮影 伤害倍率", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistBlindDuration": "遮影 致盲时长", - "text.autoconfig.simplyswords_main.option.unique_effects.shadowmistRadius": "遮影 范围", - - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardCooldown.@PrefixText" : "§6[深渊战旗]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardCooldown": "深渊战旗 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardChance": "深渊战旗 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardDamage": "深渊战旗 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.abyssalStandardSpellScaling": "深渊战旗 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardCooldown.@PrefixText" : "§6[正义战旗]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardCooldown": "正义战旗 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardChance": "正义战旗 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardDamage": "正义战旗 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardSpellScaling": "正义战旗 法术强度伤害倍数", - "text.autoconfig.simplyswords_main.option.unique_effects.righteousStandardSpellScalingHeal": "正义战旗 法术强度治疗乘数", - - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerCooldown.@PrefixText" : "§6[风之低语]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerCooldown": "绝息一闪 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerChance": "绝息一闪 概率", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerRadius": "绝息一闪 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerMaxStacks": "绝息一闪 效果叠加上限", - "text.autoconfig.simplyswords_main.option.unique_effects.fatalFlickerDashVelocity": "绝息一闪 突进速度", - - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderCooldown.@PrefixText" : "§6[余烬鞭挞]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderCooldown": "隐燃 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderMaxStacks": "隐燃 效果叠加上限", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderHeal": "隐燃 恢复百分比", - "text.autoconfig.simplyswords_main.option.unique_effects.smoulderSpellScaling": "隐燃 法术强度伤害倍数", - - "text.autoconfig.simplyswords_main.option.unique_effects.waxweaveCooldown.@PrefixText" : "§6[织蜡]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.waxweaveCooldown": "织蜡 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.waxweaveMaxStacks": "织蜡 效果叠加上限", - - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindCooldown.@PrefixText" : "§6[群蜂之心]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindCooldown": "蜂巢思维 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindDuration": "蜂巢思维 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.hivemindDamage": "蜂巢思维 伤害", - - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeCooldown.@PrefixText" : "§6[星芒]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeCooldown": "星涌 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeDuration": "星涌 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeStacks": "星涌 急迫效果叠加上限", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeDamageModifier": "星涌 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.celestialSurgeLifestealModifier": "星涌 生命窃取", - - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryCooldown.@PrefixText" : "§6[穿芯]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryCooldown": "烛焰之怒 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryDuration": "烛焰之怒 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.flickerFuryDamage": "烛焰之怒 伤害", - - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerDuration.@PrefixText" : "§6[怖潮]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerDuration": "虚空召唤 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerStartingTickFrequency": "虚空召唤 起始刻检测频率", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerDamageModifier": "虚空召唤 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionFrequency": "虚空召唤 侵蚀频率", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionPerTick": "虚空召唤 每刻侵蚀值", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionDuration": "虚空召唤 侵蚀持续时间", - "text.autoconfig.simplyswords_main.option.unique_effects.voidcallerCorruptionMax": "虚空召唤 最大侵蚀值", - - "text.autoconfig.simplyswords_main.option.unique_effects.vortexDuration.@PrefixText" : "§6[烈风]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexDuration": "涡流 时长", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexMaxSize": "涡流 最大范围", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexMaxStacks": "涡流 效果叠加上限", - "text.autoconfig.simplyswords_main.option.unique_effects.vortexSpellScaling": "涡流 法术强度伤害乘数", - - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormSpreadCap.@PrefixText" : "§6[燎原]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormSpreadCap": "灰烬风暴 播种上限", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormDamage": "灰烬风暴 持续伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormDetonationDamage": "灰烬风暴 爆炸伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormCooldown": "灰烬风暴 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormMaxHaste": "灰烬风暴 急迫效果叠加上限", - "text.autoconfig.simplyswords_main.option.unique_effects.emberstormSpellScaling": "灰烬风暴 法术强度伤害乘数", - - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathCooldown.@PrefixText" : "§6[荣缎劈刀]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathCooldown": "荣缎护身 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathResilienceAmplifier": "荣缎护身 韧性提升倍率", - "text.autoconfig.simplyswords_main.option.unique_effects.ribbonwrathDamageBonusPercent": "荣缎护身 额外伤害倍率", - - "text.autoconfig.simplyswords_main.option.unique_effects.magistormCooldown.@PrefixText" : "§6[秘法之镰]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormCooldown": "秘法风暴 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormDuration": "秘法风暴 持续时间", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormRadius": "秘法风暴 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormDamage": "秘法风暴 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormRepairChance": "秘法风暴 修补概率", - "text.autoconfig.simplyswords_main.option.unique_effects.magistormSpellScaling": "秘法风暴 法术强度伤害乘数", - - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaCooldown.@PrefixText" : "§6[谜风]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaCooldown": "谜风 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaDecayRate": "谜风 衰减率", - "text.autoconfig.simplyswords_main.option.unique_effects.enigmaChaseRadius": "谜风 追踪范围", - - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeCooldown.@PrefixText" : "§6[秘法双头剑]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeCooldown": "秘法音爆 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeSonicDistance": "秘法音爆 射程", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeDamageModifier": "秘法音爆 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeRepelChance": "秘法音爆 检测概率", - "text.autoconfig.simplyswords_main.option.unique_effects.magibladeRepelRadius": "秘法音爆 检测范围", - - "text.autoconfig.simplyswords_main.option.unique_effects.magislamCooldown.@PrefixText" : "§6[秘法之矛]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamCooldown": "秘法跃击 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamRadius": "秘法跃击 范围", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamDamageModifier": "秘法跃击 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamMagicChance": "秘法跃击 法伤概率", - "text.autoconfig.simplyswords_main.option.unique_effects.magislamMagicModifier": "秘法跃击 魔法伤害", - - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftCooldown.@PrefixText" : "§6[星阙]§7", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftCooldown": "斗转星移 冷却时间", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftDuration": "斗转星移 持续时间", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftDamageModifier": "斗转星移 伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftDamageMax": "斗转星移 最大伤害", - "text.autoconfig.simplyswords_main.option.unique_effects.astralShiftChance": "斗转星移 免伤概率", - - - "text.autoconfig.simplyswords_main.option.runic_effects.swiftnessChance.@PrefixText" : "§b[极速]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.swiftnessChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.swiftnessDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.slowChance.@PrefixText" : "§b[缓速]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.slowChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.slowDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.poisonChance.@PrefixText" : "§b[猛毒]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.poisonChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.poisonDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.freezeChance.@PrefixText" : "§b[冰冻]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.freezeChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.freezeDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireChance.@PrefixText" : "§b[野火]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireDuration": "时长", - "text.autoconfig.simplyswords_main.option.runic_effects.wildfireRadius": "范围", - - "text.autoconfig.simplyswords_main.option.runic_effects.floatChance.@PrefixText" : "§b[漂浮]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.floatChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.floatDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.zephyrChance.@PrefixText" : "§b[微风]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.zephyrChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.zephyrDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.shieldingChance.@PrefixText" : "§b[庇佑]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.shieldingChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.shieldingDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.stoneskinChance.@PrefixText" : "§b[石肤]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.stoneskinChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.stoneskinDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.trailblazeChance.@PrefixText" : "§b[焰痕]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.trailblazeChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.trailblazeDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.weakenChance.@PrefixText" : "§b[弱化]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.weakenChance": "概率", - "text.autoconfig.simplyswords_main.option.runic_effects.weakenDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.unstableFrequency.@PrefixText" : "§b[不稳定]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.unstableFrequency": "触发频率", - "text.autoconfig.simplyswords_main.option.runic_effects.unstableDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.activeDefenceFrequency.@PrefixText" : "§b[主动防御]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.activeDefenceFrequency": "触发频率", - "text.autoconfig.simplyswords_main.option.runic_effects.activeDefenceRadius": "范围", - - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardFrequency.@PrefixText" : "§b[霜卫]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardFrequency": "触发频率", - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardRadius": "范围", - "text.autoconfig.simplyswords_main.option.runic_effects.frostWardDuration": "时长", - - "text.autoconfig.simplyswords_main.option.runic_effects.momentumCooldown.@PrefixText" : "§b[动能]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.momentumCooldown": "概率", - - "text.autoconfig.simplyswords_main.option.runic_effects.imbuedChance.@PrefixText" : "§b[淬魔]§7", - "text.autoconfig.simplyswords_main.option.runic_effects.imbuedChance": "概率", - - "text.autoconfig.simplyswords_main.option.gem_effects.enableEcho.@PrefixText" : "§4[狱灵宝石启用项]§7\n禁用选项将防止通过宝石获取指定狱灵之力。", - "text.autoconfig.simplyswords_main.option.gem_effects.enableEcho": "启用 共鸣宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableBerserk": "启用 暴戾宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableRadiance": "启用 辐射宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableOnslaught": "启用 暴起宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableNullification": "启用 剥离宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enablePrecise.@PrefixText" : "§6[简单技能模组兼容宝石]§7\n这些宝石仅在简单技能模组安装后才能被获取。", - "text.autoconfig.simplyswords_main.option.gem_effects.enablePrecise": "启用 精准宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.preciseChance": "精准 概率", - "text.autoconfig.simplyswords_main.option.gem_effects.enableMighty": "启用 强能宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.mightyChance": "强能 概率", - "text.autoconfig.simplyswords_main.option.gem_effects.enableStealthy": "启用 隐秘宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.stealthyChance": "隐秘 概率", - "text.autoconfig.simplyswords_main.option.gem_effects.enableRenewed": "启用 更新宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.renewedChance": "更新 概率", - "text.autoconfig.simplyswords_main.option.gem_effects.enableAccelerant": "启用 加速宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableLeaping": "启用 跳跃宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.leapingChance": "跳跃 概率", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSpellshield": "启用 法术护盾宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.spellshieldChance": "法术护盾 概率", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSpellforged": "启用 法术锻融宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSoulshock": "启用 灵魂震颤宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableSpellStandard": "启用 秘法战旗宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableWarStandard": "启用 纷争战旗宝石", - "text.autoconfig.simplyswords_main.option.gem_effects.enableDeception": "启用 诡诈宝石", - - "text.autoconfig.simplyswords_main.option.status_effects.echoDamage": "共鸣基础伤害" + "simplyswords.general" : "整体", + "simplyswords.gem_powers" : "宝石效果", + "simplyswords.loot" : "战利品", + "simplyswords.status_effects" : "状态效果", + "simplyswords.unique_effects" : "独特效果", + "simplyswords.weapon_attributes" : "武器属性", + + + + "simplyswords.weapon_attributes.typeDamageModifier" : "§a[武器属性配置]§7", + "simplyswords.weapon_attributes.typeDamageModifier.desc" : "\n武器的伤害可通过调整它们的权重来调节。\n这会直接影响伤害,但不等于游戏中的外显数值。\n计算方式:材质伤害+基础伤害+伤害增益数-伤害削减数=外显数值\n需要重启游戏来应用更改。\n\n§a[伤害增益数]§7\n使用例:设为3将提升3点外显伤害。", + "simplyswords.weapon_attributes.typeDamageModifier.longsword_damageModifier": "长剑 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.twinblade_damageModifier": "双头剑 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.rapier_damageModifier": "细剑 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.katana_damageModifier": "武士刀 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.sai_damageModifier": "三叉刺 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.spear_damageModifier": "矛 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.glaive_damageModifier": "长柄刀 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.warglaive_damageModifier": "战刃 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.cutlass_damageModifier": "弯刀 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.claymore_damageModifier": "阔剑 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.greataxe_damageModifier": "巨斧 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.greathammer_damageModifier": "巨锤 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.chakram_damageModifier": "环刃 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.scythe_damageModifier": "长柄镰 伤害增益数", + "simplyswords.weapon_attributes.typeDamageModifier.halberd_damageModifier": "戟 伤害增益数", + + "simplyswords.weapon_attributes.materialDamageModifier" : "§a[基础伤害]§7", + "simplyswords.weapon_attributes.materialDamageModifier.desc" : "伤害调整数将在此值的基础上进行加减运算。", + "simplyswords.weapon_attributes.materialDamageModifier.mythicmetals" : "Requires Mythic Metals", + "simplyswords.weapon_attributes.materialDamageModifier.gobber2" : "Requires Gobber", + "simplyswords.weapon_attributes.materialDamageModifier.eldritch_end" : "Requires Eldritch End", + "simplyswords.weapon_attributes.materialDamageModifier.iron_damageModifier": "铁制武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.gold_damageModifier": "金制武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.diamond_damageModifier": "钻石武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.netherite_damageModifier": "下界合金武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.runic_damageModifier": "符文武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.adamantite_damageModifier": "精金武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.aquarium_damageModifier": "激水武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.banglum_damageModifier": "聚爆石武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.carmot_damageModifier": "点金石武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.kyber_damageModifier": "凯伯武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.mythril_damageModifier": "秘银武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.orichalcum_damageModifier": "山铜武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.durasteel_damageModifier": "韧钢武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.osmium_damageModifier": "锇制武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.prometheum_damageModifier": "钷制武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.quadrillum_damageModifier": "兆金武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.runite_damageModifier": "符石武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.starPlatinum_damageModifier": "星辰铂金武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.bronze_damageModifier": "青铜武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.copper_damageModifier": "铜制武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.steel_damageModifier": "钢制武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.palladium_damageModifier": "钯金武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.stormyx_damageModifier": "飓霆武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.celestium_damageModifier": "倚天武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.metallurgium_damageModifier": "炼金武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.gobber_damageModifier": "戈伯武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.gobberNether_damageModifier": "下界戈伯武器 基础伤害", + "simplyswords.weapon_attributes.materialDamageModifier.gobberEnd_damageModifier": "末地戈伯武器 基础伤害", + + "simplyswords.weapon_attributes.typeAttackSpeed" : "§a[攻速调整数]§7", + "simplyswords.weapon_attributes.typeAttackSpeed.desc" : "推荐范围:-1.0至-3.7,-1.0快,-3.7慢。", + "simplyswords.weapon_attributes.typeAttackSpeed.longsword_attackSpeed": "长剑 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.twinblade_attackSpeed": "双头剑 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.rapier_attackSpeed": "细剑 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.katana_attackSpeed": "武士刀 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.sai_attackSpeed": "三叉刺 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.spear_attackSpeed": "矛 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.glaive_attackSpeed": "长柄刀 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.warglaive_attackSpeed": "战刃 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.cutlass_attackSpeed": "弯刀 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.claymore_attackSpeed": "阔剑 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.greataxe_attackSpeed": "巨斧 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.greathammer_attackSpeed": "巨锤 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.chakram_attackSpeed": "环刃 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.scythe_attackSpeed": "长柄镰 攻速调整数", + "simplyswords.weapon_attributes.typeAttackSpeed.halberd_attackSpeed": "戟 攻速调整数", + + "simplyswords.weapon_attributes.uniqueDamageModifier" : "§6[独特武器属性配置]§7", + "simplyswords.weapon_attributes.uniqueDamageModifier.desc" : "独特武器有所不同,且只有一个调整参数。\n这会直接影响伤害,但不等于游戏中的外显数值。\n计算方式:原版下界合金工具伤害+伤害调整数=外显数值。\n\n§6[伤害增益数]§7\n使用例:设为3将提升3点外显伤害。", + "simplyswords.weapon_attributes.uniqueDamageModifier.eldritch_end" : "Requires Eldritch End", + "simplyswords.weapon_attributes.uniqueDamageModifier.brimstone_damageModifier": "§6硫磺阔剑§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.thewatcher_damageModifier": "§6守望阔剑§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.stormsedge_damageModifier": "§6风暴之刃§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.stormbringer_damageModifier": "§6风暴使者§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.swordonastick_damageModifier": "绑棍的长剑 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.bramblethorn_damageModifier": "§6棘刺§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.watchingwarglaive_damageModifier": "§6守望战刃§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.longswordofplague_damageModifier": "§6瘟疫长剑§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.emberblade_damageModifier": "§6余烬之刃§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.hearthflame_damageModifier": "§6炉火巨锤§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulkeeper_damageModifier": "§6聚魂§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.twistedblade_damageModifier": "§6扭曲波刃剑§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulstealer_damageModifier": "§6窃魂§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulrender_damageModifier": "§6裂魂§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.mjolnir_damageModifier": "§6雷神之锤§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.soulpyre_damageModifier": "§6葬魂§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.frostfall_damageModifier": "§6霜降§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.moltenedge_damageModifier": "§6熔火§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.livyatan_damageModifier": "§6利维坦§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.icewhisper_damageModifier": "§6冰语§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.arcanethyst_damageModifier": "§6奥术紫晶戟§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.thunderbrand_damageModifier": "§6纵雷§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.lichblade_damageModifier": "§6巫妖巨剑§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.shadowsting_damageModifier": "§6影刺§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.sunfire_damageModifier": "§6日炎§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.harbinger_damageModifier": "§6噩兆§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.whisperwind_damageModifier": "§6风之低语§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.emberlash_damageModifier": "§6余烬鞭挞§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.waxweaver_damageModifier": "§6织蜡§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.hiveheart_damageModifier": "§6群蜂之心§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.starsedge_damageModifier": "§6星芒§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.wickpiercer_damageModifier": "§6穿芯§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.dreadtide_damageModifier": "§6怖潮§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.tempest_damageModifier": "§6烈风§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.flamewind_damageModifier": "§6燎原§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.ribboncleaver_damageModifier": "§6荣缎劈刀§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.magiscythe_damageModifier": "§6秘法之镰§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.enigma_damageModifier": "§6谜风§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.magispear_damageModifier": "§6秘法之矛§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.magiblade_damageModifier": "§6秘法双头剑§7 伤害调整数", + "simplyswords.weapon_attributes.uniqueDamageModifier.caelestis_damageModifier": "§6星阙§7 伤害调整数", + + "simplyswords.weapon_attributes.uniqueAttackSpeed" : "§a[攻速调整数]§7", + "simplyswords.weapon_attributes.uniqueAttackSpeed.desc" : "推荐范围:-1.0至-3.7,-1.0快,-3.7慢。", + "simplyswords.weapon_attributes.uniqueAttackSpeed.brimstone_attackSpeed": "§6硫磺阔剑§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.thewatcher_attackSpeed": "§6守望阔剑§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.stormsedge_attackSpeed": "§6风暴之刃§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.stormbringer_attackSpeed": "§6风暴使者§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.swordonastick_attackSpeed": "§6绑棍的长剑 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.bramblethorn_attackSpeed": "§6棘刺§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.watchingwarglaive_attackSpeed": "§6守望战刃§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.longswordofplague_attackSpeed": "§6瘟疫长剑§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.emberblade_attackSpeed": "§6余烬之刃§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.hearthflame_attackSpeed": "§6炉火巨锤§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulkeeper_attackSpeed": "§6聚魂§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.twistedblade_attackSpeed": "§6扭曲波刃剑§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulstealer_attackSpeed": "§6窃魂§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulrender_attackSpeed": "§6裂魂§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.mjolnir_attackSpeed": "§6雷神之锤§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.soulpyre_attackSpeed": "§6葬魂§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.frostfall_attackSpeed": "§6霜降§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.moltenedge_attackSpeed": "§6熔火§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.livyatan_attackSpeed": "§6利维坦§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.icewhisper_attackSpeed": "§6冰语§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.arcanethyst_attackSpeed": "§6奥术紫晶戟§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.thunderbrand_attackSpeed": "§6纵雷§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.lichblade_attackSpeed": "§6巫妖巨剑§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.shadowsting_attackSpeed": "§6影刺§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.sunfire_attackSpeed": "§6日炎§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.harbinger_attackSpeed": "§6噩兆§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.whisperwind_attackSpeed": "§6风之低语§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.emberlash_attackSpeed": "§6余烬鞭挞§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.waxweaver_attackSpeed": "§6织蜡§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.hiveheart_attackSpeed": "§6群蜂之心§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.starsedge_attackSpeed": "§6星芒§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.wickpiercer_attackSpeed": "§6穿芯§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.dreadtide_attackSpeed": "§6怖潮§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.tempest_attackSpeed": "§6烈风§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.flamewind_attackSpeed": "§6燎原§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.ribboncleaver_attackSpeed": "§6荣缎劈刀§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.magiscythe_attackSpeed": "§6秘法之镰§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.enigma_attackSpeed": "§6谜风§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.magispear_attackSpeed": "§6秘法之矛§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.magiblade_attackSpeed": "§6秘法双头剑§7 攻速调整数", + "simplyswords.weapon_attributes.uniqueAttackSpeed.caelestis_attackSpeed": "§6星阙§7 攻速调整数", + + "simplyswords.loot.enableLootDrops": "启用战利品获取", + "simplyswords.loot.enableLootDrops.desc" : "禁用此项将防止本模组的物品作为战利品出现在箱子中。", + "simplyswords.loot.enableLootInVillages": "启用村庄战利品获取", + "simplyswords.loot.enableLootInVillages.desc" : "启用时,简易刀剑的战利品可生成在村庄的箱子中。", + "simplyswords.loot.standardLootTableWeight": "一般武器出现概率", + "simplyswords.loot.standardLootTableWeight.desc": "铁或金(铁>金)制武器出现在箱子中的概率。1.00 = 100%。", + "simplyswords.loot.rareLootTableWeight": "稀有武器出现概率", + "simplyswords.loot.rareLootTableWeight.desc": "钻石武器出现在箱子中的概率。1.00 = 100%。", + "simplyswords.loot.runicLootTableWeight": "符文武器出现概率", + "simplyswords.loot.runicLootTableWeight.desc": "符文武器出现在箱子中的概率。1.00 = 100%。", + "simplyswords.loot.uniqueLootTableWeight": "独特武器出现概率", + "simplyswords.loot.uniqueLootTableWeight.desc": "独特武器出现在箱子中的概率。1.00 = 100%。", + + "simplyswords.loot.uniqueLootTableOptions": "Unique Weapon Loot Tables", + "simplyswords.loot.uniqueLootTableOptions.desc": "Specific loot tables that", + "simplyswords.loot.disabledUniqueWeaponLoot": "Disabled Unique Weapon Loot Drops", + "simplyswords.loot.disabledUniqueWeaponLoot.desc": "§6[Loot Blacklisting]§7\nSetting any of the below values to false will prevent that item from generating in loot.\nThe item will still exist in the creative menu, but will be unobtainable through ordinary survival gameplay. ", + + "simplyswords.loot.enableContainedRemnants.condition": "Requires unique loot drop weight > 0f", + "simplyswords.loot.enableContainedRemnants.failTitle": "Disabled", + "simplyswords.loot.enableContainedRemnants": "启用强能容器", + "simplyswords.loot.enableContainedRemnants.desc": "是否强能容器能够改变形态。若已禁用独特武器掉落,请禁用此项。", + + "simplyswords.general.enableWeaponImpactSounds": "启用武器击中音效", + "simplyswords.general.weaponImpactSoundsVolume": "击中音效音量", + "simplyswords.general.enableWeaponFootfalls": "启用武器脚步声", + "simplyswords.general.enablePassiveParticles": "启用被动粒子效果", + "simplyswords.general.enableUniqueGemSockets": "若禁用,宝石槽将不再出现在新获取的独特武器上。不具备追溯效力。", + "simplyswords.general.enableUniqueGemSockets.desc" : "启用独特武器宝石槽", + "simplyswords.general.compatGobberEndWeaponsUnbreakable": "§a[兼容]§7 启用戈伯模组中,不可破坏的末地戈伯武器", + "simplyswords.general.compatEnableSpellPowerScaling": "§a[安装Spell Power后]§7\n若启用,一些武器的能力将与法术强度属性相挂钩。", + "simplyswords.general.compatEnableSpellPowerScaling.desc": "§a[兼容]§7 启用法术强度关联性", + + "simplyswords.unique_effects.abilityAbsorptionCap": "伤害吸收上限", + "simplyswords.unique_effects.abilityAbsorptionCap.desc": "所有能力给予的伤害吸收值都不能大于此值", + + "simplyswords.unique_effects.watcher": "§6[守望阔剑 & 守望战刃]§7", + "simplyswords.unique_effects.watcher.watcherChance": "守望阔剑 概率", + "simplyswords.unique_effects.watcher.watcherRadius": "守望阔剑 生命回复量", + "simplyswords.unique_effects.watcher.watcherRestoreAmount": "守望阔剑 范围", + "simplyswords.unique_effects.watcher.omenAbsorptionCap": "预兆 概率", + "simplyswords.unique_effects.watcher.omenChance": "预兆 伤害吸收上限", + "simplyswords.unique_effects.watcher.omenInstantKillThreshold": "预兆 秒杀阈值", + + "simplyswords.unique_effects.steal": "§6[窃魂]§7", + "simplyswords.unique_effects.steal.chance": "灵魂窃取 概率", + "simplyswords.unique_effects.steal.duration": "灵魂窃取 时长", + "simplyswords.unique_effects.steal.radius": "灵魂窃取 隐身时长", + "simplyswords.unique_effects.steal.spellScaling": "灵魂窃取 致盲时长", + "simplyswords.unique_effects.steal.blindDuration": "灵魂窃取 范围", + "simplyswords.unique_effects.steal.invisDuration": "灵魂窃取 法术强度伤害倍数", + + "simplyswords.unique_effects.soulkeeper": "§6[聚魂]§7", + "simplyswords.unique_effects.soulkeeper.chance": "灵魂融合 概率", + "simplyswords.unique_effects.soulkeeper.duration": "灵魂融合 时长", + "simplyswords.unique_effects.soulkeeper.radius": "灵魂融合 范围", + + "simplyswords.unique_effects.soulRend": "§6[裂魂]§7", + "simplyswords.unique_effects.soulRend.chance": "灵魂撕裂 概率", + "simplyswords.unique_effects.soulRend.duration": "灵魂撕裂 时长", + "simplyswords.unique_effects.soulRend.maxStacks": "灵魂撕裂 伤害倍率", + "simplyswords.unique_effects.soulRend.radius": "灵魂撕裂 治疗量倍率", + "simplyswords.unique_effects.soulRend.damageMulti": "灵魂撕裂 范围", + "simplyswords.unique_effects.soulRend.healMulti": "灵魂撕裂 最大存储量", + "simplyswords.unique_effects.soulRend.spellScaling": "灵魂撕裂 法术强度伤害倍数", + + "simplyswords.unique_effects.ferocity": "§6[扭曲波刃剑]§7", + "simplyswords.unique_effects.ferocity.chance": "凶猛 概率", + "simplyswords.unique_effects.ferocity.duration": "凶猛 时长", + "simplyswords.unique_effects.ferocity.maxStacks": "凶猛 最大存储量", + "simplyswords.unique_effects.ferocity.strengthTier": "凶猛 力量等级", + + "simplyswords.unique_effects.emberIre": "§6[余烬之刃]§7", + "simplyswords.unique_effects.emberIre.chance": "余烬怒火 概率", + "simplyswords.unique_effects.emberIre.duration": "余烬怒火 时长", + + "simplyswords.unique_effects.volcanicFury" : "§6[炉火巨锤]§7", + "simplyswords.unique_effects.volcanicFury.chance": "火山之怒 概率", + "simplyswords.unique_effects.volcanicFury.cooldown": "火山之怒 范围", + "simplyswords.unique_effects.volcanicFury.damage": "火山之怒 冷却时间", + "simplyswords.unique_effects.volcanicFury.radius": "火山之怒 伤害", + "simplyswords.unique_effects.volcanicFury.spellScaling": "火山之怒 法术强度伤害倍数", + + "simplyswords.unique_effects.storm" : "§6[雷神之锤]§7", + "simplyswords.unique_effects.storm.chance": "风暴 概率", + "simplyswords.unique_effects.storm.cooldown": "风暴 范围", + "simplyswords.unique_effects.storm.duration": "风暴 冷却时间", + "simplyswords.unique_effects.storm.frequency": "风暴 频率", + "simplyswords.unique_effects.storm.radius": "风暴 持续时间", + + "simplyswords.unique_effects.plague" : "§6[瘟疫长剑]§7", + "simplyswords.unique_effects.plague.chance": "瘟疫 概率", + + "simplyswords.unique_effects.brimstone" : "§6[硫磺阔剑]§7", + "simplyswords.unique_effects.brimstone.chance": "硫磺 概率", + + "simplyswords.unique_effects.bramble" : "§6[棘刺]§7", + "simplyswords.unique_effects.bramble.Chance": "木棘 概率", + + "simplyswords.unique_effects.soultether": "§6[葬魂]§7", + "simplyswords.unique_effects.soultether.duration": "灵魂锁链 范围", + "simplyswords.unique_effects.soultether.range": "灵魂锁链 半径", + "simplyswords.unique_effects.soultether.radius": "灵魂锁链 时长", + "simplyswords.unique_effects.soultether.igniteDuration": "灵魂锁链 点燃时长", + "simplyswords.unique_effects.soultether.resistanceDuration": "灵魂锁链 抗性提升时长", + + "simplyswords.unique_effects.frostFury": "§6[霜降]§7", + "simplyswords.unique_effects.frostFury.chance": "霜怒 冷却时间", + "simplyswords.unique_effects.frostFury.cooldown": "霜怒 范围", + "simplyswords.unique_effects.frostFury.damage": "霜怒 伤害", + "simplyswords.unique_effects.frostFury.duration": "霜怒 概率", + "simplyswords.unique_effects.frostFury.radius": "霜怒 时长", + "simplyswords.unique_effects.frostFury.spellScaling": "霜怒 法术强度伤害倍数", + + "simplyswords.unique_effects.moltenRoar": "§6[熔火]§7", + "simplyswords.unique_effects.moltenRoar.chance": "狂咆之炎 冷却时间", + "simplyswords.unique_effects.moltenRoar.cooldown": "狂咆之炎 范围", + "simplyswords.unique_effects.moltenRoar.duration": "狂咆之炎 击退力度", + "simplyswords.unique_effects.moltenRoar.knockbackStrength": "狂咆之炎 概率", + "simplyswords.unique_effects.moltenRoar.radius": "狂咆之炎 时长", + + "simplyswords.unique_effects.frostShatter": "§6[利维坦]§7", + "simplyswords.unique_effects.frostShatter.chance": "冰解 范围", + "simplyswords.unique_effects.frostShatter.damage": "冰解 伤害", + "simplyswords.unique_effects.frostShatter.duration": "冰解 概率", + "simplyswords.unique_effects.frostShatter.radius": "冰解 时长", + "simplyswords.unique_effects.frostShatter.spellScaling": "冰解 法术强度伤害倍数", + + "simplyswords.unique_effects.permafrost": "§6[冰语]§7", + "simplyswords.unique_effects.permafrost.cooldown": "永冻 范围", + "simplyswords.unique_effects.permafrost.damage": "永冻 伤害", + "simplyswords.unique_effects.permafrost.duration": "永冻 冷却时间", + "simplyswords.unique_effects.permafrost.radius": "永冻 时长", + "simplyswords.unique_effects.permafrost.spellScaling": "永冻 法术强度伤害倍数", + + "simplyskills.unique_effects.arcaneAssault": "§6[奥术紫晶戟]§7", + "simplyskills.unique_effects.arcaneAssault.chance": "奥术之力 范围", + "simplyskills.unique_effects.arcaneAssault.cooldown": "奥术之力 伤害", + "simplyskills.unique_effects.arcaneAssault.damage": "奥术之力 冷却时间", + "simplyskills.unique_effects.arcaneAssault.duration": "奥术之力 概率", + "simplyskills.unique_effects.arcaneAssault.radius": "奥术之力 时长", + "simplyskills.unique_effects.arcaneAssault.spellScaling": "奥术之力 法术强度伤害倍数", + + "simplyswords.unique_effects.thunderBlitz": "§6[纵雷]§7", + "simplyswords.unique_effects.thunderBlitz.chance": "霆闪 范围", + "simplyswords.unique_effects.thunderBlitz.cooldown": "霆闪 伤害", + "simplyswords.unique_effects.thunderBlitz.damage": "霆闪 冷却时间", + "simplyswords.unique_effects.thunderBlitz.radius": "霆闪 概率", + "simplyswords.unique_effects.thunderBlitz.spellScaling": "霆闪 法术强度伤害倍数", + + "simplyswords.unique_effects.stormJolt": "§6[风暴之刃]§7", + "simplyswords.unique_effects.stormJolt.chance": "霆闪 冷却时间", + "simplyswords.unique_effects.stormJolt.cooldown": "霆闪 概率", + + "simplyswords.unique_effects.soulAnguish": "§6[巫妖巨剑]§7", + "simplyswords.unique_effects.soulAnguish.absorptionCap": "悲魂 范围", + "simplyswords.unique_effects.soulAnguish.cooldown": "悲魂 伤害吸收上限", + "simplyswords.unique_effects.soulAnguish.damage": "悲魂 伤害", + "simplyswords.unique_effects.soulAnguish.duration": "悲魂 冷却时间", + "simplyswords.unique_effects.soulAnguish.heal": "悲魂 时长", + "simplyswords.unique_effects.soulAnguish.radius": "悲魂 治疗量", + "simplyswords.unique_effects.soulAnguish.range": "悲魂 范围", + "simplyswords.unique_effects.soulAnguish.spellScaling": "悲魂 法术强度伤害倍数", + + "simplyswords.unique_effects.shockDeflect": "§6[风暴使者]§7", + "simplyswords.unique_effects.shockDeflect.Cooldown": "冲震 范围", + "simplyswords.unique_effects.shockDeflect.Damage": "冲震 伤害", + "simplyswords.unique_effects.shockDeflect.SpellScaling": "冲震 冷却时间", + "simplyswords.unique_effects.shockDeflect.BlockDuration": "冲震 概率", + "simplyswords.unique_effects.shockDeflect.ParryDuration": "冲震 法术强度伤害倍数", + + "simplyswords.unique_effects.shadowmist": "§6[影刺]§7", + "simplyswords.unique_effects.shadowmist.chance": "遮影 冷却时间", + "simplyswords.unique_effects.shadowmist.cooldown": "遮影 概率", + "simplyswords.unique_effects.shadowmist.damageMulti": "遮影 伤害倍率", + "simplyswords.unique_effects.shadowmist.radius": "遮影 致盲时长", + "simplyswords.unique_effects.shadowmist.blindDuration": "遮影 范围", + + "simplyswords.unique_effects.abyssalStandard": "§6[深渊战旗]§7", + "simplyswords.unique_effects.abyssalStandard.chance": "深渊战旗 冷却时间", + "simplyswords.unique_effects.abyssalStandard.cooldown": "深渊战旗 概率", + "simplyswords.unique_effects.abyssalStandard.damage": "深渊战旗 伤害", + "simplyswords.unique_effects.abyssalStandard.spellScaling": "深渊战旗 法术强度伤害倍数", + + "simplyswords.unique_effects.righteousStandard": "§6[正义战旗]§7", + "simplyswords.unique_effects.righteousStandard.chance": "正义战旗 冷却时间", + "simplyswords.unique_effects.righteousStandard.cooldown": "正义战旗 概率", + "simplyswords.unique_effects.righteousStandard.damage": "正义战旗 伤害", + "simplyswords.unique_effects.righteousStandard.spellScaling": "正义战旗 法术强度伤害倍数", + "simplyswords.unique_effects.righteousStandard.spellScalingHeal": "正义战旗 法术强度治疗乘数", + + "simplyswords.unique_effects.fatalFlicker": "§6[风之低语]§7", + "simplyswords.unique_effects.fatalFlicker.chance": "绝息一闪 冷却时间", + "simplyswords.unique_effects.fatalFlicker.cooldown": "绝息一闪 概率", + "simplyswords.unique_effects.fatalFlicker.maxStacks": "绝息一闪 范围", + "simplyswords.unique_effects.fatalFlicker.radius": "绝息一闪 效果叠加上限", + "simplyswords.unique_effects.fatalFlicker.dashVelocity": "绝息一闪 突进速度", + + "simplyswords.unique_effects.smoulder": "§6[余烬鞭挞]§7", + "simplyswords.unique_effects.smoulder.cooldown": "隐燃 冷却时间", + "simplyswords.unique_effects.smoulder.heal": "隐燃 效果叠加上限", + "simplyswords.unique_effects.smoulder.maxStacks": "隐燃 恢复百分比", + "simplyswords.unique_effects.smoulder.spellScaling": "隐燃 法术强度伤害倍数", + + "simplyswords.unique_effects.waxweave": "§6[织蜡]§7", + "simplyswords.unique_effects.waxweave.cooldown": "织蜡 冷却时间", + "simplyswords.unique_effects.waxweave.maxStacks": "织蜡 效果叠加上限", + + "simplyswords.unique_effects.hivemind": "§6[群蜂之心]§7", + "simplyswords.unique_effects.hivemind.cooldown": "蜂巢思维 冷却时间", + "simplyswords.unique_effects.hivemind.damage": "蜂巢思维 时长", + "simplyswords.unique_effects.hivemind.duration": "蜂巢思维 伤害", + + "simplyswords.unique_effects.celestialSurge": "§6[星芒]§7", + "simplyswords.unique_effects.celestialSurge.cooldown": "星涌 冷却时间", + "simplyswords.unique_effects.celestialSurge.duration": "星涌 时长", + "simplyswords.unique_effects.celestialSurge.damageModifier": "星涌 急迫效果叠加上限", + "simplyswords.unique_effects.celestialSurge.lifestealModifier": "星涌 伤害", + "simplyswords.unique_effects.celestialSurge.stacks": "星涌 生命窃取", + + "simplyswords.unique_effects.flickerFury": "§6[穿芯]§7", + "simplyswords.unique_effects.flickerFury.cooldown": "烛焰之怒 冷却时间", + "simplyswords.unique_effects.flickerFury.damage": "烛焰之怒 时长", + "simplyswords.unique_effects.flickerFury.duration": "烛焰之怒 伤害", + + "simplyswords.unique_effects.vortex": "§6[怖潮]§7", + "simplyswords.unique_effects.vortex.duration": "虚空召唤 时长", + "simplyswords.unique_effects.vortex.maxSize": "虚空召唤 起始刻检测频率", + "simplyswords.unique_effects.vortex.maxStacks": "虚空召唤 伤害", + "simplyswords.unique_effects.vortex.spellScaling": "虚空召唤 侵蚀频率", + "simplyswords.unique_effects.voidcaller": "虚空召唤 每刻侵蚀值", + "simplyswords.unique_effects.voidcaller.compat": "虚空召唤 侵蚀持续时间", + "simplyswords.unique_effects.voidcaller.damageModifier": "虚空召唤 最大侵蚀值", + + "simplyswords.unique_effects.voidcaller.duration": "§6[烈风]§7", + "simplyswords.unique_effects.voidcaller.startingTickFrequency": "涡流 时长", + "simplyswords.unique_effects.voidcaller.corruptionFrequency": "涡流 最大范围", + "simplyswords.unique_effects.voidcaller.corruptionPerTick": "涡流 效果叠加上限", + "simplyswords.unique_effects.voidcaller.corruptionDuration": "涡流 法术强度伤害乘数", + + "simplyswords.unique_effects.voidcaller.corruptionMax": "§6[燎原]§7", + "simplyswords.unique_effects.emberstorm": "灰烬风暴 播种上限", + "simplyswords.unique_effects.emberstorm.cooldown": "灰烬风暴 持续伤害", + "simplyswords.unique_effects.emberstorm.damage": "灰烬风暴 爆炸伤害", + "simplyswords.unique_effects.emberstorm.spellScaling": "灰烬风暴 冷却时间", + "simplyswords.unique_effects.emberstorm.detonationDamage": "灰烬风暴 急迫效果叠加上限", + "simplyswords.unique_effects.emberstorm.maxHaste": "灰烬风暴 法术强度伤害乘数", + + "simplyswords.unique_effects.ribbonwrath" : "§6[荣缎劈刀]§7", + "simplyswords.unique_effects.ribbonwrath.cooldown": "荣缎护身 冷却时间", + "simplyswords.unique_effects.ribbonwrath.damageBonusPercent": "荣缎护身 韧性提升倍率", + "simplyswords.unique_effects.ribbonwrath.resilienceAmplifier": "荣缎护身 额外伤害倍率", + + "simplyswords.unique_effects.magistorm" : "§6[秘法之镰]§7", + "simplyswords.unique_effects.magistorm.cooldown": "秘法风暴 冷却时间", + "simplyswords.unique_effects.magistorm.damage": "秘法风暴 持续时间", + "simplyswords.unique_effects.magistorm.duration": "秘法风暴 范围", + "simplyswords.unique_effects.magistorm.radius": "秘法风暴 伤害", + "simplyswords.unique_effects.magistorm.repairChance": "秘法风暴 修补概率", + "simplyswords.unique_effects.magistorm.spellScaling": "秘法风暴 法术强度伤害乘数", + + "simplyswords.unique_effects.enigma" : "§6[谜风]§7", + "simplyswords.unique_effects.enigma.cooldown": "谜风 冷却时间", + "simplyswords.unique_effects.enigma.chaseRadius": "谜风 衰减率", + "simplyswords.unique_effects.enigma.decayRate": "谜风 追踪范围", + + "simplyswords.unique_effects.magiblade" : "§6[秘法双头剑]§7", + "simplyswords.unique_effects.magiblade.cooldown": "秘法音爆 冷却时间", + "simplyswords.unique_effects.magiblade.damageModifier": "秘法音爆 射程", + "simplyswords.unique_effects.magiblade.repelChance": "秘法音爆 伤害", + "simplyswords.unique_effects.magiblade.repelRadius": "秘法音爆 检测概率", + "simplyswords.unique_effects.magiblade.sonicDistance": "秘法音爆 检测范围", + + "simplyswords.unique_effects.magislam" : "§6[秘法之矛]§7", + "simplyswords.unique_effects.magislam.cooldown": "秘法跃击 冷却时间", + "simplyswords.unique_effects.magislam.damageModifier": "秘法跃击 范围", + "simplyswords.unique_effects.magislam.radius": "秘法跃击 伤害", + "simplyswords.unique_effects.magislam.magicChance": "秘法跃击 法伤概率", + "simplyswords.unique_effects.magislam.magicModifier": "秘法跃击 魔法伤害", + + "simplyswords.unique_effects.astralShift" : "§6[星阙]§7", + "simplyswords.unique_effects.astralShift.chance": "斗转星移 冷却时间", + "simplyswords.unique_effects.astralShift.cooldown": "斗转星移 持续时间", + "simplyswords.unique_effects.astralShift.damageMax": "斗转星移 伤害", + "simplyswords.unique_effects.astralShift.damageModifier": "斗转星移 最大伤害", + "simplyswords.unique_effects.astralShift.duration": "斗转星移 免伤概率", + + "simplyswords.gem_powers.disabledPowers" : "Disabled Gem Powers", + "simplyswords.gem_powers.disabledPowers.desc" : "§a[Runic Power Blacklisting]§7\nAdding a power to this list will prevent that runic power from being obtainable.", + + "simplyswords.gem_powers.swiftness" : "§b[极速]§7", + "simplyswords.gem_powers.slow" : "§b[缓速]§7", + "simplyswords.gem_powers.poison" : "§b[猛毒]§7", + "simplyswords.gem_powers.freeze" : "§b[冰冻]§7", + "simplyswords.gem_powers.wildfire" : "§b[野火]§7", + "simplyswords.gem_powers.floating" : "§b[漂浮]§7", + "simplyswords.gem_powers.zephyr" : "§b[微风]§7", + "simplyswords.gem_powers.shielding" : "§b[庇佑]§7", + "simplyswords.gem_powers.stoneskin" : "§b[石肤]§7", + "simplyswords.gem_powers.trailblaze" : "§b[焰痕]§7", + "simplyswords.gem_powers.weaken" : "§b[弱化]§7", + "simplyswords.gem_powers.unstable" : "§b[不稳定]§7", + "simplyswords.gem_powers.activeDefence" : "§b[主动防御]§7", + "simplyswords.gem_powers.frostWard" : "§b[霜卫]§7", + "simplyswords.gem_powers.momentum" : "§b[动能]§7", + "simplyswords.gem_powers.imbued" : "§b[淬魔]§7", + "simplyswords.gem_powers.simplySkills": "Simply Skills Powers", + "simplyswords.gem_powers.simplySkills.desc" : "§6[Simply Skills Compatibility Gems]§7\nThese gems can only be acquired when Simply Skills is installed.", + "simplyswords.gem_powers.simplySkills.preciseChance": "Precise chance", + "simplyswords.gem_powers.simplySkills.mightyChance": "Mighty chance", + "simplyswords.gem_powers.simplySkills.stealthyChance": "Stealthy chance", + "simplyswords.gem_powers.simplySkills.renewedChance": "Renewed chance", + "simplyswords.gem_powers.simplySkills.leapingChance": "Leaping chance", + "simplyswords.gem_powers.simplySkills.spellshieldChance": "Spellshield chance", + + + "simplyswords.status_effects.echoDamage": "共鸣基础伤害", + + "simplyswords.config.basic_settings.chance": "Chance", + "simplyswords.config.basic_settings.chance.desc": "Percent chance the effect occurs", + "simplyswords.config.basic_settings.duration": "Duration", + "simplyswords.config.basic_settings.duration.desc": "Duration of the effect in ticks", + "simplyswords.config.basic_settings.radius": "Radius", + "simplyswords.config.basic_settings.radius.desc": "Radius of the effect in blocks", + "simplyswords.config.basic_settings.frequency": "Frequency", + "simplyswords.config.basic_settings.frequency.desc": "How often the effect occurs; 'once per X ticks'", + "simplyswords.config.basic_settings.cooldown": "Cooldown", + "simplyswords.config.basic_settings.cooldown.desc": "Delay in ticks after activating the effect" } diff --git a/common/src/main/resources/simplyswords-common.mixins.json b/common/src/main/resources/simplyswords-common.mixins.json index cd6b58d4..5f7fd0d2 100644 --- a/common/src/main/resources/simplyswords-common.mixins.json +++ b/common/src/main/resources/simplyswords-common.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "net.sweenus.simplyswords.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "client": [ ], "mixins": [ diff --git a/fabric/build.gradle b/fabric/build.gradle index 900ebb26..3424a9f5 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id 'com.github.johnrengelman.shadow' } architectury { @@ -42,89 +42,92 @@ repositories { maven { url = "https://jitpack.io" } maven { url "https://maven.shedaniel.me/" } maven { url "https://maven.terraformersmc.com/releases/" } + maven { + name = "FzzyMaven" + url = "https://maven.fzzyhmstrs.me/" + } } dependencies { modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" // Remove the next line if you don't want to depend on the API - modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}" + modApi "dev.architectury:architectury-fabric:${rootProject.architectury_api_version}" modCompileOnly("com.terraformersmc:modmenu:${rootProject.mod_menu_version}") { transitive false } // Mythic Metals - modImplementation "curse.maven:mythicmetals-410127:4644233" - // slug / curseforge project ID / file ID "check url" - +/* 1.21 temp +modImplementation "curse.maven:mythicmetals-410127:5660718" + */ modImplementation "maven.modrinth:spell-power:${rootProject.spellpower_version}-fabric" - modImplementation "curse.maven:lambdynamiclights-393442:${rootProject.lambdynlights_version}" - include modImplementation("dev.lambdaurora:spruceui:${rootProject.spruceui_version}") - modApi("me.shedaniel.cloth:cloth-config-fabric:${rootProject.cloth_config_version}") { - exclude(group: "net.fabricmc.fabric-api") - } - modImplementation "curse.maven:eldritch-end-877553:${rootProject.eldritch_end_version}" + //modImplementation "curse.maven:lambdynamiclights-393442:${rootProject.lambdynlights_version}" 1.21 + //include modImplementation("dev.lambdaurora:spruceui:${rootProject.spruceui_version}") 1.21 + //modImplementation "curse.maven:eldritch-end-877553:${rootProject.eldritch_end_version}" 1.21 // Amethyst Imbuement //modImplementation "curse.maven:amethyst-imbuement-608261:4514358" // Patchouli - modImplementation "vazkii.patchouli:Patchouli:1.20.1-81-FABRIC" + modImplementation "vazkii.patchouli:Patchouli:1.21-87-FABRIC" - modImplementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-fabric:${rootProject.mixin_extras_version}")) + //modImplementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-fabric:${rootProject.mixin_extras_version}")) 1.21 common(project(path: ":common", configuration: "namedElements")) { transitive false } shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false } + + modImplementation "me.fzzyhmstrs:fzzy_config:${project.fzz_config_version}" } processResources { - inputs.property "version", project.version +inputs.property "version", project.version - filesMatching("fabric.mod.json") { - expand "version": project.version - } +filesMatching("fabric.mod.json") { + expand "version": project.version +} } shadowJar { - exclude "architectury.common.json" +exclude "architectury.common.json" - configurations = [project.configurations.shadowCommon] - archiveClassifier.set("dev-shadow") +configurations = [project.configurations.shadowCommon] +archiveClassifier.set("dev-shadow") } remapJar { - injectAccessWidener = true - inputFile.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier.set(null) +injectAccessWidener = true +inputFile.set shadowJar.archiveFile +dependsOn shadowJar +archiveClassifier.set(null) } jar { - archiveClassifier.set("dev") +archiveClassifier.set("dev") } sourcesJar { - def commonSources = project(":common").sourcesJar - dependsOn commonSources - from commonSources.archiveFile.map { zipTree(it) } +def commonSources = project(":common").sourcesJar +dependsOn commonSources +from commonSources.archiveFile.map { zipTree(it) } } components.java { - withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { - skip() - } +withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) { + skip() +} } publishing { - publications { - mavenFabric(MavenPublication) { - artifactId = rootProject.archives_base_name + "-" + project.name - from components.java - } +publications { + mavenFabric(MavenPublication) { + artifactId = rootProject.archives_base_name + "-" + project.name + from components.java } +} - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - } +// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. +repositories { + // Add repositories to publish to here. } +} \ No newline at end of file diff --git a/fabric/src/main/java/net/sweenus/simplyswords/fabric/FabricHelperMethods.java b/fabric/src/main/java/net/sweenus/simplyswords/fabric/FabricHelperMethods.java index 882c3858..5eaba128 100644 --- a/fabric/src/main/java/net/sweenus/simplyswords/fabric/FabricHelperMethods.java +++ b/fabric/src/main/java/net/sweenus/simplyswords/fabric/FabricHelperMethods.java @@ -17,25 +17,19 @@ public static float useSpellAttributeScaling(float damageModifier, PlayerEntity double damageOutput = 0.1; // Fetch attributes (crit damage/chance is now handled internally in API via randomValue) - double lightningPower = SpellPower.getSpellPower(SpellSchools.LIGHTNING, player).randomValue(); - double firePower = SpellPower.getSpellPower(SpellSchools.FIRE, player).randomValue(); - double frostPower = SpellPower.getSpellPower(SpellSchools.FROST, player).randomValue(); - double arcanePower = SpellPower.getSpellPower(SpellSchools.ARCANE, player).randomValue(); - double soulPower = SpellPower.getSpellPower(SpellSchools.SOUL, player).randomValue(); - double healingPower = SpellPower.getSpellPower(SpellSchools.HEALING, player).randomValue(); if (magicSchool.contains("lightning")) - attributePower = lightningPower; + attributePower = SpellPower.getSpellPower(SpellSchools.LIGHTNING, player).randomValue(); else if (magicSchool.contains("fire")) - attributePower = firePower; + attributePower = SpellPower.getSpellPower(SpellSchools.FIRE, player).randomValue(); else if (magicSchool.contains("frost")) - attributePower = frostPower; + attributePower = SpellPower.getSpellPower(SpellSchools.FROST, player).randomValue(); else if (magicSchool.contains("arcane")) - attributePower = arcanePower; + attributePower = SpellPower.getSpellPower(SpellSchools.ARCANE, player).randomValue(); else if (magicSchool.contains("soul")) - attributePower = soulPower; + attributePower = SpellPower.getSpellPower(SpellSchools.SOUL, player).randomValue(); else if (magicSchool.contains("healing")) - attributePower = healingPower; + attributePower = SpellPower.getSpellPower(SpellSchools.HEALING, player).randomValue(); damageOutput = (damageModifier * attributePower); @@ -45,4 +39,4 @@ else if (magicSchool.contains("healing")) } return 0; } -} +} \ No newline at end of file diff --git a/fabric/src/main/java/net/sweenus/simplyswords/fabric/SimplySwordsFabric.java b/fabric/src/main/java/net/sweenus/simplyswords/fabric/SimplySwordsFabric.java index 4c43efb9..8a01d2b3 100644 --- a/fabric/src/main/java/net/sweenus/simplyswords/fabric/SimplySwordsFabric.java +++ b/fabric/src/main/java/net/sweenus/simplyswords/fabric/SimplySwordsFabric.java @@ -3,8 +3,6 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.sweenus.simplyswords.SimplySwords; -import net.sweenus.simplyswords.compat.GobberCompat; -import net.sweenus.simplyswords.fabric.compat.MythicMetalsCompat; public class SimplySwordsFabric implements ModInitializer { @Override @@ -17,15 +15,21 @@ public void onInitialize() { if (FabricLoader.getInstance().isModLoaded("quilt_loader") && FabricLoader.getInstance().isModLoaded("gobber2") && FabricLoader.getInstance().isModLoaded("mythicmetals")) { System.out.println("SimplySwords: Detected Quilt Loader. Mythic Metals and Gobber compatibility fix is being applied."); - GobberCompat.registerModItems(); + //GobberCompat.registerModItems(); 1.21 + /* 1.21 temp MythicMetalsCompat.registerModItems(); + + */ } else { if (FabricLoader.getInstance().isModLoaded("gobber2")) { - GobberCompat.registerModItems(); + //GobberCompat.registerModItems(); 1.21 } if (FabricLoader.getInstance().isModLoaded("mythicmetals")) { + /* 1.21 temp MythicMetalsCompat.registerModItems(); + + */ } } } diff --git a/fabric/src/main/java/net/sweenus/simplyswords/fabric/SimplySwordsPreLaunch.java b/fabric/src/main/java/net/sweenus/simplyswords/fabric/SimplySwordsPreLaunch.java deleted file mode 100644 index e3cb5fc6..00000000 --- a/fabric/src/main/java/net/sweenus/simplyswords/fabric/SimplySwordsPreLaunch.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.sweenus.simplyswords.fabric; - -import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; -import net.sweenus.simplyswords.config.SimplySwordsConfig; - -import java.io.File; - -public class SimplySwordsPreLaunch implements PreLaunchEntrypoint { - - //Checks for config before mods initialise. When missing, create the config to prevent dependent mod crashes. - public static void configDetect() { - File file = new File("config/simplyswords_extra/loot_config.json5"); - if (!file.exists()) { - SimplySwordsConfig.init(); - System.out.println("Simply Swords loot_config is missing. Creating fresh config file now."); - } - } - - @Override - public void onPreLaunch() { - configDetect(); - } -// -} diff --git a/fabric/src/main/java/net/sweenus/simplyswords/fabric/client/ModMenuIntegration.java b/fabric/src/main/java/net/sweenus/simplyswords/fabric/client/ModMenuIntegration.java deleted file mode 100644 index 3c85386a..00000000 --- a/fabric/src/main/java/net/sweenus/simplyswords/fabric/client/ModMenuIntegration.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.sweenus.simplyswords.fabric.client; - -import com.terraformersmc.modmenu.api.ConfigScreenFactory; -import com.terraformersmc.modmenu.api.ModMenuApi; -import me.shedaniel.autoconfig.AutoConfig; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.sweenus.simplyswords.config.ConfigWrapper; - -@Environment(EnvType.CLIENT) -public class ModMenuIntegration implements ModMenuApi { - @Override - public ConfigScreenFactory getModConfigScreenFactory() { - return parent -> AutoConfig.getConfigScreen(ConfigWrapper.class, parent).get(); - } -} \ No newline at end of file diff --git a/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/DynamicLightsCompat.java b/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/DynamicLightsCompat.java index 99ab93f1..fe795447 100644 --- a/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/DynamicLightsCompat.java +++ b/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/DynamicLightsCompat.java @@ -1,5 +1,5 @@ package net.sweenus.simplyswords.fabric.compat; - +/* 1.21 temp import dev.lambdaurora.lambdynlights.api.DynamicLightsInitializer; public class DynamicLightsCompat implements DynamicLightsInitializer { @@ -8,3 +8,5 @@ public void onInitializeDynamicLights() { } } + + */ diff --git a/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/MythicMetalsCompat.java b/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/MythicMetalsCompat.java index d0f7078b..b317d1bc 100644 --- a/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/MythicMetalsCompat.java +++ b/fabric/src/main/java/net/sweenus/simplyswords/fabric/compat/MythicMetalsCompat.java @@ -1,105 +1,66 @@ package net.sweenus.simplyswords.fabric.compat; -import net.minecraft.item.Item; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; -import net.sweenus.simplyswords.SimplySwords; import net.sweenus.simplyswords.config.Config; -import net.sweenus.simplyswords.config.ConfigDefaultValues; -import net.sweenus.simplyswords.fabric.item.PrometheumSwordItem; -import net.sweenus.simplyswords.item.ModToolMaterial; -import net.sweenus.simplyswords.item.SimplySwordsSwordItem; public class MythicMetalsCompat { //Compat for Mythic Metals - static float longsword_positive_modifier = Config.getFloat("longsword_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.longsword_positiveDamageModifier); - static float twinblade_positive_modifier = Config.getFloat("twinblade_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.twinblade_positiveDamageModifier); - static float rapier_positive_modifier = Config.getFloat("rapier_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.rapier_positiveDamageModifier); - static float katana_positive_modifier = Config.getFloat("katana_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.katana_positiveDamageModifier); - static float sai_positive_modifier = Config.getFloat("sai_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.sai_positiveDamageModifier); - static float spear_positive_modifier = Config.getFloat("spear_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.spear_positiveDamageModifier); - static float glaive_positive_modifier = Config.getFloat("glaive_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.glaive_positiveDamageModifier); - static float warglaive_positive_modifier = Config.getFloat("warglaive_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.warglaive_positiveDamageModifier); - static float cutlass_positive_modifier = Config.getFloat("cutlass_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.cutlass_positiveDamageModifier); - static float claymore_positive_modifier = Config.getFloat("claymore_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.claymore_positiveDamageModifier); - static float greataxe_positive_modifier = Config.getFloat("greataxe_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.greataxe_positiveDamageModifier); - static float greathammer_positive_modifier = Config.getFloat("greathammer_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.greathammer_positiveDamageModifier); - static float chakram_positive_modifier = Config.getFloat("chakram_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.chakram_positiveDamageModifier); - static float scythe_positive_modifier = Config.getFloat("scythe_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.scythe_positiveDamageModifier); - static float halberd_positive_modifier = Config.getFloat("halberd_positiveDamageModifier", "WeaponAttributes", ConfigDefaultValues.halberd_positiveDamageModifier); - - static float longsword_negative_modifier = Config.getFloat("longsword_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.longsword_negativeDamageModifier); - static float twinblade_negative_modifier = Config.getFloat("twinblade_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.twinblade_negativeDamageModifier); - static float rapier_negative_modifier = Config.getFloat("rapier_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.rapier_negativeDamageModifier); - static float sai_negative_modifier = Config.getFloat("sai_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.sai_negativeDamageModifier); - static float spear_negative_modifier = Config.getFloat("spear_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.spear_negativeDamageModifier); - static float katana_negative_modifier = Config.getFloat("katana_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.katana_negativeDamageModifier); - static float glaive_negative_modifier = Config.getFloat("glaive_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.glaive_negativeDamageModifier); - static float warglaive_negative_modifier = Config.getFloat("warglaive_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.warglaive_negativeDamageModifier); - static float cutlass_negative_modifier = Config.getFloat("cutlass_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.cutlass_negativeDamageModifier); - static float claymore_negative_modifier = Config.getFloat("claymore_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.claymore_negativeDamageModifier); - static float greataxe_negative_modifier = Config.getFloat("greataxe_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.greataxe_negativeDamageModifier); - static float greathammer_negative_modifier = Config.getFloat("greathammer_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.greathammer_negativeDamageModifier); - static float chakram_negative_modifier = Config.getFloat("chakram_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.chakram_negativeDamageModifier); - static float scythe_negative_modifier = Config.getFloat("scythe_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.scythe_negativeDamageModifier); - static float halberd_negative_modifier = Config.getFloat("halberd_negativeDamageModifier", "WeaponAttributes", ConfigDefaultValues.halberd_negativeDamageModifier); - - static float longsword_attackspeed = Config.getFloat("longsword_attackSpeed", "WeaponAttributes", ConfigDefaultValues.longsword_attackSpeed); - static float twinblade_attackspeed = Config.getFloat("twinblade_attackSpeed", "WeaponAttributes", ConfigDefaultValues.twinblade_attackSpeed); - static float rapier_attackspeed = Config.getFloat("rapier_attackSpeed", "WeaponAttributes", ConfigDefaultValues.rapier_attackSpeed); - static float sai_attackspeed = Config.getFloat("sai_attackSpeed", "WeaponAttributes", ConfigDefaultValues.sai_attackSpeed); - static float spear_attackspeed = Config.getFloat("spear_attackSpeed", "WeaponAttributes", ConfigDefaultValues.spear_attackSpeed); - static float katana_attackspeed = Config.getFloat("katana_attackSpeed", "WeaponAttributes", ConfigDefaultValues.katana_attackSpeed); - static float glaive_attackspeed = Config.getFloat("glaive_attackSpeed", "WeaponAttributes", ConfigDefaultValues.glaive_attackSpeed); - static float warglaive_attackspeed = Config.getFloat("warglaive_attackSpeed", "WeaponAttributes", ConfigDefaultValues.warglaive_attackSpeed); - static float cutlass_attackspeed = Config.getFloat("cutlass_attackSpeed", "WeaponAttributes", ConfigDefaultValues.cutlass_attackSpeed); - static float claymore_attackspeed = Config.getFloat("claymore_attackSpeed", "WeaponAttributes", ConfigDefaultValues.claymore_attackSpeed); - static float greataxe_attackspeed = Config.getFloat("greataxe_attackSpeed", "WeaponAttributes", ConfigDefaultValues.greataxe_attackSpeed); - static float greathammer_attackspeed = Config.getFloat("greathammer_attackSpeed", "WeaponAttributes", ConfigDefaultValues.greathammer_attackSpeed); - static float chakram_attackspeed = Config.getFloat("chakram_attackSpeed", "WeaponAttributes", ConfigDefaultValues.chakram_attackSpeed); - static float scythe_attackspeed = Config.getFloat("scythe_attackSpeed", "WeaponAttributes", ConfigDefaultValues.scythe_attackSpeed); - static float halberd_attackspeed = Config.getFloat("halberd_attackSpeed", "WeaponAttributes", ConfigDefaultValues.halberd_attackSpeed); - - - static int longsword_modifier = (int) (longsword_positive_modifier - longsword_negative_modifier); - static int twinblade_modifier = (int) (twinblade_positive_modifier - twinblade_negative_modifier); - static int rapier_modifier = (int) (rapier_positive_modifier - rapier_negative_modifier); - static int sai_modifier = (int) (sai_positive_modifier - sai_negative_modifier); - static int spear_modifier = (int) (spear_positive_modifier - spear_negative_modifier); - static int katana_modifier = (int) (katana_positive_modifier - katana_negative_modifier); - static int glaive_modifier = (int) (glaive_positive_modifier - glaive_negative_modifier); - static int warglaive_modifier = (int) (warglaive_positive_modifier - warglaive_negative_modifier); - static int cutlass_modifier = (int) (cutlass_positive_modifier - cutlass_negative_modifier); - static int chakram_modifier = (int) (chakram_positive_modifier - chakram_negative_modifier); - static int scythe_modifier = (int) (scythe_positive_modifier - scythe_negative_modifier); - static int claymore_modifier = (int) (claymore_positive_modifier - claymore_negative_modifier); - static int greathammer_modifier = (int) (greathammer_positive_modifier - greathammer_negative_modifier); - static int greataxe_modifier = (int) (greataxe_positive_modifier - greataxe_negative_modifier); - static int halberd_modifier = (int) (halberd_positive_modifier - halberd_negative_modifier); - static int adamantite_modifier = (int) Config.getFloat("adamantite_damageModifier", "WeaponAttributes", ConfigDefaultValues.adamantite_damageModifier); - static int aquarium_modifier = (int) Config.getFloat("aquarium_damageModifier", "WeaponAttributes", ConfigDefaultValues.aquarium_damageModifier); - static int banglum_modifier = (int) Config.getFloat("banglum_damageModifier", "WeaponAttributes", ConfigDefaultValues.banglum_damageModifier); - static int carmot_modifier = (int) Config.getFloat("carmot_damageModifier", "WeaponAttributes", ConfigDefaultValues.carmot_damageModifier); - static int kyber_modifier = (int) Config.getFloat("kyber_damageModifier", "WeaponAttributes", ConfigDefaultValues.kyber_damageModifier); - static int mythril_modifier = (int) Config.getFloat("mythril_damageModifier", "WeaponAttributes", ConfigDefaultValues.mythril_damageModifier); - static int orichalcum_modifier = (int) Config.getFloat("orichalcum_damageModifier", "WeaponAttributes", ConfigDefaultValues.orichalcum_damageModifier); - static int durasteel_modifier = (int) Config.getFloat("durasteel_damageModifier", "WeaponAttributes", ConfigDefaultValues.durasteel_damageModifier); - static int osmium_modifier = (int) Config.getFloat("osmium_damageModifier", "WeaponAttributes", ConfigDefaultValues.osmium_damageModifier); - static int prometheum_modifier = (int) Config.getFloat("prometheum_damageModifier", "WeaponAttributes", ConfigDefaultValues.prometheum_damageModifier); - static int quadrillum_modifier = (int) Config.getFloat("quadrillum_damageModifier", "WeaponAttributes", ConfigDefaultValues.quadrillum_damageModifier); - static int runite_modifier = (int) Config.getFloat("runite_damageModifier", "WeaponAttributes", ConfigDefaultValues.runite_damageModifier); - static int star_platinum_modifier = (int) Config.getFloat("starPlatinum_damageModifier", "WeaponAttributes", ConfigDefaultValues.starPlatinum_damageModifier); - static int bronze_modifier = (int) Config.getFloat("bronze_damageModifier", "WeaponAttributes", ConfigDefaultValues.bronze_damageModifier); - static int copper_modifier = (int) Config.getFloat("copper_damageModifier", "WeaponAttributes", ConfigDefaultValues.copper_damageModifier); - static int steel_modifier = (int) Config.getFloat("steel_damageModifier", "WeaponAttributes", ConfigDefaultValues.steel_damageModifier); - static int palladium_modifier = (int) Config.getFloat("palladium_damageModifier", "WeaponAttributes", ConfigDefaultValues.palladium_damageModifier); - static int stormyx_modifier = (int) Config.getFloat("stormyx_damageModifier", "WeaponAttributes", ConfigDefaultValues.stormyx_damageModifier); - static int celestium_modifier = (int) Config.getFloat("celestium_damageModifier", "WeaponAttributes", ConfigDefaultValues.celestium_damageModifier); - static int metallurgium_modifier = (int) Config.getFloat("metallurgium_damageModifier", "WeaponAttributes", ConfigDefaultValues.metallurgium_damageModifier); - + static float longsword_modifier = Config.weaponAttribute.typeDamageModifier.longsword_damageModifier; + static float twinblade_modifier = Config.weaponAttribute.typeDamageModifier.twinblade_damageModifier; + static float rapier_modifier = Config.weaponAttribute.typeDamageModifier.rapier_damageModifier; + static float katana_modifier = Config.weaponAttribute.typeDamageModifier.katana_damageModifier; + static float sai_modifier = Config.weaponAttribute.typeDamageModifier.sai_damageModifier; + static float spear_modifier = Config.weaponAttribute.typeDamageModifier.spear_damageModifier; + static float glaive_modifier = Config.weaponAttribute.typeDamageModifier.glaive_damageModifier; + static float warglaive_modifier = Config.weaponAttribute.typeDamageModifier.warglaive_damageModifier; + static float cutlass_modifier = Config.weaponAttribute.typeDamageModifier.cutlass_damageModifier; + static float claymore_modifier = Config.weaponAttribute.typeDamageModifier.claymore_damageModifier; + static float greataxe_modifier = Config.weaponAttribute.typeDamageModifier.greataxe_damageModifier; + static float greathammer_modifier = Config.weaponAttribute.typeDamageModifier.greathammer_damageModifier; + static float chakram_modifier = Config.weaponAttribute.typeDamageModifier.chakram_damageModifier; + static float scythe_modifier = Config.weaponAttribute.typeDamageModifier.scythe_damageModifier; + static float halberd_modifier = Config.weaponAttribute.typeDamageModifier.halberd_damageModifier; + + static float longsword_attackspeed = Config.weaponAttribute.typeAttackSpeed.longsword_attackSpeed; + static float twinblade_attackspeed = Config.weaponAttribute.typeAttackSpeed.twinblade_attackSpeed; + static float rapier_attackspeed = Config.weaponAttribute.typeAttackSpeed.rapier_attackSpeed; + static float sai_attackspeed = Config.weaponAttribute.typeAttackSpeed.sai_attackSpeed; + static float spear_attackspeed = Config.weaponAttribute.typeAttackSpeed.spear_attackSpeed; + static float katana_attackspeed = Config.weaponAttribute.typeAttackSpeed.katana_attackSpeed; + static float glaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.glaive_attackSpeed; + static float warglaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.warglaive_attackSpeed; + static float cutlass_attackspeed = Config.weaponAttribute.typeAttackSpeed.cutlass_attackSpeed; + static float claymore_attackspeed = Config.weaponAttribute.typeAttackSpeed.claymore_attackSpeed; + static float greataxe_attackspeed = Config.weaponAttribute.typeAttackSpeed.greataxe_attackSpeed; + static float greathammer_attackspeed = Config.weaponAttribute.typeAttackSpeed.greathammer_attackSpeed; + static float chakram_attackspeed = Config.weaponAttribute.typeAttackSpeed.chakram_attackSpeed; + static float scythe_attackspeed = Config.weaponAttribute.typeAttackSpeed.scythe_attackSpeed; + static float halberd_attackspeed = Config.weaponAttribute.typeAttackSpeed.halberd_attackSpeed; + + + static float adamantite_modifier = Config.weaponAttribute.materialDamageModifier.adamantite_damageModifier.get(); + static float aquarium_modifier = Config.weaponAttribute.materialDamageModifier.aquarium_damageModifier.get(); + static float banglum_modifier = Config.weaponAttribute.materialDamageModifier.banglum_damageModifier.get(); + static float carmot_modifier = Config.weaponAttribute.materialDamageModifier.carmot_damageModifier.get(); + static float kyber_modifier = Config.weaponAttribute.materialDamageModifier.kyber_damageModifier.get(); + static float mythril_modifier = Config.weaponAttribute.materialDamageModifier.mythril_damageModifier.get(); + static float orichalcum_modifier = Config.weaponAttribute.materialDamageModifier.orichalcum_damageModifier.get(); + static float durasteel_modifier = Config.weaponAttribute.materialDamageModifier.durasteel_damageModifier.get(); + static float osmium_modifier = Config.weaponAttribute.materialDamageModifier.osmium_damageModifier.get(); + static float prometheum_modifier = Config.weaponAttribute.materialDamageModifier.prometheum_damageModifier.get(); + static float quadrillum_modifier = Config.weaponAttribute.materialDamageModifier.quadrillum_damageModifier.get(); + static float runite_modifier = Config.weaponAttribute.materialDamageModifier.runite_damageModifier.get(); + static float star_platinum_modifier = Config.weaponAttribute.materialDamageModifier.starPlatinum_damageModifier.get(); + static float bronze_modifier = Config.weaponAttribute.materialDamageModifier.bronze_damageModifier.get(); + static float copper_modifier = Config.weaponAttribute.materialDamageModifier.copper_damageModifier.get(); + static float steel_modifier = Config.weaponAttribute.materialDamageModifier.steel_damageModifier.get(); + static float palladium_modifier = Config.weaponAttribute.materialDamageModifier.palladium_damageModifier.get(); + static float stormyx_modifier = Config.weaponAttribute.materialDamageModifier.stormyx_damageModifier.get(); + static float celestium_modifier = Config.weaponAttribute.materialDamageModifier.celestium_damageModifier.get(); + static float metallurgium_modifier = Config.weaponAttribute.materialDamageModifier.metallurgium_damageModifier.get(); + + /* 1.21 //ADAMANTITE public static final Item ADAMANTITE_LONGSWORD = registerItem( "mythicmetals_compat/adamantite/adamantite_longsword", @@ -1239,4 +1200,6 @@ public static void registerModItems() { SimplySwords.LOGGER.info("Registering Mythic Metals compat Items for " + SimplySwords.MOD_ID); } -} + */ + +} \ No newline at end of file diff --git a/fabric/src/main/java/net/sweenus/simplyswords/fabric/item/PrometheumSwordItem.java b/fabric/src/main/java/net/sweenus/simplyswords/fabric/item/PrometheumSwordItem.java deleted file mode 100644 index cb0dd5b3..00000000 --- a/fabric/src/main/java/net/sweenus/simplyswords/fabric/item/PrometheumSwordItem.java +++ /dev/null @@ -1,11 +0,0 @@ -package net.sweenus.simplyswords.fabric.item; - -import net.minecraft.item.ToolMaterial; -import net.sweenus.simplyswords.item.SimplySwordsSwordItem; -import nourl.mythicmetals.item.tools.AutoRepairable; - -public class PrometheumSwordItem extends SimplySwordsSwordItem implements AutoRepairable { - public PrometheumSwordItem(ToolMaterial toolMaterial, int attackDamage, float attackSpeed, String... repairIngredient) { - super(toolMaterial, attackDamage, attackSpeed, repairIngredient); - } -} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c2ab3ec4..6e900991 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,12 +26,6 @@ "main": [ "net.sweenus.simplyswords.fabric.SimplySwordsFabric" ], - "preLaunch": [ - "net.sweenus.simplyswords.fabric.SimplySwordsPreLaunch" - ], - "modmenu": [ - "net.sweenus.simplyswords.fabric.client.ModMenuIntegration" - ], "dynamiclights": [ "net.sweenus.simplyswords.fabric.compat.DynamicLightsCompat" ] @@ -42,7 +36,7 @@ ], "depends": { "fabric": "*", - "minecraft": ">=1.20 <=1.20.1", + "minecraft": ">=1.21.1 <=1.21.1", "architectury": ">=7.1.0", "cloth-config": ">=11.1.106" }, diff --git a/fabric/src/main/resources/simplyswords.mixins.json b/fabric/src/main/resources/simplyswords.mixins.json index b39ffe55..fd0bc594 100644 --- a/fabric/src/main/resources/simplyswords.mixins.json +++ b/fabric/src/main/resources/simplyswords.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "net.sweenus.simplyswords.fabric.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "plugin": "net.sweenus.simplyswords.fabric.mixin.SimplySwordsMixinPlugin", "client": [ ], diff --git a/forge/build.gradle b/forge/build.gradle index bba7df43..392e6297 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -1,19 +1,30 @@ plugins { - id "com.github.johnrengelman.shadow" version "7.1.2" + id 'com.github.johnrengelman.shadow' } repositories { maven {url "https://cursemaven.com"} maven { url "https://maven.blamejared.com" } maven { url "https://maven.shedaniel.me/" } - + maven { + name = 'NeoForged' + url = 'https://maven.neoforged.net/releases' + } + maven { + name = "FzzyMaven" + url = "https://maven.fzzyhmstrs.me/" + } + maven { + name = 'Kotlin for Forge' + url = 'https://thedarkcolour.github.io/KotlinForForge/' + } } architectury { platformSetupLoomIde() - forge() + neoForge() } - +/* loom { accessWidenerPath = project(":common").loom.accessWidenerPath @@ -25,6 +36,7 @@ loom { mixinConfig "simplyswords.mixins.json" } } + */ configurations { common @@ -35,25 +47,26 @@ configurations { } dependencies { - forge "net.minecraftforge:forge:${rootProject.forge_version}" - // Remove the next line if you don't want to depend on the API - modApi "dev.architectury:architectury-forge:${rootProject.architectury_version}" - modApi("me.shedaniel.cloth:cloth-config-forge:${rootProject.cloth_config_version}") - //Patchouli - modImplementation ("vazkii.patchouli:Patchouli:1.20.1-81-FORGE") + modImplementation ("vazkii.patchouli:Patchouli:1.21-87-NEOFORGE") + + neoForge "net.neoforged:neoforge:$rootProject.neoforge_version" - common(project(path: ":common", configuration: "namedElements")) { transitive false } - shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false } + // Architectury API. This is optional, and you can comment it out if you don't need it. + modImplementation "dev.architectury:architectury-neoforge:$rootProject.architectury_api_version" + common(project(path: ':common', configuration: 'namedElements')) { transitive false } + shadowCommon(project(path: ':common', configuration: 'transformProductionNeoForge')) { transitive false } + + modImplementation "me.fzzyhmstrs:fzzy_config:${project.fzz_config_version}+neoforge" //modImplementation ("curse.maven:gobber-301700:4007899") } processResources { - inputs.property "version", project.version + inputs.property 'version', project.version - filesMatching("META-INF/mods.toml") { - expand "version": project.version + filesMatching('META-INF/neoforge.mods.toml') { + expand version: project.version } } @@ -99,4 +112,4 @@ publishing { repositories { // Add repositories to publish to here. } -} +} \ No newline at end of file diff --git a/forge/gradle.properties b/forge/gradle.properties index 32f842a6..4f8c4883 100644 --- a/forge/gradle.properties +++ b/forge/gradle.properties @@ -1 +1 @@ -loom.platform=forge \ No newline at end of file +loom.platform = neoforge \ No newline at end of file diff --git a/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsExpectPlatformImpl.java b/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsExpectPlatformImpl.java index 16a21ec4..89f1d8f6 100644 --- a/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsExpectPlatformImpl.java +++ b/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsExpectPlatformImpl.java @@ -1,7 +1,8 @@ package net.sweenus.simplyswords.forge; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.FMLPaths; + +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLPaths; import net.sweenus.simplyswords.SimplySwordsExpectPlatform; import java.nio.file.Path; diff --git a/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsForge.java b/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsForge.java index a96a00cc..d6c4a0e5 100644 --- a/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsForge.java +++ b/forge/src/main/java/net/sweenus/simplyswords/forge/SimplySwordsForge.java @@ -1,20 +1,13 @@ package net.sweenus.simplyswords.forge; -import dev.architectury.platform.forge.EventBuses; -import me.shedaniel.autoconfig.AutoConfig; -import net.minecraftforge.client.ConfigScreenHandler; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; + +import net.neoforged.fml.common.Mod; import net.sweenus.simplyswords.SimplySwords; -import net.sweenus.simplyswords.config.ConfigWrapper; -import net.sweenus.simplyswords.forge.compat.GobberCompat; @Mod(SimplySwords.MOD_ID) public class SimplySwordsForge { public SimplySwordsForge() { - // Submit our event bus to let architectury register our content on the right time - + /*// Submit our event bus to let architectury register our content on the right time - EventBuses.registerModEventBus(SimplySwords.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus()); SimplySwords.init(); @@ -29,7 +22,7 @@ public SimplySwordsForge() { if (ModList.get().isLoaded("gobber2")) { GobberCompat.registerModItems(); GobberCompat.GOBBER_ITEM.register(FMLJavaModLoadingContext.get().getModEventBus()); - } + }*/ } -} +} \ No newline at end of file diff --git a/forge/src/main/java/net/sweenus/simplyswords/forge/compat/GobberCompat.java b/forge/src/main/java/net/sweenus/simplyswords/forge/compat/GobberCompat.java index f26dad75..6fb8c31d 100644 --- a/forge/src/main/java/net/sweenus/simplyswords/forge/compat/GobberCompat.java +++ b/forge/src/main/java/net/sweenus/simplyswords/forge/compat/GobberCompat.java @@ -1,89 +1,52 @@ package net.sweenus.simplyswords.forge.compat; -import net.minecraft.item.Item; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; import net.sweenus.simplyswords.SimplySwords; -import net.sweenus.simplyswords.item.GobberEndSwordItem; -import net.sweenus.simplyswords.item.GobberNetherSwordItem; -import net.sweenus.simplyswords.item.ModToolMaterial; -import net.sweenus.simplyswords.item.SimplySwordsSwordItem; +import net.sweenus.simplyswords.config.Config; public class GobberCompat { //Compat for Gobber - static float longsword_positive_modifier = SimplySwords.weaponAttributesConfig.longsword_positiveDamageModifier; - static float twinblade_positive_modifier = SimplySwords.weaponAttributesConfig.twinblade_positiveDamageModifier; - static float rapier_positive_modifier = SimplySwords.weaponAttributesConfig.rapier_positiveDamageModifier; - static float katana_positive_modifier = SimplySwords.weaponAttributesConfig.katana_positiveDamageModifier; - static float sai_positive_modifier = SimplySwords.weaponAttributesConfig.sai_positiveDamageModifier; - static float spear_positive_modifier = SimplySwords.weaponAttributesConfig.spear_positiveDamageModifier; - static float glaive_positive_modifier = SimplySwords.weaponAttributesConfig.glaive_positiveDamageModifier; - static float warglaive_positive_modifier = SimplySwords.weaponAttributesConfig.warglaive_positiveDamageModifier; - static float cutlass_positive_modifier = SimplySwords.weaponAttributesConfig.cutlass_positiveDamageModifier; - static float claymore_positive_modifier = SimplySwords.weaponAttributesConfig.claymore_positiveDamageModifier; - static float greataxe_positive_modifier = SimplySwords.weaponAttributesConfig.greataxe_positiveDamageModifier; - static float greathammer_positive_modifier = SimplySwords.weaponAttributesConfig.greathammer_positiveDamageModifier; - static float chakram_positive_modifier = SimplySwords.weaponAttributesConfig.chakram_positiveDamageModifier; - static float scythe_positive_modifier = SimplySwords.weaponAttributesConfig.scythe_positiveDamageModifier; - static float halberd_positive_modifier = SimplySwords.weaponAttributesConfig.halberd_positiveDamageModifier; - - static float longsword_negative_modifier = SimplySwords.weaponAttributesConfig.longsword_negativeDamageModifier; - static float twinblade_negative_modifier = SimplySwords.weaponAttributesConfig.twinblade_negativeDamageModifier; - static float rapier_negative_modifier = SimplySwords.weaponAttributesConfig.rapier_negativeDamageModifier; - static float sai_negative_modifier = SimplySwords.weaponAttributesConfig.sai_negativeDamageModifier; - static float spear_negative_modifier = SimplySwords.weaponAttributesConfig.spear_negativeDamageModifier; - static float katana_negative_modifier = SimplySwords.weaponAttributesConfig.katana_negativeDamageModifier; - static float glaive_negative_modifier = SimplySwords.weaponAttributesConfig.glaive_negativeDamageModifier; - static float warglaive_negative_modifier = SimplySwords.weaponAttributesConfig.warglaive_negativeDamageModifier; - static float cutlass_negative_modifier = SimplySwords.weaponAttributesConfig.cutlass_negativeDamageModifier; - static float claymore_negative_modifier = SimplySwords.weaponAttributesConfig.claymore_negativeDamageModifier; - static float greataxe_negative_modifier = SimplySwords.weaponAttributesConfig.greataxe_negativeDamageModifier; - static float greathammer_negative_modifier = SimplySwords.weaponAttributesConfig.greathammer_negativeDamageModifier; - static float chakram_negative_modifier = SimplySwords.weaponAttributesConfig.chakram_negativeDamageModifier; - static float scythe_negative_modifier = SimplySwords.weaponAttributesConfig.scythe_negativeDamageModifier; - static float halberd_negative_modifier = SimplySwords.weaponAttributesConfig.halberd_negativeDamageModifier; - - static float longsword_attackspeed = SimplySwords.weaponAttributesConfig.longsword_attackSpeed; - static float twinblade_attackspeed = SimplySwords.weaponAttributesConfig.twinblade_attackSpeed; - static float rapier_attackspeed = SimplySwords.weaponAttributesConfig.rapier_attackSpeed; - static float sai_attackspeed = SimplySwords.weaponAttributesConfig.sai_attackSpeed; - static float spear_attackspeed = SimplySwords.weaponAttributesConfig.spear_attackSpeed; - static float katana_attackspeed = SimplySwords.weaponAttributesConfig.katana_attackSpeed; - static float glaive_attackspeed = SimplySwords.weaponAttributesConfig.glaive_attackSpeed; - static float warglaive_attackspeed = SimplySwords.weaponAttributesConfig.warglaive_attackSpeed; - static float cutlass_attackspeed = SimplySwords.weaponAttributesConfig.cutlass_attackSpeed; - static float claymore_attackspeed = SimplySwords.weaponAttributesConfig.claymore_attackSpeed; - static float greataxe_attackspeed = SimplySwords.weaponAttributesConfig.greataxe_attackSpeed; - static float greathammer_attackspeed = SimplySwords.weaponAttributesConfig.greathammer_attackSpeed; - static float chakram_attackspeed = SimplySwords.weaponAttributesConfig.chakram_attackSpeed; - static float scythe_attackspeed = SimplySwords.weaponAttributesConfig.scythe_attackSpeed; - static float halberd_attackspeed = SimplySwords.weaponAttributesConfig.halberd_attackSpeed; - - static int longsword_modifier = (int) (longsword_positive_modifier - longsword_negative_modifier); - static int twinblade_modifier = (int) (twinblade_positive_modifier - twinblade_negative_modifier); - static int rapier_modifier = (int) (rapier_positive_modifier - rapier_negative_modifier); - static int sai_modifier = (int) (sai_positive_modifier - sai_negative_modifier); - static int spear_modifier = (int) (spear_positive_modifier - spear_negative_modifier); - static int katana_modifier = (int) (katana_positive_modifier - katana_negative_modifier); - static int glaive_modifier = (int) (glaive_positive_modifier - glaive_negative_modifier); - static int warglaive_modifier = (int) (warglaive_positive_modifier - warglaive_negative_modifier); - static int cutlass_modifier = (int) (cutlass_positive_modifier - cutlass_negative_modifier); - static int chakram_modifier = (int) (chakram_positive_modifier - chakram_negative_modifier); - static int scythe_modifier = (int) (scythe_positive_modifier - scythe_negative_modifier); - static int claymore_modifier = (int) (claymore_positive_modifier - claymore_negative_modifier); - static int greathammer_modifier = (int) (greathammer_positive_modifier - greathammer_negative_modifier); - static int greataxe_modifier = (int) (greataxe_positive_modifier - greataxe_negative_modifier); - static int halberd_modifier = (int) (halberd_positive_modifier - halberd_negative_modifier); - static int gobber_modifier = (int) SimplySwords.weaponAttributesConfig.gobber_damageModifier; - static int gobber_nether_modifier = (int) SimplySwords.weaponAttributesConfig.gobberNether_damageModifier; - static int gobber_end_modifier = (int) SimplySwords.weaponAttributesConfig.gobberEnd_damageModifier; + static float longsword_modifier = Config.weaponAttribute.typeDamageModifier.longsword_damageModifier; + static float twinblade_modifier = Config.weaponAttribute.typeDamageModifier.twinblade_damageModifier; + static float rapier_modifier = Config.weaponAttribute.typeDamageModifier.rapier_damageModifier; + static float katana_modifier = Config.weaponAttribute.typeDamageModifier.katana_damageModifier; + static float sai_modifier = Config.weaponAttribute.typeDamageModifier.sai_damageModifier; + static float spear_modifier = Config.weaponAttribute.typeDamageModifier.spear_damageModifier; + static float glaive_modifier = Config.weaponAttribute.typeDamageModifier.glaive_damageModifier; + static float warglaive_modifier = Config.weaponAttribute.typeDamageModifier.warglaive_damageModifier; + static float cutlass_modifier = Config.weaponAttribute.typeDamageModifier.cutlass_damageModifier; + static float claymore_modifier = Config.weaponAttribute.typeDamageModifier.claymore_damageModifier; + static float greataxe_modifier = Config.weaponAttribute.typeDamageModifier.greataxe_damageModifier; + static float greathammer_modifier = Config.weaponAttribute.typeDamageModifier.greathammer_damageModifier; + static float chakram_modifier = Config.weaponAttribute.typeDamageModifier.chakram_damageModifier; + static float scythe_modifier = Config.weaponAttribute.typeDamageModifier.scythe_damageModifier; + static float halberd_modifier = Config.weaponAttribute.typeDamageModifier.halberd_damageModifier; + + static float longsword_attackspeed = Config.weaponAttribute.typeAttackSpeed.longsword_attackSpeed; + static float twinblade_attackspeed = Config.weaponAttribute.typeAttackSpeed.twinblade_attackSpeed; + static float rapier_attackspeed = Config.weaponAttribute.typeAttackSpeed.rapier_attackSpeed; + static float sai_attackspeed = Config.weaponAttribute.typeAttackSpeed.sai_attackSpeed; + static float spear_attackspeed = Config.weaponAttribute.typeAttackSpeed.spear_attackSpeed; + static float katana_attackspeed = Config.weaponAttribute.typeAttackSpeed.katana_attackSpeed; + static float glaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.glaive_attackSpeed; + static float warglaive_attackspeed = Config.weaponAttribute.typeAttackSpeed.warglaive_attackSpeed; + static float cutlass_attackspeed = Config.weaponAttribute.typeAttackSpeed.cutlass_attackSpeed; + static float claymore_attackspeed = Config.weaponAttribute.typeAttackSpeed.claymore_attackSpeed; + static float greataxe_attackspeed = Config.weaponAttribute.typeAttackSpeed.greataxe_attackSpeed; + static float greathammer_attackspeed = Config.weaponAttribute.typeAttackSpeed.greathammer_attackSpeed; + static float chakram_attackspeed = Config.weaponAttribute.typeAttackSpeed.chakram_attackSpeed; + static float scythe_attackspeed = Config.weaponAttribute.typeAttackSpeed.scythe_attackSpeed; + static float halberd_attackspeed = Config.weaponAttribute.typeAttackSpeed.halberd_attackSpeed; + + static float gobber_modifier = Config.weaponAttribute.materialDamageModifier.gobber_damageModifier.get(); + static float gobber_nether_modifier = Config.weaponAttribute.materialDamageModifier.gobberNether_damageModifier.get(); + static float gobber_end_modifier = Config.weaponAttribute.materialDamageModifier.gobberEnd_damageModifier.get(); //GOBBER + /* 1.21 public static final DeferredRegister GOBBER_ITEM = DeferredRegister.create(ForgeRegistries.ITEMS, SimplySwords.MOD_ID); - + public static final RegistryObject GOBBER_LONGSWORD = GOBBER_ITEM.register("gobber_compat/gobber/gobber_longsword", () -> new SimplySwordsSwordItem(ModToolMaterial.GOBBER, gobber_modifier + longsword_modifier, longsword_attackspeed, "gobber2:gobber2_ingot")); @@ -272,4 +235,6 @@ public static void registerModItems() { SimplySwords.LOGGER.info("Registering Gobber compat Items for " + SimplySwords.MOD_ID); } -} + */ + +} \ No newline at end of file diff --git a/forge/src/main/java/net/sweenus/simplyswords/forge/events/SimplySwordsClientEvents.java b/forge/src/main/java/net/sweenus/simplyswords/forge/events/SimplySwordsClientEvents.java deleted file mode 100644 index c1a58d20..00000000 --- a/forge/src/main/java/net/sweenus/simplyswords/forge/events/SimplySwordsClientEvents.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.sweenus.simplyswords.forge.events; - -import net.minecraft.resource.ResourcePackProfile; -import net.minecraft.resource.ResourcePackSource; -import net.minecraft.resource.ResourceType; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.AddPackFindersEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.forgespi.locating.IModFile; -import net.minecraftforge.resource.PathPackResources; -import net.sweenus.simplyswords.SimplySwords; - -@Mod.EventBusSubscriber(modid = SimplySwords.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) -public class SimplySwordsClientEvents { - @SubscribeEvent - public static void simplySwords$addPackFinder(AddPackFindersEvent event) { - if (event.getPackType() == ResourceType.CLIENT_RESOURCES) { - //simplySwords$registerResourcePack(event, new Identifier("simplyswords", "classic"), false); - } - } - - //Deprecated - resourcepack no longer bundled - private static void simplySwords$registerResourcePack(AddPackFindersEvent event, Identifier identifier, boolean alwaysEnabled) { - event.addRepositorySource((profileAdder -> { - IModFile file = ModList.get().getModFileById(identifier.getNamespace()).getFile(); - try (PathPackResources packResources = new PathPackResources( - identifier.toString(), - true, - file.findResource("resourcepacks/" + identifier.getPath()))) { - profileAdder.accept(ResourcePackProfile.create( - identifier.toString(), - Text.of(identifier.getNamespace()+"/"+identifier.getPath()), - alwaysEnabled, - a -> packResources, - ResourceType.CLIENT_RESOURCES, - ResourcePackProfile.InsertionPosition.TOP, - ResourcePackSource.BUILTIN)); - } catch (NullPointerException e) {e.printStackTrace();} - })); - } -} \ No newline at end of file diff --git a/forge/src/main/resources/simplyswords.mixins.json b/forge/src/main/resources/simplyswords.mixins.json index 9364a78e..763a103c 100644 --- a/forge/src/main/resources/simplyswords.mixins.json +++ b/forge/src/main/resources/simplyswords.mixins.json @@ -2,7 +2,7 @@ "required": false, "minVersion": "0.8", "package": "net.sweenus.simplyswords.forge.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "client": [ ], "mixins": [ diff --git a/gradle.properties b/gradle.properties index b6a327ec..f28b5433 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,25 +1,28 @@ org.gradle.jvmargs=-Xmx4048M -minecraft_version=1.20.1 -enabled_platforms=fabric,forge +minecraft_version=1.21.1 +enabled_platforms=fabric,neoforge archives_base_name=simplyswords -mod_version=1.56.0-1.20.1 +archives_name=simplyswords +mod_version=1.57.0-1.21.1 maven_group=net.sweenus -architectury_version=9.0.8 +architectury_api_version=13.0.8 -fabric_loader_version=0.14.21 -fabric_api_version=0.88.1+1.20.1 +fabric_loader_version=0.16.5 +fabric_api_version=0.102.0+1.21.1 forge_version=1.20.1-47.1.1 -yarn_mappings=1.20.1+build.8 +neoforge_version = 21.1.46 +yarn_mappings=1.21.1+build.3 +yarn_mappings_patch_neoforge_version = 1.21+build.4 -mixin_extras_version=0.2.0-beta.8 -spellpower_version=0.10.0+1.20.1 +mixin_extras_version=0.5.0-beta.3 +spellpower_version=1.0.2+1.21.1 lambdynlights_version=4597897 spruceui_version=5.0.0+1.20 -cloth_config_version=11.1.106 -mod_menu_version=4.0.5 +fzz_config_version=0.5.6+1.21 +mod_menu_version=11.0.2 eldritch_end_version=5035580 necronomicon_version=5041803 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c0..e6441136 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d3..09523c0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +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.9-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c7873..1aa94a42 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 ac1b06f9..7101f8e4 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 d5f27957..1ded021f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,5 +10,6 @@ pluginManagement { include("common") include("fabric") include("forge") +include ('neoforge') rootProject.name = "SimplySwords"