3.0.2
This commit is contained in:
commit
26ee950c86
67
pom.xml
Normal file
67
pom.xml
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?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>DemonShiTu</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>
|
||||
<dependency>
|
||||
<groupId>com.yaohun.demonlogintime</groupId>
|
||||
<artifactId>DemonLoginTime</artifactId>
|
||||
<version>2.1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.Demon.DemonPlugin</groupId>
|
||||
<artifactId>DemonAPI</artifactId>
|
||||
<version>2.2.9</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yaohun.onlinereward</groupId>
|
||||
<artifactId>AuOnlineReward</artifactId>
|
||||
<version>1.3.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yaohun.aurechargedata</groupId>
|
||||
<artifactId>AuRechargeData</artifactId>
|
||||
<version>2.0.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.serverct.ersha.jd</groupId>
|
||||
<artifactId>AttributePlus</artifactId>
|
||||
<version>2.3.7</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.clip.placeholderapi</groupId>
|
||||
<artifactId>PlaceholderAPI</artifactId>
|
||||
<version>2.9.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.Demon.DemonLevels</groupId>
|
||||
<artifactId>DemonLevels</artifactId>
|
||||
<version>2.2.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
58
src/main/java/com/yaohun/shitu/AdminCommand.java
Normal file
58
src/main/java/com/yaohun/shitu/AdminCommand.java
Normal file
|
@ -0,0 +1,58 @@
|
|||
package com.yaohun.shitu;
|
||||
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.manage.PlayerManager;
|
||||
import com.yaohun.shitu.util.RankUtil;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class AdminCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if(!sender.isOp()) {
|
||||
return true;
|
||||
}
|
||||
if(args.length == 0){
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage("§e------- ======= §6师徒系统 §e======= -------");
|
||||
sender.sendMessage("§2/"+label+" create §e[玩家名] §f- §2创建师傅档案");
|
||||
sender.sendMessage("§2/"+label+" top §f- §2查看收徒排行");
|
||||
sender.sendMessage("§2/"+label+" reload §f- §2重载配置文件");
|
||||
sender.sendMessage("§e------- ======= §6师徒系统 §e======= -------");
|
||||
sender.sendMessage("");
|
||||
}
|
||||
if(args.length == 1 && "reload".equalsIgnoreCase(args[0])){
|
||||
Config.reloadConfig(StMain.inst());
|
||||
sender.sendMessage("[师徒] 配置文件已重载");
|
||||
return true;
|
||||
}
|
||||
if(args.length == 1 && "top".equalsIgnoreCase(args[0])){
|
||||
RankUtil.checkAcceptingApprenticesTop(sender);
|
||||
return true;
|
||||
}
|
||||
if("create".equalsIgnoreCase(args[0]) && sender.isOp()){
|
||||
if(args.length == 1){
|
||||
DemonAPI.sendMessage(sender,"请输入你要创建的师傅名称.");
|
||||
return true;
|
||||
}
|
||||
String masterName = args[1];
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
if(playerManager.isMaster(masterName)){
|
||||
DemonAPI.sendMessage(sender,"玩家 §e"+masterName+" §a已存在师傅档案.");
|
||||
return true;
|
||||
}
|
||||
playerManager.createData(masterName);
|
||||
DemonAPI.sendMessage(sender,"成功为玩家 §e"+masterName+" §a创建出师档案.");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
210
src/main/java/com/yaohun/shitu/StMain.java
Normal file
210
src/main/java/com/yaohun/shitu/StMain.java
Normal file
|
@ -0,0 +1,210 @@
|
|||
package com.yaohun.shitu;
|
||||
|
||||
import com.yaohun.demonlogintime.api.LoginTimeAPI;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import com.yaohun.shitu.gui.MasterGui;
|
||||
import com.yaohun.shitu.listsener.PlayerListener;
|
||||
import com.yaohun.shitu.listsener.RechargeListener;
|
||||
import com.yaohun.shitu.manage.InviteManager;
|
||||
import com.yaohun.shitu.manage.PlayerManager;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public class StMain extends JavaPlugin {
|
||||
|
||||
private static StMain instance;
|
||||
private static PlayerManager playerManager;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
Config.reloadConfig(this);
|
||||
playerManager = new PlayerManager();
|
||||
|
||||
getServer().getPluginManager().registerEvents(new MasterGui(),this);
|
||||
getServer().getPluginManager().registerEvents(new PlayerListener(),this);
|
||||
getServer().getPluginManager().registerEvents(new RechargeListener(),this);
|
||||
|
||||
AdminCommand adminCommand = new AdminCommand();
|
||||
Bukkit.getPluginCommand("stadmin").setExecutor(adminCommand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
getPlayerManager().saveDataAll();
|
||||
Bukkit.getConsoleSender().sendMessage("§f[§6!§f] §aDemonShiTu §f已卸载");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if(args.length == 0){
|
||||
Player player = (Player) sender;
|
||||
String playerName = player.getName();
|
||||
if(getPlayerManager().isMaster(playerName)){
|
||||
sender.sendMessage("§r ");
|
||||
sender.sendMessage("§c§m §r §c师傅命令 §c§m §r");
|
||||
sender.sendMessage("§a/"+label+" open §8- §7打开师徒系统");
|
||||
sender.sendMessage("§a/"+label+" invite §e[玩家名] §8- §7邀请对方成为徒弟");
|
||||
sender.sendMessage("§a/"+label+" remove §e[徒弟名] §8- §7解除师徒关系");
|
||||
sender.sendMessage("§r ");
|
||||
return true;
|
||||
}
|
||||
if(getPlayerManager().isDisciple(playerName)){
|
||||
sender.sendMessage("§r ");
|
||||
sender.sendMessage("§c§m §r §c徒弟命令 §c§m §r");
|
||||
sender.sendMessage("§a/"+label+" jiechu §8- §7解除师徒关系§4(暂未开放)");
|
||||
sender.sendMessage("§r ");
|
||||
return true;
|
||||
}
|
||||
sender.sendMessage("§r ");
|
||||
sender.sendMessage("§c§m §r §c玩家命令 §c§m §r");
|
||||
sender.sendMessage("§a/"+label+" accept §8- §7接受拜师邀请");
|
||||
sender.sendMessage("§a/"+label+" deny §8- §7拒绝拜师邀请");
|
||||
sender.sendMessage("§r ");
|
||||
return true;
|
||||
}
|
||||
if("jiechu".equalsIgnoreCase(args[0])) {
|
||||
return true;
|
||||
}
|
||||
if("remove".equalsIgnoreCase(args[0])) {
|
||||
if(args.length < 2){
|
||||
DemonAPI.sendMessage(sender,"正确用法: §e/"+label+" remove [玩家名]",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
String masterName = sender.getName();
|
||||
PlayerData playerData = getPlayerManager().getPlayerData(masterName);
|
||||
String targetName = args[1];
|
||||
if(!playerData.isApprenticeExit(targetName)){
|
||||
DemonAPI.sendMessage(sender,"玩家 §e"+targetName+" §a貌似不是你的徒弟.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
int quitTimeDays = LoginTimeAPI.getQuitTimeDays(targetName);
|
||||
int offlineDays = Config.master_remove_after_offline;
|
||||
if(quitTimeDays < offlineDays){
|
||||
DemonAPI.sendMessage(sender,"解除失败,徒弟 §e"+targetName+" §a尚未离线超过 §b"+offlineDays+"天",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
playerData.removeApprentice(targetName);
|
||||
playerData.saveData();
|
||||
DemonAPI.sendMessage(sender,"成功解除与 §e"+targetName+" §a的师徒关系.",Sound.ENTITY_EXPERIENCE_ORB_PICKUP);
|
||||
return true;
|
||||
}
|
||||
if("invite".equalsIgnoreCase(args[0])) {
|
||||
if(args.length < 2){
|
||||
DemonAPI.sendMessage(sender,"正确用法: §e/"+label+" invite [玩家名]",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
Player master = (Player) sender;
|
||||
int masterLevel = master.getLevel();
|
||||
int needLevel = Config.master_level_limit;
|
||||
if(masterLevel < needLevel){
|
||||
DemonAPI.sendMessage(sender,"你需要将等级提升至 §e§lLv."+needLevel+" §a才能进行收徒.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
// 获取玩家已加入服务器多少天
|
||||
int masterJoinDays = Config.master_join_days;
|
||||
long firstTime = master.getFirstPlayed() + (1000L * 60 * 60 * 24 * masterJoinDays);
|
||||
if(System.currentTimeMillis() < firstTime){
|
||||
DemonAPI.sendMessage(sender,"你需要加入服务器 §e§l"+masterJoinDays+"天 §a后才能进行收徒.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
String masterName = master.getName();
|
||||
PlayerData masterData = getPlayerManager().getPlayerData(masterName);
|
||||
int maxDiscipleSize = Config.master_max_disciple_size;
|
||||
if(masterData.getApprenticeSize() >= maxDiscipleSize){
|
||||
DemonAPI.sendMessage(sender,"发送失败,你最多可以收徒 §e§l"+maxDiscipleSize+"名",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
String targetName = args[1];
|
||||
Player target = Bukkit.getPlayer(targetName);
|
||||
if (target == null || !target.isOnline()) {
|
||||
DemonAPI.sendMessage(sender,"玩家 §e"+targetName+" §a貌似不在线.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
if(target == master){
|
||||
DemonAPI.sendMessage(sender,"发送失败,目标玩家不能是自己.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
if(getPlayerManager().isDisciple(targetName)){
|
||||
DemonAPI.sendMessage(sender,"发送失败,目标玩家已拜其他人为师.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
int playerLevel = target.getLevel();
|
||||
int levelLimit = Config.disciple_level_limit;
|
||||
if(playerLevel > levelLimit){
|
||||
DemonAPI.sendMessage(sender,"发送失败,对方等级已超过 §eLv."+levelLimit+"级 §a无法成为你的徒弟.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
int targetJoinDays = Config.disciple_join_days;
|
||||
long targetFirstTime = target.getFirstPlayed() + (1000L * 60 * 60 * 24 * targetJoinDays);
|
||||
if(System.currentTimeMillis() >= targetFirstTime){
|
||||
DemonAPI.sendMessage(sender,"发送失败,对方已经加入本服超 §e"+targetJoinDays+"天 §a无法成为你的徒弟.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
InviteManager.sendInvite(master, target);
|
||||
return true;
|
||||
}
|
||||
if("accept".equalsIgnoreCase(args[0])){
|
||||
InviteManager.acceptInvite((Player) sender);
|
||||
return true;
|
||||
}
|
||||
if("deny".equalsIgnoreCase(args[0])){
|
||||
InviteManager.denyInvite((Player) sender);
|
||||
return true;
|
||||
}
|
||||
if(args.length == 1 && "open".equalsIgnoreCase(args[0])){
|
||||
String masterName = sender.getName();
|
||||
if(!getPlayerManager().isMaster(masterName)){
|
||||
DemonAPI.sendMessage(sender,"打开失败,你还没有宗师档案.", Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
MasterGui.openGui((Player) sender,1);
|
||||
return true;
|
||||
}
|
||||
if("create".equalsIgnoreCase(args[0])){
|
||||
Player player = (Player) sender;
|
||||
String masterName = player.getName();
|
||||
if(getPlayerManager().isMaster(masterName)){
|
||||
DemonAPI.sendMessage(sender,"创建失败,你已存在出师档案.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
if(getPlayerManager().isDisciple(masterName)){
|
||||
DemonAPI.sendMessage(sender,"创建失败,你需要先解除师徒关系.",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
int masterLevel = player.getLevel();
|
||||
int needLevel = Config.master_level_limit;
|
||||
if(masterLevel < needLevel){
|
||||
DemonAPI.sendMessage(sender,"创建失败,你需要将等级提升至§e§lLv."+needLevel,Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
// 获取玩家已加入服务器多少天
|
||||
int masterJoinDays = Config.master_join_days;
|
||||
long firstTime = player.getFirstPlayed() + (1000L * 60 * 60 * 24 * masterJoinDays);
|
||||
if(System.currentTimeMillis() < firstTime){
|
||||
DemonAPI.sendMessage(sender,"创建失败,你需要加入服务器§e§l"+masterJoinDays+"天",Sound.ENTITY_VILLAGER_NO);
|
||||
return true;
|
||||
}
|
||||
getPlayerManager().createData(masterName);
|
||||
DemonAPI.sendMessage(sender,"创建成功,你已经完成了出师已拥有宗师档案.",Sound.ENTITY_EXPERIENCE_ORB_PICKUP);
|
||||
MasterGui.openGui(player,1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static StMain inst() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public static PlayerManager getPlayerManager() {
|
||||
return playerManager;
|
||||
}
|
||||
}
|
39
src/main/java/com/yaohun/shitu/api/ShituAPI.java
Normal file
39
src/main/java/com/yaohun/shitu/api/ShituAPI.java
Normal file
|
@ -0,0 +1,39 @@
|
|||
package com.yaohun.shitu.api;
|
||||
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import com.yaohun.shitu.manage.PlayerManager;
|
||||
import org.bukkit.SandstoneType;
|
||||
|
||||
public class ShituAPI {
|
||||
|
||||
public static boolean hasPlayerMaster(String name){
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
if(playerManager.isMaster(name)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static int getMasterApprenticeSize(String name){
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
PlayerData playerData = playerManager.getPlayerData(name);
|
||||
if(playerData == null){
|
||||
return 0;
|
||||
}
|
||||
return playerData.getApprenticeSize();
|
||||
}
|
||||
|
||||
public static boolean hasPlayerApprentice(String name){
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
if(playerManager.isDisciple(name)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static String getPlayerMaster(String name){
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
return playerManager.getMasterName(name);
|
||||
}
|
||||
}
|
58
src/main/java/com/yaohun/shitu/config/Config.java
Normal file
58
src/main/java/com/yaohun/shitu/config/Config.java
Normal file
|
@ -0,0 +1,58 @@
|
|||
package com.yaohun.shitu.config;
|
||||
|
||||
import com.yaohun.shitu.StMain;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Config {
|
||||
|
||||
public static String pathData = "plugins/AuData/ShiTuData";
|
||||
public static double reward_recharge_scale;
|
||||
public static int reward_level_target;
|
||||
public static List<String> reward_attribute = new ArrayList<>();
|
||||
public static List<String> reward_commands1 = new ArrayList<>();
|
||||
public static List<String> reward_commands2 = new ArrayList<>();
|
||||
public static List<String> reward_commands3 = new ArrayList<>();
|
||||
|
||||
public static int disciple_auto_remove_days;
|
||||
public static int disciple_level_limit;
|
||||
public static int disciple_join_days;
|
||||
|
||||
public static int master_level_limit;
|
||||
public static int master_join_days;
|
||||
public static int master_max_disciple_size;
|
||||
public static int master_remove_after_offline;
|
||||
|
||||
public static void reloadConfig(StMain plugin){
|
||||
plugin.reloadConfig();
|
||||
plugin.saveConfig();
|
||||
FileConfiguration config = plugin.getConfig();
|
||||
loadRewardSettings(config);
|
||||
loadDiscipleSettings(config);
|
||||
loadMasterSettings(config);
|
||||
}
|
||||
|
||||
private static void loadRewardSettings(FileConfiguration config){
|
||||
reward_attribute = config.getStringList("rewards.attributeList");
|
||||
reward_level_target = config.getInt("rewards.levelTarget",80);
|
||||
reward_recharge_scale = config.getDouble("rewards.rechargeScale",0.05);
|
||||
reward_commands1 = config.getStringList("rewards.rewardList_1");
|
||||
reward_commands2 = config.getStringList("rewards.rewardList_2");
|
||||
reward_commands3 = config.getStringList("rewards.rewardList_3");
|
||||
}
|
||||
|
||||
private static void loadDiscipleSettings(FileConfiguration config){
|
||||
disciple_auto_remove_days = config.getInt("disciple.autoRemoveDays",30);
|
||||
disciple_level_limit = config.getInt("disciple.maxLevelLimit",80);
|
||||
disciple_join_days = config.getInt("disciple.maxJoinDays",30);
|
||||
}
|
||||
|
||||
private static void loadMasterSettings(FileConfiguration config){
|
||||
master_level_limit = config.getInt("master.levelLimit",90);
|
||||
master_join_days = config.getInt("master.joinDaysLimit",30);
|
||||
master_max_disciple_size = config.getInt("master.maxDiscipleSize",25);
|
||||
master_remove_after_offline = config.getInt("master.removeAfterOffline",3);
|
||||
}
|
||||
}
|
118
src/main/java/com/yaohun/shitu/data/PlayerData.java
Normal file
118
src/main/java/com/yaohun/shitu/data/PlayerData.java
Normal file
|
@ -0,0 +1,118 @@
|
|||
package com.yaohun.shitu.data;
|
||||
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PlayerData {
|
||||
private final String playerName;
|
||||
private final File file;
|
||||
private final FileConfiguration config;
|
||||
|
||||
private double incomeValue;
|
||||
private long loginTime;
|
||||
private HashMap<String,Boolean> apprenticeMap = new HashMap<>();
|
||||
private List<String> challengeGoals = new ArrayList<>();
|
||||
|
||||
public PlayerData(String name){
|
||||
this.playerName = name;
|
||||
File path = new File(Config.pathData);
|
||||
if(!path.exists()){
|
||||
path.mkdirs();
|
||||
}
|
||||
this.file = new File(path, name + ".yml");
|
||||
if(!file.exists()){
|
||||
try {
|
||||
file.createNewFile();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
this.config= YamlConfiguration.loadConfiguration(this.file);
|
||||
loadData();
|
||||
}
|
||||
|
||||
private void loadData(){
|
||||
this.loginTime = config.getLong("loginTime", System.currentTimeMillis());
|
||||
this.incomeValue = config.getDouble("incomeValue", 0);
|
||||
ConfigurationSection section = config.getConfigurationSection("Apprentice");
|
||||
if(section != null){
|
||||
for(String key : section.getKeys(false)){
|
||||
this.apprenticeMap.put(key, section.getBoolean(key));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getPlayerName() {
|
||||
return playerName;
|
||||
}
|
||||
|
||||
public long getLoginTime() {
|
||||
return loginTime;
|
||||
}
|
||||
|
||||
public double getIncomeValue() {
|
||||
return incomeValue;
|
||||
}
|
||||
|
||||
public void addIncomeValue(double value){
|
||||
this.incomeValue += value;
|
||||
}
|
||||
|
||||
public void removeApprentice(String name){
|
||||
apprenticeMap.remove(name);
|
||||
}
|
||||
|
||||
public List<String> getApprenticeList() {
|
||||
return new ArrayList<>(apprenticeMap.keySet());
|
||||
}
|
||||
|
||||
public int getApprenticeSize(){
|
||||
return apprenticeMap.size();
|
||||
}
|
||||
|
||||
public boolean isApprenticeExit(String name){
|
||||
return apprenticeMap.containsKey(name);
|
||||
}
|
||||
|
||||
public boolean isActiveReward(String name){
|
||||
if(apprenticeMap.containsKey(name)){
|
||||
return apprenticeMap.get(name);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setActivePlayer(String name,boolean isActive){
|
||||
apprenticeMap.put(name, isActive);
|
||||
}
|
||||
|
||||
public boolean isChallengeGoal(String name){
|
||||
return challengeGoals.contains(name);
|
||||
}
|
||||
|
||||
public void addChallengeGoal(String name){
|
||||
challengeGoals.add(name);
|
||||
}
|
||||
|
||||
public void saveData(){
|
||||
config.set("loginTime", System.currentTimeMillis());
|
||||
config.set("incomeValue", incomeValue);
|
||||
config.set("Apprentice",null);
|
||||
for (String playerName : apprenticeMap.keySet()){
|
||||
config.set("Apprentice." + playerName, apprenticeMap.get(playerName));
|
||||
}
|
||||
try {
|
||||
config.save(file);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
163
src/main/java/com/yaohun/shitu/gui/MasterGui.java
Normal file
163
src/main/java/com/yaohun/shitu/gui/MasterGui.java
Normal file
|
@ -0,0 +1,163 @@
|
|||
package com.yaohun.shitu.gui;
|
||||
|
||||
import com.yaohun.onlinereward.api.OnlineAPI;
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import com.yaohun.shitu.manage.PlayerManager;
|
||||
import com.yaohun.shitu.util.StackUtil;
|
||||
import me.Demon.DemonLevels.api.DLevelAPI;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
import me.Demon.DemonPlugin.data.NbtItem;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class MasterGui implements Listener {
|
||||
|
||||
private static String invTitle = "斗魂帝国 - 师徒系统";
|
||||
|
||||
public static void openGui(Player player,int page){
|
||||
String masterName = player.getName();
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
PlayerData masterData = playerManager.getPlayerData(masterName);
|
||||
Inventory inv = Bukkit.createInventory(null,54,invTitle);
|
||||
inv.setItem(2, StackUtil.getApprenticeSize(masterData));
|
||||
inv.setItem(4,StackUtil.getRewardChest());
|
||||
inv.setItem(6,StackUtil.getPointsShop());
|
||||
inv.setItem(0,StackUtil.turnThePage("上一页",page));
|
||||
inv.setItem(8,StackUtil.turnThePage("下一页",page));
|
||||
List<String> apprenticeList = masterData.getApprenticeList();
|
||||
int apprenticesPerPage = 5;
|
||||
// 当前页起始下标
|
||||
int startIndex = (page - 1) * apprenticesPerPage;
|
||||
// 当前页结束下标(不含)
|
||||
int endIndex = Math.min(startIndex + apprenticesPerPage, apprenticeList.size());
|
||||
int slot = 9;
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
String name = apprenticeList.get(i);
|
||||
inv.setItem(slot, StackUtil.getApprentice(name));
|
||||
inv.setItem(slot + 1, StackUtil.getActiveIncome(masterData, name));
|
||||
slot += 9;
|
||||
}
|
||||
player.openInventory(inv);
|
||||
}
|
||||
|
||||
private final List<String> settlementIncomeD = new ArrayList<>();
|
||||
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent e){
|
||||
int rawSlot = e.getRawSlot();
|
||||
Player player = (Player) e.getWhoClicked();
|
||||
String playerName = player.getName();
|
||||
Inventory inv = e.getInventory();
|
||||
if(e.getView().getTitle().contains(invTitle)){
|
||||
e.setCancelled(true);
|
||||
if(rawSlot == 4){
|
||||
// 打开奖励界面
|
||||
player.closeInventory();
|
||||
DemonAPI.sendMessage(player,"宗师奖励礼包即将开放.",Sound.ENTITY_VILLAGER_NO);
|
||||
}
|
||||
if(rawSlot == 6){
|
||||
player.closeInventory();
|
||||
DemonAPI.sendMessage(player,"师徒商店尚未开放.",Sound.ENTITY_VILLAGER_NO);
|
||||
}
|
||||
int page = inv.getItem(0).getAmount();
|
||||
if(rawSlot == 0) {
|
||||
// 上一页按钮组件
|
||||
if(page >= 2 && page <= 5){
|
||||
openGui(player,page - 1);
|
||||
} else {
|
||||
DemonAPI.sendMessage(player,"已经是第一页了.",Sound.ENTITY_VILLAGER_NO);
|
||||
}
|
||||
}
|
||||
if(rawSlot == 8) {
|
||||
// 下一页按钮组件
|
||||
if(page >= 1 && page <= 4){
|
||||
openGui(player,page + 1);
|
||||
} else {
|
||||
DemonAPI.sendMessage(player,"已经是最后一页了.",Sound.ENTITY_VILLAGER_NO);
|
||||
}
|
||||
}
|
||||
if(rawSlot >= 9 && rawSlot <= 53) {
|
||||
ItemStack stack = e.getCurrentItem();
|
||||
if (!DemonAPI.itemIsNull(stack)) {
|
||||
NbtItem nbt = new NbtItem(stack);
|
||||
if (!nbt.hasKey("apprenticeName")) {
|
||||
return;
|
||||
}
|
||||
String apprenticeName = nbt.getString("apprenticeName");
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
PlayerData playerData = playerManager.getPlayerData(playerName);
|
||||
if(!playerData.isApprenticeExit(apprenticeName)){
|
||||
player.closeInventory();
|
||||
DemonAPI.sendMessage(player,"这个玩家貌似已经不是你的徒弟了喔~",Sound.ENTITY_VILLAGER_NO);
|
||||
return;
|
||||
}
|
||||
int onlineTime = OnlineAPI.getTime(apprenticeName);
|
||||
if(onlineTime < 120){
|
||||
int valueTime = 120 - onlineTime;
|
||||
DemonAPI.sendMessage(player,"你的徒弟 §e"+apprenticeName+" §a还需要活跃 §b"+valueTime+"分钟 §a才能结算活跃收益.",Sound.ENTITY_VILLAGER_NO);
|
||||
return;
|
||||
}
|
||||
if(playerData.isActiveReward(apprenticeName)){
|
||||
DemonAPI.sendMessage(player,"结算失败,每名徒弟每天只能结算一次活跃收益。",Sound.ENTITY_VILLAGER_NO);
|
||||
return;
|
||||
}
|
||||
double defaultBonus = 5;
|
||||
// 若玩家是贵族6 将获得积分 8点
|
||||
// 若玩家是贵族8 将获得积分 10点
|
||||
// 获取当前日期的星期
|
||||
DayOfWeek currentDayOfWeek = LocalDate.now().getDayOfWeek();
|
||||
// 如果今天是周一至周五,奖金提高30%
|
||||
if (currentDayOfWeek != DayOfWeek.SATURDAY && currentDayOfWeek != DayOfWeek.SUNDAY) {
|
||||
defaultBonus *= 1.3;
|
||||
}
|
||||
// 增加收益
|
||||
settlementIncomeD.add(playerName);
|
||||
playerData.addIncomeValue(defaultBonus);
|
||||
playerData.setActivePlayer(apprenticeName,true);
|
||||
DemonAPI.sendMessage(player,"结算成功,获得徒弟活跃收益: §b§l"+String.format("%.2f",defaultBonus)+"师徒币",Sound.ENTITY_EXPERIENCE_ORB_PICKUP);
|
||||
System.out.println("[师徒] 活跃激励 玩家 <" + playerName + ">获得" + String.format("%.2f",defaultBonus) + "师徒币奖励");
|
||||
if(!playerData.isChallengeGoal(apprenticeName)){
|
||||
int levelTarget = Config.reward_level_target;
|
||||
int level = (int) DLevelAPI.getOffPlayer_Level(apprenticeName);
|
||||
if(level >= levelTarget) {
|
||||
playerData.addChallengeGoal(apprenticeName);
|
||||
// 玩家完成一次挑战目标
|
||||
System.out.println("[师徒] 成就目标 玩家 <" + playerName + "> 将 " + apprenticeName + " 已带至 Lv."+levelTarget);
|
||||
Bukkit.broadcastMessage("§c§l★ §a宗师 §e"+playerName+" §a已将他的徒弟 §6"+apprenticeName+" §a培养成了 §r鑄");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClose(InventoryCloseEvent e){
|
||||
Player player = (Player) e.getPlayer();
|
||||
if(e.getView().getTitle().equalsIgnoreCase(invTitle)){
|
||||
String playerName = player.getName();
|
||||
if(settlementIncomeD.contains(playerName)){
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
PlayerData playerData = playerManager.getPlayerData(playerName);
|
||||
playerData.saveData();
|
||||
settlementIncomeD.remove(playerName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
45
src/main/java/com/yaohun/shitu/listsener/PlayerListener.java
Normal file
45
src/main/java/com/yaohun/shitu/listsener/PlayerListener.java
Normal file
|
@ -0,0 +1,45 @@
|
|||
package com.yaohun.shitu.listsener;
|
||||
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import com.yaohun.shitu.manage.PlayerManager;
|
||||
import com.yaohun.shitu.util.AttributeUtil;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent e){
|
||||
Player player = e.getPlayer();
|
||||
String playerName = player.getName();
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
if(playerManager.isDisciple(playerName)) {
|
||||
// 计算玩家是否已进入服务器超过60天
|
||||
int limitDay = Config.disciple_auto_remove_days;
|
||||
long firstTime = player.getFirstPlayed() + (1000L * 60 * 60 * 24 * limitDay);
|
||||
long nowTime = System.currentTimeMillis();
|
||||
if (nowTime >= firstTime) {
|
||||
// 执行师徒关系解除
|
||||
String masterName = playerManager.getMasterName(playerName);
|
||||
PlayerData playerData = playerManager.getPlayerData(masterName);
|
||||
playerData.removeApprentice(playerName);
|
||||
System.out.printf("[师徒] 玩家 " + playerName + " 因加入服务器超过<" + limitDay + "天> 已与(" + masterName + ")解除师徒关系.");
|
||||
} else {
|
||||
AttributeUtil.addAttribute(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
AttributeUtil.removeAttribute(player);
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
playerManager.saveData(player.getName(), true);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.yaohun.shitu.listsener;
|
||||
|
||||
import com.yaohun.aurechargedata.event.RechargeEvent;
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import com.yaohun.shitu.manage.PlayerManager;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
public class RechargeListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onRecharge(RechargeEvent event) {
|
||||
if(event.getMoney() >= 30) {
|
||||
String playerName = event.getPlayerName();
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
if (playerManager.isDisciple(playerName)) {
|
||||
String masterName = playerManager.getMasterName(playerName);
|
||||
PlayerData playerData = playerManager.getPlayerData(masterName);
|
||||
double pointsValue = Math.round(event.getMoney() * Config.reward_recharge_scale);
|
||||
playerData.addIncomeValue(pointsValue);
|
||||
Player mentorPlayer = Bukkit.getPlayerExact(masterName);
|
||||
System.out.println("[调试 - 师徒] 充值玩家: " + playerName + " 他的师傅<" + masterName + ">获得" + pointsValue + "师徒币奖励");
|
||||
if (mentorPlayer != null && mentorPlayer.isOnline()) {
|
||||
DemonAPI.sendMessage(mentorPlayer, "获得徒弟的充值激励收益: §6" + pointsValue + "师徒币");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
91
src/main/java/com/yaohun/shitu/manage/InviteManager.java
Normal file
91
src/main/java/com/yaohun/shitu/manage/InviteManager.java
Normal file
|
@ -0,0 +1,91 @@
|
|||
package com.yaohun.shitu.manage;
|
||||
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import com.yaohun.shitu.util.AttributeUtil;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
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.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class InviteManager {
|
||||
|
||||
|
||||
private static final Map<String, String> inviteMap = new HashMap<>();
|
||||
|
||||
public static void sendInvite(Player master,Player target){
|
||||
String masterName = master.getName();
|
||||
String targetName = target.getName();
|
||||
inviteMap.put(targetName,masterName);
|
||||
DemonAPI.sendMessage(master,"发送成功,已向 §e" + targetName + " §a发出拜师邀请.", Sound.ENTITY_EXPERIENCE_ORB_PICKUP);
|
||||
DemonAPI.sendMessage(target,"你收到了来自 §e" + masterName + " §a发出的拜师邀请.",Sound.ENTITY_CAT_AMBIENT);
|
||||
sendClickMessage(target,"§r §a§l【点击同意】 §r", "shitu accept");
|
||||
sendClickMessage(target,"§r §c§l【点击拒绝】 §r", "shitu deny");
|
||||
}
|
||||
|
||||
private static void sendClickMessage(Player player, String message,String commadns) {
|
||||
TextComponent tomessage = new TextComponent(message);
|
||||
tomessage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/"+commadns));
|
||||
tomessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§a斗§b魂§c帝§d国").create()));
|
||||
player.spigot().sendMessage(tomessage);
|
||||
}
|
||||
|
||||
// 玩家处理拜师邀请
|
||||
public static boolean acceptInvite(Player player) {
|
||||
String playerName = player.getName();
|
||||
String masterName = inviteMap.get(playerName);
|
||||
if(masterName == null){
|
||||
DemonAPI.sendMessage(player,"没有需要处理的拜师邀请.",Sound.ENTITY_VILLAGER_NO);
|
||||
return false;
|
||||
}
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
if(masterName.equalsIgnoreCase(playerName)){
|
||||
DemonAPI.sendMessage(player,"无法同意自己的拜师请求.",Sound.ENTITY_VILLAGER_NO);
|
||||
return false;
|
||||
}
|
||||
if(playerManager.isDisciple(playerName)){
|
||||
DemonAPI.sendMessage(player,"接受失败,你已经有师傅了.",Sound.ENTITY_VILLAGER_NO);
|
||||
return false;
|
||||
}
|
||||
PlayerData masterData = playerManager.getPlayerData(masterName);
|
||||
if(masterData.getApprenticeSize() >= Config.master_max_disciple_size){
|
||||
DemonAPI.sendMessage(player,"接受失败,对方已收徒弟数量达到上限.",Sound.ENTITY_VILLAGER_NO);
|
||||
return false;
|
||||
}
|
||||
masterData.setActivePlayer(playerName,true);
|
||||
masterData.saveData();
|
||||
playerManager.setApprenticeMap(playerName,masterName);
|
||||
|
||||
DemonAPI.sendMessage(player,"恭喜你已经成为 §e"+masterName+" §a的徒弟之一.",Sound.ENTITY_EXPERIENCE_ORB_PICKUP);
|
||||
AttributeUtil.addAttribute(player);
|
||||
|
||||
Player master = Bukkit.getPlayer(masterName);
|
||||
if(master != null && master.isOnline()){
|
||||
DemonAPI.sendMessage(master,"玩家 §e"+playerName+" §a已同意你的拜师邀请.",Sound.ENTITY_EXPERIENCE_ORB_PICKUP);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean denyInvite(Player player) {
|
||||
String playerName = player.getName();
|
||||
String masterName = inviteMap.get(playerName);
|
||||
if(masterName == null){
|
||||
DemonAPI.sendMessage(player,"没有需要处理的拜师邀请.",Sound.ENTITY_VILLAGER_NO);
|
||||
return false;
|
||||
}
|
||||
DemonAPI.sendMessage(player,"你已拒绝 §e"+masterName+" §a的拜师邀请.",Sound.ENTITY_BLAZE_DEATH);
|
||||
Player master = Bukkit.getPlayer(masterName);
|
||||
if(master != null && master.isOnline()){
|
||||
DemonAPI.sendMessage(master,"玩家 §e"+playerName+" §a已拒绝你的拜师邀请.",Sound.ENTITY_BLAZE_DEATH);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
89
src/main/java/com/yaohun/shitu/manage/PlayerManager.java
Normal file
89
src/main/java/com/yaohun/shitu/manage/PlayerManager.java
Normal file
|
@ -0,0 +1,89 @@
|
|||
package com.yaohun.shitu.manage;
|
||||
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.serverct.ersha.jd.Ha;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PlayerManager {
|
||||
|
||||
private HashMap<String, PlayerData> playerDatas = new HashMap<>();
|
||||
private HashMap<String ,String > apprenticeMap = new HashMap<>();
|
||||
|
||||
public PlayerManager(){
|
||||
// 载入所有师傅的数据
|
||||
File folder = new File(Config.pathData);
|
||||
if (!folder.exists() || !folder.isDirectory()) {
|
||||
return;
|
||||
}
|
||||
List<File> ymlFiles = new ArrayList<>();
|
||||
DemonAPI.collectYmlFiles(folder, ymlFiles);
|
||||
if (ymlFiles .isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 逐个加载文件并提取 statistics 内容
|
||||
for (File file : ymlFiles) {
|
||||
String fileName = file.getName();
|
||||
String playerName = fileName.substring(0, fileName.length() - 4);
|
||||
playerDatas.put(playerName, new PlayerData(playerName));
|
||||
}
|
||||
for (PlayerData playerData : playerDatas.values()){
|
||||
List<String> stringList = playerData.getApprenticeList();
|
||||
for (String name : stringList) {
|
||||
apprenticeMap.put(name, playerData.getPlayerName());
|
||||
}
|
||||
}
|
||||
Bukkit.getConsoleSender().sendMessage("§6[师徒系统] §7已出师玩家: §f"+playerDatas.size()+"名");
|
||||
Bukkit.getConsoleSender().sendMessage("§6[师徒系统] §7已拜师玩家: §f"+apprenticeMap.size()+"名");
|
||||
}
|
||||
|
||||
public void createData(String masterName){
|
||||
PlayerData playerData = new PlayerData(masterName);
|
||||
playerDatas.put(masterName, playerData);
|
||||
playerData.saveData();
|
||||
}
|
||||
|
||||
public PlayerData getPlayerData(String masterName) {
|
||||
return playerDatas.get(masterName);
|
||||
}
|
||||
|
||||
public void saveData(String playerName, boolean unload) {
|
||||
if (!playerDatas.containsKey(playerName)) {
|
||||
return;
|
||||
}
|
||||
PlayerData playerData = playerDatas.remove(playerName);
|
||||
playerData.saveData();
|
||||
if (unload) {
|
||||
playerDatas.remove(playerName);
|
||||
}
|
||||
}
|
||||
|
||||
public void saveDataAll() {
|
||||
for(PlayerData playerData : playerDatas.values()){
|
||||
playerData.saveData();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isMaster(String name){
|
||||
return playerDatas.containsKey(name);
|
||||
}
|
||||
|
||||
public void setApprenticeMap(String name, String mentorName){
|
||||
apprenticeMap.put(name, mentorName);
|
||||
}
|
||||
|
||||
public boolean isDisciple(String name){
|
||||
return apprenticeMap.containsKey(name);
|
||||
}
|
||||
|
||||
public String getMasterName(String name){
|
||||
return apprenticeMap.get(name);
|
||||
}
|
||||
}
|
37
src/main/java/com/yaohun/shitu/util/AttributeUtil.java
Normal file
37
src/main/java/com/yaohun/shitu/util/AttributeUtil.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
package com.yaohun.shitu.util;
|
||||
|
||||
import com.yaohun.shitu.StMain;
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.manage.PlayerManager;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.serverct.ersha.jd.AttributeAPI;
|
||||
import org.serverct.ersha.jd.attribute.AttributeData;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class AttributeUtil {
|
||||
|
||||
private static String ATTRIBUTE_SOURCE_NAME = "aumaster_exp";
|
||||
|
||||
public static void checkPlayer(Player player) {
|
||||
AttributeData attributeData = AttributeAPI.getAttrData(player);
|
||||
PlayerManager playerManager = StMain.getPlayerManager();
|
||||
boolean hasAttribute = attributeData.getApiAttributeList(ATTRIBUTE_SOURCE_NAME) != null;
|
||||
if (playerManager.isDisciple(player.getName())) {
|
||||
if (!hasAttribute) {
|
||||
addAttribute(player);
|
||||
}
|
||||
} else if (hasAttribute) {
|
||||
removeAttribute(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addAttribute(Player player) {
|
||||
AttributeAPI.addAttribute(player, ATTRIBUTE_SOURCE_NAME, Config.reward_attribute);
|
||||
}
|
||||
|
||||
public static void removeAttribute(Player player) {
|
||||
AttributeAPI.deleteAttribute(player, ATTRIBUTE_SOURCE_NAME);
|
||||
}
|
||||
|
||||
}
|
69
src/main/java/com/yaohun/shitu/util/RankUtil.java
Normal file
69
src/main/java/com/yaohun/shitu/util/RankUtil.java
Normal file
|
@ -0,0 +1,69 @@
|
|||
package com.yaohun.shitu.util;
|
||||
|
||||
import com.yaohun.shitu.config.Config;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.serverct.ersha.jd.Ya;
|
||||
import org.yaml.snakeyaml.Yaml;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class RankUtil {
|
||||
|
||||
public static void checkAcceptingApprenticesTop(CommandSender sender){
|
||||
File folder = new File(Config.pathData);
|
||||
if (!folder.exists() || !folder.isDirectory()) {
|
||||
sender.sendMessage("[师徒] 还没有玩家进行出师");
|
||||
return;
|
||||
}
|
||||
List<File> ymlFiles = new ArrayList<>();
|
||||
DemonAPI.collectYmlFiles(folder, ymlFiles);
|
||||
if (ymlFiles .isEmpty()) {
|
||||
sender.sendMessage("[师徒] 还没有玩家进行出师");
|
||||
return;
|
||||
}
|
||||
HashMap<String,Double> valueMap = new HashMap<>();
|
||||
HashMap<String,Integer> hashMap = new HashMap<>();
|
||||
// 逐个加载文件并提取 statistics 内容
|
||||
for (File file : ymlFiles) {
|
||||
String fileName = file.getName();
|
||||
String playerName = fileName.substring(0, fileName.length() - 4);
|
||||
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
|
||||
double incomeValue = config.getDouble("incomeValue");
|
||||
ConfigurationSection section = config.getConfigurationSection("Apprentice");
|
||||
if(section == null){
|
||||
continue;
|
||||
}
|
||||
int amount = section.getKeys(false).size();
|
||||
hashMap.put(playerName,amount);
|
||||
valueMap.put(playerName,incomeValue);
|
||||
}
|
||||
|
||||
LinkedHashMap<String, Integer> sortedMap = hashMap.entrySet()
|
||||
.stream()
|
||||
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
|
||||
.collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
Map.Entry::getValue,
|
||||
(e1, e2) -> e1,
|
||||
LinkedHashMap::new
|
||||
));
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage("§e§l★ §a师徒激励计划-收益排行榜");
|
||||
int rank = 1;
|
||||
for (String playerName : sortedMap.keySet()){
|
||||
double value = Math.round(valueMap.get(playerName) / 10);
|
||||
int amount = sortedMap.get(playerName);
|
||||
sender.sendMessage("§a§l★ §7第 §e" + rank + " §7名: §e" + playerName + " §f收益: §6"+new DecimalFormat(",###.##").format(value)+"元 §f徒弟: §e"+amount+"名");
|
||||
rank++;
|
||||
}
|
||||
sender.sendMessage("");
|
||||
}
|
||||
}
|
113
src/main/java/com/yaohun/shitu/util/StackUtil.java
Normal file
113
src/main/java/com/yaohun/shitu/util/StackUtil.java
Normal file
|
@ -0,0 +1,113 @@
|
|||
package com.yaohun.shitu.util;
|
||||
|
||||
import com.yaohun.aurechargedata.api.RechargeAPI;
|
||||
import com.yaohun.aurechargedata.util.TimeType;
|
||||
import com.yaohun.demonlogintime.api.LoginTimeAPI;
|
||||
import com.yaohun.onlinereward.api.OnlineAPI;
|
||||
import com.yaohun.shitu.data.PlayerData;
|
||||
import me.Demon.DemonLevels.api.DLevelAPI;
|
||||
import me.Demon.DemonPlugin.DemonAPI;
|
||||
import me.Demon.DemonPlugin.data.NbtItem;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class StackUtil {
|
||||
|
||||
public static ItemStack getApprenticeSize(PlayerData playerData){
|
||||
ItemStack stack = new ItemStack(Material.DIAMOND);
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
int value = (int) playerData.getIncomeValue() / 10;
|
||||
meta.setDisplayName("§l"+value);
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add("§l"+playerData.getApprenticeSize());
|
||||
meta.setLore(lore);
|
||||
stack.setItemMeta(meta);
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack getRewardChest(){
|
||||
ItemStack stack = new ItemStack(Material.CHEST);
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setDisplayName("Reward Chest");
|
||||
stack.setItemMeta(meta);
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack getPointsShop(){
|
||||
ItemStack stack = new ItemStack(Material.ENDER_CHEST);
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setDisplayName("Points Shop");
|
||||
stack.setItemMeta(meta);
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack turnThePage(String name,int page){
|
||||
ItemStack stack = new ItemStack(Material.ARROW);
|
||||
stack.setAmount(page);
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setDisplayName(name);
|
||||
stack.setItemMeta(meta);
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack getApprentice(String name){
|
||||
ItemStack stack = new ItemStack(Material.GOLD_SWORD);
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setDisplayName("§l"+name);
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add("§a§l★§7名称: §6§l"+name);
|
||||
int level = (int) DLevelAPI.getOffPlayer_Level(name);
|
||||
lore.add("§a§l★§7等级: §dLv."+level);
|
||||
int minute = OnlineAPI.getTime(name);
|
||||
lore.add("§a§l★§7今日活跃: §a"+minute+"分钟");
|
||||
int recharge = RechargeAPI.getRechargeData(name, TimeType.MONTHLY);
|
||||
lore.add("§a§l★§7本月储值: §b"+recharge+"软妹币");
|
||||
long loginTime = LoginTimeAPI.getLoginTime(name);
|
||||
lore.add("§a§l★§7最后上线: §5"+ DemonAPI.LongToStringData(loginTime,"yyyy年MM月dd日 HH:mm"));
|
||||
meta.setLore(lore);
|
||||
stack.setItemMeta(meta);
|
||||
NbtItem nbtItem = new NbtItem(stack);
|
||||
if(level >= 90){
|
||||
nbtItem.setString("bottomMap","Tudi_1");
|
||||
} else if(level >= 60){
|
||||
nbtItem.setString("bottomMap","Tudi_2");
|
||||
} else {
|
||||
nbtItem.setString("bottomMap","Tudi_3");
|
||||
}
|
||||
return nbtItem.getItem();
|
||||
}
|
||||
|
||||
public static ItemStack getActiveIncome(PlayerData playerData,String name){
|
||||
int minute = OnlineAPI.getTime(name);
|
||||
ItemStack stack = new ItemStack(Material.WATCH);
|
||||
double progress = (double) minute / 120;
|
||||
if(progress >= 1){
|
||||
progress = 1;
|
||||
} else {
|
||||
progress = Math.round(progress * 100.0) / 100.0;
|
||||
}
|
||||
// 若奖励已领取则设置为2
|
||||
if(playerData.isActiveReward(name)) {
|
||||
stack.setAmount(2);
|
||||
} else {
|
||||
stack.setAmount(1);
|
||||
}
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setDisplayName(String.valueOf(progress));
|
||||
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add("§a§l★§7名称: §6§l"+name);
|
||||
int totalMinute = OnlineAPI.getTimeTotal(name);
|
||||
lore.add("§a§l★§7今日活跃: §a"+minute+"分钟");
|
||||
lore.add("§a§l★§7总计活跃: §c"+totalMinute+"分钟");
|
||||
meta.setLore(lore);
|
||||
stack.setItemMeta(meta);
|
||||
NbtItem nbtItem = new NbtItem(stack);
|
||||
nbtItem.setString("apprenticeName", name);
|
||||
return nbtItem.getItem();
|
||||
}
|
||||
}
|
31
src/main/resources/config.yml
Normal file
31
src/main/resources/config.yml
Normal file
|
@ -0,0 +1,31 @@
|
|||
disciple:
|
||||
# 徒弟入服超过 N 天后自动解除关系
|
||||
autoRemoveDays: 30
|
||||
# 玩家等级 ≤ 该值时才允许拜师
|
||||
maxLevelLimit: 80
|
||||
# 玩家入服时间 ≤ N 天(单位:天)才允许拜师
|
||||
maxJoinDays: 30
|
||||
master:
|
||||
# 玩家等级 ≥ 该值时才可收徒
|
||||
levelLimit: 90
|
||||
# 玩家注册时间 ≥ N 天时才可收徒
|
||||
joinDaysLimit: 30
|
||||
# 每位师傅最多拥有的徒弟数量
|
||||
maxDiscipleSize: 25
|
||||
# 徒弟离线超过 3 天后,师傅可解除关系
|
||||
removeAfterOffline: 3
|
||||
rewards:
|
||||
# 徒弟单笔充值超过30元师傅可以获得返利 X %
|
||||
rechargeScale: 0.05
|
||||
# 徒弟达到 X 级后则算完成1个成就目标
|
||||
levelTarget: 80
|
||||
# 徒弟上线时可获得的属性加成
|
||||
attributeList:
|
||||
- '经验加成: 15%'
|
||||
# 当徒弟达到指定人数要求后给予师傅的奖励命令组
|
||||
rewardList_1:
|
||||
- "eco give %player% 100"
|
||||
rewardList_2:
|
||||
- "eco give %player% 100"
|
||||
rewardList_3:
|
||||
- "eco give %player% 100"
|
7
src/main/resources/plugin.yml
Normal file
7
src/main/resources/plugin.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
name: DemonShiTu
|
||||
main: com.yaohun.shitu.StMain
|
||||
version: 3.0.2
|
||||
commands:
|
||||
shitu:
|
||||
aliases: [st]
|
||||
stadmin:
|
Loading…
Reference in New Issue
Block a user