Update IPatternStorage pattern signature

This commit is contained in:
DBotThePony 2023-07-26 12:12:28 +07:00
parent 1e2611fd2e
commit 07d698aeb5
Signed by: DBot
GPG Key ID: DCC23B5715498507
4 changed files with 16 additions and 13 deletions

View File

@ -17,7 +17,11 @@ import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
import ru.dbotthepony.mc.otm.capability.matter.* import ru.dbotthepony.mc.otm.capability.matter.*
import ru.dbotthepony.mc.otm.container.stream
import ru.dbotthepony.mc.otm.core.collect.iterator import ru.dbotthepony.mc.otm.core.collect.iterator
import ru.dbotthepony.mc.otm.core.filterNotNull
import ru.dbotthepony.mc.otm.core.isNotEmpty
import ru.dbotthepony.mc.otm.core.orNull
import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode import ru.dbotthepony.mc.otm.graph.matter.SimpleMatterNode
import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.registry.MBlockEntities
import java.util.ArrayList import java.util.ArrayList
@ -94,14 +98,12 @@ class PatternStorageBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
return PatternStorageMenu(containerID, inventory, this) return PatternStorageMenu(containerID, inventory, this)
} }
override val patterns: Stream<out PatternState> get() { override val patterns: Stream<PatternState> get() {
val streams = ArrayList<Stream<out PatternState>>() return container.stream()
.filter { it.isNotEmpty }
for (provider in this.container.iterator(MatteryCapability.PATTERN)) { .map { it.getCapability(MatteryCapability.PATTERN).orNull() }
streams.add(provider.second.patterns) .filterNotNull()
} .flatMap { it.patterns }
return Streams.concat(*streams.toTypedArray())
} }
override val patternCapacity: Int get() { override val patternCapacity: Int get() {

View File

@ -13,9 +13,9 @@ import kotlin.math.roundToInt
interface IPatternStorage { interface IPatternStorage {
/** /**
* It must return new stream each time * Patterns stored in this pattern storage
*/ */
val patterns: Stream<out PatternState> val patterns: Stream<PatternState>
fun findPatterns(item: Item): Collection<PatternState> { fun findPatterns(item: Item): Collection<PatternState> {
return findPatterns { item == it.item } return findPatterns { item == it.item }

View File

@ -28,7 +28,7 @@ class CreativePatternItem : Item(Properties().rarity(Rarity.EPIC).stacksTo(1)) {
private object Patterns : IPatternStorage, ICapabilityProvider { private object Patterns : IPatternStorage, ICapabilityProvider {
private val resolver = LazyOptional.of<IPatternStorage> { this } private val resolver = LazyOptional.of<IPatternStorage> { this }
override val patterns: Stream<out PatternState> override val patterns: Stream<PatternState>
get() = MatterManager.map.keys.stream().map { PatternState(UUID(34783464838L, 4463458382L + ForgeRegistries.ITEMS.getID(it)), it, 1.0) } get() = MatterManager.map.keys.stream().map { PatternState(UUID(34783464838L, 4463458382L + ForgeRegistries.ITEMS.getID(it)), it, 1.0) }
override val patternCapacity: Int override val patternCapacity: Int

View File

@ -16,6 +16,7 @@ import net.minecraft.world.level.Level
import net.minecraftforge.common.capabilities.Capability import net.minecraftforge.common.capabilities.Capability
import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.capability.matter.* import ru.dbotthepony.mc.otm.capability.matter.*
import ru.dbotthepony.mc.otm.core.filterNotNull
import ru.dbotthepony.mc.otm.core.nbt.map import ru.dbotthepony.mc.otm.core.nbt.map
import java.util.* import java.util.*
import java.util.stream.Stream import java.util.stream.Stream
@ -108,9 +109,9 @@ class PatternStorageItem : Item {
return if (cap == MatteryCapability.PATTERN) resolver.cast() else LazyOptional.empty() return if (cap == MatteryCapability.PATTERN) resolver.cast() else LazyOptional.empty()
} }
override val patterns: Stream<out PatternState> get() { override val patterns: Stream<PatternState> get() {
return stack.tag?.map("otm_patterns") { it: ListTag -> return stack.tag?.map("otm_patterns") { it: ListTag ->
it.stream().map { PatternState.deserializeNBT(it) }.filter { it != null } as Stream<out PatternState> it.stream().map { PatternState.deserializeNBT(it) }.filterNotNull()
} ?: Stream.empty() } ?: Stream.empty()
} }