cn.nukkit.entity.ai.memory.IMemoryStorage Maven / Gradle / Ivy
package cn.nukkit.entity.ai.memory;
import cn.nukkit.api.PowerNukkitXOnly;
import cn.nukkit.api.Since;
import cn.nukkit.entity.Entity;
import java.util.Map;
/**
* 记忆存储器
*
* memory storage
*/
@PowerNukkitXOnly
@Since("1.19.50-r1")
public interface IMemoryStorage {
/**
* 写入数据到记忆类型
*
* Write data to MemoryType
*
* @param type 记忆类型
* @param data 数据
* @param 数据类型
*/
void put(MemoryType type, D data);
/**
* 从指定记忆类型获取数据
*
* Get data from the specified MemoryType
*
* @param type 记忆类型
* @param 数据类型
* @return 数据
*/
D get(MemoryType type);
/**
* 获取所有记忆
*
* get all memories
*
* @return 所有记忆
*/
Map, ?> getAll();
/**
* 清空指定记忆类型数据为null
*
* Clear the specified MemoryType data to null
*
* @param type 记忆类型
*/
void clear(MemoryType> type);
/**
* 获取记忆存储所属的实体
*
* Get the entity that the memory store belongs to
*
* @return 实体
*/
@Since("1.19.63-r1")
Entity getEntity();
/**
* 检查指定记忆类型数据是否为空(null)
*
* Check if the specified memory type data is empty (null)
*
* @param type 记忆类型
* @return 是否为空
*/
default boolean isEmpty(MemoryType> type) {
return get(type) == null;
}
/**
* 检查指定记忆类型数据是否不为空(null)
*
* Check if the specified memory type data is not empty (null)
*
* @param type 记忆类型
* @return 是否不为空
*/
default boolean notEmpty(MemoryType> type) {
return get(type) != null;
}
/**
* 使用指定的数据对比记忆类型存储的数据
*
* Use the specified data compare the data of memory type
*
* @param type 记忆类型
* @param to 指定的数据
* @return 是否相同
*/
default boolean compareDataTo(MemoryType type, Object to) {
D value;
return (value = get(type)) != null ? value.equals(to) : to == null;
}
/**
* 将此记忆存储器的数据编码进所属实体NBT(若MemoryType附加有编解码器)
*
* Encode the data of this memory storage into the entity NBT (if there is a codec attached to the Memory Type)
*/
default void encode() {
var entity = getEntity();
for (var memoryType : getAll().entrySet()) {
memoryType.getKey().forceEncode(entity, memoryType.getValue());
}
}
}