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:
Alex
2024-07-14 09:23:34 +02:00
committed by GitHub
parent 44f49b4ab5
commit 71070c32bc
459 changed files with 3421 additions and 9078 deletions
+21
View File
@@ -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;
}
}