• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】

教程 编译成 Java 8 目标,也能依赖 CraftEngine

编程技术板块藏得太深了,还是发到这里好了。

长话短说,当你将编译目标设置成 Java 8 时,引用一个使用 Java 21 目标编译的依赖(CraftEngine)是很费劲的。

在 Gradle,你可以使用以下配置来添加一个同为 Gradle 编译的 Java 21 依赖。Maven 则不需要额外配置。

代码:
java {
    // 关键配置
    disableAutoTargetJvm()
}
repositories {
    // 添加仓库
    maven("https://repo.momirealms.net/releases/")
}
dependencies {
    // 添加依赖
    compileOnly("net.momirealms:craft-engine-core:0.0.67")
    compileOnly("net.momirealms:craft-engine-bukkit:0.0.67")
}

用得比较多的,没法在 Java 8 用常规方法创建的,是 Key 的实例,照抄下面的代码即可。

代码:
import net.momirealms.craftengine.core.util.Key;

public class KeyWrapper {

    public static Key of(String namespace, String value) {
        return new Key(namespace, value);
    }

    public static Key withDefaultNamespace(String namespacedId, String defaultNamespace) {
        return of(decompose(namespacedId, defaultNamespace));
    }

    public static Key of(String[] id) {
        return new Key(id[0], id[1]);
    }

    public static Key of(String namespacedId) {
        return of(decompose(namespacedId, "minecraft"));
    }

    private static String[] decompose(String id, String namespace) {
        String[] strings = new String[]{namespace, id};
        int i = id.indexOf(':');
        if (i >= 0) {
            strings[1] = id.substring(i + 1);
            if (i >= 1) {
                strings[0] = id.substring(0, i);
            }
        }
        return strings;
    }
}

有这几个就够了,要更多的再抄 CraftEngine 源码去。

注意事项是,在 Java 8 下
  • 你不能调用 Key 的任何方法,否则无法通过编译
  • 你可以通过构造方法来创建 Key 的实例
规则怪谈了属于是,有兴趣可以看看扩展阅读

剩下的正常使用就可以了,没什么太大问题

代码:
CraftEngineItems.byId(KeyWrapper.of(id));
CraftEngineItems.byItemStack(item);

 
内容版权许可
CC BY 署名
学到了。我之前给你提那个pr我没办法了最后用了反射:tieba-28:
 
学到了。我之前给你提那个pr我没办法了最后用了反射:tieba-28:
我也是刚发现不久,找了一堆资料最后试了试,把它的大致行为试出来了
 

在线会员

  • 健纲 黄
  • Ashsk
  • fox46
  • wenrongxx
后退
顶部 底部