Skip to content

Commit bfb30cd

Browse files
authored
LevelDB support & other updates (#2175)
1 parent 2172e54 commit bfb30cd

File tree

2,160 files changed

+75907
-26160
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,160 files changed

+75907
-26160
lines changed

.github/CONTRIBUTING.md

Lines changed: 0 additions & 107 deletions
This file was deleted.

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ rebel-remote.xml
246246
# Nukkit generated files
247247
banned-ips.json
248248
banned-players.json
249-
nukkit.yml
249+
/nukkit.yml
250250
ops.txt
251251
server.log
252252
server.properties
@@ -265,6 +265,9 @@ creativeitems.json
265265
recipes.json
266266
data/
267267
data/*
268+
material_tags.txt
269+
item_types.txt
270+
block_types.txt
268271

269272
run/
270273

.gitmodules

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +0,0 @@
1-
[submodule "src/main/resources/lang"]
2-
path = src/main/resources/lang
3-
url = https://github.com/NukkitX/Languages.git

README.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,24 @@
77
Introduction
88
-------------
99

10-
Nukkit is nuclear-powered server software for Minecraft: Pocket Edition.
10+
Nukkit is nuclear-powered server software for Minecraft Bedrock Edition.
1111
It has a few key advantages over other server software:
1212

1313
* Written in Java, Nukkit is faster and more stable.
1414
* Having a friendly structure, it's easy to contribute to Nukkit's development and rewrite plugins from other platforms into Nukkit plugins.
1515

16-
Nukkit is **under improvement** yet, we welcome contributions.
16+
Nukkit is under improvement yet, we welcome contributions.
1717

1818
Links
1919
--------------------
2020

21-
* __[News](https://nukkitx.com)__
22-
* __[Forums](https://nukkitx.com/forums)__
21+
* __[Forums](https://cloudburstmc.org/forums/)__
2322
* __[Discord](https://discord.gg/5PzMkyK)__
24-
* __[Download](https://ci.nukkitx.com/job/NukkitX/job/Nukkit/job/master)__
25-
* __[Plugins](https://nukkitx.com/resources/categories/nukkit-plugins.1)__
26-
* __[Wiki](https://nukkitx.com/wiki/nukkit)__
23+
* __[Wiki](https://cloudburstmc.org/wiki/nukkit)__
24+
* __[Download Nukkit](https://ci.opencollab.dev/job/NukkitX/job/Nukkit/job/master/)__
25+
* __[Download Plugins](https://cloudburstmc.org/resources/categories/nukkit-plugins.1/)__
2726

28-
Contributing
29-
-------------
30-
Please read the [CONTRIBUTING](.github/CONTRIBUTING.md) guide before submitting any issue. Issues with insufficient information or in the wrong format will be closed and will not be reviewed.
31-
32-
Build JAR file
27+
Compile Nukkit
3328
-------------
3429
- `git clone https://github.com/CloudburstMC/Nukkit`
3530
- `cd Nukkit`
@@ -38,6 +33,8 @@ Build JAR file
3833

3934
The compiled JAR can be found in the `target/` directory.
4035

36+
Note: You don't need to compile Nukkit yourself if you don't intend to modify the code. You can find precompiled JARs on Jenkins.
37+
4138
Running
4239
-------------
4340
Simply run `java -jar nukkit-1.0-SNAPSHOT.jar`.
@@ -114,3 +111,8 @@ Testing after deployment:
114111
Completely remove the chart:
115112

116113
`helm uninstall nukkit`
114+
115+
Pterodactyl Panel
116+
-------------
117+
118+
[Download the official egg](https://raw.githubusercontent.com/parkervcp/eggs/master/game_eggs/minecraft/bedrock/nukkit/egg-nukkit.json)

build.gradle.kts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer
2+
import org.gradle.internal.impldep.org.junit.experimental.categories.Categories.CategoryFilter.exclude
23

34
@Suppress("DSL_SCOPE_VIOLATION") // https://youtrack.jetbrains.com/issue/IDEA-262280
45

@@ -12,7 +13,7 @@ plugins {
1213

1314
group = "cn.nukkit"
1415
version = "1.0-SNAPSHOT"
15-
description = "Nuclear powered server software for Minecraft: Bedrock Edition"
16+
description = "Nuclear powered server software for Minecraft Bedrock Edition"
1617

1718
repositories {
1819
mavenLocal()
@@ -23,16 +24,32 @@ repositories {
2324

2425
dependencies {
2526
api(libs.network)
26-
api(libs.natives)
27+
api(libs.epoll)
2728
api(libs.fastutil)
29+
api(libs.bundles.fastutilmaps)
2830
api(libs.guava)
2931
api(libs.gson)
3032
api(libs.snakeyaml)
3133
api(libs.leveldb)
34+
api(libs.leveldbjni) {
35+
exclude(group = "com.google.guava", module = "guava")
36+
exclude(group = "io.netty", module = "netty-buffer")
37+
exclude(group = "org.iq80.snappy", module = "snappy")
38+
exclude(group = "org.iq80.leveldb", module = "leveldb")
39+
}
40+
api(libs.snappy)
3241
api(libs.jwt)
3342
api(libs.bundles.terminal)
3443
api(libs.bundles.log4j)
3544
api(libs.jopt.simple)
45+
api(libs.blockstateupdater)
46+
api(libs.lmbda) {
47+
exclude(group = "org.checkerframework", module = "checker-qual")
48+
}
49+
api(libs.noise) {
50+
exclude(group = "net.daporkchop.lib", module = "common")
51+
exclude(group = "net.daporkchop.lib", module = "math")
52+
}
3653
compileOnly(libs.lombok)
3754
annotationProcessor(libs.lombok)
3855

gradle/libs.versions.toml

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,28 @@
22
junit = "5.9.2"
33
log4j = "2.20.0"
44
jline = "3.22.0"
5+
fastutilmaps = "8.5.13-SNAPSHOT"
56

67
[libraries]
7-
network = { group = "com.nukkitx.network", name = "raknet", version = "1.6.28-SNAPSHOT" }
8-
natives = { group = "com.nukkitx", name = "natives", version = "1.0.3" }
8+
network = { group = "org.cloudburstmc.netty", name = "netty-transport-raknet", version = "1.0.0.CR3-SNAPSHOT" }
9+
epoll = { group = "io.netty", name = "netty-transport-native-epoll", version = "4.1.101.Final" }
910
fastutil = { group = "com.nukkitx", name = "fastutil-lite", version = "8.1.1" }
10-
guava = { group = "com.google.guava", name = "guava", version = "30.1.1-jre" }
11+
fastutil-long-long-maps = { group = "org.cloudburstmc.fastutil.maps", name = "long-long-maps", version.ref = "fastutilmaps" }
12+
fastutil-int-short-maps = { group = "org.cloudburstmc.fastutil.maps", name = "int-short-maps", version.ref = "fastutilmaps" }
13+
fastutil-object-int-maps = { group = "org.cloudburstmc.fastutil.maps", name = "object-int-maps", version.ref = "fastutilmaps" }
14+
fastutil-object-object-maps = { group = "org.cloudburstmc.fastutil.maps", name = "object-object-maps", version.ref = "fastutilmaps" }
15+
guava = { group = "com.google.guava", name = "guava", version = "33.2.1-jre" }
1116
gson = { group = "com.google.code.gson", name = "gson", version = "2.10.1" }
1217
snakeyaml = { group = "org.yaml", name = "snakeyaml", version = "1.33" }
13-
leveldb = { group = "org.iq80.leveldb", name = "leveldb", version = "0.11-SNAPSHOT" }
14-
jwt = { group = "com.nimbusds", name = "nimbus-jose-jwt", version = "9.13" }
18+
leveldb = { group = "org.iq80.leveldb", name = "leveldb", version = "0.11.1-SNAPSHOT" }
19+
leveldbjni = { group = "net.daporkchop", name = "leveldb-mcpe-jni", version = "0.0.10-SNAPSHOT" }
20+
snappy = { group = "org.xerial.snappy", name = "snappy-java", version = "1.1.10.7" }
21+
jwt = { group = "com.nimbusds", name = "nimbus-jose-jwt", version = "9.23" }
1522
jopt-simple = { group = "net.sf.jopt-simple", name = "jopt-simple", version = "5.0.4" }
16-
lombok = { group = "org.projectlombok", name = "lombok", version = "1.18.26" }
23+
blockstateupdater = { group = "org.cloudburstmc", name = "block-state-updater", version = "1.21.30-SNAPSHOT" }
24+
lmbda = { group = "org.lanternpowered", name = "lmbda", version = "2.0.0" }
25+
noise = { group = "net.daporkchop.lib", name = "noise", version = "0.5.6-SNAPSHOT" }
26+
lombok = { group = "org.projectlombok", name = "lombok", version = "1.18.34" }
1727

1828
# Logging dependencies
1929
log4j-api = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j" }
@@ -33,6 +43,7 @@ junit-jupiter-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engi
3343
log4j = [ "log4j-api", "log4j-core" ]
3444
terminal = [ "jline-terminal", "jline-terminal-jna", "jline-reader", "terminal-console" ]
3545
junit = [ "junit-jupiter-api", "junit-jupiter-engine" ]
46+
fastutilmaps = [ "fastutil-long-long-maps", "fastutil-int-short-maps", "fastutil-object-int-maps", "fastutil-object-object-maps" ]
3647

3748
[plugins]
3849
shadow = { id = "com.github.johnrengelman.shadow", version = "8.0.0" }

nukkit.yml.default

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
11
settings:
2-
# Multi-language setting
3-
# Available: eng, chs, cht, jpn, rus, spa, pol, bra, kor, ukr, deu
42
language: "eng"

src/main/java/cn/nukkit/Achievement.java

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,21 @@
55
import java.util.HashMap;
66

77
/**
8-
* Created by CreeperFace on 9. 11. 2016.
8+
* Achievement list and functions
9+
*
10+
* @author CreeperFace
911
*/
1012
public class Achievement {
1113

14+
/**
15+
* All known achievements.
16+
* <p>
17+
* Based on <a href="https://minecraft.fandom.com/wiki/Achievement/Java_Edition#List_of_achievements">...</a>
18+
*/
1219
public static final HashMap<String, Achievement> achievements = new HashMap<String, Achievement>() {
1320
{
14-
put("mineWood", new Achievement("Getting Wood"));
21+
put("openInventory", new Achievement("Taking Inventory"));
22+
put("mineWood", new Achievement("Getting Wood", "openInventory"));
1523
put("buildWorkBench", new Achievement("Benchmarking", "mineWood"));
1624
put("buildPickaxe", new Achievement("Time to Mine!", "buildWorkBench"));
1725
put("buildFurnace", new Achievement("Hot Topic", "buildPickaxe"));
@@ -20,25 +28,57 @@ public class Achievement {
2028
put("makeBread", new Achievement("Bake Bread", "buildHoe"));
2129
put("bakeCake", new Achievement("The Lie", "buildHoe"));
2230
put("buildBetterPickaxe", new Achievement("Getting an Upgrade", "buildPickaxe"));
31+
put("cookFish", new Achievement("Delicious Fish", "buildFurnace"));
32+
put("onARail", new Achievement("On A Rail", "acquireIron"));
2333
put("buildSword", new Achievement("Time to Strike!", "buildWorkBench"));
34+
put("killEnemy", new Achievement("Monster Hunter", "buildSword"));
35+
put("killCow", new Achievement("Cow Tipper", "buildSword"));
36+
put("flyPig", new Achievement("When Pigs Fly", "killCow"));
37+
put("snipeSkeleton", new Achievement("Sniper Duel", "killEnemy"));
2438
put("diamonds", new Achievement("DIAMONDS!", "acquireIron"));
39+
put("portal", new Achievement("We Need to Go Deeper", "diamonds"));
40+
put("ghast", new Achievement("Return to Sender", "portal"));
41+
put("blazeRod", new Achievement("Into Fire", "portal"));
42+
put("potion", new Achievement("Local Brewery", "blazeRod"));
43+
put("theEnd", new Achievement("The End?", "blazeRod"));
44+
put("theEnd2", new Achievement("The End.", "theEnd"));
45+
put("enchantments", new Achievement("Enchanter", "diamonds"));
46+
put("overkill", new Achievement("Overkill", "enchantments"));
47+
put("bookcase", new Achievement("Librarian", "enchantments"));
48+
put("exploreAllBiomes", new Achievement("Adventuring Time", "theEnd")); //TODO
49+
put("spawnWither", new Achievement("The Beginning?", "theEnd"));
50+
put("killWither", new Achievement("The Beginning.", "spawnWither"));
51+
put("fullBeacon", new Achievement("Beaconator", "killWither"));
52+
put("breedCow", new Achievement("Repopulation", "killCow"));
53+
put("diamondsToYou", new Achievement("Diamonds to you!", "diamonds"));
54+
put("overpowered", new Achievement("Overpowered", "buildBetterPickaxe"));
2555
}
2656
};
2757

58+
/**
59+
* Broadcasts achievement get message if player does not have the achievement yet. Returns true if broadcast.
60+
*/
2861
public static boolean broadcast(Player player, String achievementId) {
2962
if (!achievements.containsKey(achievementId)) {
3063
return false;
3164
}
32-
String translation = Server.getInstance().getLanguage().translateString("chat.type.achievement", player.getDisplayName(), TextFormat.GREEN + achievements.get(achievementId).getMessage() + TextFormat.RESET);
3365

34-
if (Server.getInstance().getPropertyBoolean("announce-player-achievements", true)) {
66+
String translation = TextFormat.WHITE + Server.getInstance().getLanguage().translateString("chat.type.achievement", player.getDisplayName(), TextFormat.GREEN + "[" + achievements.get(achievementId).message + "]", null);
67+
68+
if (Server.getInstance().announceAchievements) {
3569
Server.getInstance().broadcastMessage(translation);
3670
} else {
3771
player.sendMessage(translation);
3872
}
3973
return true;
4074
}
4175

76+
/**
77+
* Register an achievement
78+
* @param name save id
79+
* @param achievement achievement
80+
* @return true if successful, false if save id is already in use
81+
*/
4282
public static boolean add(String name, Achievement achievement) {
4383
if (achievements.containsKey(name)) {
4484
return false;
@@ -51,6 +91,10 @@ public static boolean add(String name, Achievement achievement) {
5191
public final String message;
5292
public final String[] requires;
5393

94+
/**
95+
* @param message achievement name displayed in achievement get message
96+
* @param requires save IDs of achievements player must complete before this achievement can be completed
97+
*/
5498
public Achievement(String message, String... requires) {
5599
this.message = message;
56100
this.requires = requires;
@@ -60,13 +104,16 @@ public String getMessage() {
60104
return message;
61105
}
62106

107+
/**
108+
* Broadcasts achievement get message
109+
*/
63110
public void broadcast(Player player) {
64-
String translation = Server.getInstance().getLanguage().translateString("chat.type.achievement", player.getDisplayName(), TextFormat.GREEN + this.getMessage(), null);
111+
String translation = TextFormat.WHITE + Server.getInstance().getLanguage().translateString("chat.type.achievement", player.getDisplayName(), TextFormat.GREEN + "[" + this.message + "]", null);
65112

66-
if (Server.getInstance().getPropertyBoolean("announce-player-achievements", true)) {
113+
if (Server.getInstance().announceAchievements) {
67114
Server.getInstance().broadcastMessage(translation);
68115
} else {
69116
player.sendMessage(translation);
70117
}
71118
}
72-
}
119+
}

0 commit comments

Comments
 (0)