From 517a4643119832533f0d7b8fb17dca0ae3694bc6 Mon Sep 17 00:00:00 2001 From: SirEdvin Date: Fri, 2 Jun 2023 20:53:46 +0300 Subject: [PATCH 1/2] style: apply style correction --- build.gradle.kts | 2 +- gradle.properties | 2 +- .../peripheral/automatas/HusbandryAutomataCorePeripheral.kt | 1 - .../peripheral/forged/MasonAutomataCorePeripheral.kt | 1 - .../peripheral/forged/SmithingAutomataCorePeripheral.kt | 1 - .../computercraft/peripheral/misc/SoulScrapperPeripheral.kt | 1 - .../turtlematic/computercraft/plugins/AutomataAIPlugin.kt | 1 - .../turtlematic/computercraft/plugins/AutomataCapturePlugin.kt | 1 - .../computercraft/plugins/AutomataInteractionPlugin.kt | 2 -- .../turtlematic/computercraft/plugins/AutomataLookPlugin.kt | 1 - .../turtlematic/computercraft/plugins/AutomataRestockPlugin.kt | 1 - .../turtlematic/computercraft/plugins/AutomataTradePlugin.kt | 1 - 12 files changed, 2 insertions(+), 13 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6a07eca..ce7dd15 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ @Suppress("DSL_SCOPE_VIOLATION") plugins { - id("site.siredvin.root") version "0.3.6" + id("site.siredvin.root") version "0.3.8" } subprojectShaking { diff --git a/gradle.properties b/gradle.properties index 1ff20f1..5331fc8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs = -Xmx4G org.gradle.warning.mode = all minecraftVersion = 1.19.4 # Mod Properties -modVersion = 0.6.3-1 +modVersion = 0.6.3-2 mavenGroup = site.siredvin modBaseName = turtlematic archivesBaseName = turtlematic diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/HusbandryAutomataCorePeripheral.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/HusbandryAutomataCorePeripheral.kt index e710aa1..8f56b16 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/HusbandryAutomataCorePeripheral.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/HusbandryAutomataCorePeripheral.kt @@ -24,7 +24,6 @@ import site.siredvin.peripheralium.util.representation.animalData import site.siredvin.peripheralium.util.representation.beeNestAnalyze import site.siredvin.peripheralium.util.representation.cropAge import site.siredvin.peripheralium.util.representation.honeyLevel -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.turtlematic.api.AutomataCoreTraits import site.siredvin.turtlematic.api.IAutomataCoreTier import site.siredvin.turtlematic.api.PeripheralConfiguration diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/MasonAutomataCorePeripheral.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/MasonAutomataCorePeripheral.kt index b38f38c..d700b5c 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/MasonAutomataCorePeripheral.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/MasonAutomataCorePeripheral.kt @@ -32,7 +32,6 @@ import site.siredvin.peripheralium.util.LimitedInventory import site.siredvin.peripheralium.util.Pair import site.siredvin.peripheralium.util.representation.LuaInterpretation import site.siredvin.peripheralium.util.representation.stateProperties -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.peripheralium.xplat.PeripheraliumPlatform import site.siredvin.peripheralium.xplat.XplatRegistries import site.siredvin.turtlematic.api.IAutomataCoreTier diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/SmithingAutomataCorePeripheral.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/SmithingAutomataCorePeripheral.kt index c86d1a3..9302a90 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/SmithingAutomataCorePeripheral.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/forged/SmithingAutomataCorePeripheral.kt @@ -24,7 +24,6 @@ import site.siredvin.peripheralium.api.peripheral.IPeripheralOperation import site.siredvin.peripheralium.api.storage.ContainerUtils import site.siredvin.peripheralium.computercraft.peripheral.ability.PeripheralOwnerAbility import site.siredvin.peripheralium.util.* -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.peripheralium.xplat.PeripheraliumPlatform import site.siredvin.turtlematic.api.IAutomataCoreTier import site.siredvin.turtlematic.api.PeripheralConfiguration diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/misc/SoulScrapperPeripheral.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/misc/SoulScrapperPeripheral.kt index 97e5537..3f82423 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/misc/SoulScrapperPeripheral.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/misc/SoulScrapperPeripheral.kt @@ -11,7 +11,6 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.phys.EntityHitResult import site.siredvin.peripheralium.computercraft.peripheral.OwnedPeripheral import site.siredvin.peripheralium.computercraft.peripheral.owner.TurtlePeripheralOwner -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.turtlematic.api.ISoulFeedableItem import site.siredvin.turtlematic.api.PeripheralConfiguration diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataAIPlugin.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataAIPlugin.kt index c17e156..d896da7 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataAIPlugin.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataAIPlugin.kt @@ -9,7 +9,6 @@ import net.minecraft.world.entity.Mob import net.minecraft.world.phys.EntityHitResult import net.minecraft.world.phys.HitResult import site.siredvin.peripheralium.api.datatypes.VerticalDirection -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.turtlematic.computercraft.peripheral.automatas.BaseAutomataCorePeripheral import java.util.function.Predicate diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataCapturePlugin.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataCapturePlugin.kt index 1560af3..33c6d70 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataCapturePlugin.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataCapturePlugin.kt @@ -20,7 +20,6 @@ import site.siredvin.peripheralium.api.peripheral.IPeripheralCheck import site.siredvin.peripheralium.api.peripheral.IPeripheralFunction import site.siredvin.peripheralium.api.peripheral.IPeripheralOperation import site.siredvin.peripheralium.util.representation.LuaRepresentation -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.peripheralium.xplat.PeripheraliumPlatform import site.siredvin.peripheralium.xplat.XplatRegistries import site.siredvin.turtlematic.computercraft.operations.SingleOperation diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataInteractionPlugin.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataInteractionPlugin.kt index 89a4bf1..814edd7 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataInteractionPlugin.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataInteractionPlugin.kt @@ -5,13 +5,11 @@ import dan200.computercraft.api.lua.LuaException import dan200.computercraft.api.lua.LuaFunction import dan200.computercraft.api.lua.MethodResult import net.minecraft.world.entity.Entity -import net.minecraft.world.entity.Pose import net.minecraft.world.item.ItemStack import site.siredvin.peripheralium.api.datatypes.InteractionMode import site.siredvin.peripheralium.api.datatypes.VerticalDirection import site.siredvin.peripheralium.api.peripheral.IPeripheralOperation import site.siredvin.peripheralium.computercraft.peripheral.owner.TurtlePeripheralOwner -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.turtlematic.computercraft.operations.SingleOperation import site.siredvin.turtlematic.computercraft.peripheral.automatas.BaseAutomataCorePeripheral import java.util.function.Predicate diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataLookPlugin.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataLookPlugin.kt index 2467fc1..81ab16e 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataLookPlugin.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataLookPlugin.kt @@ -12,7 +12,6 @@ import net.minecraft.world.phys.HitResult import site.siredvin.peripheralium.api.datatypes.InteractionMode import site.siredvin.peripheralium.api.datatypes.VerticalDirection import site.siredvin.peripheralium.util.representation.LuaRepresentation -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.turtlematic.computercraft.peripheral.automatas.BaseAutomataCorePeripheral import java.util.function.BiConsumer diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataRestockPlugin.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataRestockPlugin.kt index c38d882..d314bc5 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataRestockPlugin.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataRestockPlugin.kt @@ -9,7 +9,6 @@ import net.minecraft.world.phys.EntityHitResult import net.minecraft.world.phys.HitResult import site.siredvin.peripheralium.api.datatypes.VerticalDirection import site.siredvin.peripheralium.api.peripheral.IPeripheralOperation -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.turtlematic.computercraft.operations.SingleOperation import site.siredvin.turtlematic.computercraft.peripheral.forged.ExperienceAutomataCorePeripheral import java.util.* diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataTradePlugin.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataTradePlugin.kt index 9208566..39ec1f9 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataTradePlugin.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataTradePlugin.kt @@ -15,7 +15,6 @@ import net.minecraft.world.phys.HitResult import site.siredvin.peripheralium.api.datatypes.VerticalDirection import site.siredvin.peripheralium.api.peripheral.IPeripheralOperation import site.siredvin.peripheralium.api.storage.ContainerUtils -import site.siredvin.peripheralium.util.world.FakePlayerProxy import site.siredvin.turtlematic.computercraft.operations.SingleOperation import site.siredvin.turtlematic.computercraft.peripheral.forged.ExperienceAutomataCorePeripheral import java.util.* From 82b4f3dcd12e850f663c70a9312b639eb2778e87 Mon Sep 17 00:00:00 2001 From: SirEdvin Date: Fri, 2 Jun 2023 23:20:49 +0300 Subject: [PATCH 2/2] feat(automatas): start working on fluidy automata --- .../turtlematic/api/AutomataCoreTier.kt | 18 +++++- .../turtlematic/api/IAutomataCoreTier.kt | 1 + .../common/configuration/TurtlematicConfig.kt | 24 ++++++-- .../recipe/SoulHarvestRecipeRegistry.kt | 21 ++++--- .../turtlematic/common/setup/Items.kt | 12 ++++ .../automatas/FluidyAutomataCorePeripheral.kt | 43 +++++++++++++ .../plugins/AutomataFluidStoragePlugin.kt | 23 +++++++ .../turtlematic/data/ModRecipeProvider.kt | 10 +++ .../xplat/TurtlematicCommonHooks.kt | 9 +-- .../item/creative_fluidy_automata_core.json | 7 +++ .../models/item/fluidy_automata_core.json | 7 +++ .../item/netherite_fluidy_automata_core.json | 7 +++ .../item/starbound_fluidy_automata_core.json | 7 +++ .../textures/item/big_fire/blue.png | Bin 0 -> 1514 bytes .../1a20bbdf039a1905a1788999f66658322d8a4bec | 2 +- .../8f7f8eab3c1584436fa68a1c45d234b162ef0eb6 | 4 +- .../a5def069bbe21cb11af035eb7290bbea1f3a4f10 | 2 +- .../d6347775e1013985476b4414955f759199825e46 | 58 ++++++++++-------- .../ecc215a018ded31c7dbbd212d26cd1cdd53aae9b | 20 +++--- .../creative_fluidy_automata.json | 4 ++ .../turtle_upgrades/fluidy_automata.json | 4 ++ .../netherite_fluidy_automata.json | 4 ++ .../starbound_fluidy_automata.json | 4 ++ .../netherite_fluidy_automata_core.json | 12 ++++ .../starbound_fluidy_automata_core.json | 12 ++++ .../2684ce933959e21b1877dd70df4e2422904619b1 | 4 +- .../42bea422736702abc417b05c462ae52120b042de | 6 +- .../creative_fluidy_automata.json | 4 ++ .../turtle_upgrades/fluidy_automata.json | 4 ++ .../netherite_fluidy_automata.json | 4 ++ .../starbound_fluidy_automata.json | 4 ++ .../netherite_fluidy_automata_core.json | 12 ++++ .../starbound_fluidy_automata_core.json | 12 ++++ 33 files changed, 305 insertions(+), 60 deletions(-) create mode 100644 projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/FluidyAutomataCorePeripheral.kt create mode 100644 projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataFluidStoragePlugin.kt create mode 100644 projects/core/src/main/resources/assets/turtlematic/models/item/creative_fluidy_automata_core.json create mode 100644 projects/core/src/main/resources/assets/turtlematic/models/item/fluidy_automata_core.json create mode 100644 projects/core/src/main/resources/assets/turtlematic/models/item/netherite_fluidy_automata_core.json create mode 100644 projects/core/src/main/resources/assets/turtlematic/models/item/starbound_fluidy_automata_core.json create mode 100644 projects/core/src/main/resources/assets/turtlematic/textures/item/big_fire/blue.png create mode 100644 projects/fabric/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/creative_fluidy_automata.json create mode 100644 projects/fabric/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/fluidy_automata.json create mode 100644 projects/fabric/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/netherite_fluidy_automata.json create mode 100644 projects/fabric/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/starbound_fluidy_automata.json create mode 100644 projects/fabric/src/generated/resources/data/turtlematic/recipes/netherite_fluidy_automata_core.json create mode 100644 projects/fabric/src/generated/resources/data/turtlematic/recipes/starbound_fluidy_automata_core.json create mode 100644 projects/forge/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/creative_fluidy_automata.json create mode 100644 projects/forge/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/fluidy_automata.json create mode 100644 projects/forge/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/netherite_fluidy_automata.json create mode 100644 projects/forge/src/generated/resources/data/turtlematic/computercraft/turtle_upgrades/starbound_fluidy_automata.json create mode 100644 projects/forge/src/generated/resources/data/turtlematic/recipes/netherite_fluidy_automata_core.json create mode 100644 projects/forge/src/generated/resources/data/turtlematic/recipes/starbound_fluidy_automata_core.json diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/AutomataCoreTier.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/AutomataCoreTier.kt index 7a94f7e..1e05016 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/AutomataCoreTier.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/AutomataCoreTier.kt @@ -7,14 +7,16 @@ enum class AutomataCoreTier( private val defaultInteractionRadius: Int, private val defaultMaxFuelConsumptionRate: Int, private val defaultCooldownReduceFactor: Double, + private val defaultStorageScalingFactor: Double, private val _traits: Set = emptySet(), ) : IAutomataCoreTier { - TIER1(2, 2, 1.0), - TIER2(4, 3, 1.0), + TIER1(2, 2, 1.0, 1.0), + TIER2(4, 3, 1.0, 2.0), TIER3( 8, 4, 0.8, + 4.0, setOf( AutomataCoreTraits.DURABILITY_REFUND_CHANCE, AutomataCoreTraits.APPRENTICE, @@ -24,6 +26,7 @@ enum class AutomataCoreTier( 16, 6, 0.5, + 8.0, setOf( AutomataCoreTraits.DURABILITY_REFUND, AutomataCoreTraits.STARBOUND_REGENERATION, @@ -35,6 +38,7 @@ enum class AutomataCoreTier( Int.MAX_VALUE, Int.MAX_VALUE, 0.0, + 16.0, setOf( AutomataCoreTraits.DURABILITY_REFUND, AutomataCoreTraits.FUEL_CONSUMPTION_DISABLED, @@ -48,6 +52,7 @@ enum class AutomataCoreTier( private var _interactionRadius: ForgeConfigSpec.IntValue? = null private var _maxFuelConsumptionRate: ForgeConfigSpec.IntValue? = null private var _cooldownReduceFactor: ForgeConfigSpec.DoubleValue? = null + private var _storageScalingFactor: ForgeConfigSpec.DoubleValue? = null override val interactionRadius: Int get() = _interactionRadius?.get() ?: defaultInteractionRadius @@ -58,6 +63,9 @@ enum class AutomataCoreTier( override val cooldownReduceFactor: Double get() = _cooldownReduceFactor?.get() ?: defaultCooldownReduceFactor + override val storageScaleFactor: Double + get() = _storageScalingFactor?.get() ?: defaultStorageScalingFactor + override val traits: Set get() = _traits @@ -83,5 +91,11 @@ enum class AutomataCoreTier( 0.0, 1.0, ) + _storageScalingFactor = builder.defineInRange( + settingsName() + "StorageScalingFactory", + defaultStorageScalingFactor, + 0.0, + 1000.0, + ) } } diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/IAutomataCoreTier.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/IAutomataCoreTier.kt index c79a6bb..6586333 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/IAutomataCoreTier.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/api/IAutomataCoreTier.kt @@ -8,6 +8,7 @@ import kotlin.random.Random interface IAutomataCoreTier : IConfigHandler { val interactionRadius: Int val maxFuelConsumptionRate: Int + val storageScaleFactor: Double /** * This is number, that cooldown will be multiply at diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/configuration/TurtlematicConfig.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/configuration/TurtlematicConfig.kt index e3527ed..c4447ff 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/configuration/TurtlematicConfig.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/configuration/TurtlematicConfig.kt @@ -48,8 +48,8 @@ object TurtlematicConfig : IOperationAbilityConfig { get() = ConfigHolder.COMMON_CONFIG.ENABLE_END_AUTOMATA_CORE.get() val enableHusbandryAutomataCore: Boolean get() = ConfigHolder.COMMON_CONFIG.ENABLE_HUSBANDRY_AUTOMATA_CORE.get() - val enableMercantileAutomataCore: Boolean - get() = ConfigHolder.COMMON_CONFIG.ENABLE_MERCANTILE_AUTOMATA_CORE.get() + val enableFluidyAutomataCore: Boolean + get() = ConfigHolder.COMMON_CONFIG.ENABLE_FLUIDY_AUTOMATA_CORE.get() val enableEnormousAutomata: Boolean get() = ConfigHolder.COMMON_CONFIG.ENABLE_ENORMOUS_AUTOMATA.get() @@ -65,6 +65,8 @@ object TurtlematicConfig : IOperationAbilityConfig { val enableMasonAutomataCore: Boolean get() = ConfigHolder.COMMON_CONFIG.ENABLE_MASON_AUTOMATA_CORE.get() + val enableMercantileAutomataCore: Boolean + get() = ConfigHolder.COMMON_CONFIG.ENABLE_MERCANTILE_AUTOMATA_CORE.get() // automata cores configuration val endAutomataCoreWarpPointLimit: Int @@ -82,6 +84,12 @@ object TurtlematicConfig : IOperationAbilityConfig { val creativeHusbandryAutomataGrownPeriod: Int get() = ConfigHolder.COMMON_CONFIG.CREATIVE_HUSBANDRY_AUTOMATA_GROWN_PERIOD.get() + val fluidyAutomataBaseTankCount: Int + get() = ConfigHolder.COMMON_CONFIG.FLUIDY_AUTOMATA_BASE_TANK_COUNT.get() + + val fluidyAutomataBaseTankCapacity: Int + get() = ConfigHolder.COMMON_CONFIG.FLUIDY_AUTOMATA_BASE_TANK_CAPACITY.get() + val durabilityRestoreChance: Double get() = ConfigHolder.COMMON_CONFIG.DURABILITY_RESTORE_CHANCE.get() @@ -119,7 +127,7 @@ object TurtlematicConfig : IOperationAbilityConfig { val ENABLE_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue val ENABLE_END_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue val ENABLE_HUSBANDRY_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue - val ENABLE_MERCANTILE_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue + val ENABLE_FLUIDY_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue val ENABLE_ENORMOUS_AUTOMATA: ForgeConfigSpec.BooleanValue // Forged automata core @@ -127,6 +135,7 @@ object TurtlematicConfig : IOperationAbilityConfig { val ENABLE_SMITHING_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue val ENABLE_ENCHANTING_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue val ENABLE_MASON_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue + val ENABLE_MERCANTILE_AUTOMATA_CORE: ForgeConfigSpec.BooleanValue val STARBOUND_AUTOMATA_FUEL_GENERATION_CHANCE: ForgeConfigSpec.DoubleValue val STARBOUND_AUTOMATA_FUEL_GENERATION_AMOUNT: ForgeConfigSpec.IntValue @@ -135,6 +144,8 @@ object TurtlematicConfig : IOperationAbilityConfig { val NETHERITE_HUSBANDRY_AUTOMATA_GROWN_PERIOD: ForgeConfigSpec.IntValue val STARBOUND_HUSBANDRY_AUTOMATA_GROWN_PERIOD: ForgeConfigSpec.IntValue val CREATIVE_HUSBANDRY_AUTOMATA_GROWN_PERIOD: ForgeConfigSpec.IntValue + val FLUIDY_AUTOMATA_BASE_TANK_COUNT: ForgeConfigSpec.IntValue + val FLUIDY_AUTOMATA_BASE_TANK_CAPACITY: ForgeConfigSpec.IntValue val DURABILITY_RESTORE_CHANCE: ForgeConfigSpec.DoubleValue val BREWING_XP_REWARD: ForgeConfigSpec.DoubleValue val ENCHANTING_WIPE_CHANGE: ForgeConfigSpec.DoubleValue @@ -172,13 +183,14 @@ object TurtlematicConfig : IOperationAbilityConfig { ENABLE_AUTOMATA_CORE = builder.define("enableWeakAutomataCore", true) ENABLE_END_AUTOMATA_CORE = builder.define("enableEndAutomataCore", true) ENABLE_HUSBANDRY_AUTOMATA_CORE = builder.define("enableHusbandryAutomataCore", true) - ENABLE_MERCANTILE_AUTOMATA_CORE = builder.define("enableMercantileAutomataCore", true) + ENABLE_FLUIDY_AUTOMATA_CORE = builder.define("enableFluidyAutomataCore", true) ENABLE_ENORMOUS_AUTOMATA = builder.define("enableEnormousAutomata", true) ENABLE_BREWING_AUTOMATA_CORE = builder.define("enableBrewingAutomataCore", true) ENABLE_SMITHING_AUTOMATA_CORE = builder.define("enableSmithingAutomataCore", true) ENABLE_ENCHANTING_AUTOMATA_CORE = builder.define("enableEnchantingAutomataCore", true) ENABLE_MASON_AUTOMATA_CORE = builder.define("enableMasonAutomataCore", true) + ENABLE_MERCANTILE_AUTOMATA_CORE = builder.define("enableMercantileAutomataCore", true) END_AUTOMATA_CORE_WARP_POINT_LIMIT = builder.comment("Defines max warp point stored in warp core. Mostly need to not allow NBT overflow error") .defineInRange("endAutomataCoreWarpPointLimit", 64, 1, Int.MAX_VALUE) @@ -190,6 +202,10 @@ object TurtlematicConfig : IOperationAbilityConfig { .defineInRange("starboundHusbandryAutomataGrownPeriod", 2, 1, Int.MAX_VALUE) CREATIVE_HUSBANDRY_AUTOMATA_GROWN_PERIOD = builder.comment("Amount of ticks that separate single random tick for all of surrounding crops for creative husbandry automata") .defineInRange("creativeHusbandryAutomataGrownPeriod", 40, 1, Int.MAX_VALUE) + FLUIDY_AUTOMATA_BASE_TANK_COUNT = builder.comment("Defines base fluidy automata tank count") + .defineInRange("fluidyAutomataBaseTankCount", 1, 1, 16) + FLUIDY_AUTOMATA_BASE_TANK_CAPACITY = builder.comment("Defines base fluidy automata tank capacity in forge buckets") + .defineInRange("fluidyAutomataBaseTankCapacity", 4, 1, Int.MAX_VALUE) DURABILITY_RESTORE_CHANCE = builder.comment("Defined chance to not loose item durability for netherite cores") .defineInRange("durabilityRestoreChance", 0.1, 0.0, 1.0) STARBOUND_AUTOMATA_FUEL_GENERATION_CHANCE = builder.comment("Defines chance for starbound automata to regenerate fuel points") diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/recipe/SoulHarvestRecipeRegistry.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/recipe/SoulHarvestRecipeRegistry.kt index f180e95..d4dc637 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/recipe/SoulHarvestRecipeRegistry.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/recipe/SoulHarvestRecipeRegistry.kt @@ -64,16 +64,13 @@ object SoulHarvestRecipeRegistry { ), Items.HUSBANDRY_AUTOMATA_CORE.get(), ) - val mercantileSoulRecord = - SoulHarvestRecipe( - listOf( - SimpleSoulHarvestIngredient(EntityType.WANDERING_TRADER, 1), - ), - Items.MERCANTILE_AUTOMATA_CORE.get(), - ) + val fluidySoulRecipe = SoulHarvestRecipe( + listOf(SimpleSoulHarvestIngredient(EntityType.SQUID, 4)), + Items.FLUIDY_AUTOMATA_CORE.get(), + ) addRecipe(Items.AUTOMATA_CORE.get(), endSoulRecord) addRecipe(Items.AUTOMATA_CORE.get(), husbandrySoulRecord) - addRecipe(Items.FORGED_AUTOMATA_CORE.get(), mercantileSoulRecord) + addRecipe(Items.AUTOMATA_CORE.get(), fluidySoulRecipe) } fun injectForgedAutomataCoreRecipes() { @@ -89,9 +86,17 @@ object SoulHarvestRecipeRegistry { listOf(VillagerSoulHarvestIngredient(VillagerProfession.TOOLSMITH)), Items.SMITHING_AUTOMATA_CORE.get(), ) + val mercantileSoulRecord = + SoulHarvestRecipe( + listOf( + SimpleSoulHarvestIngredient(EntityType.WANDERING_TRADER, 1), + ), + Items.MERCANTILE_AUTOMATA_CORE.get(), + ) addRecipe(Items.FORGED_AUTOMATA_CORE.get(), brewingAutomataRecord) addRecipe(Items.FORGED_AUTOMATA_CORE.get(), enchantingAutomataRecord) addRecipe(Items.FORGED_AUTOMATA_CORE.get(), smithingAutomataRecord) + addRecipe(Items.FORGED_AUTOMATA_CORE.get(), mercantileSoulRecord) } } diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/setup/Items.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/setup/Items.kt index c5407cb..bbfa9ca 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/setup/Items.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/common/setup/Items.kt @@ -25,24 +25,36 @@ object Items { val END_AUTOMATA_CORE = TurtlematicPlatform.registerItem("end_automata_core") { RecipeAutomataCore(AutomataCoreTier.TIER2, TurtlematicConfig::enableEndAutomataCore) } + val FLUIDY_AUTOMATA_CORE = TurtlematicPlatform.registerItem("fluidy_automata_core") { + RecipeAutomataCore(AutomataCoreTier.TIER2, TurtlematicConfig::enableFluidyAutomataCore) + } val NETHERITE_HUSBANDRY_AUTOMATA_CORE = TurtlematicPlatform.registerItem("netherite_husbandry_automata_core") { BaseAutomataCore(AutomataCoreTier.TIER3, TurtlematicConfig::enableHusbandryAutomataCore, itemUsageTooltip, husbandryTooltip) } val NETHERITE_END_AUTOMATA_CORE = TurtlematicPlatform.registerItem("netherite_end_automata_core") { BaseAutomataCore(AutomataCoreTier.TIER3, TurtlematicConfig::enableEndAutomataCore, itemUsageTooltip) } + val NETHERITE_FLUIDY_AUTOMATA_CORE = TurtlematicPlatform.registerItem("netherite_fluidy_automata_core") { + BaseAutomataCore(AutomataCoreTier.TIER3, TurtlematicConfig::enableFluidyAutomataCore, itemUsageTooltip) + } val STARBOUND_HUSBANDRY_AUTOMATA_CORE = TurtlematicPlatform.registerItem("starbound_husbandry_automata_core") { BaseAutomataCore(AutomataCoreTier.TIER4, TurtlematicConfig::enableHusbandryAutomataCore, itemUsageTooltip, husbandryTooltip) } val STARBOUND_END_AUTOMATA_CORE = TurtlematicPlatform.registerItem("starbound_end_automata_core") { BaseAutomataCore(AutomataCoreTier.TIER4, TurtlematicConfig::enableEndAutomataCore, itemUsageTooltip) } + val STARBOUND_FLUIDY_AUTOMATA_CORE = TurtlematicPlatform.registerItem("starbound_fluidy_automata_core") { + BaseAutomataCore(AutomataCoreTier.TIER4, TurtlematicConfig::enableFluidyAutomataCore, itemUsageTooltip) + } val CREATIVE_HUSBANDRY_AUTOMATA_CORE = TurtlematicPlatform.registerItem("creative_husbandry_automata_core") { BaseAutomataCore(AutomataCoreTier.CREATIVE, TurtlematicConfig::enableHusbandryAutomataCore, itemUsageTooltip, husbandryTooltip) } val CREATIVE_END_AUTOMATA_CORE = TurtlematicPlatform.registerItem("creative_end_automata_core") { BaseAutomataCore(AutomataCoreTier.CREATIVE, TurtlematicConfig::enableEndAutomataCore, itemUsageTooltip) } + val CREATIVE_FLUIDY_AUTOMATA_CORE = TurtlematicPlatform.registerItem("creative_fluidy_automata_core") { + BaseAutomataCore(AutomataCoreTier.CREATIVE, TurtlematicConfig::enableFluidyAutomataCore, itemUsageTooltip) + } val ENORMOUS_AUTOMATA_CORE = TurtlematicPlatform.registerItem("enormous_automata_core") { BaseAutomataCore(AutomataCoreTier.CREATIVE, TurtlematicConfig::enableEnormousAutomata, itemUsageTooltip) } diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/FluidyAutomataCorePeripheral.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/FluidyAutomataCorePeripheral.kt new file mode 100644 index 0000000..0e4d9b3 --- /dev/null +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/peripheral/automatas/FluidyAutomataCorePeripheral.kt @@ -0,0 +1,43 @@ +package site.siredvin.turtlematic.computercraft.peripheral.automatas + +import dan200.computercraft.api.turtle.ITurtleAccess +import dan200.computercraft.api.turtle.TurtleSide +import site.siredvin.peripheralium.computercraft.peripheral.ability.PeripheralOwnerAbility +import site.siredvin.peripheralium.computercraft.peripheral.ability.ScanningAbility +import site.siredvin.turtlematic.api.IAutomataCoreTier +import site.siredvin.turtlematic.api.PeripheralConfiguration +import site.siredvin.turtlematic.common.configuration.TurtlematicConfig +import site.siredvin.turtlematic.computercraft.operations.SphereOperation +import site.siredvin.turtlematic.computercraft.plugins.* + +class FluidyAutomataCorePeripheral( + turtle: ITurtleAccess, + side: TurtleSide, + tier: IAutomataCoreTier, +) : BaseAutomataCorePeripheral( + TYPE, + turtle, + side, + tier, +) { + init { + addPlugin(AutomataLookPlugin(this)) + addPlugin(AutomataInteractionPlugin(this)) + peripheralOwner.attachAbility( + PeripheralOwnerAbility.SCANNING, + ScanningAbility( + peripheralOwner, + tier.interactionRadius, + ).attachItemScan(SphereOperation.SCAN_ITEMS).attachBlockScan( + SphereOperation.SCAN_BLOCKS, + ), + ) + } + + companion object : PeripheralConfiguration { + override val TYPE = "fluidyAutomata" + } + + override val isEnabled: Boolean + get() = TurtlematicConfig.enableFluidyAutomataCore +} diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataFluidStoragePlugin.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataFluidStoragePlugin.kt new file mode 100644 index 0000000..a82504d --- /dev/null +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/computercraft/plugins/AutomataFluidStoragePlugin.kt @@ -0,0 +1,23 @@ +package site.siredvin.turtlematic.computercraft.plugins + +import dan200.computercraft.api.lua.LuaFunction +import dan200.computercraft.api.lua.MethodResult +import site.siredvin.turtlematic.computercraft.peripheral.automatas.BaseAutomataCorePeripheral + +class AutomataFluidStoragePlugin(private val tankCount: Int, private val tankCapacity: Int, automataCore: BaseAutomataCorePeripheral) : AutomataCorePlugin(automataCore) { + + @LuaFunction(mainThread = true) + fun storeFluid(): MethodResult { + return MethodResult.of() + } + + @LuaFunction(mainThread = true) + fun placeFluid(destination: String, name: String): MethodResult { + return MethodResult.of() + } + + @LuaFunction(mainThread = true) + fun getStored(): MethodResult { + return MethodResult.of() + } +} diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/data/ModRecipeProvider.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/data/ModRecipeProvider.kt index f7dcdea..354382b 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/data/ModRecipeProvider.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/data/ModRecipeProvider.kt @@ -71,6 +71,11 @@ class ModRecipeProvider(output: PackOutput) : RecipeProvider(output) { ModRecipeIngredients.get().netheriteIngot, Items.NETHERITE_HUSBANDRY_AUTOMATA_CORE.get(), ).save(consumer) + TweakedUpgradeRecipeBuilder.smithing( + Ingredient.of(Items.FLUIDY_AUTOMATA_CORE.get()), + ModRecipeIngredients.get().netheriteIngot, + Items.NETHERITE_FLUIDY_AUTOMATA_CORE.get(), + ).save(consumer) TweakedUpgradeRecipeBuilder.smithing( Ingredient.of(Items.END_AUTOMATA_CORE.get()), ModRecipeIngredients.get().netheriteIngot, @@ -86,6 +91,11 @@ class ModRecipeProvider(output: PackOutput) : RecipeProvider(output) { ModRecipeIngredients.get().netherStar, Items.STARBOUND_END_AUTOMATA_CORE.get(), ).save(consumer) + TweakedUpgradeRecipeBuilder.smithing( + Ingredient.of(Items.NETHERITE_FLUIDY_AUTOMATA_CORE.get()), + ModRecipeIngredients.get().netherStar, + Items.STARBOUND_FLUIDY_AUTOMATA_CORE.get(), + ).save(consumer) TweakedUpgradeRecipeBuilder.smithing( Ingredient.of(Items.BREWING_AUTOMATA_CORE.get()), diff --git a/projects/core/src/main/kotlin/site/siredvin/turtlematic/xplat/TurtlematicCommonHooks.kt b/projects/core/src/main/kotlin/site/siredvin/turtlematic/xplat/TurtlematicCommonHooks.kt index cc17a26..afc645e 100644 --- a/projects/core/src/main/kotlin/site/siredvin/turtlematic/xplat/TurtlematicCommonHooks.kt +++ b/projects/core/src/main/kotlin/site/siredvin/turtlematic/xplat/TurtlematicCommonHooks.kt @@ -25,10 +25,7 @@ import site.siredvin.turtlematic.common.items.base.BaseAutomataCore import site.siredvin.turtlematic.common.recipe.SoulHarvestRecipeRegistry import site.siredvin.turtlematic.common.setup.EntityTypes import site.siredvin.turtlematic.common.setup.Items -import site.siredvin.turtlematic.computercraft.peripheral.automatas.AutomataCorePeripheral -import site.siredvin.turtlematic.computercraft.peripheral.automatas.EndAutomataCorePeripheral -import site.siredvin.turtlematic.computercraft.peripheral.automatas.EnormousAutomataCorePeripheral -import site.siredvin.turtlematic.computercraft.peripheral.automatas.HusbandryAutomataCorePeripheral +import site.siredvin.turtlematic.computercraft.peripheral.automatas.* import site.siredvin.turtlematic.computercraft.peripheral.forged.* import site.siredvin.turtlematic.computercraft.peripheral.misc.* import site.siredvin.turtlematic.computercraft.turtle.ChunkVialTurtle @@ -251,6 +248,10 @@ object TurtlematicCommonHooks { registerClockwiseTurtleUpgrade(HusbandryAutomataCorePeripheral.UPGRADE_ID.toNetherite(), Items.NETHERITE_HUSBANDRY_AUTOMATA_CORE, ::HusbandryAutomataCorePeripheral, TickerFunctions::netheriteHusbandryTick) registerStarboundTurtleUpgrade(HusbandryAutomataCorePeripheral.UPGRADE_ID.toStarbound(), Items.STARBOUND_HUSBANDRY_AUTOMATA_CORE, ::HusbandryAutomataCorePeripheral, TickerFunctions::starboundHusbandryTick) registerClockwiseTurtleUpgrade(HusbandryAutomataCorePeripheral.UPGRADE_ID.toCreative(), Items.CREATIVE_HUSBANDRY_AUTOMATA_CORE, ::HusbandryAutomataCorePeripheral, TickerFunctions::creativeHusbandryTick) + registerClockwiseTurtleUpgrade(FluidyAutomataCorePeripheral.UPGRADE_ID, Items.FLUIDY_AUTOMATA_CORE, ::FluidyAutomataCorePeripheral) + registerClockwiseTurtleUpgrade(FluidyAutomataCorePeripheral.UPGRADE_ID.toNetherite(), Items.NETHERITE_FLUIDY_AUTOMATA_CORE, ::FluidyAutomataCorePeripheral) + registerStarboundTurtleUpgrade(FluidyAutomataCorePeripheral.UPGRADE_ID.toStarbound(), Items.STARBOUND_FLUIDY_AUTOMATA_CORE, ::FluidyAutomataCorePeripheral) + registerClockwiseTurtleUpgrade(FluidyAutomataCorePeripheral.UPGRADE_ID.toCreative(), Items.CREATIVE_FLUIDY_AUTOMATA_CORE, ::FluidyAutomataCorePeripheral) registerClockwiseTurtleUpgrade(EndAutomataCorePeripheral.UPGRADE_ID, Items.END_AUTOMATA_CORE, ::EndAutomataCorePeripheral) registerClockwiseTurtleUpgrade(EndAutomataCorePeripheral.UPGRADE_ID.toNetherite(), Items.NETHERITE_END_AUTOMATA_CORE, ::EndAutomataCorePeripheral) registerStarboundTurtleUpgrade(EndAutomataCorePeripheral.UPGRADE_ID.toStarbound(), Items.STARBOUND_END_AUTOMATA_CORE, ::EndAutomataCorePeripheral) diff --git a/projects/core/src/main/resources/assets/turtlematic/models/item/creative_fluidy_automata_core.json b/projects/core/src/main/resources/assets/turtlematic/models/item/creative_fluidy_automata_core.json new file mode 100644 index 0000000..7edf024 --- /dev/null +++ b/projects/core/src/main/resources/assets/turtlematic/models/item/creative_fluidy_automata_core.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "turtlematic:item/creative_gear", + "layer1": "turtlematic:item/big_fire/blue" + } +} \ No newline at end of file diff --git a/projects/core/src/main/resources/assets/turtlematic/models/item/fluidy_automata_core.json b/projects/core/src/main/resources/assets/turtlematic/models/item/fluidy_automata_core.json new file mode 100644 index 0000000..fcb4d2d --- /dev/null +++ b/projects/core/src/main/resources/assets/turtlematic/models/item/fluidy_automata_core.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "turtlematic:item/base_gear", + "layer1": "turtlematic:item/fire/blue" + } +} \ No newline at end of file diff --git a/projects/core/src/main/resources/assets/turtlematic/models/item/netherite_fluidy_automata_core.json b/projects/core/src/main/resources/assets/turtlematic/models/item/netherite_fluidy_automata_core.json new file mode 100644 index 0000000..74a4725 --- /dev/null +++ b/projects/core/src/main/resources/assets/turtlematic/models/item/netherite_fluidy_automata_core.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "turtlematic:item/netherite_gear", + "layer1": "turtlematic:item/fire/blue" + } +} \ No newline at end of file diff --git a/projects/core/src/main/resources/assets/turtlematic/models/item/starbound_fluidy_automata_core.json b/projects/core/src/main/resources/assets/turtlematic/models/item/starbound_fluidy_automata_core.json new file mode 100644 index 0000000..1df818e --- /dev/null +++ b/projects/core/src/main/resources/assets/turtlematic/models/item/starbound_fluidy_automata_core.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "turtlematic:item/starbound_gear", + "layer1": "turtlematic:item/big_fire/blue" + } +} \ No newline at end of file diff --git a/projects/core/src/main/resources/assets/turtlematic/textures/item/big_fire/blue.png b/projects/core/src/main/resources/assets/turtlematic/textures/item/big_fire/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..5b1617a6d626d75240c43a382ba718e05f320cc4 GIT binary patch literal 1514 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|T2doC(|mmy zw18|523AHk24;{F1|}dO#lQ+?Gcb5DO2gSfj2Z|v?U@WLP&H9N8pPBA5pbG$0V7m3 zP;3DcT(!UgW&|6gZ)3N}G9blS;1OBOz@VoL!i*J5?aLS#nCmh_B1$5BeXNr6bM+Ea z@{>~aDsl@zx)^LKtboki)RIJnirk#MVyg;UC9n!BAR8pCucQE0Qj%?}6yY17;GAES zs$iyPpl6_D$EBd4U{jQmW)z9|8>y;bpKhp8 z8yV>WRp=I1=9MH?=;jqGLkxkLFh}T4HHViIQDt9@wZ91;?V2^8BJ~8-0jsR8t_L zsD|6OdAn*AbABUy=_@Sw)%2 zo_QsyMFmB`R0g)u2x=d073gLmEDz1gEU|+bfF_Kj3n`YYpaB;GjuFh@#Hkc&93*Iw zQY<7pfTIDJAMChn^x=8Sj_Yqup9C;dmwLK5hFAzL4Yu_@;vi6K`A)$9!<1l_gRRO= zIWFsha&mNBxV1$s1ujOhxc+b0TJM;fvqgO4=F9O9TsfRr9Q{5n4*2un(K)}e;++m0 z7OrLA&+akLPv@K<_RVR+G{5tIyLFZx4HHmk_OMGl9QTK<$%*Ma%MEYoE2bB1n}ru_ zvPn2m+&=MdS!tmMD5kPd-ldL ze!qU;_~gRGl?x}NGPNIT{La3hTA