This commit is contained in:
张宇衡 2023-06-02 10:13:59 +08:00
commit 1fb5691b32
16 changed files with 899 additions and 0 deletions

113
.gitignore vendored Normal file
View File

@ -0,0 +1,113 @@
# User-specific stuff
.idea/
*.iml
*.ipr
*.iws
# IntelliJ
out/
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
.flattened-pom.xml
# Common working directory
run/

76
pom.xml Normal file
View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>site.deercloud</groupId>
<artifactId>LiteWorldEdit</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>LiteWorldEdit</name>
<description>生存用简易创世神。</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<url>https://blog.deercloud.site</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>spigotmc-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.17-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,188 @@
package site.deercloud.liteworldedit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import site.deercloud.liteworldedit.JobGenerator.Empty;
import site.deercloud.liteworldedit.JobGenerator.Fill;
import site.deercloud.liteworldedit.Jobs.Job;
import site.deercloud.liteworldedit.Jobs.Place;
import site.deercloud.liteworldedit.Jobs.Remove;
import site.deercloud.liteworldedit.Managers.Point;
import java.util.*;
public class Commands implements TabExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length == 0) {
sender.sendMessage(ChatColor.GREEN + "LiteWorldEdit by DeerCloud");
sender.sendMessage(ChatColor.GREEN + "使用 /lwe help 查看帮助。");
return true;
}
if (Objects.equals(args[0], "point") || Objects.equals(args[0], "p")) {
if (sender instanceof Player) {
Player player = (Player) sender;
if (args.length == 5) {
try {
Integer index = Integer.parseInt(args[1]);
int x = Integer.parseInt(args[2]);
int y = Integer.parseInt(args[3]);
int z = Integer.parseInt(args[4]);
// 选择的点不允许超过128格范围
if (!Job.in_range(player, new Location(player.getWorld(), x, y, z))) {
return true;
}
Point point = new Point(x, y, z, player);
LiteWorldEdit.instance.getCache().add_point(player, index, point);
sender.sendMessage("" + index + " 已设置为 " + x + ", " + y + ", " + z + "");
} catch (NumberFormatException e) {
sender.sendMessage("参数错误。");
}
} else {
sender.sendMessage("参数错误。");
}
} else {
sender.sendMessage("该命令只能由玩家执行。");
}
} else if (Objects.equals(args[0], "points")) {
if (sender instanceof Player) {
Player player = (Player) sender;
Map<Integer, Point> points = LiteWorldEdit.instance.getCache().get_points(player);
if (points != null) {
sender.sendMessage("你创建的点:");
for (Map.Entry<Integer, Point> entry : points.entrySet()) {
Point point = entry.getValue();
sender.sendMessage(entry.getKey() + ": " + point.x + ", " + point.y + ", " + point.z);
}
} else {
sender.sendMessage("你没有设置任何点。");
}
} else {
sender.sendMessage("该命令只能由玩家执行。");
}
} else if (Objects.equals(args[0], "place")) {
if (sender instanceof Player) {
Player player = (Player) sender;
if (args.length == 3) {
try {
Integer indexA = Integer.parseInt(args[1]);
Integer indexB = Integer.parseInt(args[2]);
Map<Integer, Point> points = LiteWorldEdit.instance.getCache().get_points(player);
if (points == null) {
sender.sendMessage("你没有设置任何点。");
return true;
}
Point pointA = points.get(indexA);
Point pointB = points.get(indexB);
if (pointA == null || pointB == null) {
sender.sendMessage("点不存在。");
return true;
}
if (out_of_region(pointA, pointB)) {
sender.sendMessage("选择的区域不可以超过 " + LiteWorldEdit.instance.getConfigMgr().getXMax() + "x" + LiteWorldEdit.instance.getConfigMgr().getYMax() + "x" + LiteWorldEdit.instance.getConfigMgr().getZMax() + "");
return true;
}
ItemStack items_in_hand = player.getInventory().getItemInMainHand();
if (!items_in_hand.getType().isBlock() || items_in_hand.getType() == Material.AIR) {
sender.sendMessage("你手上没有方块。");
return true;
}
Material material = Material.getMaterial(items_in_hand.getType().name());
Fill.fill(player, player.getWorld(), pointA, pointB, material);
sender.sendMessage("已添加任务。");
return true;
} catch (NumberFormatException e) {
sender.sendMessage("参数错误。");
}
} else {
sender.sendMessage("参数错误。");
}
} else {
sender.sendMessage("该命令只能由玩家执行。");
}
} else if (Objects.equals(args[0], "break")) {
if (sender instanceof Player) {
Player player = (Player) sender;
if (args.length == 3) {
try {
Integer indexA = Integer.parseInt(args[1]);
Integer indexB = Integer.parseInt(args[2]);
Map<Integer, Point> points = LiteWorldEdit.instance.getCache().get_points(player);
if (points == null) {
sender.sendMessage("你没有设置任何点。");
return true;
}
Point pointA = points.get(indexA);
Point pointB = points.get(indexB);
if (pointA != null && pointB != null) {
if (out_of_region(pointA, pointB)) {
sender.sendMessage("选择的区域不可以超过 " + LiteWorldEdit.instance.getConfigMgr().getXMax() + "x" + LiteWorldEdit.instance.getConfigMgr().getYMax() + "x" + LiteWorldEdit.instance.getConfigMgr().getZMax() + "");
return true;
}
Empty.empty(player, player.getWorld(), pointA, pointB);
sender.sendMessage("已添加任务。");
} else {
sender.sendMessage("点不存在。");
}
} catch (NumberFormatException e) {
sender.sendMessage("参数错误。");
}
} else {
sender.sendMessage("参数错误。");
}
} else {
sender.sendMessage("该命令只能由玩家执行。");
}
} else if (Objects.equals(args[0], "help")) {
print_help(sender);
} else {
sender.sendMessage("参数错误。");
}
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
if (args.length == 1) {
return Arrays.asList("point", "p", "points", "place", "break", "help");
} else if (args.length == 2) {
switch (args[1]) {
case "point":
return Collections.singletonList("[点序号(整数)] [x] [y] [z]");
case "place":
return Collections.singletonList("[点序号A] [点序号B] (需要手持被放置的方块)");
case "break":
return Collections.singletonList("[点序号A] [点序号B] (需要拥有下届合金锄)");
}
}
return Collections.emptyList();
}
public void print_help(CommandSender sender) {
sender.sendMessage(ChatColor.GREEN + "LiteWorldEdit 帮助");
sender.sendMessage(ChatColor.GREEN + "/lwe point [点序号(整数)] [x] [y] [z] - 创建点");
sender.sendMessage(ChatColor.GREEN + "/lwe points - 查看所有点");
sender.sendMessage(ChatColor.GREEN + "/lwe place [点序号A] [点序号B] - (在AB点对角线间放置方块 - 需要手持被放置的方块)");
sender.sendMessage(ChatColor.GREEN + "/lwe break [点序号A] [点序号B] - (破坏AB点对角线间方块 - 需要拥有下届合金镐)");
sender.sendMessage(ChatColor.GREEN + "/lwe help - 查看帮助");
}
static public boolean out_of_region(Point A, Point B) {
int minX = Math.min(A.x, B.x);
int minY = Math.min(A.y, B.y);
int minZ = Math.min(A.z, B.z);
int maxX = Math.max(A.x, B.x);
int maxY = Math.max(A.y, B.y);
int maxZ = Math.max(A.z, B.z);
return !(maxX - minX <= LiteWorldEdit.instance.getConfigMgr().getXMax() && maxY - minY <= LiteWorldEdit.instance.getConfigMgr().getYMax() && maxZ - minZ <= LiteWorldEdit.instance.getConfigMgr().getZMax());
}
}

View File

@ -0,0 +1,18 @@
package site.deercloud.liteworldedit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.EventListener;
public class Events implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
LiteWorldEdit.instance.getCache().delete_player_points(event.getPlayer());
LiteWorldEdit.instance.getCache().delete_player_jobs(event.getPlayer());
}
}

View File

@ -0,0 +1,25 @@
package site.deercloud.liteworldedit.JobGenerator;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import site.deercloud.liteworldedit.Jobs.Remove;
import site.deercloud.liteworldedit.LiteWorldEdit;
import site.deercloud.liteworldedit.Managers.Point;
public class Empty {
public static void empty(Player player, World world, Point p1, Point p2) {
// 经验扣除与校验
for (int x = Math.min(p1.x, p2.x); x <= Math.max(p1.x, p2.x); x++) {
for (int y = Math.min(p1.y, p2.y); y <= Math.max(p1.y, p2.y); y++) {
for (int z = Math.min(p1.z, p2.z); z <= Math.max(p1.z, p2.z); z++) {
Location location = new Location(world, (double) x, (double) y, (double) z);
Remove remove_job = new Remove(location, player);
LiteWorldEdit.instance.getCache().add_job(player, remove_job);
}
}
}
}
}

View File

@ -0,0 +1,27 @@
package site.deercloud.liteworldedit.JobGenerator;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import site.deercloud.liteworldedit.Jobs.Place;
import site.deercloud.liteworldedit.LiteWorldEdit;
import site.deercloud.liteworldedit.Managers.Point;
public class Fill {
public static void fill(Player player, World world, Point p1, Point p2, Material block) {
for (int x = Math.min(p1.x, p2.x); x <= Math.max(p1.x, p2.x); x++) {
for (int y = Math.max(p1.y, p2.y); y >= Math.min(p1.y, p2.y); y--) {
for (int z = Math.min(p1.z, p2.z); z <= Math.max(p1.z, p2.z); z++) {
Location location = new Location(world, (double) x, (double) y, (double) z);
Place place_job = new Place(location, player, block);
LiteWorldEdit.instance.getCache().add_job(player, place_job);
}
}
}
}
}

View File

@ -0,0 +1,51 @@
package site.deercloud.liteworldedit.Jobs;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
enum JobErrCode {
OK, // 无错误
NO_PERMISSION, // 没有权限
NO_PICKAXE, // 没有下界合金镐
NOT_ENOUGH_DURATION, // 耐久不足
NOT_ENOUGH_ITEMS, // 物品不足
OUT_OF_RANGE, // 超出距离
NOT_AIR_BLOCK, // 不是空气方块
NO_BREAKABLE, // 不可破坏
}
public class Job {
protected World _world;
protected Location _location;
protected Long _time;
protected Player _creator;
protected Inventory _inventory;
public Long get_time() {
return _time;
}
public Player get_creator() {
return _creator;
}
public JobErrCode Do() {
// nothing
return JobErrCode.OK;
}
static public Boolean in_range(Player player, Location location) {
if (player.getWorld() != location.getWorld()) {
return false;
}
if (player.getLocation().distance(location) > 128) {
player.sendMessage(ChatColor.RED + "不允许超过128格操作");
return false;
}
return true;
}
}

View File

@ -0,0 +1,64 @@
package site.deercloud.liteworldedit.Jobs;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import site.deercloud.liteworldedit.LoggerX;
public class Place extends Job {
private final Material _block;
public Place(Location location, Player player, Material material) {
_world = player.getWorld();
_location = location;
_creator = player;
_time = System.currentTimeMillis();
_block = material;
_inventory = player.getInventory();
}
@Override
public JobErrCode Do() {
// 超出距离
if (!in_range(_creator, _location)) {
return JobErrCode.OUT_OF_RANGE;
}
// 跳过非空气方块
Block raw_block = _world.getBlockAt(_location);
if (!raw_block.isEmpty()) {
return JobErrCode.NOT_AIR_BLOCK;
}
// 获取到玩家物品中材料的第一个堆叠
int stack_index = _inventory.first(_block);
if (stack_index == -1) {
return JobErrCode.NOT_ENOUGH_ITEMS;
}
ItemStack stack = _inventory.getItem(stack_index);
if (stack == null) {
return JobErrCode.NOT_ENOUGH_ITEMS;
}
Block block = _world.getBlockAt(raw_block.getX() + 1, raw_block.getY(), raw_block.getZ());
// 校验是否可以放置
BlockPlaceEvent event = new BlockPlaceEvent(
block,
raw_block.getState(),
block,
stack,
_creator,
true,
EquipmentSlot.valueOf("HAND"));
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
raw_block.setType(_block);
stack.setAmount(stack.getAmount() - 1);
return JobErrCode.OK;
} else {
return JobErrCode.NO_PERMISSION;
}
}
}

View File

@ -0,0 +1,79 @@
package site.deercloud.liteworldedit.Jobs;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import site.deercloud.liteworldedit.LoggerX;
public class Remove extends Job {
public Remove(Location location, Player player) {
_world = player.getWorld();
_location = location;
_creator = player;
_time = System.currentTimeMillis();
_inventory = player.getInventory();
}
@Override
public JobErrCode Do() {
// 超出距离
if (!in_range(_creator, _location)) {
return JobErrCode.OUT_OF_RANGE;
}
Block raw_block = _world.getBlockAt(_location);
// 跳过不破坏的对象
if (raw_block.isLiquid() || raw_block.isEmpty() || raw_block.getType().getHardness() == -1) {
return JobErrCode.NO_BREAKABLE;
}
// 获取玩家背包中的下届合金镐
int stack_index = _inventory.first(Material.NETHERITE_PICKAXE);
if (stack_index == -1) {
return JobErrCode.NO_PICKAXE;
}
ItemStack pickaxe = _inventory.getItem(stack_index);
if (pickaxe == null) {
LoggerX.debug("获取到的下界合金镐为空!");
return JobErrCode.NO_PICKAXE;
}
ItemMeta pickaxe_meta = pickaxe.getItemMeta();
if (pickaxe_meta == null) {
LoggerX.debug("获取到的下界合金镐元数据为空!");
return JobErrCode.NO_PICKAXE;
}
if (!(pickaxe_meta instanceof Damageable)) {
LoggerX.debug("无法转换为Damageable");
return JobErrCode.NO_PICKAXE;
}
// 如果耐久小于10提示玩家
Damageable damageable = (Damageable) pickaxe_meta;
if (damageable.getDamage() >= 2031 - 10) {
LoggerX.err(_creator, "下界合金镐耐久太低!");
return JobErrCode.NOT_ENOUGH_DURATION;
}
BlockBreakEvent event = new BlockBreakEvent(raw_block, _creator);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
raw_block.setType(Material.AIR);
// 获取耐久附魔
int durability = pickaxe.getEnchantmentLevel(Enchantment.DURABILITY);
double random = Math.random();
if (random < 1.0 / (durability + 1)) {
// 扣除耐久
damageable.setDamage(damageable.getDamage() + 1);
pickaxe.setItemMeta((ItemMeta) damageable);
}
return JobErrCode.OK;
} else {
return JobErrCode.NO_PERMISSION;
}
}
}

View File

@ -0,0 +1,53 @@
package site.deercloud.liteworldedit;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import site.deercloud.liteworldedit.Jobs.Job;
import site.deercloud.liteworldedit.Managers.ConfigManager;
import site.deercloud.liteworldedit.Managers.Cache;
import java.util.Objects;
public final class LiteWorldEdit extends JavaPlugin {
@Override
public void onEnable() {
// Plugin startup logic
instance = this;
_config = new ConfigManager();
_cache = new Cache();
new BukkitRunnable() {
@Override
public void run() {
Job job = _cache.get_one_job();
if (job != null) {
job.Do();
}
}
}.runTaskTimer(this, 0, 1);
Objects.requireNonNull(Bukkit.getPluginCommand("LiteWorldEdit")).setExecutor(new Commands());
Objects.requireNonNull(Bukkit.getPluginCommand("LiteWorldEdit")).setTabCompleter(new Commands());
LoggerX.info("插件启动成功。");
}
@Override
public void onDisable() {
// Plugin shutdown logic
}
public ConfigManager getConfigMgr() {
return _config;
}
public Cache getCache() {
return _cache;
}
public static LiteWorldEdit instance;
private ConfigManager _config;
private Cache _cache;
}

View File

@ -0,0 +1,52 @@
package site.deercloud.liteworldedit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.logging.Logger;
public class LoggerX {
private static final LiteWorldEdit _plugin = LiteWorldEdit.instance;
private static final Logger _logger = _plugin.getLogger();
public static void info(Player player, String message) {
player.sendMessage(ChatColor.GREEN + " LWE I | " + message);
if (_plugin.getConfigMgr().isDebug())
debug("来自玩家[ " + player.getName() + " ] 的信息 | " + message);
}
public static void info(String message) {
_logger.info(ChatColor.GREEN + " I | " + message);
}
public static void warn(Player player, String message) {
player.sendMessage(ChatColor.YELLOW + " LWE W | " + message);
if (_plugin.getConfigMgr().isDebug())
debug("来自玩家[ " + player.getName() + " ] 的警告 | " + message);
}
public static void warn(String message) {
_logger.info(ChatColor.YELLOW + " W | " + message);
}
public static void err(Player player, String message) {
player.sendMessage(ChatColor.RED + " LWE E | " + message);
if (_plugin.getConfigMgr().isDebug())
debug("来自玩家[ " + player.getName() + " ] 的报错 | " + message);
}
public static void err(String message) {
_logger.info(ChatColor.RED + " E | " + message);
}
public static void debug(Player player, String message) {
if (!_plugin.getConfigMgr().isDebug()) return;
if (player.isOp())
player.sendMessage(ChatColor.BLUE + " LWE D | " + message);
debug("来自玩家[ " + player.getName() + " ] 的调试 | " + message);
}
public static void debug(String message) {
_logger.info(ChatColor.BLUE + " D | " + message);
}
}

View File

@ -0,0 +1,52 @@
package site.deercloud.liteworldedit.Managers;
import org.bukkit.entity.Player;
import site.deercloud.liteworldedit.Jobs.Job;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
public class Cache {
private final Map<String, Map<Integer, Point>> _points;
private final Map<String, LinkedList<Job>> _jobs;
public Cache() {
_points = new HashMap<String, Map<Integer, Point>>();
_jobs = new HashMap<String, LinkedList<Job>>();
}
public void add_point(Player player, Integer index, Point point) {
if (!_points.containsKey(player.getUniqueId().toString())) {
_points.put(player.getUniqueId().toString(), new HashMap<Integer, Point>());
}
_points.get(player.getUniqueId().toString()).put(index, point);
}
public void add_job(Player player, Job job) {
if (!_jobs.containsKey(player.getUniqueId().toString())) {
_jobs.put(player.getUniqueId().toString(), new LinkedList<Job>());
}
_jobs.get(player.getUniqueId().toString()).add(job);
}
public Job get_one_job() {
for (Map.Entry<String, LinkedList<Job>> entry : _jobs.entrySet()) {
if (entry.getValue().size() > 0) {
return entry.getValue().removeFirst();
}
}
return null;
}
public Map<Integer, Point> get_points(Player player) {
return _points.get(player.getUniqueId().toString());
}
public void delete_player_jobs(Player player) {
_jobs.remove(player.getUniqueId().toString());
}
public void delete_player_points(Player player) {
_points.remove(player.getUniqueId().toString());
}
}

View File

@ -0,0 +1,63 @@
package site.deercloud.liteworldedit.Managers;
import com.sun.org.apache.xpath.internal.operations.Bool;
import org.bukkit.configuration.file.FileConfiguration;
import site.deercloud.liteworldedit.LiteWorldEdit;
public class ConfigManager {
public ConfigManager() {
_plugin.saveDefaultConfig();
reload();
}
public void reload() {
_plugin.reloadConfig();
_file = _plugin.getConfig();
_debug = _file.getBoolean("Debug", false);
_x_max = _file.getInt("MaxX", 64);
_y_max = _file.getInt("MaxY", 64);
_z_max = _file.getInt("MaxZ", 64);
}
public Boolean isDebug() {
return _debug;
}
public void setDebug(Boolean debug) {
_debug = debug;
_file.set("Debug", debug);
_plugin.saveConfig();
}
public Integer getXMax() {
return _x_max;
}
public Integer getYMax() {
return _y_max;
}
public Integer getZMax() {
return _z_max;
}
public void setMaxSize(Integer x, Integer y, Integer z) {
_x_max = x;
_y_max = y;
_z_max = z;
_file.set("MaxX", x);
_file.set("MaxY", y);
_file.set("MaxZ", z);
_plugin.saveConfig();
}
private final LiteWorldEdit _plugin = LiteWorldEdit.instance;
private FileConfiguration _file;
private Boolean _debug;
private Integer _x_max;
private Integer _y_max;
private Integer _z_max;
}

View File

@ -0,0 +1,17 @@
package site.deercloud.liteworldedit.Managers;
import org.bukkit.entity.Player;
public class Point {
public Point(Integer x, Integer y, Integer z, Player player) {
this.x = x;
this.y = y;
this.z = z;
this.player = player;
}
public Integer x;
public Integer y;
public Integer z;
public Player player;
}

View File

@ -0,0 +1,7 @@
MaxX: 64
MaxY: 64
MaxZ: 64
Debug: false

View File

@ -0,0 +1,14 @@
name: LiteWorldEdit
version: '${project.version}'
main: site.deercloud.liteworldedit.LiteWorldEdit
api-version: 1.14
prefix: LWE
load: STARTUP
authors: [ Luming ]
description: 生存用简易创世神。
website: https://blog.deercloud.site
commands:
LiteWorldEdit:
description: 简易创世神命令
usage: /lwe <cmd>
aliases: [lwe]