Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 1.18 support as well as support for other versions #3

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,5 @@ gradle-app.setting
# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties

# Generated data files
output/
79 changes: 79 additions & 0 deletions 1.14.4/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Created by .ignore support plugin (hsz.mobi)
### Java template
# Compiled class file
*.class

# Log file
*.log
logs/

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/

# CMake
cmake-build-debug/
cmake-build-release/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests
### Gradle template
.gradle
/build/

# Ignore Gradle GUI config
gradle-app.setting

# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar

# Cache of project
.gradletasknamecache

# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties

12 changes: 12 additions & 0 deletions 1.14.4/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import net.fabricmc.loom.api.LoomGradleExtensionAPI

plugins {
id("fabric-loom") version "0.13.20"
}

dependencies {
implementation(project(mapOf("path" to ":core")))
minecraft("com.mojang:minecraft:1.14.4")
mappings(project.the<LoomGradleExtensionAPI>().officialMojangMappings())
modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}")
}
18 changes: 18 additions & 0 deletions 1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.enginehub.util.minecraft;

import org.enginehub.util.minecraft.dumper.Dumper;
import org.enginehub.util.minecraft.util.GameSetupUtils;

import java.util.ServiceLoader;

public class RunAll {

public static void main(String[] args) {
GameSetupUtils.setupGame();
for (Dumper dumper : ServiceLoader.load(Dumper.class)) {
System.out.println("Running dumper: " + dumper.getClass().getCanonicalName());
dumper.run();
System.out.println("Finished!");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.enginehub.util.minecraft.dumper;

import com.google.auto.service.AutoService;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;

import java.util.Iterator;

import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame;

@AutoService(Dumper.class)
public class BiomeTypesDumper extends RegistryClassDumper {

public static void main(String[] args) {
setupGame();
new BiomeTypesDumper().run();
}

public BiomeTypesDumper() {
super("com.sk89q.worldedit.world.biome", "Biome");
}

@Override
protected Iterator<String> getIds() {
return Registry.BIOME.keySet().stream().map(ResourceLocation::getPath).iterator();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
package org.enginehub.util.minecraft.dumper;

import com.google.auto.service.AutoService;
import com.google.common.collect.Lists;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry;
import net.minecraft.core.Vec3i;
import net.minecraft.locale.Language;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.Clearable;
import net.minecraft.world.level.EmptyBlockGetter;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.BoundingBox;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.VoxelShape;

import java.io.File;
import java.io.IOException;
import java.util.*;

import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame;

public class BlockRegistryDumper extends RegistryDumper<Block> {

private static final AABB FULL_CUBE = AABB.of(BoundingBox.getUnknownBox());

public BlockRegistryDumper(File file) {
super(file);
}

public static void main(String[] args) {
setupGame();
new Default().run();
}

@Override
public void registerAdapters(GsonBuilder builder) {
super.registerAdapters(builder);

builder.registerTypeAdapter(Vec3i.class, new Vec3iAdapter());
builder.registerTypeAdapter(Vec3.class, new Vec3dAdapter());
}

@Override
public Collection<String> getIds() {
return Registry.BLOCK.keySet().stream().map(ResourceLocation::toString).toList();
}

@Override
public Comparator<Map<String, Object>> getComparator() {
return Comparator.comparing(map -> (String) map.get("id"));
}

@Override
public List<Map<String, Object>> getProperties(String resourceLocation) {
Block block = Registry.BLOCK.get(new ResourceLocation(resourceLocation));
Map<String, Object> map = new TreeMap<>();
map.put("id", resourceLocation);
map.put("localizedName", Language.getInstance().getElement(block.getDescriptionId()));
map.put("material", getMaterial(block));
return Lists.newArrayList(map);
}

private Map<String, Object> getMaterial(Block b) {
BlockState bs = b.defaultBlockState();
Map<String, Object> map = new TreeMap<>();
map.put("powerSource", bs.isSignalSource());
map.put("lightValue", bs.getLightEmission());
map.put("hardness", bs.getDestroySpeed(EmptyBlockGetter.INSTANCE, BlockPos.ZERO));
map.put("resistance", b.getExplosionResistance());
map.put("ticksRandomly", b.isRandomlyTicking(bs));
VoxelShape vs = bs.getCollisionShape(EmptyBlockGetter.INSTANCE, BlockPos.ZERO);
map.put("fullCube", !vs.isEmpty() && isFullCube(vs.bounds()));
map.put("slipperiness", b.getFriction());
map.put("translucent", bs.propagatesSkylightDown(EmptyBlockGetter.INSTANCE, BlockPos.ZERO));
Material m = bs.getMaterial();
map.put("liquid", m.isLiquid());
map.put("solid", m.isSolid());
map.put("movementBlocker", m.blocksMotion());
map.put("burnable", m.isFlammable());
map.put("opaque", m.isSolidBlocking());
map.put("replacedDuringPlacement", m.isReplaceable());
map.put("toolRequired", !m.isAlwaysDestroyable());
map.put("fragileWhenPushed", m.getPushReaction() == PushReaction.DESTROY);
map.put("unpushable", m.getPushReaction() == PushReaction.BLOCK);
map.put("mapColor", rgb(m.getColor().col));
map.put("hasContainer", b instanceof EntityBlock bep &&
bep.newBlockEntity(EmptyBlockGetter.INSTANCE) instanceof Clearable);
return map;
}

private boolean isFullCube(AABB aabb) {
return aabb.equals(FULL_CUBE);
}

@AutoService(Dumper.class)
public static class Default implements Dumper {
@Override
public void run() {
new BlockRegistryDumper(new File(OUTPUT, "blocks.json")).run();
}
}

public static class Vec3iAdapter extends TypeAdapter<Vec3i> {
@Override
public Vec3i read(final JsonReader in) {
throw new UnsupportedOperationException();
}

@Override
public void write(final JsonWriter out, final Vec3i vec) throws IOException {
out.beginArray();
out.value(vec.getX());
out.value(vec.getY());
out.value(vec.getZ());
out.endArray();
}
}

public static class Vec3dAdapter extends TypeAdapter<Vec3> {
@Override
public Vec3 read(final JsonReader in) {
throw new UnsupportedOperationException();
}

@Override
public void write(final JsonWriter out, final Vec3 vec) throws IOException {
out.beginArray();
out.value(vec.x());
out.value(vec.y());
out.value(vec.z());
out.endArray();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package org.enginehub.util.minecraft.dumper;

import com.google.auto.service.AutoService;
import com.google.common.collect.Iterators;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;

import java.util.Iterator;

import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame;

@AutoService(Dumper.class)
public class BlockTypesDumper extends RegistryClassDumper {

public static void main(String[] args) {
setupGame();
new BlockTypesDumper().run();
}

public BlockTypesDumper() {
super("com.sk89q.worldedit.world.block", "Block");
}

@Override
protected Iterator<String> getIds() {
return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator();
}

@Override
protected Iterator<String> getTags() {
return BlockTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator();
}

@Override
protected Iterator<String> getDeprecatedIds() {
return Iterators.forArray(
"sign",
"wall_sign"
);
}
}
Loading