Move top level matter dust function to matter dust item
This commit is contained in:
parent
c226a988c3
commit
9c74b62f10
@ -9,91 +9,29 @@ import net.minecraft.world.inventory.AbstractContainerMenu
|
|||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
import net.minecraftforge.common.ForgeConfigSpec
|
import ru.dbotthepony.mc.otm.block.entity.Job
|
||||||
import ru.dbotthepony.mc.otm.block.entity.JobContainer
|
import ru.dbotthepony.mc.otm.block.entity.JobContainer
|
||||||
import ru.dbotthepony.mc.otm.block.entity.JobStatus
|
import ru.dbotthepony.mc.otm.block.entity.JobStatus
|
||||||
import ru.dbotthepony.mc.otm.block.entity.Job
|
|
||||||
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
|
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
|
||||||
import ru.dbotthepony.mc.otm.capability.FlowDirection
|
import ru.dbotthepony.mc.otm.capability.FlowDirection
|
||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||||
import ru.dbotthepony.mc.otm.capability.UpgradeType
|
import ru.dbotthepony.mc.otm.capability.UpgradeType
|
||||||
import ru.dbotthepony.mc.otm.capability.energy.BlockEnergyStorageImpl
|
|
||||||
import ru.dbotthepony.mc.otm.capability.energy.ProfiledEnergyStorage
|
import ru.dbotthepony.mc.otm.capability.energy.ProfiledEnergyStorage
|
||||||
import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage
|
import ru.dbotthepony.mc.otm.capability.energy.WorkerEnergyStorage
|
||||||
import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl
|
import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl
|
||||||
import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage
|
import ru.dbotthepony.mc.otm.capability.matter.ProfiledMatterStorage
|
||||||
import ru.dbotthepony.mc.otm.config.EnergyBalanceValues
|
|
||||||
import ru.dbotthepony.mc.otm.config.MachinesConfig
|
import ru.dbotthepony.mc.otm.config.MachinesConfig
|
||||||
import ru.dbotthepony.mc.otm.container.HandlerFilter
|
import ru.dbotthepony.mc.otm.container.HandlerFilter
|
||||||
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
||||||
import ru.dbotthepony.mc.otm.container.UpgradeContainer
|
import ru.dbotthepony.mc.otm.container.UpgradeContainer
|
||||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||||
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
|
|
||||||
import ru.dbotthepony.mc.otm.core.math.defineDecimal
|
|
||||||
import ru.dbotthepony.mc.otm.core.util.WriteOnce
|
|
||||||
import ru.dbotthepony.mc.otm.data.DecimalCodec
|
import ru.dbotthepony.mc.otm.data.DecimalCodec
|
||||||
import ru.dbotthepony.mc.otm.data.minRange
|
import ru.dbotthepony.mc.otm.data.minRange
|
||||||
import ru.dbotthepony.mc.otm.graph.matter.MatterGraph
|
|
||||||
import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode
|
import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode
|
||||||
import ru.dbotthepony.mc.otm.item.matter.MatterDustItem
|
|
||||||
import ru.dbotthepony.mc.otm.matter.MatterManager
|
import ru.dbotthepony.mc.otm.matter.MatterManager
|
||||||
import ru.dbotthepony.mc.otm.menu.matter.MatterDecomposerMenu
|
import ru.dbotthepony.mc.otm.menu.matter.MatterDecomposerMenu
|
||||||
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
||||||
import ru.dbotthepony.mc.otm.registry.MItems
|
import ru.dbotthepony.mc.otm.registry.MItems
|
||||||
import ru.dbotthepony.mc.otm.registry.MNames
|
|
||||||
|
|
||||||
fun moveMatterAsDustIntoContainer(_matterValue: Decimal, container: MatteryContainer, OUTPUT_DUST_MAIN: Int, OUTPUT_DUST_STACKING: Int): Decimal {
|
|
||||||
var matterValue = _matterValue
|
|
||||||
val item = MItems.MATTER_DUST as MatterDustItem
|
|
||||||
|
|
||||||
while (matterValue > Decimal.ZERO) {
|
|
||||||
val stack = container[OUTPUT_DUST_MAIN]
|
|
||||||
|
|
||||||
// первый слот пустой
|
|
||||||
if (stack.isEmpty) {
|
|
||||||
container[OUTPUT_DUST_MAIN] = ItemStack(item, 1).also {
|
|
||||||
matterValue -= item.addMatterValue(it, matterValue, false)
|
|
||||||
}
|
|
||||||
// первый слот не пустой, но мы можем влить туда материю
|
|
||||||
} else if (!item.isFull(stack) && stack.count == 1) {
|
|
||||||
matterValue -= item.addMatterValue(stack, matterValue, false)
|
|
||||||
container.setChanged(OUTPUT_DUST_MAIN)
|
|
||||||
// первый слот не пустой и мы не можем влить туда материю
|
|
||||||
} else {
|
|
||||||
val stack2 = container[OUTPUT_DUST_STACKING]
|
|
||||||
|
|
||||||
// второй слот пустой
|
|
||||||
if (stack2.isEmpty) {
|
|
||||||
container[OUTPUT_DUST_STACKING] = ItemStack(item, 1).also {
|
|
||||||
matterValue -= item.addMatterValue(it, matterValue, false)
|
|
||||||
}
|
|
||||||
// второй слот не пустой, но мы можем влить туда материю
|
|
||||||
} else if (!item.isFull(stack2)) {
|
|
||||||
if (stack2.count != 1) {
|
|
||||||
return matterValue
|
|
||||||
}
|
|
||||||
|
|
||||||
matterValue -= item.addMatterValue(stack2, matterValue, false)
|
|
||||||
container.setChanged(OUTPUT_DUST_STACKING)
|
|
||||||
}
|
|
||||||
|
|
||||||
// можем ли мы стакнуть материю из второго слота в первый?
|
|
||||||
if (!stack2.isEmpty && item.isFull(stack2)) {
|
|
||||||
if (ItemStack.isSameItemSameTags(stack, stack2) && container.getMaxStackSizeWithItem(OUTPUT_DUST_MAIN) >= stack.count + 1) {
|
|
||||||
stack.count++
|
|
||||||
stack2.count--
|
|
||||||
|
|
||||||
container.setChanged(OUTPUT_DUST_MAIN)
|
|
||||||
container.setChanged(OUTPUT_DUST_STACKING)
|
|
||||||
} else {
|
|
||||||
return matterValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Decimal.ZERO
|
|
||||||
}
|
|
||||||
|
|
||||||
class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
|
class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
|
||||||
: MatteryWorkerBlockEntity<MatterDecomposerBlockEntity.DecomposerJob>(MBlockEntities.MATTER_DECOMPOSER, pos, state, DecomposerJob.CODEC) {
|
: MatteryWorkerBlockEntity<MatterDecomposerBlockEntity.DecomposerJob>(MBlockEntities.MATTER_DECOMPOSER, pos, state, DecomposerJob.CODEC) {
|
||||||
@ -162,7 +100,7 @@ class MatterDecomposerBlockEntity(pos: BlockPos, state: BlockState)
|
|||||||
|
|
||||||
override fun onJobFinish(status: JobStatus<DecomposerJob>, id: Int) {
|
override fun onJobFinish(status: JobStatus<DecomposerJob>, id: Int) {
|
||||||
if (status.job.toDust) {
|
if (status.job.toDust) {
|
||||||
status.job.matterValue = moveMatterAsDustIntoContainer(status.job.matterValue, outputContainer, 0, 1)
|
status.job.matterValue = MItems.MATTER_DUST.moveIntoContainer(status.job.matterValue, outputContainer, 0, 1)
|
||||||
|
|
||||||
if (!status.job.matterValue.isZero)
|
if (!status.job.matterValue.isZero)
|
||||||
status.throttleFast()
|
status.throttleFast()
|
||||||
|
@ -37,6 +37,7 @@ import ru.dbotthepony.mc.otm.graph.matter.MatterNode
|
|||||||
import ru.dbotthepony.mc.otm.matter.MatterManager
|
import ru.dbotthepony.mc.otm.matter.MatterManager
|
||||||
import ru.dbotthepony.mc.otm.menu.matter.MatterReplicatorMenu
|
import ru.dbotthepony.mc.otm.menu.matter.MatterReplicatorMenu
|
||||||
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
||||||
|
import ru.dbotthepony.mc.otm.registry.MItems
|
||||||
import ru.dbotthepony.mc.otm.registry.MNames
|
import ru.dbotthepony.mc.otm.registry.MNames
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -113,7 +114,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
|||||||
val job = status.job
|
val job = status.job
|
||||||
|
|
||||||
if (job.asDust) {
|
if (job.asDust) {
|
||||||
job.matterValue = moveMatterAsDustIntoContainer(job.matterValue, container, OUTPUT_DUST_MAIN, OUTPUT_DUST_STACKING)
|
job.matterValue = MItems.MATTER_DUST.moveIntoContainer(job.matterValue, container, OUTPUT_DUST_MAIN, OUTPUT_DUST_STACKING)
|
||||||
|
|
||||||
if (!job.matterValue.isZero) {
|
if (!job.matterValue.isZero) {
|
||||||
return status.throttle()
|
return status.throttle()
|
||||||
|
@ -11,12 +11,14 @@ import net.minecraft.world.item.ItemStack
|
|||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
import ru.dbotthepony.mc.otm.config.ItemsConfig
|
import ru.dbotthepony.mc.otm.config.ItemsConfig
|
||||||
|
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
||||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||||
import ru.dbotthepony.mc.otm.matter.IMatterItem
|
import ru.dbotthepony.mc.otm.matter.IMatterItem
|
||||||
import ru.dbotthepony.mc.otm.core.nbt.set
|
import ru.dbotthepony.mc.otm.core.nbt.set
|
||||||
import ru.dbotthepony.mc.otm.matter.IMatterValue
|
import ru.dbotthepony.mc.otm.matter.IMatterValue
|
||||||
import ru.dbotthepony.mc.otm.matter.MatterValue
|
import ru.dbotthepony.mc.otm.matter.MatterValue
|
||||||
|
import ru.dbotthepony.mc.otm.registry.MItems
|
||||||
|
|
||||||
class MatterDustItem : Item(Properties().stacksTo(64)), IMatterItem {
|
class MatterDustItem : Item(Properties().stacksTo(64)), IMatterItem {
|
||||||
private fun matter(stack: ItemStack): Decimal {
|
private fun matter(stack: ItemStack): Decimal {
|
||||||
@ -32,6 +34,59 @@ class MatterDustItem : Item(Properties().stacksTo(64)), IMatterItem {
|
|||||||
return MatterValue(Decimal.deserializeNBT(value), 1.0)
|
return MatterValue(Decimal.deserializeNBT(value), 1.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun moveIntoContainer(matterValue: Decimal, container: MatteryContainer, mainSlot: Int, stackingSlot: Int): Decimal {
|
||||||
|
@Suppress("name_shadowing")
|
||||||
|
var matterValue = matterValue
|
||||||
|
|
||||||
|
while (matterValue > Decimal.ZERO) {
|
||||||
|
val stack = container[mainSlot]
|
||||||
|
|
||||||
|
// первый слот пустой
|
||||||
|
if (stack.isEmpty) {
|
||||||
|
container[mainSlot] = ItemStack(this, 1).also {
|
||||||
|
matterValue -= addMatterValue(it, matterValue, false)
|
||||||
|
}
|
||||||
|
// первый слот не пустой, но мы можем влить туда материю
|
||||||
|
} else if (!isFull(stack) && stack.count == 1) {
|
||||||
|
matterValue -= addMatterValue(stack, matterValue, false)
|
||||||
|
container.setChanged(mainSlot)
|
||||||
|
// первый слот не пустой и мы не можем влить туда материю
|
||||||
|
} else {
|
||||||
|
val stack2 = container[stackingSlot]
|
||||||
|
|
||||||
|
// второй слот пустой
|
||||||
|
if (stack2.isEmpty) {
|
||||||
|
container[stackingSlot] = ItemStack(this, 1).also {
|
||||||
|
matterValue -= addMatterValue(it, matterValue, false)
|
||||||
|
}
|
||||||
|
// второй слот не пустой, но мы можем влить туда материю
|
||||||
|
} else if (!isFull(stack2)) {
|
||||||
|
if (stack2.count != 1) {
|
||||||
|
return matterValue
|
||||||
|
}
|
||||||
|
|
||||||
|
matterValue -= addMatterValue(stack2, matterValue, false)
|
||||||
|
container.setChanged(stackingSlot)
|
||||||
|
}
|
||||||
|
|
||||||
|
// можем ли мы стакнуть материю из второго слота в первый?
|
||||||
|
if (!stack2.isEmpty && isFull(stack2)) {
|
||||||
|
if (ItemStack.isSameItemSameTags(stack, stack2) && container.getMaxStackSizeWithItem(mainSlot) >= stack.count + 1) {
|
||||||
|
stack.count++
|
||||||
|
stack2.count--
|
||||||
|
|
||||||
|
container.setChanged(mainSlot)
|
||||||
|
container.setChanged(stackingSlot)
|
||||||
|
} else {
|
||||||
|
return matterValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Decimal.ZERO
|
||||||
|
}
|
||||||
|
|
||||||
override fun canDecompose(stack: ItemStack) = false
|
override fun canDecompose(stack: ItemStack) = false
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
|
@ -206,7 +206,7 @@ object MItems {
|
|||||||
CreativeUpgrades
|
CreativeUpgrades
|
||||||
}
|
}
|
||||||
|
|
||||||
val MATTER_DUST: Item by registry.register(MNames.MATTER_DUST) { MatterDustItem() }
|
val MATTER_DUST: MatterDustItem by registry.register(MNames.MATTER_DUST) { MatterDustItem() }
|
||||||
|
|
||||||
val TRITANIUM_ORE_CLUMP: Item by registry.register(MNames.TRITANIUM_ORE_CLUMP) { Item(DEFAULT_PROPERTIES) }
|
val TRITANIUM_ORE_CLUMP: Item by registry.register(MNames.TRITANIUM_ORE_CLUMP) { Item(DEFAULT_PROPERTIES) }
|
||||||
val TRITANIUM_DUST: Item by registry.register(MNames.TRITANIUM_DUST) { Item(DEFAULT_PROPERTIES) }
|
val TRITANIUM_DUST: Item by registry.register(MNames.TRITANIUM_DUST) { Item(DEFAULT_PROPERTIES) }
|
||||||
|
Loading…
Reference in New Issue
Block a user