Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,15 @@ listOf("1_20_2", "1_20_4", "1_20_5", "1_21", "1_21_4", "1_21_5", "1_21_6", "1_21
include("worldedit-bukkit:adapters:adapter-$it")
}

listOf("bukkit", "core", "cli").forEach {
listOf("bukkit", "core", "cli", "nukkit").forEach {
include("worldedit-libs:$it")
include("worldedit-$it")
}

listOf("mot", "nkx").forEach {
include("worldedit-nukkit:nk-adapters:adapter-$it")
}

include("worldedit-libs:core:ap")


Expand Down
3 changes: 3 additions & 0 deletions worldedit-libs/nukkit/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
plugins {
id("buildlogic.libs")
}
149 changes: 149 additions & 0 deletions worldedit-nukkit/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

plugins {
`java-library`
id("buildlogic.platform")
}

project.description = "Nukkit"

platform {
kind = buildlogic.WorldEditKind.Plugin
includeClasspath = true
}

repositories {
mavenLocal()
mavenCentral()
maven {
name = "EngineHub Repository"
url = uri("https://maven.enginehub.org/repo/")
}
maven {
name = "OpenCollab Releases"
url = uri("https://repo.opencollab.dev/maven-releases/")
}
maven {
name = "OpenCollab Snapshots"
url = uri("https://repo.opencollab.dev/maven-snapshots/")
}
maven {
name = "repo-lanink-cn"
url = uri("https://repo.lanink.cn/repository/maven-public/")
}
ivy {
url = uri("https://raw.githubusercontent.com/")
patternLayout {
artifact("[organisation]/[revision]/[artifact].([ext])")
setM2compatible(true)
}
metadataSources {
artifact()
}
}
}

val adapters: Configuration by configurations.register("adapters") {
description = "Nukkit platform adapters to include in the shadow JAR"
isCanBeConsumed = false
}

val geyserMappings: Configuration by configurations.register("geyserMappings") {
isCanBeConsumed = false
}

val mcmeta: Configuration by configurations.register("mcmeta") {
isCanBeConsumed = false
}

dependencies {
api(project(":worldedit-core"))
api(project(":worldedit-libs:nukkit"))

compileOnly("cn.nukkit:nukkit:1.0-SNAPSHOT")

implementation(libs.fastutil)
implementation(libs.gson)

api(libs.lz4Java) { isTransitive = false }
api(libs.sparsebitset) { isTransitive = false }
api(libs.parallelgzip) { isTransitive = false }
compileOnlyApi(libs.checkerqual)

geyserMappings("GeyserMC.mappings", "items", "15398c1", ext = "json")
geyserMappings("GeyserMC.mappings", "biomes", "15398c1", ext = "json")
geyserMappings("GeyserMC.mappings-generator", "generator_blocks", "8fa6058", ext = "json")
mcmeta("misode.mcmeta", "blocks/data", "cb195b9", ext = "json")
}

project.project(":worldedit-nukkit:nk-adapters").subprojects.forEach {
dependencies {
"adapters"(project(it.path))
}
}

tasks.named<Copy>("processResources") {
val internalVersion = project.ext["internalVersion"]
inputs.property("internalVersion", internalVersion)
filesMatching("plugin.yml") {
expand(mapOf("internalVersion" to internalVersion))
}
from(geyserMappings) {
into("mapping")
rename("(?:generator_)?([^-]+)-(.*)\\.json", "$1.json")
}
from(mcmeta) {
rename("data-(.*)\\.json", "je_blocks.json")
}
}

tasks.named<ShadowJar>("shadowJar") {
archiveFileName.set("${rootProject.name}-Nukkit-${project.version}.${archiveExtension.getOrElse("jar")}")
configurations = listOf(
project.configurations.getByName("runtimeClasspath"),
adapters
)
dependencies {
include(dependency(":worldedit-core"))
include(dependency(":worldedit-libs:nukkit"))
relocate("org.antlr.v4", "com.sk89q.worldedit.antlr4") {
include(dependency("org.antlr:antlr4-runtime"))
}
relocate("it.unimi.dsi.fastutil", "com.sk89q.worldedit.bukkit.fastutil") {
include(dependency(libs.fastutil))
}
relocate("net.royawesome.jlibnoise", "com.sk89q.worldedit.jlibnoise") {
include(dependency("com.sk89q.lib:jlibnoise"))
}
relocate("com.zaxxer", "com.fastasyncworldedit.core.math") {
include(dependency(libs.sparsebitset))
}
relocate("org.anarres", "com.fastasyncworldedit.core.internal.io") {
include(dependency(libs.parallelgzip))
}
// ZSTD does not work if relocated. https://github.com/luben/zstd-jni/issues/189
include(dependency(libs.zstd))
include(dependency(libs.lz4Java))
}
project.project(":worldedit-nukkit:nk-adapters").subprojects.forEach {
dependencies {
include(dependency("${it.group}:${it.name}"))
}
minimize {
exclude(dependency("${it.group}:${it.name}"))
}
}
minimize {
exclude(dependency(libs.lz4Java))
}
}

tasks.named("assemble").configure {
dependsOn("shadowJar")
}

configure<PublishingExtension> {
publications.named<MavenPublication>("maven") {
from(components["java"])
}
}
17 changes: 17 additions & 0 deletions worldedit-nukkit/nk-adapters/adapter-mot/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
plugins {
`java-library`
}

repositories {
mavenLocal()
mavenCentral()
maven {
name = "repo-lanink-cn"
url = uri("https://repo.lanink.cn/repository/maven-public/")
}
}

dependencies {
compileOnly(project(":worldedit-nukkit"))
compileOnly("cn.nukkit:Nukkit:MOT-SNAPSHOT")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package com.fastasyncworldedit.nukkit.adapter.mot;

import cn.nukkit.Player;
import cn.nukkit.block.Block;
import cn.nukkit.entity.Entity;
import cn.nukkit.level.GlobalBlockPalette;
import cn.nukkit.level.Level;
import cn.nukkit.level.format.FullChunk;
import cn.nukkit.level.format.leveldb.BlockStateMapping;
import cn.nukkit.level.format.leveldb.NukkitLegacyMapper;
import cn.nukkit.level.format.leveldb.structure.BlockStateSnapshot;
import cn.nukkit.level.generator.object.tree.ObjectCherryTree;
import cn.nukkit.level.generator.object.tree.ObjectMangroveTree;
import cn.nukkit.level.generator.object.tree.ObjectPaleOakTree;
import cn.nukkit.math.NukkitRandom;
import cn.nukkit.math.Vector3;
import cn.nukkit.utils.Identifier;
import com.fastasyncworldedit.nukkit.adapter.NukkitImplAdapter;
import org.cloudburstmc.nbt.NbtMap;

import javax.annotation.Nullable;
import java.util.List;
import java.util.UUID;

/**
* Adapter implementation for the Nukkit-MOT platform.
*/
public class MotNukkitAdapter implements NukkitImplAdapter {

@Override
public String getPlatformName() {
return "Nukkit-MOT";
}

@Override
public int getBlockDataBits() {
return Block.DATA_BITS;
}

@Override
@Nullable
public String getPlayerLanguageCode(Player player) {
var langCode = player.getLanguageCode();
return langCode != null ? langCode.name() : null;
}

@Override
public int getBlockRuntimeId(Player player, int blockId, int meta) {
return GlobalBlockPalette.getOrCreateRuntimeId(player.getGameVersion(), blockId, meta);
}

@Override
@Nullable
public String getEntityIdentifier(Entity entity) {
Identifier identifier = entity.getIdentifier();
return identifier != null ? identifier.toString() : null;
}

@Override
public List<NbtMap> loadBlockPalette() {
return NukkitLegacyMapper.loadBlockPalette();
}

@Override
@Nullable
public BlockStateSnapshot getBlockStateSnapshot(NbtMap nbtState) {
return BlockStateMapping.get().getStateUnsafe(nbtState);
}

@Override
public boolean generateTree(String treeType, Level level, int x, int y, int z, NukkitRandom random, Vector3 pos) {
// MOT: Mangrove, Cherry, PaleOak all extend TreeGenerator
return switch (treeType) {
case "MANGROVE" -> new ObjectMangroveTree().generate(level, random, pos);
case "CHERRY" -> new ObjectCherryTree().generate(level, random, pos);
case "PALE_OAK" -> new ObjectPaleOakTree().generate(level, random, pos);
default -> false;
};
}

@Override
public int getBlockId(FullChunk chunk, int x, int y, int z, int layer) {
return chunk.getBlockId(x, y, z, layer);
}

@Override
public void setFullBlockId(FullChunk chunk, int x, int y, int z, int layer, int fullId) {
chunk.setFullBlockId(x, y, z, layer, fullId);
}

@Override
public UUID getEntityUUID(Entity entity) {
return entity.getUniqueId();
}

}
21 changes: 21 additions & 0 deletions worldedit-nukkit/nk-adapters/adapter-nkx/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
plugins {
`java-library`
}

repositories {
mavenLocal()
mavenCentral()
maven {
name = "OpenCollab Releases"
url = uri("https://repo.opencollab.dev/maven-releases/")
}
maven {
name = "OpenCollab Snapshots"
url = uri("https://repo.opencollab.dev/maven-snapshots/")
}
}

dependencies {
compileOnly(project(":worldedit-nukkit"))
compileOnly("cn.nukkit:nukkit:1.0-SNAPSHOT")
}
Loading
Loading