Skip to content

nullaqua/BluestarAPI

Repository files navigation

BluestarAPI

模块介绍

  • injector --- 完全使用java编写的一些工具
    • java swing的一个layout
    • 一些集合(Collection)的实现
    • io相关内容
    • 数学相关内容
    • 下载器和多线程下载器
    • *反射相关工具(使用Unsafe实现的访问器,在不调用构造函数的情况下创建空白实例)
  • kotlin --- kotlin相关内容,依赖injector模块
    • injector中的内容使用kotlin包装方便kotlin调用
    • 序列化工具,支持序列化和反序列化,与ObjectInput/OutputStream类似,区别为不检查Serializable,且序列化结果为可见字符组成的字符串
  • net --- 目前仅有数据包流和多频道数据包流 依赖kotlin模块
  • Bukkit-injector --- Minecraft Bukkit插件相关工具 依赖injector模块
    • 命令注入工具,命令注册管理
    • 配置文件封装
    • 文字颜色和渐变颜色解析
    • Gui创建工具
    • 通过告示牌、聊天、铁砧获取玩家输入
    • *附魔注册
  • plugin --- 将Bukkit-injector打包为插件

注意(*号内容解释)

反射工具

  1. 使用了Unsafe,在对java中某些类进行反射时,会因权限问题无法成功(例如Class类等),使用Unsafe可以避免. 但需要注意的是,在安全管理器启用的状态下Unsafe可能无法工作
  2. 在不使用构造函数的情况下创建实例,此功能的实现与ObjectInputStream创建实例类似但没有对于是否继承Serializable的检查. 通过此方法创建的实例为空白的,即简单类型为0false,复杂类型为null 但是这些功能全部基于反射、1中提到的Unsafe,以及一些不规范内容实现,并不能保证在三方jdk上稳定运行

空白实例创建示例:

import me.nullaqua.api.reflect.ReflectionAccessor;

public class TEST
{
    public static void main(String[] args) throws Throwable
    {
        A a=ReflectionAccessor.blankInstance(A.class);
        System.out.println(a);
    }
}

class A
{
    final int a, b;

    public A()
    {
        a=1;
        b=2;
        System.out.println("构造函数被调用");
        throw new RuntimeException();
    }

    @Override
    public String toString()
    {
        return "{ a="+a+", b="+b+" }";
    }
}

无报错,且输出以下内容:

{ a=0, b=0 }