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.level.Level
|
||||
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.JobStatus
|
||||
import ru.dbotthepony.mc.otm.block.entity.Job
|
||||
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
|
||||
import ru.dbotthepony.mc.otm.capability.FlowDirection
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||
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.WorkerEnergyStorage
|
||||
import ru.dbotthepony.mc.otm.capability.matter.MatterStorageImpl
|
||||
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.container.HandlerFilter
|
||||
import ru.dbotthepony.mc.otm.container.MatteryContainer
|
||||
import ru.dbotthepony.mc.otm.container.UpgradeContainer
|
||||
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.minRange
|
||||
import ru.dbotthepony.mc.otm.graph.matter.MatterGraph
|
||||
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.menu.matter.MatterDecomposerMenu
|
||||
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
||||
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)
|
||||
: 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) {
|
||||
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)
|
||||
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.menu.matter.MatterReplicatorMenu
|
||||
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
import ru.dbotthepony.mc.otm.registry.MNames
|
||||
import java.util.*
|
||||
|
||||
@ -113,7 +114,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
|
||||
val job = status.job
|
||||
|
||||
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) {
|
||||
return status.throttle()
|
||||
|
@ -11,12 +11,14 @@ import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.TooltipFlag
|
||||
import net.minecraft.world.level.Level
|
||||
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.math.Decimal
|
||||
import ru.dbotthepony.mc.otm.matter.IMatterItem
|
||||
import ru.dbotthepony.mc.otm.core.nbt.set
|
||||
import ru.dbotthepony.mc.otm.matter.IMatterValue
|
||||
import ru.dbotthepony.mc.otm.matter.MatterValue
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
|
||||
class MatterDustItem : Item(Properties().stacksTo(64)), IMatterItem {
|
||||
private fun matter(stack: ItemStack): Decimal {
|
||||
@ -32,6 +34,59 @@ class MatterDustItem : Item(Properties().stacksTo(64)), IMatterItem {
|
||||
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 appendHoverText(
|
||||
|
@ -206,7 +206,7 @@ object MItems {
|
||||
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_DUST: Item by registry.register(MNames.TRITANIUM_DUST) { Item(DEFAULT_PROPERTIES) }
|
||||
|
Loading…
Reference in New Issue
Block a user