mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2025-02-04 20:49:34 +08:00
实现了基础功能的测试
This commit is contained in:
parent
517426304a
commit
f6c9cb53ee
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>cn.lunadeer</groupId>
|
||||
<artifactId>Dominion</artifactId>
|
||||
<version>1.0</version>
|
||||
<version>1.0-beta</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Dominion</name>
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.lunadeer.dominion;
|
||||
|
||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||
import cn.lunadeer.dominion.utils.XLogger;
|
||||
import com.flowpowered.math.vector.Vector2d;
|
||||
import de.bluecolored.bluemap.api.BlueMapAPI;
|
||||
import de.bluecolored.bluemap.api.BlueMapMap;
|
||||
@ -19,46 +20,52 @@ public class BlueMapConnect {
|
||||
if (!Dominion.config.getBlueMap()) {
|
||||
return;
|
||||
}
|
||||
BlueMapAPI.getInstance().ifPresent(api -> {
|
||||
for (Map.Entry<String, List<DominionDTO>> world_dominions : Cache.instance.getWorldDominions().entrySet()) {
|
||||
api.getWorld(world_dominions.getKey()).ifPresent(world -> {
|
||||
MarkerSet markerSet = MarkerSet.builder()
|
||||
.label("Dominion")
|
||||
.build();
|
||||
|
||||
for (DominionDTO dominion : world_dominions.getValue()) {
|
||||
Collection<Vector2d> vectors = new ArrayList<>();
|
||||
vectors.add(new Vector2d(dominion.getX1(), dominion.getZ1()));
|
||||
vectors.add(new Vector2d(dominion.getX2(), dominion.getZ1()));
|
||||
vectors.add(new Vector2d(dominion.getX2(), dominion.getZ2()));
|
||||
vectors.add(new Vector2d(dominion.getX1(), dominion.getZ2()));
|
||||
Shape shape = new Shape(vectors);
|
||||
double x = vectors.iterator().next().getX();
|
||||
double z = vectors.iterator().next().getY();
|
||||
double y = dominion.getY1();
|
||||
|
||||
Color line = new Color(0, 191, 255, 0.8F);
|
||||
Color fill = new Color(0, 191, 255, 0.2F);
|
||||
if (dominion.getParentDomId() != -1) { // for children dominion
|
||||
line = new Color(240, 230, 140, 0.8F);
|
||||
fill = new Color(240, 230, 140, 0.2F);
|
||||
}
|
||||
ExtrudeMarker marker = ExtrudeMarker.builder()
|
||||
.label(dominion.getName())
|
||||
.position(x, y, z)
|
||||
.shape(shape, dominion.getY1(), dominion.getY2())
|
||||
.lineColor(line)
|
||||
.fillColor(fill)
|
||||
try {
|
||||
BlueMapAPI.getInstance().ifPresent(api -> {
|
||||
for (Map.Entry<String, List<Integer>> world_dominions : Cache.instance.getWorldDominions().entrySet()) {
|
||||
api.getWorld(world_dominions.getKey()).ifPresent(world -> {
|
||||
MarkerSet markerSet = MarkerSet.builder()
|
||||
.label("Dominion")
|
||||
.build();
|
||||
markerSet.getMarkers()
|
||||
.put(dominion.getName(), marker);
|
||||
}
|
||||
|
||||
for (BlueMapMap map : world.getMaps()) {
|
||||
map.getMarkerSets().put(world_dominions.getKey() + "-" + markerSet.getLabel(), markerSet);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
for (Integer id : world_dominions.getValue()) {
|
||||
DominionDTO dominion = Cache.instance.getDominion(id);
|
||||
Collection<Vector2d> vectors = new ArrayList<>();
|
||||
vectors.add(new Vector2d(dominion.getX1(), dominion.getZ1()));
|
||||
vectors.add(new Vector2d(dominion.getX2(), dominion.getZ1()));
|
||||
vectors.add(new Vector2d(dominion.getX2(), dominion.getZ2()));
|
||||
vectors.add(new Vector2d(dominion.getX1(), dominion.getZ2()));
|
||||
Shape shape = new Shape(vectors);
|
||||
double x = vectors.iterator().next().getX();
|
||||
double z = vectors.iterator().next().getY();
|
||||
double y = dominion.getY1();
|
||||
|
||||
Color line = new Color(0, 191, 255, 0.8F);
|
||||
Color fill = new Color(0, 191, 255, 0.2F);
|
||||
if (dominion.getParentDomId() != -1) { // for children dominion
|
||||
line = new Color(240, 230, 140, 0.8F);
|
||||
fill = new Color(240, 230, 140, 0.2F);
|
||||
}
|
||||
ExtrudeMarker marker = ExtrudeMarker.builder()
|
||||
.label(dominion.getName())
|
||||
.position(x, y, z)
|
||||
.shape(shape, dominion.getY1(), dominion.getY2())
|
||||
.lineColor(line)
|
||||
.fillColor(fill)
|
||||
.build();
|
||||
markerSet.getMarkers()
|
||||
.put(dominion.getName(), marker);
|
||||
}
|
||||
|
||||
for (BlueMapMap map : world.getMaps()) {
|
||||
map.getMarkerSets().put(world_dominions.getKey() + "-" + markerSet.getLabel(), markerSet);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (NoClassDefFoundError e) {
|
||||
XLogger.warn("无法连接 BlueMap 插件,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能以避免下方的报错。");
|
||||
XLogger.err(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,13 +22,15 @@ public class Cache {
|
||||
* 从数据库加载所有领地
|
||||
*/
|
||||
public void loadDominions() {
|
||||
id_dominions = new HashMap<>();
|
||||
world_dominions = new HashMap<>();
|
||||
List<DominionDTO> dominions = DominionDTO.selectAll();
|
||||
for (DominionDTO d : dominions) {
|
||||
id_dominions.put(d.getId(), d);
|
||||
if (!world_dominions.containsKey(d.getWorld())) {
|
||||
world_dominions.put(d.getWorld(), new ArrayList<>());
|
||||
}
|
||||
world_dominions.get(d.getWorld()).add(d);
|
||||
world_dominions.get(d.getWorld()).add(d.getId());
|
||||
}
|
||||
BlueMapConnect.render();
|
||||
}
|
||||
@ -37,7 +39,6 @@ public class Cache {
|
||||
* 从数据库加载所有玩家特权
|
||||
*/
|
||||
public void loadPlayerPrivileges() {
|
||||
player_current_dominion = new HashMap<>();
|
||||
List<PlayerPrivilegeDTO> all_privileges = PlayerPrivilegeDTO.selectAll();
|
||||
if (all_privileges == null) {
|
||||
XLogger.err("加载玩家特权失败");
|
||||
@ -63,13 +64,12 @@ public class Cache {
|
||||
* @return 玩家当前所在领地
|
||||
*/
|
||||
public DominionDTO getPlayerCurrentDominion(Player player) {
|
||||
DominionDTO dominion = player_current_dominion.get(player.getUniqueId());
|
||||
Integer dominion_id = player_current_dominion.get(player.getUniqueId());
|
||||
DominionDTO dominion = id_dominions.get(dominion_id);
|
||||
if (dominion != null) {
|
||||
if (!isInDominion(dominion, player)) {
|
||||
// glow
|
||||
if (player.isGlowing()) {
|
||||
player.setGlowing(false);
|
||||
}
|
||||
player.setGlowing(false);
|
||||
Notification.info(player, "您已离开领地:" + dominion.getName());
|
||||
Notification.info(player, dominion.getLeaveMessage());
|
||||
player_current_dominion.put(player.getUniqueId(), null);
|
||||
@ -78,10 +78,11 @@ public class Cache {
|
||||
}
|
||||
if (dominion == null) {
|
||||
String world = player.getWorld().getName();
|
||||
List<DominionDTO> dominions = world_dominions.get(world);
|
||||
if (dominions == null) return null;
|
||||
List<Integer> dominions_id = world_dominions.get(world);
|
||||
if (dominions_id == null) return null;
|
||||
List<DominionDTO> in_dominions = new ArrayList<>();
|
||||
for (DominionDTO d : dominions) {
|
||||
for (Integer id : dominions_id) {
|
||||
DominionDTO d = id_dominions.get(id);
|
||||
if (isInDominion(d, player)) {
|
||||
in_dominions.add(d);
|
||||
}
|
||||
@ -89,20 +90,16 @@ public class Cache {
|
||||
if (in_dominions.size() == 0) return null;
|
||||
in_dominions.sort(Comparator.comparingInt(DominionDTO::getId));
|
||||
dominion = in_dominions.get(in_dominions.size() - 1);
|
||||
player_current_dominion.put(player.getUniqueId(), dominion);
|
||||
player_current_dominion.put(player.getUniqueId(), dominion.getId());
|
||||
// glow
|
||||
PlayerPrivilegeDTO privilege = getPlayerPrivilege(player, dominion);
|
||||
if (privilege != null) {
|
||||
if (privilege.getGlow()) {
|
||||
if (player.isGlowing()) {
|
||||
player.setGlowing(true);
|
||||
}
|
||||
player.setGlowing(true);
|
||||
}
|
||||
} else {
|
||||
if (dominion.getGlow()) {
|
||||
if (player.isGlowing()) {
|
||||
player.setGlowing(true);
|
||||
}
|
||||
player.setGlowing(true);
|
||||
}
|
||||
}
|
||||
Notification.info(player, "您正在进入领地:" + dominion.getName());
|
||||
@ -113,10 +110,11 @@ public class Cache {
|
||||
|
||||
public DominionDTO getDominion(Location loc) {
|
||||
String world = loc.getWorld().getName();
|
||||
List<DominionDTO> dominions = world_dominions.get(world);
|
||||
if (dominions == null) return null;
|
||||
List<Integer> dominions_id = world_dominions.get(world);
|
||||
if (dominions_id == null) return null;
|
||||
List<DominionDTO> in_dominions = new ArrayList<>();
|
||||
for (DominionDTO d : dominions) {
|
||||
for (Integer id : dominions_id) {
|
||||
DominionDTO d = id_dominions.get(id);
|
||||
if (isInDominion(d, loc.getX(), loc.getY(), loc.getZ())) {
|
||||
in_dominions.add(d);
|
||||
}
|
||||
@ -156,12 +154,17 @@ public class Cache {
|
||||
z >= dominion.getZ1() && z <= dominion.getZ2();
|
||||
}
|
||||
|
||||
public Map<String, List<DominionDTO>> getWorldDominions() {
|
||||
public Map<String, List<Integer>> getWorldDominions() {
|
||||
return world_dominions;
|
||||
}
|
||||
|
||||
public DominionDTO getDominion(Integer id) {
|
||||
return id_dominions.get(id);
|
||||
}
|
||||
|
||||
public static Cache instance;
|
||||
private Map<String, List<DominionDTO>> world_dominions; // 所有领地
|
||||
private Map<Integer, DominionDTO> id_dominions;
|
||||
private Map<String, List<Integer>> world_dominions; // 所有领地
|
||||
private Map<UUID, Map<Integer, PlayerPrivilegeDTO>> player_uuid_to_privilege; // 玩家所有的特权
|
||||
private Map<UUID, DominionDTO> player_current_dominion; // 玩家当前所在领地
|
||||
private Map<UUID, Integer> player_current_dominion; // 玩家当前所在领地
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ public class FlagsController {
|
||||
case "hook": return dominion.setHook(value);
|
||||
case "ignite": return dominion.setIgnite(value);
|
||||
case "lever": return dominion.setLever(value);
|
||||
case "mob_killing": return dominion.setMonsterKilling(value);
|
||||
case "monster_killing": return dominion.setMonsterKilling(value);
|
||||
case "move": return dominion.setMove(value);
|
||||
case "place": return dominion.setPlace(value);
|
||||
case "pressure": return dominion.setPressure(value);
|
||||
|
@ -161,7 +161,7 @@ public class PrivilegeController {
|
||||
case "ignite":
|
||||
privilege.setIgnite(value);
|
||||
break;
|
||||
case "mob_killing":
|
||||
case "monster_killing":
|
||||
privilege.setMonsterKilling(value);
|
||||
break;
|
||||
case "move":
|
||||
|
@ -7,6 +7,9 @@ import org.bukkit.entity.Player;
|
||||
|
||||
public class Apis {
|
||||
public static boolean hasPermission(Player player, DominionDTO dom) {
|
||||
if (player.isOp()) {
|
||||
return true;
|
||||
}
|
||||
if (dom == null) {
|
||||
return true;
|
||||
}
|
||||
|
@ -7,11 +7,13 @@ import cn.lunadeer.dominion.dtos.PlayerPrivilegeDTO;
|
||||
import cn.lunadeer.dominion.utils.Notification;
|
||||
import io.papermc.paper.event.entity.EntityDyeEvent;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockDropItemEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
@ -19,6 +21,7 @@ import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.event.vehicle.VehicleDestroyEvent;
|
||||
import org.spigotmc.event.entity.EntityMountEvent;
|
||||
|
||||
public class PlayerEvents implements Listener {
|
||||
@ -348,7 +351,7 @@ public class PlayerEvents implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // craft
|
||||
public void onCraft(InventoryOpenEvent event) {
|
||||
if (event.getInventory().getType() != InventoryType.CRAFTING) {
|
||||
if (event.getInventory().getType() != InventoryType.WORKBENCH) {
|
||||
return;
|
||||
}
|
||||
if (!(event.getPlayer() instanceof Player)) {
|
||||
@ -474,11 +477,10 @@ public class PlayerEvents implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // dye
|
||||
public void dyeEvent(EntityDyeEvent event) {
|
||||
Entity entity = event.getEntity();
|
||||
if (!(entity instanceof Player)) {
|
||||
Player player = event.getPlayer();
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
Player player = (Player) entity;
|
||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||
if (dom == null) {
|
||||
return;
|
||||
@ -618,7 +620,26 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // harvest
|
||||
public void onHarvest(PlayerHarvestBlockEvent event) {
|
||||
public void onHarvest(BlockBreakEvent event) {
|
||||
Block block = event.getBlock();
|
||||
if (block.getType() != Material.COCOA &&
|
||||
block.getType() != Material.WHEAT &&
|
||||
block.getType() != Material.CARROTS &&
|
||||
block.getType() != Material.POTATOES &&
|
||||
block.getType() != Material.BEETROOTS &&
|
||||
block.getType() != Material.NETHER_WART &&
|
||||
block.getType() != Material.SWEET_BERRY_BUSH &&
|
||||
block.getType() != Material.MELON &&
|
||||
block.getType() != Material.PUMPKIN &&
|
||||
block.getType() != Material.SUGAR_CANE &&
|
||||
block.getType() != Material.BAMBOO &&
|
||||
block.getType() != Material.CACTUS &&
|
||||
block.getType() != Material.CHORUS_PLANT &&
|
||||
block.getType() != Material.CHORUS_FLOWER &&
|
||||
block.getType() != Material.KELP &&
|
||||
block.getType() != Material.KELP_PLANT) {
|
||||
return;
|
||||
}
|
||||
Player player = event.getPlayer();
|
||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||
if (dom == null) {
|
||||
@ -720,6 +741,7 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
}
|
||||
Notification.error(player, "你没有点火的权限");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // lever
|
||||
@ -785,7 +807,7 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // move
|
||||
public void onPlayerMove(PlayerMoveEvent event){
|
||||
public void onPlayerMove(PlayerMoveEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||
if (dom == null) {
|
||||
@ -809,7 +831,7 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // place
|
||||
public void onPlace(BlockPlaceEvent event){
|
||||
public void onPlace(BlockPlaceEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||
if (dom == null) {
|
||||
@ -829,6 +851,7 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
}
|
||||
Notification.error(player, "你没有放置方块的权限");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // pressure
|
||||
@ -955,6 +978,7 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
}
|
||||
Notification.error(player, "你没有剪羊毛的权限");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // shoot
|
||||
@ -962,7 +986,9 @@ public class PlayerEvents implements Listener {
|
||||
if (!(event.getEntity().getShooter() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
if (event.getEntity().getType() != EntityType.ARROW && event.getEntity().getType() != EntityType.SNOWBALL) {
|
||||
if (event.getEntity().getType() != EntityType.ARROW &&
|
||||
event.getEntity().getType() != EntityType.SNOWBALL &&
|
||||
event.getEntity().getType() != EntityType.TRIDENT) {
|
||||
return;
|
||||
}
|
||||
Player player = (Player) event.getEntity().getShooter();
|
||||
@ -983,7 +1009,7 @@ public class PlayerEvents implements Listener {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Notification.error(player, "你没有发射弓箭或雪球的权限");
|
||||
Notification.error(player, "你没有发射弓箭、三叉戟或雪球的权限");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@ -1018,14 +1044,11 @@ public class PlayerEvents implements Listener {
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST) // vehicle_destroy
|
||||
public void onVehicleDestroy(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Player)) {
|
||||
public void onVehicleDestroy(VehicleDestroyEvent event) {
|
||||
if (!(event.getAttacker() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
if (!(event.getEntity() instanceof Vehicle)) {
|
||||
return;
|
||||
}
|
||||
Player player = (Player) event.getDamager();
|
||||
Player player = (Player) event.getAttacker();
|
||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||
if (dom == null) {
|
||||
return;
|
||||
|
@ -140,11 +140,11 @@ public class DominionFlagInfo {
|
||||
if (dominion.getCreeperExplode()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set creeper_explode false " + dominion.getName() + " " + page))
|
||||
.append("苦力怕爆炸"));
|
||||
.append("苦力怕/凋零头颅爆炸"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set creeper_explode true " + dominion.getName() + " " + page))
|
||||
.append("苦力怕爆炸"));
|
||||
.append("苦力怕/凋零头颅爆炸"));
|
||||
}
|
||||
if (dominion.getComparer()){
|
||||
view.add(Line.create()
|
||||
@ -347,11 +347,11 @@ public class DominionFlagInfo {
|
||||
if (dominion.getShoot()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set shoot false " + dominion.getName() + " " + page))
|
||||
.append("射箭/雪球"));
|
||||
.append("射箭/雪球/三叉戟"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set shoot true " + dominion.getName() + " " + page))
|
||||
.append("射箭/雪球"));
|
||||
.append("射箭/雪球/三叉戟"));
|
||||
}
|
||||
if (dominion.getTntExplode()) {
|
||||
view.add(Line.create()
|
||||
|
@ -335,11 +335,11 @@ public class PrivilegeInfo {
|
||||
if (privilege.getShoot()) {
|
||||
view.add(Line.create()
|
||||
.append(Button.createGreen("☑", "/dominion set_privilege " + playerName + " shoot false " + dominion.getName() + " " + page))
|
||||
.append("射箭/雪球"));
|
||||
.append("射箭/雪球/三叉戟"));
|
||||
} else {
|
||||
view.add(Line.create()
|
||||
.append(Button.createRed("☐", "/dominion set_privilege " + playerName + " shoot true " + dominion.getName() + " " + page))
|
||||
.append("射箭/雪球"));
|
||||
.append("射箭/雪球/三叉戟"));
|
||||
}
|
||||
if (privilege.getTrade()) {
|
||||
view.add(Line.create()
|
||||
|
Loading…
Reference in New Issue
Block a user