修正ISyncManager类
This commit is contained in:
parent
7fca59b84c
commit
b52e1d17f3
|
|
@ -33,7 +33,7 @@ mod_name=3944Realms 's Lib Mod
|
||||||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=MIT
|
mod_license=MIT
|
||||||
# The mod version. See https://semver.org/
|
# The mod version. See https://semver.org/
|
||||||
mod_version=0.0.12
|
mod_version=0.0.13
|
||||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||||
# This should match the base package used for the mod sources.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,100 @@
|
||||||
package top.r3944realms.lib39.core.sync;
|
package top.r3944realms.lib39.core.sync;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public interface ISyncManager<K, T extends ISyncData<?>> {
|
public interface ISyncManager<K, T extends ISyncData<?>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取同步映射
|
||||||
|
*/
|
||||||
Map<K, T> getSyncMap();
|
Map<K, T> getSyncMap();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取同步集合
|
||||||
|
*/
|
||||||
default Set<T> getSyncSet() {
|
default Set<T> getSyncSet() {
|
||||||
return new HashSet<>(getSyncMap().values());
|
Map<K, T> syncMap = getSyncMap();
|
||||||
}
|
return Set.copyOf(syncMap.values());
|
||||||
default void track(K key, T instance) {
|
|
||||||
Set<T> syncSet = checkAndGetSet();
|
|
||||||
syncSet.add(instance);
|
|
||||||
}
|
|
||||||
default void untrack(K key, T instance) {
|
|
||||||
Set<T> syncSet = checkAndGetSet();
|
|
||||||
syncSet.remove(instance);
|
|
||||||
}
|
|
||||||
default void foreach(Consumer<T> consumer) {
|
|
||||||
Set<T> syncSet = checkAndGetSet();
|
|
||||||
syncSet.forEach(consumer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull Set<T> checkAndGetSet() throws IllegalArgumentException {
|
/**
|
||||||
Set<T> syncSet = getSyncSet();
|
* 跟踪实例
|
||||||
if (syncSet == null) {
|
*/
|
||||||
throw new IllegalStateException("SyncSet is not initialized");
|
default void track(K key, T instance) {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
if (syncMap == null) {
|
||||||
|
throw new IllegalStateException("SyncMap is not initialized");
|
||||||
|
}
|
||||||
|
syncMap.put(key, instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消跟踪
|
||||||
|
*/
|
||||||
|
default void untrack(K key, T instance) {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
if (syncMap == null) {
|
||||||
|
throw new IllegalStateException("SyncMap is not initialized");
|
||||||
|
}
|
||||||
|
// 只有当key对应的value确实是instance时才移除,避免误删
|
||||||
|
syncMap.remove(key, instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 遍历操作
|
||||||
|
*/
|
||||||
|
default void foreach(Consumer<T> consumer) {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
if (syncMap == null) {
|
||||||
|
throw new IllegalStateException("SyncMap is not initialized");
|
||||||
|
}
|
||||||
|
syncMap.values().forEach(consumer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量操作
|
||||||
|
*/
|
||||||
|
default void trackAll(Map<K, T> instances) {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
if (syncMap == null) {
|
||||||
|
throw new IllegalStateException("SyncMap is not initialized");
|
||||||
|
}
|
||||||
|
syncMap.putAll(instances);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取大小
|
||||||
|
*/
|
||||||
|
default int size() {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
return syncMap != null ? syncMap.size() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否包含key
|
||||||
|
*/
|
||||||
|
default boolean containsKey(K key) {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
return syncMap != null && syncMap.containsKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否包含value
|
||||||
|
*/
|
||||||
|
default boolean containsValue(T value) {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
return syncMap != null && syncMap.containsValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空所有数据
|
||||||
|
*/
|
||||||
|
default void clear() {
|
||||||
|
Map<K, T> syncMap = getSyncMap();
|
||||||
|
if (syncMap != null) {
|
||||||
|
syncMap.clear();
|
||||||
}
|
}
|
||||||
return syncSet;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ public class SyncData2Manager {
|
||||||
private <T extends ISyncData<?>> void untrackEntityWithTypedEntry(Entity entity, @NotNull TypedSyncEntry<UUID, T> entry) {
|
private <T extends ISyncData<?>> void untrackEntityWithTypedEntry(Entity entity, @NotNull TypedSyncEntry<UUID, T> entry) {
|
||||||
if (entry.capability != null) {
|
if (entry.capability != null) {
|
||||||
entity.getCapability(entry.capability)
|
entity.getCapability(entry.capability)
|
||||||
.ifPresent(cap -> entry.manager.track(entity.getUUID(), cap));
|
.ifPresent(cap -> entry.manager.untrack(entity.getUUID(), cap));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user