跳转至内容
  • 版块
  • 最新
  • 热门
  • 标签
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Zephyr)
  • 不使用皮肤
折叠
品牌标识

VariedMC 魔改论坛

忆然忆

忆然

@忆然
KubeJS
关于
帖子
34
主题
8
分享
0
群组
3
粉丝
1
关注
1
Blog

帖子

最新 最佳 有争议的

  • 我永远喜欢kubejs!
    忆然忆 忆然

    在编程的世界里,我深深爱着 kubejs😍。
    它就像是一个神奇的魔法工具,为我的游戏模组创作带来了无尽的可能。
    每次使用 kubejs 编写代码时,我都感觉像是在开启一场奇妙的冒险。
    简洁而强大的语法,让我能够轻松地实现各种创意。
    不用再为复杂的底层细节烦恼,只需专注于打造独一无二的游戏体验。kubejs 的社区也超级温暖,大家互相交流、分享经验,就像一个快乐的大家庭。
    遇到问题时,总能迅速得到热心的帮助,这种感觉简直太棒了!
    我爱 kubejs 的每一处设计,爱它带来的无限乐趣。
    无论是自定义物品、添加新方块,还是编写复杂的机制,它都能出色地完成任务。
    每一个功能都如同璀璨的星星,点亮了我创作的道路。
    kubejs,你是我心中永远的宝藏,我会一直喜欢你,用你创造出更多精彩的模组,让游戏的世界更加丰富多彩✨!

    壁画石窟

  • [模组推荐]在进入游戏的时候从网上获取信息展示
    忆然忆 忆然

    本文使用:CC-BY-NC-SA 4.0协议
    使用的mod为[YiRanVersionCheck]
    实际上就是在推荐我自己的mod
    这个mod会在进入游戏的时候访问指定的链接并在聊天栏提示你其中的文本

    使用实例:

    6f4a9e31-ca60-4fb0-870a-55584bdd07d0-image.png

    如何使用?

    首先你需要开通一个gitee仓库 github也行,但不一定好访问
    在里面创建一个纯文本文件 建议使用log后缀

    本文使用的例子为
    https://gitee.com/bakayiran/mmrryyhh/blob/master/test.txt

    本整合包免费发布,私自贩卖不得好死
    目前最新版本:§61.0.0-hotfix
    当前版本:§6${version}
    链接:[[§b§n获取最新信息§r]](https://gitee.com/bakayiran/mmrryyhh/edit/master/test.txt)
    若在游玩整合包遇到问题请先在[§b§n百科](https://www.mcmod.cn/)寻求答案
    可以灌注下[§b§n作者(B站)](https://www.bilibili.com/)吗OVO
    

    文本中的${version}会被替换成config里面的版本
    string则会解析为一个可点击,点击打开指定的链接
    一行目前只能存在一个可点击文本

    配置文件:

    #在这里填入URL
    checkUrl = "https://gitee.com/bakayiran/mmrryyhh/blob/master/test.txt"
    #在这里填入次要URL
    secondaryCheckUrl = "null"
    #当前版本
    version = "0.1.0"
    

    本mod会先尝试从主要链接获取文本,失败则会尝试次要链接
    你也可以使用kjs修改配置文件

    //在Startup,当然你也可以放client
    ClientEvents.init(event => {
      let $Config = Java.loadClass("com.yiran.versioncheck.Config")
      $Config.VERSION.set("0.1.0")
      $Config.CHECK_URL.set("https://gitee.com/bakayiran/mmrryyhh/blob/master/test.txt")
      //$Config.CHECK_URL2.set("null")
    })
    

    为什么使用这个mod?

    用于告诉整合包玩家目前的整合包版本和现在版本
    提供bug反馈链接
    用作进入世界的消息提醒
    声明整合包免费(倒勾不得好死)

    壁画石窟

  • [原创][KubeJS 6][BrokenClassFilter]关于反射的应用场景与使用实例的论述
    忆然忆 忆然

    前言
    ClassFilter是kjs的一个保护机制,笔者在这里不建议进行对ClassFilter动手脚
    此篇仅以替换kjs的ClassFilter为例子讲解部分java的反射机制在kjs的使用
    本文使用:CC-BY-NC-SA 4.0协议
    话不多说,先上成品
    这是在kjs里面使用反射爆破kjs的classfilter的实例

    let $ClassFilter = Java.loadClass("dev.latvian.mods.kubejs.util.ClassFilter")
    let $ServerScriptManager = Java.loadClass("dev.latvian.mods.kubejs.server.ServerScriptManager")
    let $KubeJS = Java.loadClass("dev.latvian.mods.kubejs.KubeJS")
    let ScriptManagers = {
      CLIENT: $KubeJS.getClientScriptManager(),
      SERVER: $ServerScriptManager.instance,
      STARTUP: $KubeJS.getStartupScriptManager(),
    }
    /**@type {Internal.Class<$JavaWrapper_>} */
    let clazz = Java.class
    /**@type {Internal.Class<$ScriptManager_>} */
    let $ScriptManager = clazz.getClassLoader().loadClass("dev.latvian.mods.kubejs.script.ScriptManager")
    let classFilterField = $ScriptManager.getDeclaredField('classFilter')
    classFilterField.setAccessible(true)
    classFilterField.set(ScriptManagers.SERVER, new $ClassFilter())
    

    下面进行解析
    let $ClassFilter = Java.loadClass("dev.latvian.mods.kubejs.util.ClassFilter")
    这一步是为获取新的ClassFilter以获取实例以替换已经完成的构建的ClassFilter

    let $ServerScriptManager = Java.loadClass("dev.latvian.mods.kubejs.server.ServerScriptManager")
    let $KubeJS = Java.loadClass("dev.latvian.mods.kubejs.KubeJS")
    let ScriptManagers = {
    CLIENT: $KubeJS.getClientScriptManager(),
    SERVER: $ServerScriptManager.instance,
    STARTUP: $KubeJS.getStartupScriptManager(),
    }
    在这步获取了全部的ScriptManager

    let clazz = Java.class
    这一步获取了Class<JavaWrapper>实例,在后面用于获取类加载器去加载我们需要的类

    let $ScriptManager = clazz.getClassLoader().loadClass("dev.latvian.mods.kubejs.script.ScriptManager")
    获取Class<ScriptManager>

    let classFilterField = $ScriptManager.getDeclaredField('classFilter')
    获取Class<ScriptManager>的classFilter字段(这是我们需要修改的地方)

    classFilterField.setAccessible(true)
    因为classFilter字段是私有的,我们需要开放他的权限

    classFilterField.set(ScriptManagers.SERVER, new $ClassFilter())
    将set方法的第一个参数的classFilter字符替换为我们的新ClassFilter
    (此处仅替换了server的,有其他的需要替换就修改第一个参数)

    至此,kjs的classfilter就被我们优雅(雾)的处理掉了

    妙妙工具 kubejs forge

  • [1.20.1]强制加载并渲染特定区块
    忆然忆 忆然

    前排瞻仰伟大的真冬女神,真是太有用了(爱你)

    灵感大王 渲染 forge

  • 我永远喜欢kubejs!
    忆然忆 忆然

    @半梦 喵呜!(逃)

    壁画石窟

  • [原创?][KJS6][EE.JS]较为方便地为矿物提供注册与通用配方修改的轮子
    忆然忆 忆然

    你的mod加载器和版本的tag呢(

    妙妙工具 kubejs

  • [原创][KubeJS][持续更新?]在kjs中使用createCustom进行注册物品
    忆然忆 忆然

    本文使用:CC-BY-NC-SA 4.0协议
    kjs本身提供的物品注册比较有限,在注册某些kjs未提供的item的时候我们就需要用到createCustom
    如果有需要的item注册可以在本文下方留言,会考虑更新
    createCustom注册model是没有的,也就是你还得去写一份model.json(这部分可以参考原版wiki)
    下面是使用createCustom去注册一个弓的例子

    let $BowItem = Java.loadClass("net.minecraft.world.item.BowItem")
    let $Item$Properties = Java.loadClass("net.minecraft.world.item.Item$Properties")
    
    StartupEvents.registry("item", event => {
      event.createCustom("modid:item_name", () => {
        let properties = new $Item$Properties()
        //修改耐久 为0则无耐久属性
        properties.durability(0)
        //修改最大堆叠数量
        properties.stacksTo(1)
        //修改稀有度
        properties.rarity("epic")
        //创建新的bowitem
        let item = new $BowItem(properties)
        //返回新的bowitem进行注册
        return item
      })
    })
    
    灵感大王 kubejs

  • [原创][KubeJS]kubejs获取玩家所处坐标的结构
    忆然忆 忆然

    本文使用:CC-BY-NC-SA 4.0协议
    直接上代码
    在此推荐下来自ZZZank的ProbeJS Legacy
    (已经支持1.20.1了(喜))

    /**
     * 获取实体坐标的所有结构
     * @param {Internal.Entity} entity
     * @returns {$StructureStart_[]}
     */
    function getAllStructuresAt(entity) {
      let structureList = []
      /**@type {$ServerLevel_} */
      let serverLevel = entity.level
      let entityPos = entity.block.pos
      /** @type {Internal.Structure[]} */
      let structureArray = serverLevel.structureManager().getAllStructuresAt(entityPos).keySet().toArray()
      for (let structure of structureArray) {
        let structureStart =
          serverLevel.structureManager().getStructureAt(entityPos, structure)
        if (structureStart.isValid()) {
          structureList.push(structureStart)
        }
      }
      return structureList
    }
    
    妙妙工具 kubejs
  • 1 / 1
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 热门
  • 标签
  • 群组