Reduce duplicate code (#18)
* Reduce duplicate code * Fix gradle task name * Revert name changes * Revert action name * Cleanup * Revert to java 17 * Fix generation * Cleanup * Simplify code of DGU * Remove unnecessary annotations * Remove unused var * Halt with error on error * Remove unused mixins * Update fabric loader * Ignore success result * Update gradle and use merged jar * Implement new client and server merged environment for running fabric * Set server run dir as asset dir * More cleanup * More cleanup 2 * More improvements * Remove more duplicate code * Use newer java methods * More cleanup * Remove SoundAccessors * More cleanup * Use java 21 for build * Initial work on 1.20.5 * Cleanup a lot of stuff * Do not generate mod jars to speed up builds * Override merger on now open classes directly * Use recommended approach * Readd custom merger * Working materials data generator * Fix inconsistencies * Fix collision order to be random * Use LinkedHashMap for more reproducibility * Fix imports
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly 'com.google.code.gson:gson:2.10.1'
|
||||
implementation 'io.github.classgraph:classgraph:4.8.172'
|
||||
implementation "net.lenni0451:Reflect:1.3.3"
|
||||
implementation 'org.slf4j:slf4j-api:2.0.13'
|
||||
implementation "org.slf4j:jul-to-slf4j:2.0.13"
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
it.options.encoding = "UTF-8"
|
||||
}
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion.set(JavaLanguageVersion.of(17))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package dev.u9g.minecraftdatagenerator;
|
||||
|
||||
import dev.u9g.minecraftdatagenerator.generators.DataGenerators;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.file.Path;
|
||||
|
||||
public class MinecraftDataGenerator {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(MinecraftDataGenerator.class);
|
||||
|
||||
public static void start(String versionName, Path serverRootDirectory) {
|
||||
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
|
||||
System.setErr(new PrintStream(new FileOutputStream(FileDescriptor.err)));
|
||||
MinecraftDataGenerator.LOGGER.info("Starting data generation!");
|
||||
Path dataDumpDirectory = serverRootDirectory.resolve("minecraft-data").resolve(versionName);
|
||||
DataGenerators.runDataGenerators(dataDumpDirectory);
|
||||
MinecraftDataGenerator.LOGGER.info("Done data generation!");
|
||||
Runtime.getRuntime().halt(0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package dev.u9g.minecraftdatagenerator.generators;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.internal.Streams;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
import io.github.classgraph.ClassGraph;
|
||||
import io.github.classgraph.ScanResult;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class DataGenerators {
|
||||
private static final List<IDataGenerator> GENERATORS = new ArrayList<>();
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(DataGenerators.class);
|
||||
|
||||
static {
|
||||
List<Class<IDataGenerator>> generators;
|
||||
try (ScanResult scanResult = new ClassGraph()
|
||||
.acceptPackages("dev.u9g.minecraftdatagenerator.generators")
|
||||
.overrideClassLoaders(IDataGenerator.class.getClassLoader())
|
||||
.enableClassInfo().scan()) {
|
||||
generators = scanResult
|
||||
.getClassesImplementing(IDataGenerator.class)
|
||||
.loadClasses(IDataGenerator.class);
|
||||
}
|
||||
|
||||
for (Class<IDataGenerator> generatorClass : generators) {
|
||||
try {
|
||||
GENERATORS.add(generatorClass.getDeclaredConstructor().newInstance());
|
||||
} catch (ReflectiveOperationException e) {
|
||||
LOGGER.error("Failed to instantiate data generator {}", generatorClass.getName(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean runDataGenerators(Path outputDirectory) {
|
||||
try {
|
||||
Files.createDirectories(outputDirectory);
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Failed to create data generator output directory at {}", outputDirectory, e);
|
||||
return false;
|
||||
}
|
||||
|
||||
int generatorsFailed = 0;
|
||||
LOGGER.info("Running minecraft data generators, output at {}", outputDirectory);
|
||||
|
||||
for (IDataGenerator dataGenerator : GENERATORS) {
|
||||
if (!dataGenerator.isEnabled()) {
|
||||
LOGGER.info("Skipping disabled generator {}", dataGenerator.getDataName());
|
||||
continue;
|
||||
}
|
||||
|
||||
LOGGER.info("Running generator {}", dataGenerator.getDataName());
|
||||
try {
|
||||
String outputFileName = String.format("%s.json", dataGenerator.getDataName());
|
||||
JsonElement outputElement = dataGenerator.generateDataJson();
|
||||
Path outputFilePath = outputDirectory.resolve(outputFileName);
|
||||
|
||||
try (Writer writer = Files.newBufferedWriter(outputFilePath, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
|
||||
JsonWriter jsonWriter = new JsonWriter(writer);
|
||||
jsonWriter.setIndent(" ");
|
||||
Streams.write(outputElement, jsonWriter);
|
||||
}
|
||||
|
||||
LOGGER.info("Generator: {} -> {}", dataGenerator.getDataName(), outputFileName);
|
||||
} catch (Throwable e) {
|
||||
LOGGER.error("Failed to run data generator {}", dataGenerator.getDataName(), e);
|
||||
generatorsFailed++;
|
||||
}
|
||||
}
|
||||
|
||||
LOGGER.info("Finishing running data generators");
|
||||
return generatorsFailed == 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.u9g.minecraftdatagenerator.generators;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
|
||||
public interface IDataGenerator {
|
||||
String getDataName();
|
||||
|
||||
JsonElement generateDataJson();
|
||||
|
||||
default boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user