[2021-09-03:1] 完成DashBoard

This commit is contained in:
Skyone 2021-09-03 19:53:56 +08:00
parent 50d8524b52
commit 2894e1700f
4 changed files with 100 additions and 0 deletions

10
DashBoard/src/config.yml Normal file

@ -0,0 +1,10 @@
announcement:
content: |
这是一段公告,您可以随意修改。
+++
使用三个加号来换页。
记得使用 UTF-8 编码保存!
服务端如果乱码请加上 Java 参数:
-Dfile.encoding=UTF-8
author: DashBoard
title: 服务器公告

8
DashBoard/src/plugin.yml Normal file

@ -0,0 +1,8 @@
main: skyone.dashboard.DashBoard
name: DashBoard
version: 1.0
api-version: 1.17
commands:
cd:
usage: "/cd"
description: "Open menu"

@ -1,16 +1,37 @@
package skyone.dashboard;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import javax.annotation.ParametersAreNonnullByDefault;
public class DashBoard extends JavaPlugin {
public static JavaPlugin instance;
@Override
public void onLoad() {
saveDefaultConfig();
}
@Override
public void onEnable() {
instance = this;
Bukkit.getPluginManager().registerEvents(new EventListener(), this);
}
@Override
@ParametersAreNonnullByDefault
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!command.getName().equals("cd")) {
return false;
}
if (!(sender instanceof Player)) {
return false;
}
new MainMenu((Player) sender).openMenu();
return true;
}
}

@ -0,0 +1,61 @@
package skyone.dashboard;
import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import java.util.Objects;
import java.util.Random;
public class EventListener implements Listener {
public static final Random RANDOM = new Random();
@EventHandler
public void onClickButton(InventoryClickEvent event) {
Player player = (Player) event.getWhoClicked();
InventoryView inventory = player.getOpenInventory();
if (inventory.getTitle().equals(MainMenu.DEFAULT_TITLE)) {
event.setCancelled(true);
}
if (event.getRawSlot() < 0 || event.getRawSlot() > event.getInventory().getSize()) {
return;
}
ItemStack clickedItem = event.getCurrentItem();
if (clickedItem == null) {
return;
}
/* 退出服务器 */
if (clickedItem.getItemMeta().getDisplayName().equals(MainMenu.QUIT_SERVER)) {
player.kickPlayer("您已离开服务器");
return;
}
/* 服务器公告 */
if (clickedItem.getItemMeta().getDisplayName().equals(MainMenu.SHOW_ANNOUNCEMENT)) {
ItemStack ann = new ItemStack(Material.WRITTEN_BOOK);
BookMeta annBm = (BookMeta) ann.getItemMeta();
String[] acText = Objects.requireNonNullElse(DashBoard.instance.getConfig().getString("announcement.content"), "").split("\\+\\+\\+");
// Java 默认使用正则表达式进行查找在正则表达式中加号是特殊字符需要使用 \ 转义而在 Java \ 本身也是特殊字符因此就需要输入两个 \
annBm.setPages(acText);
annBm.setAuthor(Objects.requireNonNullElse(DashBoard.instance.getConfig().getString("announcement.author"), "DashBoard"));
annBm.setTitle(Objects.requireNonNullElse(DashBoard.instance.getConfig().getString("announcement.author"), "服务器公告"));
// 三项缺一不可
ann.setItemMeta(annBm);
player.openBook(ann);
return;
}
/* 随机传送 */
if (clickedItem.getItemMeta().getDisplayName().equals(MainMenu.RANDOM_TELEPORT)) {
player.closeInventory();
World playerWorld = Bukkit.getWorlds().get(0); // 获得主世界
double randX = RANDOM.nextInt(200000) - 100000;
double randZ = RANDOM.nextInt(200000) - 100000;
Location offset = new Location(playerWorld, randX, 0, randZ).toHighestLocation(); // 获得最高的非空气方块
player.teleport(player.getLocation().add(offset)); // add 加算距离
player.sendMessage(ChatColor.GREEN + "传送成功!");
}
}
}