diff --git a/README.md b/README.md index 1de2394..f9a6eb4 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@
- + + # 简介 diff --git a/lib/EssentialsX.jar b/lib/EssentialsX.jar new file mode 100644 index 0000000..d6feb2c Binary files /dev/null and b/lib/EssentialsX.jar differ diff --git a/pom.xml b/pom.xml index 47e9019..1e4f27d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.kamcdrakgod.utility kamc_utility_plugin - Beta1.0.1 + 1.0 kamc_utility_plugin @@ -38,6 +38,13 @@ gson 2.8.8 + + com.earth2me.essentials + EssentialsX + 2.21.0 + system + ${project.basedir}/lib/EssentialsX.jar + diff --git a/src/main/java/com/DrakGod/KaMCUP/AllUse.java b/src/main/java/com/DrakGod/KaMCUP/AllUse.java index d5731e9..bc2da50 100644 --- a/src/main/java/com/DrakGod/KaMCUP/AllUse.java +++ b/src/main/java/com/DrakGod/KaMCUP/AllUse.java @@ -1,19 +1,196 @@ package com.DrakGod.KaMCUP; +import java.io.File; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.logging.Logger; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.Server; import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.bukkit.plugin.PluginManager; +import com.earth2me.essentials.Essentials; + public class AllUse { - Server server = Bukkit.getServer(); + Server server = Bukkit.getServer(); + File pluginfolder = getMain().getDataFolder(); + Logger logger = server.getLogger(); PluginManager pluginmanager = server.getPluginManager(); ConsoleCommandSender console = server.getConsoleSender(); - Logger logger = server.getLogger(); - public Main getMain() { - return Main.getCMain(); + public static Main getMain() {return Main.getCMain();} + public static CheckUpdate getCheckUpdate() {return getMain().CCheckUpdate;} + public static CommandHandler geCommandHandler() {return getMain().CCommandHandler;} + public static Listeners getListeners() {return getMain().CListeners;} + public static TabCompleters getTabCompleters() {return getMain().CTabCompleters;} + + public interface Tab_to_run { + public abstract List run(); + } + + public List Load_File(File file) { + boolean out = false; + try { + out = file.createNewFile(); + } catch(Exception e) { + logger.warning("[KaMC实用插件] 无法创建配置文件:"+file.getName()); + } + return Arrays.asList(out,YamlConfiguration.loadConfiguration(file)); + } + + public void Save_File(FileConfiguration config,File file) { + try { + config.save(file); + } catch (Exception e) { + logger.warning("[KaMC实用插件] 无法保存配置文件:"+file.getName()); + } + } + + public static List get_All_Tasks() { + List tasks = (List) getMain().Daily_Tasks.get("daily_tasks"); + if (tasks == null) { + return new ArrayList(); + } else { + return tasks; + } + } + + public static List get_All_Task_Names() { + List out = new ArrayList(); + List tasks = (List) AllUse.getMain().Daily_Tasks.get("daily_tasks"); + if (tasks == null) {return out;} + tasks.forEach((task) -> {out.add(new ArrayList(task.keySet()).get(0));}); + return out; + } + + public static List get_All_Items() { + List space_name = Stream.of(Material.values()) + .filter(material -> material.isItem()) + .map(material -> material.getKey().toString()) + .collect(Collectors.toList()); + List item_name = Stream.of(Material.values()) + .filter(material -> material.isItem()) + .map(Enum::name) + .collect(Collectors.toList()); + item_name.forEach((name) -> { + space_name.add(name.toLowerCase()); + }); + return space_name; + } + + public static List get_Max_Daily_Task() { + Integer int_max = (int) AllUse.getMain().Daily_Tasks.get("max_daily_task"); + if (int_max == null) { + return Arrays.asList("5"); + } else { + return Arrays.asList(int_max.toString()); + } + } + + public static List get_Random_Tasks() { + int max = new Integer(get_Max_Daily_Task().get(0)); + List AllTasks = get_All_Task_Names(); + int AllTasks_len = AllTasks.toArray().length; + if (AllTasks_len <= max) { + return AllTasks; + } else { + List out = new ArrayList<>(); + String Temp = AllTasks.get(0); + for (int i=0;i tasks = (List) getMain().Daily_Tasks.get("daily_tasks"); + HashMap out = new HashMap(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + HashMap task = iterator.next(); + String task_name = new ArrayList(task.keySet()).get(0); + if (task_name.equalsIgnoreCase(name)) { + out = task.get(task_name); + } + } + return out; + } + + public ItemStack get_Item_At_Name(String name) { + NamespacedKey key = NamespacedKey.fromString(name); + Material material = Material.matchMaterial(key.getKey()); + if (material == null) { + material = Material.matchMaterial(name.toUpperCase()); + if (material == null) { + return null; + } + } + return new ItemStack(material); + } + + public int get_Player_Item_Count(Player player,ItemStack item) { + int count = 0;Iterator iterator = player.getInventory().iterator(); + while (iterator.hasNext()) { + ItemStack oitem = (ItemStack) iterator.next(); + if (oitem != null && oitem.getType() == item.getType()) { + count = count + oitem.getAmount(); + } + } + return count; + } + + public boolean remove_Player_Amount_Item(Player player,ItemStack item,int count) { + int amount = count;PlayerInventory player_inventory = player.getInventory(); + Iterator iterator = player_inventory.iterator(); + boolean removed = false;int i = 0; + while (iterator.hasNext() & amount > 0) { + ItemStack oitem = (ItemStack) iterator.next(); + if (oitem != null && oitem.getType() == item.getType()) { + Integer currentAmount = oitem.getAmount(); + logger.info(currentAmount.toString()); + if (currentAmount <= amount) { + amount -= currentAmount; + player_inventory.setItem(i,new ItemStack(Material.AIR)); + } else { + oitem.setAmount(currentAmount - amount); + amount = 0;removed = true;break; + } + } + i = i + 1; + } + player.updateInventory(); + return removed; + } + + public Essentials get_Essentials() { + return getMain().essentials; + } + + public BigDecimal get_Player_Money(Player player) { + return get_Essentials().getUser(player).getMoney(); + } + + public void set_Player_Money(Player player,BigDecimal money) { + try { + get_Essentials().getUser(player).setMoney(money); + } catch (Exception e) {} } } diff --git a/src/main/java/com/DrakGod/KaMCUP/CommandHandler.java b/src/main/java/com/DrakGod/KaMCUP/CommandHandler.java index a9f1eca..b06d7c5 100644 --- a/src/main/java/com/DrakGod/KaMCUP/CommandHandler.java +++ b/src/main/java/com/DrakGod/KaMCUP/CommandHandler.java @@ -1,34 +1,22 @@ package com.DrakGod.KaMCUP; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; public class CommandHandler extends AllUse implements CommandExecutor{ @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { String CommandName = cmd.getName(); - if (CommandName.equalsIgnoreCase("car")) { - if (sender instanceof Player) { - Player player = (Player) sender; - int wait_time = getMain().Car_Wait_Time.getOrDefault(player.getUniqueId(), 0); - - if (wait_time <= 0) { - player.addScoreboardTag("Cared"); - player.getInventory().addItem(getMain().Train); - - sender.sendMessage("§a已获得§d1§a个§d矿车"); - getMain().Car_Wait_Time.put(player.getUniqueId(), 10); - } else { - sender.sendMessage("§c冷却中,剩余§d"+Integer.toString(wait_time)+"秒"); - } - } else { - sender.sendMessage("§4此命令仅可由玩家执行"); - } - return true; - } - if (CommandName.equalsIgnoreCase("uuid")) { if (args.length == 1) { Player player = server.getPlayer(args[0]); @@ -44,23 +32,225 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String return true; } + if (CommandName.equalsIgnoreCase("dailytask")) { + if (!(sender instanceof Player)) { + sender.sendMessage("§4此命令仅可由玩家执行"); + return true; + } + + Player player = (Player) sender; + if (args.length == 0) { + sender.sendMessage("§6------ ======= 每日任务帮助 ======= ------"); + sender.sendMessage("§b/dailytask put - 提交一个任务"); + sender.sendMessage("§b/dailytask list - 获取今日任务"); + sender.sendMessage("§6------ ======= 每日任务帮助 ======= ------"); + return true; + } + + if (args[0].equalsIgnoreCase("put")) { + if (args.length != 2) { + sender.sendMessage("§4请输入正确的参数"); + return true; + } + String name = args[1]; + List tasks = getMain().Player_Daily_Tasks.getOrDefault(player.getUniqueId(),new ArrayList()); + if (!tasks.contains(name)) { + sender.sendMessage("§4该任务名称不存在"); + return true; + } + HashMap task = get_Daily_Task(name); + ItemStack item = get_Item_At_Name((String) task.get("item")); + int count = get_Player_Item_Count(player,item); + if (count >= (int) task.get("count")) { + remove_Player_Amount_Item(player,item,(int) task.get("count")); + BigDecimal give_money = new BigDecimal(task.get("give_money").toString()); + try { + set_Player_Money(player,get_Player_Money(player).add(give_money)); + } catch (Exception e) {} + + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + String oname = iterator.next(); + if (oname.equalsIgnoreCase(name)) { + tasks.set(tasks.indexOf(oname),oname+" OK"); + } + } + sender.sendMessage("§6提交任务§a成功,§6已获得§e"+task.get("give_money").toString()+"金钱"); + } else { + sender.sendMessage("§4所需物品不足"); + } + return true; + } + + if (args[0].equalsIgnoreCase("list")) { + sender.sendMessage("§6------ ======= 今日任务列表 ======= ------"); + List tasks = getMain().Player_Daily_Tasks.getOrDefault(player.getUniqueId(),new ArrayList()); + tasks.forEach((task) -> { + String is_OK = " - §4未完成"; + if (task.contains(" OK")) { + is_OK = " - §a已完成"; + task = task.replaceAll(" OK",""); + } + HashMap one_task = (HashMap) get_Daily_Task(task); + sender.sendMessage("§b任务名称:"+task+" 需要物品:"+one_task.get("item")+" 需要数量:" + +one_task.get("count")+" 给予金钱:"+one_task.get("give_money")+is_OK); + }); + sender.sendMessage("§6------ ======= 今日任务列表 ======= ------"); + return true; + } + } + if (CommandName.equalsIgnoreCase("kamcup")) { if (args.length == 0 || args[0].equalsIgnoreCase("help")) { sender.sendMessage("§6------ ======= KaMC实用插件帮助 ======= ------"); - getMain().kamcupcmds.forEach((key,value) -> {sender.sendMessage("§b/kamcup "+key+" "+value);}); + getMain().kamcupcmds.forEach((key,value) -> {sender.sendMessage("§b/kamcup "+key+" "+value.get(0));}); sender.sendMessage("§6------ ======= KaMC实用插件帮助 ======= ------"); return true; } + if (!getMain().kamcupcmds.containsKey(args[0])) { + sender.sendMessage("§4没有此命令,请使用/kamcup help查看"); + return true; + } + if (args[0].equalsIgnoreCase("version")) { - sender.sendMessage("§6KaMC实用插件当前版本:"+getMain().CCheckUpdate.getNowVersion()); - sender.sendMessage("§6KaMC实用插件最新版本:"+getMain().CCheckUpdate.getNewVersion()); + sender.sendMessage("§6KaMC实用插件当前版本:"+getCheckUpdate().getNowVersion()); + sender.sendMessage("§6KaMC实用插件最新版本:"+getCheckUpdate().getNewVersion()); + } + + if (args[0].equalsIgnoreCase("dailytask")) { + if (args.length == 1) { + sender.sendMessage("§6------ ======= 每日任务帮助 ======= ------"); + HashMap Temp = (HashMap) getMain().kamcupcmds.get("dailytask").get(1); + Temp.forEach((key,value) -> {sender.sendMessage("§b/kamcup dailytask "+key+" "+value.get(0));}); + sender.sendMessage("§6------ ======= 每日任务帮助 ======= ------"); + return true; + } + + if (Arrays.asList("add","set").contains(args[1])) { + if (args.length != 6) { + sender.sendMessage("§4请输入正确的参数"); + return true; + } + String name = args[2];String item = args[3]; + int count;BigDecimal give_money; + if (args[1].equalsIgnoreCase("add")) { + if (get_All_Task_Names().contains(name)) { + sender.sendMessage("§4该任务名称已存在"); + return true; + } + } else { + if (!get_All_Task_Names().contains(name)) { + sender.sendMessage("§4该任务名称不存在"); + return true; + } + } + + if (!get_All_Items().contains(item)) { + sender.sendMessage("§4该物品名称不存在"); + return true; + } + try { + count = new Integer(args[4]); + give_money = new BigDecimal(args[5]); + int result = give_money.compareTo(new BigDecimal(0)); + if (count <= 0 | result < 0) {int a = 1/0;} + } catch (Exception e) { + sender.sendMessage("§4数量必须为大于0的正整数,给予金钱数量必须为大于0的数"); + return true; + } + + List tasks = get_All_Tasks(); + if (tasks == null) {tasks = new ArrayList();} + if (args[1].equalsIgnoreCase("add")) { + HashMap Temp1 = new HashMap(); + HashMap Temp2 = new HashMap(); + Temp2.put("item",item); + Temp2.put("count",count); + Temp2.put("give_money",give_money); + Temp1.put(name,Temp2); + tasks.add(Temp1); + } else { + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + HashMap task = (HashMap) iterator.next(); + String task_name = new ArrayList(task.keySet()).get(0); + if (name.equalsIgnoreCase(task_name)) { + HashMap Temp = (HashMap) task.get(task_name); + Temp.put("item",item); + Temp.put("count",count); + Temp.put("give_money",give_money); + task.put(task_name,Temp); + tasks.set(tasks.indexOf(task),task); + } + } + } + getMain().Daily_Tasks.set("daily_tasks",tasks); + Save_File(getMain().Daily_Tasks,getMain().Daily_Tasks_File); + if (args[1].equalsIgnoreCase("add")) { + sender.sendMessage("§6添加每日任务:"+name+" 成功"); + } else { + sender.sendMessage("§6修改每日任务:"+name+" 成功"); + } + } + + if (args[1].equalsIgnoreCase("remove")) { + if (args.length != 3) { + sender.sendMessage("§4请输入正确的参数"); + } else { + String name = args[2]; + if (!get_All_Task_Names().contains(name)) { + sender.sendMessage("§4该任务名称不存在"); + return true; + } + + List tasks = get_All_Tasks(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + HashMap task = iterator.next(); + String task_name = new ArrayList(task.keySet()).get(0); + if (task_name.equalsIgnoreCase(name)) { + iterator.remove(); + } + } + getMain().Daily_Tasks.set("daily_tasks",tasks); + Save_File(getMain().Daily_Tasks,getMain().Daily_Tasks_File); + sender.sendMessage("§6删除每日任务:"+name+" 成功"); + } + } + + if (args[1].equalsIgnoreCase("max")) { + if (args.length != 3) { + sender.sendMessage("§6当前每日任务最大数量为:"+get_Max_Daily_Task().get(0)); + } else { + try { + int in_max = new Integer(args[2]); + if (in_max <= 0) {int a = 0 / 0;} + int max = (int) new Integer(get_Max_Daily_Task().get(0)); + getMain().Daily_Tasks.set("max_daily_task",in_max); + Save_File(getMain().Daily_Tasks,getMain().Daily_Tasks_File); + sender.sendMessage("§6当前每日任务最大数量为:"+get_Max_Daily_Task().get(0)); + if (in_max < max) {sender.sendMessage("§e警告:改为更小值第二天生效!");} + } catch (Exception e) { + sender.sendMessage("§4请输入大于0的正整数类型"); + } + } + } + + if (args[1].equalsIgnoreCase("list")) { + sender.sendMessage("§6------ ======= 每日任务列表 ======= ------"); + List tasks = get_All_Tasks(); + tasks.forEach((task) -> { + String task_name = new ArrayList(task.keySet()).get(0); + HashMap one_task = (HashMap) task.get(task_name); + sender.sendMessage("§b名称:"+task_name+" 物品:"+one_task.get("item" + )+" 数量:"+one_task.get("count")+" 给予金钱:"+one_task.get("give_money")); + }); + } } - if (!getMain().kamcupcmds.containsKey(args[0])) { - sender.sendMessage("§4没有此命令,请使用/kamcup help查看");} return true; } return false; } -} +} \ No newline at end of file diff --git a/src/main/java/com/DrakGod/KaMCUP/Listeners.java b/src/main/java/com/DrakGod/KaMCUP/Listeners.java index ce99683..834156d 100644 --- a/src/main/java/com/DrakGod/KaMCUP/Listeners.java +++ b/src/main/java/com/DrakGod/KaMCUP/Listeners.java @@ -1,53 +1,61 @@ package com.DrakGod.KaMCUP; -import org.bukkit.Location; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Minecart; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; +import java.time.LocalDateTime; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + import org.bukkit.event.Listener; -import org.bukkit.event.vehicle.VehicleEnterEvent; -import org.bukkit.event.vehicle.VehicleMoveEvent; +import org.bukkit.scheduler.BukkitRunnable; public class Listeners extends AllUse implements Listener { - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerEnterVehicle(VehicleEnterEvent event) { - if (event.getVehicle().getType() == EntityType.MINECART) { - Minecart minecart = (Minecart) event.getVehicle(); - Player player = (Player) event.getEntered(); - if (player == null || !player.getScoreboardTags().contains("Cared")) {return;} - - minecart.setMaxSpeed(65536); - player.removeScoreboardTag("Cared"); - player.sendTitle("§a欢迎乘坐§bKaMC§e快速列车","§4如果被清除,请重新执行/car"); - } - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onMinecartMove(VehicleMoveEvent event) { - if (!(event.getVehicle() instanceof Minecart)) {return;} - - Minecart minecart = (Minecart) event.getVehicle(); - Player player = (Player) minecart.getPassenger(); - if (player == null) {return;} - - Location from = event.getFrom(); - Location to = event.getTo(); - - double deltaX = to.getX() - from.getX(); - double deltaY = to.getY() - from.getY(); - double deltaZ = to.getZ() - from.getZ(); - - double distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ); - if (distance <= 0) {return;} - - Integer ispeed = (int) (distance * 72.0); - StringBuilder out = new StringBuilder(ispeed.toString()); - while (out.length() < 5) { - out.insert(0, " "); + BukkitRunnable Seconds_Update = new BukkitRunnable() { + @Override + public void run() { + server.getOnlinePlayers().forEach((player) -> { + UUID player_uuid = player.getUniqueId(); + List player_tasks = getMain().Player_Daily_Tasks.getOrDefault(player_uuid,null); + List all_tasks = AllUse.get_All_Task_Names(); + if (player_tasks == null) { + player_tasks = AllUse.get_Random_Tasks(); + } else { + Iterator iterator = player_tasks.iterator(); + while (iterator.hasNext()) { + String task = iterator.next(); + if (!all_tasks.contains(task) & !task.contains(" OK")) { + player_tasks = AllUse.get_Random_Tasks(); + break; + } + } + + int player_task_lenth = player_tasks.toArray().length; + if (player_task_lenth < new Integer(get_Max_Daily_Task().get(0))) { + if (player_task_lenth < all_tasks.toArray().length) { + iterator = all_tasks.iterator(); + while (iterator.hasNext()) { + String task = iterator.next(); + if (!player_tasks.contains(task)) { + player_tasks.add(task); + } + player_task_lenth = player_tasks.toArray().length; + if (player_task_lenth == new Integer(get_Max_Daily_Task().get(0))){ + break; + } + } + } + } + } + getMain().Player_Daily_Tasks.put(player_uuid,player_tasks); + }); + + getMain().now = LocalDateTime.now(); + if (getMain().now.isAfter(getMain().midnightToday)) { + server.getOnlinePlayers().forEach((player) -> { + getMain().Player_Daily_Tasks.put(player.getUniqueId(),get_Random_Tasks()); + }); + getMain().midnightToday = getMain().now.toLocalDate().atStartOfDay().plusDays(1); + } } - - player.sendActionBar("当前速度:" + out + " km/h"); - } + }; } + diff --git a/src/main/java/com/DrakGod/KaMCUP/Main.java b/src/main/java/com/DrakGod/KaMCUP/Main.java index 5fc663f..400552e 100644 --- a/src/main/java/com/DrakGod/KaMCUP/Main.java +++ b/src/main/java/com/DrakGod/KaMCUP/Main.java @@ -1,46 +1,49 @@ package com.DrakGod.KaMCUP; -import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.PluginCommand; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.scheduler.BukkitRunnable; +import com.earth2me.essentials.Essentials; + +import java.io.File; +import java.io.InputStreamReader; +import java.time.LocalDateTime; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.UUID; import java.util.logging.Logger; public class Main extends JavaPlugin { - Server server = Bukkit.getServer(); + Server server = getServer(); + File pluginfolder = getDataFolder(); + Logger logger = server.getLogger(); PluginManager pluginmanager = server.getPluginManager(); ConsoleCommandSender console = server.getConsoleSender(); - Logger logger = server.getLogger(); + Essentials essentials = (Essentials) pluginmanager.getPlugin("Essentials"); - HashMap kamcupcmds = new HashMap(); - HashMap Car_Wait_Time = new HashMap(); + HashMap kamcupcmds = new HashMap(); + HashMap Player_Daily_Tasks = new HashMap(); ItemStack Train = new ItemStack(Material.MINECART); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime midnightToday = now.toLocalDate().atStartOfDay().plusDays(1); - CheckUpdate CCheckUpdate = new CheckUpdate(); - CommandHandler CCommandHandler = new CommandHandler(); - Listeners CListeners = new Listeners(); - TabCompleters CTabCompleters = new TabCompleters(); - private static Main CMain; - - BukkitRunnable CWTremove = new BukkitRunnable() { - @Override - public void run() { - Car_Wait_Time.forEach((key,value) -> { - if (Car_Wait_Time.get(key) > 0) { - Car_Wait_Time.put(key, value-1); - } - }); - } - }; + public FileConfiguration Daily_Tasks; + public File Daily_Tasks_File; + public static Main CMain; + public AllUse CAllUse; + public CheckUpdate CCheckUpdate; + public CommandHandler CCommandHandler; + public Listeners CListeners; + public TabCompleters CTabCompleters; BukkitRunnable UCMain = new BukkitRunnable() {@Override public void run() {CMain = getThis();}}; public Main getThis() {return this;} @@ -48,34 +51,106 @@ public void run() { @Override public void onEnable() { - kamcupcmds.put("help","- 获取帮助"); - kamcupcmds.put("version","- 获取当前版本"); + AllUse.Tab_to_run get_alltasks = new AllUse.Tab_to_run() { + @Override + public List run() {return AllUse.get_All_Task_Names();} + }; - ItemMeta Train_Name = Train.getItemMeta(); - Train_Name.setItemName("列车"); - Train.setItemMeta(Train_Name); - - pluginmanager.registerEvents(CListeners,this); - CWTremove.runTaskTimer(this, 20, 20); + AllUse.Tab_to_run get_allitems = new AllUse.Tab_to_run() { + @Override + public List run() {return AllUse.get_All_Items();} + }; + + AllUse.Tab_to_run get_tasksmax = new AllUse.Tab_to_run() { + @Override + public List run() {return AllUse.get_Max_Daily_Task();} + }; + + HashMap addset_hashmap = new HashMap() {{ + put("|to_run|",Arrays.asList("",new HashMap() {{ + put("|to_run|",Arrays.asList("",new HashMap() {{ + put("1", Arrays.asList("",new HashMap() {{ + put("1", Arrays.asList()); + }})); + }},get_allitems)); + }},get_alltasks)); + }}; + + kamcupcmds.put("help",Arrays.asList("- 获取帮助",new HashMap<>())); + kamcupcmds.put("version",Arrays.asList("- 获取当前版本",new HashMap<>())); + + if (essentials != null) { + kamcupcmds.put("dailytask",Arrays.asList("- 查看每日任务系统",new HashMap() {{ + put("add",Arrays.asList(" - 添加任务",addset_hashmap)); + put("set",Arrays.asList(" - 设置任务",addset_hashmap)); + put("remove",Arrays.asList(" - 删除任务",new HashMap() {{ + put("|to_run|",Arrays.asList("",new HashMap<>(),get_alltasks)); + }})); + put("max",Arrays.asList(" - 设置每日最大任务数",new HashMap() {{ + put("|to_run|",Arrays.asList("",new HashMap<>(),get_tasksmax)); + }})); + put("list",Arrays.asList("- 列出任务",new HashMap<>())); + }})); + } + + CMain = getThis(); UCMain.runTaskTimer(this, 0, 1); - CCheckUpdate.CheckUpdateMain.runTaskTimer(this, 20, 72000); + CAllUse = new AllUse(); + CCheckUpdate = new CheckUpdate(); + CCommandHandler = new CommandHandler(); + CListeners = new Listeners(); + CTabCompleters = new TabCompleters(); + + if (!pluginfolder.exists()) { + pluginfolder.mkdir(); + } + Daily_Tasks_File = new File(pluginfolder,"Daily_Tasks.yml"); + List Daily_Tasks_Load_Out = CAllUse.Load_File(Daily_Tasks_File); + if ((boolean) Daily_Tasks_Load_Out.get(0)) { + Daily_Tasks = YamlConfiguration.loadConfiguration(new InputStreamReader(getClass().getResourceAsStream("/Daily_Tasks.yml"))); + } else { + Daily_Tasks = (FileConfiguration) Daily_Tasks_Load_Out.get(1); + } + if (Daily_Tasks != null) { + CAllUse.Save_File(Daily_Tasks,Daily_Tasks_File); + } else { + logger.warning("无法加载配置文件:Daily_Tasks.yml"); + } + + pluginmanager.registerEvents(CListeners,this); + CListeners.Seconds_Update.runTaskTimer(this, 20, 20); + CCheckUpdate.CheckUpdateMain.runTaskTimer(this, 20, 864000); PluginCommand kamcup = this.getCommand("kamcup"); - PluginCommand car = this.getCommand("car"); PluginCommand uuid = this.getCommand("uuid"); + PluginCommand dailytask = this.getCommand("dailytask"); + if (essentials != null) { + dailytask.setExecutor(CCommandHandler); + dailytask.setTabCompleter(CTabCompleters); + } kamcup.setExecutor(CCommandHandler); kamcup.setTabCompleter(CTabCompleters); - car.setExecutor(CCommandHandler); uuid.setExecutor(CCommandHandler); + if (essentials == null) { + dailytask.setPermission("kamcup.null"); + logger.warning("[KaMC实用插件] 未加载essentials服务,无法使用/dailytask指令"); + } else { + dailytask.setPermission("kamcup.commands.dailytask"); + } + logger.info("[KaMC实用插件] 插件成功启用"); } @Override public void onDisable() { - CCheckUpdate.CheckUpdateMain.cancel(); - CWTremove.cancel(); - Car_Wait_Time.clear(); + try { + CCheckUpdate.CheckUpdateMain.cancel(); + CListeners.Seconds_Update.cancel(); + } catch (Exception e) { + logger.warning("[KaMC实用插件] 禁用时出现错误:"+e.toString()); + } + logger.info("[KaMC实用插件] 插件已被禁用"); } } \ No newline at end of file diff --git a/src/main/java/com/DrakGod/KaMCUP/TabCompleters.java b/src/main/java/com/DrakGod/KaMCUP/TabCompleters.java index 27a4687..1f4146e 100644 --- a/src/main/java/com/DrakGod/KaMCUP/TabCompleters.java +++ b/src/main/java/com/DrakGod/KaMCUP/TabCompleters.java @@ -1,19 +1,65 @@ package com.DrakGod.KaMCUP; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; public class TabCompleters extends AllUse implements TabCompleter{ + public int i; + public List Temp1; + public HashMap Temp2; + @Override public List onTabComplete(CommandSender sender, Command cmd, String alias, String[] args) { List completions = new ArrayList<>(); if (cmd.getName().equalsIgnoreCase("kamcup")) { if (args.length == 1) { getMain().kamcupcmds.forEach((key,value) -> {completions.add(key);}); + } else { + Temp1 = getMain().kamcupcmds.getOrDefault(args[0],Arrays.asList("",new HashMap())); + Temp2 = (HashMap) Temp1.get(1); + + try { + for (i=2;i {if (key.contains("|to_run|")) {Temp1 = value;}}); + Temp2 = (HashMap) Temp1.get(1); + } + } catch (Exception e) { + return completions; + } + + Temp2.forEach((key,value) -> { + if (key.contains("|to_run|")) { + AllUse.Tab_to_run Temp3 = (AllUse.Tab_to_run) value.get(2); + Temp3.run().forEach((str) -> {completions.add(str);}); + } else { + completions.add(key); + } + }); + } + } + if (cmd.getName().equalsIgnoreCase("dailytask")) { + if (args.length == 1) { + Arrays.asList("put","list").forEach((value) -> {completions.add(value);}); + } + + if (args[0].equalsIgnoreCase("put") & args.length == 2) { + if (sender instanceof Player) { + Player player = (Player) sender; + List tasks = getMain().Player_Daily_Tasks.getOrDefault(player.getUniqueId(),new ArrayList()); + tasks.forEach((value) -> { + if (!value.contains("OK")) { + completions.add(value); + } + }); + } } } return completions; diff --git a/src/main/resources/Daily_Tasks.yml b/src/main/resources/Daily_Tasks.yml new file mode 100644 index 0000000..e5d3435 --- /dev/null +++ b/src/main/resources/Daily_Tasks.yml @@ -0,0 +1,6 @@ +max_daily_task: 5 +daily_tasks: +- Test: + item: apple + count: 1 + give_money: !!float '1' \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 31013a2..aed2ba8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,23 +1,23 @@ name: KaMC_UtilityPlugin main: com.DrakGod.KaMCUP.Main -version: Beta1.0.1 +version: 1.0 api-version: 1.20.6 description: 这是一个专门为KaMC打造的插件 authors: [Drakgod] website: https://www.kamc.fun +depend: [Essentials] commands: kamcup: description: KaMC实用插件主指令 - usage: /help + usage: /kamcup permission: kamcup.commands.kamcup - car: - description: 领取一个矿车,冷却10秒 - usage: /car - permission: kamcup.commands.car uuid: description: 获取一个玩家的uuid usage: /uuid permission: kamcup.commands.uuid + dailytask: + description: 任务系统指令 + usage: /dailytask [name] permissions: kamcup.*: @@ -25,6 +25,9 @@ permissions: default: op children: kamcup.admin: true + kamcup.null: + description: Null权限 + default: false kamcup.admin: description: 授予管理员权限 default: false @@ -35,14 +38,14 @@ permissions: default: false children: kamcup.commands.kamcup: true - kamcup.commands.car: true kamcup.commands.uuid: true + kamcup.commands.dailytask: true kamcup.commands.kamcup: description: 授予执行/kamcup里所有指令的权限 default: false - kamcup.commands.car: - description: 授予执行/car权限 - default: true kamcup.commands.uuid: description: 授予执行/uuid权限 - default: false \ No newline at end of file + default: false + kamcup.commands.dailytask: + description: 授予执行/dailytask权限 + default: true \ No newline at end of file