测试版

This commit is contained in:
tianyu 2024-07-24 07:24:38 +08:00
commit c0075f6f01
10 changed files with 496 additions and 0 deletions

40
.gitignore vendored Normal file
View File

@ -0,0 +1,40 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
/.idea/
/out/

32
pom.xml Normal file
View File

@ -0,0 +1,32 @@
<?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>org.example</groupId>
<artifactId>DemonPlayerMail</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>public-rpg</id>
<url>https://repo.aurora-pixels.com/repository/public-rpg/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.12.2</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,47 @@
package me.Demon.DemonPlayerMail.Api;
import me.Demon.DemonPlayerMail.Main;
import org.bukkit.inventory.ItemStack;
public abstract class DMailAPI {
//发送物品到玩家邮箱中
public static void GiveItem(String playName, ItemStack item) {
//获取物品数量
int amount = item.getAmount();
//设置邮箱物品数量
addMailAmount(playName, amount);
//获取物品key标识
int keyId = Main.getRandomInt(80000, 10000);
//设置物品到邮箱
Main.mailDataG.set("MailData." + playName + "." + keyId, item);
//保存邮箱设置
Main.saveMailDataConfig();
//保存邮箱日志
Main.SaveLogAndSendLog(playName, item, "新增");
}
//获取玩家邮箱有多少个物品
public static int getMailAmount(String playName) {
return Main.mailDataG.getInt("MailData." + playName + ".amount");
}
//增加玩家邮箱物品数量
public static void addMailAmount(String playName, int amount) {
int amountPro = getMailAmount(playName);
Main.mailDataG.set("MailData." + playName + ".amount", (amountPro + amount));
Main.saveMailDataConfig();
}
//设置玩家邮箱物品数量
public static void setMailAmount(String playName, int amount) {
Main.mailDataG.set("MailData." + playName + ".amount", amount);
Main.saveMailDataConfig();
}
//清空玩家的邮箱数据
public static void resetMailData(String playName) {
Main.mailDataG.set("MailData." + playName, null);
}
}

View File

@ -0,0 +1,36 @@
package me.Demon.DemonPlayerMail.Listener;
import me.Demon.DemonPlayerMail.Api.DMailAPI;
import me.Demon.DemonPlayerMail.Main;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scheduler.BukkitRunnable;
public class JoinEvant implements Listener {
@EventHandler
public void onjoin(PlayerJoinEvent e) {
Player p = e.getPlayer();
new BukkitRunnable() {
public void run() {
int MailAmount = DMailAPI.getMailAmount(p.getName());
if (MailAmount >= 1) {
OpenMail(p, Main.prefix + "你有§a" + MailAmount + "§f封邮件物品尚未签收 §e[点击签收]");
}
}
}.runTaskLater(Main.plugin, 40L);
}
public static void OpenMail(Player player, String message) {
TextComponent Click = new TextComponent(message);
Click.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§e点击打开邮箱").create()));
Click.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/dpmail open"));
player.spigot().sendMessage(Click);
}
}

View File

@ -0,0 +1,93 @@
package me.Demon.DemonPlayerMail.Listener;
import me.Demon.DemonPlayerMail.Api.DMailAPI;
import me.Demon.DemonPlayerMail.Main;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.configuration.file.YamlConfiguration;
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.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
public class meMail implements Listener {
public static String inv_title = "§m§a§i§l§r玩家邮箱 - 收件箱[" + Main.serverName + "]";
@EventHandler
public void onclick(InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
if (inv_title.equalsIgnoreCase(e.getView().getTitle())) {
e.setCancelled(true);
if (e.getRawSlot() == 40) {
int amount = DMailAPI.getMailAmount(p.getName());
if (amount < 1) {
p.sendMessage(Main.prefix + "你没有可签收的物品.");
p.playSound(p.getLocation(), Sound.BLOCK_LEVER_CLICK, 1, 2);
return;
}
YamlConfiguration yml = (YamlConfiguration) Main.mailDataG;
for (String keyId : yml.getConfigurationSection("MailData." + p.getName()).getKeys(false)) {
if (!keyId.equalsIgnoreCase("amount")) {
ItemStack item = yml.getItemStack("MailData." + p.getName() + "." + keyId);
p.getInventory().addItem(item);
yml.set("MailData." + p.getName() + "." + keyId, null);
Main.SaveLogAndSendLog(p.getName(), item, "签收");
}
}
OpenGui(p);
DMailAPI.setMailAmount(p.getName(), 0);
Main.saveMailDataConfig();
p.sendMessage(Main.prefix + "成功签收 §a" + amount + " §f样物品.");
p.playSound(p.getLocation(), Sound.BLOCK_LEVER_CLICK, 1, 2);
}
}
}
public static void OpenGui(Player p) {
Inventory inv = Bukkit.createInventory(null, 45, inv_title);
YamlConfiguration yml = (YamlConfiguration) Main.mailDataG;
if (yml.getString("MailData." + p.getName()) != null) {
for (String keyId : yml.getConfigurationSection("MailData." + p.getName()).getKeys(false)) {
if (!keyId.equalsIgnoreCase("amount")) {
ItemStack item = yml.getItemStack("MailData." + p.getName() + "." + keyId);
inv.addItem(item);
}
}
}
for (int i = 36; i < 45; i++) {
inv.setItem(i, glass());
}
inv.setItem(40, InfoItems());
p.openInventory(inv);
p.playSound(p.getLocation(), Sound.BLOCK_LEVER_CLICK, 1, 2);
}
public static ItemStack glass() {
ItemStack item = new ItemStack(160, 1, (short) 15);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§7[§a■□■§7]");
item.setItemMeta(meta);
return item;
}
public static ItemStack InfoItems() {
ItemStack item = new ItemStack(Material.SLIME_BALL);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§a点击一键签收");
List<String> lore = new ArrayList<>();
lore.add("§e★§7点击将邮件物品全部收取");
lore.add("§c★§7请检查背包空位是否充足");
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
}

View File

@ -0,0 +1,95 @@
package me.Demon.DemonPlayerMail.Listener;
import me.Demon.DemonPlayerMail.Api.DMailAPI;
import me.Demon.DemonPlayerMail.Main;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.configuration.file.YamlConfiguration;
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.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
public class toMail implements Listener {
public static String inv_title = "§m§a§i§l§r管理发件箱 - ";
@EventHandler
public void onclick(InventoryClickEvent e) {
Player p = (Player) e.getWhoClicked();
Inventory inv = e.getInventory();
if (e.getView().getTitle().contains(inv_title)) {
if (e.getRawSlot() >= 36 && e.getRawSlot() <= 44) {
e.setCancelled(true);
if (e.getRawSlot() == 40) {
String playName = e.getView().getTitle().replace(inv_title, "");
p.playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 2);
//清空玩家邮箱数据
DMailAPI.resetMailData(playName);
int amount = 0;
for (int i = 0; i < 36; i++) {
ItemStack item = inv.getItem(i);
if (!Main.itemIsNull(item)) {
amount = amount + item.getAmount();
DMailAPI.GiveItem(playName, item);
Main.SaveLogAndSendLog(playName, item, "新增");
}
}
if (amount >= 1) {
p.closeInventory();
DMailAPI.setMailAmount(playName, amount);
p.sendMessage(Main.prefix + "成功发送物品到§6" + playName + "§f的游戏邮箱中.");
} else {
p.closeInventory();
p.sendMessage(Main.prefix + "你没有可发送的物品.");
}
}
}
}
}
public static void OpenGui(Player p, String playName) {
Inventory inv = Bukkit.createInventory(null, 45, inv_title + playName);
YamlConfiguration yml = (YamlConfiguration) Main.mailDataG;
if (yml.getString("MailData." + playName) != null) {
for (String keyId : yml.getConfigurationSection("MailData." + playName).getKeys(false)) {
if (!keyId.equalsIgnoreCase("amount")) {
ItemStack item = yml.getItemStack("MailData." + playName + "." + keyId);
inv.addItem(item);
}
}
}
for (int i = 36; i < 45; i++) {
inv.setItem(i, glass());
}
inv.setItem(40, sendOK());
p.openInventory(inv);
}
public static ItemStack glass() {
ItemStack item = new ItemStack(160, 1, (short) 15);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§7[§a■□■§7]");
item.setItemMeta(meta);
return item;
}
public static ItemStack sendOK() {
ItemStack item = new ItemStack(Material.SLIME_BALL);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§6§l确认发货");
List<String> lore = new ArrayList<>();
lore.add("§7点击发货");
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
}

View File

@ -0,0 +1,124 @@
package me.Demon.DemonPlayerMail;
import me.Demon.DemonPlayerMail.Listener.JoinEvant;
import me.Demon.DemonPlayerMail.Listener.meMail;
import me.Demon.DemonPlayerMail.Listener.toMail;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main extends JavaPlugin implements Listener {
public static Main plugin;
public static String prefix = "§7[§a§l邮箱§7] §f";
public static String serverName = "主城";
public static File Datafile = new File("plugins/DemonPlayerMail", "MailData.yml");
public static FileConfiguration mailDataG = YamlConfiguration.loadConfiguration(Datafile);
public static void saveMailDataConfig() {
try {
mailDataG.save(Datafile);
} catch (IOException e) {
e.printStackTrace();
}
}
public void onEnable() {
plugin = this;
saveDefaultConfig();
serverName = getConfig().getString("ServerName");
Bukkit.getConsoleSender().sendMessage("§b[玩家邮箱] §a插件成功载入Server");
Bukkit.getConsoleSender().sendMessage("§b[玩家邮箱] §a妖魂QQ:1763917516");
Bukkit.getPluginManager().registerEvents(this, this);
Bukkit.getServer().getPluginManager().registerEvents(new meMail(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new toMail(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new JoinEvant(), plugin);
}
public void onDisable() {
Bukkit.getConsoleSender().sendMessage("§b[DemonPlayerMail] §c插件已正常关闭");
}
public boolean onCommand(CommandSender sender, Command cmd, String Command, String[] args) {
if (Command.equalsIgnoreCase("dpmail")) {
if (args.length == 2 && args[0].equalsIgnoreCase("to") && sender.isOp()) {
if (sender instanceof Player) {
String playName = args[1];
toMail.OpenGui((Player) sender, playName);
}
} else if (args.length == 1 && args[0].equalsIgnoreCase("open")) {
if (sender instanceof Player) {
Player p = (Player) sender;
meMail.OpenGui(p);
}
} else if (args.length == 1 && args[0].equalsIgnoreCase("clearall")) {
// 清理日志
getConfig().set("MailDataLog", null);
saveConfig();
// 清理玩家邮箱物品操作
int a = 0;
FileConfiguration yml = Main.mailDataG;
for (String playName : yml.getConfigurationSection("MailData").getKeys(false)) {
yml.set("MailData." + playName, null);
int size = yml.getConfigurationSection("MailData." + playName).getKeys(false).size();
if (size >= 2) {
a++;
}
}
Main.saveMailDataConfig();
sender.sendMessage(prefix + "操作成功,清理物品[§e" + a + "§f]件.");
} else {
sender.sendMessage("");
sender.sendMessage("§e------- ======= §6魂式系统邮箱 §e======= -------");
sender.sendMessage("§2/dpmail open §f- §2打开邮箱");
sender.sendMessage("§2/dpmail clearall §f- §2清理邮箱");
sender.sendMessage("§2/dpmail to §e[玩家名] §f- §2发送物品");
sender.sendMessage("§e------- ======= §6魂式系统邮箱 §e======= -------");
}
}
return true;
}
public static String getTime(String format) {
Date date = Calendar.getInstance().getTime();
SimpleDateFormat datatime = new SimpleDateFormat(format);
return datatime.format(date);
}
public static int getRandomInt(int max, int mix) {
return new Random().nextInt(max) + mix;
}
public static boolean itemIsNull(ItemStack item) {
return item == null || item.getType() == Material.AIR;
}
public static boolean itemIsLore(ItemStack item) {
return item.getItemMeta().getLore() == null;
}
public static List<String> getPlayerLog(String time) {
return Main.plugin.getConfig().getStringList("MailDataLog." + time);
}
public static void SaveLogAndSendLog(String playName, ItemStack item, String type) {
List<String> list = new ArrayList<>();
String time = getTime("yyyy-MM-dd");
list.add("[日志] " + Main.getTime("HH:mm") + " 玩家 " + playName + " " + type + "物品 " + item.getItemMeta().getDisplayName() + " 数量:" + item.getAmount());
list.addAll(Main.getPlayerLog(playName));
Main.plugin.getConfig().set("MailDataLog." + time, list);
Main.plugin.saveConfig();
}
}

View File

@ -0,0 +1,21 @@
MailData:
虎牙妖魂吖:
amount: 1
'116264':
==: org.bukkit.inventory.ItemStack
type: PAPER
meta:
==: ItemMeta
meta-type: UNSPECIFIC
display-name: §6§l特价建筑券
lore:
- §a§l★§7斗罗帝国道具奖券
- §7凭借此券可获得建材
- ' '
- '§7使用方法:'
- §7在§e星斗森林§7找NPC兑换
enchants:
PROTECTION_ENVIRONMENTAL: 1
ItemFlags:
- HIDE_ENCHANTS
internal: H4sIAAAAAAAAAONiYOBgYCkuSa1g4EpOzMzJTMyPNzNhAAAkPOw5FwAAAA==

View File

@ -0,0 +1,3 @@
ServerName: "主城"
MailDataLog:
虎牙妖魂吖: 10

View File

@ -0,0 +1,5 @@
name: DemonPlayerMail
main: me.Demon.DemonPlayerMail.Main
version: 1.0
commands:
dpmail: