当前位置: 首页 > news >正文

GTMKubeJS轮子和技巧分享

1.农作物注册轮子

测试于Minecraft 1.20.1 + kubejs-forge-2001.6.5-build.16

第一步:注册农作物和种子

//这是一个Startup事件脚本,应该放在kubejs/startup_scripts目录下StartupEvents.registry("item", event => {// 监听物品注册事件event.create("kubejs:rice", "basic")// 创建一个名为kubejs:rice的物品,类型为basic.texture("kubejs:item/rice")// 设置物品的材质路径.displayName("Rice")// 设置物品的在游戏中的名称
})StartupEvents.registry("block", event => {event.create("kubejs:rice", "crop").age(4, cbb => {cbb.shape(0,0,0,0,16,4,16)cbb.shape(1,0,0,0,16,7,16)cbb.shape(2,0,0,0,16,10,16)cbb.shape(3,0,0,0,16,13,16)cbb.shape(4,0,0,0,16,16,16)})//age(4,cbb=>{})中的4代表阶段数,我们主要是调用里面的shape方法,该方法是设置物品的碰撞箱大小。//简单拿一组示例cbb.shape(2,0,0,0,16,10,16)来解释://其中2代表到达age,前面三个0代表着最小的x,y,z,后面的16,10,16代表着最大的碰撞箱x,y,z,//这里的碰撞下不同于方块里的box,设置box是为了将方块建模进行设置碰撞,在这里是为了设置植物的高度和大小的显示碰撞.growTick((blockstate, random) => {return 25;})//growTick 代表被随机刻选中时,作物是否能够成长一级,计算方式为 random.nextInt((25 / 返回值) + 1) 进行计算随机数。// 在这里传上25也就是随机数最大生成0和1,在原版的逻辑中除了0以外的数值都无法生长。//growTick方法是可选的,不使用的话会默认使用原版的机制。.bonemeal(rtc => {     return rtc.random.nextInt(2)})//bonemeal 代表着骨粉催植物事件,返回参数为作物被催熟的等级 返回1则作物age增加1 返回0则不变 // 这里用rtc.random.nextInt(2)来随机0或者1来作为返回值//bonemeal方法是可选的,不使用的话会随机让作物长大n级。.crop(Item.of("kubejs:rice"))//crop 设置作物的产物,类似小麦作物会掉落小麦种子和小麦一样//crop方法是可选的。//但是实测crop有一些问题,由于产物和农作物本身注册在两个事件中,启动游戏时两者会相互独立地注册,导致这里检测不到"kubejs:rice"。//这里建议使用LootTable来设置掉落物品,见本文件夹的crop_rice_loot.js文件.survive((blockstate, level, pos) => {// 判断区块是否被加载if (level.isAreaLoaded(pos,1)){// 判断是否能够看到天空if(level.canSeeSky(pos)){// 获取天空对作物的光照等级是否小于等于8if (level.getBrightness("sky",pos) <= 8){// 判断方块下面是否为耕地if (level.getBlockState(pos.below()).is(Blocks.FARMLAND)){// 如果以上条件都满足,则返回true,表示作物可以生长return true}}}}// 如果不满足以上任何一个条件,则返回false,表示作物不能生长return false})//survive 处理各种环境逻辑.texture("0", "kubejs:block/crop_rice_stage0").texture("1", "kubejs:block/crop_rice_stage1").texture("2", "kubejs:block/crop_rice_stage2").texture("3", "kubejs:block/crop_rice_stage3").texture("4", "kubejs:block/crop_rice_stage4").item(seed => seed.texture("kubejs:item/rice_seeds"))//texture设置各个age阶段的材质。
})/*
补充资料(来自mcwiki)种植在耕地上的作物在游戏中使用同一套作物生长机制,该机制通过周围的耕地和作物分布计算生长速度。这类作物直接或间接地调用CropBlock.getGrowthSpeed方法。
每棵作物将会根据周围环境设置生长速度,按照下列方式计算:
生长速度的初始值为1.
若作物下方为湿润的耕地,生长速度+3;若为干燥的耕地,生长速度+1。
对耕地周围的8个方块,若为湿润的耕地,生长速度+3⁄4;若为干燥的耕地,生长速度+1⁄4;若为其他方块,不作操作。
也就是说,湿润的耕地可以加快作物生长;在作物周围开垦耕地也能加快作物生长。
如果作物的东南、东北、西南、西北侧毗邻方块有至少一棵同种作物,或东西方向、南北方向毗邻方块各有至少一棵同种作物,生长速度÷2。
唯一不影响作物生长的布局是将作物排成一排,且每排间留出空隙。
不同种的作物不影响判定。如果想将田地种满,可以交替种植两种作物,这样二者的生长速度均不会下降。
作物的生长由随机刻驱动。每次随机刻时,游戏会先判定作物方块的亮度等级;若亮度至少为9,作物有1⌊1+25/g⌋的概率提升一级生长等级,其中g表示生长速度。
作物应用情况
小麦、胡萝卜、马铃薯的最高生长等级为7,瓶子草的最高生长等级为4,完全遵循上述机制。甜菜的最高生长等级为3,火把花的最高生长等级为2,但这两种作物每次随机刻仅有2⁄3的概率执行上述机制。西瓜茎和南瓜茎的最高生长等级为7,在成熟前完全遵循上述机制,在成熟后会以相同的概率尝试在随机方向生成果实。
骨粉行为
对这些作物使用骨粉时,小麦、胡萝卜、马铃薯、未成熟的西瓜茎、南瓜茎的生长等级随机增加2~5,火把花、瓶子草的生长等级固定增加1,甜菜的生长等级以3⁄4的概率增加1。若未成熟的西瓜茎和南瓜茎在催熟后达到最大生长等级,还会额外执行一次果实生长尝试。 如果使用骨粉把生长等级为0的胡萝卜、土豆、小麦完全催熟,有37.5%概率使用2个骨粉,56.25%概率使用3个骨粉,6.25%概率使用4个骨粉。
放置行为
耕地作物在放置时生长等级均为0。
*/

第二步:自定义农作物掉落

//这是一个Server事件脚本,应该放在kubejs/server_scripts目录下ServerEvents.blockLootTables(event => {//监听方块掉落事件event.addBlock("kubejs:rice", table => {//添加成熟时产品的掉落table.addPool(pool => {//设置掉落次数(即掉落几个产品)pool.rolls = 1;//添加条件,只有当作物成熟时才掉落pool.addCondition({condition: "minecraft:block_state_property",block: "kubejs:rice",properties: { age: "4" }//这里的成熟阶段根据作物的age属性来判断});//添加掉落物品pool.addItem("kubejs:rice");});//以下同理//添加成熟时种子的掉落table.addPool(pool => {pool.rolls = 1;pool.addCondition({condition: "minecraft:block_state_property",block: "kubejs:rice",properties: { age: "4" }//这里的成熟阶段根据作物的age属性来判断});pool.addItem("kubejs:rice_seed");});//添加未成熟时种子的掉落(用了一个for循环,使0到3的age阶段都只掉落种子)//这里我们先将0赋给i,然后i小于4时循环,i++意味着每次循环i加1,那么i的值就会依次为0,1,2,3for (let i = 0; i < 4; i++) {table.addPool(pool => {pool.rolls = 1;pool.addCondition({condition: "minecraft:block_state_property",block: "kubejs:rice",properties: { age: i.toString() }});pool.addItem("kubejs:rice_seed");});}});
});

2.GTM蒸汽机器添加轮子

测试于Minecraft 1.20.1 + kubejs-forge-2001.6.5-build.16 + gtceu-1.20.1-7.0.2

//先添加对应的配方类型
GTCEuStartupEvents.registry('gtceu:recipe_type', event => {event.create('kitchen')//配方类型.setEUIO('in')//输入(消耗)能量(in) / 输出(生产)能量(out).setMaxIOSize(6, 2, 0, 0) //输入物品 / 输出物品 / 输入流体 / 输出流体.setSlotOverlay(false, false, GuiTextures.SOLIDIFIER_OVERLAY) //槽位的样式.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT) //进度条的样式.setSound(GTSoundEntries.COOLING) //完成配方的声音
})//再添加机器
GTCEuStartupEvents.registry('gtceu:machine', event => {event.create('steam_kitchen', 'steam')//第一个字符串是机器名称,第二个字符串是机器类型.hasHighPressure(false) //禁用高压版本.definition((isHighPressure, builder) => {builder.recipeType('gtceu:kitchen'); //机器使用的配方类型})
})
http://www.vanclimg.com/news/1768.html

相关文章:

  • OI集训 Day13
  • 格式化字符串
  • Java学习Day29
  • 待办
  • 20250729 沪锡
  • 内核模块支持
  • 最大公约数最小公倍数与周期
  • LLM的参数量是什么意思
  • 平衡树Splay - AC
  • 7.15-7.28软路由搭建
  • 2025.7.29
  • 电脑接入麦克风设置
  • Windows平台Microsoft Edge关闭指定快捷键方法
  • 20250729
  • 零代码、零门槛、零成本:企业数字化的五个新选择
  • split函数用法
  • FCN语义分割
  • windows系统下计算文件md5值
  • 《碰撞检测》基于屏幕大小及敌人的宽高,生成抽象网格,根据网格让敌人在网格中随机生成
  • 技术文章
  • 请勿在DNS MX记录中直接使用IP地址 - 邮件服务器配置指南
  • 激活函数
  • 用回溯算法实现全排列
  • 如何在Consumption类型的容器应用环境中缓存Docker镜像
  • [AlpaGasus] AlpaGasus: Training A Better Alpaca with Fewer Data | ICLR 2024
  • DNS 记录类型详解
  • 使用Docker部署前端应用
  • python基础篇(1)
  • P1956 Sum 题解
  • 洛谷P8742 [蓝桥杯 2021 省 AB] 砝码称重 题解