mirror of
https://github.com/italicsjenga/valence.git
synced 2024-12-23 14:31:30 +11:00
Add extractor fabric mod
This commit is contained in:
parent
21e37c65c2
commit
f9be05ee4a
11
.gitignore
vendored
11
.gitignore
vendored
|
@ -1,2 +1,13 @@
|
||||||
/target
|
/target
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
|
.gradle
|
||||||
|
/extractor/build
|
||||||
|
/extractor/out
|
||||||
|
/extractor/classes
|
||||||
|
/extractor/run
|
||||||
|
|
||||||
|
/extractor/gradlew
|
||||||
|
/extractor/gradlew.bat
|
||||||
|
/extractor/gradle/wrapper
|
||||||
|
|
37
extractor/build.gradle
Normal file
37
extractor/build.gradle
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
plugins {
|
||||||
|
id 'fabric-loom' version '0.12-SNAPSHOT'
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
|
||||||
|
archivesBaseName = project.archives_base_name
|
||||||
|
version = project.mod_version
|
||||||
|
group = project.maven_group
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation 'com.google.code.gson:gson:2.9.0'
|
||||||
|
|
||||||
|
// To change the versions see the gradle.properties file
|
||||||
|
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
||||||
|
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
|
||||||
|
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||||
|
|
||||||
|
// modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
inputs.property "version", project.version
|
||||||
|
|
||||||
|
filesMatching("fabric.mod.json") {
|
||||||
|
expand "version": project.version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType(JavaCompile).configureEach {
|
||||||
|
it.options.release = 17
|
||||||
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
withSourcesJar()
|
||||||
|
}
|
16
extractor/gradle.properties
Normal file
16
extractor/gradle.properties
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Done to increase the memory available to gradle.
|
||||||
|
org.gradle.jvmargs=-Xmx1G
|
||||||
|
|
||||||
|
# Fabric Properties
|
||||||
|
# check these on https://fabricmc.net/develop
|
||||||
|
minecraft_version=1.19
|
||||||
|
yarn_mappings=1.19+build.4
|
||||||
|
loader_version=0.14.8
|
||||||
|
|
||||||
|
# Mod Properties
|
||||||
|
mod_version = 1.0.0
|
||||||
|
maven_group = dev.00a
|
||||||
|
archives_base_name = valence-extractor
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
fabric_version=0.57.0+1.19
|
10
extractor/settings.gradle
Normal file
10
extractor/settings.gradle
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
name = 'Fabric'
|
||||||
|
url = 'https://maven.fabricmc.net/'
|
||||||
|
}
|
||||||
|
mavenCentral()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,124 @@
|
||||||
|
package dev._00a.valence_extractor;
|
||||||
|
|
||||||
|
import com.google.gson.*;
|
||||||
|
import net.fabricmc.api.ModInitializer;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.registry.Registry;
|
||||||
|
import net.minecraft.world.EmptyBlockView;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
public class Extractor implements ModInitializer {
|
||||||
|
public static final String MOD_ID = "valence_extractor";
|
||||||
|
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
|
||||||
|
private Gson gson;
|
||||||
|
private Path outputDirectory;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInitialize() {
|
||||||
|
LOGGER.info("Starting extractor...");
|
||||||
|
|
||||||
|
try {
|
||||||
|
outputDirectory = Files.createDirectories(Paths.get("valence_extractor_output"));
|
||||||
|
gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
|
||||||
|
|
||||||
|
extractBlocks();
|
||||||
|
extractEntities();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
LOGGER.error("Extraction failed", e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGGER.info("Extractor finished successfully");
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void extractBlocks() throws IOException {
|
||||||
|
var blocksJson = new JsonArray();
|
||||||
|
var stateIdCounter = 0;
|
||||||
|
|
||||||
|
for (var block : Registry.BLOCK) {
|
||||||
|
var blockJson = new JsonObject();
|
||||||
|
// blockJson.addProperty("id", Registry.BLOCK.getRawId(block));
|
||||||
|
blockJson.addProperty("translation_key", block.getTranslationKey());
|
||||||
|
// blockJson.addProperty("min_state_id", stateIdCounter);
|
||||||
|
// blockJson.addProperty("max_state_id", stateIdCounter + block.getStateManager().getStates().size() - 1);
|
||||||
|
|
||||||
|
var propsJson = new JsonArray();
|
||||||
|
for (var prop : block.getStateManager().getProperties()) {
|
||||||
|
var propJson = new JsonObject();
|
||||||
|
|
||||||
|
propJson.addProperty("name", prop.getName());
|
||||||
|
|
||||||
|
var valuesJson = new JsonArray();
|
||||||
|
for (var value : prop.getValues()) {
|
||||||
|
valuesJson.add(value.toString());
|
||||||
|
}
|
||||||
|
propJson.add("values", valuesJson);
|
||||||
|
|
||||||
|
propsJson.add(propJson);
|
||||||
|
}
|
||||||
|
blockJson.add("properties", propsJson);
|
||||||
|
|
||||||
|
var statesJson = new JsonArray();
|
||||||
|
for (var state : block.getStateManager().getStates()) {
|
||||||
|
var stateJson = new JsonObject();
|
||||||
|
var id = stateIdCounter++;
|
||||||
|
stateJson.addProperty("id", id);
|
||||||
|
stateJson.addProperty("luminance", state.getLuminance());
|
||||||
|
stateJson.addProperty("opaque", state.isOpaque());
|
||||||
|
|
||||||
|
if (block.getDefaultState().equals(state)) {
|
||||||
|
blockJson.addProperty("default_state_id", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
var collisionShapesJson = new JsonArray();
|
||||||
|
for (var box : state.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN).getBoundingBoxes()) {
|
||||||
|
var boxJson = new JsonObject();
|
||||||
|
boxJson.addProperty("min_x", box.minX);
|
||||||
|
boxJson.addProperty("min_y", box.minY);
|
||||||
|
boxJson.addProperty("min_z", box.minZ);
|
||||||
|
boxJson.addProperty("max_x", box.maxX);
|
||||||
|
boxJson.addProperty("max_y", box.maxY);
|
||||||
|
boxJson.addProperty("max_z", box.maxZ);
|
||||||
|
collisionShapesJson.add(boxJson);
|
||||||
|
}
|
||||||
|
stateJson.add("collision_shapes", collisionShapesJson);
|
||||||
|
|
||||||
|
statesJson.add(stateJson);
|
||||||
|
}
|
||||||
|
blockJson.add("states", statesJson);
|
||||||
|
|
||||||
|
blocksJson.add(blockJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeJsonFile("blocks.json", blocksJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
void extractEntities() throws IOException {
|
||||||
|
var entitiesJson = new JsonArray();
|
||||||
|
for (var entity : Registry.ENTITY_TYPE) {
|
||||||
|
var entityJson = new JsonObject();
|
||||||
|
entityJson.addProperty("translation_key", entity.getTranslationKey());
|
||||||
|
|
||||||
|
entitiesJson.add(entityJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
writeJsonFile("entities.json", entitiesJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeJsonFile(String fileName, JsonElement element) throws IOException {
|
||||||
|
var out = outputDirectory.resolve(fileName);
|
||||||
|
var fileWriter = new FileWriter(out.toFile(), StandardCharsets.UTF_8);
|
||||||
|
gson.toJson(element, fileWriter);
|
||||||
|
fileWriter.close();
|
||||||
|
LOGGER.info("Wrote " + out.toAbsolutePath());
|
||||||
|
}
|
||||||
|
}
|
29
extractor/src/main/resources/fabric.mod.json
Normal file
29
extractor/src/main/resources/fabric.mod.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "valence_extractor",
|
||||||
|
"version": "${version}",
|
||||||
|
"name": "Valence Extractor",
|
||||||
|
"description": "Extracts Minecraft data for use in Valence",
|
||||||
|
"authors": [
|
||||||
|
"Valence Project Authors"
|
||||||
|
],
|
||||||
|
"contact": {
|
||||||
|
"homepage": "https://github.com/rj00a/valence",
|
||||||
|
"sources": "https://github.com/rj00a/valence"
|
||||||
|
},
|
||||||
|
"environment": "*",
|
||||||
|
"entrypoints": {
|
||||||
|
"main": [
|
||||||
|
"dev._00a.valence_extractor.Extractor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mixins": [],
|
||||||
|
"depends": {
|
||||||
|
"fabricloader": ">=0.14.6",
|
||||||
|
"minecraft": "~1.19",
|
||||||
|
"java": ">=17"
|
||||||
|
},
|
||||||
|
"suggests": {
|
||||||
|
"another-mod": "*"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue