尝试添加api

This commit is contained in:
ZhangYuheng 2024-09-22 23:45:10 +08:00
parent e8271927ea
commit bc2c66bdd9
30 changed files with 824 additions and 796 deletions

View File

@ -1,210 +1,15 @@
package cn.lunadeer.dominion;
import cn.lunadeer.dominion.dtos.*;
import cn.lunadeer.dominion.utils.MessageDisplay;
import cn.lunadeer.dominion.utils.Particle;
import cn.lunadeer.dominion.utils.ResMigration;
import cn.lunadeer.dominion.utils.map.MapRender;
import cn.lunadeer.minecraftpluginutils.AutoTimer;
import cn.lunadeer.minecraftpluginutils.Scheduler;
import cn.lunadeer.minecraftpluginutils.XLogger;
import org.bukkit.GameMode;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.GroupDTO;
import cn.lunadeer.dominion.dtos.MemberDTO;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import static cn.lunadeer.dominion.DominionNode.getLocInDominionNode;
import static cn.lunadeer.dominion.DominionNode.isInDominion;
public class Cache {
public Cache() {
player_current_dominion_id = new HashMap<>();
loadDominions();
loadMembers();
loadGroups();
}
/**
* 从数据库加载所有领地
* 如果idToLoad为null则加载所有领地
*
* @param idToLoad 领地ID
*/
public void loadDominions(Integer idToLoad) {
if (_last_update_dominion.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
XLogger.debug("run loadDominionsExecution directly");
loadDominionsExecution(idToLoad);
} else {
if (_update_dominion_is_scheduled.get()) return;
XLogger.debug("schedule loadDominionsExecution");
_update_dominion_is_scheduled.set(true);
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_dominion.get())) / 1000 * 20L;
Scheduler.runTaskLaterAsync(() -> {
XLogger.debug("run loadDominionsExecution scheduled");
loadDominionsExecution(idToLoad);
_update_dominion_is_scheduled.set(false);
},
delay_tick);
}
}
public void loadDominions() {
loadDominions(null);
}
private void loadDominionsExecution(Integer idToLoad) {
Scheduler.runTaskAsync(() -> {
long start = System.currentTimeMillis();
int count = 0;
if (idToLoad == null) {
id_dominions = new ConcurrentHashMap<>();
dominion_children = new ConcurrentHashMap<>();
List<DominionDTO> dominions = DominionDTO.selectAll();
CompletableFuture<Void> res = dominion_trees.initAsync(dominions);
count = dominions.size();
for (DominionDTO d : dominions) {
id_dominions.put(d.getId(), d);
if (!dominion_children.containsKey(d.getParentDomId())) {
dominion_children.put(d.getParentDomId(), new ArrayList<>());
}
dominion_children.get(d.getParentDomId()).add(d.getId());
}
res.join(); // 等待树的构建完成
} else {
DominionDTO dominion = DominionDTO.select(idToLoad);
if (dominion == null && id_dominions.containsKey(idToLoad)) {
id_dominions.remove(idToLoad);
} else if (dominion != null) {
id_dominions.put(idToLoad, dominion);
count = 1;
}
}
MapRender.render();
recheckPlayerState = true;
_last_update_dominion.set(System.currentTimeMillis());
XLogger.debug("loadDominionsExecution cost: %d ms for %d dominions"
, System.currentTimeMillis() - start, count);
});
}
/**
* 从数据库加载所有玩家特权
* 如果player_uuid为null则加载所有玩家的特权
*
* @param player_uuid 玩家UUID
*/
public void loadMembers(UUID player_uuid) {
if (_last_update_member.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
XLogger.debug("run loadMembersExecution directly");
loadMembersExecution(player_uuid);
} else {
if (_update_member_is_scheduled.get()) return;
XLogger.debug("schedule loadMembersExecution");
_update_member_is_scheduled.set(true);
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_member.get())) / 1000 * 20L;
Scheduler.runTaskLaterAsync(() -> {
XLogger.debug("run loadMembersExecution scheduled");
loadMembersExecution(player_uuid);
_update_member_is_scheduled.set(false);
},
delay_tick);
}
}
public void loadMembers() {
loadMembers(null);
}
private void loadMembersExecution(UUID player_to_update) {
Scheduler.runTaskAsync(() -> {
long start = System.currentTimeMillis();
List<MemberDTO> all_privileges;
if (player_to_update == null) {
all_privileges = MemberDTO.selectAll();
player_uuid_to_member = new ConcurrentHashMap<>();
} else {
all_privileges = MemberDTO.selectAll(player_to_update);
if (!player_uuid_to_member.containsKey(player_to_update)) {
player_uuid_to_member.put(player_to_update, new ConcurrentHashMap<>());
}
player_uuid_to_member.get(player_to_update).clear();
}
for (MemberDTO privilege : all_privileges) {
UUID player_uuid = privilege.getPlayerUUID();
if (!player_uuid_to_member.containsKey(player_uuid)) {
player_uuid_to_member.put(player_uuid, new ConcurrentHashMap<>());
}
player_uuid_to_member.get(player_uuid).put(privilege.getDomID(), privilege);
}
recheckPlayerState = true;
_last_update_member.set(System.currentTimeMillis());
XLogger.debug("loadMembersExecution cost: %d ms for %d privileges"
, System.currentTimeMillis() - start, all_privileges.size());
});
}
public void loadGroups() {
loadGroups(null);
}
public void loadGroups(Integer groupId) {
if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
XLogger.debug("run loadGroupsExecution directly");
loadGroupExecution(groupId);
} else {
if (_update_group_is_scheduled.get()) return;
XLogger.debug("schedule loadGroupsExecution");
_update_group_is_scheduled.set(true);
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L;
Scheduler.runTaskLaterAsync(() -> {
XLogger.debug("run loadGroupsExecution scheduled");
loadGroupExecution(groupId);
_update_group_is_scheduled.set(false);
},
delay_tick);
}
}
private void loadGroupExecution(Integer groupId) {
Scheduler.runTaskAsync(() -> {
long start = System.currentTimeMillis();
if (groupId == null) {
id_groups = new ConcurrentHashMap<>();
List<GroupDTO> groups = GroupDTO.selectAll();
List<PlayerDTO> players = PlayerDTO.all();
for (GroupDTO group : groups) {
id_groups.put(group.getId(), group);
}
for (PlayerDTO player : players) {
map_player_using_group_title_id.put(player.getUuid(), player.getUsingGroupTitleID());
}
} else {
GroupDTO group = GroupDTO.select(groupId);
if (group == null && id_groups.containsKey(groupId)) {
id_groups.remove(groupId);
} else if (group != null) {
id_groups.put(groupId, group);
}
}
recheckPlayerState = true;
_last_update_group.set(System.currentTimeMillis());
XLogger.debug("loadGroupsExecution cost: %d ms", System.currentTimeMillis() - start);
});
}
import java.util.UUID;
public interface Cache {
/**
* 获取玩家当前所在领地
* 此方法会先判断缓存中是否有玩家当前所在领地如果没有则遍历所有领地判断玩家所在位置
@ -214,144 +19,18 @@ public class Cache {
* @param player 玩家
* @return 玩家当前所在领地
*/
public DominionDTO getPlayerCurrentDominion(Player player) {
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
Integer last_in_dom_id = player_current_dominion_id.get(player.getUniqueId());
DominionDTO last_dominion = null;
if (last_in_dom_id != null) {
last_dominion = id_dominions.get(last_in_dom_id);
}
if (isInDominion(last_dominion, player.getLocation())) {
if (dominion_children.get(last_in_dom_id) == null || dominion_children.get(last_in_dom_id).isEmpty()) {
// 如果玩家仍在领地内且领地没有子领地则直接返回
if (recheckPlayerState) {
lightOrNot(player, last_dominion);
flyOrNot(player, last_dominion);
recheckPlayerState = false;
}
return last_dominion;
}
}
DominionDTO current_dominion = dominion_trees.getLocInDominionDTO(player.getLocation());
int last_dom_id = last_dominion == null ? -1 : last_dominion.getId();
int current_dom_id = current_dominion == null ? -1 : current_dominion.getId();
if (last_dom_id == current_dom_id) {
return last_dominion;
}
if (last_dom_id != -1) {
MessageDisplay.show(player, Dominion.config.getMessageDisplayJoinLeave(), last_dominion.getLeaveMessage());
}
if (current_dom_id != -1) {
MessageDisplay.show(player, Dominion.config.getMessageDisplayJoinLeave(), current_dominion.getJoinMessage());
}
lightOrNot(player, current_dominion); // 发光检查
flyOrNot(player, current_dominion); // 飞行检查
if (current_dominion == null) {
player_current_dominion_id.put(player.getUniqueId(), null);
return null;
}
player_current_dominion_id.put(player.getUniqueId(), current_dominion.getId());
// show border
if (current_dominion.getFlagValue(Flag.SHOW_BORDER)) {
Particle.showBorder(player, current_dominion);
}
return current_dominion;
}
}
/**
* 玩家退出时调用 用于清除玩家当前所在领地
* 会将玩家当前所在领地设置为null
* 这样当玩家下次进入领地时会重新检查玩家所在位置
*
* @param player 玩家
*/
public void onPlayerQuit(Player player) {
player_current_dominion_id.put(player.getUniqueId(), null);
}
/**
* 检查玩家是否需要设置为发光
*
* @param player 玩家
* @param dominion 领地
*/
private void lightOrNot(Player player, DominionDTO dominion) {
if (!Flag.GLOW.getEnable()) {
return;
}
if (dominion == null) {
player.setGlowing(false);
return;
}
MemberDTO privilege = getMember(player, dominion);
if (privilege != null) {
if (privilege.getGroupId() == -1) {
player.setGlowing(privilege.getFlagValue(Flag.GLOW));
} else {
GroupDTO group = getGroup(privilege.getGroupId());
if (group != null) {
player.setGlowing(group.getFlagValue(Flag.GLOW));
} else {
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
}
}
} else {
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
}
}
private void flyOrNot(Player player, DominionDTO dominion) {
for (String flyPN : Dominion.config.getFlyPermissionNodes()) {
if (player.hasPermission(flyPN)) {
return;
}
}
if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) {
return;
}
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
return;
}
if (!Flag.FLY.getEnable()) {
player.setAllowFlight(false);
return;
}
if (dominion == null) {
player.setAllowFlight(false);
return;
}
MemberDTO privilege = getMember(player, dominion);
if (privilege != null) {
if (privilege.getGroupId() == -1) {
player.setAllowFlight(privilege.getFlagValue(Flag.FLY));
} else {
GroupDTO group = getGroup(privilege.getGroupId());
if (group != null) {
player.setAllowFlight(group.getFlagValue(Flag.FLY));
} else {
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
}
}
} else {
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
}
}
DominionDTO getPlayerCurrentDominion(Player player);
/**
* 获取指定位置的领地信息
* 如果位置不在任何领地内则返回null
*
* @param loc 位置
* @return 领地信息 如果位置不在任何领地内则返回null
*/
public DominionDTO getDominionByLoc(Location loc) {
return dominion_trees.getLocInDominionDTO(loc);
}
DominionDTO getDominionByLoc(Location loc);
public GroupDTO getGroup(Integer id) {
return id_groups.get(id);
}
GroupDTO getGroup(Integer id);
/**
* 获取玩家在指定领地的特权
@ -361,253 +40,11 @@ public class Cache {
* @param dominion 领地
* @return 特权表
*/
public MemberDTO getMember(Player player, DominionDTO dominion) {
if (!player_uuid_to_member.containsKey(player.getUniqueId())) return null;
return player_uuid_to_member.get(player.getUniqueId()).get(dominion.getId());
}
MemberDTO getMember(Player player, DominionDTO dominion);
public MemberDTO getMember(UUID player_uuid, DominionDTO dominion) {
if (!player_uuid_to_member.containsKey(player_uuid)) return null;
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
}
MemberDTO getMember(UUID player_uuid, DominionDTO dominion);
public List<GroupDTO> getBelongGroupsOf(UUID plauer_uuid) {
List<GroupDTO> groups = new ArrayList<>();
if (!player_uuid_to_member.containsKey(plauer_uuid)) return groups;
for (MemberDTO member : player_uuid_to_member.get(plauer_uuid).values()) {
if (member.getGroupId() != -1) {
GroupDTO group = getGroup(member.getGroupId());
if (group != null) {
groups.add(group);
}
}
}
return groups;
}
DominionDTO getDominion(Integer id);
public DominionDTO getDominion(Integer id) {
return id_dominions.get(id);
}
public int getPlayerDominionCount(UUID player_uuid) {
int count = 0;
for (DominionDTO dominion : id_dominions.values()) {
if (dominion.getOwner().equals(player_uuid)) {
count++;
}
}
return count;
}
public List<ResMigration.ResidenceNode> getResidenceData(UUID player_uuid) {
if (residence_data == null) {
residence_data = new HashMap<>();
List<ResMigration.ResidenceNode> residences = ResMigration.extractFromResidence(Dominion.instance);
for (ResMigration.ResidenceNode node : residences) {
if (node == null) {
continue;
}
if (!residence_data.containsKey(node.owner)) {
XLogger.debug("residence_data put %s", node.owner);
residence_data.put(node.owner, new ArrayList<>());
}
residence_data.get(node.owner).add(node);
}
XLogger.debug("residence_data: %d", residence_data.size());
}
return residence_data.get(player_uuid);
}
public List<DominionDTO> getDominions() {
return new ArrayList<>(id_dominions.values());
}
public int getDominionCounts() {
return id_dominions.size();
}
public int getMemberCounts() {
int count = 0;
for (Map<Integer, MemberDTO> member : player_uuid_to_member.values()) {
count += member.size();
}
return count;
}
public int getGroupCounts() {
return id_groups.size();
}
public static Cache instance;
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
private final WorldDominionTreeSectored dominion_trees = new WorldDominionTreeSectored();
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, MemberDTO>> player_uuid_to_member; // 玩家所有的特权
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
private final AtomicLong _last_update_dominion = new AtomicLong(0);
private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false);
private final AtomicLong _last_update_member = new AtomicLong(0);
private final AtomicBoolean _update_member_is_scheduled = new AtomicBoolean(false);
private final AtomicLong _last_update_group = new AtomicLong(0);
private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false);
private static final long UPDATE_INTERVAL = 1000 * 4;
private boolean recheckPlayerState = false; // 是否需要重新检查玩家状态发光飞行
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
private Map<UUID, List<ResMigration.ResidenceNode>> residence_data = null;
private final Map<UUID, Integer> map_player_using_group_title_id = new HashMap<>();
private static class WorldDominionTreeSectored {
/*
D | C
--+--
B | A
*/
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_a; // x >= 0, z >= 0
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_b; // x <= 0, z >= 0
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_c; // x >= 0, z <= 0
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_d; // x <= 0, z <= 0
private Integer section_origin_x = 0;
private Integer section_origin_z = 0;
public DominionDTO getLocInDominionDTO(@NotNull Location loc) {
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
List<DominionNode> nodes = getNodes(loc);
if (nodes == null) return null;
if (nodes.isEmpty()) return null;
DominionNode dominionNode = getLocInDominionNode(nodes, loc);
return dominionNode == null ? null : dominionNode.getDominion();
}
}
public List<DominionNode> getNodes(@NotNull Location loc) {
return getNodes(loc.getWorld().getUID(), loc.getBlockX(), loc.getBlockZ());
}
public List<DominionNode> getNodes(World world, int x, int z) {
return getNodes(world.getUID(), x, z);
}
public List<DominionNode> getNodes(UUID world, int x, int z) {
if (x >= section_origin_x && z >= section_origin_z) {
if (world_dominion_tree_sector_a == null) return null;
return world_dominion_tree_sector_a.get(world);
}
if (x <= section_origin_x && z >= section_origin_z) {
if (world_dominion_tree_sector_b == null) return null;
return world_dominion_tree_sector_b.get(world);
}
if (x >= section_origin_x) {
if (world_dominion_tree_sector_c == null) return null;
return world_dominion_tree_sector_c.get(world);
}
if (world_dominion_tree_sector_d == null) return null;
return world_dominion_tree_sector_d.get(world);
}
public CompletableFuture<Void> initAsync(List<DominionDTO> dominions) {
return CompletableFuture.runAsync(() -> init(dominions));
}
private void init(List<DominionDTO> dominions) {
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
world_dominion_tree_sector_a = new ConcurrentHashMap<>();
world_dominion_tree_sector_b = new ConcurrentHashMap<>();
world_dominion_tree_sector_c = new ConcurrentHashMap<>();
world_dominion_tree_sector_d = new ConcurrentHashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_a = new HashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_b = new HashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_c = new HashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_d = new HashMap<>();
// 根据所有领地的最大最小坐标计算象限中心点
int max_x = dominions.stream().mapToInt(DominionDTO::getX1).max().orElse(0);
int min_x = dominions.stream().mapToInt(DominionDTO::getX2).min().orElse(0);
int max_z = dominions.stream().mapToInt(DominionDTO::getZ1).max().orElse(0);
int min_z = dominions.stream().mapToInt(DominionDTO::getZ2).min().orElse(0);
section_origin_x = (max_x + min_x) / 2;
section_origin_z = (max_z + min_z) / 2;
XLogger.debug("Cache init section origin: %d, %d", section_origin_x, section_origin_z);
for (DominionDTO d : dominions) {
// 对每个世界的领地进行四个象限的划分
if (!world_dominions_sector_a.containsKey(d.getWorldUid()) ||
!world_dominions_sector_b.containsKey(d.getWorldUid()) ||
!world_dominions_sector_c.containsKey(d.getWorldUid()) ||
!world_dominions_sector_d.containsKey(d.getWorldUid())) {
world_dominions_sector_a.put(d.getWorldUid(), new ArrayList<>());
world_dominions_sector_b.put(d.getWorldUid(), new ArrayList<>());
world_dominions_sector_c.put(d.getWorldUid(), new ArrayList<>());
world_dominions_sector_d.put(d.getWorldUid(), new ArrayList<>());
}
if (d.getX1() >= section_origin_x && d.getZ1() >= section_origin_z) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
} else if (d.getX1() <= section_origin_x && d.getZ1() >= section_origin_z) {
if (d.getX2() >= section_origin_x) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
world_dominions_sector_b.get(d.getWorldUid()).add(d);
} else {
world_dominions_sector_b.get(d.getWorldUid()).add(d);
}
} else if (d.getX1() >= section_origin_x && d.getZ1() <= section_origin_z) {
if (d.getZ2() >= section_origin_z) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
world_dominions_sector_c.get(d.getWorldUid()).add(d);
} else {
world_dominions_sector_c.get(d.getWorldUid()).add(d);
}
} else {
if (d.getX2() >= section_origin_x && d.getZ2() >= section_origin_z) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
world_dominions_sector_b.get(d.getWorldUid()).add(d);
world_dominions_sector_c.get(d.getWorldUid()).add(d);
world_dominions_sector_d.get(d.getWorldUid()).add(d);
} else if (d.getX2() >= section_origin_x && d.getZ2() <= section_origin_z) {
world_dominions_sector_c.get(d.getWorldUid()).add(d);
world_dominions_sector_d.get(d.getWorldUid()).add(d);
} else if (d.getZ2() >= section_origin_z && d.getX2() <= section_origin_x) {
world_dominions_sector_b.get(d.getWorldUid()).add(d);
world_dominions_sector_d.get(d.getWorldUid()).add(d);
} else {
world_dominions_sector_d.get(d.getWorldUid()).add(d);
}
}
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_a.entrySet()) {
world_dominion_tree_sector_a.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_b.entrySet()) {
world_dominion_tree_sector_b.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_c.entrySet()) {
world_dominion_tree_sector_c.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_d.entrySet()) {
world_dominion_tree_sector_d.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
}
}
}
public @Nullable GroupDTO getPlayerUsingGroupTitle(UUID uuid) {
if (!Dominion.config.getGroupTitleEnable()) {
return null;
}
if (map_player_using_group_title_id.containsKey(uuid)) {
return getGroup(map_player_using_group_title_id.get(uuid));
}
return null;
}
public void updatePlayerUsingGroupTitle(UUID uuid, Integer groupId) {
map_player_using_group_title_id.put(uuid, groupId);
}
@Nullable GroupDTO getPlayerUsingGroupTitle(UUID uuid);
}

View File

@ -0,0 +1,597 @@
package cn.lunadeer.dominion;
import cn.lunadeer.dominion.dtos.*;
import cn.lunadeer.dominion.utils.MessageDisplay;
import cn.lunadeer.dominion.utils.Particle;
import cn.lunadeer.dominion.utils.ResMigration;
import cn.lunadeer.dominion.utils.map.MapRender;
import cn.lunadeer.minecraftpluginutils.AutoTimer;
import cn.lunadeer.minecraftpluginutils.Scheduler;
import cn.lunadeer.minecraftpluginutils.XLogger;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import static cn.lunadeer.dominion.DominionNode.getLocInDominionNode;
import static cn.lunadeer.dominion.DominionNode.isInDominion;
public class CacheImpl implements Cache {
public CacheImpl() {
player_current_dominion_id = new HashMap<>();
loadDominions();
loadMembers();
loadGroups();
}
/**
* 从数据库加载所有领地
* 如果idToLoad为null则加载所有领地
*
* @param idToLoad 领地ID
*/
public void loadDominions(Integer idToLoad) {
if (_last_update_dominion.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
XLogger.debug("run loadDominionsExecution directly");
loadDominionsExecution(idToLoad);
} else {
if (_update_dominion_is_scheduled.get()) return;
XLogger.debug("schedule loadDominionsExecution");
_update_dominion_is_scheduled.set(true);
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_dominion.get())) / 1000 * 20L;
Scheduler.runTaskLaterAsync(() -> {
XLogger.debug("run loadDominionsExecution scheduled");
loadDominionsExecution(idToLoad);
_update_dominion_is_scheduled.set(false);
},
delay_tick);
}
}
public void loadDominions() {
loadDominions(null);
}
private void loadDominionsExecution(Integer idToLoad) {
Scheduler.runTaskAsync(() -> {
long start = System.currentTimeMillis();
int count = 0;
if (idToLoad == null) {
id_dominions = new ConcurrentHashMap<>();
dominion_children = new ConcurrentHashMap<>();
List<DominionDTO> dominions = DominionDTO.selectAll();
CompletableFuture<Void> res = dominion_trees.initAsync(dominions);
count = dominions.size();
for (DominionDTO d : dominions) {
id_dominions.put(d.getId(), d);
if (!dominion_children.containsKey(d.getParentDomId())) {
dominion_children.put(d.getParentDomId(), new ArrayList<>());
}
dominion_children.get(d.getParentDomId()).add(d.getId());
}
res.join(); // 等待树的构建完成
} else {
DominionDTO dominion = DominionDTO.select(idToLoad);
if (dominion == null && id_dominions.containsKey(idToLoad)) {
id_dominions.remove(idToLoad);
} else if (dominion != null) {
id_dominions.put(idToLoad, dominion);
count = 1;
}
}
MapRender.render();
recheckPlayerState = true;
_last_update_dominion.set(System.currentTimeMillis());
XLogger.debug("loadDominionsExecution cost: %d ms for %d dominions"
, System.currentTimeMillis() - start, count);
});
}
/**
* 从数据库加载所有玩家特权
* 如果player_uuid为null则加载所有玩家的特权
*
* @param player_uuid 玩家UUID
*/
public void loadMembers(UUID player_uuid) {
if (_last_update_member.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
XLogger.debug("run loadMembersExecution directly");
loadMembersExecution(player_uuid);
} else {
if (_update_member_is_scheduled.get()) return;
XLogger.debug("schedule loadMembersExecution");
_update_member_is_scheduled.set(true);
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_member.get())) / 1000 * 20L;
Scheduler.runTaskLaterAsync(() -> {
XLogger.debug("run loadMembersExecution scheduled");
loadMembersExecution(player_uuid);
_update_member_is_scheduled.set(false);
},
delay_tick);
}
}
public void loadMembers() {
loadMembers(null);
}
private void loadMembersExecution(UUID player_to_update) {
Scheduler.runTaskAsync(() -> {
long start = System.currentTimeMillis();
List<MemberDTO> all_privileges;
if (player_to_update == null) {
all_privileges = MemberDTO.selectAll();
player_uuid_to_member = new ConcurrentHashMap<>();
} else {
all_privileges = MemberDTO.selectAll(player_to_update);
if (!player_uuid_to_member.containsKey(player_to_update)) {
player_uuid_to_member.put(player_to_update, new ConcurrentHashMap<>());
}
player_uuid_to_member.get(player_to_update).clear();
}
for (MemberDTO privilege : all_privileges) {
UUID player_uuid = privilege.getPlayerUUID();
if (!player_uuid_to_member.containsKey(player_uuid)) {
player_uuid_to_member.put(player_uuid, new ConcurrentHashMap<>());
}
player_uuid_to_member.get(player_uuid).put(privilege.getDomID(), privilege);
}
recheckPlayerState = true;
_last_update_member.set(System.currentTimeMillis());
XLogger.debug("loadMembersExecution cost: %d ms for %d privileges"
, System.currentTimeMillis() - start, all_privileges.size());
});
}
public void loadGroups() {
loadGroups(null);
}
public void loadGroups(Integer groupId) {
if (_last_update_group.get() + UPDATE_INTERVAL < System.currentTimeMillis()) {
XLogger.debug("run loadGroupsExecution directly");
loadGroupExecution(groupId);
} else {
if (_update_group_is_scheduled.get()) return;
XLogger.debug("schedule loadGroupsExecution");
_update_group_is_scheduled.set(true);
long delay_tick = (UPDATE_INTERVAL - (System.currentTimeMillis() - _last_update_group.get())) / 1000 * 20L;
Scheduler.runTaskLaterAsync(() -> {
XLogger.debug("run loadGroupsExecution scheduled");
loadGroupExecution(groupId);
_update_group_is_scheduled.set(false);
},
delay_tick);
}
}
private void loadGroupExecution(Integer groupId) {
Scheduler.runTaskAsync(() -> {
long start = System.currentTimeMillis();
if (groupId == null) {
id_groups = new ConcurrentHashMap<>();
List<GroupDTO> groups = GroupDTO.selectAll();
List<PlayerDTO> players = PlayerDTO.all();
for (GroupDTO group : groups) {
id_groups.put(group.getId(), group);
}
for (PlayerDTO player : players) {
map_player_using_group_title_id.put(player.getUuid(), player.getUsingGroupTitleID());
}
} else {
GroupDTO group = GroupDTO.select(groupId);
if (group == null && id_groups.containsKey(groupId)) {
id_groups.remove(groupId);
} else if (group != null) {
id_groups.put(groupId, group);
}
}
recheckPlayerState = true;
_last_update_group.set(System.currentTimeMillis());
XLogger.debug("loadGroupsExecution cost: %d ms", System.currentTimeMillis() - start);
});
}
@Override
public DominionDTO getPlayerCurrentDominion(Player player) {
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
Integer last_in_dom_id = player_current_dominion_id.get(player.getUniqueId());
DominionDTO last_dominion = null;
if (last_in_dom_id != null) {
last_dominion = id_dominions.get(last_in_dom_id);
}
if (isInDominion(last_dominion, player.getLocation())) {
if (dominion_children.get(last_in_dom_id) == null || dominion_children.get(last_in_dom_id).isEmpty()) {
// 如果玩家仍在领地内且领地没有子领地则直接返回
if (recheckPlayerState) {
lightOrNot(player, last_dominion);
flyOrNot(player, last_dominion);
recheckPlayerState = false;
}
return last_dominion;
}
}
DominionDTO current_dominion = dominion_trees.getLocInDominionDTO(player.getLocation());
int last_dom_id = last_dominion == null ? -1 : last_dominion.getId();
int current_dom_id = current_dominion == null ? -1 : current_dominion.getId();
if (last_dom_id == current_dom_id) {
return last_dominion;
}
if (last_dom_id != -1) {
MessageDisplay.show(player, Dominion.config.getMessageDisplayJoinLeave(), last_dominion.getLeaveMessage());
}
if (current_dom_id != -1) {
MessageDisplay.show(player, Dominion.config.getMessageDisplayJoinLeave(), current_dominion.getJoinMessage());
}
lightOrNot(player, current_dominion); // 发光检查
flyOrNot(player, current_dominion); // 飞行检查
if (current_dominion == null) {
player_current_dominion_id.put(player.getUniqueId(), null);
return null;
}
player_current_dominion_id.put(player.getUniqueId(), current_dominion.getId());
// show border
if (current_dominion.getFlagValue(Flag.SHOW_BORDER)) {
Particle.showBorder(player, current_dominion);
}
return current_dominion;
}
}
@Override
public DominionDTO getDominionByLoc(Location loc) {
return dominion_trees.getLocInDominionDTO(loc);
}
/**
* 玩家退出时调用 用于清除玩家当前所在领地
* 会将玩家当前所在领地设置为null
* 这样当玩家下次进入领地时会重新检查玩家所在位置
*
* @param player 玩家
*/
public void onPlayerQuit(Player player) {
player_current_dominion_id.put(player.getUniqueId(), null);
}
/**
* 检查玩家是否需要设置为发光
*
* @param player 玩家
* @param dominion 领地
*/
private void lightOrNot(Player player, DominionDTO dominion) {
if (!Flag.GLOW.getEnable()) {
return;
}
if (dominion == null) {
player.setGlowing(false);
return;
}
MemberDTO privilege = getMember(player, dominion);
if (privilege != null) {
if (privilege.getGroupId() == -1) {
player.setGlowing(privilege.getFlagValue(Flag.GLOW));
} else {
GroupDTO group = getGroup(privilege.getGroupId());
if (group != null) {
player.setGlowing(group.getFlagValue(Flag.GLOW));
} else {
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
}
}
} else {
player.setGlowing(dominion.getFlagValue(Flag.GLOW));
}
}
private void flyOrNot(Player player, DominionDTO dominion) {
for (String flyPN : Dominion.config.getFlyPermissionNodes()) {
if (player.hasPermission(flyPN)) {
return;
}
}
if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) {
return;
}
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
return;
}
if (!Flag.FLY.getEnable()) {
player.setAllowFlight(false);
return;
}
if (dominion == null) {
player.setAllowFlight(false);
return;
}
MemberDTO privilege = getMember(player, dominion);
if (privilege != null) {
if (privilege.getGroupId() == -1) {
player.setAllowFlight(privilege.getFlagValue(Flag.FLY));
} else {
GroupDTO group = getGroup(privilege.getGroupId());
if (group != null) {
player.setAllowFlight(group.getFlagValue(Flag.FLY));
} else {
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
}
}
} else {
player.setAllowFlight(dominion.getFlagValue(Flag.FLY));
}
}
@Override
public GroupDTO getGroup(Integer id) {
return id_groups.get(id);
}
@Override
public MemberDTO getMember(Player player, DominionDTO dominion) {
if (!player_uuid_to_member.containsKey(player.getUniqueId())) return null;
return player_uuid_to_member.get(player.getUniqueId()).get(dominion.getId());
}
@Override
public MemberDTO getMember(UUID player_uuid, DominionDTO dominion) {
if (!player_uuid_to_member.containsKey(player_uuid)) return null;
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
}
public List<GroupDTO> getBelongGroupsOf(UUID plauer_uuid) {
List<GroupDTO> groups = new ArrayList<>();
if (!player_uuid_to_member.containsKey(plauer_uuid)) return groups;
for (MemberDTO member : player_uuid_to_member.get(plauer_uuid).values()) {
if (member.getGroupId() != -1) {
GroupDTO group = getGroup(member.getGroupId());
if (group != null) {
groups.add(group);
}
}
}
return groups;
}
@Override
public DominionDTO getDominion(Integer id) {
return id_dominions.get(id);
}
public int getPlayerDominionCount(UUID player_uuid) {
int count = 0;
for (DominionDTO dominion : id_dominions.values()) {
if (dominion.getOwner().equals(player_uuid)) {
count++;
}
}
return count;
}
public List<ResMigration.ResidenceNode> getResidenceData(UUID player_uuid) {
if (residence_data == null) {
residence_data = new HashMap<>();
List<ResMigration.ResidenceNode> residences = ResMigration.extractFromResidence(Dominion.instance);
for (ResMigration.ResidenceNode node : residences) {
if (node == null) {
continue;
}
if (!residence_data.containsKey(node.owner)) {
XLogger.debug("residence_data put %s", node.owner);
residence_data.put(node.owner, new ArrayList<>());
}
residence_data.get(node.owner).add(node);
}
XLogger.debug("residence_data: %d", residence_data.size());
}
return residence_data.get(player_uuid);
}
public List<DominionDTO> getDominions() {
return new ArrayList<>(id_dominions.values());
}
public int getDominionCounts() {
return id_dominions.size();
}
public int getMemberCounts() {
int count = 0;
for (Map<Integer, MemberDTO> member : player_uuid_to_member.values()) {
count += member.size();
}
return count;
}
public int getGroupCounts() {
return id_groups.size();
}
public static CacheImpl instance;
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
private final WorldDominionTreeSectored dominion_trees = new WorldDominionTreeSectored();
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, MemberDTO>> player_uuid_to_member; // 玩家所有的特权
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
private final AtomicLong _last_update_dominion = new AtomicLong(0);
private final AtomicBoolean _update_dominion_is_scheduled = new AtomicBoolean(false);
private final AtomicLong _last_update_member = new AtomicLong(0);
private final AtomicBoolean _update_member_is_scheduled = new AtomicBoolean(false);
private final AtomicLong _last_update_group = new AtomicLong(0);
private final AtomicBoolean _update_group_is_scheduled = new AtomicBoolean(false);
private static final long UPDATE_INTERVAL = 1000 * 4;
private boolean recheckPlayerState = false; // 是否需要重新检查玩家状态发光飞行
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
private Map<UUID, List<ResMigration.ResidenceNode>> residence_data = null;
private final Map<UUID, Integer> map_player_using_group_title_id = new HashMap<>();
private static class WorldDominionTreeSectored {
/*
D | C
--+--
B | A
*/
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_a; // x >= 0, z >= 0
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_b; // x <= 0, z >= 0
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_c; // x >= 0, z <= 0
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_d; // x <= 0, z <= 0
private Integer section_origin_x = 0;
private Integer section_origin_z = 0;
public DominionDTO getLocInDominionDTO(@NotNull Location loc) {
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
List<DominionNode> nodes = getNodes(loc);
if (nodes == null) return null;
if (nodes.isEmpty()) return null;
DominionNode dominionNode = getLocInDominionNode(nodes, loc);
return dominionNode == null ? null : dominionNode.getDominion();
}
}
public List<DominionNode> getNodes(@NotNull Location loc) {
return getNodes(loc.getWorld().getUID(), loc.getBlockX(), loc.getBlockZ());
}
public List<DominionNode> getNodes(World world, int x, int z) {
return getNodes(world.getUID(), x, z);
}
public List<DominionNode> getNodes(UUID world, int x, int z) {
if (x >= section_origin_x && z >= section_origin_z) {
if (world_dominion_tree_sector_a == null) return null;
return world_dominion_tree_sector_a.get(world);
}
if (x <= section_origin_x && z >= section_origin_z) {
if (world_dominion_tree_sector_b == null) return null;
return world_dominion_tree_sector_b.get(world);
}
if (x >= section_origin_x) {
if (world_dominion_tree_sector_c == null) return null;
return world_dominion_tree_sector_c.get(world);
}
if (world_dominion_tree_sector_d == null) return null;
return world_dominion_tree_sector_d.get(world);
}
public CompletableFuture<Void> initAsync(List<DominionDTO> dominions) {
return CompletableFuture.runAsync(() -> init(dominions));
}
private void init(List<DominionDTO> dominions) {
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
world_dominion_tree_sector_a = new ConcurrentHashMap<>();
world_dominion_tree_sector_b = new ConcurrentHashMap<>();
world_dominion_tree_sector_c = new ConcurrentHashMap<>();
world_dominion_tree_sector_d = new ConcurrentHashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_a = new HashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_b = new HashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_c = new HashMap<>();
Map<UUID, List<DominionDTO>> world_dominions_sector_d = new HashMap<>();
// 根据所有领地的最大最小坐标计算象限中心点
int max_x = dominions.stream().mapToInt(DominionDTO::getX1).max().orElse(0);
int min_x = dominions.stream().mapToInt(DominionDTO::getX2).min().orElse(0);
int max_z = dominions.stream().mapToInt(DominionDTO::getZ1).max().orElse(0);
int min_z = dominions.stream().mapToInt(DominionDTO::getZ2).min().orElse(0);
section_origin_x = (max_x + min_x) / 2;
section_origin_z = (max_z + min_z) / 2;
XLogger.debug("Cache init section origin: %d, %d", section_origin_x, section_origin_z);
for (DominionDTO d : dominions) {
// 对每个世界的领地进行四个象限的划分
if (!world_dominions_sector_a.containsKey(d.getWorldUid()) ||
!world_dominions_sector_b.containsKey(d.getWorldUid()) ||
!world_dominions_sector_c.containsKey(d.getWorldUid()) ||
!world_dominions_sector_d.containsKey(d.getWorldUid())) {
world_dominions_sector_a.put(d.getWorldUid(), new ArrayList<>());
world_dominions_sector_b.put(d.getWorldUid(), new ArrayList<>());
world_dominions_sector_c.put(d.getWorldUid(), new ArrayList<>());
world_dominions_sector_d.put(d.getWorldUid(), new ArrayList<>());
}
if (d.getX1() >= section_origin_x && d.getZ1() >= section_origin_z) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
} else if (d.getX1() <= section_origin_x && d.getZ1() >= section_origin_z) {
if (d.getX2() >= section_origin_x) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
world_dominions_sector_b.get(d.getWorldUid()).add(d);
} else {
world_dominions_sector_b.get(d.getWorldUid()).add(d);
}
} else if (d.getX1() >= section_origin_x && d.getZ1() <= section_origin_z) {
if (d.getZ2() >= section_origin_z) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
world_dominions_sector_c.get(d.getWorldUid()).add(d);
} else {
world_dominions_sector_c.get(d.getWorldUid()).add(d);
}
} else {
if (d.getX2() >= section_origin_x && d.getZ2() >= section_origin_z) {
world_dominions_sector_a.get(d.getWorldUid()).add(d);
world_dominions_sector_b.get(d.getWorldUid()).add(d);
world_dominions_sector_c.get(d.getWorldUid()).add(d);
world_dominions_sector_d.get(d.getWorldUid()).add(d);
} else if (d.getX2() >= section_origin_x && d.getZ2() <= section_origin_z) {
world_dominions_sector_c.get(d.getWorldUid()).add(d);
world_dominions_sector_d.get(d.getWorldUid()).add(d);
} else if (d.getZ2() >= section_origin_z && d.getX2() <= section_origin_x) {
world_dominions_sector_b.get(d.getWorldUid()).add(d);
world_dominions_sector_d.get(d.getWorldUid()).add(d);
} else {
world_dominions_sector_d.get(d.getWorldUid()).add(d);
}
}
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_a.entrySet()) {
world_dominion_tree_sector_a.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_b.entrySet()) {
world_dominion_tree_sector_b.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_c.entrySet()) {
world_dominion_tree_sector_c.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_d.entrySet()) {
world_dominion_tree_sector_d.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
}
}
}
}
@Override
public @Nullable GroupDTO getPlayerUsingGroupTitle(UUID uuid) {
if (!Dominion.config.getGroupTitleEnable()) {
return null;
}
if (map_player_using_group_title_id.containsKey(uuid)) {
return getGroup(map_player_using_group_title_id.get(uuid));
}
return null;
}
public void updatePlayerUsingGroupTitle(UUID uuid, Integer groupId) {
map_player_using_group_title_id.put(uuid, groupId);
}
}

View File

@ -38,7 +38,7 @@ public final class Dominion extends JavaPlugin {
DatabaseTables.migrate();
new Scheduler(this);
AutoClean.run();
Cache.instance = new Cache();
CacheImpl.instance = new CacheImpl();
if (config.getGroupTitleEnable()) {
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
@ -54,9 +54,9 @@ public final class Dominion extends JavaPlugin {
bStatsMetrics metrics = new bStatsMetrics(this, 21445);
metrics.addCustomChart(new bStatsMetrics.SimplePie("database", () -> config.getDbType()));
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("dominion_count", () -> Cache.instance.getDominionCounts()));
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("group_count", () -> Cache.instance.getGroupCounts()));
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("member_count", () -> Cache.instance.getMemberCounts()));
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("dominion_count", () -> CacheImpl.instance.getDominionCounts()));
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("group_count", () -> CacheImpl.instance.getGroupCounts()));
metrics.addCustomChart(new bStatsMetrics.SingleLineChart("member_count", () -> CacheImpl.instance.getMemberCounts()));
if (config.getCheckUpdate()) {
giteaReleaseCheck = new GiteaReleaseCheck(this,

View File

@ -12,7 +12,7 @@ public class DominionNode {
private List<DominionNode> children = new ArrayList<>();
public DominionDTO getDominion() {
return Cache.instance.getDominion(dominion_id);
return CacheImpl.instance.getDominion(dominion_id);
}
public List<DominionNode> getChildren() {

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.DominionController;
@ -421,7 +421,7 @@ public class DominionOperate {
return;
}
} else {
GroupDTO groupDTO = Cache.instance.getGroup(privilegeDTO.getGroupId());
GroupDTO groupDTO = CacheImpl.instance.getGroup(privilegeDTO.getGroupId());
if (privilegeDTO.getGroupId() != -1 && groupDTO != null) {
if (!groupDTO.getFlagValue(Flag.TELEPORT)) {
Notification.error(sender, Translation.Messages_GroupNoTp);
@ -437,7 +437,7 @@ public class DominionOperate {
}
LocalDateTime now = LocalDateTime.now();
LocalDateTime next_time = Cache.instance.NextTimeAllowTeleport.get(player.getUniqueId());
LocalDateTime next_time = CacheImpl.instance.NextTimeAllowTeleport.get(player.getUniqueId());
if (next_time != null) {
if (now.isBefore(next_time)) {
long secs_until_next = now.until(next_time, java.time.temporal.ChronoUnit.SECONDS);
@ -463,7 +463,7 @@ public class DominionOperate {
}
});
}
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
CacheImpl.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
Scheduler.runTaskLater(() -> {
Location location = dominionDTO.getTpLocation();
int center_x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
import cn.lunadeer.dominion.controllers.DominionController;
@ -38,7 +38,7 @@ public class Migration {
return;
}
String resName = args[1];
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
List<ResMigration.ResidenceNode> res_data = CacheImpl.instance.getResidenceData(player.getUniqueId());
if (res_data == null) {
Notification.error(sender, Translation.Commands_Residence_NoMigrationData);
return;

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.managers.Translation;
@ -30,17 +30,17 @@ public class Operator {
}
Scheduler.runTaskAsync(() -> {
Notification.info(sender, Translation.Commands_Operator_ReloadingDominionCache);
Cache.instance.loadDominions();
CacheImpl.instance.loadDominions();
Notification.info(sender, Translation.Commands_Operator_ReloadedDominionCache);
});
Scheduler.runTaskAsync(() -> {
Notification.info(sender, Translation.Commands_Operator_ReloadingPrivilegeCache);
Cache.instance.loadMembers();
CacheImpl.instance.loadMembers();
Notification.info(sender, Translation.Commands_Operator_ReloadedPrivilegeCache);
});
Scheduler.runTaskAsync(() -> {
Notification.info(sender, Translation.Commands_Operator_ReloadingGroupCache);
Cache.instance.loadGroups();
CacheImpl.instance.loadGroups();
Notification.info(sender, Translation.Commands_Operator_ReloadedGroupCache);
});
}
@ -52,7 +52,7 @@ public class Operator {
Scheduler.runTaskAsync(() -> {
Notification.info(sender, Translation.Commands_Operator_ExportingMCAList);
Map<String, List<String>> mca_cords = new HashMap<>();
List<DominionDTO> doms = Cache.instance.getDominions();
List<DominionDTO> doms = CacheImpl.instance.getDominions();
for (DominionDTO dom : doms) {
if (dom.getWorld() == null) {
continue;

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.commands;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.GroupDTO;
import cn.lunadeer.dominion.dtos.MemberDTO;
@ -36,18 +36,18 @@ public class Title {
player.setUsingGroupTitleID(id);
Notification.info(sender, Translation.Commands_Title_RemoveTitleSuccess);
} else {
GroupDTO group = Cache.instance.getGroup(id);
GroupDTO group = CacheImpl.instance.getGroup(id);
if (group == null) {
Notification.error(sender, Translation.Commands_Title_GroupNotExist);
return;
}
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
DominionDTO dominion = CacheImpl.instance.getDominion(group.getDomID());
if (dominion == null) {
Notification.error(sender, Translation.Commands_Title_GroupDominionNotExist, group.getName());
return;
}
if (!dominion.getOwner().equals(bukkit_player.getUniqueId())) {
MemberDTO member = Cache.instance.getMember(bukkit_player, dominion);
MemberDTO member = CacheImpl.instance.getMember(bukkit_player, dominion);
if (member == null) {
Notification.error(sender, Translation.Commands_Title_NotDominionMember, dominion.getName());
return;

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.controllers;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
@ -771,7 +771,7 @@ public class DominionController {
}
int level = 0;
while (parent_dom.getParentDomId() != -1) {
parent_dom = Cache.instance.getDominion(parent_dom.getParentDomId());
parent_dom = CacheImpl.instance.getDominion(parent_dom.getParentDomId());
level++;
}
if (level >= Dominion.config.getLimitDepth(operator.getPlayer())) {
@ -785,7 +785,7 @@ public class DominionController {
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
return false;
}
return Cache.instance.getPlayerDominionCount(operator.getUniqueId()) >= Dominion.config.getLimitAmount(operator.getPlayer()) && Dominion.config.getLimitAmount(operator.getPlayer()) != -1;
return CacheImpl.instance.getPlayerDominionCount(operator.getUniqueId()) >= Dominion.config.getLimitAmount(operator.getPlayer()) && Dominion.config.getLimitAmount(operator.getPlayer()) != -1;
}
private static boolean worldNotValid(AbstractOperator operator, String worldName) {

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.minecraftpluginutils.XLogger;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
@ -129,7 +129,7 @@ public class DominionDTO {
insert.field(new Field(f.getFlagName(), f.getDefaultValue()));
}
try (ResultSet rs = insert.execute()) {
Cache.instance.loadDominions();
CacheImpl.instance.loadDominions();
List<DominionDTO> dominions = getDTOFromRS(rs);
if (dominions.isEmpty()) return null;
return dominions.getFirst();
@ -142,7 +142,7 @@ public class DominionDTO {
public static void delete(DominionDTO dominion) {
String sql = "DELETE FROM dominion WHERE id = ?;";
query(sql, dominion.getId());
Cache.instance.loadDominions();
CacheImpl.instance.loadDominions();
}
private DominionDTO(Integer id, UUID owner, String name, UUID world_uid,
@ -231,7 +231,7 @@ public class DominionDTO {
try (ResultSet rs = updateRow.execute()) {
List<DominionDTO> dominions = getDTOFromRS(rs);
if (dominions.isEmpty()) return null;
Cache.instance.loadDominions((Integer) id.value);
CacheImpl.instance.loadDominions((Integer) id.value);
return dominions.getFirst();
} catch (SQLException e) {
DatabaseManager.handleDatabaseError("DominionDTO.doUpdate ", e, updateRow.toString());

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.minecraftpluginutils.ColorParser;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
@ -99,7 +99,7 @@ public class GroupDTO {
try (ResultSet rs = insertRow.execute()) {
List<GroupDTO> groups = getDTOFromRS(rs);
if (groups.isEmpty()) return null;
Cache.instance.loadGroups(groups.getFirst().getId());
CacheImpl.instance.loadGroups(groups.getFirst().getId());
return groups.getFirst();
} catch (Exception e) {
DatabaseManager.handleDatabaseError("GroupDTO.create ", e, "");
@ -114,7 +114,7 @@ public class GroupDTO {
public static void delete(Integer id) {
String sql = "DELETE FROM dominion_group WHERE id = ?;";
DatabaseManager.instance.query(sql, id);
Cache.instance.loadGroups(id);
CacheImpl.instance.loadGroups(id);
List<MemberDTO> players = MemberDTO.selectByGroupId(id);
for (MemberDTO player : players) {
player.setGroupId(-1);
@ -196,7 +196,7 @@ public class GroupDTO {
try (ResultSet rs = updateRow.execute()) {
List<GroupDTO> groups = getDTOFromRS(rs);
if (groups.isEmpty()) return null;
Cache.instance.loadGroups((Integer) id.value);
CacheImpl.instance.loadGroups((Integer) id.value);
return groups.getFirst();
} catch (Exception e) {
DatabaseManager.handleDatabaseError("更新权限组失败: ", e, "");

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
import cn.lunadeer.minecraftpluginutils.databse.Field;
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
@ -54,7 +54,7 @@ public class MemberDTO {
try (ResultSet rs = updateRow.execute()) {
List<MemberDTO> players = getDTOFromRS(rs);
if (players.isEmpty()) return null;
Cache.instance.loadMembers(getPlayerUUID());
CacheImpl.instance.loadMembers(getPlayerUUID());
return players.getFirst();
} catch (Exception e) {
DatabaseManager.handleDatabaseError("MemberDTO.doUpdate ", e, "");
@ -72,7 +72,7 @@ public class MemberDTO {
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
}
try (ResultSet rs = insertRow.execute()) {
Cache.instance.loadMembers(player.getPlayerUUID());
CacheImpl.instance.loadMembers(player.getPlayerUUID());
List<MemberDTO> players = getDTOFromRS(rs);
if (players.isEmpty()) return null;
return players.getFirst();
@ -97,7 +97,7 @@ public class MemberDTO {
public static void delete(UUID player, Integer domID) {
String sql = "DELETE FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;";
query(sql, player.toString(), domID);
Cache.instance.loadMembers(player);
CacheImpl.instance.loadMembers(player);
}
public static List<MemberDTO> selectAll() {

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.dtos;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
import cn.lunadeer.minecraftpluginutils.databse.Field;
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
@ -194,7 +194,7 @@ public class PlayerDTO {
public void setUsingGroupTitleID(Integer usingGroupTitleID) {
this.using_group_title_id = usingGroupTitleID;
update(this);
Cache.instance.updatePlayerUsingGroupTitle(uuid, usingGroupTitleID);
CacheImpl.instance.updatePlayerUsingGroupTitle(uuid, usingGroupTitleID);
}
private Integer id;

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.managers;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.GroupDTO;
import cn.lunadeer.minecraftpluginutils.XLogger;
@ -25,14 +25,14 @@ public class PlaceHolderApi extends PlaceholderExpansion {
@Override
public String onPlaceholderRequest(Player bukkitPlayer, @NotNull String params) {
if (params.equalsIgnoreCase("group_title")) {
GroupDTO group = Cache.instance.getPlayerUsingGroupTitle(bukkitPlayer.getUniqueId());
GroupDTO group = CacheImpl.instance.getPlayerUsingGroupTitle(bukkitPlayer.getUniqueId());
if (group == null) {
return "";
}
return group.getNameColoredBukkit();
}
if (params.equalsIgnoreCase("current_dominion")) {
DominionDTO dominion = Cache.instance.getDominionByLoc(bukkitPlayer.getLocation());
DominionDTO dominion = CacheImpl.instance.getDominionByLoc(bukkitPlayer.getLocation());
if (dominion == null) {
return "";
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.uis.tuis;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.managers.Translation;
import cn.lunadeer.dominion.utils.ResMigration;
@ -9,11 +9,6 @@ import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.stui.ListView;
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.Style;
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -40,7 +35,7 @@ public class MigrateList {
view.title(Translation.TUI_Migrate_Title);
view.navigator(Line.create().append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build()).append(Translation.TUI_Navigation_MigrateList));
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
List<ResMigration.ResidenceNode> res_data = CacheImpl.instance.getResidenceData(player.getUniqueId());
if (res_data == null) {
view.add(Line.create().append(Translation.TUI_Migrate_NoData));

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.uis.tuis;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.GroupDTO;
import cn.lunadeer.dominion.managers.Translation;
@ -30,8 +30,8 @@ public class TitleList {
view.title(Translation.TUI_TitleList_Title);
view.navigator(Line.create().append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build()).append(Translation.TUI_Navigation_TitleList));
List<GroupDTO> groups = Cache.instance.getBelongGroupsOf(player.getUniqueId());
GroupDTO using = Cache.instance.getPlayerUsingGroupTitle(player.getUniqueId());
List<GroupDTO> groups = CacheImpl.instance.getBelongGroupsOf(player.getUniqueId());
GroupDTO using = CacheImpl.instance.getPlayerUsingGroupTitle(player.getUniqueId());
// 将其拥有的所有领地的权限组称号都加入列表 - 领地所有者可以使用其领地的任意权限组称号
List<DominionDTO> dominions = DominionDTO.selectByOwner(player.getUniqueId());
@ -41,7 +41,7 @@ public class TitleList {
}
for (GroupDTO group : groups) {
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
DominionDTO dominion = CacheImpl.instance.getDominion(group.getDomID());
Line line = Line.create();
if (using != null && using.getId().equals(group.getId())) {
line.append(Button.createRed(Translation.TUI_TitleList_RemoveButton).setExecuteCommand("/dominion use_title -1").build());

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.uis.tuis.dominion.manage.member;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.*;
import cn.lunadeer.dominion.managers.Translation;
import cn.lunadeer.minecraftpluginutils.Notification;
@ -60,7 +60,7 @@ public class MemberList {
for (MemberDTO privilege : privileges) {
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
if (p_player == null) continue;
GroupDTO group = Cache.instance.getGroup(privilege.getGroupId());
GroupDTO group = CacheImpl.instance.getGroup(privilege.getGroupId());
Line line = Line.create();
if (group != null) {

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.utils;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.controllers.AbstractOperator;
import cn.lunadeer.dominion.dtos.DominionDTO;
@ -42,7 +42,7 @@ public class ControllerUtils {
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_CannotGetDominionAuto));
return null;
}
DominionDTO dominion = Cache.instance.getDominionByLoc(location);
DominionDTO dominion = CacheImpl.instance.getDominionByLoc(location);
if (dominion == null) {
return null;
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.utils;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
@ -29,7 +29,7 @@ public class EventUtils {
if (prev.getGroupId() == -1) {
return prev.getAdmin();
} else {
GroupDTO group = Cache.instance.getGroup(prev.getGroupId());
GroupDTO group = CacheImpl.instance.getGroup(prev.getGroupId());
return group != null && group.getAdmin();
}
}
@ -40,7 +40,7 @@ public class EventUtils {
if (inv.getLocation() == null) {
return null;
} else {
return Cache.instance.getDominionByLoc(inv.getLocation());
return CacheImpl.instance.getDominionByLoc(inv.getLocation());
}
}
@ -51,12 +51,12 @@ public class EventUtils {
if (dom == null) {
return true;
}
MemberDTO prev = Cache.instance.getMember(player, dom);
MemberDTO prev = CacheImpl.instance.getMember(player, dom);
if (canByPass(player, dom, prev)) {
return true;
}
if (prev != null) {
GroupDTO group = Cache.instance.getGroup(prev.getGroupId());
GroupDTO group = CacheImpl.instance.getGroup(prev.getGroupId());
if (prev.getGroupId() != -1 && group != null) {
if (group.getFlagValue(flag)) {
return true;

View File

@ -1,12 +1,11 @@
package cn.lunadeer.dominion.utils;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.MemberDTO;
import cn.lunadeer.dominion.managers.Translation;
import cn.lunadeer.minecraftpluginutils.Notification;
import cn.lunadeer.minecraftpluginutils.stui.ListView;
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -39,7 +38,7 @@ public class TuiUtils {
if (args.length >= 2) {
return DominionDTO.select(args[1]);
} else {
return Cache.instance.getPlayerCurrentDominion(player);
return CacheImpl.instance.getPlayerCurrentDominion(player);
}
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.utils.map;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.PlayerDTO;
import cn.lunadeer.dominion.managers.Translation;
@ -22,7 +22,7 @@ public class BlueMapConnect {
try {
BlueMapAPI.getInstance().ifPresent(api -> {
Map<String, List<DominionDTO>> world_dominions = new HashMap<>();
for (DominionDTO dominion : Cache.instance.getDominions()) {
for (DominionDTO dominion : CacheImpl.instance.getDominions()) {
if (dominion.getWorld() == null) {
continue;
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.utils.map;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import java.util.List;
@ -14,7 +14,7 @@ public class MapRender {
}
if (Dominion.config.getDynmap()) {
DynmapConnect.instance.setDominionMarkers(Cache.instance.getDominions());
DynmapConnect.instance.setDominionMarkers(CacheImpl.instance.getDominions());
}
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_20_1;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.minecraftpluginutils.XLogger;
@ -39,7 +39,7 @@ public class EnvironmentEvents implements Listener {
}
XLogger.debug("blockList" + event.blockList().size());
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.CREEPER_EXPLODE, null);
});
}
@ -51,7 +51,7 @@ public class EnvironmentEvents implements Listener {
return;
}
event.blockList().removeIf(blockState -> {
DominionDTO dom = Cache.instance.getDominionByLoc(blockState.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(blockState.getLocation());
return !checkFlag(dom, Flag.CREEPER_EXPLODE, null);
});
}
@ -62,7 +62,7 @@ public class EnvironmentEvents implements Listener {
if (event.getCause() != HangingBreakEvent.RemoveCause.EXPLOSION) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
}
@ -78,7 +78,7 @@ public class EnvironmentEvents implements Listener {
if (!(hit instanceof Hanging)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(hit.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(hit.getLocation());
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
}
@ -91,7 +91,7 @@ public class EnvironmentEvents implements Listener {
if (isNotExplodeEntity(event.getDamager())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
}
@ -108,7 +108,7 @@ public class EnvironmentEvents implements Listener {
// 玩家破坏由 玩家 break 权限控制
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.ITEM_FRAME_PROJ_DAMAGE, event);
}
@ -128,7 +128,7 @@ public class EnvironmentEvents implements Listener {
return;
}
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.DRAGON_BREAK_BLOCK, null);
});
}
@ -140,7 +140,7 @@ public class EnvironmentEvents implements Listener {
// 如果点燃事件没有玩家触发那么就是火焰蔓延
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getBlock().getLocation());
checkFlag(dom, Flag.FIRE_SPREAD, event);
}
@ -148,11 +148,11 @@ public class EnvironmentEvents implements Listener {
public void onLiquidFlowIn(BlockFromToEvent event) {
Location from = event.getBlock().getLocation();
Location to = event.getToBlock().getLocation();
DominionDTO dom_to = Cache.instance.getDominionByLoc(to);
DominionDTO dom_to = CacheImpl.instance.getDominionByLoc(to);
if (dom_to == null) {
return;
}
DominionDTO dom_from = Cache.instance.getDominionByLoc(from);
DominionDTO dom_from = CacheImpl.instance.getDominionByLoc(from);
if (dom_from != null) {
if (Objects.equals(dom_from.getId(), dom_to.getId())) {
return;
@ -167,7 +167,7 @@ public class EnvironmentEvents implements Listener {
if (entity instanceof Player) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
if (dom == null) {
return;
}
@ -187,7 +187,7 @@ public class EnvironmentEvents implements Listener {
return;
}
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.TNT_EXPLODE, null);
});
}
@ -199,7 +199,7 @@ public class EnvironmentEvents implements Listener {
if (harmer.getType() != EntityType.MINECART_TNT && harmer.getType() != EntityType.PRIMED_TNT) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.TNT_EXPLODE, event);
}
@ -215,7 +215,7 @@ public class EnvironmentEvents implements Listener {
if (block.getType() != FARMLAND) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRAMPLE, event);
}
@ -233,7 +233,7 @@ public class EnvironmentEvents implements Listener {
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRIG_PRESSURE_PROJ, event);
}
@ -246,7 +246,7 @@ public class EnvironmentEvents implements Listener {
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRIG_PRESSURE_MOB, event);
}
@ -259,7 +259,7 @@ public class EnvironmentEvents implements Listener {
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRIG_PRESSURE_DROP, event);
}
@ -269,7 +269,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.WITHER) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.WITHER_SPAWN, event);
}
@ -280,7 +280,7 @@ public class EnvironmentEvents implements Listener {
return;
}
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.WITHER_SPAWN, null);
});
}
@ -291,7 +291,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.ENDERMAN) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ENDER_MAN, event);
}
@ -301,7 +301,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.ENDERMAN) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ENDER_MAN, event);
}
@ -311,7 +311,7 @@ public class EnvironmentEvents implements Listener {
if (!(entity instanceof Monster)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.MONSTER_SPAWN, event);
}
@ -321,7 +321,7 @@ public class EnvironmentEvents implements Listener {
if (!(entity instanceof Animals)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ANIMAL_SPAWN, event);
}
@ -331,7 +331,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.VILLAGER) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.VILLAGER_SPAWN, event);
}
@ -339,8 +339,8 @@ public class EnvironmentEvents implements Listener {
public void onHopper(InventoryMoveItemEvent event) { // hopper_outside
Inventory hopper = event.getDestination();
Inventory inventory = event.getSource();
DominionDTO hopperDom = Cache.instance.getDominionByLoc(hopper.getLocation());
DominionDTO inventoryDom = Cache.instance.getDominionByLoc(inventory.getLocation());
DominionDTO hopperDom = CacheImpl.instance.getDominionByLoc(hopper.getLocation());
DominionDTO inventoryDom = CacheImpl.instance.getDominionByLoc(inventory.getLocation());
if (hopperDom == null && inventoryDom != null) {
checkFlag(inventoryDom, Flag.HOPPER_OUTSIDE, event);
}
@ -354,10 +354,10 @@ public class EnvironmentEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockPushedByPiston(BlockPistonExtendEvent event) { // piston_outside
Block piston = event.getBlock();
DominionDTO pistonDom = Cache.instance.getDominionByLoc(piston.getLocation());
DominionDTO pistonDom = CacheImpl.instance.getDominionByLoc(piston.getLocation());
BlockFace direction = event.getDirection();
Block endBlockAfterPush = piston.getRelative(direction, event.getBlocks().size() + 1);
DominionDTO endBlockDom = Cache.instance.getDominionByLoc(endBlockAfterPush.getLocation());
DominionDTO endBlockDom = CacheImpl.instance.getDominionByLoc(endBlockAfterPush.getLocation());
if (pistonDom != null && endBlockDom == null) {
checkFlag(pistonDom, Flag.PISTON_OUTSIDE, event);
}
@ -389,8 +389,8 @@ public class EnvironmentEvents implements Listener {
}
fallingBlockMap.remove(entity.getUniqueId());
Location locEnd = block.getLocation();
DominionDTO domStart = Cache.instance.getDominionByLoc(locStart);
DominionDTO domEnd = Cache.instance.getDominionByLoc(locEnd);
DominionDTO domStart = CacheImpl.instance.getDominionByLoc(locStart);
DominionDTO domEnd = CacheImpl.instance.getDominionByLoc(locEnd);
if (domEnd == null) {
return;
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_20_1;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerDTO;
@ -44,7 +44,7 @@ public class PlayerEvents implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player bukkitPlayer = event.getPlayer();
Cache.instance.onPlayerQuit(bukkitPlayer);
CacheImpl.instance.onPlayerQuit(bukkitPlayer);
}
@EventHandler(priority = EventPriority.HIGHEST) // anchor
@ -53,7 +53,7 @@ public class PlayerEvents implements Listener {
if (!event.isAnchorSpawn()) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getRespawnLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getRespawnLocation());
if (!checkFlag(dom, Flag.ANCHOR, bukkitPlayer, null)) {
if (bukkitPlayer.getBedSpawnLocation() != null) {
event.setRespawnLocation(bukkitPlayer.getBedSpawnLocation());
@ -77,7 +77,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.ANCHOR, player, event);
}
@ -90,7 +90,7 @@ public class PlayerEvents implements Listener {
if (!(event.getEntity() instanceof Animals)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.ANIMAL_KILLING, bukkitPlayer, event);
}
@ -102,7 +102,7 @@ public class PlayerEvents implements Listener {
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
DominionDTO dom = CacheImpl.instance.getPlayerCurrentDominion(bukkitPlayer);
checkFlag(dom, Flag.ANVIL, bukkitPlayer, event);
}
@ -118,7 +118,7 @@ public class PlayerEvents implements Listener {
if (inv.getLocation() == null) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(inv.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(inv.getLocation());
checkFlag(dom, Flag.BEACON, bukkitPlayer, event);
}
@ -135,7 +135,7 @@ public class PlayerEvents implements Listener {
if (!(Tag.BEDS.isTagged(block.getType()))) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.BED, bukkitPlayer, event);
}
@ -147,7 +147,7 @@ public class PlayerEvents implements Listener {
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
DominionDTO dom = CacheImpl.instance.getPlayerCurrentDominion(bukkitPlayer);
checkFlag(dom, Flag.BREW, bukkitPlayer, event);
}
@ -196,7 +196,7 @@ public class PlayerEvents implements Listener {
}
public static boolean onBreak(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominionByLoc(location);
DominionDTO dom = CacheImpl.instance.getDominionByLoc(location);
return checkFlag(dom, Flag.BREAK_BLOCK, player, null);
}
@ -213,7 +213,7 @@ public class PlayerEvents implements Listener {
if (!Tag.BUTTONS.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.BUTTON, player, event);
}
@ -231,7 +231,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.CAKE, player, event);
}
@ -241,7 +241,7 @@ public class PlayerEvents implements Listener {
if (loc == null) {
dom = null;
} else {
dom = Cache.instance.getDominionByLoc(loc);
dom = CacheImpl.instance.getDominionByLoc(loc);
}
return checkFlag(dom, Flag.CONTAINER, player, null);
}
@ -367,7 +367,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getClickedBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getClickedBlock().getLocation());
checkFlag(dom, Flag.COMPARER, player, event);
}
@ -384,7 +384,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getClickedBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getClickedBlock().getLocation());
checkFlag(dom, Flag.DOOR, player, event);
}
@ -398,7 +398,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.DRAGON_EGG, player, event);
}
@ -409,7 +409,7 @@ public class PlayerEvents implements Listener {
if (!(entity instanceof Colorable)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.DYE, player, event);
}
@ -426,7 +426,7 @@ public class PlayerEvents implements Listener {
if (!(Tag.SIGNS.isTagged(block.getType()))) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.EDIT_SIGN, player, event);
}
@ -434,7 +434,7 @@ public class PlayerEvents implements Listener {
public void onSignEdit(SignChangeEvent event) {
Player player = event.getPlayer();
Block block = event.getBlock();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.EDIT_SIGN, player, event);
}
@ -447,7 +447,7 @@ public class PlayerEvents implements Listener {
if (projectile.getType() != EntityType.EGG) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(projectile.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(projectile.getLocation());
checkFlag(dom, Flag.EGG, player, event);
}
@ -472,7 +472,7 @@ public class PlayerEvents implements Listener {
if (projectile.getType() != EntityType.ENDER_PEARL) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(projectile.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(projectile.getLocation());
checkFlag(dom, Flag.ENDER_PEARL, player, event);
}
@ -486,7 +486,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getRightClicked().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getRightClicked().getLocation());
checkFlag(dom, Flag.FEED, player, event);
}
@ -512,7 +512,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.HARVEST, player, event);
}
@ -530,7 +530,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.HONEY, player, event);
}
@ -541,7 +541,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(caught.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(caught.getLocation());
checkFlag(dom, Flag.HOOK, player, event);
}
@ -569,7 +569,7 @@ public class PlayerEvents implements Listener {
if (player == null) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getBlock().getLocation());
checkFlag(dom, Flag.IGNITE, player, event);
}
@ -584,7 +584,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ITEM_FRAME_INTERACTIVE, player, event);
}
@ -602,7 +602,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.LEVER, player, event);
}
@ -616,14 +616,14 @@ public class PlayerEvents implements Listener {
if (!(entity instanceof Monster)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.MONSTER_KILLING, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // move
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
DominionDTO dom = CacheImpl.instance.getPlayerCurrentDominion(player);
if (!checkFlag(dom, Flag.MOVE, player, null)) {
Location to = player.getLocation();
int x1 = Math.abs(to.getBlockX() - dom.getX1());
@ -673,7 +673,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.NOTE_BLOCK, player, event);
}
@ -725,7 +725,7 @@ public class PlayerEvents implements Listener {
}
public static boolean onPlace(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominionByLoc(location);
DominionDTO dom = CacheImpl.instance.getDominionByLoc(location);
return checkFlag(dom, Flag.PLACE, player, null);
}
@ -742,7 +742,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.PRESSURE, player, event);
}
@ -751,7 +751,7 @@ public class PlayerEvents implements Listener {
if (!(event.getEntity() instanceof Player player)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getMount().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getMount().getLocation());
checkFlag(dom, Flag.RIDING, player, event);
}
@ -766,14 +766,14 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.REPEATER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // shear
public void onShear(PlayerShearEntityEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.SHEAR, player, event);
}
@ -786,7 +786,7 @@ public class PlayerEvents implements Listener {
if (projectile.getType() == EntityType.ENDER_PEARL || projectile.getType() == EntityType.EGG) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(projectile.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(projectile.getLocation());
checkFlag(dom, Flag.SHOOT, player, event);
}
@ -807,7 +807,7 @@ public class PlayerEvents implements Listener {
if (!(event.getAttacker() instanceof Player player)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getVehicle().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getVehicle().getLocation());
checkFlag(dom, Flag.VEHICLE_DESTROY, player, event);
}
@ -821,7 +821,7 @@ public class PlayerEvents implements Listener {
if (!(entity instanceof Vehicle)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.VEHICLE_SPAWN, player, event);
}
@ -833,7 +833,7 @@ public class PlayerEvents implements Listener {
if (!(event.getEntity() instanceof Villager)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.VILLAGER_KILLING, player, event);
}
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_20_1.special;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
@ -21,7 +21,7 @@ public class Paper implements Listener {
if (!(entity instanceof Monster)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getLoc());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getLoc());
checkFlag(dom, Flag.MONSTER_MOVE, event);
}
@ -31,7 +31,7 @@ public class Paper implements Listener {
if (!(entity instanceof Animals)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getLoc());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getLoc());
checkFlag(dom, Flag.ANIMAL_MOVE, event);
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_20_1.special;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
@ -33,7 +33,7 @@ public class Spigot implements Listener {
} else {
Location lastLoc = entityMap.get(entity.getUniqueId());
Location currentLoc = entity.getLocation();
DominionDTO dom = Cache.instance.getDominionByLoc(currentLoc);
DominionDTO dom = CacheImpl.instance.getDominionByLoc(currentLoc);
if (!checkFlag(dom, Flag.ANIMAL_MOVE, null) && entity instanceof Animals) {
entity.teleport(lastLoc);
} else if (!checkFlag(dom, Flag.MONSTER_MOVE, null) && entity instanceof Monster) {

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_21;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.minecraftpluginutils.XLogger;
@ -38,7 +38,7 @@ public class EnvironmentEvents implements Listener {
}
XLogger.debug("blockList" + event.blockList().size());
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.CREEPER_EXPLODE, null);
});
}
@ -46,7 +46,7 @@ public class EnvironmentEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - bed anchor
public void onBedAnchorExplosion(BlockExplodeEvent event) {
event.blockList().removeIf(blockState -> {
DominionDTO dom = Cache.instance.getDominionByLoc(blockState.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(blockState.getLocation());
return !checkFlag(dom, Flag.CREEPER_EXPLODE, null);
});
}
@ -57,7 +57,7 @@ public class EnvironmentEvents implements Listener {
if (event.getCause() != HangingBreakEvent.RemoveCause.EXPLOSION) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
}
@ -73,7 +73,7 @@ public class EnvironmentEvents implements Listener {
if (!(hit instanceof Hanging)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(hit.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(hit.getLocation());
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
}
@ -86,7 +86,7 @@ public class EnvironmentEvents implements Listener {
if (isNotExplodeEntity(event.getDamager())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
}
@ -103,7 +103,7 @@ public class EnvironmentEvents implements Listener {
// 玩家破坏由 玩家 break 权限控制
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.ITEM_FRAME_PROJ_DAMAGE, event);
}
@ -123,7 +123,7 @@ public class EnvironmentEvents implements Listener {
return;
}
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.DRAGON_BREAK_BLOCK, null);
});
}
@ -135,7 +135,7 @@ public class EnvironmentEvents implements Listener {
// 如果点燃事件没有玩家触发那么就是火焰蔓延
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getBlock().getLocation());
checkFlag(dom, Flag.FIRE_SPREAD, event);
}
@ -143,11 +143,11 @@ public class EnvironmentEvents implements Listener {
public void onLiquidFlowIn(BlockFromToEvent event) {
Location from = event.getBlock().getLocation();
Location to = event.getToBlock().getLocation();
DominionDTO dom_to = Cache.instance.getDominionByLoc(to);
DominionDTO dom_to = CacheImpl.instance.getDominionByLoc(to);
if (dom_to == null) {
return;
}
DominionDTO dom_from = Cache.instance.getDominionByLoc(from);
DominionDTO dom_from = CacheImpl.instance.getDominionByLoc(from);
if (dom_from != null) {
if (Objects.equals(dom_from.getId(), dom_to.getId())) {
return;
@ -162,7 +162,7 @@ public class EnvironmentEvents implements Listener {
if (entity instanceof Player) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
if (dom == null) {
return;
}
@ -182,7 +182,7 @@ public class EnvironmentEvents implements Listener {
return;
}
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.TNT_EXPLODE, null);
});
}
@ -194,7 +194,7 @@ public class EnvironmentEvents implements Listener {
if (harmer.getType() != EntityType.TNT_MINECART && harmer.getType() != EntityType.TNT) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.TNT_EXPLODE, event);
}
@ -210,7 +210,7 @@ public class EnvironmentEvents implements Listener {
if (block.getType() != FARMLAND) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRAMPLE, event);
}
@ -228,7 +228,7 @@ public class EnvironmentEvents implements Listener {
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRIG_PRESSURE_PROJ, event);
}
@ -241,7 +241,7 @@ public class EnvironmentEvents implements Listener {
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRIG_PRESSURE_MOB, event);
}
@ -254,7 +254,7 @@ public class EnvironmentEvents implements Listener {
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.TRIG_PRESSURE_DROP, event);
}
@ -264,7 +264,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.WITHER) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.WITHER_SPAWN, event);
}
@ -275,7 +275,7 @@ public class EnvironmentEvents implements Listener {
return;
}
event.blockList().removeIf(block -> {
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
return !checkFlag(dom, Flag.WITHER_SPAWN, null);
});
}
@ -286,7 +286,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.ENDERMAN) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ENDER_MAN, event);
}
@ -296,7 +296,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.ENDERMAN) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ENDER_MAN, event);
}
@ -306,7 +306,7 @@ public class EnvironmentEvents implements Listener {
if (!(entity instanceof Monster)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.MONSTER_SPAWN, event);
}
@ -316,7 +316,7 @@ public class EnvironmentEvents implements Listener {
if (!(entity instanceof Animals)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ANIMAL_SPAWN, event);
}
@ -326,7 +326,7 @@ public class EnvironmentEvents implements Listener {
if (entity.getType() != EntityType.VILLAGER) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.VILLAGER_SPAWN, event);
}
@ -335,8 +335,8 @@ public class EnvironmentEvents implements Listener {
public void onHopper(InventoryMoveItemEvent event) { // hopper_outside
Inventory hopper = event.getDestination();
Inventory inventory = event.getSource();
DominionDTO hopperDom = Cache.instance.getDominionByLoc(hopper.getLocation());
DominionDTO inventoryDom = Cache.instance.getDominionByLoc(inventory.getLocation());
DominionDTO hopperDom = CacheImpl.instance.getDominionByLoc(hopper.getLocation());
DominionDTO inventoryDom = CacheImpl.instance.getDominionByLoc(inventory.getLocation());
if (hopperDom == null && inventoryDom != null) {
checkFlag(inventoryDom, Flag.HOPPER_OUTSIDE, event);
}
@ -350,10 +350,10 @@ public class EnvironmentEvents implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onBlockPushedByPiston(BlockPistonExtendEvent event) { // piston_outside
Block piston = event.getBlock();
DominionDTO pistonDom = Cache.instance.getDominionByLoc(piston.getLocation());
DominionDTO pistonDom = CacheImpl.instance.getDominionByLoc(piston.getLocation());
BlockFace direction = event.getDirection();
Block endBlockAfterPush = piston.getRelative(direction, event.getBlocks().size() + 1);
DominionDTO endBlockDom = Cache.instance.getDominionByLoc(endBlockAfterPush.getLocation());
DominionDTO endBlockDom = CacheImpl.instance.getDominionByLoc(endBlockAfterPush.getLocation());
if (pistonDom != null && endBlockDom == null) {
checkFlag(pistonDom, Flag.PISTON_OUTSIDE, event);
}
@ -385,8 +385,8 @@ public class EnvironmentEvents implements Listener {
}
fallingBlockMap.remove(entity.getUniqueId());
Location locEnd = block.getLocation();
DominionDTO domStart = Cache.instance.getDominionByLoc(locStart);
DominionDTO domEnd = Cache.instance.getDominionByLoc(locEnd);
DominionDTO domStart = CacheImpl.instance.getDominionByLoc(locStart);
DominionDTO domEnd = CacheImpl.instance.getDominionByLoc(locEnd);
if (domEnd == null) {
return;
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_21;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import cn.lunadeer.dominion.dtos.PlayerDTO;
@ -45,7 +45,7 @@ public class PlayerEvents implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player bukkitPlayer = event.getPlayer();
Cache.instance.onPlayerQuit(bukkitPlayer);
CacheImpl.instance.onPlayerQuit(bukkitPlayer);
}
@EventHandler(priority = EventPriority.HIGHEST) // anchor
@ -54,7 +54,7 @@ public class PlayerEvents implements Listener {
if (!event.isAnchorSpawn()) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getRespawnLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getRespawnLocation());
if (!checkFlag(dom, Flag.ANCHOR, bukkitPlayer, null)) {
if (bukkitPlayer.getRespawnLocation() != null) {
event.setRespawnLocation(bukkitPlayer.getRespawnLocation());
@ -78,7 +78,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.ANCHOR, player, event);
}
@ -91,7 +91,7 @@ public class PlayerEvents implements Listener {
if (!(event.getEntity() instanceof Animals)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.ANIMAL_KILLING, bukkitPlayer, event);
}
@ -103,7 +103,7 @@ public class PlayerEvents implements Listener {
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
DominionDTO dom = CacheImpl.instance.getPlayerCurrentDominion(bukkitPlayer);
checkFlag(dom, Flag.ANVIL, bukkitPlayer, event);
}
@ -119,7 +119,7 @@ public class PlayerEvents implements Listener {
if (inv.getLocation() == null) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(inv.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(inv.getLocation());
checkFlag(dom, Flag.BEACON, bukkitPlayer, event);
}
@ -136,7 +136,7 @@ public class PlayerEvents implements Listener {
if (!(Tag.BEDS.isTagged(block.getType()))) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.BED, bukkitPlayer, event);
}
@ -148,7 +148,7 @@ public class PlayerEvents implements Listener {
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
return;
}
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
DominionDTO dom = CacheImpl.instance.getPlayerCurrentDominion(bukkitPlayer);
checkFlag(dom, Flag.BREW, bukkitPlayer, event);
}
@ -197,7 +197,7 @@ public class PlayerEvents implements Listener {
}
public static boolean onBreak(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominionByLoc(location);
DominionDTO dom = CacheImpl.instance.getDominionByLoc(location);
return checkFlag(dom, Flag.BREAK_BLOCK, player, null);
}
@ -214,7 +214,7 @@ public class PlayerEvents implements Listener {
if (!Tag.BUTTONS.isTagged(block.getType())) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.BUTTON, player, event);
}
@ -232,7 +232,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.CAKE, player, event);
}
@ -242,7 +242,7 @@ public class PlayerEvents implements Listener {
if (loc == null) {
dom = null;
} else {
dom = Cache.instance.getDominionByLoc(loc);
dom = CacheImpl.instance.getDominionByLoc(loc);
}
return checkFlag(dom, Flag.CONTAINER, player, null);
}
@ -368,7 +368,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getClickedBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getClickedBlock().getLocation());
checkFlag(dom, Flag.COMPARER, player, event);
}
@ -385,7 +385,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getClickedBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getClickedBlock().getLocation());
checkFlag(dom, Flag.DOOR, player, event);
}
@ -399,7 +399,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.DRAGON_EGG, player, event);
}
@ -410,7 +410,7 @@ public class PlayerEvents implements Listener {
if (!(entity instanceof Colorable)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.DYE, player, event);
}
@ -427,7 +427,7 @@ public class PlayerEvents implements Listener {
if (!(Tag.SIGNS.isTagged(block.getType()))) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.EDIT_SIGN, player, event);
}
@ -435,7 +435,7 @@ public class PlayerEvents implements Listener {
public void onSignEdit(SignChangeEvent event) {
Player player = event.getPlayer();
Block block = event.getBlock();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.EDIT_SIGN, player, event);
}
@ -448,7 +448,7 @@ public class PlayerEvents implements Listener {
if (projectile.getType() != EntityType.EGG) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(projectile.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(projectile.getLocation());
checkFlag(dom, Flag.EGG, player, event);
}
@ -473,7 +473,7 @@ public class PlayerEvents implements Listener {
if (projectile.getType() != EntityType.ENDER_PEARL) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(projectile.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(projectile.getLocation());
checkFlag(dom, Flag.ENDER_PEARL, player, event);
}
@ -487,7 +487,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getRightClicked().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getRightClicked().getLocation());
checkFlag(dom, Flag.FEED, player, event);
}
@ -513,7 +513,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.HARVEST, player, event);
}
@ -531,7 +531,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.HONEY, player, event);
}
@ -542,7 +542,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(caught.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(caught.getLocation());
checkFlag(dom, Flag.HOOK, player, event);
}
@ -570,7 +570,7 @@ public class PlayerEvents implements Listener {
if (player == null) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getBlock().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getBlock().getLocation());
checkFlag(dom, Flag.IGNITE, player, event);
}
@ -585,7 +585,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.ITEM_FRAME_INTERACTIVE, player, event);
}
@ -603,7 +603,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.LEVER, player, event);
}
@ -617,14 +617,14 @@ public class PlayerEvents implements Listener {
if (!(entity instanceof Monster)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.MONSTER_KILLING, bukkitPlayer, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // move
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
DominionDTO dom = CacheImpl.instance.getPlayerCurrentDominion(player);
if (!checkFlag(dom, Flag.MOVE, player, null)) {
Location to = player.getLocation();
int x1 = Math.abs(to.getBlockX() - dom.getX1());
@ -674,7 +674,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.NOTE_BLOCK, player, event);
}
@ -726,7 +726,7 @@ public class PlayerEvents implements Listener {
}
public static boolean onPlace(Player player, Location location) {
DominionDTO dom = Cache.instance.getDominionByLoc(location);
DominionDTO dom = CacheImpl.instance.getDominionByLoc(location);
return checkFlag(dom, Flag.PLACE, player, null);
}
@ -743,7 +743,7 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.PRESSURE, player, event);
}
@ -752,7 +752,7 @@ public class PlayerEvents implements Listener {
if (!(event.getEntity() instanceof Player player)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getMount().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getMount().getLocation());
checkFlag(dom, Flag.RIDING, player, event);
}
@ -767,14 +767,14 @@ public class PlayerEvents implements Listener {
return;
}
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(block.getLocation());
checkFlag(dom, Flag.REPEATER, player, event);
}
@EventHandler(priority = EventPriority.HIGHEST) // shear
public void onShear(PlayerShearEntityEvent event) {
Player player = event.getPlayer();
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.SHEAR, player, event);
}
@ -787,7 +787,7 @@ public class PlayerEvents implements Listener {
if (projectile.getType() == EntityType.ENDER_PEARL || projectile.getType() == EntityType.EGG) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(projectile.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(projectile.getLocation());
checkFlag(dom, Flag.SHOOT, player, event);
}
@ -800,7 +800,7 @@ public class PlayerEvents implements Listener {
if (!(windCharge.getShooter() instanceof Player player)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(windCharge.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(windCharge.getLocation());
checkFlag(dom, Flag.SHOOT, player, event);
}
@ -821,7 +821,7 @@ public class PlayerEvents implements Listener {
if (!(event.getAttacker() instanceof Player player)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getVehicle().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getVehicle().getLocation());
checkFlag(dom, Flag.VEHICLE_DESTROY, player, event);
}
@ -835,7 +835,7 @@ public class PlayerEvents implements Listener {
if (!(entity instanceof Vehicle)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(entity.getLocation());
checkFlag(dom, Flag.VEHICLE_SPAWN, player, event);
}
@ -847,7 +847,7 @@ public class PlayerEvents implements Listener {
if (!(event.getEntity() instanceof Villager)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getEntity().getLocation());
checkFlag(dom, Flag.VILLAGER_KILLING, player, event);
}
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_21.special;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
@ -21,7 +21,7 @@ public class Paper implements Listener {
if (!(entity instanceof Monster)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getLoc());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getLoc());
checkFlag(dom, Flag.MONSTER_MOVE, event);
}
@ -31,7 +31,7 @@ public class Paper implements Listener {
if (!(entity instanceof Animals)) {
return;
}
DominionDTO dom = Cache.instance.getDominionByLoc(event.getLoc());
DominionDTO dom = CacheImpl.instance.getDominionByLoc(event.getLoc());
checkFlag(dom, Flag.ANIMAL_MOVE, event);
}

View File

@ -1,6 +1,6 @@
package cn.lunadeer.dominion.events_v1_21.special;
import cn.lunadeer.dominion.Cache;
import cn.lunadeer.dominion.CacheImpl;
import cn.lunadeer.dominion.Dominion;
import cn.lunadeer.dominion.dtos.DominionDTO;
import cn.lunadeer.dominion.dtos.Flag;
@ -33,7 +33,7 @@ public class Spigot implements Listener {
} else {
Location lastLoc = entityMap.get(entity.getUniqueId());
Location currentLoc = entity.getLocation();
DominionDTO dom = Cache.instance.getDominionByLoc(currentLoc);
DominionDTO dom = CacheImpl.instance.getDominionByLoc(currentLoc);
if (!checkFlag(dom, Flag.ANIMAL_MOVE, null) && entity instanceof Animals) {
entity.teleport(lastLoc);
} else if (!checkFlag(dom, Flag.MONSTER_MOVE, null) && entity instanceof Monster) {