diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/ResearchData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/ResearchData.kt index 84b4d166a..c2397a2ec 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/ResearchData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/ResearchData.kt @@ -43,6 +43,45 @@ fun addResearchData(serializer: Consumer, lang: MatteryLang serializer.accept(IMPROVED_LIMBS) + val SWIM_BOOSTERS = AndroidResearchType.Builder(modLocation(MNames.SWIM_BOOSTERS)) + .withExperience(26) + .withDescription(AndroidResearchDescriptions.SWIM_BOOSTERS.Instance(0)) + .addPrerequisite(IMPROVED_LIMBS) + .addPrerequisite(AIR_BAGS) + .addFeatureResult(AndroidFeatures.SWIM_BOOSTERS) + .withIcon(ResearchIcons.ICON_LIMB_OVERCLOCKING) + .addItem(MItemTags.TRITANIUM_PLATES, 2) + .addItem(MItemTags.COPPER_WIRES, 2) + .addItem(MItems.ELECTROMOTOR, 2) + .build() + + serializer.accept(SWIM_BOOSTERS) + + val SWIM_BOOSTERS_2 = AndroidResearchType.Builder(modLocation(MNames.SWIM_BOOSTERS + "_2")) + .withExperience(30) + .withDescription(AndroidResearchDescriptions.SWIM_BOOSTERS.Instance(1)) + .addPrerequisite(SWIM_BOOSTERS) + .addFeatureLevel(AndroidFeatures.SWIM_BOOSTERS) + .withIcon(ResearchIcons.ICON_LIMB_OVERCLOCKING) + .addItem(MItemTags.GOLD_WIRES, 8) + .addItem(MItems.ELECTROMOTOR, 2) + .build() + + serializer.accept(SWIM_BOOSTERS_2) + + val SWIM_BOOSTERS_3 = AndroidResearchType.Builder(modLocation(MNames.SWIM_BOOSTERS + "_3")) + .withExperience(30) + .withDescription(AndroidResearchDescriptions.SWIM_BOOSTERS.Instance(2)) + .addPrerequisite(SWIM_BOOSTERS_2) + .addFeatureLevel(AndroidFeatures.SWIM_BOOSTERS) + .withIcon(ResearchIcons.ICON_LIMB_OVERCLOCKING) + .addItem(MItemTags.CARBON_PLATES, 8) + .addItem(MItemTags.TRITANIUM_NUGGETS, 4) + .addItem(MItemTags.COPPER_WIRES, 2) + .build() + + serializer.accept(SWIM_BOOSTERS_3) + val STEP_ASSIST = AndroidResearchType.Builder(modLocation(MNames.STEP_ASSIST)) .withExperience(24) .addFeatureResult(AndroidFeatures.STEP_ASSIST) @@ -384,7 +423,7 @@ fun addResearchData(serializer: Consumer, lang: MatteryLang } add(limbList[0], "Limb Overclocking %s") { - russian("Разгон Конечностей %s") + russian("Разгон конечностей %s") } add(limbList[0], "description", "Boosts mobility by %s%% and attack speed by %s%%") { @@ -392,7 +431,7 @@ fun addResearchData(serializer: Consumer, lang: MatteryLang } add(AIR_BAGS, "Air Bags") { - russian("Воздушные Мешки") + russian("Воздушные мешки") } add(NANOBOTS, "Nanobots") { russian("Наноботы") @@ -415,7 +454,7 @@ fun addResearchData(serializer: Consumer, lang: MatteryLang } add(NANOBOTS_ARMOR, "Nanobots Armor") { - russian("Броня из Наноботов") + russian("Броня из наноботов") } add(NANOBOTS_ARMOR, "description", "Allows nanobots to align themselves in cell shape, reducing incoming damage by a %% by absorbing impacts") { russian("Позволяет наноботам выстраиваться в клеточную структуру, уменьшая внешний урон на определённый проект путём поглощения ударов") @@ -429,35 +468,50 @@ fun addResearchData(serializer: Consumer, lang: MatteryLang } add(armorStrengthList[0], "Nanobots Armor Strength %s") { - russian("Сила Слоя Брони Наноботов %s") + russian("Сила слоя брони наноботов %s") } add(armorStrengthList[0], "description", "Increases impact absorption strength of nanobots") { russian("Увеличивает поглощающею силу брони наноботов") } add(EXTENDED_REACH, "Extended Reach") { - russian("Удлинённые Манипуляторы") + russian("Удлинённые манипуляторы") } add(EXTENDED_REACH, "description", "Increases block interaction distance") { russian("Увеличивает радиус взаимодействия с блоками") } add(IMPROVED_LIMBS, "Improved Limbs") { - russian("Улучшенные Конечности") + russian("Улучшенные конечности") } add(IMPROVED_LIMBS, "description", "Allows limbs to be upgraded") { russian("Позволяет улучшать конечности") } + add(SWIM_BOOSTERS, "Swim Boosters") { + russian("Плавательные лопасти") + } + add(SWIM_BOOSTERS, "description", "Increases swimming speed by %s%%") { + russian("Ускоряет скорость плавания на %s%%") + } + + add(SWIM_BOOSTERS_2, "Swim Boosters 2") { + russian("Плавательные Лопасти 2") + } + + add(SWIM_BOOSTERS_3, "Swim Boosters 3") { + russian("Плавательные Лопасти 3") + } + add(STEP_ASSIST, "Step Assist") { - russian("Помощь Подъёма") + russian("Помощь подъёма") } add(STEP_ASSIST, "description", "Allows unit to step up whole blocks") { russian("Позволяет переступать полные блоки") } add(ITEM_MAGNET, "Item Magnet") { - russian("Предметный Магнит") + russian("Предметный магнит") } add(ITEM_MAGNET, "description0", "Pulls nearby items while active") { russian("Притягивает ближайшие предметы пока активен") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 0933e3658..c7cdbd1d1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -605,6 +605,7 @@ private fun items(provider: MatteryLanguageProvider) { add(MItems.ADVANCED_CONTROL_CIRCUIT, "Advanced Control Circuit") add(MItems.QUANTUM_TRANSCEIVER, "Quantum Transceiver") add(MItems.ELECTROMAGNET, "Electromagnet") + add(MItems.ELECTROMOTOR, "Electromotor") add(MItems.MIRROR_COMPOUND, "Mirror Compound") add(MItems.MIRROR, "Mirror") add(MItems.MIRROR, "description", "I can clearly see my own reflection in this mirror") @@ -704,6 +705,7 @@ private fun androidFeatures(provider: MatteryLanguageProvider) { add(AndroidFeatures.NIGHT_VISION, "Night Vision") add(AndroidFeatures.NANOBOTS_ARMOR, "Nanobots Armor") add(AndroidFeatures.ITEM_MAGNET, "Item Magnet") + add(AndroidFeatures.SWIM_BOOSTERS, "Swim Boosters") add(AndroidFeatures.STEP_ASSIST, "Step Assist") add(AndroidFeatures.JUMP_BOOST, "Jump Boost") add(AndroidFeatures.ENDER_TELEPORTER, "Ender Teleporter") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 1bd3e87b8..228ad6d08 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -607,6 +607,7 @@ private fun items(provider: MatteryLanguageProvider) { add(MItems.ADVANCED_CONTROL_CIRCUIT, "Продвинутая схема управления") add(MItems.QUANTUM_TRANSCEIVER, "Квантовый передатчик") add(MItems.ELECTROMAGNET, "Электромагнит") + add(MItems.ELECTROMOTOR, "Электромотор") add(MItems.MIRROR_COMPOUND, "Набор выплавки зеркала") add(MItems.MIRROR, "Зеркало") add(MItems.MIRROR, "description", "Я могу очень отчётливо видеть своё отражение в этом зеркале") @@ -706,6 +707,7 @@ private fun androidFeatures(provider: MatteryLanguageProvider) { add(AndroidFeatures.NIGHT_VISION, "Ночное зрение") add(AndroidFeatures.NANOBOTS_ARMOR, "Броня из наноботов") add(AndroidFeatures.ITEM_MAGNET, "Предметный магнит") + add(AndroidFeatures.SWIM_BOOSTERS, "Плавательные лопасти") add(AndroidFeatures.STEP_ASSIST, "Помощник подъёма") add(AndroidFeatures.JUMP_BOOST, "Усилитель прыжка") add(AndroidFeatures.ENDER_TELEPORTER, "Телепортатор края") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt index 6741a9151..889871d11 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/CraftingTableRecipes.kt @@ -161,7 +161,14 @@ fun addCraftingTableRecipes(consumer: Consumer) { MatteryRecipe(MItems.ELECTROMAGNET, category = RecipeCategory.MISC) .row(MItemTags.COPPER_WIRES, Tags.Items.INGOTS_IRON, MItemTags.COPPER_WIRES) - .unlockedBy(Tags.Items.ENDER_PEARLS) + .unlockedBy(Tags.Items.INGOTS_IRON) + .build(consumer) + + MatteryRecipe(MItems.ELECTROMOTOR, category = RecipeCategory.MISC) + .rowB(MItems.ELECTROMAGNET) + .row(MItems.ELECTROMAGNET, Tags.Items.INGOTS_IRON, MItems.ELECTROMAGNET) + .row(MItemTags.COPPER_WIRES, Tags.Items.INGOTS_IRON, MItemTags.COPPER_WIRES) + .unlockedBy(MItems.ELECTROMAGNET) .build(consumer) MatteryRecipe(MItems.ENERGY_SERVO, category = RecipeCategory.MISC) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDescription.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDescription.kt index 402c46eac..5c071f633 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDescription.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchDescription.kt @@ -43,6 +43,14 @@ object AndroidResearchDescriptions { )) } } + val SWIM_BOOSTERS: AndroidResearchDescription.Leveled by registrar.register("swim_boosters") { + AndroidResearchDescription.Leveled { _, list, level -> + list.add(TranslatableComponent( + "android_research.overdrive_that_matters.swim_boosters.description", + TextComponent("%.1f".format(AndroidConfig.SWIM_BOOSTERS * (1 + level) * 100.0)).withStyle(ChatFormatting.YELLOW) + )) } + } + val ITEM_MAGNET: AndroidResearchDescription.Singleton by registrar.register("item_magnet") { AndroidResearchDescription.singleton { TranslatableComponent("otm.gui.power_cost_per_tick", AndroidConfig.Magnet.POWER_DRAW.formatPower(formatAsReadable = ShiftPressedCond).copy().withStyle(ChatFormatting.YELLOW)) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/SwimBoostersFeature.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/SwimBoostersFeature.kt new file mode 100644 index 000000000..24aaebbce --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/feature/SwimBoostersFeature.kt @@ -0,0 +1,39 @@ +package ru.dbotthepony.mc.otm.android.feature + +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.world.entity.ai.attributes.AttributeModifier +import net.minecraftforge.common.ForgeMod +import ru.dbotthepony.mc.otm.android.AndroidSwitchableFeature +import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability +import ru.dbotthepony.mc.otm.client.render.ResearchIcons +import ru.dbotthepony.mc.otm.config.AndroidConfig +import ru.dbotthepony.mc.otm.core.math.RGBAColor +import ru.dbotthepony.mc.otm.registry.AndroidFeatures +import java.util.* + +class SwimBoostersFeature(android: MatteryPlayerCapability) : AndroidSwitchableFeature(AndroidFeatures.SWIM_BOOSTERS, android) { + override fun applyModifiers() { + if (!ForgeMod.SWIM_SPEED.isPresent || !isActive) + return + + val attr = ply.getAttribute(ForgeMod.SWIM_SPEED.get()) ?: return + + attr.removeModifier(MODIFIER_ID) + attr.addPermanentModifier(AttributeModifier(MODIFIER_ID, type.displayName.toString(), (level + 1) * AndroidConfig.SWIM_BOOSTERS, AttributeModifier.Operation.ADDITION)) + } + + override fun removeModifiers() { + if (!ForgeMod.SWIM_SPEED.isPresent) + return + + ply.getAttribute(ForgeMod.SWIM_SPEED.get())?.removeModifier(MODIFIER_ID) + } + + override fun renderIcon(graphics: GuiGraphics, x: Float, y: Float, width: Float, height: Float, color: RGBAColor) { + ResearchIcons.ICON_LIMB_OVERCLOCKING.render(graphics, x, y, width, height, color = color) + } + + companion object { + private val MODIFIER_ID = UUID.fromString("4a3ffa46-47a8-a03f-857d-f5c2b2c8f2f6") + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/config/AndroidConfig.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/config/AndroidConfig.kt index 73d1b105e..09bcdb1c5 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/config/AndroidConfig.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/config/AndroidConfig.kt @@ -68,6 +68,10 @@ object AndroidConfig : AbstractConfig("androids") { .comment("First, fall damage is reduced by flat resistance (this), then reduced by percentage resistance") .defineInRange("FALL_DAMAGE_REDUCTION_PER_LEVEL_F", 1.5, 0.0, Float.MAX_VALUE.toDouble()) + val SWIM_BOOSTERS: Double by builder + .comment("Increase per level") + .defineInRange("SWIM_BOOSTERS", 0.25, 0.0, Float.MAX_VALUE.toDouble()) + object EnderTeleporter { init { builder.comment("Ender Teleporter ability").push("EnderTeleporter") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidFeatures.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidFeatures.kt index bfaf0ed4b..eb4b7cb9c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidFeatures.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidFeatures.kt @@ -12,6 +12,7 @@ object AndroidFeatures { val AIR_BAGS: AndroidFeatureType by registry.register(MNames.AIR_BAGS) { AndroidFeatureType(::DummyAndroidFeature) } val STEP_ASSIST: AndroidFeatureType by registry.register(MNames.STEP_ASSIST) { AndroidFeatureType(::StepAssistFeature) } + val SWIM_BOOSTERS: AndroidFeatureType by registry.register(MNames.SWIM_BOOSTERS) { AndroidFeatureType(::SwimBoostersFeature) } val LIMB_OVERCLOCKING: AndroidFeatureType by registry.register(MNames.LIMB_OVERCLOCKING) { AndroidFeatureType(::LimbOverclockingFeature) } val ATTACK_BOOST: AndroidFeatureType by registry.register(MNames.ATTACK_BOOST) { AndroidFeatureType(::AttackBoostFeature) } val NANOBOTS_REGENERATION: AndroidFeatureType by registry.register(MNames.NANOBOTS_REGENERATION) { AndroidFeatureType(::NanobotsRegenerationFeature) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index ea35f1291..29da8121d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -452,6 +452,7 @@ object MItems { val QUANTUM_TRANSCEIVER: Item by registry.register("quantum_transceiver") { Item(DEFAULT_PROPERTIES) } val ELECTROMAGNET: Item by registry.register("electromagnet") { Item(DEFAULT_PROPERTIES) } + val ELECTROMOTOR: Item by registry.register("electromotor") { Item(DEFAULT_PROPERTIES) } val MIRROR_COMPOUND: Item by registry.register("mirror_compound") { Item(DEFAULT_PROPERTIES) } val MIRROR: Item by registry.register("mirror") { object : Item(DEFAULT_PROPERTIES) { override fun appendHoverText( @@ -488,6 +489,7 @@ object MItems { ::QUANTUM_TRANSCEIVER, ::ELECTROMAGNET, + ::ELECTROMOTOR, ::MIRROR_COMPOUND, ::MIRROR, @@ -514,6 +516,7 @@ object MItems { ::MATTER_TRANSFORM_MATRIX, ::QUANTUM_TRANSCEIVER, ::ELECTROMAGNET, + ::ELECTROMOTOR, ::MIRROR_COMPOUND, ::MIRROR, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt index 260392508..8fac6557d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt @@ -196,6 +196,7 @@ object MNames { // android features and research const val AIR_BAGS = "air_bags" const val STEP_ASSIST = "step_assist" + const val SWIM_BOOSTERS = "swim_boosters" const val LIMB_OVERCLOCKING = "limb_overclocking" const val LIMB_OVERCLOCKING_1 = "limb_overclocking_1" diff --git a/src/main/resources/assets/overdrive_that_matters/textures/item/component/electromotor.png b/src/main/resources/assets/overdrive_that_matters/textures/item/component/electromotor.png new file mode 100644 index 000000000..d36635b4d Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/textures/item/component/electromotor.png differ