多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
>[danger] 原模板是这样使用的 ``` name: '{equip.quality.color}{equip.name}{equip.streng.name}' lore: - '{equip.bind}' - '{equip.template.config.归属}' - '#FF9B9B9B职业:#FFC7CAED {equip.need-class}' - '#FF9B9B9B等级:#FFC7CAED {equip.need-level}' - '#FF9B9B9B部位:#FFC7CAED {equip.equip-type}' - '#FF9B9B9B品质: {equip.quality.color}{equip.quality.display}' - '#FF9B9B9B评分:#FFC7CAED {equip.sell.value.score}' - '#FF9B9B9B售价[#FFC8C3B8银两#FF9B9B9B]' - '#FFC8C3B8{equip.sell.value.money}' - '#FFC7CAED{equip.entry-basic}' - '#FF5D66DC{equip.entry-random}' - '{equip.template.config.孔数1}' - '{equip.template.config.孔数}' - '{equip.gem}' - '[start]' - '#FF9B9B9B{equip.introduce}' - '[end]' ``` </br> ***** </br> >[danger] 解译器模式是这样调用的 ``` code-name: TemplateUtil.equipName(data); code-lore: TemplateUtil.equipLore(data); ``` </br> ***** </br> `TemplateUtil` 是一个模板工具例子,针对上述排版的lore生成 路径: `\plugins\PxRpg\Modules\Code\Cover\pxrpg.util.TemplateUtil.java`(记得在`\plugins\PxRpg\Modules\Code\env-imports.yml`导入) </br> #### :-: **完整内容** ``` import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; import com.pxpmc.itemextend.api.creator.Attr; import com.pxpmc.itemextend.api.piece.ExtendData; import com.pxpmc.pxrpg.api.item.ItemObject; import com.pxpmc.pxrpg.api.modules.attribute.Attribute; import com.pxpmc.pxrpg.api.modules.attribute.entry.AttributeEntry; import com.pxpmc.pxrpg.api.modules.bind.BindType; import com.pxpmc.pxrpg.api.modules.code.util.UMap; import com.pxpmc.pxrpg.api.modules.entrygroup.EntryGroup; import com.pxpmc.pxrpg.api.modules.entrygroup.item.piece.ItemEntryGroup; import com.pxpmc.pxrpg.api.modules.equip.EquipInter; import com.pxpmc.pxrpg.api.modules.equipcontainer.EquipType; import com.pxpmc.pxrpg.api.modules.gem.GemInter; import com.pxpmc.pxrpg.api.modules.gem.forequip.piece.EquipGemInfo; import com.pxpmc.pxrpg.api.modules.occupation.Occupation; import com.pxpmc.pxrpg.api.modules.occupation.piece.OccupationInfo; import com.pxpmc.pxrpg.api.modules.quality.Quality; import com.pxpmc.pxrpg.api.modules.sell.piece.SellInfo; import com.pxpmc.pxrpg.bukkit.PxRpg; import org.bukkit.Bukkit; import java.util.*; /** * 模板工具类 * 用前记得导入 */ class TemplateUtil { static String color1 = "&f"; static String color2 = "&6"; static String colorBase = "&f"; //基础属性颜色和装备详情颜色 static String colorRandom = "&b"; static String equipName(UMap data) { ItemObject itemObject = data.get("inter"); String name = itemObject.getData("name"); Quality quality = itemObject.getData("quality"); int strenglevel = itemObject.getData("streng"); return quality.getColor() + name + (strenglevel > 0 ? " &e+" + strenglevel : ""); } /** * 装备lore排版生成 * * @param data pr的数据 * @return 生成后的list */ static List equipLore(UMap data) { List list = new ArrayList(); ItemObject inter = data.get("inter"); //绑定类型的显示名称 addBind(list, inter); //归属者 //addAuthor(list, inter); //职业 addOcc(list, inter); //等级 addLevel(list, inter); //部位 addType(list, inter); //品质 addQuality(list, inter); //售价和评分 addSell(list, inter); //基础词条 addBasicEntry(list, inter); //随机词条 addRandomEntry(list, inter); //宝石孔数以及宝石 addGems(list, inter); //装备描述 addIntroduce(list, inter); return list; } static void addGemInlaid(List list, ItemObject inter) { //宝石适用 Set inlaids = inter.getData("inlaid-equip-type"); list.add(color1 + "适用: " + colorBase + join((Collection) inlaids)); } static void addBind(List list, ItemObject inter) { //绑定类型的显示名称 BindType bindType = inter.getData("bind"); list.add(bindType.getDisplay()); } static void addLevel(List list, ItemObject inter) { //等级 int level = inter.getData("need-level"); list.add(color1 + "等级: " + colorBase + level); } static void addQuality(List list, ItemObject inter) { Quality quality = inter.getData("quality"); list.add(color1 + "品质: " + quality.getColor() + quality.getDisplay()); } static void addSell(List list, ItemObject inter) { addSell(list, inter, true); } static void addSell(List list, ItemObject inter, boolean showScore) { //售价和评分 SellInfo sell = inter.getData("sell"); if (showScore) { list.add(color1 + "评分: " + colorBase + (sell.hasPrice("score") ? NumFormat.toTho(sell.getPrice("score")) : "0")); } list.add(color1 + "售价[" + color2 + "银两" + color1 + "]"); //NumFormat 这个类在tools里面有实例 list.add(color2 + (sell.hasPrice("money") ? NumFormat.toTho(sell.getPrice("money")) : "0")); } static void addType(List list, ItemObject inter) { //部位 EquipType type = inter.getData("equip-type"); list.add(color1 + "部位: " + colorBase + type.getDisplay()); } static void addOcc(List list, ItemObject inter) { //职业要求 OccupationInfo inf = inter.getData("need-class"); Set keys = inf.keys(); if (keys.isEmpty()) list.add(color1 + "职业: " + colorBase + "通用"); else list.add(color1 + "职业: " + colorBase + join((Collection) inf.values())); } static void addIntroduce(List list, ItemObject inter) { addIntroduce(list, inter, true); } static void addIntroduce(List list, ItemObject inter, boolean equip) { List introduces = inter.getData("introduce"); if (introduces.isEmpty()) return; if (equip) list.add("[start]"); for (String line : introduces) list.add(color1 + line); if (equip) list.add("[end]"); } static void addAuthor(List list, ItemObject inter) { String str = inter.getData("author"); list.add("无".equals(str) ? "" : color1 + str); } static void addBasicEntry(List list, ItemObject inter) { //基础词条 ItemEntryGroup entryGroup = inter.getData("entry-basic"); for (String line : entryGroup.spawnInfo()) list.add(colorBase + line); } static void addRandomEntry(List list, ItemObject inter) { //随机词条 ItemEntryGroup entryGroup = inter.getData("entry-random"); for (String line : entryGroup.spawnInfo()) list.add(colorRandom + line); } static void addGems(List list, ItemObject inter) { addGems(list, inter, true); } static void addGems(List list, ItemObject inter, boolean showLevel) { //宝石孔数以及宝石 EquipGemInfo gemInfo = inter.getData("gem"); if (gemInfo.getHoles() > 0) { //有孔才输出宝石 list.add(""); list.add("&f孔数: &6" + gemInfo.getGemAmount() + "/" + gemInfo.getHoles()); for (ItemObject gem : gemInfo.getGems()) addGem(list, gem, showLevel); } } static void addGem(List list, ItemObject inter, boolean showLevel) { String str = "&a镶嵌: "; if (showLevel) str += inter.getData("level") + "级"; str += inter.getData("name"); list.add(str); //基础词条 addBasicEntry(list, inter); //随机词条 addRandomEntry(list, inter); } /** * 词条属性生成 * * @param data * @return */ static String entryAtt(UMap data) { AttributeEntry entry = data.get("entry"); Attribute attribute = entry.getAttribute(); return attribute.getName() + ": " + attribute.spawnString(); } /** * 宝石词条属性生成 * * @param data * @return */ static String gemEntryAtt(UMap data) { AttributeEntry entry = data.get("entry"); Attribute attribute = entry.getAttribute(); if (attribute.isPercentage()) return entryAtt(data); return attribute.spawnString() + " 点" + attribute.getName(); } /** * 宝石词条每级属性生成 * * @param data * @return */ static String gemEveroneEntryAtt(UMap data) { AttributeEntry entry = data.get("entry"); Attribute attribute = entry.getAttribute(); if (attribute.isPercentage()) return entryAtt(data); return attribute.getName() + "提升" + attribute.spawnString(); } /** * 宝石词条每级属性生成 * * @param data * @return */ static String gemPercentageEntryAtt(UMap data) { AttributeEntry entry = data.get("entry"); Attribute attribute = entry.getAttribute(); return "提升" + attribute.spawnString() + attribute.getName(); } static String join(Collection list) { return join(list, ","); } static String join(Collection list, String separator) { if (list == null) return ""; StringBuilder sb = new StringBuilder(); boolean first = true; for (Object o : list) { if (first) first = false; else sb.append(separator); if (o instanceof Occupation) sb.append(((Occupation) o).getDisplay()); else sb.append(Objects.toString(o)); } return sb.toString(); } } ```