跳转至内容
  • 版块
  • 最新
  • 热门
  • 标签
  • 群组
皮肤
  • 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
关于
帖子
30
主题
6
分享
0
群组
2
粉丝
1
关注
1
Blog

帖子

最新 最佳 有争议的

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

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

    壁画石窟

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

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

    灵感大王 区块 渲染 forge mixin

  • [原创][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 unsafe 1.20.1 forge

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

    @半梦 喵呜!(逃)

    壁画石窟

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

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

    妙妙工具 kubejs 1.20.1 forge
  • 1 / 1
  • 登录

  • 没有帐号? 注册

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