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

帖子

最新 最佳 有争议的

  • [原创][KubeJS][Mod]如何在1.21.1NeoForge编写一个KubeJS的附属Mod
    忆然忆 忆然

    @LirxOwO 虾头栗子,看我keybindjs仓库去

    魔改早教

  • [原创][KubeJS][Mod]如何在1.21.1NeoForge编写一个KubeJS的附属Mod
    忆然忆 忆然

    呜呜,我当时写keybindjs找extra怎么写找了半天
    苦呀西

    魔改早教

  • [原创][KubeJS][Mod]如何在1.21.1NeoForge编写一个KubeJS的附属Mod
    忆然忆 忆然

    怎么没介绍event的extra怎么写

    魔改早教

  • [原创][Mod]基于opengl取色的hsv色盘屏幕
    忆然忆 忆然

    俺寻思能行.jpg
    image.png

    妙妙工具 1.20.1 forge render

  • 养老向的物品抽奖机:虚空草莓
    忆然忆 忆然

    呜,硬编码名称😭

    灵感大王 kubejs 作物 养老 forge

  • [原创][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
      })
    })
    
    灵感大王 1.20.1 forge kubejs

  • [原创][KubeJS 7][BrokenClassFilter]关于Nashorn在kjs中的应用
    忆然忆 忆然

    前言
    ClassFilter是kjs的一个保护机制,笔者在这里不建议进行对ClassFilter动手脚
    此篇仅以替换kjs的ClassFilter为例子展示Nashorn在kjs的使用
    本文使用:CC-BY-NC-SA 4.0协议

    因为1.21.1的kubejs ban了反射,因此只能在nashorn里面进行操作
    Nashorn比较复杂,这次就仅展示成品

    let $KubeJS = Java.loadClass("dev.latvian.mods.kubejs.KubeJS")
    
    let $ServerLifecycleHooks = Java.loadClass("net.neoforged.neoforge.server.ServerLifecycleHooks")
    /**@type {$MinecraftServer_} */
    let Server = $ServerLifecycleHooks.getCurrentServer()
    //所有的scriptmanager获取
    let ServerScriptMagager = Server.getServerResources().managers().kjs$getServerScriptManager()
    let ClientScriptMagager = $KubeJS.getClientScriptManager()
    let StartupScriptMagager = $KubeJS.getStartupScriptManager()
    
    
    
    let $ScriptEngineManager = Java.loadClass("javax.script.ScriptEngineManager")
    let Nashorn = new $ScriptEngineManager().getEngineFactories()[0].getScriptEngine()
    
    
    Nashorn.eval(`
      var Clazz = Java.type("java.lang.Class")
      var ClassFilter = Java.type("dev.latvian.mods.kubejs.plugin.ClassFilter")
      var HashSet = Java.type("java.util.HashSet")
      var ArrayList = Java.type("java.util.ArrayList")
    
      var ScriptManager$Clazz = Clazz.forName("dev.latvian.mods.kubejs.script.ScriptManager")
      var ScriptManager$classFilter$Field = ScriptManager$Clazz.getDeclaredField("classFilter")
    
      var ClassFilter$Clazz = Clazz.forName("dev.latvian.mods.kubejs.plugin.ClassFilter")
      var ClassFilter$denyStrong$Field = ClassFilter$Clazz.getDeclaredField("denyStrong")
      var ClassFilter$denyWeak$Field = ClassFilter$Clazz.getDeclaredField("denyWeak")
      
      ScriptManager$classFilter$Field.setAccessible(true)
      ClassFilter$denyStrong$Field.setAccessible(true)
      ClassFilter$denyWeak$Field.setAccessible(true)
    
      var unlock=function(ScriptMagager){
        var ClassFilter = ScriptManager$classFilter$Field.get(ScriptMagager)
        ClassFilter$denyStrong$Field.set(ClassFilter,new HashSet())
        ClassFilter$denyWeak$Field.set(ClassFilter,new ArrayList())
      }
    `)
    //参数传入scriptmanager即可爆破classfilter
    Nashorn.invokeFunction("unlock",ServerScriptMagager)
    let $File = Java.loadClass("java.io.File")
    
    妙妙工具 1.21.1 kubejs unsafe neoforge

  • [原创]使用kjs进行文件的删除
    忆然忆 忆然

    本文使用:CC-BY-NC-SA 4.0协议

    因为kjs的JsonIO并未限制文件名称的后缀
    因此这个操作并不安全

    kubejs的jsonio可以将第二个参数填入空字符串来删除文件
    JsonIO.write('kubejs/assets/test.nbt', "")
    如此便删除了.minecraft/kubejs/assets里面的test.nbt文件

    灵感大王 1.20.1 forge kubejs unsafe

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

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

    妙妙工具 kubejs 1.20.1 forge

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

    @不是椰浆 彳亍,我去塞一个

    妙妙工具 kubejs unsafe 1.20.1 forge

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

    @Mafuyu 区块强制加载有用(点头

    灵感大王 区块 渲染 forge mixin

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

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

    灵感大王 区块 渲染 forge mixin

  • 【典型案例】崩溃求解答
    忆然忆 忆然

    @半梦 你紫菜吧

    周公解梦

  • 在这测试一下各种功能
    忆然忆 忆然

    我测!

    壁画石窟

  • 已经,没有modding的理由了
    忆然忆 忆然

    不modding,那就铜丝你👿

    壁画石窟

  • 使用数据包修改模组插入的野生作物、植被或生物生成
    忆然忆 忆然

    抢沙发🛋️,再摸摸半梦

    灵感大王 世界生成 数据包 forge 地物 实体生成

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

    @mihono 这部分也是在最顶上拆出来的,应该,不用吧

    妙妙工具 kubejs unsafe 1.20.1 forge

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

    @mihono 下面的用上我感觉比较难看,我按我觉得好看的来的

    妙妙工具 kubejs unsafe 1.20.1 forge

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

  • 怎么没有板式斑块
    忆然忆 忆然

    在壁画发图片不就行了()

    壁画石窟
  • 1 / 1
  • 登录

  • 没有帐号? 注册

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