本帖最后由 412859475 于 2022-1-18 10:02 编辑
最近想要在服务端里实现想要的宝石功能:镶嵌、摘除、多行lore等,四处搜集宝石插件。
包括一个站内插件Fargem,在上面投入时间是因为支持1.12.2和1.16.5两个游戏版本,而且有拆卸功能。
站内原文地址:
https://www.mcbbs.net/forum.php?mod=viewthread&tid=789733
不过该插件需要自己修改脚本来实现功能,所以为了调整实现想要的功能,给示例的脚本写了一些注释,因为原帖中的说明实在很少,不过自己接触java不多,所以无法保证注释的都是对的。为什么只有示例的攻击宝石做了注释呢?因为其他示例下载不了……
注释完了一看才注意到,好像不需要额外的属性插件,因为是对伤害的数值直接进行了拦截修改。
脚本及注释如下:
/* global Java */
#定义变量“Enable”的值为真
var Enable = true;
#从游戏和插件中获得玩家、宝石配置等信息作为变量
var Gem = Java.type('Br.FarGem.Gem');
var GemDisplay = Java.type('Br.FarGem.GemDisplay');
var Config = Java.type('Br.FarGem.Gem.Config');
var Material = Java.type('org.bukkit.Material');
var Player = Java.type('org.bukkit.entity.Player');
var EntityType = Java.type('org.bukkit.entity.EntityType');
#定义脚本监听变量
var ScriptListener = Java.extend(Java.type('Br.API.Scripts.ScriptListener'));
#新建变量AttackGemType
var AttackGemType = Java.extend(Gem, GemDisplay);
#定义“显示lore的设定”变量;种类为设定,id为"DisplayLore",值为括号{}内内容,
var DisplayLoreConfig = new Config("DisplayLore", function (lv)
{
return "§c" + lv + "级 攻击宝石 攻击力+" + lv * 3;
}, true);
#定义“宝石lore的设定”变量;种类为设定,id为"GemLoreConfig",值为括号{}内的内容
var GemLoreConfig = new Config("GemLoreConfig", function (lv)
{
#定义列表变量,种类为行列
var list = new java.util.ArrayList();
list.add("§c攻击宝石 等级- " + lv);
list.add("§b增加攻击力- " + lv * 3);
list.add("§6仅能安装到剑或斧头上");
list.add("§a右键宝石开始安装");
#返回列表变量为函数值
return list;
}, true);
#定义“攻击力设定”变量,种类为设定,id为"Attack",值为括号{}内的内容
var AttackConfig = new Config("Attack", function (lv)
{
#返回 等级乘三 为函数值
return lv * 3;
}, true);
#定义“攻击宝石”变量,种类为攻击宝石类别,id为'AttackGem',值为"§c攻击宝石",包含十个值
var AttackGem = new AttackGemType('AttackGem', "§c攻击宝石", 10){
#获得显示的lore,其值为变量“DisplayLoreConfig”
getDisplayLore: function (lv)
{
return DisplayLoreConfig.getValue(lv);
},
#获得设定,包括“DisplayLoreConfig”、“GemLoreConfig”、“AttackConfig”和"Br.FarGem.Gem.Config[]"
getConfigs: function ()
{
return Java.to([DisplayLoreConfig, GemLoreConfig, AttackConfig], "Br.FarGem.Gem.Config[]");
},
#定义可以镶嵌的物品类型
canInstall: function (is)
{
var s = is.getType().toString();
return s.contains("_AXE") || s.contains("_SWORD");
},
#获得种类(图标)
getType: function (lv)
{
return Material.EMERALD;
},
#获得耐久值
getDurability: function (lv)
{
return 0;
},
#在AttackGemType中定义显示名称
getDisplayName: function (lv)
{
return "§c" + lv + "级 攻击宝石";
},
#从GemLoreConfig中得到函数值作为lore
getLore: function (lv) {
return GemLoreConfig.getValue(lv);
}
};
#定义监听变量
var Listener = new ScriptListener()
{
onEvent: function (evt)
{
if (evt.getDamager().getType() !== EntityType.PLAYER)
{
return;
}
var p = evt.getDamager();
#定义变量is为手上的道具
var is = p.getItemInHand();
#定义变量“lv”(等级)为从“AttackGem”中获得的等级
var lv = AttackGem.getEquipLevel(is);
#如果“lv”大于0
if (lv > 0)
{
#将伤害设置为“evt.getDamage()”(即未算入宝石的伤害)+“AttackConfig”的值(前面设定的宝石加成)
evt.setDamage(evt.getDamage() + AttackConfig.getValue(lv));
}
},
getEventName: function () {
return 'org.bukkit.event.entity.EntityDamageByEntityEvent';
}
};
#定义公式“获得宝石”的返回值
function getGem() {
return AttackGem;
}
#调用Br.API的监听功能
function getListener() {
return Java.to([Listener], "Br.API.Scripts.ScriptListener[]");
}
#是否启用,返回变量“Enable”的值
function isEnable(){
return Enable;
}
最近想要在服务端里实现想要的宝石功能:镶嵌、摘除、多行lore等,四处搜集宝石插件。
包括一个站内插件Fargem,在上面投入时间是因为支持1.12.2和1.16.5两个游戏版本,而且有拆卸功能。
站内原文地址:
https://www.mcbbs.net/forum.php?mod=viewthread&tid=789733
不过该插件需要自己修改脚本来实现功能,所以为了调整实现想要的功能,给示例的脚本写了一些注释,因为原帖中的说明实在很少,不过自己接触java不多,所以无法保证注释的都是对的。为什么只有示例的攻击宝石做了注释呢?因为其他示例下载不了……
注释完了一看才注意到,好像不需要额外的属性插件,因为是对伤害的数值直接进行了拦截修改。
脚本及注释如下:
/* global Java */
#定义变量“Enable”的值为真
var Enable = true;
#从游戏和插件中获得玩家、宝石配置等信息作为变量
var Gem = Java.type('Br.FarGem.Gem');
var GemDisplay = Java.type('Br.FarGem.GemDisplay');
var Config = Java.type('Br.FarGem.Gem.Config');
var Material = Java.type('org.bukkit.Material');
var Player = Java.type('org.bukkit.entity.Player');
var EntityType = Java.type('org.bukkit.entity.EntityType');
#定义脚本监听变量
var ScriptListener = Java.extend(Java.type('Br.API.Scripts.ScriptListener'));
#新建变量AttackGemType
var AttackGemType = Java.extend(Gem, GemDisplay);
#定义“显示lore的设定”变量;种类为设定,id为"DisplayLore",值为括号{}内内容,
var DisplayLoreConfig = new Config("DisplayLore", function (lv)
{
return "§c" + lv + "级 攻击宝石 攻击力+" + lv * 3;
}, true);
#定义“宝石lore的设定”变量;种类为设定,id为"GemLoreConfig",值为括号{}内的内容
var GemLoreConfig = new Config("GemLoreConfig", function (lv)
{
#定义列表变量,种类为行列
var list = new java.util.ArrayList();
list.add("§c攻击宝石 等级- " + lv);
list.add("§b增加攻击力- " + lv * 3);
list.add("§6仅能安装到剑或斧头上");
list.add("§a右键宝石开始安装");
#返回列表变量为函数值
return list;
}, true);
#定义“攻击力设定”变量,种类为设定,id为"Attack",值为括号{}内的内容
var AttackConfig = new Config("Attack", function (lv)
{
#返回 等级乘三 为函数值
return lv * 3;
}, true);
#定义“攻击宝石”变量,种类为攻击宝石类别,id为'AttackGem',值为"§c攻击宝石",包含十个值
var AttackGem = new AttackGemType('AttackGem', "§c攻击宝石", 10){
#获得显示的lore,其值为变量“DisplayLoreConfig”
getDisplayLore: function (lv)
{
return DisplayLoreConfig.getValue(lv);
},
#获得设定,包括“DisplayLoreConfig”、“GemLoreConfig”、“AttackConfig”和"Br.FarGem.Gem.Config[]"
getConfigs: function ()
{
return Java.to([DisplayLoreConfig, GemLoreConfig, AttackConfig], "Br.FarGem.Gem.Config[]");
},
#定义可以镶嵌的物品类型
canInstall: function (is)
{
var s = is.getType().toString();
return s.contains("_AXE") || s.contains("_SWORD");
},
#获得种类(图标)
getType: function (lv)
{
return Material.EMERALD;
},
#获得耐久值
getDurability: function (lv)
{
return 0;
},
#在AttackGemType中定义显示名称
getDisplayName: function (lv)
{
return "§c" + lv + "级 攻击宝石";
},
#从GemLoreConfig中得到函数值作为lore
getLore: function (lv) {
return GemLoreConfig.getValue(lv);
}
};
#定义监听变量
var Listener = new ScriptListener()
{
onEvent: function (evt)
{
if (evt.getDamager().getType() !== EntityType.PLAYER)
{
return;
}
var p = evt.getDamager();
#定义变量is为手上的道具
var is = p.getItemInHand();
#定义变量“lv”(等级)为从“AttackGem”中获得的等级
var lv = AttackGem.getEquipLevel(is);
#如果“lv”大于0
if (lv > 0)
{
#将伤害设置为“evt.getDamage()”(即未算入宝石的伤害)+“AttackConfig”的值(前面设定的宝石加成)
evt.setDamage(evt.getDamage() + AttackConfig.getValue(lv));
}
},
getEventName: function () {
return 'org.bukkit.event.entity.EntityDamageByEntityEvent';
}
};
#定义公式“获得宝石”的返回值
function getGem() {
return AttackGem;
}
#调用Br.API的监听功能
function getListener() {
return Java.to([Listener], "Br.API.Scripts.ScriptListener[]");
}
#是否启用,返回变量“Enable”的值
function isEnable(){
return Enable;
}
好家伙,这个应该…不是发茶馆的吧?
诡灬稽 发表于 2022-1-18 09:57
好家伙,这个应该…不是发茶馆的吧?
实际上是因为我不知道发哪里比较好,所以干脆发茶馆了。看了版规,好像是能发。而且茶馆在我印象中,基本无所不包,所以不容易出错。
412859475 发表于 2022-1-18 09:59
实际上是因为我不知道发哪里比较好,所以干脆发茶馆了。看了版规,好像是能发。而且茶馆在我印象中,基本 ...
确实大部分都可以发,我觉得可能…mod研讨会合适一点?
这应该是提问吧
虽然我看不懂,但我大受震撼
感觉这种优秀内容发这里屈才了,都可以发到别的板块去了
好家伙,这技术力让我瞬间觉得我不太配当一个水怪
转到其他板块吧 茶馆看这个的不多 很快就会被水淹没