diff --git a/Knickers/plugin.yml b/Knickers/plugin.yml index 623e06e..0402d13 100644 --- a/Knickers/plugin.yml +++ b/Knickers/plugin.yml @@ -2,7 +2,7 @@ name: Knickers main: xiaokai.knickers.Knickers api: - 1.0.0 -version: 1.1d +version: 1.1.1d load: POSTWORLD website: http://EpicFX.cn description: 多功能菜单,如传送、命令、提示等功能,并且支持多功能个人商店!并且支持自定义商品搜索等!后期还会加入更多功能哦! diff --git a/Knickers/resources/Config.yml b/Knickers/resources/Config.yml index 62b011b..85f7d38 100644 --- a/Knickers/resources/Config.yml +++ b/Knickers/resources/Config.yml @@ -11,4 +11,4 @@ 仅允许白名单管理菜单: false 白名单: [] 定时检查快捷工具间隔: 60 -是否允许玩家丢弃快捷工具: false \ No newline at end of file +是否允许玩家丢弃快捷工具: false diff --git a/Knickers/resources/Message.yml b/Knickers/resources/Message.yml index de4badc..2a78c6d 100644 --- a/Knickers/resources/Message.yml +++ b/Knickers/resources/Message.yml @@ -17,7 +17,7 @@ 没有按钮时提示: §4这个页面还不存在按钮哦!快去找管理员添加一个吧~ 权限不足: §4你无权限执行此操作! 金币不足: §4您的{MoneyName}不足!{n}{n}{n}{n} -撤销丢掉快捷工具的提示: §6{ItemName}§f(§9{{ItemID}}§f)§4是你的命根子!你不能丢掉你的命根子! +撤销丢掉快捷工具的提示: §6{ItemName}§f(§9{ItemID}§f)§4是你的命根子!你不能丢掉你的命根子! 命令: 无法打开界面: §4无法打开此界面!{Error} 未输入想要打开的界面的配置文件名: 请输入想要打开的界面的配置文件名(支持只输入部分) diff --git a/Knickers/src/xiaokai/knickers/event/PlayerEvent.java b/Knickers/src/xiaokai/knickers/event/PlayerEvent.java index 43fa795..a0c06cd 100644 --- a/Knickers/src/xiaokai/knickers/event/PlayerEvent.java +++ b/Knickers/src/xiaokai/knickers/event/PlayerEvent.java @@ -1,9 +1,11 @@ package xiaokai.knickers.event; import cn.nukkit.Player; +import cn.nukkit.Server; import cn.nukkit.event.EventHandler; import cn.nukkit.event.Listener; import cn.nukkit.event.block.BlockBreakEvent; +import cn.nukkit.event.inventory.InventoryMoveItemEvent; import cn.nukkit.event.player.PlayerDropItemEvent; import cn.nukkit.event.player.PlayerInteractEvent; import cn.nukkit.event.player.PlayerInteractEvent.Action; @@ -26,8 +28,16 @@ public PlayerEvent(Kick kick) { this.kick = kick; } + public void onIMI(InventoryMoveItemEvent e) { + Server.getInstance().broadcastMessage("asdasd"); + Item item = e.getItem(); + if (e.getAction().equals(cn.nukkit.event.inventory.InventoryMoveItemEvent.Action.DROP) + && Belle.isMaterials(item) && !kick.config.getBoolean("是否允许玩家将快捷工具装箱")) + e.setCancelled(); + } + @EventHandler - public void onSB(PlayerDropItemEvent e) { + public void onDropItem(PlayerDropItemEvent e) { Item item = e.getItem(); if (kick.config.getBoolean("是否允许玩家丢弃快捷工具") || !Belle.isMaterials(item)) return; @@ -62,8 +72,7 @@ public void onBreak(BlockBreakEvent e) { public void onClick(PlayerInteractEvent e) { Player player = e.getPlayer(); Action ac = e.getAction(); - if ((ac == Action.LEFT_CLICK_AIR || ac == Action.LEFT_CLICK_BLOCK || ac == Action.RIGHT_CLICK_AIR - || ac == Action.RIGHT_CLICK_BLOCK) && Belle.isMaterials(e.getItem())) { + if (!ac.equals(Action.PHYSICAL) && Belle.isMaterials(e.getItem())) { MakeForm.Main(player); if (kick.config.getBoolean("打开撤销")) e.setCancelled(); diff --git a/Knickers/src/xiaokai/knickers/form/MakeForm.java b/Knickers/src/xiaokai/knickers/form/MakeForm.java index 658ec16..3e3951b 100644 --- a/Knickers/src/xiaokai/knickers/form/MakeForm.java +++ b/Knickers/src/xiaokai/knickers/form/MakeForm.java @@ -148,12 +148,14 @@ public static boolean OpenMenu(Player player, File file, boolean isBack, boolean public static boolean Main(Player player) { Kick kick = Kick.kick; MyPlayer myPlayer = kick.PlayerDataMap.get(player.getName()); + myPlayer = myPlayer == null ? new MyPlayer(player) : myPlayer; if (myPlayer.loadTime == null || Duration.between(myPlayer.loadTime, Instant.now()).toMillis() > kick.config.getInt("屏蔽玩家双击间隔")) myPlayer.loadTime = Instant.now(); else return false; myPlayer.OpenMenuList = new ArrayList(); + kick.PlayerDataMap.put(player.getName(), myPlayer); return OpenMenu(player, new File(kick.mis.getDataFolder(), kick.MainFileName), true, true); } diff --git a/Knickers/src/xiaokai/knickers/form/OpenButton.java b/Knickers/src/xiaokai/knickers/form/OpenButton.java index 848b5c9..241f058 100644 --- a/Knickers/src/xiaokai/knickers/form/OpenButton.java +++ b/Knickers/src/xiaokai/knickers/form/OpenButton.java @@ -119,7 +119,23 @@ private boolean openTp() { new Object[] { player.getName(), "无法获取目标世界名称!" })); } String World = String.valueOf(Item.get("World")); - Level level = Server.getInstance().getLevelByName(World); + Level level = null; + Map levels = Server.getInstance().getLevels(); + for (Integer i : levels.keySet()) + if (levels.get(i).getFolderName().equals(World)) + level = levels.get(i); + if (level == null) + for (Integer i : levels.keySet()) + if (levels.get(i).getFolderName().toLowerCase().equals(World.toLowerCase())) + level = levels.get(i); + if (level == null) + for (Integer i : levels.keySet()) + if (levels.get(i).getFolderName().contains(World)) + level = levels.get(i); + if (level == null) + for (Integer i : levels.keySet()) + if (levels.get(i).getFolderName().toLowerCase().contains(World.toLowerCase())) + level = levels.get(i); if (level == null) { kick.mis.getLogger().error("一个按钮的数据可能发生了错误!按钮类型为:传送,数据错误项:无法获取目标世界对象!请检查"); return MakeForm.Tip(player, Kick.kick.Message.getSon("界面", "打开按钮失败", new String[] { "{Player}", "{Error}" }, diff --git a/Knickers_1.1.1d.jar b/Knickers_1.1.1d.jar new file mode 100644 index 0000000..3ac7dee Binary files /dev/null and b/Knickers_1.1.1d.jar differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..c4f9e06 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +

Knickers - 多功能菜单

+
+ +## Knickers 是什么? + +一个[NukkitX](https://github.com/NukkitX/Nukkit)多功能自定义GUi菜单插件 + +## Knickers 有哪些功能? +> - 拥有高度自由的可配置文件 +> - 多种UI(多按钮,确认框,杂项form) +> - 按钮前显示自定义图片(资源包or网络图片) +> - 点击按钮执行命令(控制台or玩家) +> - 命令可设置变量,在玩家使用该按钮时,插件会自动解析所需变量并设置编辑框要求玩家输入 +> - 点击按钮打开界面(自定义界面) +> - 拥有高度自由的可配置商店 +> - 多种商店购买方式 +> - 自动获取物品图标 +> - 智能控制黑名单白名单 +> - 智能个人商店 +> - 个人商店支持自定义搜索,快速搜索需要购买的物品,方便又快捷 +> - 玩家可见文本几乎已实现100%可自定义!难道您不想有一个个性的标签? +> - 往下看!您将会收获更多! +## Knickers 该如何使用? + +#### 命令介绍 +Knickers 该如何使用? + +| 命令 | 描述 | 用法 | 权限 | 适用对象 | +| ---- | :--: | :--: | :--: | :--: | +| /mis admin| 添加或删除管理员权限 | /admin help | Knickers.Command.main | 服务器管理员及控制台 | +| /mis show | 打开一个界面[文件名支持只写部分] | /mis show <文件名> | Knickers.Command.main | 所有玩家 | +| /mis help | 打开命令帮助 | /mis help | Knickers.Command.main | 所有玩家 | +| /mis | 打开主页并且检查是否拥有快捷工具 | /mis | Knickers.Command.main | 所有玩家 | + +> - [x] [或许您需要查看帮助文档?](http://doc.epicfx.cn/Docs/MiniatureS/MiniatureS自定义控件介绍.docx) + +#### 依赖: +> - 本插件当前需要[EconomyAPI](https://nukkitx.com/resources/economyapi.14/)的支持才能正常使用所有功能 +#### PocketMine-MP : +> - 或许您需要一个PM版本的Mis?没问题就在这了![PocketMine-MP版本](https://github.com/xkmp/MiniatureS-PHP) +#### 计划实现功能 +> - [x] 支持创建多个按钮 +> - [x] 点击按钮执行命令(控制台or玩家) +> - [x] 点击按钮打开界面(自定义界面) +> - [x] 按钮前显示自定义图片(资源包or网络图片) +> - [x] UI商店,指令或UI控制,修改。 +> - [x] 物品ID表,通过物品ID或名称获取ID或名称或图像路径 +> - [x] `ItemIDSunName.java` +> - [x] 全局文本可自定义 +> - [x] 普通玩家可见文本可自定义 +> - [x] 仅管理员可见文本可自定义 +> - [x] `Message.java` +> - [x] 配置文件自动更新 +> - [x] `ReloadConfig.java` 部分功能有待完善 +> - [x] 实现完全的自定义界面!如滑动条,开关,下拉选项如数框等!完全的自主配置! +> - [x] 模拟实现玩家点击某界面内部的按钮,以方便完全自定义界面的使用 +> - [x] 自带帮助文档 +> - [x] 使用命令模拟玩家点击按钮 命令:/mis open +> - [x] 物品兑换支持多个物品兑换多个物品,并且可以设置每个物品兑换需要的数量并且允许每个物品所需或所得数量不同 +> - [x] 可以再添加兑换项目时设置多个物品(用英文分号;分割多个物品) +> - [x] 可以直接设置每个物品的数量 +> - [x] 插件以后将自动检测更新 +## 问题反馈 +#### 在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流 + +![](http://q2.qlogo.cn/headimg_dl?bs=2508543202&dst_uin=2508543202&dst_uin=2508543202&;dst_uin=2508543202&spec=100&url_enc=0&referer=bu_interface&term_type=PC) +- ~~帅逼~~凯: + - Mail: winfxk@qq.com + - QQ: [冰月] 2508543202 + - GayHub: [WinfXK](https://github.com/WinfXK) +--- +插件BUG反馈群: 827187988 + +## 捐助开发者 + +> 在兴趣的驱动下,写一个`免费`的东西,有欣喜,也还有汗水 +> 希望你喜欢我的作品,同时也能支持一下。 +> 当然,有钱捧个钱场(下方支付宝捐助),没钱捧个人场,谢谢各位。 + +