Block 是一些代表类型的长期存在的实例,例如 A Minecraft BlockType Grass、green_wool 等。
我正在尝试找到一个可以有效存储和测试给定 BlockPattern 的 DataStructure(如果您熟悉 Minecraft,可以想像,黑曜石门户、Wither 等)但是如果您不熟悉,则能够创建一个可以测试一个给定的结构,该结构是由相对于被放置的块的给定 Vector3i 的块构建的。
Vector3i 表示给定谓词可以匹配的“块模式”中位置的整数向量。
例如,您可以有一个谓词来测试任意块属性“热度”,以测试火和熔岩的真实性。
因此,与其每次扫描整个模式以确保世界中的块位置与谓词匹配,我正在考虑扭转问题。
缓存一个块在多图模式中的潜在位置,并获取所有潜在位置,以限制之后发生的检查量。
所以我有一个Multimap<Predicate<Block>,Vector3i>
patternLookup 缓存。
表示允许在 BlockPattern 中找到块的潜在位置。
所以玩家放置了一个方块,我需要过滤多重地图,收集方块“允许”(谓词为真)所在的所有可能位置。
但是,作为一个优化步骤,我认为只测试具有潜在匹配的谓词(就身份而言)可能会更快。(三年后我不确定这个假设是否正确)
如何使用 guava 的功能特性过滤多图的内容以获取值的集合?(或者我最好只是迭代EntrySet
?)
例如