企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] #### :-: **功能截图** :-: ![](https://img.kancloud.cn/7d/b2/7db2d46f733ec6898a46ac9618de4b93_300x334.png) ![](https://img.kancloud.cn/71/64/71643b317ac9b088ceea6d83d1030dc5_263x359.png) ***** </br> #### :-: **功能简介** ``` 简单强化,只是一个示例文件,含有大部分实现方法 强化+3 +6 +9时,会创建一个额外的属性添加到装备内 里面没有进行强化道具的判定,只要是个item的物品就行 没有实现提升概率物品的代码,只是作为一个示范告诉大家可以这么用 ``` ***** </br> >[danger] 一般拓展需要配合模板的java解译器模式使用 > 具体如何使用,可以参考[装备模板的使用](../../../%E7%89%A9%E5%93%81%E6%98%BE%E7%A4%BA%E6%A8%A1%E6%9D%BF/%E8%A3%85%E5%A4%87%E6%A8%A1%E6%9D%BF%E7%9A%84%E4%BD%BF%E7%94%A8.md) #### :-: **模板显示生成方法** > 直接在[装备模板工具](../../../%E7%89%A9%E5%93%81%E6%98%BE%E7%A4%BA%E6%A8%A1%E6%9D%BF/%E8%A3%85%E5%A4%87%E6%A8%A1%E6%9D%BF%E7%9A%84%E4%BD%BF%E7%94%A8.md)里面随便找个地方复制进去 ``` static void 添加强化随机排版(List list, ItemObject inter) { ExtendData extendData = inter.getData("extend"); //没有这个内容将直接退出不处理 if(!extendData.has("强化随机")) return; Map map = extendData.get("强化随机"); for (int i = 3; i <= 9; i+=3) { if(!map.containsKey(""+i)) continue; Attr attr = map.get(""+i); list.add("&7强化奖励&6[&b"+i+"&6] &c" + attr.getId() + ": " + (int)attr.getMin() + (attr.getMin() == attr.getMax() ? "" : "-" + (int)attr.getMax())); } } ``` ***** </br> #### :-: **在装备模板生成lore的代码里面添加上** ``` //基础词条 addBasicEntry(list, inter); //随机词条 addRandomEntry(list, inter); //================ 添加强化随机排版(list, inter); //<=============放在这里将生成在随机词条后面 //================ //宝石孔数以及宝石 addGems(list, inter); //装备描述 addIntroduce(list, inter); ``` ***** </br> #### :-: **完整配置** 文件名: `强化.yml` 打开指令: `pr ei o 玩家 强化` ``` #每个文件都是一个自定义窗口 #可以在里面配置对应的修正功能 #例如,强化,洗炼等 #自定义标题 #所有方法均为同步方法 #窗口标题 title: "装备强化" #9的倍数 只能是: 9,18,27,36,45,54 size: 9 #窗口相关的操作 action: #此方法在创建窗口之前,没有当前环境 #返回false不能打开,做鉴权,比如某个世界不能打开等 #默认true #boolean reallyOpen(AdapterPlayer player) really_open: return true; #创建窗口后打开时触发,有当前环境 #void open(AdapterPlayer player) open: return; #创建窗口后,关闭时触发,有当前环境 #无需在里面返还物品,系统自处理 #void close(AdapterPlayer player) close: return; #窗口内每个位置对应设置 slots: '0': #空位模式,可以让玩家将物品放入到里面 type: empty #支持的操作 #before 交换/改动之前,用于鉴权 #after 交换/改动之后,用于更新 action: #交换物品时触发(没有该代码时不限制放入) #可用于包含但不限于检查物品是否可以放入这个位置中 #player = 操作的玩家 #item = 原本在这个位置上的物品(可能为空气,可用 item.isAir() 判断是不是空气) #cursor = 当前鼠标上的物品(可能为空气,可用 cursor.isAir() 判断是不是空气) #返回 false 将取消事件 #boolean before(AdapterPlayer player,AdapterItemStack item,AdapterItemStack cursor) before: |- //如果指针物品是空气,说明是拿走原本的物品,返回true不取消事件 if(cursor.isAir()) return true; //QuickTools是一个快捷工具类,由原生java编写,默认导入(无需手动导入),方法都是静态方法, 可直接类名.方法名调用 //要获取原版ItemStack可使用 ItemStack itemStack = cursor.getObject(); //这里判断是不是一个装备,是装备可以进行交换 if(QuickTools.isEquip(cursor)) return true; player.sendOldMessage("这里只能放装备"); //不是装备提醒玩家 //this.getPlayer().sendOldMessage("这里只能放装备"); //或者这样也一样 return false; #当这个格子的物品被更改时触发 #可更改界面内的其他slot位置的物品内容等 #item = 这个位置的物品 # #void after(AdapterPlayer player,AdapterItemStack item) after: |- //为空气表示拿走了物品 if(item.isAir()){ AdapterItemStack 开始按钮 = this.getButton(3); //这里具有ExtendGui(当前窗口)环境,可以调用ExtendGui类的方法 开始按钮.setDisplayName("&7开始"); }else{ //不是空气表示放入新的物品 AdapterItemStack 开始按钮 = this.getButton(3); //这里具有ExtendGui环境,可以调用ExtendGui类的方法 开始按钮.setDisplayName("&6已经放入了装备"); //this.setButton(3,开始按钮); //有些操作不生效时,可以利用这个方法再重新设置一下,如操作了NBT等 } '1': type: empty action: before: |- //指针物品为空气或者是一个pr道具则允许操作 if(cursor.isAir() || QuickTools.isItem(cursor)) return true; player.sendOldMessage("这里只能放强化道具"); return false; '2': type: empty action: before: |- if(cursor.isAir() || QuickTools.isItem(cursor)) return true; player.sendOldMessage("这里只能放保护券或提升概率道具"); return false; '3': #button按钮模式 type: button #按钮的默认物品 def: type: stone name: "&7开始" lore: - '&7左键点击开始强化' #不可破坏,默认true unbreakable: true #隐藏原版内容,默认63 hide: 63 action: #按钮支持: #left 左键点击 #right 右键点击 #shift_left shift+左键点击 #shift_right shift+右键点击 #double_click 双击 #或者自定义的由其他地方调用 #按钮被点击时触发 #cursor = 当前鼠标上的物品 #void left(AdapterPlayer player,AdapterItemStack item) left: |- //这里具有this环境,可以调用ExtendGui.get(int)类的方法拿到空位的物品 //但需要注意的是, get方法拿到的是物品的副本,并不是实际上格子内的 AdapterItemStack 装备物品 = this.get(0); AdapterItemStack 强化物品 = get(1); //省略this也可以 AdapterItemStack 保护券或增加概率券 = get(2); //可以利用this环境直接调用ExtendGui.getPlayerUMap()方法拿到玩家的UMap //getPlayerUMap() 等价于 this.getPlayerUMap() this可以省略,如果有冲突可以加上this UMap data = getPlayerUMap(); //查看UMap里面有什么,正式环境可以删除 Set set = data.keys(); for(String key : set){ System.out.println(key + " 的内容类型为: " + data.get(key).getClass()); } /* 一般窗口操作有3步常规流程 1.先判定物品是否正确 2.进行相关的逻辑流程判定及物品的移除 3.根据逻辑判断流程给予相应的奖励并更新 */ //1.先判定物品是否正确 if(装备物品.isAir()){ player.sendOldMessage("你还未放入要强化装备呢"); return; } if(强化物品.isAir()){ player.sendOldMessage("你还未放入强化道具呢"); return; } EquipInter 装备物品对象 = QuickTools.toEquip(装备物品); ItemInter 强化物品对象 = QuickTools.toItem(强化物品); int 当前强化等级 = 装备物品对象.getData("streng"); player.sendOldMessage("当前装备强化等级为: " + 当前强化等级); //正式环境可以删除 //2.进行相关的逻辑流程判定及物品的移除 强化物品.setAmount(强化物品.getAmount()-1); this.set(1,强化物品); int 下级强化等级 = 当前强化等级+1; player.sendOldMessage("准备强化下一级等级: " + 下级强化等级); //正式环境可以删除 double 成功概率 = (1-下级强化等级*0.05);//计算好成功概率,也可以利用玩家属性去修正 //3.根据逻辑判断流程给予相应的奖励并更新 if(Math.random() < 成功概率){ 装备物品对象.setData("streng",下级强化等级); //设置强化为 当前+1 player.sendOldMessage("恭喜,强化成功为 " + 下级强化等级); if(下级强化等级 == 3){ //这里省略了随机的过程,就直接添加一个攻击进去 Attr 随机属性 = QuickTools.createAttr("攻击",100.0,150.0); //拿到装备的扩展数据, 宝石 装备 道具 都有的(宝石和装备添加对人物属性getAttr的兼容,道具可以存储,在窗口内拿到给装备或者宝石,例如: 附魔等) ExtendData 装备扩展数据 = 装备物品对象.getData("extend"); //第一个参数一般用于大类型,这个大参数里面只有你知道有什么 //大类型相同,小类型相同 的内容会被覆盖,所以每次强化到+3的时候都会生成一次属性(下面同理) //Attr 由java原生代码编写,在插件内兼容的属性获取的方法,这里添加进ExtendData并穿戴上就可以获得对应属性 装备扩展数据.set("强化随机","3",随机属性);//扩展内容可以添加 Attr 类型的数据 player.sendOldMessage("由于强化+3 额外添加了一条强化属性: " + 随机属性.getId()+ ": " + 随机属性.getMin() + "-"+随机属性.getMax()); }else if(下级强化等级 == 6){ Attr 随机属性 = QuickTools.createAttr("攻击",150.0,250.0); ExtendData 装备扩展数据 = 装备物品对象.getData("extend"); 装备扩展数据.set("强化随机","6",随机属性); player.sendOldMessage("由于强化+6 额外添加了一条强化属性: " + 随机属性.getId()+ ": " + 随机属性.getMin() + "-"+随机属性.getMax()); }else if(下级强化等级 == 9){ Attr 随机属性 = QuickTools.createAttr("攻击",300.0,500.0); ExtendData 装备扩展数据 = 装备物品对象.getData("extend"); 装备扩展数据.set("强化随机","9",随机属性); player.sendOldMessage("由于强化+9 额外添加了一条强化属性: " + 随机属性.getId()+ ": " + 随机属性.getMin() + "-"+随机属性.getMax()); } 装备物品对象.render();//重新渲染一下 this.set(0,装备物品对象.getItemStack()); //设置到窗口内 }else{ //强化失败 player.sendOldMessage("很抱歉,强化失败了"); //强化失败不需要返回,因为失败也是逻辑成功的一种,我们在上面减少了强化道具的数量,所以让他走到下面去提交一下即可 } //在调用了this.set(int,item) 方法时,会将设置的物品保存至缓存,不会直接设置在窗口上(可以防止在运行过程中出现异常而导致物品已经更改) //这个方法就相当于你填好了表格(设置了物品)准备提交上去,但是途中出现了不是你填的数据,或者被告知有地方填错了(出现异常) //就被判定需要你重新拿个表格填(告知玩家重新试试) this.execute(true); //清空缓存物品,并将缓存物品设置到窗口内(只要set了物品在结束时都需要提交一下才会更新物品) //this.execute(false); //清空缓存物品,之前的物品原封不动 #为4到8位置的按钮同时设置填充物 '4-8': type: button def: type: paper name: "&7填充物" lore: [ ] unbreakable: true hide: 63 ```