[综合]伟大合成v1.1 —— 通过gui来设置合成表,现在支持nbt了[1.8-1.12] - 服务端插件 - Minecraft(我的世界)中文论坛 -.html

[综合]伟大合成v1.1 —— 通过gui来设置合成表,现在支持nbt了[1.8-1.12] - 服务端插件 - Minecraft(我的世界)中文论坛 -

Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 385|回复: 14
打印 上一主题 下一主题

[原创插件] [综合]伟大合成v1.1 —— 通过gui来设置合成表,现在支持nbt了[1.8-1.12]

[复制链接]
xz_mc 当前离线
积分
351
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-14
查看详细资料

来自:四川

跳转到指定楼层
楼主
发表于 2023-9-23 13:09:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
服务端插件
英文名称:GreatCraft
中文名称:伟大合成
插件来源:原创
适用服务端:CraftBukkit Spigot Paper 
插件类型:综合 其他 
语言支持:简体中文 
适用版本:1.12 1.11 1.10 1.9 1.8 
前置Mod|插件:无前置插件
下载地址:https://本贴.net/
原帖地址:-
插件Logo:-
插件简介:一款支持gui设置的自定义合成表插件

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 xz_mc 于 2023-9-25 17:36 编辑

使用教程

1.输入/greatcraft或/gct

2.点击对应指令输入

3.在对应合成台中进行摆放

4.关闭背包

5.若为熔炉,请按照指定消息提示输入烹饪时间和收获时获得的经验(单位:tick)

(mc原版默认所有烹饪时间为10s,即200tick)

6.v1.1支持nbt和自定义数量了,在创建特殊(special)合成表时,请直接放入一定数量含有nbt的物品,
合成时需要nbt与之相同,格子中物品数量大于设定数量
合成时会消耗指定数量

指令:

/gct 或 /greatcraft  查看帮助



(点击指令可自动输入)


权限:

greatcraft.create  创建菜单的权限



展示:






注意事项:

目前支持合成结果为任意数量的任意物品,但是尚不支持合成材料为特定材料、特定数量

输入特殊物品后,会对同一材质的所有物品起作用。

1.1版本开始已支持nbt和数量


预计未来加入的内容:

1.支持自定义配方中的数量、特殊物品

2.GUI管理已创建的合成表

3.加入自定义合成器



插件下载


GreatCraft1.1.jar (12.69 KB, 下载次数: 20)






QAQ最近(2023.9.25)作业有点多,此插件停更,直到国庆假期



本插件所用所有代码均为原创,不存在借用/抄袭/违反协议等行为






评分

参与人数 1人气 +2收起 理由
苏子峰+ 2MCBBS有你更精彩~

查看全部评分

帖子永久链接: 

Minecraft中文论坛 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖若有内容转载自其它媒体,不代表本站赞同其观点和对其真实性负责
6、若本帖涉及任何版权问题,请立即告知本站,本站将及时予以删除并致以最深的歉意
7、Minecraft(我的世界)中文论坛管理员和版主有权不事先通知发贴者而删除本文

xz_mc 当前离线
积分
351
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-14
查看详细资料

来自:四川

来自 15#
 楼主| 发表于 6 小时前 来自手机 | 只看该作者
绯红的世界 发表于 2023-10-23 05:10
好像不能根据检测物品的lore和name进行自定义合成,只检测物品id好像

需要使用指令/gct new special来创建支持名字、lore、nbt的合成表哦
回复

使用道具 举报

AmionMJ 当前离线
积分
369
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-3-10
查看详细资料

来自:广东

沙发
发表于 2023-9-23 17:24:53 | 只看该作者
支持mod物品吗
回复

使用道具 举报

SA_AS 当前离线
积分
102
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-1-7
查看详细资料

来自:黑龙江

板凳
发表于 2023-9-23 17:38:36 | 只看该作者
阿哲 是看不懂的东西
回复

使用道具 举报

苏子峰 当前离线
积分
5572
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2017-10-7
查看详细资料

来自:四川

地板
发表于 2023-9-23 18:29:14 | 只看该作者
建议支持一手nbt , 祝早日完成未来规划
回复

使用道具 举报

江月寒 当前离线
积分
3129
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-7-3
查看详细资料

来自:重庆

5#
发表于 2023-9-24 02:33:19 | 只看该作者
苏子峰 发表于 2023-9-23 18:29
建议支持一手nbt , 祝早日完成未来规划

1.12.2没办法支持这种,1.12.2的原版合成模块只能判断材质,没办法判断物品的标签
回复

使用道具 举报

xz_mc 当前离线
积分
351
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-14
查看详细资料

来自:四川

6#
 楼主| 发表于 2023-9-24 17:15:31 来自手机 | 只看该作者
AmionMJ 发表于 2023-9-23 17:24
支持mod物品吗

我没在mod端测试过,也不懂mod端,可以自己试试
回复

使用道具 举报

xz_mc 当前离线
积分
351
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-14
查看详细资料

来自:四川

7#
 楼主| 发表于 2023-9-25 17:34:41 | 只看该作者
苏子峰 发表于 2023-9-23 18:29
建议支持一手nbt , 祝早日完成未来规划

我更新啦,支持nbt了哦

评分

参与人数 1人气 +2收起 理由
苏子峰+ 2真厉害

查看全部评分

回复

使用道具 举报

xz_mc 当前离线
积分
351
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-14
查看详细资料

来自:四川

8#
 楼主| 发表于 2023-9-25 17:35:09 | 只看该作者
江月寒 发表于 2023-9-24 02:33
1.12.2没办法支持这种,1.12.2的原版合成模块只能判断材质,没办法判断物品的标签 ...

只要思想不滑坡,办法总比困难多。我更新啦,支持了nbt
回复

使用道具 举报

1909瓜 当前离线
积分
347
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-12-31
查看详细资料

来自:上海

9#
发表于 2023-9-26 07:45:54 | 只看该作者
xz_mc 发表于 2023-9-25 17:35
只要思想不滑坡,办法总比困难多。我更新啦,支持了nbt

好!
但是我很好奇你是怎么实现的 你插件的源代码里没有任何对底层的操作 (
回复

使用道具 举报

xz_mc 当前离线
积分
351
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-14
查看详细资料

来自:四川

10#
 楼主| 发表于 2023-9-26 15:14:40 来自手机 | 只看该作者
1909瓜 发表于 2023-9-26 07:45
好!
但是我很好奇你是怎么实现的 你插件的源代码里没有任何对底层的操作 ( ...

大致来说就是,先设置一个原版合成表,然后把合成表里面的特殊物品储存,然后再监听物品合成的事件,在物品摆放正确,即将出现被合成物品前将合成表中的物品与储存的物品进行比对。因为这个事件只有在物品被正确放置在合成表时才会触发,所以运算量并不大,对服务器开支并不大。
回复

使用道具 举报

1909瓜 当前离线
积分
347
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-12-31
查看详细资料

来自:上海

11#
发表于 2023-9-26 22:40:12 | 只看该作者
xz_mc 发表于 2023-9-26 15:14
大致来说就是,先设置一个原版合成表,然后把合成表里面的特殊物品储存,然后再监听物品合成的事件,在物 ...

问题是怎么储存呢?如果只是序列化一个ItemStack类是不包括nbt数据的 甚至bkapi就没有能操作nbt数据的类和方法
回复

使用道具 举报

xz_mc 当前离线
积分
351
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-14
查看详细资料

来自:四川

12#
 楼主| 发表于 2023-9-27 00:29:52 来自手机 | 只看该作者
1909瓜 发表于 2023-9-26 22:40
问题是怎么储存呢?如果只是序列化一个ItemStack类是不包括nbt数据的 甚至bkapi就没有能操作nbt数据的类 ...

啊,有可能是我搞错了。但是我感觉好像没问题,首先一个ItemStack对象唯一对应游戏中的一组物品,所以ItemStack对象中肯定是包含nbt的(尽管我们可能无法操作)。然后我通过测试发现,ItemStack的.toString方法(而不是序列化)转换得到的字符串中,好像是包含nbt标签的(因为我尝试修改一些简单的nbt发现确实存了。),所以我就将此String进行比较了...
因为我对nbt不太了解,我在网上查到的教程中的nbt经过我的随机测试发现是适用的,我就这样用了。。如果有问题的话,请提醒一下我,我更改一下帖子标题和内容。
回复

使用道具 举报

1909瓜 当前离线
积分
347
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-12-31
查看详细资料

来自:法国上法兰西大区

13#
发表于 2023-9-27 07:02:18 | 只看该作者
本帖最后由 1909瓜 于 2023-9-27 07:16 编辑
xz_mc 发表于 2023-9-27 00:29
啊,有可能是我搞错了。但是我感觉好像没问题,首先一个ItemStack对象唯一对应游戏中的一组物品,所以Ite ...

这种方法的确有保存物品属性的功能 但本质上不是nbt 不过比保存nbt实现上而言更优

节选自paperapi 1.12.2 api中的ItemStack
  1.     public String toString() {
  2.         StringBuilder toString = (new StringBuilder("ItemStack{")).append(this.getType().name()).append(" x ").append(this.getAmount());
  3.         if (this.hasItemMeta()) {
  4.             toString.append(", ").append(this.getItemMeta());
  5.         }

  6.         return toString.append('}').toString();
  7.     }
复制代码
这部分代码相当于给它的Meta套了层壳,再来看看CraftMetaItem的toString
  1.     public final String toString() {
  2.         return (String)org.bukkit.craftbukkit.v1_12_R1.inventory.CraftMetaItem.SerializableMeta.classMap.get(this.getClass()) + "_META:" + this.serialize();
  3.     }
复制代码

本质上是一个序列化 这个里面有什么呢?
  1.    public final Map<String, Object> serialize() {
  2.         Builder<String, Object> map = ImmutableMap.builder();
  3.         map.put("meta-type", org.bukkit.craftbukkit.v1_12_R1.inventory.CraftMetaItem.SerializableMeta.classMap.get(this.getClass()));
  4.         this.serialize(map);
  5.         return map.build();
  6.     }
复制代码
  1. static final ImmutableMap<Class<? extends CraftMetaItem>, String> classMap = ImmutableMap.builder().put(CraftMetaBanner.class, "BANNER").put(CraftMetaBlockState.class, "TILE_ENTITY").put(CraftMetaBook.class, "BOOK").put(CraftMetaBookSigned.class, "BOOK_SIGNED").put(CraftMetaSkull.class, "SKULL").put(CraftMetaLeatherArmor.class, "LEATHER_ARMOR").put(CraftMetaMap.class, "MAP").put(CraftMetaPotion.class, "POTION").put(CraftMetaSpawnEgg.class, "SPAWN_EGG").put(CraftMetaEnchantedBook.class, "ENCHANTED").put(CraftMetaFirework.class, "FIREWORK").put(CraftMetaCharge.class, "FIREWORK_EFFECT").put(CraftMetaKnowledgeBook.class, "KNOWLEDGE_BOOK").put(CraftMetaItem.class, "UNSPECIFIC").build();
复制代码
注意到 UNSPECIFIC 这里指通用的数据 其中也包括一个"Internal"

  1.         String internal = CraftMetaItem.SerializableMeta.getString(map, "internal", true);
  2.         if (internal != null) {
  3.             ByteArrayInputStream buf = new ByteArrayInputStream(Base64.decodeBase64(internal));

  4.             try {
  5.                 this.internalTag = NBTCompressedStreamTools.a(buf);
  6.                 this.deserializeInternal(this.internalTag);
  7.                 Set<String> keys = this.internalTag.c();
  8.                 Iterator var10 = keys.iterator();

  9.                 while(var10.hasNext()) {
  10.                     String key = (String)var10.next();
  11.                     if (!getHandledTags().contains(key)) {
  12.                         this.unhandledTags.put(key, this.internalTag.get(key));
  13.                     }
  14.                 }
  15.             } catch (IOException var12) {
  16.                 Logger.getLogger(CraftMetaItem.class.getName()).log(Level.SEVERE, (String)null, var12);
  17.             }
  18.         }
复制代码
把存在map中的标签base64解密在通过mojang自带的库序列化 这是自定义的nbt标签了

这种方法可以实现所需功能 而且不用写反射即可完成几乎全版本支持!
这是一种新的“nbt操作”方法 感谢你这个插件的想法!

评分

参与人数 1人气 +1金粒 +5收起 理由
xz_mc+ 1+ 5谢谢大佬解释,我其实是瞎试试出来的😂.

查看全部评分

回复

使用道具 举报

绯红的世界 当前离线
积分
2041
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-24
查看详细资料

来自:河南

14#
发表于 11 小时前 | 只看该作者
好像不能根据检测物品的lore和name进行自定义合成,只检测物品id好像
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2023-10-23 16:11 , Processed in 0.064687 second(s), Total 33, Slave 32 queries, Release: Build.2023.10.20 1503, Gzip On, Redis On.

"Minecraft"以及"我的世界"为美国微软公司的商标 本站与微软公司没有从属关系

© 2010-2023 我的世界中文论坛 版权所有 本站内原创内容版权属于其原创作者,除作者或版规特别声明外未经许可不得转载