本插件是一个消费飞行插件,主要就是让玩家消费vault的金钱或者消费经验来飞行,源码是使用maven来构建的
思路:
由主类onEnable()方法初始化,1.保存默认配置 2.将配置类保存到ConfigUtil中 3.注册command 4.加载vault插件 5.注册玩家的事件监听
复制代码
当玩家输入命令时,通过ConsumflyCommandExecutor类来实例化对应的消费类,并调用对应消费类fly()方法,在消费接口的实现类中去设置飞行并扣除等级或金钱
复制代码
consume接口:
复制代码消费等级飞行的实现类
复制代码消费金钱飞行的实现类
复制代码源码下载
思路:
由主类onEnable()方法初始化,1.保存默认配置 2.将配置类保存到ConfigUtil中 3.注册command 4.加载vault插件 5.注册玩家的事件监听
- package xin.rainyn.consumefly;
- //import省略
- /**
- * 消费飞行
- * [url=home.php?mod=space&uid=1231151]@author[/url] Rainyner
- *
- */
- public class ConsumeFly extends JavaPlugin{
-
- @Override
- public void onDisable() {
- super.onDisable();
- Logger.debug("消费飞行插件已卸载!!! 作者:Rainyner");
- }
- @Override
- public void onEnable() {
- super.onEnable();
- //保存默认配置文件,并获取到配置文件
- saveDefaultConfig();
- ConfigUtil.getConfig().setFileConfiguration(getConfig());
- //设置命令对象
- getCommand("consumefly").setExecutor(new ConsumflyCommandExecutor());
- //加载vault插件
- if(ConfigUtil.getConfig().isVaultEnable() && !loadVault()) {
- Logger.consoleError("初始化Vault支持失败,请检测是否已经安装Vault插件,已禁用消费飞行插件!!!");
- }
- //注册玩家的事件监听
- Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);
-
- //保存当前主类
- Logger.CONSUMEFLY = this;
- Logger.info("消费飞行插件已启用!!! 作者:Rainyner","调试输出:"+(ConfigUtil.getConfig().isDebug()?"是":"否"));
-
- //配置文件调试输出
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "玩家加入显示提示信息:"+(ConfigUtil.getConfig().isPlayerJoinMessageEnable()?"是":"否"));
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "玩家加入提示消息:");
- for(String str : ConfigUtil.getConfig().getPlayerJoinMessage()) {
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + str);
- }
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "消费经验飞行:"+(ConfigUtil.getConfig().isLevelEnable()?"是":"否"));
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "未启用消费经验飞行的提示语:"+(ConfigUtil.getConfig().getLevelMessage()));
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "1级经验可飞行时间(秒):"+(ConfigUtil.getConfig().getLevelTime()));
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "消费金币飞行:"+(ConfigUtil.getConfig().isVaultEnable()?"是":"否"));
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "未启用消费金币飞行的提示语:"+(ConfigUtil.getConfig().getVaultMessage()));
- Logger.consoleDebug(ColorUtil.GREEN_DAN_A + "1金币可飞行时间(秒):"+(ConfigUtil.getConfig().getVaultTime()));
-
- }
-
- private boolean loadVault() {
- boolean hasNull = false;
- //初始化经济系统实例
- RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
- if (economyProvider != null) {
- if ((EconomyUtil.economy = economyProvider.getProvider()) == null) hasNull = true;
- }
- return !hasNull;
- }
- @Override
- public void onLoad() {
- super.onLoad();
- Logger.setLogger(getLogger());
- Logger.info("消费飞行插件已加载!!! 作者:Rainyner");
- }
-
- }
当玩家输入命令时,通过ConsumflyCommandExecutor类来实例化对应的消费类,并调用对应消费类fly()方法,在消费接口的实现类中去设置飞行并扣除等级或金钱
- package xin.rainyn.consumefly.command;
- //import省略
- public class ConsumflyCommandExecutor implements CommandExecutor{
- public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
- if(!cmd.getName().equalsIgnoreCase("consumefly")) {
- return false;
- }
- //判断是否是玩家,不是玩家提示信息
- if(!(sender instanceof Player)) {
- sender.sendMessage(Logger.addPrefix("请在游戏内使用此命令,谢谢!!!"));
- return true;
- }
- //强转为玩家类
- Player player = (Player)sender;
-
- //没有参数,显示帮助信息
- if(args.length == 0) {
- sendHelp(player);
- return true;
- }
- //帮助信息显示
- if(args.length >= 1 && ("help".equals(args[0]) || "?".equals("args[0]"))) {
- sendHelp(player);
- return true;
- }
- //根据第一个参数设置消费的类型
- if(args.length >= 1 && ("info".equals(args[0]))) {
- info(player);
- return true;
- }
- Consume consume = null;
- if(args.length >= 1 && ("level".equals(args[0]))) {
- consume = new LevelConsumeImpl();
- }
- if(args.length >= 1 && ("vault".equals(args[0]))) {
- consume = new VaultConsumeImpl();
- }
- if(consume != null) {
- consume.fly(player, args);
- }else {
- player.sendMessage(ColorUtil.RED_4 + "请输入正确的参数!!!");
- }
- return true;
- }
-
-
- private void info(Player player) {
- Map<String,String> map = new HashMap<String,String>();
- map.put("消费经验飞行:", ConfigUtil.getConfig().isLevelEnable()?"是":"否");
- map.put("1级经验可飞行时间(秒):", ConfigUtil.getConfig().getLevelTime()+"");
- map.put("消费金币飞行:", ConfigUtil.getConfig().isVaultEnable()?"是":"否");
- map.put("1金币可飞行时间(秒):", ConfigUtil.getConfig().getVaultTime()+"");
- sendMap(player,map);
- }
- /**
- * 给玩家发送帮助信息
- * @param player
- */
- private void sendHelp(Player player) {
- Map<String,String> map = new HashMap<String,String>();
- map.put("/costfly info", "查询能够使用的消费方式");
- map.put("/costfly level num <num>", "使用等级飞行");
- map.put("/costfly level time <num>", "使用多少等级飞行多少秒");
- map.put("/costfly vault num <num>", "使用多少金币飞行");
- map.put("/costfly vault time <num>", "使用金币飞行多少秒");
- sendMap(player,map);
- }
-
- private void sendMap(Player player, Map<String, String> map) {
- player.sendMessage(ColorUtil.appendString(ColorUtil.LAN_1, "======================== ",ColorUtil.QING_DAN_3,"消费飞行",ColorUtil.LAN_1, " ========================"));
- for( Entry<String, String> entry : map.entrySet()) {
- player.sendMessage(ColorUtil.appendString(ColorUtil.PINK_DAN_5,entry.getKey()," ",ColorUtil.GREEN_2,entry.getValue()));
- }
- player.sendMessage(ColorUtil.appendString(ColorUtil.LAN_1, "==========================================================="));
- }
- }
consume接口:
- package xin.rainyn.consumefly.consume;
- import org.bukkit.entity.Player;
- /**
- * 所有的消费
- * @author Rainyner
- *
- */
- public interface Consume {
- /**
- * 飞行统一对外函数
- * @param player
- * @param args
- */
- public void fly(Player player, String... args);
- }
- package xin.rainyn.consumefly.consume.impl;
- //import 省略
- public class LevelConsumeImpl implements Consume{
- public void fly(Player player, int num) {
- //判断是否已经开启等级飞行
- if(ConfigUtil.getConfig().isLevelEnable()) {
- //判断等级是否足够
- if(player.getLevel() >= num) {
- //计算飞行多长时间
- Long time = num * ConfigUtil.getConfig().getLevelTime();
- //扣除等级
- player.setLevel(player.getLevel() - num);
- //启动线程计时,到时停止飞行
- FlyRunnable runnable = new FlyRunnable(time, player);
- runnable.runTask(Logger.CONSUMEFLY);
- player.sendMessage(Logger.addPrefix("您使用"+num+"级来飞行"+time+"秒!!!"));
- }else {
- player.sendMessage(Logger.addPrefix("您当前等级不足,请先升级!!!"));
- }
- }else {
- player.sendMessage(Logger.addPrefix(ConfigUtil.getConfig().getLevelMessage()));
- }
- }
- public void flyTime(Player player, Long time) {
- //判断是否已经开启等级飞行
- if(ConfigUtil.getConfig().isLevelEnable()) {
- //计算需要多少等级
- int num = (int) (time / ConfigUtil.getConfig().getLevelTime());
- //如果不能整除,要多扣一级
- if(time % ConfigUtil.getConfig().getLevelTime() > 0) {
- num++;
- }
- //判断等级是否足够
- if(player.getLevel() >= num) {
- //扣除等级
- player.setLevel(player.getLevel() - num);
- //启动线程计时,到时停止飞行
- FlyRunnable runnable = new FlyRunnable(time, player);
- runnable.runTask(Logger.CONSUMEFLY);
- player.sendMessage(Logger.addPrefix("您使用"+num+"级来飞行"+time+"秒!!!"));
- }else {
- player.sendMessage(Logger.addPrefix("您当前等级不足,请先升级!!!"));
- }
- }else {
- player.sendMessage(Logger.addPrefix(ConfigUtil.getConfig().getLevelMessage()));
- }
- }
-
-
- public void fly(Player player, String... args) {
- //先判断是否已经可以飞行
- if(player.getAllowFlight()) {
- player.sendMessage(Logger.addPrefix("您已拥有飞行权限,无需再消费飞行!!!"));
- }else {
- if(args.length == 3) {
- if("num".equals(args[1])) {
- if(StringUtil.isInteger(args[2])) {
- this.fly(player, Integer.parseInt(args[2]));
- }else {
- player.sendMessage(Logger.addPrefix("请输入正确的参数!!!"));
- }
- }
- if("time".equals(args[1])) {
- if(StringUtil.isInteger(args[2])) {
- this.flyTime(player, Long.parseLong(args[2]));
- }else {
- player.sendMessage(Logger.addPrefix("请输入正确的参数!!!"));
- }
- }
- }else {
- player.sendMessage(Logger.addPrefix("请输入正确的参数!!!"));
- }
- }
- }
- }
- package xin.rainyn.consumefly.consume.impl;
- //import 省略
- public class VaultConsumeImpl implements Consume{
- public void fly(Player player, int num) {
- //判断是否已经开启等级飞行
- if(ConfigUtil.getConfig().isLevelEnable()) {
- //判断金钱是否足够
- if(EconomyUtil.economy.has(player, num)) {
- //计算飞行多长时间
- Long time = num * ConfigUtil.getConfig().getVaultTime();
- //扣除金币
- EconomyResponse response = EconomyUtil.economy.withdrawPlayer(player, num);
- if(response.type == ResponseType.SUCCESS) {
- //启动线程计时,到时停止飞行
- FlyRunnable runnable = new FlyRunnable(time, player);
- runnable.runTask(Logger.CONSUMEFLY);
- player.sendMessage(Logger.addPrefix("您使用"+num+"金币来飞行"+time+"秒!!!"));
- }else {
- player.sendMessage(Logger.addPrefix(ColorUtil.RED_4+"金钱扣除失败:"+response.errorMessage));
- }
- }else {
- player.sendMessage(Logger.addPrefix("您的金币不足"+num+",不能启动飞行!!!"));
- }
- }else {
- player.sendMessage(Logger.addPrefix(ConfigUtil.getConfig().getLevelMessage()));
- }
- }
- public void flyTime(Player player, Long time) {
- //判断是否已经开启等级飞行
- if(ConfigUtil.getConfig().isLevelEnable()) {
- //计算需要多少金币
- int num = (int) (time / ConfigUtil.getConfig().getVaultTime());
- //如果不能整除,要多扣1金币
- if(time % ConfigUtil.getConfig().getLevelTime() > 0) {
- num++;
- }
- //判断金币是否足够
- if(EconomyUtil.economy.has(player, num)) {
- //扣除金币
- EconomyResponse response = EconomyUtil.economy.withdrawPlayer(player, num);
- if(response.type == ResponseType.SUCCESS) {
- //启动线程计时,到时停止飞行
- FlyRunnable runnable = new FlyRunnable(time, player);
- runnable.runTask(Logger.CONSUMEFLY);
- player.sendMessage(Logger.addPrefix("您使用"+num+"金币来飞行"+time+"秒!!!"));
- }else {
- player.sendMessage(Logger.addPrefix(ColorUtil.RED_4+"金钱扣除失败:"+response.errorMessage));
- }
- }else {
- player.sendMessage(Logger.addPrefix("您当前等级不足,请先升级!!!"));
- }
- }else {
- player.sendMessage(Logger.addPrefix(ConfigUtil.getConfig().getLevelMessage()));
- }
- }
- public void fly(Player player, String... args) {
- //先判断是否已经可以飞行
- if(player.getAllowFlight()) {
- player.sendMessage(Logger.addPrefix("您已拥有飞行权限,无需再消费飞行!!!"));
- }else {
- if(args.length == 3) {
- if("num".equals(args[1])) {
- if(StringUtil.isInteger(args[2])) {
- this.fly(player, Integer.parseInt(args[2]));
- }else {
- player.sendMessage(Logger.addPrefix("请输入正确的参数!!!"));
- }
- }
- if("time".equals(args[1])) {
- if(StringUtil.isInteger(args[2])) {
- this.flyTime(player, Long.parseLong(args[2]));
- }else {
- player.sendMessage(Logger.addPrefix("请输入正确的参数!!!"));
- }
- }
- }else {
- player.sendMessage(Logger.addPrefix("请输入正确的参数!!!"));
- }
- }
- }
- }
本帖最后由 gjmeng 于 2018-5-20 10:11 编辑
本插件只是用于学习交流,由于有些bug,所以不要放到自己的服里使用下载地址重新附上:链接:https://pan.baidu.com/s/19STX51oV2tJjg3Fx91It7g 密码:ej25
github:https://github.com/gjmeng/ConsumeFly
本插件只是用于学习交流,由于有些bug,所以不要放到自己的服里使用下载地址重新附上:链接:https://pan.baidu.com/s/19STX51oV2tJjg3Fx91It7g 密码:ej25
github:https://github.com/gjmeng/ConsumeFly
大佬大佬,真是个666的插件
分享源码请使用github
你好,在下想和你讨论一个project,请问您的联系方式是?
Create_Dreams 发表于 2018-5-20 22:34
你好,在下想和你讨论一个project,请问您的联系方式是?
可以加Q:913706016
感谢分享,支持一下~
支持一下,不过以后分享源码还是建议使用github或者coding

支持一下。