Skip to content
Merged
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
18 changes: 8 additions & 10 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
name: PR Checks

on:
pull_request:
branches: [ main ]
on: [ pull_request ]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
- uses: actions/checkout@v6
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
java-version: '25'
distribution: 'graalvm'
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
uses: gradle/actions/setup-gradle@v5
- name: Build modules
run: ./gradlew build -Peula=true
run: ./gradlew generateData -Peula=true
12 changes: 6 additions & 6 deletions .github/workflows/snapshot-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ jobs:
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}
steps:
- uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
- uses: actions/checkout@v6
- name: Set up JDK 25
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
java-version: '25'
distribution: 'graalvm'
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
uses: gradle/actions/setup-gradle@v5
- name: Publish to Sonatype
env:
TAG_VERSION: ${{ github.ref_name }}
Expand Down
21 changes: 9 additions & 12 deletions DataGenerator/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,32 +1,29 @@
import org.spongepowered.gradle.vanilla.MinecraftExtension

plugins {
java
application
}

apply {
plugin("org.spongepowered.gradle.vanilla")
alias(libs.plugins.loom)
}

group = "net.minestom"
version = rootProject.version

dependencies {
minecraft("com.mojang:minecraft:${libs.versions.minecraft.get()}")

implementation(libs.gson)
implementation(libs.bundles.logging)
//implementation(libs.bundles.logging) Server comes with logging
}

application {
mainClass.set("net.minestom.datagen.DataGen")
}

java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
sourceCompatibility = JavaVersion.VERSION_25
targetCompatibility = JavaVersion.VERSION_25
}

extensions.configure<MinecraftExtension> {
version(libs.versions.minecraft.get())
platform(org.spongepowered.gradle.vanilla.repository.MinecraftPlatform.SERVER)
loom {
serverOnlyMinecraftJar()
accessWidenerPath = file("src/main/resources/minestom.classtweaker")
}

This file was deleted.

69 changes: 30 additions & 39 deletions DataGenerator/src/main/java/net/minestom/datagen/DataGen.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package net.minestom.datagen;

import com.google.common.hash.Hashing;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.mojang.serialization.Codec;
import net.minecraft.util.HashOps;
import net.minestom.generators.tags.GenericTagGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
Expand All @@ -20,25 +16,24 @@
public class DataGen {
public static final Gson GSON = new GsonBuilder().disableHtmlEscaping().create();
private static final Logger LOGGER = LoggerFactory.getLogger(DataGen.class);
private static Path OUTPUT = Path.of("../MinestomData/");

private static final List<String> TAG_TYPES = List.of(
"banner_pattern",
"block",
"dialog",
"damage_type",
"enchantment",
"entity_type",
"fluid",
"game_event",
"instrument",
"item",
"painting_variant",
"worldgen/biome",
"timeline"
"banner_pattern",
"block",
"dialog",
"damage_type",
"enchantment",
"entity_type",
"fluid",
"game_event",
"instrument",
"item",
"painting_variant",
"worldgen/biome",
"timeline"
);
private static Path OUTPUT = Path.of("../MinestomData/");

public static void main(String[] args) throws Exception {
static void main(String[] args) throws Exception {
if (args.length > 0) {
OUTPUT = Path.of(args[0]);
}
Expand All @@ -60,28 +55,24 @@ public static void main(String[] args) throws Exception {
LOGGER.info("Generation done!");
}

public static void generate(String fileName, DataGenerator generator) {
try {
Object result = generator.generate();
final var path = OUTPUT.resolve(fileName + (result instanceof JsonElement ? ".json" : ".snbt"));
public static void generate(String fileName, DataGenerator generator) throws Exception {
Object result = generator.generate();
final var path = OUTPUT.resolve(fileName + (result instanceof JsonElement ? ".json" : ".snbt"));

// Ensure that the directory exists
if (!Files.exists(path)) {
Files.createDirectories(path.getParent());
}
try (BufferedWriter writer = Files.newBufferedWriter(path, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
try {
if (result instanceof JsonElement) {
GSON.toJson(result, writer);
} else {
writer.write(result.toString());
}
} catch (Exception e) {
throw new RuntimeException(e);
// Ensure that the directory exists
if (!Files.exists(path)) {
Files.createDirectories(path.getParent());
}
try (BufferedWriter writer = Files.newBufferedWriter(path, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
try {
if (result instanceof JsonElement) {
GSON.toJson(result, writer);
} else {
writer.write(result.toString());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import net.minecraft.world.level.EmptyBlockGetter;
import net.minecraft.world.level.block.*;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockBehaviourHack;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minestom.datagen.DataGenerator;
Expand Down Expand Up @@ -50,13 +49,13 @@ public JsonObject generate() {
}
// Random offset
if (defaultBlockState.hasOffsetFunction()) {
blockJson.addProperty("maxHorizontalOffset", BlockBehaviourHack.getMaxHorizontalOffset(block));
blockJson.addProperty("maxHorizontalOffset", block.getMaxHorizontalOffset());

// There are only XY and XYZ offset functions, so we simply execute the offset func
// and check if the Y value is 0. It is seeded to the coordinates, so it should be reliable.
var result = defaultBlockState.getOffset(new BlockPos(42, 42, 42));
if (result.y != 0) {
blockJson.addProperty("maxVerticalOffset", BlockBehaviourHack.getMaxVerticalOffset(block));
blockJson.addProperty("maxVerticalOffset", block.getMaxVerticalOffset());
}
}
// Default values
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,15 @@
import com.google.gson.JsonObject;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.JsonOps;
import net.minecraft.core.DefaultedRegistry;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.component.DataComponentInitializers;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.registries.VanillaRegistries;
import net.minecraft.resources.RegistryOps;
import net.minecraft.util.Util;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minestom.datagen.DataGenerator;
Expand All @@ -20,8 +25,8 @@ public JsonObject generate() {
var blockRegistry = BuiltInRegistries.BLOCK;
var entityTypeRegistry = BuiltInRegistries.ENTITY_TYPE;

var registryAccess = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY);
var registryJsonOps = RegistryOps.create(JsonOps.INSTANCE, registryAccess);
var lookup = applyPendingComponents();
var registryJsonOps = lookup.createSerializationContext(JsonOps.INSTANCE);

for (var item : registry) {
final var location = registry.getKey(item);
Expand Down Expand Up @@ -58,4 +63,11 @@ public JsonObject generate() {
throw new RuntimeException("Unknown error");
}
}

private static HolderLookup.Provider applyPendingComponents() {
HolderLookup.Provider lookup = VanillaRegistries.createLookup();
var registry = BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.build(lookup);
registry.forEach(DataComponentInitializers.PendingComponents::apply);
return lookup;
}
}
4 changes: 4 additions & 0 deletions DataGenerator/src/main/resources/minestom.classtweaker
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessWidener v2 official

accessible method net/minecraft/world/level/block/state/BlockBehaviour getMaxHorizontalOffset ()F
accessible method net/minecraft/world/level/block/state/BlockBehaviour getMaxVerticalOffset ()F
5 changes: 2 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
plugins {
`java-library`
alias(libs.plugins.vanilla.gradle) apply false

`maven-publish`
signing
Expand All @@ -15,8 +14,8 @@ java {
withSourcesJar()
withJavadocJar()

sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
sourceCompatibility = JavaVersion.VERSION_25
targetCompatibility = JavaVersion.VERSION_25
}

tasks.register("generateData") {
Expand Down
10 changes: 5 additions & 5 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ metadata.format.version = "1.1"

[versions]
gson = "2.13.2"
minecraft = "1.21.11"
minecraft = "26.1-snapshot-3"

slf4j-api = "2.0.17"
logback = "1.5.19"
logback = "1.5.22"

vanilla-gradle = "0.2.1-SNAPSHOT"
nmcp = "1.2.0"
loom = "1.14-SNAPSHOT"
nmcp = "1.3.0"

[libraries]
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
Expand All @@ -21,5 +21,5 @@ logback-classic = { group = "ch.qos.logback", name = "logback-classic", version.
logging = ["slf4j-api", "logback-core", "logback-classic"]

[plugins]
vanilla-gradle = { id = "org.spongepowered.gradle.vanilla", version.ref = "vanilla-gradle" }
nmcp = { id = "com.gradleup.nmcp.aggregation", version.ref = "nmcp" }
loom = { id = "net.fabricmc.fabric-loom", version.ref = "loom" }
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading