diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt
index f47138354..c0e208ba6 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/MatteryBlock.kt
@@ -45,7 +45,7 @@ import ru.dbotthepony.mc.otm.util.math.BlockRotationFreedom
 import ru.dbotthepony.mc.otm.util.math.component1
 import ru.dbotthepony.mc.otm.util.math.component2
 import ru.dbotthepony.mc.otm.util.math.component3
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.once
 import java.util.concurrent.Callable
 import java.util.function.Function
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/Jobs.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/Jobs.kt
index 1c4ac2578..434b79133 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/Jobs.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/Jobs.kt
@@ -16,7 +16,7 @@ import ru.dbotthepony.mc.otm.util.math.Decimal
 import ru.dbotthepony.mc.otm.util.math.weakEqualDoubles
 import ru.dbotthepony.mc.otm.util.math.weakGreaterThan
 import ru.dbotthepony.mc.otm.util.math.weakLessThan
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.data.codec.DecimalCodec
 
 private fun isReason(status: Any?, reason: Any) = status == null || status == reason
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt
index d9f2661e6..1db03d391 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryWorkerBlockEntity.kt
@@ -14,8 +14,8 @@ import ru.dbotthepony.mc.otm.capability.UpgradeType
 import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage
 import ru.dbotthepony.mc.otm.container.UpgradeContainer
 import ru.dbotthepony.mc.otm.util.immutableList
-import ru.dbotthepony.mc.otm.core.nbt.getCompoundList
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getCompoundList
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.countingLazy
 
 /**
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt
index 18d47149f..1f4510bc1 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/RedstoneControl.kt
@@ -7,8 +7,8 @@ import ru.dbotthepony.mc.otm.network.syncher.SynchableGroup
 import ru.dbotthepony.kommons.util.Listenable
 import ru.dbotthepony.kommons.util.getValue
 import ru.dbotthepony.kommons.util.setValue
-import ru.dbotthepony.mc.otm.core.nbt.mapString
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.mapString
+import ru.dbotthepony.mc.otm.util.set
 import java.util.function.Consumer
 
 interface IRedstoneControlled {
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt
index b7cd09496..76370011a 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt
@@ -40,8 +40,8 @@ import ru.dbotthepony.mc.otm.registry.game.MBlockEntities
 import ru.dbotthepony.mc.otm.registry.game.MItems
 import ru.dbotthepony.mc.otm.util.math.getSphericalBlockPositions
 import ru.dbotthepony.mc.otm.util.math.times
-import ru.dbotthepony.mc.otm.core.nbt.map
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.map
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.otmRandom
 import ru.dbotthepony.mc.otm.matter.MatterManager
 import ru.dbotthepony.mc.otm.registry.MDamageTypes
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/PainterBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/PainterBlockEntity.kt
index e405ef5a2..9a0af40be 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/PainterBlockEntity.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/PainterBlockEntity.kt
@@ -23,8 +23,8 @@ import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
 import ru.dbotthepony.mc.otm.util.immutableList
 import ru.dbotthepony.mc.otm.util.immutableMap
 import ru.dbotthepony.mc.otm.util.isNotEmpty
-import ru.dbotthepony.mc.otm.core.nbt.mapPresent
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.mapPresent
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.menu.decorative.PainterMenu
 import ru.dbotthepony.mc.otm.registry.game.MBlockEntities
 import java.util.*
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterPanelBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterPanelBlockEntity.kt
index 75b376121..d572f3d9f 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterPanelBlockEntity.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterPanelBlockEntity.kt
@@ -18,9 +18,9 @@ import ru.dbotthepony.mc.otm.capability.matter.PatternState
 import ru.dbotthepony.mc.otm.capability.matter.ReplicationTask
 import ru.dbotthepony.mc.otm.capability.matter.ReplicationTaskAllocation
 import ru.dbotthepony.mc.otm.util.collect.WeakHashSet
-import ru.dbotthepony.mc.otm.core.nbt.getCompoundList
-import ru.dbotthepony.mc.otm.core.nbt.map
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getCompoundList
+import ru.dbotthepony.mc.otm.util.map
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.ItemSorter
 import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode
 import ru.dbotthepony.mc.otm.menu.IItemSortingSettings
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/ItemMonitorBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/ItemMonitorBlockEntity.kt
index 6e7b28cff..285f684e0 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/ItemMonitorBlockEntity.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/ItemMonitorBlockEntity.kt
@@ -34,9 +34,9 @@ import ru.dbotthepony.mc.otm.container.IEnhancedCraftingContainer
 import ru.dbotthepony.mc.otm.container.util.slotIterator
 import ru.dbotthepony.mc.otm.util.TranslatableComponent
 import ru.dbotthepony.mc.otm.util.isNotEmpty
-import ru.dbotthepony.mc.otm.core.nbt.map
-import ru.dbotthepony.mc.otm.core.nbt.mapString
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.map
+import ru.dbotthepony.mc.otm.util.mapString
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.ItemStorageStackSorter
 import ru.dbotthepony.mc.otm.graph.storage.StorageGraph
 import ru.dbotthepony.mc.otm.graph.storage.StorageNode
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt
index 538aac754..4f9751cb8 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt
@@ -17,14 +17,13 @@ import ru.dbotthepony.mc.otm.block.tech.EnergyCounterBlock
 import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
 import ru.dbotthepony.mc.otm.capability.*
 import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage
-import ru.dbotthepony.mc.otm.core.*
 import ru.dbotthepony.mc.otm.util.chart.DecimalHistoryChart
 import ru.dbotthepony.mc.otm.util.math.BlockRotation
 import ru.dbotthepony.mc.otm.util.math.Decimal
 import ru.dbotthepony.mc.otm.util.math.RelativeSide
-import ru.dbotthepony.mc.otm.core.nbt.getDecimal
-import ru.dbotthepony.mc.otm.core.nbt.mapPresent
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getDecimal
+import ru.dbotthepony.mc.otm.util.mapPresent
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.countingLazy
 import ru.dbotthepony.mc.otm.menu.tech.EnergyCounterMenu
 import ru.dbotthepony.mc.otm.registry.game.MBlockEntities
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/AbstractProfiledStorage.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/AbstractProfiledStorage.kt
index daacb0834..10b8d7255 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/AbstractProfiledStorage.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/AbstractProfiledStorage.kt
@@ -6,8 +6,8 @@ import net.minecraft.nbt.CompoundTag
 import net.neoforged.neoforge.common.util.INBTSerializable
 import ru.dbotthepony.mc.otm.util.chart.DecimalHistoryChart
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.map
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.map
+import ru.dbotthepony.mc.otm.util.set
 
 abstract class AbstractProfiledStorage<out P>(val parent: P) : IProfiledStorage, INBTSerializable<CompoundTag?> {
 	final override val received = DecimalHistoryChart(ticks = HISTORY_SIZE)
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/AbstractMatteryDrive.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/AbstractMatteryDrive.kt
index 5a208f605..287a89722 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/AbstractMatteryDrive.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/AbstractMatteryDrive.kt
@@ -2,22 +2,17 @@ package ru.dbotthepony.mc.otm.capability.drive
 
 import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap
 import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap
-import it.unimi.dsi.fastutil.objects.ObjectArraySet
 import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet
 import net.minecraft.core.HolderLookup
 import net.minecraft.core.HolderLookup.Provider
-import kotlin.jvm.JvmOverloads
 import java.util.UUID
 import net.minecraft.nbt.CompoundTag
 import net.minecraft.nbt.ListTag
 import net.minecraft.nbt.Tag
-import org.apache.logging.log4j.LogManager
-import ru.dbotthepony.mc.otm.core.*
 import ru.dbotthepony.mc.otm.util.math.BigInteger
 import ru.dbotthepony.mc.otm.util.math.isPositive
 import ru.dbotthepony.mc.otm.util.math.serializeNBT
-import ru.dbotthepony.mc.otm.core.nbt.map
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.storage.*
 import java.math.BigInteger
 import java.util.ArrayList
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/ItemMatteryDrive.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/ItemMatteryDrive.kt
index 3c42a5018..e3fec011f 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/ItemMatteryDrive.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/drive/ItemMatteryDrive.kt
@@ -6,7 +6,7 @@ import net.minecraft.world.item.Item
 import net.minecraft.world.item.ItemStack
 import ru.dbotthepony.mc.otm.util.math.BigInteger
 import ru.dbotthepony.mc.otm.util.math.serializeNBT
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.storage.IStorageTuple
 import ru.dbotthepony.mc.otm.storage.ItemStorageStack
 import ru.dbotthepony.mc.otm.storage.StorageStack
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt
index 0e79bdd06..87b42d762 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt
@@ -15,8 +15,8 @@ import ru.dbotthepony.mc.otm.capability.FlowDirection
 import ru.dbotthepony.mc.otm.capability.extractEnergy
 import ru.dbotthepony.mc.otm.capability.receiveEnergy
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.getDecimal
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getDecimal
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.registry.StatNames
 import ru.dbotthepony.mc.otm.triggers.AndroidBatteryTrigger
 import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BlockEnergyStorageImpl.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BlockEnergyStorageImpl.kt
index fbb8e4891..b3cd075c7 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BlockEnergyStorageImpl.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BlockEnergyStorageImpl.kt
@@ -10,8 +10,8 @@ import ru.dbotthepony.mc.otm.capability.FlowDirection
 import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
 import ru.dbotthepony.mc.otm.config.VerboseEnergyBalanceValues
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.mapPresent
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.mapPresent
+import ru.dbotthepony.mc.otm.util.set
 
 open class BlockEnergyStorageImpl(
 	protected val listener: () -> Unit,
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/BlockMatteryFluidHandler.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/BlockMatteryFluidHandler.kt
index 802c1198d..35b5e5fcf 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/BlockMatteryFluidHandler.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/fluid/BlockMatteryFluidHandler.kt
@@ -5,7 +5,6 @@ import net.minecraft.core.component.DataComponents
 import net.minecraft.nbt.CompoundTag
 import net.minecraft.nbt.Tag
 import net.minecraft.resources.ResourceLocation
-import net.minecraft.world.item.BlockItem
 import net.minecraft.world.item.ItemStack
 import net.minecraft.world.item.component.CustomData
 import net.neoforged.neoforge.common.util.INBTSerializable
@@ -14,7 +13,7 @@ import ru.dbotthepony.kommons.util.Delegate
 import ru.dbotthepony.kommons.util.getValue
 import ru.dbotthepony.kommons.util.setValue
 import ru.dbotthepony.mc.otm.Registries
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import java.util.function.IntSupplier
 
 /**
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterStorageImpl.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterStorageImpl.kt
index 032a778f7..e8b748f54 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterStorageImpl.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/MatterStorageImpl.kt
@@ -7,7 +7,7 @@ import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
 import ru.dbotthepony.mc.otm.config.VerboseEnergyBalanceValues
 import ru.dbotthepony.mc.otm.capability.FlowDirection
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 
 open class MatterStorageImpl(
 	protected val listener: Runnable?,
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatterStorageProvider.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatterStorageProvider.kt
index f25a30c36..3273d3150 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatterStorageProvider.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatterStorageProvider.kt
@@ -13,8 +13,8 @@ import ru.dbotthepony.mc.otm.compat.jade.JadeUids
 import ru.dbotthepony.mc.otm.util.TranslatableComponent
 import ru.dbotthepony.mc.otm.util.getCapability
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.getDecimal
-import ru.dbotthepony.mc.otm.core.nbt.putDecimal
+import ru.dbotthepony.mc.otm.util.getDecimal
+import ru.dbotthepony.mc.otm.util.putDecimal
 import ru.dbotthepony.mc.otm.util.formatMatter
 import snownee.jade.api.BlockAccessor
 import snownee.jade.api.IBlockComponentProvider
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryEnergyProvider.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryEnergyProvider.kt
index a96fdb5d1..9ae99a619 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryEnergyProvider.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryEnergyProvider.kt
@@ -13,8 +13,8 @@ import ru.dbotthepony.mc.otm.util.math.Decimal
 import ru.dbotthepony.kommons.math.RGBAColor
 import ru.dbotthepony.mc.otm.capability.IProfiledStorage
 import ru.dbotthepony.mc.otm.util.getCapability
-import ru.dbotthepony.mc.otm.core.nbt.getDecimal
-import ru.dbotthepony.mc.otm.core.nbt.putDecimal
+import ru.dbotthepony.mc.otm.util.getDecimal
+import ru.dbotthepony.mc.otm.util.putDecimal
 import ru.dbotthepony.mc.otm.util.formatPower
 import snownee.jade.api.*
 import snownee.jade.api.config.IPluginConfig
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryWorkerProvider.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryWorkerProvider.kt
index 1bdfc8c62..9ea73c0e6 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryWorkerProvider.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/jade/providers/MatteryWorkerProvider.kt
@@ -9,8 +9,8 @@ import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
 import ru.dbotthepony.mc.otm.compat.jade.JadeTagKeys
 import ru.dbotthepony.mc.otm.compat.jade.JadeUids
 import ru.dbotthepony.kommons.math.RGBAColor
-import ru.dbotthepony.mc.otm.core.nbt.getCompoundList
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getCompoundList
+import ru.dbotthepony.mc.otm.util.set
 import snownee.jade.api.BlockAccessor
 import snownee.jade.api.IBlockComponentProvider
 import snownee.jade.api.IServerDataProvider
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/EnhancedContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/EnhancedContainer.kt
index 2f8e9b809..9fafb973b 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/EnhancedContainer.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/EnhancedContainer.kt
@@ -14,7 +14,7 @@ import net.neoforged.neoforge.common.util.INBTSerializable
 import org.apache.logging.log4j.LogManager
 import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
 import ru.dbotthepony.mc.otm.util.isNotEmpty
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 
 /**
  * Flexible base implementation of [IEnhancedContainer], designed to be inherited, or used as-is
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/ContainerSlot.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/ContainerSlot.kt
index 05c90902b..ec1139e49 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/ContainerSlot.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/ContainerSlot.kt
@@ -9,7 +9,7 @@ import net.neoforged.neoforge.common.util.INBTSerializable
 import org.apache.logging.log4j.LogManager
 import ru.dbotthepony.mc.otm.container.IAutomatedContainerSlot
 import ru.dbotthepony.mc.otm.util.isNotEmpty
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.data.getOrNull
 
 open class ContainerSlot(
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/FilteredContainerSlot.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/FilteredContainerSlot.kt
index 4d96d2e80..1dbcc3b76 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/FilteredContainerSlot.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/FilteredContainerSlot.kt
@@ -1,18 +1,14 @@
 package ru.dbotthepony.mc.otm.container.slotted
 
 import net.minecraft.core.HolderLookup
-import net.minecraft.core.registries.BuiltInRegistries
 import net.minecraft.nbt.CompoundTag
 import net.minecraft.nbt.NbtOps
-import net.minecraft.resources.ResourceLocation
 import net.minecraft.world.item.Item
 import net.minecraft.world.item.ItemStack
 import org.apache.logging.log4j.LogManager
 import ru.dbotthepony.mc.otm.container.IFilteredAutomatedContainerSlot
 import ru.dbotthepony.mc.otm.container.ItemFilter
-import ru.dbotthepony.mc.otm.core.nbt.set
-import ru.dbotthepony.mc.otm.util.registryName
-import java.util.Collections
+import ru.dbotthepony.mc.otm.util.set
 
 open class FilteredContainerSlot(
 	container: SlottedContainer,
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/SlottedContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/SlottedContainer.kt
index acf7cba46..e1561b3b9 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/SlottedContainer.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/slotted/SlottedContainer.kt
@@ -24,7 +24,7 @@ import ru.dbotthepony.mc.otm.container.IFilteredContainerSlot
 import ru.dbotthepony.mc.otm.container.ItemFilter
 import ru.dbotthepony.mc.otm.container.balance
 import ru.dbotthepony.mc.otm.util.isNotEmpty
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.data.codec.minRange
 import java.util.function.Predicate
 import kotlin.reflect.KClass
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/data/loot/CopyTileNbtFunction.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/data/loot/CopyTileNbtFunction.kt
index 27e1b8024..4f6e52823 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/data/loot/CopyTileNbtFunction.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/data/loot/CopyTileNbtFunction.kt
@@ -16,7 +16,7 @@ import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType
 import net.minecraft.world.level.storage.loot.parameters.LootContextParams
 import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
 import ru.dbotthepony.mc.otm.util.fromNbt
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.stream
 import ru.dbotthepony.mc.otm.registry.data.MItemFunctionTypes
 import java.util.*
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/QuantumBatteryItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/QuantumBatteryItem.kt
index 0028febe7..4522e9786 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/QuantumBatteryItem.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/QuantumBatteryItem.kt
@@ -38,9 +38,9 @@ import ru.dbotthepony.mc.otm.util.TranslatableComponent
 import ru.dbotthepony.mc.otm.util.collect.filter
 import ru.dbotthepony.mc.otm.util.isNotEmpty
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.getDecimal
+import ru.dbotthepony.mc.otm.util.getDecimal
 import ru.dbotthepony.mc.otm.util.readDecimal
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.writeDecimal
 import ru.dbotthepony.mc.otm.util.nextUUID
 import ru.dbotthepony.mc.otm.util.formatPower
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ISortingSettings.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ISortingSettings.kt
index c498f36fa..dffdbe39f 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ISortingSettings.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ISortingSettings.kt
@@ -7,9 +7,9 @@ import net.minecraft.world.item.ItemStack
 import net.neoforged.neoforge.common.util.INBTSerializable
 import ru.dbotthepony.kommons.util.getValue
 import ru.dbotthepony.kommons.util.setValue
-import ru.dbotthepony.mc.otm.core.nbt.getBoolean
-import ru.dbotthepony.mc.otm.core.nbt.mapString
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getBoolean
+import ru.dbotthepony.mc.otm.util.mapString
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.ItemSorter
 import ru.dbotthepony.mc.otm.util.ItemStackSorter
 import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryFoodData.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryFoodData.kt
index 7f80e0cb3..a44fc8c96 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryFoodData.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryFoodData.kt
@@ -14,8 +14,8 @@ import ru.dbotthepony.mc.otm.config.IFoodRegenerationValues
 import ru.dbotthepony.mc.otm.config.PlayerConfig
 import ru.dbotthepony.mc.otm.util.damageType
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.getDecimal
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getDecimal
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.registry.MDamageTypes
 import kotlin.math.max
 import kotlin.math.min
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt
index 3368b8681..0c1fa8250 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/MatteryPlayer.kt
@@ -87,8 +87,8 @@ import ru.dbotthepony.mc.otm.util.collect.filter
 import ru.dbotthepony.mc.otm.util.math.Decimal
 import ru.dbotthepony.mc.otm.util.math.RGBColorDFUCodec
 import ru.dbotthepony.mc.otm.util.math.minus
-import ru.dbotthepony.mc.otm.core.nbt.getCompoundList
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.getCompoundList
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.Savetables
 import ru.dbotthepony.mc.otm.util.TickList
 import ru.dbotthepony.mc.otm.data.codec.minRange
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidFeature.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidFeature.kt
index b225be0e1..90544c63c 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidFeature.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidFeature.kt
@@ -8,7 +8,7 @@ import ru.dbotthepony.mc.otm.network.syncher.SynchableGroup
 import ru.dbotthepony.kommons.util.getValue
 import ru.dbotthepony.kommons.util.setValue
 import ru.dbotthepony.mc.otm.player.MatteryPlayer
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 
 abstract class AndroidFeature(val type: AndroidFeatureType<*>, val android: MatteryPlayer) : INBTSerializable<CompoundTag> {
 	val ply get() = android.ply
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidResearch.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidResearch.kt
index 3a7040a51..a1668b1cf 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidResearch.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidResearch.kt
@@ -18,7 +18,7 @@ import ru.dbotthepony.mc.otm.capability.awareItemsStream
 import ru.dbotthepony.mc.otm.util.TextComponent
 import ru.dbotthepony.mc.otm.util.TranslatableComponent
 import ru.dbotthepony.mc.otm.util.registryName
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.milliTime
 import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger
 import kotlin.math.absoluteValue
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidSwitchableFeature.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidSwitchableFeature.kt
index 04a67138c..0fcff37bb 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidSwitchableFeature.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/AndroidSwitchableFeature.kt
@@ -10,7 +10,7 @@ import ru.dbotthepony.kommons.util.setValue
 import ru.dbotthepony.mc.otm.player.MatteryPlayer
 import ru.dbotthepony.mc.otm.client.render.MGUIGraphics
 import ru.dbotthepony.mc.otm.client.minecraft
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 
 abstract class AndroidSwitchableFeature(type: AndroidFeatureType<*>, android: MatteryPlayer) : AndroidFeature(type, android) {
 	var isActive by syncher.boolean(setter = setter@{ access, value ->
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsArmorFeature.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsArmorFeature.kt
index e71175c20..08de370a5 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsArmorFeature.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsArmorFeature.kt
@@ -14,7 +14,7 @@ import ru.dbotthepony.mc.otm.util.isBypassArmor
 import ru.dbotthepony.mc.otm.util.math.Decimal
 import ru.dbotthepony.mc.otm.registry.game.AndroidFeatures
 import ru.dbotthepony.mc.otm.registry.StatNames
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.onceServer
 import ru.dbotthepony.mc.otm.triggers.NanobotsArmorTrigger
 import kotlin.math.roundToInt
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsRegenerationFeature.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsRegenerationFeature.kt
index 1e3817629..03136d89a 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsRegenerationFeature.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/player/android/feature/NanobotsRegenerationFeature.kt
@@ -10,7 +10,7 @@ import ru.dbotthepony.mc.otm.player.android.AndroidFeature
 import ru.dbotthepony.mc.otm.player.MatteryPlayer
 import ru.dbotthepony.mc.otm.registry.game.AndroidFeatures
 import ru.dbotthepony.mc.otm.registry.StatNames
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import kotlin.math.roundToInt
 
 class NanobotsRegenerationFeature(android: MatteryPlayer) : AndroidFeature(AndroidFeatures.NANOBOTS_REGENERATION, android) {
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/UpgradeRecipe.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/UpgradeRecipe.kt
index a8dc121b2..fffcf03c5 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/UpgradeRecipe.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/recipe/UpgradeRecipe.kt
@@ -22,7 +22,7 @@ import net.minecraft.world.item.enchantment.ItemEnchantments
 import net.minecraft.world.level.Level
 import ru.dbotthepony.mc.otm.capability.MatteryCapability
 import ru.dbotthepony.mc.otm.capability.matter.PatternState
-import ru.dbotthepony.mc.otm.core.nbt.set
+import ru.dbotthepony.mc.otm.util.set
 import ru.dbotthepony.mc.otm.util.registryName
 import java.util.Optional
 import java.util.UUID
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/nbt/CompoundTagDelegates.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/util/CompoundTagDelegates.kt
similarity index 98%
rename from src/main/kotlin/ru/dbotthepony/mc/otm/core/nbt/CompoundTagDelegates.kt
rename to src/main/kotlin/ru/dbotthepony/mc/otm/util/CompoundTagDelegates.kt
index 7b6161557..6c60b8999 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/nbt/CompoundTagDelegates.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/util/CompoundTagDelegates.kt
@@ -1,4 +1,4 @@
-package ru.dbotthepony.mc.otm.core.nbt
+package ru.dbotthepony.mc.otm.util
 
 import net.minecraft.nbt.CompoundTag
 import java.util.*
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/nbt/CompoundTagExt.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/util/CompoundTagExt.kt
similarity index 97%
rename from src/main/kotlin/ru/dbotthepony/mc/otm/core/nbt/CompoundTagExt.kt
rename to src/main/kotlin/ru/dbotthepony/mc/otm/util/CompoundTagExt.kt
index a7ac9fd09..72a10855b 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/nbt/CompoundTagExt.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/util/CompoundTagExt.kt
@@ -1,4 +1,4 @@
-package ru.dbotthepony.mc.otm.core.nbt
+package ru.dbotthepony.mc.otm.util
 
 import com.google.gson.JsonElement
 import it.unimi.dsi.fastutil.io.FastByteArrayInputStream
@@ -14,8 +14,6 @@ import net.minecraft.nbt.NumericTag
 import net.minecraft.nbt.StringTag
 import net.minecraft.nbt.Tag
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.util.readBinaryJson
-import ru.dbotthepony.mc.otm.util.writeBinaryJson
 import java.util.UUID
 
 operator fun CompoundTag.set(index: String, value: Tag) = 				put(index, value)
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/util/Savetables.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/util/Savetables.kt
index e5d9952b2..b3095b492 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/util/Savetables.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/util/Savetables.kt
@@ -21,7 +21,6 @@ import org.apache.logging.log4j.LogManager
 import ru.dbotthepony.kommons.util.Delegate
 import ru.dbotthepony.mc.otm.util.math.Decimal
 import ru.dbotthepony.mc.otm.util.math.Vector
-import ru.dbotthepony.mc.otm.core.nbt.set
 import java.util.function.Supplier
 import kotlin.jvm.optionals.getOrNull
 import kotlin.reflect.KMutableProperty0
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/util/TooltipList.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/util/TooltipList.kt
index 885806174..5a56a4a87 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/util/TooltipList.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/util/TooltipList.kt
@@ -23,8 +23,6 @@ import ru.dbotthepony.mc.otm.client.minecraft
 import ru.dbotthepony.mc.otm.config.ClientConfig
 import ru.dbotthepony.mc.otm.container.slotted.SlottedContainer
 import ru.dbotthepony.mc.otm.util.math.Decimal
-import ru.dbotthepony.mc.otm.core.nbt.map
-import ru.dbotthepony.mc.otm.core.nbt.mapPresent
 import ru.dbotthepony.mc.otm.runIfClient
 
 class TooltipList {
diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/util/collect/UUIDIntModifiersMap.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/util/collect/UUIDIntModifiersMap.kt
index 887078056..af39a8df2 100644
--- a/src/main/kotlin/ru/dbotthepony/mc/otm/util/collect/UUIDIntModifiersMap.kt
+++ b/src/main/kotlin/ru/dbotthepony/mc/otm/util/collect/UUIDIntModifiersMap.kt
@@ -5,7 +5,7 @@ import net.minecraft.nbt.CompoundTag
 import net.minecraft.nbt.ListTag
 import net.neoforged.neoforge.common.util.INBTSerializable
 import org.apache.logging.log4j.LogManager
-import ru.dbotthepony.mc.otm.core.nbt.contains
+import ru.dbotthepony.mc.otm.util.contains
 import java.util.UUID
 
 /**