Specify defaults for item filters

This commit is contained in:
DBotThePony 2024-08-31 10:10:10 +07:00
parent 5bdaa8cc88
commit 4d44bd0f67
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 19 additions and 5 deletions

View File

@ -35,6 +35,7 @@ import ru.dbotthepony.mc.otm.storage.*
import java.math.BigInteger
import java.util.*
import java.util.function.Consumer
import java.util.function.Supplier
import java.util.stream.Stream
private data class SlotTuple(val slot: Int, val stack: ItemStack)
@ -130,7 +131,7 @@ class StorageBusBlockEntity(blockPos: BlockPos, blockState: BlockState) : Matter
}
init {
savetables.codec(::filter, ItemFilter.CODEC, FILTER_KEY)
savetables.codec(::filter, ItemFilter.CODEC, FILTER_KEY, Supplier { ItemFilter(MAX_FILTERS) })
}
override fun setLevel(level: Level) {

View File

@ -38,6 +38,7 @@ import ru.dbotthepony.mc.otm.storage.ItemStorageStack
import ru.dbotthepony.mc.otm.storage.StorageStack
import java.math.BigInteger
import java.util.*
import java.util.function.Supplier
abstract class AbstractStorageImportExport(
blockType: BlockEntityType<*>,
@ -111,7 +112,7 @@ abstract class AbstractStorageImportExport(
}
init {
savetables.codec(::filter, ItemFilter.CODEC, FILTER_KEY)
savetables.codec(::filter, ItemFilter.CODEC, FILTER_KEY, Supplier { ItemFilter(MAX_FILTERS) })
}
companion object {

View File

@ -207,7 +207,7 @@ class Savetables : INBTSerializable<CompoundTag?> {
}
}
fun <T : Any> codec(prop: Delegate<T>, codec: Codec<T>, name: String, default: T): Stateless<T, Tag> {
fun <T : Any> codec(prop: Delegate<T>, codec: Codec<T>, name: String, default: Supplier<T>): Stateless<T, Tag> {
return Stateless(prop, name, Tag::class.java)
.withSerializer { codec.encode(prop.get(), NbtOps.INSTANCE, NbtOps.INSTANCE.empty()).getOrThrow { throw IllegalStateException("Failed to write save data for '$name': $it") } }
.withDeserializer {
@ -215,9 +215,9 @@ class Savetables : INBTSerializable<CompoundTag?> {
.decode(NbtOps.INSTANCE, it)
.resultOrPartial { LOGGER.error("Failed to read save data for '$name'", RuntimeException(it)) }
.map { it.first }
.orElse(default)
.orElseGet(default)
}
.withDefault { default }
.withDefault { default.get() }
}
fun <T : Any> codec(prop: KMutableProperty0<T>, codec: Codec<T>, name: String = prop.name): Stateless<T, Tag> {
@ -225,10 +225,22 @@ class Savetables : INBTSerializable<CompoundTag?> {
}
fun <T : Any> codec(prop: KMutableProperty0<T>, codec: Codec<T>, name: String = prop.name, default: T): Stateless<T, Tag> {
return codec(Delegate.Of(prop), codec, name, Supplier { default })
}
fun <T : Any> codec(prop: KMutableProperty0<T>, codec: Codec<T>, name: String = prop.name, default: Supplier<T>): Stateless<T, Tag> {
return codec(Delegate.Of(prop), codec, name, default)
}
fun <T : Any> codec(prop: KMutableProperty0<T>, codec: Codec<T>, default: Supplier<T>): Stateless<T, Tag> {
return codec(Delegate.Of(prop), codec, prop.name, default)
}
fun vector(prop: Delegate<Vector>, name: String, default: Vector = Vector.ZERO): Stateless<Vector, Tag> {
return codec(prop, Vector.CODEC, name, Supplier { default })
}
fun vector(prop: Delegate<Vector>, name: String, default: Supplier<Vector>): Stateless<Vector, Tag> {
return codec(prop, Vector.CODEC, name, default)
}