From 78b4d9ad80023eccc0dbcc4d9a219b856cd04767 Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Fri, 3 Dec 2021 17:20:19 -0500 Subject: [PATCH 01/18] Add subprojects for older versions --- 1.14.4/build.gradle.kts | 17 ++ ...org.enginehub.util.minecraft.dumper.Dumper | 10 ++ .../compileJava/source-classes-mapping.txt | 35 ++++ .../org/enginehub/util/minecraft/RunAll.java | 18 ++ .../minecraft/dumper/BiomeTypesDumper.java | 34 ++++ .../dumper/BlockCategoriesDumper.java | 34 ++++ .../minecraft/dumper/BlockRegistryDumper.java | 142 ++++++++++++++++ .../minecraft/dumper/BlockTypesDumper.java | 38 +++++ .../minecraft/dumper/DataVersionDumper.java | 135 +++++++++++++++ .../util/minecraft/dumper/Dumper.java | 5 + .../dumper/EntityTypeCategoriesDumper.java | 29 ++++ .../minecraft/dumper/EntityTypesDumper.java | 36 ++++ .../dumper/ItemCategoriesDumper.java | 35 ++++ .../minecraft/dumper/ItemRegistryDumper.java | 57 +++++++ .../minecraft/dumper/ItemTypesDumper.java | 41 +++++ .../minecraft/dumper/RegistryClassDumper.java | 155 ++++++++++++++++++ .../util/minecraft/dumper/RegistryDumper.java | 69 ++++++++ .../util/minecraft/util/GameSetupUtils.java | 12 ++ 1.15.2/build.gradle.kts | 17 ++ ...org.enginehub.util.minecraft.dumper.Dumper | 10 ++ .../compileJava/source-classes-mapping.txt | 35 ++++ .../org/enginehub/util/minecraft/RunAll.java | 18 ++ .../minecraft/dumper/BiomeTypesDumper.java | 34 ++++ .../dumper/BlockCategoriesDumper.java | 34 ++++ .../minecraft/dumper/BlockRegistryDumper.java | 142 ++++++++++++++++ .../minecraft/dumper/BlockTypesDumper.java | 38 +++++ .../minecraft/dumper/DataVersionDumper.java | 135 +++++++++++++++ .../util/minecraft/dumper/Dumper.java | 10 ++ .../dumper/EntityTypeCategoriesDumper.java | 29 ++++ .../minecraft/dumper/EntityTypesDumper.java | 36 ++++ .../dumper/ItemCategoriesDumper.java | 35 ++++ .../minecraft/dumper/ItemRegistryDumper.java | 57 +++++++ .../minecraft/dumper/ItemTypesDumper.java | 41 +++++ .../minecraft/dumper/RegistryClassDumper.java | 155 ++++++++++++++++++ .../util/minecraft/dumper/RegistryDumper.java | 69 ++++++++ .../util/minecraft/util/GameSetupUtils.java | 12 ++ 1.16.5/build.gradle.kts | 17 ++ ...org.enginehub.util.minecraft.dumper.Dumper | 10 ++ .../compileJava/source-classes-mapping.txt | 35 ++++ .../org/enginehub/util/minecraft/RunAll.java | 1 + .../minecraft/dumper/BiomeTypesDumper.java | 35 ++++ .../dumper/BlockCategoriesDumper.java | 36 ++++ .../minecraft/dumper/BlockRegistryDumper.java | 8 +- .../minecraft/dumper/BlockTypesDumper.java | 37 +++++ .../minecraft/dumper/DataVersionDumper.java | 150 +++++++++++++++++ .../util/minecraft/dumper/Dumper.java | 10 ++ .../dumper/EntityTypeCategoriesDumper.java | 29 ++++ .../minecraft/dumper/EntityTypesDumper.java | 0 .../dumper/ItemCategoriesDumper.java | 34 ++++ .../minecraft/dumper/ItemRegistryDumper.java | 4 +- .../minecraft/dumper/ItemTypesDumper.java | 40 +++++ .../minecraft/dumper/RegistryClassDumper.java | 16 +- .../util/minecraft/dumper/RegistryDumper.java | 1 - .../util/minecraft/util/GameSetupUtils.java | 73 +++++++++ 1.17.1/build.gradle.kts | 17 ++ ...org.enginehub.util.minecraft.dumper.Dumper | 10 ++ .../compileJava/source-classes-mapping.txt | 35 ++++ .../org/enginehub/util/minecraft/RunAll.java | 20 +++ .../minecraft/dumper/BiomeTypesDumper.java | 1 - .../dumper/BlockCategoriesDumper.java | 1 - .../minecraft/dumper/BlockRegistryDumper.java | 146 +++++++++++++++++ .../minecraft/dumper/BlockTypesDumper.java | 1 - .../minecraft/dumper/DataVersionDumper.java | 4 +- .../util/minecraft/dumper/Dumper.java | 10 ++ .../dumper/EntityTypeCategoriesDumper.java | 1 - .../minecraft/dumper/EntityTypesDumper.java | 36 ++++ .../dumper/ItemCategoriesDumper.java | 1 - .../minecraft/dumper/ItemRegistryDumper.java | 62 +++++++ .../minecraft/dumper/ItemTypesDumper.java | 0 .../minecraft/dumper/RegistryClassDumper.java | 124 ++++++++++++++ .../util/minecraft/dumper/RegistryDumper.java | 64 ++++++++ .../util/minecraft/util/GameSetupUtils.java | 0 build.gradle.kts | 23 --- settings.gradle.kts | 16 +- 74 files changed, 2877 insertions(+), 40 deletions(-) create mode 100644 1.14.4/build.gradle.kts create mode 100644 1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper create mode 100644 1.14.4/build/tmp/compileJava/source-classes-mapping.txt create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java rename {src => 1.14.4/src}/main/java/org/enginehub/util/minecraft/dumper/Dumper.java (56%) create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java create mode 100644 1.15.2/build.gradle.kts create mode 100644 1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper create mode 100644 1.15.2/build/tmp/compileJava/source-classes-mapping.txt create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java create mode 100644 1.16.5/build.gradle.kts create mode 100644 1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper create mode 100644 1.16.5/build/tmp/compileJava/source-classes-mapping.txt rename {src => 1.16.5/src}/main/java/org/enginehub/util/minecraft/RunAll.java (99%) create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java rename {src => 1.16.5/src}/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java (93%) create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java rename {src => 1.16.5/src}/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java (100%) create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java rename {src => 1.16.5/src}/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java (93%) create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java rename {src => 1.16.5/src}/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java (93%) rename {src => 1.16.5/src}/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java (99%) create mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java create mode 100644 1.17.1/build.gradle.kts create mode 100644 1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper create mode 100644 1.17.1/build/tmp/compileJava/source-classes-mapping.txt create mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java (99%) rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java (99%) create mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java (99%) rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java (97%) create mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java (99%) create mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java (99%) create mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java (100%) create mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java create mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java rename {src => 1.17.1/src}/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java (100%) diff --git a/1.14.4/build.gradle.kts b/1.14.4/build.gradle.kts new file mode 100644 index 0000000..d3d68b2 --- /dev/null +++ b/1.14.4/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + java + id("fabric-loom") version "0.8.9" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + minecraft("com.mojang:minecraft:1.14.4") + mappings("net.fabricmc:yarn:1.14.4+build.9:v2") + modImplementation("net.fabricmc:fabric-loader:0.12.8") + implementation("com.squareup:javapoet:1.13.0") + val autoServiceVersion = "1.0.1" + compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") + annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") +} diff --git a/1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper new file mode 100644 index 0000000..76af17a --- /dev/null +++ b/1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper @@ -0,0 +1,10 @@ +org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default +org.enginehub.util.minecraft.dumper.BlockTypesDumper +org.enginehub.util.minecraft.dumper.DataVersionDumper$Default +org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org.enginehub.util.minecraft.dumper.EntityTypesDumper +org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.14.4/build/tmp/compileJava/source-classes-mapping.txt b/1.14.4/build/tmp/compileJava/source-classes-mapping.txt new file mode 100644 index 0000000..f789a24 --- /dev/null +++ b/1.14.4/build/tmp/compileJava/source-classes-mapping.txt @@ -0,0 +1,35 @@ +org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java + org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org/enginehub/util/minecraft/util/GameSetupUtils.java + org.enginehub.util.minecraft.util.GameSetupUtils +org/enginehub/util/minecraft/RunAll.java + org.enginehub.util.minecraft.RunAll +org/enginehub/util/minecraft/dumper/BlockTypesDumper.java + org.enginehub.util.minecraft.dumper.BlockTypesDumper +org/enginehub/util/minecraft/dumper/ItemTypesDumper.java + org.enginehub.util.minecraft.dumper.ItemTypesDumper +org/enginehub/util/minecraft/dumper/DataVersionDumper.java + org.enginehub.util.minecraft.dumper.DataVersionDumper + org.enginehub.util.minecraft.dumper.DataVersionDumper$Default +org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java + org.enginehub.util.minecraft.dumper.BlockRegistryDumper + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter +org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java + org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org/enginehub/util/minecraft/dumper/EntityTypesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypesDumper +org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java + org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java + org.enginehub.util.minecraft.dumper.ItemRegistryDumper + org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org/enginehub/util/minecraft/dumper/Dumper.java + org.enginehub.util.minecraft.dumper.Dumper +org/enginehub/util/minecraft/dumper/RegistryDumper.java + org.enginehub.util.minecraft.dumper.RegistryDumper +org/enginehub/util/minecraft/dumper/RegistryClassDumper.java + org.enginehub.util.minecraft.dumper.RegistryClassDumper diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java new file mode 100644 index 0000000..b351d91 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -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.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + dumper.run(); + System.err.println("Finished!"); + } + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java new file mode 100644 index 0000000..239121c --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -0,0 +1,34 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + } + + @Override + protected Collection getIds() { + return Registry.BIOME.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("nether")); + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java new file mode 100644 index 0000000..7398c94 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -0,0 +1,34 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class BlockCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new BlockCategoriesDumper().run(); + } + + public BlockCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); + } + + @Override + protected Collection getIds() { + return Registry.BLOCK.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("dirt_like")); + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java new file mode 100644 index 0000000..bebb31a --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -0,0 +1,142 @@ +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.block.Block; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.util.Clearable; +import net.minecraft.util.Identifier; +import net.minecraft.util.Language; +import net.minecraft.util.math.*; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.EmptyBlockView; + +import java.io.File; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class BlockRegistryDumper extends RegistryDumper { + + private static final Box FULL_CUBE = Box.from(MutableIntBoundingBox.empty()); + + 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(Vec3d.class, new Vec3dAdapter()); + } + + @Override + public Registry getRegistry() { + return Registry.BLOCK; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(Identifier resourceLocation, Block block) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("localizedName", Language.getInstance().translate(block.getTranslationKey())); + map.put("material", getMaterial(block)); + return Lists.newArrayList(map); + } + + private Map getMaterial(Block b) { + BlockState bs = b.getDefaultState(); + Map map = new TreeMap<>(); + map.put("powerSource", bs.emitsRedstonePower()); + map.put("lightValue", bs.getLuminance()); + map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + map.put("resistance", b.getBlastResistance()); + map.put("ticksRandomly", b.hasRandomTicks(bs)); + VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); + map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); + map.put("slipperiness", b.getSlipperiness()); + map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + Material m = bs.getMaterial(); + map.put("liquid", m.isLiquid()); + map.put("solid", m.isSolid()); + map.put("movementBlocker", m.blocksMovement()); + map.put("burnable", m.isBurnable()); + map.put("opaque", m.blocksLight()); + map.put("replacedDuringPlacement", m.isReplaceable()); + map.put("toolRequired", !m.canBreakByHand()); + map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); + map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); + map.put("mapColor", rgb(m.getColor().color)); + map.put("hasContainer", b instanceof BlockEntityProvider bep && + bep.createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable); + return map; + } + + private boolean isFullCube(Box 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 { + @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 { + @Override + public Vec3d read(final JsonReader in) { + throw new UnsupportedOperationException(); + } + + @Override + public void write(final JsonWriter out, final Vec3d vec) throws IOException { + out.beginArray(); + out.value(vec.getX()); + out.value(vec.getY()); + out.value(vec.getZ()); + out.endArray(); + } + } +} \ No newline at end of file diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java new file mode 100644 index 0000000..867711e --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -0,0 +1,38 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +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(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + } + + @Override + protected Collection getIds() { + return Registry.BLOCK.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("sign"), + new Identifier("wall_sign"), + new Identifier("grass_path") + ); + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java new file mode 100644 index 0000000..d7d2492 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -0,0 +1,135 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.SharedConstants; +import net.minecraft.block.Block; +import net.minecraft.state.property.*; +import net.minecraft.tag.RegistryTagManager; +import net.minecraft.tag.TagContainer; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class DataVersionDumper implements Dumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + new DataVersionDumper(file).run(); + } + } + + private final File file; + private final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + + public DataVersionDumper(File file) { + this.file = file; + } + + private Map> getTags(TagContainer provider, Registry registry) { + Map> tagCollector = new TreeMap<>(); + + provider.getEntries().forEach((key, value) -> + tagCollector.put(key.toString(), value.values().stream() + .map(entry -> checkNotNull(registry.getId(entry))) + .map(Identifier::toString) + .sorted() + .collect(Collectors.toList()))); + + return tagCollector; + } + + @SuppressWarnings("rawtypes") + private String getTypeName(Class clazz) { + if (clazz == EnumProperty.class) { + return "enum"; + } else if (clazz == IntProperty.class) { + return "int"; + } else if (clazz == BooleanProperty.class) { + return "bool"; + } else if (clazz == DirectionProperty.class) { + return "direction"; + } else { + throw new RuntimeException("Unknown property!"); + } + } + + @Override + public void run() { + // Blocks + Map> blocks = new TreeMap<>(); + for (Identifier blockId : Registry.BLOCK.getIds()) { + Map bl = new TreeMap<>(); + Block block = Registry.BLOCK.get(blockId); + Map properties = new TreeMap<>(); + for (Property prop : block.getDefaultState().getProperties()) { + Map propertyValues = new TreeMap<>(); + propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("type", getTypeName(prop.getClass())); + properties.put(prop.getName(), propertyValues); + } + bl.put("properties", properties); + StringBuilder defaultState = new StringBuilder(); + defaultState.append(blockId.toString()); + if (!block.getDefaultState().getEntries().isEmpty()) { + List bits = new ArrayList<>(); + block.getDefaultState().getEntries().entrySet().stream().sorted(Comparator.comparing(e -> e.getKey().getName())).forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase())); + defaultState.append("[").append(String.join(",", bits)).append("]"); + } + bl.put("defaultstate", defaultState.toString()); + blocks.put(blockId.toString(), bl); + } + + // Items + List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Entities + List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Biomes + List biomes = Registry.BIOME.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + RegistryTagManager tagManager = new RegistryTagManager(); + // BlockTags + Map> blockTags = getTags(tagManager.blocks(), Registry.BLOCK); + + // ItemTags + Map> itemTags = getTags(tagManager.items(), Registry.ITEM); + + // EntityTags + Map> entityTags = getTags(tagManager.entityTypes(), Registry.ENTITY_TYPE); + + Map output = new TreeMap<>(); + output.put("blocks", blocks); + output.put("items", items); + output.put("entities", entities); + output.put("biomes", biomes); + output.put("blocktags", blockTags); + output.put("itemtags", itemTags); + output.put("entitytags", entityTags); + + try { + Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java similarity index 56% rename from src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java rename to 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java index 50a080f..34bf981 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -1,5 +1,10 @@ package org.enginehub.util.minecraft.dumper; +import java.io.File; + public interface Dumper { + + File OUTPUT = new File("output/1.14.4"); + void run(); } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java new file mode 100644 index 0000000..db2a0f0 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -0,0 +1,29 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypeCategoriesDumper extends RegistryClassDumper { + + // worldedit doesn't actually do entity type categories yet + public static void main(String[] args) { + setupGame(); + new EntityTypeCategoriesDumper().run(); + } + + public EntityTypeCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); + } + + @Override + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds(); + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java new file mode 100644 index 0000000..0fbde15 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -0,0 +1,36 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new EntityTypesDumper().run(); + } + + public EntityTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("zombie_pigman") + ); + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java new file mode 100644 index 0000000..1c1fac8 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -0,0 +1,35 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemCategoriesDumper().run(); + } + + public ItemCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); + } + + @Override + protected Collection getIds() { + return Registry.ITEM.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("furnace_materials")); + } +} + diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java new file mode 100644 index 0000000..b7c9e22 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -0,0 +1,57 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import net.minecraft.item.Item; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.util.*; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class ItemRegistryDumper extends RegistryDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + new ItemRegistryDumper(new File(OUTPUT, "items.json")).run(); + } + } + + public ItemRegistryDumper(File file) { + super(file); + } + + @Override + public Registry getRegistry() { + return Registry.ITEM; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + public List> getProperties(Identifier resourceLocation, Item item) { + List> maps = new ArrayList<>(); + maps.add(getPropertiesForItem(resourceLocation, item)); + return maps; + } + + private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("unlocalizedName", item.getTranslationKey(item.getStackForRender())); + map.put("localizedName", item.getName(item.getStackForRender()).getString()); + map.put("maxDamage", item.getMaxDamage()); + map.put("maxStackSize", item.getMaxCount()); + return map; + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java new file mode 100644 index 0000000..5b8f730 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -0,0 +1,41 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemTypesDumper().run(); + } + + public ItemTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ITEM.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("cactus_green"), + new Identifier("dandelion_yellow"), + new Identifier("rose_red"), + new Identifier("sign"), + new Identifier("zombie_pigman_spawn_egg"), + new Identifier("grass_path") + ); + } +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java new file mode 100644 index 0000000..eaac883 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -0,0 +1,155 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.io.MoreFiles; +import com.squareup.javapoet.*; +import net.minecraft.util.Identifier; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.function.UnaryOperator; +import java.util.regex.Pattern; + +import static javax.lang.model.element.Modifier.*; + +public abstract class RegistryClassDumper implements Dumper { + + private static final ClassName JAVAX_NULLABLE = + ClassName.get("javax.annotation", "Nullable"); + private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); + private static final String FOUR_SPACES = Strings.repeat(" ", 4); + + static { + if (!Files.exists(OUTPUT_DIRECTORY)) { + try { + Files.createDirectory(OUTPUT_DIRECTORY); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private static UnaryOperator inlineAnnotation(String name) { + Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); + return content -> pattern.matcher(content).replaceAll("@" + name + " "); + } + + private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); + private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); + + /** + * Handles simple pluralization rules. + */ + private static String makePlural(String name) { + if (name.endsWith("y")) { + return name.substring(0, name.length() - 1) + "ies"; + } + return name + "s"; + } + + private final ClassName type; + private final boolean nullable; + + protected RegistryClassDumper(ClassName type, boolean nullable) { + this.type = type; + this.nullable = nullable; + } + + protected abstract Collection getIds(); + + protected Collection getDeprecatedIds() { + return Collections.emptySet(); + } + + @Override + public void run() { + Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); + Set resources = ImmutableSortedSet + .naturalOrder() + .addAll(getIds()) + .addAll(deprecatedIds) + .build(); + ClassName pluralType = type.peerClass(makePlural(type.simpleName())); + TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); + builder.addModifiers(PUBLIC, FINAL); + builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class) + .addMember("value", "$S", "unused") + .build()); + builder.addJavadoc( + "Stores a list of common {@link $1T $2N}.\n\n@see $1T", + type, pluralType.simpleName() + ); + builder.addMethod(MethodSpec.constructorBuilder() + .addModifiers(PRIVATE) + .build()); + builder.addMethod(createGetMethod()); + for (Identifier resourceLocation : resources) { + String name = resourceLocation.getPath().toUpperCase(); + FieldSpec.Builder fieldBuilder = FieldSpec.builder( + type, + name, + PUBLIC, STATIC, FINAL + ); + if (deprecatedIds.contains(resourceLocation)) { + fieldBuilder.addAnnotation(Deprecated.class); + } + if (nullable) { + fieldBuilder.addAnnotation(JAVAX_NULLABLE); + } + fieldBuilder.initializer("get($S)", resourceLocation); + builder.addField(fieldBuilder.build()); + } + TypeSpec spec = builder.build(); + JavaFile javaFile = JavaFile.builder(type.packageName(), spec) + .indent(FOUR_SPACES) + .skipJavaLangImports(true) + .build(); + + try { + Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); + String content = fixContent(javaFile.toString()); + MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } + + private MethodSpec createGetMethod() { + MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); + builder + .addJavadoc("Gets the {@link $T} associated with the given id.", type) + .addModifiers(PUBLIC, STATIC) + .addParameter(String.class, "id"); + if (nullable) { + builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())) + .addStatement("return $T.REGISTRY.get(id)", type); + } else { + builder.returns(type) + .addCode(CodeBlock.builder() + .addStatement("$1T entry = $1T.REGISTRY.get(id)", type) + .beginControlFlow("if (entry == null)") + .addStatement("return new $T(id)", type) + .endControlFlow() + .addStatement("return entry") + .build()); + } + return builder.build(); + } + + private String fixContent(String content) { + if (nullable) { + content = INLINE_NULLABLE.apply(content); + } + content = INLINE_DEPRECATED.apply(content); + content = content.replace(");\n\n", ");\n") + .replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); + return content; + } + +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java new file mode 100644 index 0000000..9feabc0 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -0,0 +1,69 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.collect.ImmutableList; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +abstract class RegistryDumper implements Dumper { + + private final File file; + private final Gson gson; + + protected RegistryDumper(File file) { + this.file = file; + GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); + registerAdapters(builder); + this.gson = builder.create(); + } + + public void registerAdapters(GsonBuilder builder) { + + } + + @Override + public void run() { + Registry registry = getRegistry(); + ImmutableList> list = ImmutableList.sortedCopyOf( + getComparator(), + getRegistry().getIds().stream() + .flatMap(v -> getProperties(v, registry.get(v)).stream()) + .collect(Collectors.toList()) + ); + + String out = gson.toJson(list); + this.write(out); + System.out.println("Wrote file: " + file.getAbsolutePath()); + } + + private void write(String s) { + try(FileOutputStream str = new FileOutputStream(file)) { + str.write(s.getBytes()); + } catch (IOException e) { + System.err.println("Error writing registry dump: "); + e.printStackTrace(); + } + } + + protected String rgb(int i) { + int r = (i >> 16) & 0xFF; + int g = (i >> 8) & 0xFF; + int b = i & 0xFF; + return String.format("#%02x%02x%02x", r, g, b); + } + + public abstract List> getProperties(Identifier resourceLocation, V object); + + public abstract Registry getRegistry(); + + public abstract Comparator> getComparator(); +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java new file mode 100644 index 0000000..9c393b4 --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -0,0 +1,12 @@ +package org.enginehub.util.minecraft.util; + +import net.minecraft.Bootstrap; +import net.minecraft.SharedConstants; + +public final class GameSetupUtils { + + public static void setupGame() { + SharedConstants.getGameVersion(); + Bootstrap.initialize(); + } +} diff --git a/1.15.2/build.gradle.kts b/1.15.2/build.gradle.kts new file mode 100644 index 0000000..b0be605 --- /dev/null +++ b/1.15.2/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + java + id("fabric-loom") version "0.8.9" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + minecraft("com.mojang:minecraft:1.15.2") + mappings("net.fabricmc:yarn:1.15.2+build.9:v2") + modImplementation("net.fabricmc:fabric-loader:0.12.8") + implementation("com.squareup:javapoet:1.13.0") + val autoServiceVersion = "1.0.1" + compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") + annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") +} diff --git a/1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper new file mode 100644 index 0000000..76af17a --- /dev/null +++ b/1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper @@ -0,0 +1,10 @@ +org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default +org.enginehub.util.minecraft.dumper.BlockTypesDumper +org.enginehub.util.minecraft.dumper.DataVersionDumper$Default +org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org.enginehub.util.minecraft.dumper.EntityTypesDumper +org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.15.2/build/tmp/compileJava/source-classes-mapping.txt b/1.15.2/build/tmp/compileJava/source-classes-mapping.txt new file mode 100644 index 0000000..bf8cebb --- /dev/null +++ b/1.15.2/build/tmp/compileJava/source-classes-mapping.txt @@ -0,0 +1,35 @@ +org/enginehub/util/minecraft/dumper/ItemTypesDumper.java + org.enginehub.util.minecraft.dumper.ItemTypesDumper +org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java + org.enginehub.util.minecraft.dumper.ItemRegistryDumper + org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org/enginehub/util/minecraft/util/GameSetupUtils.java + org.enginehub.util.minecraft.util.GameSetupUtils +org/enginehub/util/minecraft/RunAll.java + org.enginehub.util.minecraft.RunAll +org/enginehub/util/minecraft/dumper/Dumper.java + org.enginehub.util.minecraft.dumper.Dumper +org/enginehub/util/minecraft/dumper/RegistryDumper.java + org.enginehub.util.minecraft.dumper.RegistryDumper +org/enginehub/util/minecraft/dumper/RegistryClassDumper.java + org.enginehub.util.minecraft.dumper.RegistryClassDumper +org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java + org.enginehub.util.minecraft.dumper.BlockRegistryDumper + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter +org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java + org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org/enginehub/util/minecraft/dumper/EntityTypesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypesDumper +org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java + org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java + org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org/enginehub/util/minecraft/dumper/BlockTypesDumper.java + org.enginehub.util.minecraft.dumper.BlockTypesDumper +org/enginehub/util/minecraft/dumper/DataVersionDumper.java + org.enginehub.util.minecraft.dumper.DataVersionDumper + org.enginehub.util.minecraft.dumper.DataVersionDumper$Default diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java new file mode 100644 index 0000000..b351d91 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -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.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + dumper.run(); + System.err.println("Finished!"); + } + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java new file mode 100644 index 0000000..239121c --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -0,0 +1,34 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + } + + @Override + protected Collection getIds() { + return Registry.BIOME.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("nether")); + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java new file mode 100644 index 0000000..7398c94 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -0,0 +1,34 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class BlockCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new BlockCategoriesDumper().run(); + } + + public BlockCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); + } + + @Override + protected Collection getIds() { + return Registry.BLOCK.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("dirt_like")); + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java new file mode 100644 index 0000000..cdc9952 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -0,0 +1,142 @@ +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.block.Block; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.util.Clearable; +import net.minecraft.util.Identifier; +import net.minecraft.util.Language; +import net.minecraft.util.math.*; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.EmptyBlockView; + +import java.io.File; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class BlockRegistryDumper extends RegistryDumper { + + private static final Box FULL_CUBE = Box.from(BlockBox.empty()); + + 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(Vec3d.class, new Vec3dAdapter()); + } + + @Override + public Registry getRegistry() { + return Registry.BLOCK; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(Identifier resourceLocation, Block block) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("localizedName", Language.getInstance().translate(block.getTranslationKey())); + map.put("material", getMaterial(block)); + return Lists.newArrayList(map); + } + + private Map getMaterial(Block b) { + BlockState bs = b.getDefaultState(); + Map map = new TreeMap<>(); + map.put("powerSource", bs.emitsRedstonePower()); + map.put("lightValue", bs.getLuminance()); + map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + map.put("resistance", b.getBlastResistance()); + map.put("ticksRandomly", b.hasRandomTicks(bs)); + VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); + map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); + map.put("slipperiness", b.getSlipperiness()); + map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + Material m = bs.getMaterial(); + map.put("liquid", m.isLiquid()); + map.put("solid", m.isSolid()); + map.put("movementBlocker", m.blocksMovement()); + map.put("burnable", m.isBurnable()); + map.put("opaque", m.blocksLight()); + map.put("replacedDuringPlacement", m.isReplaceable()); + map.put("toolRequired", !m.canBreakByHand()); + map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); + map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); + map.put("mapColor", rgb(m.getColor().color)); + map.put("hasContainer", b instanceof BlockEntityProvider bep && + bep.createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable); + return map; + } + + private boolean isFullCube(Box 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 { + @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 { + @Override + public Vec3d read(final JsonReader in) { + throw new UnsupportedOperationException(); + } + + @Override + public void write(final JsonWriter out, final Vec3d vec) throws IOException { + out.beginArray(); + out.value(vec.getX()); + out.value(vec.getY()); + out.value(vec.getZ()); + out.endArray(); + } + } +} \ No newline at end of file diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java new file mode 100644 index 0000000..867711e --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -0,0 +1,38 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +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(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + } + + @Override + protected Collection getIds() { + return Registry.BLOCK.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("sign"), + new Identifier("wall_sign"), + new Identifier("grass_path") + ); + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java new file mode 100644 index 0000000..d7d2492 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -0,0 +1,135 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.SharedConstants; +import net.minecraft.block.Block; +import net.minecraft.state.property.*; +import net.minecraft.tag.RegistryTagManager; +import net.minecraft.tag.TagContainer; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class DataVersionDumper implements Dumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + new DataVersionDumper(file).run(); + } + } + + private final File file; + private final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + + public DataVersionDumper(File file) { + this.file = file; + } + + private Map> getTags(TagContainer provider, Registry registry) { + Map> tagCollector = new TreeMap<>(); + + provider.getEntries().forEach((key, value) -> + tagCollector.put(key.toString(), value.values().stream() + .map(entry -> checkNotNull(registry.getId(entry))) + .map(Identifier::toString) + .sorted() + .collect(Collectors.toList()))); + + return tagCollector; + } + + @SuppressWarnings("rawtypes") + private String getTypeName(Class clazz) { + if (clazz == EnumProperty.class) { + return "enum"; + } else if (clazz == IntProperty.class) { + return "int"; + } else if (clazz == BooleanProperty.class) { + return "bool"; + } else if (clazz == DirectionProperty.class) { + return "direction"; + } else { + throw new RuntimeException("Unknown property!"); + } + } + + @Override + public void run() { + // Blocks + Map> blocks = new TreeMap<>(); + for (Identifier blockId : Registry.BLOCK.getIds()) { + Map bl = new TreeMap<>(); + Block block = Registry.BLOCK.get(blockId); + Map properties = new TreeMap<>(); + for (Property prop : block.getDefaultState().getProperties()) { + Map propertyValues = new TreeMap<>(); + propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("type", getTypeName(prop.getClass())); + properties.put(prop.getName(), propertyValues); + } + bl.put("properties", properties); + StringBuilder defaultState = new StringBuilder(); + defaultState.append(blockId.toString()); + if (!block.getDefaultState().getEntries().isEmpty()) { + List bits = new ArrayList<>(); + block.getDefaultState().getEntries().entrySet().stream().sorted(Comparator.comparing(e -> e.getKey().getName())).forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase())); + defaultState.append("[").append(String.join(",", bits)).append("]"); + } + bl.put("defaultstate", defaultState.toString()); + blocks.put(blockId.toString(), bl); + } + + // Items + List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Entities + List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Biomes + List biomes = Registry.BIOME.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + RegistryTagManager tagManager = new RegistryTagManager(); + // BlockTags + Map> blockTags = getTags(tagManager.blocks(), Registry.BLOCK); + + // ItemTags + Map> itemTags = getTags(tagManager.items(), Registry.ITEM); + + // EntityTags + Map> entityTags = getTags(tagManager.entityTypes(), Registry.ENTITY_TYPE); + + Map output = new TreeMap<>(); + output.put("blocks", blocks); + output.put("items", items); + output.put("entities", entities); + output.put("biomes", biomes); + output.put("blocktags", blockTags); + output.put("itemtags", itemTags); + output.put("entitytags", entityTags); + + try { + Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java new file mode 100644 index 0000000..79059b7 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -0,0 +1,10 @@ +package org.enginehub.util.minecraft.dumper; + +import java.io.File; + +public interface Dumper { + + File OUTPUT = new File("output/1.15.2"); + + void run(); +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java new file mode 100644 index 0000000..db2a0f0 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -0,0 +1,29 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypeCategoriesDumper extends RegistryClassDumper { + + // worldedit doesn't actually do entity type categories yet + public static void main(String[] args) { + setupGame(); + new EntityTypeCategoriesDumper().run(); + } + + public EntityTypeCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); + } + + @Override + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds(); + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java new file mode 100644 index 0000000..0fbde15 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -0,0 +1,36 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new EntityTypesDumper().run(); + } + + public EntityTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("zombie_pigman") + ); + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java new file mode 100644 index 0000000..1c1fac8 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -0,0 +1,35 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemCategoriesDumper().run(); + } + + public ItemCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); + } + + @Override + protected Collection getIds() { + return Registry.ITEM.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("furnace_materials")); + } +} + diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java new file mode 100644 index 0000000..b7c9e22 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -0,0 +1,57 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import net.minecraft.item.Item; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.util.*; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class ItemRegistryDumper extends RegistryDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + new ItemRegistryDumper(new File(OUTPUT, "items.json")).run(); + } + } + + public ItemRegistryDumper(File file) { + super(file); + } + + @Override + public Registry getRegistry() { + return Registry.ITEM; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + public List> getProperties(Identifier resourceLocation, Item item) { + List> maps = new ArrayList<>(); + maps.add(getPropertiesForItem(resourceLocation, item)); + return maps; + } + + private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("unlocalizedName", item.getTranslationKey(item.getStackForRender())); + map.put("localizedName", item.getName(item.getStackForRender()).getString()); + map.put("maxDamage", item.getMaxDamage()); + map.put("maxStackSize", item.getMaxCount()); + return map; + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java new file mode 100644 index 0000000..5b8f730 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -0,0 +1,41 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemTypesDumper().run(); + } + + public ItemTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ITEM.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("cactus_green"), + new Identifier("dandelion_yellow"), + new Identifier("rose_red"), + new Identifier("sign"), + new Identifier("zombie_pigman_spawn_egg"), + new Identifier("grass_path") + ); + } +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java new file mode 100644 index 0000000..eaac883 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -0,0 +1,155 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.io.MoreFiles; +import com.squareup.javapoet.*; +import net.minecraft.util.Identifier; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.function.UnaryOperator; +import java.util.regex.Pattern; + +import static javax.lang.model.element.Modifier.*; + +public abstract class RegistryClassDumper implements Dumper { + + private static final ClassName JAVAX_NULLABLE = + ClassName.get("javax.annotation", "Nullable"); + private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); + private static final String FOUR_SPACES = Strings.repeat(" ", 4); + + static { + if (!Files.exists(OUTPUT_DIRECTORY)) { + try { + Files.createDirectory(OUTPUT_DIRECTORY); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private static UnaryOperator inlineAnnotation(String name) { + Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); + return content -> pattern.matcher(content).replaceAll("@" + name + " "); + } + + private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); + private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); + + /** + * Handles simple pluralization rules. + */ + private static String makePlural(String name) { + if (name.endsWith("y")) { + return name.substring(0, name.length() - 1) + "ies"; + } + return name + "s"; + } + + private final ClassName type; + private final boolean nullable; + + protected RegistryClassDumper(ClassName type, boolean nullable) { + this.type = type; + this.nullable = nullable; + } + + protected abstract Collection getIds(); + + protected Collection getDeprecatedIds() { + return Collections.emptySet(); + } + + @Override + public void run() { + Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); + Set resources = ImmutableSortedSet + .naturalOrder() + .addAll(getIds()) + .addAll(deprecatedIds) + .build(); + ClassName pluralType = type.peerClass(makePlural(type.simpleName())); + TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); + builder.addModifiers(PUBLIC, FINAL); + builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class) + .addMember("value", "$S", "unused") + .build()); + builder.addJavadoc( + "Stores a list of common {@link $1T $2N}.\n\n@see $1T", + type, pluralType.simpleName() + ); + builder.addMethod(MethodSpec.constructorBuilder() + .addModifiers(PRIVATE) + .build()); + builder.addMethod(createGetMethod()); + for (Identifier resourceLocation : resources) { + String name = resourceLocation.getPath().toUpperCase(); + FieldSpec.Builder fieldBuilder = FieldSpec.builder( + type, + name, + PUBLIC, STATIC, FINAL + ); + if (deprecatedIds.contains(resourceLocation)) { + fieldBuilder.addAnnotation(Deprecated.class); + } + if (nullable) { + fieldBuilder.addAnnotation(JAVAX_NULLABLE); + } + fieldBuilder.initializer("get($S)", resourceLocation); + builder.addField(fieldBuilder.build()); + } + TypeSpec spec = builder.build(); + JavaFile javaFile = JavaFile.builder(type.packageName(), spec) + .indent(FOUR_SPACES) + .skipJavaLangImports(true) + .build(); + + try { + Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); + String content = fixContent(javaFile.toString()); + MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } + + private MethodSpec createGetMethod() { + MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); + builder + .addJavadoc("Gets the {@link $T} associated with the given id.", type) + .addModifiers(PUBLIC, STATIC) + .addParameter(String.class, "id"); + if (nullable) { + builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())) + .addStatement("return $T.REGISTRY.get(id)", type); + } else { + builder.returns(type) + .addCode(CodeBlock.builder() + .addStatement("$1T entry = $1T.REGISTRY.get(id)", type) + .beginControlFlow("if (entry == null)") + .addStatement("return new $T(id)", type) + .endControlFlow() + .addStatement("return entry") + .build()); + } + return builder.build(); + } + + private String fixContent(String content) { + if (nullable) { + content = INLINE_NULLABLE.apply(content); + } + content = INLINE_DEPRECATED.apply(content); + content = content.replace(");\n\n", ");\n") + .replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); + return content; + } + +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java new file mode 100644 index 0000000..9feabc0 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -0,0 +1,69 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.collect.ImmutableList; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +abstract class RegistryDumper implements Dumper { + + private final File file; + private final Gson gson; + + protected RegistryDumper(File file) { + this.file = file; + GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); + registerAdapters(builder); + this.gson = builder.create(); + } + + public void registerAdapters(GsonBuilder builder) { + + } + + @Override + public void run() { + Registry registry = getRegistry(); + ImmutableList> list = ImmutableList.sortedCopyOf( + getComparator(), + getRegistry().getIds().stream() + .flatMap(v -> getProperties(v, registry.get(v)).stream()) + .collect(Collectors.toList()) + ); + + String out = gson.toJson(list); + this.write(out); + System.out.println("Wrote file: " + file.getAbsolutePath()); + } + + private void write(String s) { + try(FileOutputStream str = new FileOutputStream(file)) { + str.write(s.getBytes()); + } catch (IOException e) { + System.err.println("Error writing registry dump: "); + e.printStackTrace(); + } + } + + protected String rgb(int i) { + int r = (i >> 16) & 0xFF; + int g = (i >> 8) & 0xFF; + int b = i & 0xFF; + return String.format("#%02x%02x%02x", r, g, b); + } + + public abstract List> getProperties(Identifier resourceLocation, V object); + + public abstract Registry getRegistry(); + + public abstract Comparator> getComparator(); +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java new file mode 100644 index 0000000..9c393b4 --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -0,0 +1,12 @@ +package org.enginehub.util.minecraft.util; + +import net.minecraft.Bootstrap; +import net.minecraft.SharedConstants; + +public final class GameSetupUtils { + + public static void setupGame() { + SharedConstants.getGameVersion(); + Bootstrap.initialize(); + } +} diff --git a/1.16.5/build.gradle.kts b/1.16.5/build.gradle.kts new file mode 100644 index 0000000..4309994 --- /dev/null +++ b/1.16.5/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + java + id("fabric-loom") version "0.8.9" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + minecraft("com.mojang:minecraft:1.16.5") + mappings("net.fabricmc:yarn:1.16.5+build.2:v2") + modImplementation("net.fabricmc:fabric-loader:0.12.8") + implementation("com.squareup:javapoet:1.13.0") + val autoServiceVersion = "1.0.1" + compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") + annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") +} diff --git a/1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper new file mode 100644 index 0000000..76af17a --- /dev/null +++ b/1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper @@ -0,0 +1,10 @@ +org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default +org.enginehub.util.minecraft.dumper.BlockTypesDumper +org.enginehub.util.minecraft.dumper.DataVersionDumper$Default +org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org.enginehub.util.minecraft.dumper.EntityTypesDumper +org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.16.5/build/tmp/compileJava/source-classes-mapping.txt b/1.16.5/build/tmp/compileJava/source-classes-mapping.txt new file mode 100644 index 0000000..6549ca0 --- /dev/null +++ b/1.16.5/build/tmp/compileJava/source-classes-mapping.txt @@ -0,0 +1,35 @@ +org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java + org.enginehub.util.minecraft.dumper.BlockRegistryDumper + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter +org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java + org.enginehub.util.minecraft.dumper.ItemRegistryDumper + org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org/enginehub/util/minecraft/util/GameSetupUtils.java + org.enginehub.util.minecraft.util.GameSetupUtils +org/enginehub/util/minecraft/RunAll.java + org.enginehub.util.minecraft.RunAll +org/enginehub/util/minecraft/dumper/Dumper.java + org.enginehub.util.minecraft.dumper.Dumper +org/enginehub/util/minecraft/dumper/RegistryDumper.java + org.enginehub.util.minecraft.dumper.RegistryDumper +org/enginehub/util/minecraft/dumper/DataVersionDumper.java + org.enginehub.util.minecraft.dumper.DataVersionDumper + org.enginehub.util.minecraft.dumper.DataVersionDumper$Default +org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java + org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org/enginehub/util/minecraft/dumper/EntityTypesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypesDumper +org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java + org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java + org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org/enginehub/util/minecraft/dumper/BlockTypesDumper.java + org.enginehub.util.minecraft.dumper.BlockTypesDumper +org/enginehub/util/minecraft/dumper/ItemTypesDumper.java + org.enginehub.util.minecraft.dumper.ItemTypesDumper +org/enginehub/util/minecraft/dumper/RegistryClassDumper.java + org.enginehub.util.minecraft.dumper.RegistryClassDumper diff --git a/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java similarity index 99% rename from src/main/java/org/enginehub/util/minecraft/RunAll.java rename to 1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java index beca58d..f36368f 100644 --- a/src/main/java/org/enginehub/util/minecraft/RunAll.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -6,6 +6,7 @@ import java.util.ServiceLoader; public class RunAll { + public static void main(String[] args) { GameSetupUtils.setupGame(); GameSetupUtils.getServerResources(); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java new file mode 100644 index 0000000..a9997db --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -0,0 +1,35 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + } + + @Override + protected Collection getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("nether")); + } +} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java new file mode 100644 index 0000000..1eb5581 --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -0,0 +1,36 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class BlockCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new BlockCategoriesDumper().run(); + } + + public BlockCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); + } + + @Override + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getBlocks().getTagIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("dirt_like") + ); + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java similarity index 93% rename from src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java rename to 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 7b43be2..8b441f4 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -21,6 +21,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.EmptyBlockView; +import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; @@ -42,7 +43,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - new BlockRegistryDumper(new File("output/blocks.json")).run(); + new BlockRegistryDumper(new File(OUTPUT, "blocks.json")).run(); } } @@ -100,11 +101,12 @@ private Map getMaterial(Block b) { map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); map.put("mapColor", rgb(m.getColor().color)); map.put("hasContainer", b instanceof BlockEntityProvider && - (((BlockEntityProvider) b).createBlockEntity(BlockPos.ORIGIN, bs) instanceof Clearable)); + (((BlockEntityProvider) b).createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable)); return map; } - private static final Box FULL_CUBE = Box.from(Vec3d.ZERO); + // method_29968 -> adds one to get max + private static final Box FULL_CUBE = Box.method_29968(Vec3d.ZERO); private boolean isFullCube(Box aabb) { return aabb.equals(FULL_CUBE); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java new file mode 100644 index 0000000..f1bce98 --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -0,0 +1,37 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +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(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + } + + @Override + protected Collection getIds() { + return Registry.BLOCK.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("sign"), + new Identifier("wall_sign") + ); + } +} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java new file mode 100644 index 0000000..96ffec7 --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -0,0 +1,150 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.SharedConstants; +import net.minecraft.block.Block; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.EnumProperty; +import net.minecraft.state.property.IntProperty; +import net.minecraft.state.property.Property; +import net.minecraft.tag.TagGroup; +import net.minecraft.tag.TagManager; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import org.enginehub.util.minecraft.RunAll; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class DataVersionDumper implements Dumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + new DataVersionDumper(file).run(); + } + } + + private final File file; + private final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + + public DataVersionDumper(File file) { + this.file = file; + } + + private Map> getTags(TagGroup provider, Registry registry) { + Map> tagCollector = new TreeMap<>(); + + provider.getTags().forEach((key, value) -> + tagCollector.put(key.toString(), value.values().stream() + .map(entry -> checkNotNull(registry.getId(entry))) + .map(Identifier::toString) + .sorted() + .collect(Collectors.toList()))); + + return tagCollector; + } + + @SuppressWarnings("rawtypes") + private String getTypeName(Class clazz) { + if (clazz == EnumProperty.class) { + return "enum"; + } else if (clazz == IntProperty.class) { + return "int"; + } else if (clazz == BooleanProperty.class) { + return "bool"; + } else if (clazz == DirectionProperty.class) { + return "direction"; + } else { + throw new RuntimeException("Unknown property!"); + } + } + + @Override + public void run() { + // Blocks + Map> blocks = new TreeMap<>(); + for (Identifier blockId : Registry.BLOCK.getIds()) { + Map bl = new TreeMap<>(); + Block block = Registry.BLOCK.get(blockId); + Map properties = new TreeMap<>(); + for (Property prop : block.getDefaultState().getProperties()) { + Map propertyValues = new TreeMap<>(); + propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("type", getTypeName(prop.getClass())); + properties.put(prop.getName(), propertyValues); + } + bl.put("properties", properties); + StringBuilder defaultState = new StringBuilder(); + defaultState.append(blockId.toString()); + if (!block.getDefaultState().getEntries().isEmpty()) { + List bits = new ArrayList<>(); + block.getDefaultState().getEntries().entrySet().stream() + .sorted(Comparator.comparing(e -> e.getKey().getName())) + .forEach(e -> + bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) + ); + defaultState.append("[").append(String.join(",", bits)).append("]"); + } + bl.put("defaultstate", defaultState.toString()); + blocks.put(blockId.toString(), bl); + } + + // Items + List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Entities + List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Biomes + List biomes = getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + TagManager tagManager = getServerResources().getRegistryTagManager(); + // BlockTags + Map> blockTags = getTags(tagManager.getBlocks(), Registry.BLOCK); + + // ItemTags + Map> itemTags = getTags(tagManager.getItems(), Registry.ITEM); + + // EntityTags + Map> entityTags = getTags(tagManager.getEntityTypes(), Registry.ENTITY_TYPE); + + Map output = new TreeMap<>(); + output.put("blocks", blocks); + output.put("items", items); + output.put("entities", entities); + output.put("biomes", biomes); + output.put("blocktags", blockTags); + output.put("itemtags", itemTags); + output.put("entitytags", entityTags); + + try { + Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java new file mode 100644 index 0000000..9d54ede --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -0,0 +1,10 @@ +package org.enginehub.util.minecraft.dumper; + +import java.io.File; + +public interface Dumper { + + File OUTPUT = new File("output/1.16.5"); + + void run(); +} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java new file mode 100644 index 0000000..454dba1 --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -0,0 +1,29 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypeCategoriesDumper extends RegistryClassDumper { + + // worldedit doesn't actually do entity type categories yet + public static void main(String[] args) { + setupGame(); + new EntityTypeCategoriesDumper().run(); + } + + public EntityTypeCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); + } + + @Override + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getEntityTypes().getTagIds(); + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java similarity index 100% rename from src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java rename to 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java new file mode 100644 index 0000000..236294b --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -0,0 +1,34 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemCategoriesDumper().run(); + } + + public ItemCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); + } + + @Override + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getItems().getTagIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("furnace_materials")); + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java similarity index 93% rename from src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java rename to 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index a2e1122..7b1a3e9 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -4,6 +4,7 @@ import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.util.ArrayList; @@ -25,7 +26,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - new ItemRegistryDumper(new File("output/items.json")).run(); + new ItemRegistryDumper(new File(OUTPUT, "items.json")).run(); } } @@ -59,4 +60,3 @@ private Map getPropertiesForItem(Identifier resourceLocation, It return map; } } - diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java new file mode 100644 index 0000000..d1b5657 --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -0,0 +1,40 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemTypesDumper().run(); + } + + public ItemTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ITEM.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("cactus_green"), + new Identifier("dandelion_yellow"), + new Identifier("rose_red"), + new Identifier("sign"), + new Identifier("zombie_pigman_spawn_egg") + ); + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java similarity index 93% rename from src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java rename to 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java index aebfaaa..7b0cc44 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -11,9 +11,11 @@ import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec; import net.minecraft.util.Identifier; +import org.enginehub.util.minecraft.RunAll; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; @@ -31,9 +33,19 @@ public abstract class RegistryClassDumper implements Dumper { private static final ClassName JAVAX_NULLABLE = ClassName.get("javax.annotation", "Nullable"); - private static final Path OUTPUT_DIRECTORY = Paths.get("output"); + private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); private static final String FOUR_SPACES = Strings.repeat(" ", 4); + static { + if (!Files.exists(OUTPUT_DIRECTORY)) { + try { + Files.createDirectory(OUTPUT_DIRECTORY); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + private static UnaryOperator inlineAnnotation(String name) { Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); return content -> pattern.matcher(content).replaceAll("@" + name + " "); @@ -89,7 +101,7 @@ public void run() { .build()); builder.addMethod(createGetMethod()); for (Identifier resourceLocation : resources) { - String name = resourceLocation.getPath().toUpperCase().replace('/', '_'); + String name = resourceLocation.getPath().toUpperCase(); FieldSpec.Builder fieldBuilder = FieldSpec.builder( type, name, diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java similarity index 99% rename from src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java rename to 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index 741ca9f..2736a14 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -68,4 +68,3 @@ protected String rgb(int i) { public abstract Comparator> getComparator(); } - diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java new file mode 100644 index 0000000..cd7918d --- /dev/null +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -0,0 +1,73 @@ +package org.enginehub.util.minecraft.util; + +import com.google.common.util.concurrent.Futures; +import net.minecraft.Bootstrap; +import net.minecraft.resource.DataPackSettings; +import net.minecraft.resource.ResourcePackManager; +import net.minecraft.resource.ResourcePackProfile; +import net.minecraft.resource.ServerResourceManager; +import net.minecraft.resource.VanillaDataPackProvider; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.CommandManager; +import net.minecraft.util.registry.DynamicRegistryManager; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public final class GameSetupUtils { + + public static void setupGame() { + Bootstrap.initialize(); + } + + private static final Lock lock = new ReentrantLock(); + private static ServerResourceManager SERVER_RESOURCES; + private static DynamicRegistryManager SERVER_REGISTRY; + + public static ServerResourceManager getServerResources() { + setupGame(); + lock.lock(); + try { + ServerResourceManager localResources = SERVER_RESOURCES; + if (localResources != null) { + return localResources; + } + ResourcePackManager resourcePackManager = new ResourcePackManager( + ResourcePackProfile::new, + new VanillaDataPackProvider() + ); + MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); + CompletableFuture completableFuture = ServerResourceManager.reload( + resourcePackManager.createResourcePacks(), + CommandManager.RegistrationEnvironment.DEDICATED, + // permission level doesn't matter + 0, + ForkJoinPool.commonPool(), + Runnable::run + ); + ServerResourceManager manager = Futures.getUnchecked(completableFuture); + manager.loadRegistryTags(); + SERVER_RESOURCES = manager; + return manager; + } finally { + lock.unlock(); + } + } + + public static DynamicRegistryManager getServerRegistry() { + lock.lock(); + try { + DynamicRegistryManager localResources = SERVER_REGISTRY; + if (localResources != null) { + return localResources; + } + DynamicRegistryManager manager = DynamicRegistryManager.create(); + SERVER_REGISTRY = manager; + return manager; + } finally { + lock.unlock(); + } + } +} diff --git a/1.17.1/build.gradle.kts b/1.17.1/build.gradle.kts new file mode 100644 index 0000000..680d7a5 --- /dev/null +++ b/1.17.1/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + java + id("fabric-loom") version "0.8.9" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + minecraft("com.mojang:minecraft:1.17.1") + mappings("net.fabricmc:yarn:1.17.1+build.2:v2") + modImplementation("net.fabricmc:fabric-loader:0.12.8") + implementation("com.squareup:javapoet:1.13.0") + val autoServiceVersion = "1.0.1" + compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") + annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") +} diff --git a/1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper new file mode 100644 index 0000000..76af17a --- /dev/null +++ b/1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper @@ -0,0 +1,10 @@ +org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default +org.enginehub.util.minecraft.dumper.BlockTypesDumper +org.enginehub.util.minecraft.dumper.DataVersionDumper$Default +org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org.enginehub.util.minecraft.dumper.EntityTypesDumper +org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.17.1/build/tmp/compileJava/source-classes-mapping.txt b/1.17.1/build/tmp/compileJava/source-classes-mapping.txt new file mode 100644 index 0000000..6549ca0 --- /dev/null +++ b/1.17.1/build/tmp/compileJava/source-classes-mapping.txt @@ -0,0 +1,35 @@ +org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java + org.enginehub.util.minecraft.dumper.BlockRegistryDumper + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter + org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter +org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java + org.enginehub.util.minecraft.dumper.ItemRegistryDumper + org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default +org/enginehub/util/minecraft/util/GameSetupUtils.java + org.enginehub.util.minecraft.util.GameSetupUtils +org/enginehub/util/minecraft/RunAll.java + org.enginehub.util.minecraft.RunAll +org/enginehub/util/minecraft/dumper/Dumper.java + org.enginehub.util.minecraft.dumper.Dumper +org/enginehub/util/minecraft/dumper/RegistryDumper.java + org.enginehub.util.minecraft.dumper.RegistryDumper +org/enginehub/util/minecraft/dumper/DataVersionDumper.java + org.enginehub.util.minecraft.dumper.DataVersionDumper + org.enginehub.util.minecraft.dumper.DataVersionDumper$Default +org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper +org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java + org.enginehub.util.minecraft.dumper.BiomeTypesDumper +org/enginehub/util/minecraft/dumper/EntityTypesDumper.java + org.enginehub.util.minecraft.dumper.EntityTypesDumper +org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java + org.enginehub.util.minecraft.dumper.BlockCategoriesDumper +org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java + org.enginehub.util.minecraft.dumper.ItemCategoriesDumper +org/enginehub/util/minecraft/dumper/BlockTypesDumper.java + org.enginehub.util.minecraft.dumper.BlockTypesDumper +org/enginehub/util/minecraft/dumper/ItemTypesDumper.java + org.enginehub.util.minecraft.dumper.ItemTypesDumper +org/enginehub/util/minecraft/dumper/RegistryClassDumper.java + org.enginehub.util.minecraft.dumper.RegistryClassDumper diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java new file mode 100644 index 0000000..f36368f --- /dev/null +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -0,0 +1,20 @@ +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(); + GameSetupUtils.getServerResources(); + GameSetupUtils.getServerRegistry(); + for (Dumper dumper : ServiceLoader.load(Dumper.class)) { + System.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + dumper.run(); + System.err.println("Finished!"); + } + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java similarity index 99% rename from src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index d1999a6..470e2b0 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -35,4 +35,3 @@ protected Collection getDeprecatedIds() { ); } } - diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java similarity index 99% rename from src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index a18af4d..e17dea6 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -37,4 +37,3 @@ protected Collection getDeprecatedIds() { ); } } - diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java new file mode 100644 index 0000000..709fbd3 --- /dev/null +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -0,0 +1,146 @@ +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.block.Block; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.util.Clearable; +import net.minecraft.util.Identifier; +import net.minecraft.util.Language; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.EmptyBlockView; +import org.enginehub.util.minecraft.RunAll; + +import java.io.File; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class BlockRegistryDumper extends RegistryDumper { + + private static final Box FULL_CUBE = Box.from(Vec3d.ZERO); + + 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(Vec3d.class, new Vec3dAdapter()); + } + + @Override + public Registry getRegistry() { + return Registry.BLOCK; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(Identifier resourceLocation, Block block) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); + map.put("material", getMaterial(block)); + return Lists.newArrayList(map); + } + + private Map getMaterial(Block b) { + BlockState bs = b.getDefaultState(); + Map map = new TreeMap<>(); + map.put("powerSource", bs.emitsRedstonePower()); + map.put("lightValue", bs.getLuminance()); + map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + map.put("resistance", b.getBlastResistance()); + map.put("ticksRandomly", b.hasRandomTicks(bs)); + VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); + map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); + map.put("slipperiness", b.getSlipperiness()); + map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + Material m = bs.getMaterial(); + map.put("liquid", m.isLiquid()); + map.put("solid", m.isSolid()); + map.put("movementBlocker", m.blocksMovement()); + map.put("burnable", m.isBurnable()); + map.put("opaque", m.blocksLight()); + map.put("replacedDuringPlacement", m.isReplaceable()); + map.put("toolRequired", bs.isToolRequired()); + map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); + map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); + map.put("mapColor", rgb(m.getColor().color)); + map.put("hasContainer", b instanceof BlockEntityProvider bep && + bep.createBlockEntity(BlockPos.ORIGIN, bs) instanceof Clearable); + return map; + } + + private boolean isFullCube(Box 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 { + @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 { + @Override + public Vec3d read(final JsonReader in) { + throw new UnsupportedOperationException(); + } + + @Override + public void write(final JsonWriter out, final Vec3d vec) throws IOException { + out.beginArray(); + out.value(vec.getX()); + out.value(vec.getY()); + out.value(vec.getZ()); + out.endArray(); + } + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java similarity index 99% rename from src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 2dfcc1a..d82f3a1 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -36,4 +36,3 @@ protected Collection getDeprecatedIds() { ); } } - diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java similarity index 97% rename from src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index dfb8bef..d18addc 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -15,6 +15,7 @@ import net.minecraft.tag.TagManager; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; +import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; @@ -42,7 +43,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - File file = new File("output/" + SharedConstants.getGameVersion().getWorldVersion() + ".json"); + File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); new DataVersionDumper(file).run(); } } @@ -147,4 +148,3 @@ public void run() { } } } - diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java new file mode 100644 index 0000000..7ea042d --- /dev/null +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -0,0 +1,10 @@ +package org.enginehub.util.minecraft.dumper; + +import java.io.File; + +public interface Dumper { + + File OUTPUT = new File("output/1.17.1"); + + void run(); +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java similarity index 99% rename from src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 1657d00..7b3336e 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -28,4 +28,3 @@ protected Collection getIds() { return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds(); } } - diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java new file mode 100644 index 0000000..108a100 --- /dev/null +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -0,0 +1,36 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new EntityTypesDumper().run(); + } + + public EntityTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("zombie_pigman") + ); + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java similarity index 99% rename from src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 99df87a..7b751dc 100644 --- a/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -33,4 +33,3 @@ protected Collection getDeprecatedIds() { return ImmutableSet.of(new Identifier("furnace_materials")); } } - diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java new file mode 100644 index 0000000..7b1a3e9 --- /dev/null +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -0,0 +1,62 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import net.minecraft.item.Item; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import org.enginehub.util.minecraft.RunAll; + +import java.io.File; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class ItemRegistryDumper extends RegistryDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + new ItemRegistryDumper(new File(OUTPUT, "items.json")).run(); + } + } + + public ItemRegistryDumper(File file) { + super(file); + } + + @Override + public Registry getRegistry() { + return Registry.ITEM; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + public List> getProperties(Identifier resourceLocation, Item item) { + List> maps = new ArrayList<>(); + maps.add(getPropertiesForItem(resourceLocation, item)); + return maps; + } + + private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); + map.put("localizedName", item.getName(item.getDefaultStack()).getString()); + map.put("maxDamage", item.getMaxDamage()); + map.put("maxStackSize", item.getMaxCount()); + return map; + } +} diff --git a/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java similarity index 100% rename from src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java new file mode 100644 index 0000000..c14558a --- /dev/null +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -0,0 +1,124 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.io.MoreFiles; +import com.squareup.javapoet.*; +import net.minecraft.util.Identifier; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.function.UnaryOperator; +import java.util.regex.Pattern; + +import static javax.lang.model.element.Modifier.*; + +public abstract class RegistryClassDumper implements Dumper { + + private static final ClassName JAVAX_NULLABLE = ClassName.get("javax.annotation", "Nullable"); + private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); + private static final String FOUR_SPACES = Strings.repeat(" ", 4); + + static { + if (!Files.exists(OUTPUT_DIRECTORY)) { + try { + Files.createDirectory(OUTPUT_DIRECTORY); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private static UnaryOperator inlineAnnotation(String name) { + Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); + return content -> pattern.matcher(content).replaceAll("@" + name + " "); + } + + private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); + private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); + + /** + * Handles simple pluralization rules. + */ + private static String makePlural(String name) { + if (name.endsWith("y")) { + return name.substring(0, name.length() - 1) + "ies"; + } + return name + "s"; + } + + private final ClassName type; + private final boolean nullable; + + protected RegistryClassDumper(ClassName type, boolean nullable) { + this.type = type; + this.nullable = nullable; + } + + protected abstract Collection getIds(); + + protected Collection getDeprecatedIds() { + return Collections.emptySet(); + } + + @Override + public void run() { + Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); + Set resources = ImmutableSortedSet.naturalOrder().addAll(getIds()).addAll(deprecatedIds).build(); + ClassName pluralType = type.peerClass(makePlural(type.simpleName())); + TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); + builder.addModifiers(PUBLIC, FINAL); + builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "$S", "unused").build()); + builder.addJavadoc("Stores a list of common {@link $1T $2N}.\n\n@see $1T", type, pluralType.simpleName()); + builder.addMethod(MethodSpec.constructorBuilder().addModifiers(PRIVATE).build()); + builder.addMethod(createGetMethod()); + for (Identifier resourceLocation : resources) { + String name = resourceLocation.getPath().toUpperCase().replace('/', '_'); + FieldSpec.Builder fieldBuilder = FieldSpec.builder(type, name, PUBLIC, STATIC, FINAL); + if (deprecatedIds.contains(resourceLocation)) { + fieldBuilder.addAnnotation(Deprecated.class); + } + if (nullable) { + fieldBuilder.addAnnotation(JAVAX_NULLABLE); + } + fieldBuilder.initializer("get($S)", resourceLocation); + builder.addField(fieldBuilder.build()); + } + TypeSpec spec = builder.build(); + JavaFile javaFile = JavaFile.builder(type.packageName(), spec).indent(FOUR_SPACES).skipJavaLangImports(true).build(); + + try { + Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); + String content = fixContent(javaFile.toString()); + MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } + + private MethodSpec createGetMethod() { + MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); + builder.addJavadoc("Gets the {@link $T} associated with the given id.", type).addModifiers(PUBLIC, STATIC).addParameter(String.class, "id"); + if (nullable) { + builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())).addStatement("return $T.REGISTRY.get(id)", type); + } else { + builder.returns(type).addCode(CodeBlock.builder().addStatement("$1T entry = $1T.REGISTRY.get(id)", type).beginControlFlow("if (entry == null)").addStatement("return new $T(id)", type).endControlFlow().addStatement("return entry").build()); + } + return builder.build(); + } + + private String fixContent(String content) { + if (nullable) { + content = INLINE_NULLABLE.apply(content); + } + content = INLINE_DEPRECATED.apply(content); + content = content.replace(");\n\n", ");\n").replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); + return content; + } + +} diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java new file mode 100644 index 0000000..fef9aa6 --- /dev/null +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -0,0 +1,64 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.collect.ImmutableList; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +abstract class RegistryDumper implements Dumper { + + private final File file; + private final Gson gson; + + protected RegistryDumper(File file) { + this.file = file; + GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); + registerAdapters(builder); + this.gson = builder.create(); + } + + public void registerAdapters(GsonBuilder builder) { + + } + + @Override + public void run() { + Registry registry = getRegistry(); + ImmutableList> list = ImmutableList.sortedCopyOf(getComparator(), getRegistry().getIds().stream().flatMap(v -> getProperties(v, registry.get(v)).stream()).collect(Collectors.toList())); + + String out = gson.toJson(list); + this.write(out); + System.out.println("Wrote file: " + file.getAbsolutePath()); + } + + private void write(String s) { + try (FileOutputStream str = new FileOutputStream(file)) { + str.write(s.getBytes()); + } catch (IOException e) { + System.err.println("Error writing registry dump: "); + e.printStackTrace(); + } + } + + protected String rgb(int i) { + int r = (i >> 16) & 0xFF; + int g = (i >> 8) & 0xFF; + int b = i & 0xFF; + return String.format("#%02x%02x%02x", r, g, b); + } + + public abstract List> getProperties(Identifier resourceLocation, V object); + + public abstract Registry getRegistry(); + + public abstract Comparator> getComparator(); +} diff --git a/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java similarity index 100% rename from src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java rename to 1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java diff --git a/build.gradle.kts b/build.gradle.kts index 008413a..e69de29 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,23 +0,0 @@ -plugins { - id("fabric-loom") version "0.8.9" -} - -repositories { - maven { - name = "Fabric" - url = uri("https://maven.fabricmc.net/") - } - mavenCentral() -} - -dependencies { - "minecraft"("com.mojang:minecraft:1.17") - "mappings"("net.fabricmc:yarn:1.17+build.1:v2") - "modImplementation"("net.fabricmc:fabric-loader:0.11.3") - - "implementation"("com.squareup:javapoet:1.13.0") - - val autoServiceVersion = "1.0" - "compileOnly"("com.google.auto.service:auto-service-annotations:$autoServiceVersion") - "annotationProcessor"("com.google.auto.service:auto-service:$autoServiceVersion") -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 690f1c4..e5973da 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,12 +1,24 @@ rootProject.name = "MCUtils" +include("1.14.4") +include("1.15.2") +include("1.16.5") +include("1.17.1") + pluginManagement { repositories { - jcenter() + mavenCentral() + gradlePluginPortal() + maven { + name = "Forge Maven" + url = uri("https://maven.minecraftforge.net/") + content { + includeGroupByRegex("net\\.minecraftforge\\..*") + } + } maven { name = "Fabric" url = uri("https://maven.fabricmc.net/") } - gradlePluginPortal() } } From 3b2fbbe4b9c8540e4ba12104a1e931f8522f28ad Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 6 Dec 2021 10:09:18 -0500 Subject: [PATCH 02/18] Cleaned some things and added a 1.18 subproject --- 1.14.4/.gitignore | 79 +++++++++ 1.14.4/build.gradle.kts | 11 +- ...org.enginehub.util.minecraft.dumper.Dumper | 10 -- .../compileJava/source-classes-mapping.txt | 35 ---- .../minecraft/dumper/BlockRegistryDumper.java | 2 +- .../util/minecraft/dumper/Dumper.java | 4 +- .../dumper/ItemCategoriesDumper.java | 1 - 1.15.2/.gitignore | 79 +++++++++ 1.15.2/build.gradle.kts | 11 +- ...org.enginehub.util.minecraft.dumper.Dumper | 10 -- .../compileJava/source-classes-mapping.txt | 35 ---- .../minecraft/dumper/BlockRegistryDumper.java | 2 +- .../util/minecraft/dumper/Dumper.java | 4 +- .../dumper/ItemCategoriesDumper.java | 1 - 1.16.5/.gitignore | 79 +++++++++ 1.16.5/build.gradle.kts | 11 +- ...org.enginehub.util.minecraft.dumper.Dumper | 10 -- .../compileJava/source-classes-mapping.txt | 35 ---- .../util/minecraft/dumper/Dumper.java | 4 +- 1.17.1/.gitignore | 79 +++++++++ 1.17.1/build.gradle.kts | 11 +- ...org.enginehub.util.minecraft.dumper.Dumper | 10 -- .../compileJava/source-classes-mapping.txt | 35 ---- .../util/minecraft/dumper/Dumper.java | 4 +- 1.18/.gitignore | 79 +++++++++ 1.18/build.gradle.kts | 16 ++ .../org/enginehub/util/minecraft/RunAll.java | 20 +++ .../minecraft/dumper/BiomeTypesDumper.java | 63 ++++++++ .../dumper/BlockCategoriesDumper.java | 39 +++++ .../minecraft/dumper/BlockRegistryDumper.java | 146 +++++++++++++++++ .../minecraft/dumper/BlockTypesDumper.java | 38 +++++ .../minecraft/dumper/DataVersionDumper.java | 150 ++++++++++++++++++ .../util/minecraft/dumper/Dumper.java | 12 ++ .../dumper/EntityTypeCategoriesDumper.java | 30 ++++ .../minecraft/dumper/EntityTypesDumper.java | 36 +++++ .../dumper/ItemCategoriesDumper.java | 35 ++++ .../minecraft/dumper/ItemRegistryDumper.java | 62 ++++++++ .../minecraft/dumper/ItemTypesDumper.java | 41 +++++ .../minecraft/dumper/RegistryClassDumper.java | 124 +++++++++++++++ .../util/minecraft/dumper/RegistryDumper.java | 64 ++++++++ .../util/minecraft/util/GameSetupUtils.java | 73 +++++++++ gradle.properties | 6 + gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 1 + 44 files changed, 1386 insertions(+), 213 deletions(-) create mode 100644 1.14.4/.gitignore delete mode 100644 1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper delete mode 100644 1.14.4/build/tmp/compileJava/source-classes-mapping.txt create mode 100644 1.15.2/.gitignore delete mode 100644 1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper delete mode 100644 1.15.2/build/tmp/compileJava/source-classes-mapping.txt create mode 100644 1.16.5/.gitignore delete mode 100644 1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper delete mode 100644 1.16.5/build/tmp/compileJava/source-classes-mapping.txt create mode 100644 1.17.1/.gitignore delete mode 100644 1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper delete mode 100644 1.17.1/build/tmp/compileJava/source-classes-mapping.txt create mode 100644 1.18/.gitignore create mode 100644 1.18/build.gradle.kts create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/RunAll.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java create mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java diff --git a/1.14.4/.gitignore b/1.14.4/.gitignore new file mode 100644 index 0000000..5502819 --- /dev/null +++ b/1.14.4/.gitignore @@ -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 + diff --git a/1.14.4/build.gradle.kts b/1.14.4/build.gradle.kts index d3d68b2..be3c053 100644 --- a/1.14.4/build.gradle.kts +++ b/1.14.4/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.8.9" + id("fabric-loom") version "0.10-SNAPSHOT" } group = "org.enginehub" @@ -9,9 +9,8 @@ version = "1.0.0-SNAPSHOT" dependencies { minecraft("com.mojang:minecraft:1.14.4") mappings("net.fabricmc:yarn:1.14.4+build.9:v2") - modImplementation("net.fabricmc:fabric-loader:0.12.8") - implementation("com.squareup:javapoet:1.13.0") - val autoServiceVersion = "1.0.1" - compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") - annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper deleted file mode 100644 index 76af17a..0000000 --- a/1.14.4/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper +++ /dev/null @@ -1,10 +0,0 @@ -org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default -org.enginehub.util.minecraft.dumper.BlockTypesDumper -org.enginehub.util.minecraft.dumper.DataVersionDumper$Default -org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org.enginehub.util.minecraft.dumper.EntityTypesDumper -org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.14.4/build/tmp/compileJava/source-classes-mapping.txt b/1.14.4/build/tmp/compileJava/source-classes-mapping.txt deleted file mode 100644 index f789a24..0000000 --- a/1.14.4/build/tmp/compileJava/source-classes-mapping.txt +++ /dev/null @@ -1,35 +0,0 @@ -org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java - org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org/enginehub/util/minecraft/util/GameSetupUtils.java - org.enginehub.util.minecraft.util.GameSetupUtils -org/enginehub/util/minecraft/RunAll.java - org.enginehub.util.minecraft.RunAll -org/enginehub/util/minecraft/dumper/BlockTypesDumper.java - org.enginehub.util.minecraft.dumper.BlockTypesDumper -org/enginehub/util/minecraft/dumper/ItemTypesDumper.java - org.enginehub.util.minecraft.dumper.ItemTypesDumper -org/enginehub/util/minecraft/dumper/DataVersionDumper.java - org.enginehub.util.minecraft.dumper.DataVersionDumper - org.enginehub.util.minecraft.dumper.DataVersionDumper$Default -org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java - org.enginehub.util.minecraft.dumper.BlockRegistryDumper - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter -org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java - org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org/enginehub/util/minecraft/dumper/EntityTypesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypesDumper -org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java - org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java - org.enginehub.util.minecraft.dumper.ItemRegistryDumper - org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org/enginehub/util/minecraft/dumper/Dumper.java - org.enginehub.util.minecraft.dumper.Dumper -org/enginehub/util/minecraft/dumper/RegistryDumper.java - org.enginehub.util.minecraft.dumper.RegistryDumper -org/enginehub/util/minecraft/dumper/RegistryClassDumper.java - org.enginehub.util.minecraft.dumper.RegistryClassDumper diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index bebb31a..abeed41 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -139,4 +139,4 @@ public void write(final JsonWriter out, final Vec3d vec) throws IOException { out.endArray(); } } -} \ No newline at end of file +} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java index 34bf981..edb9590 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -1,10 +1,12 @@ package org.enginehub.util.minecraft.dumper; +import net.minecraft.SharedConstants; + import java.io.File; public interface Dumper { - File OUTPUT = new File("output/1.14.4"); + File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); void run(); } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 1c1fac8..7920fef 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -32,4 +32,3 @@ protected Collection getDeprecatedIds() { return ImmutableSet.of(new Identifier("furnace_materials")); } } - diff --git a/1.15.2/.gitignore b/1.15.2/.gitignore new file mode 100644 index 0000000..5502819 --- /dev/null +++ b/1.15.2/.gitignore @@ -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 + diff --git a/1.15.2/build.gradle.kts b/1.15.2/build.gradle.kts index b0be605..db25b56 100644 --- a/1.15.2/build.gradle.kts +++ b/1.15.2/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.8.9" + id("fabric-loom") version "0.10-SNAPSHOT" } group = "org.enginehub" @@ -9,9 +9,8 @@ version = "1.0.0-SNAPSHOT" dependencies { minecraft("com.mojang:minecraft:1.15.2") mappings("net.fabricmc:yarn:1.15.2+build.9:v2") - modImplementation("net.fabricmc:fabric-loader:0.12.8") - implementation("com.squareup:javapoet:1.13.0") - val autoServiceVersion = "1.0.1" - compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") - annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper deleted file mode 100644 index 76af17a..0000000 --- a/1.15.2/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper +++ /dev/null @@ -1,10 +0,0 @@ -org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default -org.enginehub.util.minecraft.dumper.BlockTypesDumper -org.enginehub.util.minecraft.dumper.DataVersionDumper$Default -org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org.enginehub.util.minecraft.dumper.EntityTypesDumper -org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.15.2/build/tmp/compileJava/source-classes-mapping.txt b/1.15.2/build/tmp/compileJava/source-classes-mapping.txt deleted file mode 100644 index bf8cebb..0000000 --- a/1.15.2/build/tmp/compileJava/source-classes-mapping.txt +++ /dev/null @@ -1,35 +0,0 @@ -org/enginehub/util/minecraft/dumper/ItemTypesDumper.java - org.enginehub.util.minecraft.dumper.ItemTypesDumper -org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java - org.enginehub.util.minecraft.dumper.ItemRegistryDumper - org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org/enginehub/util/minecraft/util/GameSetupUtils.java - org.enginehub.util.minecraft.util.GameSetupUtils -org/enginehub/util/minecraft/RunAll.java - org.enginehub.util.minecraft.RunAll -org/enginehub/util/minecraft/dumper/Dumper.java - org.enginehub.util.minecraft.dumper.Dumper -org/enginehub/util/minecraft/dumper/RegistryDumper.java - org.enginehub.util.minecraft.dumper.RegistryDumper -org/enginehub/util/minecraft/dumper/RegistryClassDumper.java - org.enginehub.util.minecraft.dumper.RegistryClassDumper -org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java - org.enginehub.util.minecraft.dumper.BlockRegistryDumper - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter -org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java - org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org/enginehub/util/minecraft/dumper/EntityTypesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypesDumper -org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java - org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java - org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org/enginehub/util/minecraft/dumper/BlockTypesDumper.java - org.enginehub.util.minecraft.dumper.BlockTypesDumper -org/enginehub/util/minecraft/dumper/DataVersionDumper.java - org.enginehub.util.minecraft.dumper.DataVersionDumper - org.enginehub.util.minecraft.dumper.DataVersionDumper$Default diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index cdc9952..73e9842 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -139,4 +139,4 @@ public void write(final JsonWriter out, final Vec3d vec) throws IOException { out.endArray(); } } -} \ No newline at end of file +} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java index 79059b7..edb9590 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -1,10 +1,12 @@ package org.enginehub.util.minecraft.dumper; +import net.minecraft.SharedConstants; + import java.io.File; public interface Dumper { - File OUTPUT = new File("output/1.15.2"); + File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); void run(); } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 1c1fac8..7920fef 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -32,4 +32,3 @@ protected Collection getDeprecatedIds() { return ImmutableSet.of(new Identifier("furnace_materials")); } } - diff --git a/1.16.5/.gitignore b/1.16.5/.gitignore new file mode 100644 index 0000000..5502819 --- /dev/null +++ b/1.16.5/.gitignore @@ -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 + diff --git a/1.16.5/build.gradle.kts b/1.16.5/build.gradle.kts index 4309994..74caac6 100644 --- a/1.16.5/build.gradle.kts +++ b/1.16.5/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.8.9" + id("fabric-loom") version "0.10-SNAPSHOT" } group = "org.enginehub" @@ -9,9 +9,8 @@ version = "1.0.0-SNAPSHOT" dependencies { minecraft("com.mojang:minecraft:1.16.5") mappings("net.fabricmc:yarn:1.16.5+build.2:v2") - modImplementation("net.fabricmc:fabric-loader:0.12.8") - implementation("com.squareup:javapoet:1.13.0") - val autoServiceVersion = "1.0.1" - compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") - annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper deleted file mode 100644 index 76af17a..0000000 --- a/1.16.5/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper +++ /dev/null @@ -1,10 +0,0 @@ -org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default -org.enginehub.util.minecraft.dumper.BlockTypesDumper -org.enginehub.util.minecraft.dumper.DataVersionDumper$Default -org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org.enginehub.util.minecraft.dumper.EntityTypesDumper -org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.16.5/build/tmp/compileJava/source-classes-mapping.txt b/1.16.5/build/tmp/compileJava/source-classes-mapping.txt deleted file mode 100644 index 6549ca0..0000000 --- a/1.16.5/build/tmp/compileJava/source-classes-mapping.txt +++ /dev/null @@ -1,35 +0,0 @@ -org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java - org.enginehub.util.minecraft.dumper.BlockRegistryDumper - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter -org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java - org.enginehub.util.minecraft.dumper.ItemRegistryDumper - org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org/enginehub/util/minecraft/util/GameSetupUtils.java - org.enginehub.util.minecraft.util.GameSetupUtils -org/enginehub/util/minecraft/RunAll.java - org.enginehub.util.minecraft.RunAll -org/enginehub/util/minecraft/dumper/Dumper.java - org.enginehub.util.minecraft.dumper.Dumper -org/enginehub/util/minecraft/dumper/RegistryDumper.java - org.enginehub.util.minecraft.dumper.RegistryDumper -org/enginehub/util/minecraft/dumper/DataVersionDumper.java - org.enginehub.util.minecraft.dumper.DataVersionDumper - org.enginehub.util.minecraft.dumper.DataVersionDumper$Default -org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java - org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org/enginehub/util/minecraft/dumper/EntityTypesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypesDumper -org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java - org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java - org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org/enginehub/util/minecraft/dumper/BlockTypesDumper.java - org.enginehub.util.minecraft.dumper.BlockTypesDumper -org/enginehub/util/minecraft/dumper/ItemTypesDumper.java - org.enginehub.util.minecraft.dumper.ItemTypesDumper -org/enginehub/util/minecraft/dumper/RegistryClassDumper.java - org.enginehub.util.minecraft.dumper.RegistryClassDumper diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java index 9d54ede..edb9590 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -1,10 +1,12 @@ package org.enginehub.util.minecraft.dumper; +import net.minecraft.SharedConstants; + import java.io.File; public interface Dumper { - File OUTPUT = new File("output/1.16.5"); + File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); void run(); } diff --git a/1.17.1/.gitignore b/1.17.1/.gitignore new file mode 100644 index 0000000..5502819 --- /dev/null +++ b/1.17.1/.gitignore @@ -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 + diff --git a/1.17.1/build.gradle.kts b/1.17.1/build.gradle.kts index 680d7a5..c045081 100644 --- a/1.17.1/build.gradle.kts +++ b/1.17.1/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.8.9" + id("fabric-loom") version "0.10-SNAPSHOT" } group = "org.enginehub" @@ -9,9 +9,8 @@ version = "1.0.0-SNAPSHOT" dependencies { minecraft("com.mojang:minecraft:1.17.1") mappings("net.fabricmc:yarn:1.17.1+build.2:v2") - modImplementation("net.fabricmc:fabric-loader:0.12.8") - implementation("com.squareup:javapoet:1.13.0") - val autoServiceVersion = "1.0.1" - compileOnly("com.google.auto.service:auto-service-annotations:$autoServiceVersion") - annotationProcessor("com.google.auto.service:auto-service:$autoServiceVersion") + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper b/1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper deleted file mode 100644 index 76af17a..0000000 --- a/1.17.1/build/classes/java/main/META-INF/services/org.enginehub.util.minecraft.dumper.Dumper +++ /dev/null @@ -1,10 +0,0 @@ -org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default -org.enginehub.util.minecraft.dumper.BlockTypesDumper -org.enginehub.util.minecraft.dumper.DataVersionDumper$Default -org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org.enginehub.util.minecraft.dumper.EntityTypesDumper -org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org.enginehub.util.minecraft.dumper.ItemTypesDumper diff --git a/1.17.1/build/tmp/compileJava/source-classes-mapping.txt b/1.17.1/build/tmp/compileJava/source-classes-mapping.txt deleted file mode 100644 index 6549ca0..0000000 --- a/1.17.1/build/tmp/compileJava/source-classes-mapping.txt +++ /dev/null @@ -1,35 +0,0 @@ -org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java - org.enginehub.util.minecraft.dumper.BlockRegistryDumper - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Default - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3dAdapter - org.enginehub.util.minecraft.dumper.BlockRegistryDumper$Vec3iAdapter -org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java - org.enginehub.util.minecraft.dumper.ItemRegistryDumper - org.enginehub.util.minecraft.dumper.ItemRegistryDumper$Default -org/enginehub/util/minecraft/util/GameSetupUtils.java - org.enginehub.util.minecraft.util.GameSetupUtils -org/enginehub/util/minecraft/RunAll.java - org.enginehub.util.minecraft.RunAll -org/enginehub/util/minecraft/dumper/Dumper.java - org.enginehub.util.minecraft.dumper.Dumper -org/enginehub/util/minecraft/dumper/RegistryDumper.java - org.enginehub.util.minecraft.dumper.RegistryDumper -org/enginehub/util/minecraft/dumper/DataVersionDumper.java - org.enginehub.util.minecraft.dumper.DataVersionDumper - org.enginehub.util.minecraft.dumper.DataVersionDumper$Default -org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypeCategoriesDumper -org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java - org.enginehub.util.minecraft.dumper.BiomeTypesDumper -org/enginehub/util/minecraft/dumper/EntityTypesDumper.java - org.enginehub.util.minecraft.dumper.EntityTypesDumper -org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java - org.enginehub.util.minecraft.dumper.BlockCategoriesDumper -org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java - org.enginehub.util.minecraft.dumper.ItemCategoriesDumper -org/enginehub/util/minecraft/dumper/BlockTypesDumper.java - org.enginehub.util.minecraft.dumper.BlockTypesDumper -org/enginehub/util/minecraft/dumper/ItemTypesDumper.java - org.enginehub.util.minecraft.dumper.ItemTypesDumper -org/enginehub/util/minecraft/dumper/RegistryClassDumper.java - org.enginehub.util.minecraft.dumper.RegistryClassDumper diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java index 7ea042d..edb9590 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -1,10 +1,12 @@ package org.enginehub.util.minecraft.dumper; +import net.minecraft.SharedConstants; + import java.io.File; public interface Dumper { - File OUTPUT = new File("output/1.17.1"); + File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); void run(); } diff --git a/1.18/.gitignore b/1.18/.gitignore new file mode 100644 index 0000000..5502819 --- /dev/null +++ b/1.18/.gitignore @@ -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 + diff --git a/1.18/build.gradle.kts b/1.18/build.gradle.kts new file mode 100644 index 0000000..2e76542 --- /dev/null +++ b/1.18/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + java + id("fabric-loom") version "0.10-SNAPSHOT" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + minecraft("com.mojang:minecraft:1.18") + mappings("net.fabricmc:yarn:1.18+build.1:v2") + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.18/src/main/java/org/enginehub/util/minecraft/RunAll.java new file mode 100644 index 0000000..f36368f --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -0,0 +1,20 @@ +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(); + GameSetupUtils.getServerResources(); + GameSetupUtils.getServerRegistry(); + for (Dumper dumper : ServiceLoader.load(Dumper.class)) { + System.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + dumper.run(); + System.err.println("Finished!"); + } + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java new file mode 100644 index 0000000..12f6cc1 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -0,0 +1,63 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + } + + @Override + protected Collection getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("nether"), + new Identifier("badlands_plateau"), + new Identifier("bamboo_jungle_hills"), + new Identifier("birch_forest_hills"), + new Identifier("dark_forest_hills"), + new Identifier("deep_warm_ocean"), + new Identifier("desert_hills"), + new Identifier("desert_lakes"), + new Identifier("giant_spruce_taiga_hills"), + new Identifier("giant_tree_taiga_hills"), + new Identifier("modified_gravelly_hills"), + new Identifier("jungle_hills"), + new Identifier("modified_badlands_plateau"), + new Identifier("modified_jungle"), + new Identifier("modified_jungle_edge"), + new Identifier("modified_wooded_badlands_plateau"), + new Identifier("mountain_edge"), + new Identifier("mushroom_field_shore"), + new Identifier("shattered_savanna_plateau"), + new Identifier("snowy_mountains"), + new Identifier("snowy_taiga_hills"), + new Identifier("snowy_taiga_mountains"), + new Identifier("swamp_hills"), + new Identifier("taiga_hills"), + new Identifier("taiga_mountains"), + new Identifier("tall_birch_hills"), + new Identifier("wooded_hills") + ); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java new file mode 100644 index 0000000..e17dea6 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -0,0 +1,39 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class BlockCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new BlockCategoriesDumper().run(); + } + + public BlockCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); + } + + @Override + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup( + Registry.BLOCK_KEY + ).getTagIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("dirt_like") + ); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java new file mode 100644 index 0000000..709fbd3 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -0,0 +1,146 @@ +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.block.Block; +import net.minecraft.block.BlockEntityProvider; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.util.Clearable; +import net.minecraft.util.Identifier; +import net.minecraft.util.Language; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.EmptyBlockView; +import org.enginehub.util.minecraft.RunAll; + +import java.io.File; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class BlockRegistryDumper extends RegistryDumper { + + private static final Box FULL_CUBE = Box.from(Vec3d.ZERO); + + 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(Vec3d.class, new Vec3dAdapter()); + } + + @Override + public Registry getRegistry() { + return Registry.BLOCK; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(Identifier resourceLocation, Block block) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); + map.put("material", getMaterial(block)); + return Lists.newArrayList(map); + } + + private Map getMaterial(Block b) { + BlockState bs = b.getDefaultState(); + Map map = new TreeMap<>(); + map.put("powerSource", bs.emitsRedstonePower()); + map.put("lightValue", bs.getLuminance()); + map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + map.put("resistance", b.getBlastResistance()); + map.put("ticksRandomly", b.hasRandomTicks(bs)); + VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); + map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); + map.put("slipperiness", b.getSlipperiness()); + map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + Material m = bs.getMaterial(); + map.put("liquid", m.isLiquid()); + map.put("solid", m.isSolid()); + map.put("movementBlocker", m.blocksMovement()); + map.put("burnable", m.isBurnable()); + map.put("opaque", m.blocksLight()); + map.put("replacedDuringPlacement", m.isReplaceable()); + map.put("toolRequired", bs.isToolRequired()); + map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); + map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); + map.put("mapColor", rgb(m.getColor().color)); + map.put("hasContainer", b instanceof BlockEntityProvider bep && + bep.createBlockEntity(BlockPos.ORIGIN, bs) instanceof Clearable); + return map; + } + + private boolean isFullCube(Box 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 { + @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 { + @Override + public Vec3d read(final JsonReader in) { + throw new UnsupportedOperationException(); + } + + @Override + public void write(final JsonWriter out, final Vec3d vec) throws IOException { + out.beginArray(); + out.value(vec.getX()); + out.value(vec.getY()); + out.value(vec.getZ()); + out.endArray(); + } + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java new file mode 100644 index 0000000..d82f3a1 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -0,0 +1,38 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +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(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + } + + @Override + protected Collection getIds() { + return Registry.BLOCK.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("sign"), + new Identifier("wall_sign"), + new Identifier("grass_path") + ); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java new file mode 100644 index 0000000..d18addc --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -0,0 +1,150 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.SharedConstants; +import net.minecraft.block.Block; +import net.minecraft.state.property.BooleanProperty; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.EnumProperty; +import net.minecraft.state.property.IntProperty; +import net.minecraft.state.property.Property; +import net.minecraft.tag.TagGroup; +import net.minecraft.tag.TagManager; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import org.enginehub.util.minecraft.RunAll; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class DataVersionDumper implements Dumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + new DataVersionDumper(file).run(); + } + } + + private final File file; + private final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + + public DataVersionDumper(File file) { + this.file = file; + } + + private Map> getTags(TagGroup provider, Registry registry) { + Map> tagCollector = new TreeMap<>(); + + provider.getTags().forEach((key, value) -> + tagCollector.put(key.toString(), value.values().stream() + .map(entry -> checkNotNull(registry.getId(entry))) + .map(Identifier::toString) + .sorted() + .collect(Collectors.toList()))); + + return tagCollector; + } + + @SuppressWarnings("rawtypes") + private String getTypeName(Class clazz) { + if (clazz == EnumProperty.class) { + return "enum"; + } else if (clazz == IntProperty.class) { + return "int"; + } else if (clazz == BooleanProperty.class) { + return "bool"; + } else if (clazz == DirectionProperty.class) { + return "direction"; + } else { + throw new RuntimeException("Unknown property!"); + } + } + + @Override + public void run() { + // Blocks + Map> blocks = new TreeMap<>(); + for (Identifier blockId : Registry.BLOCK.getIds()) { + Map bl = new TreeMap<>(); + Block block = Registry.BLOCK.get(blockId); + Map properties = new TreeMap<>(); + for (Property prop : block.getDefaultState().getProperties()) { + Map propertyValues = new TreeMap<>(); + propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("type", getTypeName(prop.getClass())); + properties.put(prop.getName(), propertyValues); + } + bl.put("properties", properties); + StringBuilder defaultState = new StringBuilder(); + defaultState.append(blockId.toString()); + if (!block.getDefaultState().getEntries().isEmpty()) { + List bits = new ArrayList<>(); + block.getDefaultState().getEntries().entrySet().stream() + .sorted(Comparator.comparing(e -> e.getKey().getName())) + .forEach(e -> + bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) + ); + defaultState.append("[").append(String.join(",", bits)).append("]"); + } + bl.put("defaultstate", defaultState.toString()); + blocks.put(blockId.toString(), bl); + } + + // Items + List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Entities + List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + // Biomes + List biomes = getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + + TagManager tagManager = getServerResources().getRegistryTagManager(); + // BlockTags + Map> blockTags = getTags(tagManager.getOrCreateTagGroup(Registry.BLOCK_KEY), Registry.BLOCK); + + // ItemTags + Map> itemTags = getTags(tagManager.getOrCreateTagGroup(Registry.ITEM_KEY), Registry.ITEM); + + // EntityTags + Map> entityTags = getTags(tagManager.getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY), Registry.ENTITY_TYPE); + + Map output = new TreeMap<>(); + output.put("blocks", blocks); + output.put("items", items); + output.put("entities", entities); + output.put("biomes", biomes); + output.put("blocktags", blockTags); + output.put("itemtags", itemTags); + output.put("entitytags", entityTags); + + try { + Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java new file mode 100644 index 0000000..edb9590 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -0,0 +1,12 @@ +package org.enginehub.util.minecraft.dumper; + +import net.minecraft.SharedConstants; + +import java.io.File; + +public interface Dumper { + + File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); + + void run(); +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java new file mode 100644 index 0000000..7b3336e --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -0,0 +1,30 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypeCategoriesDumper extends RegistryClassDumper { + + // worldedit doesn't actually do entity type categories yet + public static void main(String[] args) { + setupGame(); + new EntityTypeCategoriesDumper().run(); + } + + public EntityTypeCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); + } + + @Override + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds(); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java new file mode 100644 index 0000000..108a100 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -0,0 +1,36 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new EntityTypesDumper().run(); + } + + public EntityTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("zombie_pigman") + ); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java new file mode 100644 index 0000000..7b751dc --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -0,0 +1,35 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemCategoriesDumper().run(); + } + + public ItemCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); + } + + @Override + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of(new Identifier("furnace_materials")); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java new file mode 100644 index 0000000..7b1a3e9 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -0,0 +1,62 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import net.minecraft.item.Item; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import org.enginehub.util.minecraft.RunAll; + +import java.io.File; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class ItemRegistryDumper extends RegistryDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + new ItemRegistryDumper(new File(OUTPUT, "items.json")).run(); + } + } + + public ItemRegistryDumper(File file) { + super(file); + } + + @Override + public Registry getRegistry() { + return Registry.ITEM; + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + public List> getProperties(Identifier resourceLocation, Item item) { + List> maps = new ArrayList<>(); + maps.add(getPropertiesForItem(resourceLocation, item)); + return maps; + } + + private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation.toString()); + map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); + map.put("localizedName", item.getName(item.getDefaultStack()).getString()); + map.put("maxDamage", item.getMaxDamage()); + map.put("maxStackSize", item.getMaxCount()); + return map; + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java new file mode 100644 index 0000000..089eea3 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -0,0 +1,41 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemTypesDumper().run(); + } + + public ItemTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + } + + @Override + protected Collection getIds() { + return Registry.ITEM.getIds(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + new Identifier("cactus_green"), + new Identifier("dandelion_yellow"), + new Identifier("rose_red"), + new Identifier("sign"), + new Identifier("zombie_pigman_spawn_egg"), + new Identifier("grass_path") + ); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java new file mode 100644 index 0000000..c14558a --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -0,0 +1,124 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSortedSet; +import com.google.common.io.MoreFiles; +import com.squareup.javapoet.*; +import net.minecraft.util.Identifier; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.function.UnaryOperator; +import java.util.regex.Pattern; + +import static javax.lang.model.element.Modifier.*; + +public abstract class RegistryClassDumper implements Dumper { + + private static final ClassName JAVAX_NULLABLE = ClassName.get("javax.annotation", "Nullable"); + private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); + private static final String FOUR_SPACES = Strings.repeat(" ", 4); + + static { + if (!Files.exists(OUTPUT_DIRECTORY)) { + try { + Files.createDirectory(OUTPUT_DIRECTORY); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private static UnaryOperator inlineAnnotation(String name) { + Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); + return content -> pattern.matcher(content).replaceAll("@" + name + " "); + } + + private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); + private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); + + /** + * Handles simple pluralization rules. + */ + private static String makePlural(String name) { + if (name.endsWith("y")) { + return name.substring(0, name.length() - 1) + "ies"; + } + return name + "s"; + } + + private final ClassName type; + private final boolean nullable; + + protected RegistryClassDumper(ClassName type, boolean nullable) { + this.type = type; + this.nullable = nullable; + } + + protected abstract Collection getIds(); + + protected Collection getDeprecatedIds() { + return Collections.emptySet(); + } + + @Override + public void run() { + Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); + Set resources = ImmutableSortedSet.naturalOrder().addAll(getIds()).addAll(deprecatedIds).build(); + ClassName pluralType = type.peerClass(makePlural(type.simpleName())); + TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); + builder.addModifiers(PUBLIC, FINAL); + builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "$S", "unused").build()); + builder.addJavadoc("Stores a list of common {@link $1T $2N}.\n\n@see $1T", type, pluralType.simpleName()); + builder.addMethod(MethodSpec.constructorBuilder().addModifiers(PRIVATE).build()); + builder.addMethod(createGetMethod()); + for (Identifier resourceLocation : resources) { + String name = resourceLocation.getPath().toUpperCase().replace('/', '_'); + FieldSpec.Builder fieldBuilder = FieldSpec.builder(type, name, PUBLIC, STATIC, FINAL); + if (deprecatedIds.contains(resourceLocation)) { + fieldBuilder.addAnnotation(Deprecated.class); + } + if (nullable) { + fieldBuilder.addAnnotation(JAVAX_NULLABLE); + } + fieldBuilder.initializer("get($S)", resourceLocation); + builder.addField(fieldBuilder.build()); + } + TypeSpec spec = builder.build(); + JavaFile javaFile = JavaFile.builder(type.packageName(), spec).indent(FOUR_SPACES).skipJavaLangImports(true).build(); + + try { + Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); + String content = fixContent(javaFile.toString()); + MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } + + private MethodSpec createGetMethod() { + MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); + builder.addJavadoc("Gets the {@link $T} associated with the given id.", type).addModifiers(PUBLIC, STATIC).addParameter(String.class, "id"); + if (nullable) { + builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())).addStatement("return $T.REGISTRY.get(id)", type); + } else { + builder.returns(type).addCode(CodeBlock.builder().addStatement("$1T entry = $1T.REGISTRY.get(id)", type).beginControlFlow("if (entry == null)").addStatement("return new $T(id)", type).endControlFlow().addStatement("return entry").build()); + } + return builder.build(); + } + + private String fixContent(String content) { + if (nullable) { + content = INLINE_NULLABLE.apply(content); + } + content = INLINE_DEPRECATED.apply(content); + content = content.replace(");\n\n", ");\n").replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); + return content; + } + +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java new file mode 100644 index 0000000..fef9aa6 --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -0,0 +1,64 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.common.collect.ImmutableList; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +abstract class RegistryDumper implements Dumper { + + private final File file; + private final Gson gson; + + protected RegistryDumper(File file) { + this.file = file; + GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); + registerAdapters(builder); + this.gson = builder.create(); + } + + public void registerAdapters(GsonBuilder builder) { + + } + + @Override + public void run() { + Registry registry = getRegistry(); + ImmutableList> list = ImmutableList.sortedCopyOf(getComparator(), getRegistry().getIds().stream().flatMap(v -> getProperties(v, registry.get(v)).stream()).collect(Collectors.toList())); + + String out = gson.toJson(list); + this.write(out); + System.out.println("Wrote file: " + file.getAbsolutePath()); + } + + private void write(String s) { + try (FileOutputStream str = new FileOutputStream(file)) { + str.write(s.getBytes()); + } catch (IOException e) { + System.err.println("Error writing registry dump: "); + e.printStackTrace(); + } + } + + protected String rgb(int i) { + int r = (i >> 16) & 0xFF; + int g = (i >> 8) & 0xFF; + int b = i & 0xFF; + return String.format("#%02x%02x%02x", r, g, b); + } + + public abstract List> getProperties(Identifier resourceLocation, V object); + + public abstract Registry getRegistry(); + + public abstract Comparator> getComparator(); +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.18/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java new file mode 100644 index 0000000..833614c --- /dev/null +++ b/1.18/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -0,0 +1,73 @@ +package org.enginehub.util.minecraft.util; + +import com.google.common.util.concurrent.Futures; +import net.minecraft.Bootstrap; +import net.minecraft.SharedConstants; +import net.minecraft.resource.*; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.CommandManager; +import net.minecraft.util.registry.DynamicRegistryManager; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public final class GameSetupUtils { + + public static void setupGame() { + SharedConstants.createGameVersion(); + Bootstrap.initialize(); + } + + private static final Lock lock = new ReentrantLock(); + private static ServerResourceManager SERVER_RESOURCES; + private static DynamicRegistryManager SERVER_REGISTRY; + + public static ServerResourceManager getServerResources() { + setupGame(); + lock.lock(); + try { + ServerResourceManager localResources = SERVER_RESOURCES; + if (localResources != null) { + return localResources; + } + ResourcePackManager resourcePackManager = new ResourcePackManager( + ResourceType.SERVER_DATA, + new VanillaDataPackProvider() + ); + MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); + DynamicRegistryManager.Impl impl = DynamicRegistryManager.create(); + CompletableFuture completableFuture = ServerResourceManager.reload( + resourcePackManager.createResourcePacks(), + impl, + CommandManager.RegistrationEnvironment.DEDICATED, + // permission level doesn't matter + 0, + ForkJoinPool.commonPool(), + Runnable::run + ); + ServerResourceManager manager = Futures.getUnchecked(completableFuture); + manager.loadRegistryTags(); + SERVER_RESOURCES = manager; + return manager; + } finally { + lock.unlock(); + } + } + + public static DynamicRegistryManager getServerRegistry() { + lock.lock(); + try { + DynamicRegistryManager localResources = SERVER_REGISTRY; + if (localResources != null) { + return localResources; + } + DynamicRegistryManager manager = DynamicRegistryManager.create(); + SERVER_REGISTRY = manager; + return manager; + } finally { + lock.unlock(); + } + } +} diff --git a/gradle.properties b/gradle.properties index df171d5..2893d59 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,8 @@ group=org.enginehub version=1.0.0-SNAPSHOT + +org.gradle.jvmargs=-Xmx1G + +fabric_loader.version=0.12.8 +javapoet.version=1.13.0 +autoservice.version=1.0.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf..84d1f85 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index e5973da..b935b41 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,6 +4,7 @@ include("1.14.4") include("1.15.2") include("1.16.5") include("1.17.1") +include("1.18") pluginManagement { repositories { From af1064d56a447b125e6a01c5a273dba1a749ff1c Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 6 Dec 2021 10:40:05 -0500 Subject: [PATCH 03/18] Update getDeprecatedIds for each version --- .../enginehub/util/minecraft/dumper/BiomeTypesDumper.java | 5 ----- .../util/minecraft/dumper/BlockCategoriesDumper.java | 5 ----- .../enginehub/util/minecraft/dumper/BlockTypesDumper.java | 3 +-- .../enginehub/util/minecraft/dumper/EntityTypesDumper.java | 7 ------- .../util/minecraft/dumper/ItemCategoriesDumper.java | 5 ----- .../util/minecraft/dumper/ItemRegistryDumper.java | 1 + .../enginehub/util/minecraft/dumper/ItemTypesDumper.java | 4 +--- .../enginehub/util/minecraft/dumper/BiomeTypesDumper.java | 5 ----- .../enginehub/util/minecraft/dumper/BlockTypesDumper.java | 3 +-- .../enginehub/util/minecraft/dumper/EntityTypesDumper.java | 7 ------- .../util/minecraft/dumper/ItemCategoriesDumper.java | 5 ----- .../enginehub/util/minecraft/dumper/ItemTypesDumper.java | 4 +--- 12 files changed, 5 insertions(+), 49 deletions(-) diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 239121c..be59653 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -26,9 +26,4 @@ public BiomeTypesDumper() { protected Collection getIds() { return Registry.BIOME.getIds(); } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("nether")); - } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 7398c94..f727a6d 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -26,9 +26,4 @@ public BlockCategoriesDumper() { protected Collection getIds() { return Registry.BLOCK.getIds(); } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("dirt_like")); - } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 867711e..e62497d 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -31,8 +31,7 @@ protected Collection getIds() { protected Collection getDeprecatedIds() { return ImmutableSet.of( new Identifier("sign"), - new Identifier("wall_sign"), - new Identifier("grass_path") + new Identifier("wall_sign") ); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 0fbde15..90798aa 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -26,11 +26,4 @@ public EntityTypesDumper() { protected Collection getIds() { return Registry.ENTITY_TYPE.getIds(); } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - new Identifier("zombie_pigman") - ); - } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 7920fef..bd1f7f2 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -26,9 +26,4 @@ public ItemCategoriesDumper() { protected Collection getIds() { return Registry.ITEM.getIds(); } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("furnace_materials")); - } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index b7c9e22..2540155 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -39,6 +39,7 @@ public Comparator> getComparator() { return Comparator.comparing(map -> (String) map.get("id")); } + @Override public List> getProperties(Identifier resourceLocation, Item item) { List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 5b8f730..5239c73 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -33,9 +33,7 @@ protected Collection getDeprecatedIds() { new Identifier("cactus_green"), new Identifier("dandelion_yellow"), new Identifier("rose_red"), - new Identifier("sign"), - new Identifier("zombie_pigman_spawn_egg"), - new Identifier("grass_path") + new Identifier("sign") ); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 239121c..be59653 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -26,9 +26,4 @@ public BiomeTypesDumper() { protected Collection getIds() { return Registry.BIOME.getIds(); } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("nether")); - } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 867711e..e62497d 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -31,8 +31,7 @@ protected Collection getIds() { protected Collection getDeprecatedIds() { return ImmutableSet.of( new Identifier("sign"), - new Identifier("wall_sign"), - new Identifier("grass_path") + new Identifier("wall_sign") ); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 0fbde15..90798aa 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -26,11 +26,4 @@ public EntityTypesDumper() { protected Collection getIds() { return Registry.ENTITY_TYPE.getIds(); } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - new Identifier("zombie_pigman") - ); - } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 7920fef..bd1f7f2 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -26,9 +26,4 @@ public ItemCategoriesDumper() { protected Collection getIds() { return Registry.ITEM.getIds(); } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("furnace_materials")); - } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 5b8f730..5239c73 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -33,9 +33,7 @@ protected Collection getDeprecatedIds() { new Identifier("cactus_green"), new Identifier("dandelion_yellow"), new Identifier("rose_red"), - new Identifier("sign"), - new Identifier("zombie_pigman_spawn_egg"), - new Identifier("grass_path") + new Identifier("sign") ); } } From a9b9b40f08ec0ad7d3a7a260708b3cae1002028c Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 6 Dec 2021 12:33:09 -0500 Subject: [PATCH 04/18] Clean up some things and add more biomes to 1.18's deprecated list --- .../util/minecraft/dumper/BiomeTypesDumper.java | 1 - .../minecraft/dumper/BlockCategoriesDumper.java | 7 ++++--- .../minecraft/dumper/DataVersionDumper.java | 10 ++++------ .../dumper/EntityTypeCategoriesDumper.java | 4 ++-- .../minecraft/dumper/EntityTypesDumper.java | 1 - .../minecraft/dumper/ItemCategoriesDumper.java | 5 ++--- .../util/minecraft/dumper/RegistryDumper.java | 10 +++++----- .../util/minecraft/dumper/BiomeTypesDumper.java | 1 - .../minecraft/dumper/BlockCategoriesDumper.java | 9 ++++++--- .../dumper/EntityTypeCategoriesDumper.java | 5 +++-- .../minecraft/dumper/EntityTypesDumper.java | 1 - .../minecraft/dumper/ItemCategoriesDumper.java | 5 ++--- .../minecraft/dumper/ItemRegistryDumper.java | 1 + .../util/minecraft/dumper/RegistryDumper.java | 10 +++++----- .../minecraft/dumper/BlockRegistryDumper.java | 4 +--- .../minecraft/dumper/DataVersionDumper.java | 17 +++-------------- .../minecraft/dumper/ItemRegistryDumper.java | 8 ++------ .../minecraft/dumper/RegistryClassDumper.java | 15 ++------------- .../util/minecraft/dumper/RegistryDumper.java | 11 +++++------ .../util/minecraft/util/GameSetupUtils.java | 6 +----- .../minecraft/dumper/BlockRegistryDumper.java | 1 - .../minecraft/dumper/DataVersionDumper.java | 17 +++-------------- .../minecraft/dumper/ItemRegistryDumper.java | 8 ++------ .../util/minecraft/dumper/RegistryDumper.java | 8 ++++---- .../util/minecraft/dumper/BiomeTypesDumper.java | 11 +++++++++++ .../minecraft/dumper/BlockCategoriesDumper.java | 6 ++---- .../minecraft/dumper/BlockRegistryDumper.java | 4 +--- .../minecraft/dumper/DataVersionDumper.java | 17 +++-------------- .../minecraft/dumper/ItemRegistryDumper.java | 8 ++------ .../util/minecraft/dumper/RegistryDumper.java | 8 ++++---- 30 files changed, 80 insertions(+), 139 deletions(-) diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index be59653..8631893 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -1,7 +1,6 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index f727a6d..d8ee332 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -1,15 +1,16 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; +import net.minecraft.tag.BlockTags; +import net.minecraft.tag.RegistryTagManager; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import java.util.Collection; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +// TODO Get the 1.14.4 and 1.15.2 Category dumpers to work @AutoService(Dumper.class) public class BlockCategoriesDumper extends RegistryClassDumper { @@ -24,6 +25,6 @@ public BlockCategoriesDumper() { @Override protected Collection getIds() { - return Registry.BLOCK.getIds(); + return BlockTags.getContainer().getKeys(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index d7d2492..9f7ba39 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -7,8 +7,7 @@ import net.minecraft.SharedConstants; import net.minecraft.block.Block; import net.minecraft.state.property.*; -import net.minecraft.tag.RegistryTagManager; -import net.minecraft.tag.TagContainer; +import net.minecraft.tag.*; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -107,15 +106,14 @@ public void run() { // Biomes List biomes = Registry.BIOME.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); - RegistryTagManager tagManager = new RegistryTagManager(); // BlockTags - Map> blockTags = getTags(tagManager.blocks(), Registry.BLOCK); + Map> blockTags = getTags(BlockTags.getContainer(), Registry.BLOCK); // ItemTags - Map> itemTags = getTags(tagManager.items(), Registry.ITEM); + Map> itemTags = getTags(ItemTags.getContainer(), Registry.ITEM); // EntityTags - Map> entityTags = getTags(tagManager.entityTypes(), Registry.ENTITY_TYPE); + Map> entityTags = getTags(EntityTypeTags.getContainer(), Registry.ENTITY_TYPE); Map output = new TreeMap<>(); output.put("blocks", blocks); diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index db2a0f0..1f3e596 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; +import net.minecraft.tag.EntityTypeTags; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import java.util.Collection; @@ -24,6 +24,6 @@ public EntityTypeCategoriesDumper() { @Override protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds(); + return EntityTypeTags.getContainer().getKeys(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 90798aa..32d8f3f 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -1,7 +1,6 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index bd1f7f2..5192b62 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -1,10 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; +import net.minecraft.tag.ItemTags; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import java.util.Collection; @@ -24,6 +23,6 @@ public ItemCategoriesDumper() { @Override protected Collection getIds() { - return Registry.ITEM.getIds(); + return ItemTags.getContainer().getKeys(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index 9feabc0..2f919f9 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -23,7 +23,7 @@ protected RegistryDumper(File file) { this.file = file; GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); registerAdapters(builder); - this.gson = builder.create(); + gson = builder.create(); } public void registerAdapters(GsonBuilder builder) { @@ -41,12 +41,12 @@ public void run() { ); String out = gson.toJson(list); - this.write(out); + write(out); System.out.println("Wrote file: " + file.getAbsolutePath()); } private void write(String s) { - try(FileOutputStream str = new FileOutputStream(file)) { + try (FileOutputStream str = new FileOutputStream(file)) { str.write(s.getBytes()); } catch (IOException e) { System.err.println("Error writing registry dump: "); @@ -55,8 +55,8 @@ private void write(String s) { } protected String rgb(int i) { - int r = (i >> 16) & 0xFF; - int g = (i >> 8) & 0xFF; + int r = i >> 16 & 0xFF; + int g = i >> 8 & 0xFF; int b = i & 0xFF; return String.format("#%02x%02x%02x", r, g, b); } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index be59653..8631893 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -1,7 +1,6 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 7398c94..3a380b9 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -3,8 +3,9 @@ import com.google.auto.service.AutoService; import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; +import net.minecraft.tag.BlockTags; +import net.minecraft.tag.RegistryTagManager; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import java.util.Collection; @@ -24,11 +25,13 @@ public BlockCategoriesDumper() { @Override protected Collection getIds() { - return Registry.BLOCK.getIds(); + return BlockTags.getContainer().getKeys(); } @Override protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("dirt_like")); + return ImmutableSet.of( + new Identifier("dirt_like") + ); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index db2a0f0..6da0827 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -2,8 +2,9 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; +import net.minecraft.tag.EntityTypeTags; +import net.minecraft.tag.RegistryTagManager; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import java.util.Collection; @@ -24,6 +25,6 @@ public EntityTypeCategoriesDumper() { @Override protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds(); + return EntityTypeTags.getContainer().getKeys(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 90798aa..32d8f3f 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -1,7 +1,6 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index bd1f7f2..5192b62 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -1,10 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; +import net.minecraft.tag.ItemTags; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import java.util.Collection; @@ -24,6 +23,6 @@ public ItemCategoriesDumper() { @Override protected Collection getIds() { - return Registry.ITEM.getIds(); + return ItemTags.getContainer().getKeys(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index b7c9e22..2540155 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -39,6 +39,7 @@ public Comparator> getComparator() { return Comparator.comparing(map -> (String) map.get("id")); } + @Override public List> getProperties(Identifier resourceLocation, Item item) { List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index 9feabc0..2f919f9 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -23,7 +23,7 @@ protected RegistryDumper(File file) { this.file = file; GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); registerAdapters(builder); - this.gson = builder.create(); + gson = builder.create(); } public void registerAdapters(GsonBuilder builder) { @@ -41,12 +41,12 @@ public void run() { ); String out = gson.toJson(list); - this.write(out); + write(out); System.out.println("Wrote file: " + file.getAbsolutePath()); } private void write(String s) { - try(FileOutputStream str = new FileOutputStream(file)) { + try (FileOutputStream str = new FileOutputStream(file)) { str.write(s.getBytes()); } catch (IOException e) { System.err.println("Error writing registry dump: "); @@ -55,8 +55,8 @@ private void write(String s) { } protected String rgb(int i) { - int r = (i >> 16) & 0xFF; - int g = (i >> 8) & 0xFF; + int r = i >> 16 & 0xFF; + int g = i >> 8 & 0xFF; int b = i & 0xFF; return String.format("#%02x%02x%02x", r, g, b); } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 8b441f4..8ccdebb 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -21,7 +21,6 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.EmptyBlockView; -import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; @@ -100,8 +99,7 @@ private Map getMaterial(Block b) { map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); map.put("mapColor", rgb(m.getColor().color)); - map.put("hasContainer", b instanceof BlockEntityProvider && - (((BlockEntityProvider) b).createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable)); + map.put("hasContainer", b instanceof BlockEntityProvider && ((BlockEntityProvider) b).createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable); return map; } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 96ffec7..faafddb 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -6,31 +6,20 @@ import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; import net.minecraft.block.Block; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.DirectionProperty; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.state.property.IntProperty; -import net.minecraft.state.property.Property; +import net.minecraft.state.property.*; import net.minecraft.tag.TagGroup; import net.minecraft.tag.TagManager; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +import static org.enginehub.util.minecraft.util.GameSetupUtils.*; public class DataVersionDumper implements Dumper { diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 7b1a3e9..75edbac 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -4,14 +4,9 @@ import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import org.enginehub.util.minecraft.RunAll; import java.io.File; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -44,6 +39,7 @@ public Comparator> getComparator() { return Comparator.comparing(map -> (String) map.get("id")); } + @Override public List> getProperties(Identifier resourceLocation, Item item) { List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java index 7b0cc44..eaac883 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -3,31 +3,20 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableSortedSet; import com.google.common.io.MoreFiles; -import com.squareup.javapoet.AnnotationSpec; -import com.squareup.javapoet.ClassName; -import com.squareup.javapoet.CodeBlock; -import com.squareup.javapoet.FieldSpec; -import com.squareup.javapoet.JavaFile; -import com.squareup.javapoet.MethodSpec; -import com.squareup.javapoet.TypeSpec; +import com.squareup.javapoet.*; import net.minecraft.util.Identifier; -import org.enginehub.util.minecraft.RunAll; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Collection; import java.util.Collections; import java.util.Set; import java.util.function.UnaryOperator; import java.util.regex.Pattern; -import static javax.lang.model.element.Modifier.FINAL; -import static javax.lang.model.element.Modifier.PRIVATE; -import static javax.lang.model.element.Modifier.PUBLIC; -import static javax.lang.model.element.Modifier.STATIC; +import static javax.lang.model.element.Modifier.*; public abstract class RegistryClassDumper implements Dumper { diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index 2736a14..4ece9f2 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -10,7 +10,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.Comparator; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -24,7 +23,7 @@ protected RegistryDumper(File file) { this.file = file; GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); registerAdapters(builder); - this.gson = builder.create(); + gson = builder.create(); } public void registerAdapters(GsonBuilder builder) { @@ -42,12 +41,12 @@ public void run() { ); String out = gson.toJson(list); - this.write(out); + write(out); System.out.println("Wrote file: " + file.getAbsolutePath()); } private void write(String s) { - try(FileOutputStream str = new FileOutputStream(file)) { + try (FileOutputStream str = new FileOutputStream(file)) { str.write(s.getBytes()); } catch (IOException e) { System.err.println("Error writing registry dump: "); @@ -56,8 +55,8 @@ private void write(String s) { } protected String rgb(int i) { - int r = (i >> 16) & 0xFF; - int g = (i >> 8) & 0xFF; + int r = i >> 16 & 0xFF; + int g = i >> 8 & 0xFF; int b = i & 0xFF; return String.format("#%02x%02x%02x", r, g, b); } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index cd7918d..46ea4fc 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -2,11 +2,7 @@ import com.google.common.util.concurrent.Futures; import net.minecraft.Bootstrap; -import net.minecraft.resource.DataPackSettings; -import net.minecraft.resource.ResourcePackManager; -import net.minecraft.resource.ResourcePackProfile; -import net.minecraft.resource.ServerResourceManager; -import net.minecraft.resource.VanillaDataPackProvider; +import net.minecraft.resource.*; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.util.registry.DynamicRegistryManager; diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 709fbd3..2985b40 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -21,7 +21,6 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.EmptyBlockView; -import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index d18addc..e812578 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -6,31 +6,20 @@ import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; import net.minecraft.block.Block; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.DirectionProperty; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.state.property.IntProperty; -import net.minecraft.state.property.Property; +import net.minecraft.state.property.*; import net.minecraft.tag.TagGroup; import net.minecraft.tag.TagManager; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +import static org.enginehub.util.minecraft.util.GameSetupUtils.*; public class DataVersionDumper implements Dumper { diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 7b1a3e9..75edbac 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -4,14 +4,9 @@ import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import org.enginehub.util.minecraft.RunAll; import java.io.File; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -44,6 +39,7 @@ public Comparator> getComparator() { return Comparator.comparing(map -> (String) map.get("id")); } + @Override public List> getProperties(Identifier resourceLocation, Item item) { List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index fef9aa6..7c7240e 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -23,7 +23,7 @@ protected RegistryDumper(File file) { this.file = file; GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); registerAdapters(builder); - this.gson = builder.create(); + gson = builder.create(); } public void registerAdapters(GsonBuilder builder) { @@ -36,7 +36,7 @@ public void run() { ImmutableList> list = ImmutableList.sortedCopyOf(getComparator(), getRegistry().getIds().stream().flatMap(v -> getProperties(v, registry.get(v)).stream()).collect(Collectors.toList())); String out = gson.toJson(list); - this.write(out); + write(out); System.out.println("Wrote file: " + file.getAbsolutePath()); } @@ -50,8 +50,8 @@ private void write(String s) { } protected String rgb(int i) { - int r = (i >> 16) & 0xFF; - int g = (i >> 8) & 0xFF; + int r = i >> 16 & 0xFF; + int g = i >> 8 & 0xFF; int b = i & 0xFF; return String.format("#%02x%02x%02x", r, g, b); } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 12f6cc1..5512040 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -32,6 +32,17 @@ protected Collection getIds() { protected Collection getDeprecatedIds() { return ImmutableSet.of( new Identifier("nether"), + new Identifier("tall_birch_forest"), + new Identifier("giant_tree_taiga"), + new Identifier("giant_spruce_taiga"), + new Identifier("snowy_tundra"), + new Identifier("jungle_edge"), + new Identifier("stone_shore"), + new Identifier("mountains"), + new Identifier("wooded_mountains"), + new Identifier("gravelly_mountains"), + new Identifier("shattered_savanna"), + new Identifier("wooded_badlands_plateau"), new Identifier("badlands_plateau"), new Identifier("bamboo_jungle_hills"), new Identifier("birch_forest_hills"), diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index e17dea6..0a4199c 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -25,15 +25,13 @@ public BlockCategoriesDumper() { @Override protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup( - Registry.BLOCK_KEY - ).getTagIds(); + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.BLOCK_KEY).getTagIds(); } @Override protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("dirt_like") + new Identifier("dirt_like") ); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 709fbd3..d7fe5e5 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -21,7 +21,6 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.EmptyBlockView; -import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; @@ -95,8 +94,7 @@ private Map getMaterial(Block b) { map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); map.put("mapColor", rgb(m.getColor().color)); - map.put("hasContainer", b instanceof BlockEntityProvider bep && - bep.createBlockEntity(BlockPos.ORIGIN, bs) instanceof Clearable); + map.put("hasContainer", b instanceof BlockEntityProvider bep && bep.createBlockEntity(BlockPos.ORIGIN, bs) instanceof Clearable); return map; } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index d18addc..e812578 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -6,31 +6,20 @@ import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; import net.minecraft.block.Block; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.DirectionProperty; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.state.property.IntProperty; -import net.minecraft.state.property.Property; +import net.minecraft.state.property.*; import net.minecraft.tag.TagGroup; import net.minecraft.tag.TagManager; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import org.enginehub.util.minecraft.RunAll; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +import static org.enginehub.util.minecraft.util.GameSetupUtils.*; public class DataVersionDumper implements Dumper { diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 7b1a3e9..75edbac 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -4,14 +4,9 @@ import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import org.enginehub.util.minecraft.RunAll; import java.io.File; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -44,6 +39,7 @@ public Comparator> getComparator() { return Comparator.comparing(map -> (String) map.get("id")); } + @Override public List> getProperties(Identifier resourceLocation, Item item) { List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index fef9aa6..7c7240e 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -23,7 +23,7 @@ protected RegistryDumper(File file) { this.file = file; GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); registerAdapters(builder); - this.gson = builder.create(); + gson = builder.create(); } public void registerAdapters(GsonBuilder builder) { @@ -36,7 +36,7 @@ public void run() { ImmutableList> list = ImmutableList.sortedCopyOf(getComparator(), getRegistry().getIds().stream().flatMap(v -> getProperties(v, registry.get(v)).stream()).collect(Collectors.toList())); String out = gson.toJson(list); - this.write(out); + write(out); System.out.println("Wrote file: " + file.getAbsolutePath()); } @@ -50,8 +50,8 @@ private void write(String s) { } protected String rgb(int i) { - int r = (i >> 16) & 0xFF; - int g = (i >> 8) & 0xFF; + int r = i >> 16 & 0xFF; + int g = i >> 8 & 0xFF; int b = i & 0xFF; return String.format("#%02x%02x%02x", r, g, b); } From b7467ac2f147e2768970406ec9ba99e1f0b0dbbd Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 3 Jul 2023 13:48:05 -0400 Subject: [PATCH 05/18] Make common module for base dumper classes --- 1.14.4/build.gradle.kts | 3 +- .../minecraft/dumper/BiomeTypesDumper.java | 4 +- .../dumper/BlockCategoriesDumper.java | 5 +- .../minecraft/dumper/BlockRegistryDumper.java | 14 +- .../minecraft/dumper/BlockTypesDumper.java | 10 +- .../minecraft/dumper/DataVersionDumper.java | 2 +- .../util/minecraft/dumper/Dumper.java | 12 -- .../dumper/EntityTypeCategoriesDumper.java | 4 +- .../minecraft/dumper/EntityTypesDumper.java | 4 +- .../dumper/ItemCategoriesDumper.java | 4 +- .../minecraft/dumper/ItemRegistryDumper.java | 11 +- .../minecraft/dumper/ItemTypesDumper.java | 14 +- .../minecraft/dumper/RegistryClassDumper.java | 155 ------------------ .../util/minecraft/dumper/RegistryDumper.java | 69 -------- .../util/minecraft/util/GameSetupUtils.java | 5 + 1.15.2/build.gradle.kts | 3 +- .../minecraft/dumper/BiomeTypesDumper.java | 4 +- .../dumper/BlockCategoriesDumper.java | 9 +- .../minecraft/dumper/BlockRegistryDumper.java | 14 +- .../minecraft/dumper/BlockTypesDumper.java | 10 +- .../minecraft/dumper/DataVersionDumper.java | 2 +- .../util/minecraft/dumper/Dumper.java | 12 -- .../dumper/EntityTypeCategoriesDumper.java | 5 +- .../minecraft/dumper/EntityTypesDumper.java | 4 +- .../dumper/ItemCategoriesDumper.java | 4 +- .../minecraft/dumper/ItemRegistryDumper.java | 11 +- .../minecraft/dumper/ItemTypesDumper.java | 14 +- .../minecraft/dumper/RegistryClassDumper.java | 155 ------------------ .../util/minecraft/dumper/RegistryDumper.java | 69 -------- .../util/minecraft/util/GameSetupUtils.java | 5 + 1.16.5/build.gradle.kts | 3 +- .../minecraft/dumper/BiomeTypesDumper.java | 10 +- .../dumper/BlockCategoriesDumper.java | 8 +- .../minecraft/dumper/BlockRegistryDumper.java | 14 +- .../minecraft/dumper/BlockTypesDumper.java | 10 +- .../minecraft/dumper/DataVersionDumper.java | 2 +- .../util/minecraft/dumper/Dumper.java | 12 -- .../dumper/EntityTypeCategoriesDumper.java | 4 +- .../minecraft/dumper/EntityTypesDumper.java | 8 +- .../dumper/ItemCategoriesDumper.java | 10 +- .../minecraft/dumper/ItemRegistryDumper.java | 11 +- .../minecraft/dumper/ItemTypesDumper.java | 16 +- .../minecraft/dumper/RegistryClassDumper.java | 155 ------------------ .../util/minecraft/dumper/RegistryDumper.java | 69 -------- .../util/minecraft/util/GameSetupUtils.java | 6 + 1.17.1/build.gradle.kts | 3 +- .../minecraft/dumper/BiomeTypesDumper.java | 8 +- .../dumper/BlockCategoriesDumper.java | 8 +- .../minecraft/dumper/BlockRegistryDumper.java | 14 +- .../minecraft/dumper/BlockTypesDumper.java | 12 +- .../minecraft/dumper/DataVersionDumper.java | 2 +- .../util/minecraft/dumper/Dumper.java | 12 -- .../dumper/EntityTypeCategoriesDumper.java | 4 +- .../minecraft/dumper/EntityTypesDumper.java | 8 +- .../dumper/ItemCategoriesDumper.java | 10 +- .../minecraft/dumper/ItemRegistryDumper.java | 11 +- .../minecraft/dumper/ItemTypesDumper.java | 18 +- .../minecraft/dumper/RegistryClassDumper.java | 124 -------------- .../util/minecraft/dumper/RegistryDumper.java | 64 -------- .../util/minecraft/util/GameSetupUtils.java | 5 + {1.18 => 1.18.2}/.gitignore | 0 1.18.2/build.gradle.kts | 20 +++ .../org/enginehub/util/minecraft/RunAll.java | 0 .../minecraft/dumper/BiomeTypesDumper.java | 74 +++++++++ .../dumper/BlockCategoriesDumper.java | 8 +- .../minecraft/dumper/BlockRegistryDumper.java | 14 +- .../minecraft/dumper/BlockTypesDumper.java | 12 +- .../minecraft/dumper/DataVersionDumper.java | 4 +- .../dumper/EntityTypeCategoriesDumper.java | 4 +- .../minecraft/dumper/EntityTypesDumper.java | 8 +- .../dumper/ItemCategoriesDumper.java | 10 +- .../minecraft/dumper/ItemRegistryDumper.java | 11 +- .../minecraft/dumper/ItemTypesDumper.java | 18 +- .../util/minecraft/util/GameSetupUtils.java | 4 + .../minecraft/dumper/BiomeTypesDumper.java | 74 --------- .../util/minecraft/dumper/Dumper.java | 12 -- core/.gitignore | 42 +++++ {1.18 => core}/build.gradle.kts | 10 +- .../util/minecraft/dumper/AbstractDumper.java | 24 +++ .../util/minecraft/dumper/Dumper.java | 5 + .../minecraft/dumper/RegistryClassDumper.java | 28 +--- .../util/minecraft/dumper/RegistryDumper.java | 12 +- gradle.properties | 2 +- output/.gitignore | 2 - settings.gradle.kts | 3 +- 85 files changed, 433 insertions(+), 1246 deletions(-) delete mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java delete mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java delete mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java delete mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java delete mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java delete mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java delete mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java delete mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java delete mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java delete mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java delete mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java delete mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java rename {1.18 => 1.18.2}/.gitignore (100%) create mode 100644 1.18.2/build.gradle.kts rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/RunAll.java (100%) create mode 100644 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java (81%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java (93%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java (74%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java (98%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java (86%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java (78%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java (76%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java (78%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java (65%) rename {1.18 => 1.18.2}/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java (93%) delete mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java delete mode 100644 1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java create mode 100644 core/.gitignore rename {1.18 => core}/build.gradle.kts (62%) create mode 100644 core/src/main/java/org/enginehub/util/minecraft/dumper/AbstractDumper.java create mode 100644 core/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java rename {1.18 => core}/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java (81%) rename {1.18 => core}/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java (75%) delete mode 100644 output/.gitignore diff --git a/1.14.4/build.gradle.kts b/1.14.4/build.gradle.kts index be3c053..0d368f8 100644 --- a/1.14.4/build.gradle.kts +++ b/1.14.4/build.gradle.kts @@ -1,12 +1,13 @@ plugins { java - id("fabric-loom") version "0.10-SNAPSHOT" + id("fabric-loom") version "0.13.9" } group = "org.enginehub" version = "1.0.0-SNAPSHOT" dependencies { + implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.14.4") mappings("net.fabricmc:yarn:1.14.4+build.9:v2") modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 8631893..fa27d89 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -22,7 +22,7 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BIOME.getIds(); + protected Collection getIds() { + return Registry.BIOME.getIds().stream().map(Identifier::getPath).toList(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index d8ee332..2b4ea4c 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -3,7 +3,6 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; import net.minecraft.tag.BlockTags; -import net.minecraft.tag.RegistryTagManager; import net.minecraft.util.Identifier; import java.util.Collection; @@ -24,7 +23,7 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { - return BlockTags.getContainer().getKeys(); + protected Collection getIds() { + return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index abeed41..64f7516 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -21,10 +21,7 @@ import java.io.File; import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -50,8 +47,8 @@ public void registerAdapters(GsonBuilder builder) { } @Override - public Registry getRegistry() { - return Registry.BLOCK; + public Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -60,9 +57,10 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Block block) { + public List> getProperties(String resourceLocation) { + Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("localizedName", Language.getInstance().translate(block.getTranslationKey())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index e62497d..9ceddf4 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -23,15 +23,15 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds(); + protected Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("sign"), - new Identifier("wall_sign") + "sign", + "wall_sign" ); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 9f7ba39..1d42b77 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -20,7 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; -public class DataVersionDumper implements Dumper { +public class DataVersionDumper extends AbstractDumper { public static void main(String[] args) { setupGame(); diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java deleted file mode 100644 index edb9590..0000000 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import net.minecraft.SharedConstants; - -import java.io.File; - -public interface Dumper { - - File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); - - void run(); -} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 1f3e596..421c667 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -23,7 +23,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return EntityTypeTags.getContainer().getKeys(); + protected Collection getIds() { + return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 32d8f3f..cf65c03 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -22,7 +22,7 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds(); + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 5192b62..01f3513 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -22,7 +22,7 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return ItemTags.getContainer().getKeys(); + protected Collection getIds() { + return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 2540155..2c7c07b 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -30,8 +30,8 @@ public ItemRegistryDumper(File file) { } @Override - public Registry getRegistry() { - return Registry.ITEM; + public Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -40,15 +40,16 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Item item) { + public List> getProperties(String resourceLocation) { + Item item = Registry.ITEM.get(new Identifier(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; } - private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("unlocalizedName", item.getTranslationKey(item.getStackForRender())); map.put("localizedName", item.getName(item.getStackForRender()).getString()); map.put("maxDamage", item.getMaxDamage()); diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 5239c73..a21e38f 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -23,17 +23,17 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds(); + protected Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("cactus_green"), - new Identifier("dandelion_yellow"), - new Identifier("rose_red"), - new Identifier("sign") + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign" ); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java deleted file mode 100644 index eaac883..0000000 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.io.MoreFiles; -import com.squareup.javapoet.*; -import net.minecraft.util.Identifier; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; -import java.util.Set; -import java.util.function.UnaryOperator; -import java.util.regex.Pattern; - -import static javax.lang.model.element.Modifier.*; - -public abstract class RegistryClassDumper implements Dumper { - - private static final ClassName JAVAX_NULLABLE = - ClassName.get("javax.annotation", "Nullable"); - private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); - private static final String FOUR_SPACES = Strings.repeat(" ", 4); - - static { - if (!Files.exists(OUTPUT_DIRECTORY)) { - try { - Files.createDirectory(OUTPUT_DIRECTORY); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - private static UnaryOperator inlineAnnotation(String name) { - Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); - return content -> pattern.matcher(content).replaceAll("@" + name + " "); - } - - private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); - private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); - - /** - * Handles simple pluralization rules. - */ - private static String makePlural(String name) { - if (name.endsWith("y")) { - return name.substring(0, name.length() - 1) + "ies"; - } - return name + "s"; - } - - private final ClassName type; - private final boolean nullable; - - protected RegistryClassDumper(ClassName type, boolean nullable) { - this.type = type; - this.nullable = nullable; - } - - protected abstract Collection getIds(); - - protected Collection getDeprecatedIds() { - return Collections.emptySet(); - } - - @Override - public void run() { - Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); - Set resources = ImmutableSortedSet - .naturalOrder() - .addAll(getIds()) - .addAll(deprecatedIds) - .build(); - ClassName pluralType = type.peerClass(makePlural(type.simpleName())); - TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); - builder.addModifiers(PUBLIC, FINAL); - builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class) - .addMember("value", "$S", "unused") - .build()); - builder.addJavadoc( - "Stores a list of common {@link $1T $2N}.\n\n@see $1T", - type, pluralType.simpleName() - ); - builder.addMethod(MethodSpec.constructorBuilder() - .addModifiers(PRIVATE) - .build()); - builder.addMethod(createGetMethod()); - for (Identifier resourceLocation : resources) { - String name = resourceLocation.getPath().toUpperCase(); - FieldSpec.Builder fieldBuilder = FieldSpec.builder( - type, - name, - PUBLIC, STATIC, FINAL - ); - if (deprecatedIds.contains(resourceLocation)) { - fieldBuilder.addAnnotation(Deprecated.class); - } - if (nullable) { - fieldBuilder.addAnnotation(JAVAX_NULLABLE); - } - fieldBuilder.initializer("get($S)", resourceLocation); - builder.addField(fieldBuilder.build()); - } - TypeSpec spec = builder.build(); - JavaFile javaFile = JavaFile.builder(type.packageName(), spec) - .indent(FOUR_SPACES) - .skipJavaLangImports(true) - .build(); - - try { - Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); - String content = fixContent(javaFile.toString()); - MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - private MethodSpec createGetMethod() { - MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); - builder - .addJavadoc("Gets the {@link $T} associated with the given id.", type) - .addModifiers(PUBLIC, STATIC) - .addParameter(String.class, "id"); - if (nullable) { - builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())) - .addStatement("return $T.REGISTRY.get(id)", type); - } else { - builder.returns(type) - .addCode(CodeBlock.builder() - .addStatement("$1T entry = $1T.REGISTRY.get(id)", type) - .beginControlFlow("if (entry == null)") - .addStatement("return new $T(id)", type) - .endControlFlow() - .addStatement("return entry") - .build()); - } - return builder.build(); - } - - private String fixContent(String content) { - if (nullable) { - content = INLINE_NULLABLE.apply(content); - } - content = INLINE_DEPRECATED.apply(content); - content = content.replace(");\n\n", ");\n") - .replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); - return content; - } - -} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java deleted file mode 100644 index 2f919f9..0000000 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.collect.ImmutableList; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -abstract class RegistryDumper implements Dumper { - - private final File file; - private final Gson gson; - - protected RegistryDumper(File file) { - this.file = file; - GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); - registerAdapters(builder); - gson = builder.create(); - } - - public void registerAdapters(GsonBuilder builder) { - - } - - @Override - public void run() { - Registry registry = getRegistry(); - ImmutableList> list = ImmutableList.sortedCopyOf( - getComparator(), - getRegistry().getIds().stream() - .flatMap(v -> getProperties(v, registry.get(v)).stream()) - .collect(Collectors.toList()) - ); - - String out = gson.toJson(list); - write(out); - System.out.println("Wrote file: " + file.getAbsolutePath()); - } - - private void write(String s) { - try (FileOutputStream str = new FileOutputStream(file)) { - str.write(s.getBytes()); - } catch (IOException e) { - System.err.println("Error writing registry dump: "); - e.printStackTrace(); - } - } - - protected String rgb(int i) { - int r = i >> 16 & 0xFF; - int g = i >> 8 & 0xFF; - int b = i & 0xFF; - return String.format("#%02x%02x%02x", r, g, b); - } - - public abstract List> getProperties(Identifier resourceLocation, V object); - - public abstract Registry getRegistry(); - - public abstract Comparator> getComparator(); -} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 9c393b4..79c28ab 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -2,11 +2,16 @@ import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; +import org.enginehub.util.minecraft.dumper.AbstractDumper; + +import java.io.File; public final class GameSetupUtils { public static void setupGame() { SharedConstants.getGameVersion(); Bootstrap.initialize(); + + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); } } diff --git a/1.15.2/build.gradle.kts b/1.15.2/build.gradle.kts index db25b56..e055b50 100644 --- a/1.15.2/build.gradle.kts +++ b/1.15.2/build.gradle.kts @@ -1,12 +1,13 @@ plugins { java - id("fabric-loom") version "0.10-SNAPSHOT" + id("fabric-loom") version "0.13.9" } group = "org.enginehub" version = "1.0.0-SNAPSHOT" dependencies { + implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.15.2") mappings("net.fabricmc:yarn:1.15.2+build.9:v2") modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 8631893..fa27d89 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -22,7 +22,7 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BIOME.getIds(); + protected Collection getIds() { + return Registry.BIOME.getIds().stream().map(Identifier::getPath).toList(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 3a380b9..9949469 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -4,7 +4,6 @@ import com.google.common.collect.ImmutableSet; import com.squareup.javapoet.ClassName; import net.minecraft.tag.BlockTags; -import net.minecraft.tag.RegistryTagManager; import net.minecraft.util.Identifier; import java.util.Collection; @@ -24,14 +23,14 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { - return BlockTags.getContainer().getKeys(); + protected Collection getIds() { + return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("dirt_like") + "dirt_like" ); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 73e9842..56048b4 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -21,10 +21,7 @@ import java.io.File; import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -50,8 +47,8 @@ public void registerAdapters(GsonBuilder builder) { } @Override - public Registry getRegistry() { - return Registry.BLOCK; + public Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -60,9 +57,10 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Block block) { + public List> getProperties(String resourceLocation) { + Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("localizedName", Language.getInstance().translate(block.getTranslationKey())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index e62497d..9ceddf4 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -23,15 +23,15 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds(); + protected Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("sign"), - new Identifier("wall_sign") + "sign", + "wall_sign" ); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index d7d2492..d4334c8 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -21,7 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; -public class DataVersionDumper implements Dumper { +public class DataVersionDumper extends AbstractDumper { public static void main(String[] args) { setupGame(); diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java deleted file mode 100644 index edb9590..0000000 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import net.minecraft.SharedConstants; - -import java.io.File; - -public interface Dumper { - - File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); - - void run(); -} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 6da0827..421c667 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -3,7 +3,6 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; import net.minecraft.tag.EntityTypeTags; -import net.minecraft.tag.RegistryTagManager; import net.minecraft.util.Identifier; import java.util.Collection; @@ -24,7 +23,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return EntityTypeTags.getContainer().getKeys(); + protected Collection getIds() { + return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 32d8f3f..cf65c03 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -22,7 +22,7 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds(); + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 5192b62..01f3513 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -22,7 +22,7 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return ItemTags.getContainer().getKeys(); + protected Collection getIds() { + return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 2540155..2c7c07b 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -30,8 +30,8 @@ public ItemRegistryDumper(File file) { } @Override - public Registry getRegistry() { - return Registry.ITEM; + public Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -40,15 +40,16 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Item item) { + public List> getProperties(String resourceLocation) { + Item item = Registry.ITEM.get(new Identifier(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; } - private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("unlocalizedName", item.getTranslationKey(item.getStackForRender())); map.put("localizedName", item.getName(item.getStackForRender()).getString()); map.put("maxDamage", item.getMaxDamage()); diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 5239c73..a21e38f 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -23,17 +23,17 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds(); + protected Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("cactus_green"), - new Identifier("dandelion_yellow"), - new Identifier("rose_red"), - new Identifier("sign") + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign" ); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java deleted file mode 100644 index eaac883..0000000 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.io.MoreFiles; -import com.squareup.javapoet.*; -import net.minecraft.util.Identifier; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; -import java.util.Set; -import java.util.function.UnaryOperator; -import java.util.regex.Pattern; - -import static javax.lang.model.element.Modifier.*; - -public abstract class RegistryClassDumper implements Dumper { - - private static final ClassName JAVAX_NULLABLE = - ClassName.get("javax.annotation", "Nullable"); - private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); - private static final String FOUR_SPACES = Strings.repeat(" ", 4); - - static { - if (!Files.exists(OUTPUT_DIRECTORY)) { - try { - Files.createDirectory(OUTPUT_DIRECTORY); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - private static UnaryOperator inlineAnnotation(String name) { - Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); - return content -> pattern.matcher(content).replaceAll("@" + name + " "); - } - - private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); - private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); - - /** - * Handles simple pluralization rules. - */ - private static String makePlural(String name) { - if (name.endsWith("y")) { - return name.substring(0, name.length() - 1) + "ies"; - } - return name + "s"; - } - - private final ClassName type; - private final boolean nullable; - - protected RegistryClassDumper(ClassName type, boolean nullable) { - this.type = type; - this.nullable = nullable; - } - - protected abstract Collection getIds(); - - protected Collection getDeprecatedIds() { - return Collections.emptySet(); - } - - @Override - public void run() { - Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); - Set resources = ImmutableSortedSet - .naturalOrder() - .addAll(getIds()) - .addAll(deprecatedIds) - .build(); - ClassName pluralType = type.peerClass(makePlural(type.simpleName())); - TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); - builder.addModifiers(PUBLIC, FINAL); - builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class) - .addMember("value", "$S", "unused") - .build()); - builder.addJavadoc( - "Stores a list of common {@link $1T $2N}.\n\n@see $1T", - type, pluralType.simpleName() - ); - builder.addMethod(MethodSpec.constructorBuilder() - .addModifiers(PRIVATE) - .build()); - builder.addMethod(createGetMethod()); - for (Identifier resourceLocation : resources) { - String name = resourceLocation.getPath().toUpperCase(); - FieldSpec.Builder fieldBuilder = FieldSpec.builder( - type, - name, - PUBLIC, STATIC, FINAL - ); - if (deprecatedIds.contains(resourceLocation)) { - fieldBuilder.addAnnotation(Deprecated.class); - } - if (nullable) { - fieldBuilder.addAnnotation(JAVAX_NULLABLE); - } - fieldBuilder.initializer("get($S)", resourceLocation); - builder.addField(fieldBuilder.build()); - } - TypeSpec spec = builder.build(); - JavaFile javaFile = JavaFile.builder(type.packageName(), spec) - .indent(FOUR_SPACES) - .skipJavaLangImports(true) - .build(); - - try { - Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); - String content = fixContent(javaFile.toString()); - MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - private MethodSpec createGetMethod() { - MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); - builder - .addJavadoc("Gets the {@link $T} associated with the given id.", type) - .addModifiers(PUBLIC, STATIC) - .addParameter(String.class, "id"); - if (nullable) { - builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())) - .addStatement("return $T.REGISTRY.get(id)", type); - } else { - builder.returns(type) - .addCode(CodeBlock.builder() - .addStatement("$1T entry = $1T.REGISTRY.get(id)", type) - .beginControlFlow("if (entry == null)") - .addStatement("return new $T(id)", type) - .endControlFlow() - .addStatement("return entry") - .build()); - } - return builder.build(); - } - - private String fixContent(String content) { - if (nullable) { - content = INLINE_NULLABLE.apply(content); - } - content = INLINE_DEPRECATED.apply(content); - content = content.replace(");\n\n", ");\n") - .replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); - return content; - } - -} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java deleted file mode 100644 index 2f919f9..0000000 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.collect.ImmutableList; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -abstract class RegistryDumper implements Dumper { - - private final File file; - private final Gson gson; - - protected RegistryDumper(File file) { - this.file = file; - GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); - registerAdapters(builder); - gson = builder.create(); - } - - public void registerAdapters(GsonBuilder builder) { - - } - - @Override - public void run() { - Registry registry = getRegistry(); - ImmutableList> list = ImmutableList.sortedCopyOf( - getComparator(), - getRegistry().getIds().stream() - .flatMap(v -> getProperties(v, registry.get(v)).stream()) - .collect(Collectors.toList()) - ); - - String out = gson.toJson(list); - write(out); - System.out.println("Wrote file: " + file.getAbsolutePath()); - } - - private void write(String s) { - try (FileOutputStream str = new FileOutputStream(file)) { - str.write(s.getBytes()); - } catch (IOException e) { - System.err.println("Error writing registry dump: "); - e.printStackTrace(); - } - } - - protected String rgb(int i) { - int r = i >> 16 & 0xFF; - int g = i >> 8 & 0xFF; - int b = i & 0xFF; - return String.format("#%02x%02x%02x", r, g, b); - } - - public abstract List> getProperties(Identifier resourceLocation, V object); - - public abstract Registry getRegistry(); - - public abstract Comparator> getComparator(); -} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 9c393b4..79c28ab 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -2,11 +2,16 @@ import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; +import org.enginehub.util.minecraft.dumper.AbstractDumper; + +import java.io.File; public final class GameSetupUtils { public static void setupGame() { SharedConstants.getGameVersion(); Bootstrap.initialize(); + + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); } } diff --git a/1.16.5/build.gradle.kts b/1.16.5/build.gradle.kts index 74caac6..c5879f0 100644 --- a/1.16.5/build.gradle.kts +++ b/1.16.5/build.gradle.kts @@ -1,12 +1,13 @@ plugins { java - id("fabric-loom") version "0.10-SNAPSHOT" + id("fabric-loom") version "0.13.9" } group = "org.enginehub" version = "1.0.0-SNAPSHOT" dependencies { + implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.16.5") mappings("net.fabricmc:yarn:1.16.5+build.2:v2") modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index a9997db..a132fe6 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -24,12 +24,14 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds(); + protected Collection getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("nether")); + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + "nether" + ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 1eb5581..2914d83 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -23,14 +23,14 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getBlocks().getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getBlocks().getTagIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("dirt_like") + "dirt_like" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 8ccdebb..0f0b6f7 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -24,10 +24,7 @@ import java.io.File; import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -59,8 +56,8 @@ public void registerAdapters(GsonBuilder builder) { } @Override - public Registry getRegistry() { - return Registry.BLOCK; + public Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -69,9 +66,10 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Block block) { + public List> getProperties(String resourceLocation) { + Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index f1bce98..67d313c 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -23,15 +23,15 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds(); + protected Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("sign"), - new Identifier("wall_sign") + "sign", + "wall_sign" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index faafddb..e4e289f 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -21,7 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.enginehub.util.minecraft.util.GameSetupUtils.*; -public class DataVersionDumper implements Dumper { +public class DataVersionDumper extends AbstractDumper { public static void main(String[] args) { setupGame(); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java deleted file mode 100644 index edb9590..0000000 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import net.minecraft.SharedConstants; - -import java.io.File; - -public interface Dumper { - - File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); - - void run(); -} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 454dba1..5d8511d 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -23,7 +23,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getEntityTypes().getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getEntityTypes().getTagIds().stream().map(Identifier::getPath).toList(); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 108a100..ce620f4 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -23,14 +23,14 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds(); + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("zombie_pigman") + "zombie_pigman" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 236294b..c9f03ef 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -23,12 +23,14 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getItems().getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getItems().getTagIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("furnace_materials")); + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + "furnace_materials" + ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 75edbac..4607ce2 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -30,8 +30,8 @@ public ItemRegistryDumper(File file) { } @Override - public Registry getRegistry() { - return Registry.ITEM; + public Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -40,15 +40,16 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Item item) { + public List> getProperties(String resourceLocation) { + Item item = Registry.ITEM.get(new Identifier(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; } - private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); map.put("localizedName", item.getName(item.getDefaultStack()).getString()); map.put("maxDamage", item.getMaxDamage()); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index d1b5657..883cfd9 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -23,18 +23,18 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds(); + protected Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("cactus_green"), - new Identifier("dandelion_yellow"), - new Identifier("rose_red"), - new Identifier("sign"), - new Identifier("zombie_pigman_spawn_egg") + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java deleted file mode 100644 index eaac883..0000000 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.io.MoreFiles; -import com.squareup.javapoet.*; -import net.minecraft.util.Identifier; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; -import java.util.Set; -import java.util.function.UnaryOperator; -import java.util.regex.Pattern; - -import static javax.lang.model.element.Modifier.*; - -public abstract class RegistryClassDumper implements Dumper { - - private static final ClassName JAVAX_NULLABLE = - ClassName.get("javax.annotation", "Nullable"); - private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); - private static final String FOUR_SPACES = Strings.repeat(" ", 4); - - static { - if (!Files.exists(OUTPUT_DIRECTORY)) { - try { - Files.createDirectory(OUTPUT_DIRECTORY); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - private static UnaryOperator inlineAnnotation(String name) { - Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); - return content -> pattern.matcher(content).replaceAll("@" + name + " "); - } - - private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); - private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); - - /** - * Handles simple pluralization rules. - */ - private static String makePlural(String name) { - if (name.endsWith("y")) { - return name.substring(0, name.length() - 1) + "ies"; - } - return name + "s"; - } - - private final ClassName type; - private final boolean nullable; - - protected RegistryClassDumper(ClassName type, boolean nullable) { - this.type = type; - this.nullable = nullable; - } - - protected abstract Collection getIds(); - - protected Collection getDeprecatedIds() { - return Collections.emptySet(); - } - - @Override - public void run() { - Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); - Set resources = ImmutableSortedSet - .naturalOrder() - .addAll(getIds()) - .addAll(deprecatedIds) - .build(); - ClassName pluralType = type.peerClass(makePlural(type.simpleName())); - TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); - builder.addModifiers(PUBLIC, FINAL); - builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class) - .addMember("value", "$S", "unused") - .build()); - builder.addJavadoc( - "Stores a list of common {@link $1T $2N}.\n\n@see $1T", - type, pluralType.simpleName() - ); - builder.addMethod(MethodSpec.constructorBuilder() - .addModifiers(PRIVATE) - .build()); - builder.addMethod(createGetMethod()); - for (Identifier resourceLocation : resources) { - String name = resourceLocation.getPath().toUpperCase(); - FieldSpec.Builder fieldBuilder = FieldSpec.builder( - type, - name, - PUBLIC, STATIC, FINAL - ); - if (deprecatedIds.contains(resourceLocation)) { - fieldBuilder.addAnnotation(Deprecated.class); - } - if (nullable) { - fieldBuilder.addAnnotation(JAVAX_NULLABLE); - } - fieldBuilder.initializer("get($S)", resourceLocation); - builder.addField(fieldBuilder.build()); - } - TypeSpec spec = builder.build(); - JavaFile javaFile = JavaFile.builder(type.packageName(), spec) - .indent(FOUR_SPACES) - .skipJavaLangImports(true) - .build(); - - try { - Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); - String content = fixContent(javaFile.toString()); - MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - private MethodSpec createGetMethod() { - MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); - builder - .addJavadoc("Gets the {@link $T} associated with the given id.", type) - .addModifiers(PUBLIC, STATIC) - .addParameter(String.class, "id"); - if (nullable) { - builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())) - .addStatement("return $T.REGISTRY.get(id)", type); - } else { - builder.returns(type) - .addCode(CodeBlock.builder() - .addStatement("$1T entry = $1T.REGISTRY.get(id)", type) - .beginControlFlow("if (entry == null)") - .addStatement("return new $T(id)", type) - .endControlFlow() - .addStatement("return entry") - .build()); - } - return builder.build(); - } - - private String fixContent(String content) { - if (nullable) { - content = INLINE_NULLABLE.apply(content); - } - content = INLINE_DEPRECATED.apply(content); - content = content.replace(");\n\n", ");\n") - .replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); - return content; - } - -} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java deleted file mode 100644 index 4ece9f2..0000000 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.collect.ImmutableList; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -abstract class RegistryDumper implements Dumper { - - private final File file; - private final Gson gson; - - protected RegistryDumper(File file) { - this.file = file; - GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); - registerAdapters(builder); - gson = builder.create(); - } - - public void registerAdapters(GsonBuilder builder) { - - } - - @Override - public void run() { - Registry registry = getRegistry(); - ImmutableList> list = ImmutableList.sortedCopyOf( - getComparator(), - getRegistry().getIds().stream() - .flatMap(v -> getProperties(v, registry.get(v)).stream()) - .collect(Collectors.toList()) - ); - - String out = gson.toJson(list); - write(out); - System.out.println("Wrote file: " + file.getAbsolutePath()); - } - - private void write(String s) { - try (FileOutputStream str = new FileOutputStream(file)) { - str.write(s.getBytes()); - } catch (IOException e) { - System.err.println("Error writing registry dump: "); - e.printStackTrace(); - } - } - - protected String rgb(int i) { - int r = i >> 16 & 0xFF; - int g = i >> 8 & 0xFF; - int b = i & 0xFF; - return String.format("#%02x%02x%02x", r, g, b); - } - - public abstract List> getProperties(Identifier resourceLocation, V object); - - public abstract Registry getRegistry(); - - public abstract Comparator> getComparator(); -} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 46ea4fc..7658895 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -2,11 +2,14 @@ import com.google.common.util.concurrent.Futures; import net.minecraft.Bootstrap; +import net.minecraft.SharedConstants; import net.minecraft.resource.*; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.util.registry.DynamicRegistryManager; +import org.enginehub.util.minecraft.dumper.AbstractDumper; +import java.io.File; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.locks.Lock; @@ -15,7 +18,10 @@ public final class GameSetupUtils { public static void setupGame() { + SharedConstants.getGameVersion(); Bootstrap.initialize(); + + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); } private static final Lock lock = new ReentrantLock(); diff --git a/1.17.1/build.gradle.kts b/1.17.1/build.gradle.kts index c045081..614a35e 100644 --- a/1.17.1/build.gradle.kts +++ b/1.17.1/build.gradle.kts @@ -1,12 +1,13 @@ plugins { java - id("fabric-loom") version "0.10-SNAPSHOT" + id("fabric-loom") version "0.13.9" } group = "org.enginehub" version = "1.0.0-SNAPSHOT" dependencies { + implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.17.1") mappings("net.fabricmc:yarn:1.17.1+build.2:v2") modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 470e2b0..c04959f 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -24,14 +24,14 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds(); + protected Collection getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("nether") + "nether" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index e17dea6..4140357 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -24,16 +24,16 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { + protected Collection getIds() { return getServerResources().getRegistryTagManager().getOrCreateTagGroup( Registry.BLOCK_KEY - ).getTagIds(); + ).getTagIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("dirt_like") + "dirt_like" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 2985b40..1a26eae 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -24,10 +24,7 @@ import java.io.File; import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -53,8 +50,8 @@ public void registerAdapters(GsonBuilder builder) { } @Override - public Registry getRegistry() { - return Registry.BLOCK; + public Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -63,9 +60,10 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Block block) { + public List> getProperties(String resourceLocation) { + Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index d82f3a1..6dcbddc 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -23,16 +23,16 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds(); + protected Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("sign"), - new Identifier("wall_sign"), - new Identifier("grass_path") + "sign", + "wall_sign", + "grass_path" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index e812578..0f592d1 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -21,7 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.enginehub.util.minecraft.util.GameSetupUtils.*; -public class DataVersionDumper implements Dumper { +public class DataVersionDumper extends AbstractDumper { public static void main(String[] args) { setupGame(); diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java deleted file mode 100644 index edb9590..0000000 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import net.minecraft.SharedConstants; - -import java.io.File; - -public interface Dumper { - - File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); - - void run(); -} diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 7b3336e..b6ed5f7 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -24,7 +24,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).toList(); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 108a100..ce620f4 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -23,14 +23,14 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds(); + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("zombie_pigman") + "zombie_pigman" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 7b751dc..7da6645 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -24,12 +24,14 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("furnace_materials")); + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + "furnace_materials" + ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 75edbac..4607ce2 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -30,8 +30,8 @@ public ItemRegistryDumper(File file) { } @Override - public Registry getRegistry() { - return Registry.ITEM; + public Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -40,15 +40,16 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Item item) { + public List> getProperties(String resourceLocation) { + Item item = Registry.ITEM.get(new Identifier(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; } - private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); map.put("localizedName", item.getName(item.getDefaultStack()).getString()); map.put("maxDamage", item.getMaxDamage()); diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 089eea3..167571a 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -23,19 +23,19 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds(); + protected Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("cactus_green"), - new Identifier("dandelion_yellow"), - new Identifier("rose_red"), - new Identifier("sign"), - new Identifier("zombie_pigman_spawn_egg"), - new Identifier("grass_path") + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg", + "grass_path" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java deleted file mode 100644 index c14558a..0000000 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ /dev/null @@ -1,124 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.io.MoreFiles; -import com.squareup.javapoet.*; -import net.minecraft.util.Identifier; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; -import java.util.Set; -import java.util.function.UnaryOperator; -import java.util.regex.Pattern; - -import static javax.lang.model.element.Modifier.*; - -public abstract class RegistryClassDumper implements Dumper { - - private static final ClassName JAVAX_NULLABLE = ClassName.get("javax.annotation", "Nullable"); - private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); - private static final String FOUR_SPACES = Strings.repeat(" ", 4); - - static { - if (!Files.exists(OUTPUT_DIRECTORY)) { - try { - Files.createDirectory(OUTPUT_DIRECTORY); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - private static UnaryOperator inlineAnnotation(String name) { - Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); - return content -> pattern.matcher(content).replaceAll("@" + name + " "); - } - - private static final UnaryOperator INLINE_NULLABLE = inlineAnnotation("Nullable"); - private static final UnaryOperator INLINE_DEPRECATED = inlineAnnotation("Deprecated"); - - /** - * Handles simple pluralization rules. - */ - private static String makePlural(String name) { - if (name.endsWith("y")) { - return name.substring(0, name.length() - 1) + "ies"; - } - return name + "s"; - } - - private final ClassName type; - private final boolean nullable; - - protected RegistryClassDumper(ClassName type, boolean nullable) { - this.type = type; - this.nullable = nullable; - } - - protected abstract Collection getIds(); - - protected Collection getDeprecatedIds() { - return Collections.emptySet(); - } - - @Override - public void run() { - Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); - Set resources = ImmutableSortedSet.naturalOrder().addAll(getIds()).addAll(deprecatedIds).build(); - ClassName pluralType = type.peerClass(makePlural(type.simpleName())); - TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); - builder.addModifiers(PUBLIC, FINAL); - builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "$S", "unused").build()); - builder.addJavadoc("Stores a list of common {@link $1T $2N}.\n\n@see $1T", type, pluralType.simpleName()); - builder.addMethod(MethodSpec.constructorBuilder().addModifiers(PRIVATE).build()); - builder.addMethod(createGetMethod()); - for (Identifier resourceLocation : resources) { - String name = resourceLocation.getPath().toUpperCase().replace('/', '_'); - FieldSpec.Builder fieldBuilder = FieldSpec.builder(type, name, PUBLIC, STATIC, FINAL); - if (deprecatedIds.contains(resourceLocation)) { - fieldBuilder.addAnnotation(Deprecated.class); - } - if (nullable) { - fieldBuilder.addAnnotation(JAVAX_NULLABLE); - } - fieldBuilder.initializer("get($S)", resourceLocation); - builder.addField(fieldBuilder.build()); - } - TypeSpec spec = builder.build(); - JavaFile javaFile = JavaFile.builder(type.packageName(), spec).indent(FOUR_SPACES).skipJavaLangImports(true).build(); - - try { - Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); - String content = fixContent(javaFile.toString()); - MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - private MethodSpec createGetMethod() { - MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); - builder.addJavadoc("Gets the {@link $T} associated with the given id.", type).addModifiers(PUBLIC, STATIC).addParameter(String.class, "id"); - if (nullable) { - builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())).addStatement("return $T.REGISTRY.get(id)", type); - } else { - builder.returns(type).addCode(CodeBlock.builder().addStatement("$1T entry = $1T.REGISTRY.get(id)", type).beginControlFlow("if (entry == null)").addStatement("return new $T(id)", type).endControlFlow().addStatement("return entry").build()); - } - return builder.build(); - } - - private String fixContent(String content) { - if (nullable) { - content = INLINE_NULLABLE.apply(content); - } - content = INLINE_DEPRECATED.apply(content); - content = content.replace(");\n\n", ");\n").replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); - return content; - } - -} diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java deleted file mode 100644 index 7c7240e..0000000 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.common.collect.ImmutableList; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -abstract class RegistryDumper implements Dumper { - - private final File file; - private final Gson gson; - - protected RegistryDumper(File file) { - this.file = file; - GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); - registerAdapters(builder); - gson = builder.create(); - } - - public void registerAdapters(GsonBuilder builder) { - - } - - @Override - public void run() { - Registry registry = getRegistry(); - ImmutableList> list = ImmutableList.sortedCopyOf(getComparator(), getRegistry().getIds().stream().flatMap(v -> getProperties(v, registry.get(v)).stream()).collect(Collectors.toList())); - - String out = gson.toJson(list); - write(out); - System.out.println("Wrote file: " + file.getAbsolutePath()); - } - - private void write(String s) { - try (FileOutputStream str = new FileOutputStream(file)) { - str.write(s.getBytes()); - } catch (IOException e) { - System.err.println("Error writing registry dump: "); - e.printStackTrace(); - } - } - - protected String rgb(int i) { - int r = i >> 16 & 0xFF; - int g = i >> 8 & 0xFF; - int b = i & 0xFF; - return String.format("#%02x%02x%02x", r, g, b); - } - - public abstract List> getProperties(Identifier resourceLocation, V object); - - public abstract Registry getRegistry(); - - public abstract Comparator> getComparator(); -} diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 833614c..04742d3 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -6,8 +6,11 @@ import net.minecraft.resource.*; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; +import net.minecraft.util.Identifier; import net.minecraft.util.registry.DynamicRegistryManager; +import org.enginehub.util.minecraft.dumper.AbstractDumper; +import java.io.File; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.locks.Lock; @@ -18,6 +21,8 @@ public final class GameSetupUtils { public static void setupGame() { SharedConstants.createGameVersion(); Bootstrap.initialize(); + + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); } private static final Lock lock = new ReentrantLock(); diff --git a/1.18/.gitignore b/1.18.2/.gitignore similarity index 100% rename from 1.18/.gitignore rename to 1.18.2/.gitignore diff --git a/1.18.2/build.gradle.kts b/1.18.2/build.gradle.kts new file mode 100644 index 0000000..10fe4c5 --- /dev/null +++ b/1.18.2/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + java + id("fabric-loom") version "0.13.9" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + implementation(project(mapOf("path" to ":core"))) + // TODO Switch to 1.18.2 +// minecraft("com.mojang:minecraft:1.18.2") +// mappings("net.fabricmc:yarn:1.18.2+build.4:v2") + minecraft("com.mojang:minecraft:1.18.1") + mappings("net.fabricmc:yarn:1.18.1+build.22:v2") + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/RunAll.java similarity index 100% rename from 1.18/src/main/java/org/enginehub/util/minecraft/RunAll.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/RunAll.java diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java new file mode 100644 index 0000000..4264506 --- /dev/null +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -0,0 +1,74 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Collection; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + } + + @Override + protected Collection getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).toList(); + } + + @Override + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + "nether", + "tall_birch_forest", + "giant_tree_taiga", + "giant_spruce_taiga", + "snowy_tundra", + "jungle_edge", + "stone_shore", + "mountains", + "wooded_mountains", + "gravelly_mountains", + "shattered_savanna", + "wooded_badlands_plateau", + "badlands_plateau", + "bamboo_jungle_hills", + "birch_forest_hills", + "dark_forest_hills", + "deep_warm_ocean", + "desert_hills", + "desert_lakes", + "giant_spruce_taiga_hills", + "giant_tree_taiga_hills", + "modified_gravelly_hills", + "jungle_hills", + "modified_badlands_plateau", + "modified_jungle", + "modified_jungle_edge", + "modified_wooded_badlands_plateau", + "mountain_edge", + "mushroom_field_shore", + "shattered_savanna_plateau", + "snowy_mountains", + "snowy_taiga_hills", + "snowy_taiga_mountains", + "swamp_hills", + "taiga_hills", + "taiga_mountains", + "tall_birch_hills", + "wooded_hills" + ); + } +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java similarity index 81% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 0a4199c..d012656 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -24,14 +24,14 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.BLOCK_KEY).getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.BLOCK_KEY).getTagIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("dirt_like") + "dirt_like" ); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java similarity index 93% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index d7fe5e5..d1dd22c 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -24,10 +24,7 @@ import java.io.File; import java.io.IOException; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -53,8 +50,8 @@ public void registerAdapters(GsonBuilder builder) { } @Override - public Registry getRegistry() { - return Registry.BLOCK; + public Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -63,9 +60,10 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Block block) { + public List> getProperties(String resourceLocation) { + Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java similarity index 74% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index d82f3a1..6dcbddc 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -23,16 +23,16 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds(); + protected Collection getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("sign"), - new Identifier("wall_sign"), - new Identifier("grass_path") + "sign", + "wall_sign", + "grass_path" ); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java similarity index 98% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index e812578..a22b7ce 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -21,7 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.enginehub.util.minecraft.util.GameSetupUtils.*; -public class DataVersionDumper implements Dumper { +public class DataVersionDumper extends AbstractDumper { public static void main(String[] args) { setupGame(); @@ -32,7 +32,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + File file = new File(OUTPUT, SharedConstants.getGameVersion().getSaveVersion().getId() + ".json"); new DataVersionDumper(file).run(); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java similarity index 86% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 7b3336e..b6ed5f7 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -24,7 +24,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).toList(); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java similarity index 78% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 108a100..ce620f4 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -23,14 +23,14 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds(); + protected Collection getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("zombie_pigman") + "zombie_pigman" ); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java similarity index 76% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 7b751dc..7da6645 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -24,12 +24,14 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds(); + protected Collection getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of(new Identifier("furnace_materials")); + protected Collection getDeprecatedIds() { + return ImmutableSet.of( + "furnace_materials" + ); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java similarity index 78% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 75edbac..4607ce2 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -30,8 +30,8 @@ public ItemRegistryDumper(File file) { } @Override - public Registry getRegistry() { - return Registry.ITEM; + public Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); } @Override @@ -40,15 +40,16 @@ public Comparator> getComparator() { } @Override - public List> getProperties(Identifier resourceLocation, Item item) { + public List> getProperties(String resourceLocation) { + Item item = Registry.ITEM.get(new Identifier(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; } - private Map getPropertiesForItem(Identifier resourceLocation, Item item) { + private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); - map.put("id", resourceLocation.toString()); + map.put("id", resourceLocation); map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); map.put("localizedName", item.getName(item.getDefaultStack()).getString()); map.put("maxDamage", item.getMaxDamage()); diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java similarity index 65% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 089eea3..167571a 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -23,19 +23,19 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds(); + protected Collection getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); } @Override - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return ImmutableSet.of( - new Identifier("cactus_green"), - new Identifier("dandelion_yellow"), - new Identifier("rose_red"), - new Identifier("sign"), - new Identifier("zombie_pigman_spawn_egg"), - new Identifier("grass_path") + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg", + "grass_path" ); } } diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java similarity index 93% rename from 1.18/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java rename to 1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 833614c..3804991 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -7,7 +7,9 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.util.registry.DynamicRegistryManager; +import org.enginehub.util.minecraft.dumper.AbstractDumper; +import java.io.File; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.locks.Lock; @@ -18,6 +20,8 @@ public final class GameSetupUtils { public static void setupGame() { SharedConstants.createGameVersion(); Bootstrap.initialize(); + + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); } private static final Lock lock = new ReentrantLock(); diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java deleted file mode 100644 index 5512040..0000000 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; -import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.util.Collection; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); - } - - @Override - protected Collection getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds(); - } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - new Identifier("nether"), - new Identifier("tall_birch_forest"), - new Identifier("giant_tree_taiga"), - new Identifier("giant_spruce_taiga"), - new Identifier("snowy_tundra"), - new Identifier("jungle_edge"), - new Identifier("stone_shore"), - new Identifier("mountains"), - new Identifier("wooded_mountains"), - new Identifier("gravelly_mountains"), - new Identifier("shattered_savanna"), - new Identifier("wooded_badlands_plateau"), - new Identifier("badlands_plateau"), - new Identifier("bamboo_jungle_hills"), - new Identifier("birch_forest_hills"), - new Identifier("dark_forest_hills"), - new Identifier("deep_warm_ocean"), - new Identifier("desert_hills"), - new Identifier("desert_lakes"), - new Identifier("giant_spruce_taiga_hills"), - new Identifier("giant_tree_taiga_hills"), - new Identifier("modified_gravelly_hills"), - new Identifier("jungle_hills"), - new Identifier("modified_badlands_plateau"), - new Identifier("modified_jungle"), - new Identifier("modified_jungle_edge"), - new Identifier("modified_wooded_badlands_plateau"), - new Identifier("mountain_edge"), - new Identifier("mushroom_field_shore"), - new Identifier("shattered_savanna_plateau"), - new Identifier("snowy_mountains"), - new Identifier("snowy_taiga_hills"), - new Identifier("snowy_taiga_mountains"), - new Identifier("swamp_hills"), - new Identifier("taiga_hills"), - new Identifier("taiga_mountains"), - new Identifier("tall_birch_hills"), - new Identifier("wooded_hills") - ); - } -} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java deleted file mode 100644 index edb9590..0000000 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import net.minecraft.SharedConstants; - -import java.io.File; - -public interface Dumper { - - File OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); - - void run(); -} diff --git a/core/.gitignore b/core/.gitignore new file mode 100644 index 0000000..b63da45 --- /dev/null +++ b/core/.gitignore @@ -0,0 +1,42 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/1.18/build.gradle.kts b/core/build.gradle.kts similarity index 62% rename from 1.18/build.gradle.kts rename to core/build.gradle.kts index 2e76542..172ad9b 100644 --- a/1.18/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,15 +1,17 @@ plugins { java - id("fabric-loom") version "0.10-SNAPSHOT" } group = "org.enginehub" version = "1.0.0-SNAPSHOT" +repositories { + mavenCentral() +} + dependencies { - minecraft("com.mojang:minecraft:1.18") - mappings("net.fabricmc:yarn:1.18+build.1:v2") - modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.google.guava:guava:31.1-jre") + implementation("com.google.code.gson:gson:2.10.1") implementation("com.squareup:javapoet:${project.property("javapoet.version")}") compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") diff --git a/core/src/main/java/org/enginehub/util/minecraft/dumper/AbstractDumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/AbstractDumper.java new file mode 100644 index 0000000..279bac6 --- /dev/null +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/AbstractDumper.java @@ -0,0 +1,24 @@ +package org.enginehub.util.minecraft.dumper; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public abstract class AbstractDumper implements Dumper { + /** + * The output directory for the files. Is set in each individual module to "output/(Minecraft version)". + */ + public static File OUTPUT = null; + + protected AbstractDumper() { + Path outputPath = OUTPUT.toPath(); + if (!Files.exists(outputPath)) { + try { + Files.createDirectories(outputPath); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/core/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java new file mode 100644 index 0000000..50a080f --- /dev/null +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/Dumper.java @@ -0,0 +1,5 @@ +package org.enginehub.util.minecraft.dumper; + +public interface Dumper { + void run(); +} diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java similarity index 81% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java rename to core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java index c14558a..6cb70e5 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -4,7 +4,6 @@ import com.google.common.collect.ImmutableSortedSet; import com.google.common.io.MoreFiles; import com.squareup.javapoet.*; -import net.minecraft.util.Identifier; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -18,22 +17,11 @@ import static javax.lang.model.element.Modifier.*; -public abstract class RegistryClassDumper implements Dumper { +public abstract class RegistryClassDumper extends AbstractDumper { private static final ClassName JAVAX_NULLABLE = ClassName.get("javax.annotation", "Nullable"); - private static final Path OUTPUT_DIRECTORY = OUTPUT.toPath(); private static final String FOUR_SPACES = Strings.repeat(" ", 4); - static { - if (!Files.exists(OUTPUT_DIRECTORY)) { - try { - Files.createDirectory(OUTPUT_DIRECTORY); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - private static UnaryOperator inlineAnnotation(String name) { Pattern pattern = Pattern.compile("@" + name + "\n" + FOUR_SPACES); return content -> pattern.matcher(content).replaceAll("@" + name + " "); @@ -60,16 +48,16 @@ protected RegistryClassDumper(ClassName type, boolean nullable) { this.nullable = nullable; } - protected abstract Collection getIds(); + protected abstract Collection getIds(); - protected Collection getDeprecatedIds() { + protected Collection getDeprecatedIds() { return Collections.emptySet(); } @Override public void run() { - Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); - Set resources = ImmutableSortedSet.naturalOrder().addAll(getIds()).addAll(deprecatedIds).build(); + Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); + Set resources = ImmutableSortedSet.naturalOrder().addAll(getIds()).addAll(deprecatedIds).build(); ClassName pluralType = type.peerClass(makePlural(type.simpleName())); TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); builder.addModifiers(PUBLIC, FINAL); @@ -77,8 +65,8 @@ public void run() { builder.addJavadoc("Stores a list of common {@link $1T $2N}.\n\n@see $1T", type, pluralType.simpleName()); builder.addMethod(MethodSpec.constructorBuilder().addModifiers(PRIVATE).build()); builder.addMethod(createGetMethod()); - for (Identifier resourceLocation : resources) { - String name = resourceLocation.getPath().toUpperCase().replace('/', '_'); + for (String resourceLocation : resources) { + String name = resourceLocation.toUpperCase().replace('/', '_'); FieldSpec.Builder fieldBuilder = FieldSpec.builder(type, name, PUBLIC, STATIC, FINAL); if (deprecatedIds.contains(resourceLocation)) { fieldBuilder.addAnnotation(Deprecated.class); @@ -93,7 +81,7 @@ public void run() { JavaFile javaFile = JavaFile.builder(type.packageName(), spec).indent(FOUR_SPACES).skipJavaLangImports(true).build(); try { - Path outputFile = OUTPUT_DIRECTORY.resolve(spec.name + ".java"); + Path outputFile = OUTPUT.toPath().resolve(spec.name + ".java"); String content = fixContent(javaFile.toString()); MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); } catch (IOException e) { diff --git a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java similarity index 75% rename from 1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java rename to core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index 7c7240e..c855ed7 100644 --- a/1.18/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -3,18 +3,17 @@ import com.google.common.collect.ImmutableList; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -abstract class RegistryDumper implements Dumper { +abstract class RegistryDumper extends AbstractDumper { private final File file; private final Gson gson; @@ -32,8 +31,7 @@ public void registerAdapters(GsonBuilder builder) { @Override public void run() { - Registry registry = getRegistry(); - ImmutableList> list = ImmutableList.sortedCopyOf(getComparator(), getRegistry().getIds().stream().flatMap(v -> getProperties(v, registry.get(v)).stream()).collect(Collectors.toList())); + ImmutableList> list = ImmutableList.sortedCopyOf(getComparator(), getIds().stream().flatMap(v -> getProperties(v).stream()).collect(Collectors.toList())); String out = gson.toJson(list); write(out); @@ -56,9 +54,9 @@ protected String rgb(int i) { return String.format("#%02x%02x%02x", r, g, b); } - public abstract List> getProperties(Identifier resourceLocation, V object); + public abstract List> getProperties(String resourceLocation); - public abstract Registry getRegistry(); + public abstract Collection getIds(); public abstract Comparator> getComparator(); } diff --git a/gradle.properties b/gradle.properties index 2893d59..3db9c45 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ version=1.0.0-SNAPSHOT org.gradle.jvmargs=-Xmx1G -fabric_loader.version=0.12.8 +fabric_loader.version=0.14.9 javapoet.version=1.13.0 autoservice.version=1.0.1 diff --git a/output/.gitignore b/output/.gitignore deleted file mode 100644 index c96a04f..0000000 --- a/output/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index b935b41..739abbd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,10 +1,11 @@ rootProject.name = "MCUtils" +include("core") include("1.14.4") include("1.15.2") include("1.16.5") include("1.17.1") -include("1.18") +include("1.18.2") pluginManagement { repositories { From 9d866ad432bfc77dc8f91bbc4bf3784ebd358437 Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Tue, 18 Jul 2023 14:23:26 -0400 Subject: [PATCH 06/18] Use 1.18.2 for the 1.18 module and make it compile ... although the 1.18.2 module can't run properly right now. I commented out the category dumpers in 1.18.2 because it seems that the newest commit for this repository has removed them entirely, and I am waiting for an answer as to whether I should remove them from all versions. I also changed some `System.err` usages to `System.out` because it was more appropriate, and updated some plugins. --- .gitignore | 2 + 1.14.4/build.gradle.kts | 2 +- .../org/enginehub/util/minecraft/RunAll.java | 4 +- 1.15.2/build.gradle.kts | 2 +- .../org/enginehub/util/minecraft/RunAll.java | 4 +- 1.16.5/build.gradle.kts | 2 +- .../org/enginehub/util/minecraft/RunAll.java | 4 +- 1.17.1/build.gradle.kts | 2 +- .../org/enginehub/util/minecraft/RunAll.java | 4 +- 1.18.2/build.gradle.kts | 9 +-- .../org/enginehub/util/minecraft/RunAll.java | 4 +- .../dumper/BlockCategoriesDumper.java | 74 +++++++++---------- .../minecraft/dumper/DataVersionDumper.java | 19 ++--- .../dumper/EntityTypeCategoriesDumper.java | 60 +++++++-------- .../dumper/ItemCategoriesDumper.java | 74 +++++++++---------- .../util/minecraft/util/GameSetupUtils.java | 32 ++++---- gradle.properties | 2 +- 17 files changed, 148 insertions(+), 152 deletions(-) diff --git a/.gitignore b/.gitignore index 5502819..90cbdbb 100644 --- a/.gitignore +++ b/.gitignore @@ -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/ diff --git a/1.14.4/build.gradle.kts b/1.14.4/build.gradle.kts index 0d368f8..90da84e 100644 --- a/1.14.4/build.gradle.kts +++ b/1.14.4/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.13.9" + id("fabric-loom") version "0.13.20" } group = "org.enginehub" diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java index b351d91..9765fec 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -10,9 +10,9 @@ public class RunAll { public static void main(String[] args) { GameSetupUtils.setupGame(); for (Dumper dumper : ServiceLoader.load(Dumper.class)) { - System.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); dumper.run(); - System.err.println("Finished!"); + System.out.println("Finished!"); } } } diff --git a/1.15.2/build.gradle.kts b/1.15.2/build.gradle.kts index e055b50..52fa011 100644 --- a/1.15.2/build.gradle.kts +++ b/1.15.2/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.13.9" + id("fabric-loom") version "0.13.20" } group = "org.enginehub" diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java index b351d91..9765fec 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -10,9 +10,9 @@ public class RunAll { public static void main(String[] args) { GameSetupUtils.setupGame(); for (Dumper dumper : ServiceLoader.load(Dumper.class)) { - System.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); dumper.run(); - System.err.println("Finished!"); + System.out.println("Finished!"); } } } diff --git a/1.16.5/build.gradle.kts b/1.16.5/build.gradle.kts index c5879f0..3f7c845 100644 --- a/1.16.5/build.gradle.kts +++ b/1.16.5/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.13.9" + id("fabric-loom") version "0.13.20" } group = "org.enginehub" diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java index f36368f..c88321d 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -12,9 +12,9 @@ public static void main(String[] args) { GameSetupUtils.getServerResources(); GameSetupUtils.getServerRegistry(); for (Dumper dumper : ServiceLoader.load(Dumper.class)) { - System.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); dumper.run(); - System.err.println("Finished!"); + System.out.println("Finished!"); } } } diff --git a/1.17.1/build.gradle.kts b/1.17.1/build.gradle.kts index 614a35e..9ee2358 100644 --- a/1.17.1/build.gradle.kts +++ b/1.17.1/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.13.9" + id("fabric-loom") version "0.13.20" } group = "org.enginehub" diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java index f36368f..c88321d 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -12,9 +12,9 @@ public static void main(String[] args) { GameSetupUtils.getServerResources(); GameSetupUtils.getServerRegistry(); for (Dumper dumper : ServiceLoader.load(Dumper.class)) { - System.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); dumper.run(); - System.err.println("Finished!"); + System.out.println("Finished!"); } } } diff --git a/1.18.2/build.gradle.kts b/1.18.2/build.gradle.kts index 10fe4c5..4e41c71 100644 --- a/1.18.2/build.gradle.kts +++ b/1.18.2/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("fabric-loom") version "0.13.9" + id("fabric-loom") version "0.13.20" } group = "org.enginehub" @@ -8,11 +8,8 @@ version = "1.0.0-SNAPSHOT" dependencies { implementation(project(mapOf("path" to ":core"))) - // TODO Switch to 1.18.2 -// minecraft("com.mojang:minecraft:1.18.2") -// mappings("net.fabricmc:yarn:1.18.2+build.4:v2") - minecraft("com.mojang:minecraft:1.18.1") - mappings("net.fabricmc:yarn:1.18.1+build.22:v2") + minecraft("com.mojang:minecraft:1.18.2") + mappings("net.fabricmc:yarn:1.18.2+build.4:v2") modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") implementation("com.squareup:javapoet:${project.property("javapoet.version")}") compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/RunAll.java index f36368f..c88321d 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/RunAll.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -12,9 +12,9 @@ public static void main(String[] args) { GameSetupUtils.getServerResources(); GameSetupUtils.getServerRegistry(); for (Dumper dumper : ServiceLoader.load(Dumper.class)) { - System.err.println("Running dumper: " + dumper.getClass().getCanonicalName()); + System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); dumper.run(); - System.err.println("Finished!"); + System.out.println("Finished!"); } } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index d012656..113581d 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -1,37 +1,37 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; -import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.util.Collection; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.BLOCK_KEY).getTagIds().stream().map(Identifier::getPath).toList(); - } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "dirt_like" - ); - } -} +// package org.enginehub.util.minecraft.dumper; +// +// import com.google.auto.service.AutoService; +// import com.google.common.collect.ImmutableSet; +// import com.squareup.javapoet.ClassName; +// import net.minecraft.util.Identifier; +// import net.minecraft.util.registry.Registry; +// +// import java.util.Collection; +// +// import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +// import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +// +// @AutoService(Dumper.class) +// public class BlockCategoriesDumper extends RegistryClassDumper { +// +// public static void main(String[] args) { +// setupGame(); +// new BlockCategoriesDumper().run(); +// } +// +// public BlockCategoriesDumper() { +// super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); +// } +// +// @Override +// protected Collection getIds() { +// return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.BLOCK_KEY).getTagIds().stream().map(Identifier::getPath).toList(); +// } +// +// @Override +// protected Collection getDeprecatedIds() { +// return ImmutableSet.of( +// "dirt_like" +// ); +// } +// } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index a22b7ce..3e3aecc 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -7,8 +7,6 @@ import net.minecraft.SharedConstants; import net.minecraft.block.Block; import net.minecraft.state.property.*; -import net.minecraft.tag.TagGroup; -import net.minecraft.tag.TagManager; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -44,13 +42,13 @@ public DataVersionDumper(File file) { this.file = file; } - private Map> getTags(TagGroup provider, Registry registry) { + private Map> getTags(Registry registry) { Map> tagCollector = new TreeMap<>(); - provider.getTags().forEach((key, value) -> - tagCollector.put(key.toString(), value.values().stream() - .map(entry -> checkNotNull(registry.getId(entry))) - .map(Identifier::toString) + registry.streamTagsAndEntries().forEach(tagPair -> + tagCollector.put(tagPair.getFirst().id().toString(), tagPair.getSecond().stream() + .map(entry -> checkNotNull(registry.getKey(entry.value()))) + .map(Optional::toString) .sorted() .collect(Collectors.toList()))); @@ -111,15 +109,14 @@ public void run() { // Biomes List biomes = getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); - TagManager tagManager = getServerResources().getRegistryTagManager(); // BlockTags - Map> blockTags = getTags(tagManager.getOrCreateTagGroup(Registry.BLOCK_KEY), Registry.BLOCK); + Map> blockTags = getTags(Registry.BLOCK); // ItemTags - Map> itemTags = getTags(tagManager.getOrCreateTagGroup(Registry.ITEM_KEY), Registry.ITEM); + Map> itemTags = getTags(Registry.ITEM); // EntityTags - Map> entityTags = getTags(tagManager.getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY), Registry.ENTITY_TYPE); + Map> entityTags = getTags(Registry.ENTITY_TYPE); Map output = new TreeMap<>(); output.put("blocks", blocks); diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index b6ed5f7..4b2e73e 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -1,30 +1,30 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.util.Collection; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).toList(); - } -} +// package org.enginehub.util.minecraft.dumper; +// +// import com.google.auto.service.AutoService; +// import com.squareup.javapoet.ClassName; +// import net.minecraft.util.Identifier; +// import net.minecraft.util.registry.Registry; +// +// import java.util.Collection; +// +// import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +// import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +// +// @AutoService(Dumper.class) +// public class EntityTypeCategoriesDumper extends RegistryClassDumper { +// +// // worldedit doesn't actually do entity type categories yet +// public static void main(String[] args) { +// setupGame(); +// new EntityTypeCategoriesDumper().run(); +// } +// +// public EntityTypeCategoriesDumper() { +// super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); +// } +// +// @Override +// protected Collection getIds() { +// return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).toList(); +// } +// } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 7da6645..b886393 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -1,37 +1,37 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; -import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -import java.util.Collection; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).toList(); - } - - @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "furnace_materials" - ); - } -} +// package org.enginehub.util.minecraft.dumper; +// +// import com.google.auto.service.AutoService; +// import com.google.common.collect.ImmutableSet; +// import com.squareup.javapoet.ClassName; +// import net.minecraft.util.Identifier; +// import net.minecraft.util.registry.Registry; +// +// import java.util.Collection; +// +// import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; +// import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +// +// @AutoService(Dumper.class) +// public class ItemCategoriesDumper extends RegistryClassDumper { +// +// public static void main(String[] args) { +// setupGame(); +// new ItemCategoriesDumper().run(); +// } +// +// public ItemCategoriesDumper() { +// super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); +// } +// +// @Override +// protected Collection getIds() { +// return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).toList(); +// } +// +// @Override +// protected Collection getDeprecatedIds() { +// return ImmutableSet.of( +// "furnace_materials" +// ); +// } +// } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 3804991..bb3e728 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -4,12 +4,14 @@ import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; import net.minecraft.resource.*; +import net.minecraft.server.DataPackContents; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; import net.minecraft.util.registry.DynamicRegistryManager; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; +import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.locks.Lock; @@ -19,20 +21,21 @@ public final class GameSetupUtils { public static void setupGame() { SharedConstants.createGameVersion(); + // FIXME Bootstrap can not properly initialize for 1.18.2 because calling it leads to an IllegalAccessError later down the call stack Bootstrap.initialize(); AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); } private static final Lock lock = new ReentrantLock(); - private static ServerResourceManager SERVER_RESOURCES; + private static DataPackContents SERVER_RESOURCES; private static DynamicRegistryManager SERVER_REGISTRY; - public static ServerResourceManager getServerResources() { + public static DataPackContents getServerResources() { setupGame(); lock.lock(); try { - ServerResourceManager localResources = SERVER_RESOURCES; + DataPackContents localResources = SERVER_RESOURCES; if (localResources != null) { return localResources; } @@ -41,18 +44,15 @@ public static ServerResourceManager getServerResources() { new VanillaDataPackProvider() ); MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); - DynamicRegistryManager.Impl impl = DynamicRegistryManager.create(); - CompletableFuture completableFuture = ServerResourceManager.reload( - resourcePackManager.createResourcePacks(), - impl, - CommandManager.RegistrationEnvironment.DEDICATED, - // permission level doesn't matter - 0, - ForkJoinPool.commonPool(), - Runnable::run - ); - ServerResourceManager manager = Futures.getUnchecked(completableFuture); - manager.loadRegistryTags(); + DynamicRegistryManager.Immutable immutable = DynamicRegistryManager.BUILTIN.get(); + LifecycledResourceManagerImpl lifecycledResourceManager = new LifecycledResourceManagerImpl(ResourceType.SERVER_DATA, resourcePackManager.createResourcePacks()); + CompletableFuture completableFuture = ( DataPackContents.reload(lifecycledResourceManager, immutable, CommandManager.RegistrationEnvironment.DEDICATED, 0, ForkJoinPool.commonPool(), Runnable::run).whenComplete((dataPackContents, throwable) -> { + if (throwable != null) { + lifecycledResourceManager.close(); + } + })); + DataPackContents manager = Futures.getUnchecked(completableFuture); + manager.refresh(immutable); SERVER_RESOURCES = manager; return manager; } finally { @@ -67,7 +67,7 @@ public static DynamicRegistryManager getServerRegistry() { if (localResources != null) { return localResources; } - DynamicRegistryManager manager = DynamicRegistryManager.create(); + DynamicRegistryManager manager = DynamicRegistryManager.BUILTIN.get(); SERVER_REGISTRY = manager; return manager; } finally { diff --git a/gradle.properties b/gradle.properties index 3db9c45..c68fe63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ version=1.0.0-SNAPSHOT org.gradle.jvmargs=-Xmx1G -fabric_loader.version=0.14.9 +fabric_loader.version=0.14.21 javapoet.version=1.13.0 autoservice.version=1.0.1 From 98648be77f93bb9ace2f17a388e39e1060e2dc64 Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Tue, 8 Aug 2023 14:51:25 -0400 Subject: [PATCH 07/18] Add 1.19.4 dumper --- .../minecraft/dumper/BiomeTypesDumper.java | 6 +- .../dumper/BlockCategoriesDumper.java | 6 +- .../minecraft/dumper/BlockTypesDumper.java | 12 +- .../minecraft/dumper/DataVersionDumper.java | 7 +- .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 6 +- .../dumper/ItemCategoriesDumper.java | 6 +- .../minecraft/dumper/ItemTypesDumper.java | 12 +- .../minecraft/dumper/BiomeTypesDumper.java | 6 +- .../dumper/BlockCategoriesDumper.java | 12 +- .../minecraft/dumper/BlockTypesDumper.java | 12 +- .../minecraft/dumper/DataVersionDumper.java | 2 +- .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 6 +- .../dumper/ItemCategoriesDumper.java | 6 +- .../minecraft/dumper/ItemTypesDumper.java | 12 +- .../minecraft/dumper/BiomeTypesDumper.java | 12 +- .../dumper/BlockCategoriesDumper.java | 14 +- .../minecraft/dumper/BlockRegistryDumper.java | 2 + .../minecraft/dumper/BlockTypesDumper.java | 16 +- .../minecraft/dumper/DataVersionDumper.java | 20 +- .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 14 +- .../dumper/ItemCategoriesDumper.java | 12 +- .../minecraft/dumper/ItemTypesDumper.java | 22 +- .../util/minecraft/util/GameSetupUtils.java | 16 +- .../minecraft/dumper/BiomeTypesDumper.java | 14 +- .../dumper/BlockCategoriesDumper.java | 16 +- .../minecraft/dumper/BlockTypesDumper.java | 18 +- .../minecraft/dumper/DataVersionDumper.java | 20 +- .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 14 +- .../dumper/ItemCategoriesDumper.java | 12 +- .../minecraft/dumper/ItemTypesDumper.java | 24 +- .../util/minecraft/util/GameSetupUtils.java | 19 +- 1.18.2/build.gradle.kts | 3 + .../minecraft/dumper/BiomeTypesDumper.java | 12 +- .../dumper/BlockCategoriesDumper.java | 74 ++--- .../minecraft/dumper/BlockTypesDumper.java | 18 +- .../minecraft/dumper/DataVersionDumper.java | 23 +- .../dumper/EntityTypeCategoriesDumper.java | 60 ++-- .../minecraft/dumper/EntityTypesDumper.java | 14 +- .../dumper/ItemCategoriesDumper.java | 74 ++--- .../minecraft/dumper/ItemTypesDumper.java | 24 +- .../util/minecraft/util/GameSetupUtils.java | 7 +- 1.19.4/.gitignore | 79 ++++++ 1.19.4/build.gradle.kts | 19 ++ .../org/enginehub/util/minecraft/RunAll.java | 19 ++ .../minecraft/dumper/BiomeTypesDumper.java | 74 +++++ .../dumper/BlockCategoriesDumper.java | 38 +++ .../minecraft/dumper/BlockRegistryDumper.java | 143 ++++++++++ .../minecraft/dumper/BlockTypesDumper.java | 39 +++ .../minecraft/dumper/DataVersionDumper.java | 138 ++++++++++ .../dumper/EntityTypeCategoriesDumper.java | 29 ++ .../minecraft/dumper/EntityTypesDumper.java | 37 +++ .../dumper/ItemCategoriesDumper.java | 38 +++ .../minecraft/dumper/ItemRegistryDumper.java | 60 ++++ .../minecraft/dumper/ItemTypesDumper.java | 42 +++ .../util/minecraft/util/GameSetupUtils.java | 72 +++++ .../minecraft/dumper/RegistryClassDumper.java | 11 +- .../util/minecraft/dumper/RegistryDumper.java | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 +++++++++++------- gradlew.bat | 21 +- settings.gradle.kts | 8 +- 66 files changed, 1349 insertions(+), 488 deletions(-) create mode 100644 1.19.4/.gitignore create mode 100644 1.19.4/build.gradle.kts create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/RunAll.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java create mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index fa27d89..1b1204e 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -22,7 +22,7 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BIOME.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.BIOME.getIds().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 2b4ea4c..2cd6ceb 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.tag.BlockTags; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,7 +23,7 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { - return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 9ceddf4..a4f0185 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,13 +23,13 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "sign", "wall_sign" ); diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 1d42b77..849b0f5 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -7,7 +7,10 @@ import net.minecraft.SharedConstants; import net.minecraft.block.Block; import net.minecraft.state.property.*; -import net.minecraft.tag.*; +import net.minecraft.tag.BlockTags; +import net.minecraft.tag.EntityTypeTags; +import net.minecraft.tag.ItemTags; +import net.minecraft.tag.TagContainer; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -125,7 +128,7 @@ public void run() { output.put("entitytags", entityTags); try { - Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + Files.asCharSink(file, StandardCharsets.UTF_8).write(gson.toJson(output)); } catch (IOException e) { e.printStackTrace(); } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 421c667..89ce90d 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.tag.EntityTypeTags; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,7 +23,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index cf65c03..042a2d8 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -22,7 +22,7 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 01f3513..4f1413a 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.tag.ItemTags; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -22,7 +22,7 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index a21e38f..5c30a23 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,13 +23,13 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "cactus_green", "dandelion_yellow", "rose_red", diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index fa27d89..1b1204e 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -22,7 +22,7 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BIOME.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.BIOME.getIds().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 9949469..523ef1a 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.tag.BlockTags; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,13 +23,13 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { - return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "dirt_like" ); } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 9ceddf4..a4f0185 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,13 +23,13 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "sign", "wall_sign" ); diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index d4334c8..3d497fb 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -127,7 +127,7 @@ public void run() { output.put("entitytags", entityTags); try { - Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + Files.asCharSink(file, StandardCharsets.UTF_8).write(gson.toJson(output)); } catch (IOException e) { e.printStackTrace(); } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 421c667..89ce90d 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.tag.EntityTypeTags; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,7 +23,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index cf65c03..042a2d8 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -22,7 +22,7 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 01f3513..4f1413a 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.tag.ItemTags; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -22,7 +22,7 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index a21e38f..5c30a23 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,13 +23,13 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "cactus_green", "dandelion_yellow", "rose_red", diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index a132fe6..c5bcaf6 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -24,13 +24,13 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "nether" ); } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 2914d83..e6c2462 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -1,11 +1,11 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,14 +23,14 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getBlocks().getTagIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerResources().getRegistryTagManager().getBlocks().getTagIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "dirt_like" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "dirt_like" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 0f0b6f7..e704000 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -113,6 +113,7 @@ public static class Vec3iAdapter extends TypeAdapter { public Vec3i read(final JsonReader in) { throw new UnsupportedOperationException(); } + @Override public void write(final JsonWriter out, final Vec3i vec) throws IOException { out.beginArray(); @@ -128,6 +129,7 @@ public static class Vec3dAdapter extends TypeAdapter { public Vec3d read(final JsonReader in) { throw new UnsupportedOperationException(); } + @Override public void write(final JsonWriter out, final Vec3d vec) throws IOException { out.beginArray(); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 67d313c..a4f0185 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,15 +23,15 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "sign", - "wall_sign" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "sign", + "wall_sign" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index e4e289f..bf7c66e 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -48,11 +48,11 @@ private Map> getTags(TagGroup provider, Registry Map> tagCollector = new TreeMap<>(); provider.getTags().forEach((key, value) -> - tagCollector.put(key.toString(), value.values().stream() - .map(entry -> checkNotNull(registry.getId(entry))) - .map(Identifier::toString) - .sorted() - .collect(Collectors.toList()))); + tagCollector.put(key.toString(), value.values().stream() + .map(entry -> checkNotNull(registry.getId(entry))) + .map(Identifier::toString) + .sorted() + .collect(Collectors.toList()))); return tagCollector; } @@ -92,10 +92,10 @@ public void run() { if (!block.getDefaultState().getEntries().isEmpty()) { List bits = new ArrayList<>(); block.getDefaultState().getEntries().entrySet().stream() - .sorted(Comparator.comparing(e -> e.getKey().getName())) - .forEach(e -> - bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) - ); + .sorted(Comparator.comparing(e -> e.getKey().getName())) + .forEach(e -> + bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) + ); defaultState.append("[").append(String.join(",", bits)).append("]"); } bl.put("defaultstate", defaultState.toString()); @@ -131,7 +131,7 @@ public void run() { output.put("entitytags", entityTags); try { - Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + Files.asCharSink(file, StandardCharsets.UTF_8).write(gson.toJson(output)); } catch (IOException e) { e.printStackTrace(); } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 5d8511d..1ccfef1 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -4,7 +4,7 @@ import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,7 +23,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getEntityTypes().getTagIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerResources().getRegistryTagManager().getEntityTypes().getTagIds().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index ce620f4..21f99c9 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,14 +23,14 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "zombie_pigman" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "zombie_pigman" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index c9f03ef..0747c83 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -1,11 +1,11 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,13 +23,13 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getItems().getTagIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerResources().getRegistryTagManager().getItems().getTagIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "furnace_materials" ); } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 883cfd9..a323b03 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,18 +23,18 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "cactus_green", - "dandelion_yellow", - "rose_red", - "sign", - "zombie_pigman_spawn_egg" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg" ); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 7658895..24dcfc0 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -37,17 +37,17 @@ public static ServerResourceManager getServerResources() { return localResources; } ResourcePackManager resourcePackManager = new ResourcePackManager( - ResourcePackProfile::new, - new VanillaDataPackProvider() + ResourcePackProfile::new, + new VanillaDataPackProvider() ); MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); CompletableFuture completableFuture = ServerResourceManager.reload( - resourcePackManager.createResourcePacks(), - CommandManager.RegistrationEnvironment.DEDICATED, - // permission level doesn't matter - 0, - ForkJoinPool.commonPool(), - Runnable::run + resourcePackManager.createResourcePacks(), + CommandManager.RegistrationEnvironment.DEDICATED, + // permission level doesn't matter + 0, + ForkJoinPool.commonPool(), + Runnable::run ); ServerResourceManager manager = Futures.getUnchecked(completableFuture); manager.loadRegistryTags(); diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index c04959f..c5bcaf6 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -24,14 +24,14 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "nether" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "nether" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 4140357..e39c4da 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -24,16 +24,16 @@ public BlockCategoriesDumper() { } @Override - protected Collection getIds() { + protected Iterator getIds() { return getServerResources().getRegistryTagManager().getOrCreateTagGroup( - Registry.BLOCK_KEY - ).getTagIds().stream().map(Identifier::getPath).toList(); + Registry.BLOCK_KEY + ).getTagIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "dirt_like" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "dirt_like" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 6dcbddc..4183236 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,16 +23,16 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "sign", - "wall_sign", - "grass_path" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "sign", + "wall_sign", + "grass_path" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 0f592d1..29b2d63 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -48,11 +48,11 @@ private Map> getTags(TagGroup provider, Registry Map> tagCollector = new TreeMap<>(); provider.getTags().forEach((key, value) -> - tagCollector.put(key.toString(), value.values().stream() - .map(entry -> checkNotNull(registry.getId(entry))) - .map(Identifier::toString) - .sorted() - .collect(Collectors.toList()))); + tagCollector.put(key.toString(), value.values().stream() + .map(entry -> checkNotNull(registry.getId(entry))) + .map(Identifier::toString) + .sorted() + .collect(Collectors.toList()))); return tagCollector; } @@ -92,10 +92,10 @@ public void run() { if (!block.getDefaultState().getEntries().isEmpty()) { List bits = new ArrayList<>(); block.getDefaultState().getEntries().entrySet().stream() - .sorted(Comparator.comparing(e -> e.getKey().getName())) - .forEach(e -> - bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) - ); + .sorted(Comparator.comparing(e -> e.getKey().getName())) + .forEach(e -> + bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) + ); defaultState.append("[").append(String.join(",", bits)).append("]"); } bl.put("defaultstate", defaultState.toString()); @@ -131,7 +131,7 @@ public void run() { output.put("entitytags", entityTags); try { - Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + Files.asCharSink(file, StandardCharsets.UTF_8).write(gson.toJson(output)); } catch (IOException e) { e.printStackTrace(); } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index b6ed5f7..804c149 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -5,7 +5,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -24,7 +24,7 @@ public EntityTypeCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).iterator(); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index ce620f4..21f99c9 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,14 +23,14 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "zombie_pigman" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "zombie_pigman" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 7da6645..6101ee3 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -24,13 +24,13 @@ public ItemCategoriesDumper() { } @Override - protected Collection getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "furnace_materials" ); } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 167571a..1201111 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,19 +23,19 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "cactus_green", - "dandelion_yellow", - "rose_red", - "sign", - "zombie_pigman_spawn_egg", - "grass_path" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg", + "grass_path" ); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 04742d3..26473ac 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -6,7 +6,6 @@ import net.minecraft.resource.*; import net.minecraft.server.MinecraftServer; import net.minecraft.server.command.CommandManager; -import net.minecraft.util.Identifier; import net.minecraft.util.registry.DynamicRegistryManager; import org.enginehub.util.minecraft.dumper.AbstractDumper; @@ -38,19 +37,19 @@ public static ServerResourceManager getServerResources() { return localResources; } ResourcePackManager resourcePackManager = new ResourcePackManager( - ResourceType.SERVER_DATA, - new VanillaDataPackProvider() + ResourceType.SERVER_DATA, + new VanillaDataPackProvider() ); MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); DynamicRegistryManager.Impl impl = DynamicRegistryManager.create(); CompletableFuture completableFuture = ServerResourceManager.reload( - resourcePackManager.createResourcePacks(), - impl, - CommandManager.RegistrationEnvironment.DEDICATED, - // permission level doesn't matter - 0, - ForkJoinPool.commonPool(), - Runnable::run + resourcePackManager.createResourcePacks(), + impl, + CommandManager.RegistrationEnvironment.DEDICATED, + // permission level doesn't matter + 0, + ForkJoinPool.commonPool(), + Runnable::run ); ServerResourceManager manager = Futures.getUnchecked(completableFuture); manager.loadRegistryTags(); diff --git a/1.18.2/build.gradle.kts b/1.18.2/build.gradle.kts index 4e41c71..712cece 100644 --- a/1.18.2/build.gradle.kts +++ b/1.18.2/build.gradle.kts @@ -1,3 +1,5 @@ +//import net.fabricmc.loom.api.LoomGradleExtensionAPI + plugins { java id("fabric-loom") version "0.13.20" @@ -10,6 +12,7 @@ dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.18.2") mappings("net.fabricmc:yarn:1.18.2+build.4:v2") +// mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") implementation("com.squareup:javapoet:${project.property("javapoet.version")}") compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 4264506..c8439e3 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -24,13 +24,13 @@ public BiomeTypesDumper() { } @Override - protected Collection getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( + protected Iterator getDeprecatedIds() { + return Iterators.forArray( "nether", "tall_birch_forest", "giant_tree_taiga", diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 113581d..ddefe33 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -1,37 +1,37 @@ -// package org.enginehub.util.minecraft.dumper; -// -// import com.google.auto.service.AutoService; -// import com.google.common.collect.ImmutableSet; -// import com.squareup.javapoet.ClassName; -// import net.minecraft.util.Identifier; -// import net.minecraft.util.registry.Registry; -// -// import java.util.Collection; -// -// import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -// import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; -// -// @AutoService(Dumper.class) -// public class BlockCategoriesDumper extends RegistryClassDumper { -// -// public static void main(String[] args) { -// setupGame(); -// new BlockCategoriesDumper().run(); -// } -// -// public BlockCategoriesDumper() { -// super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); -// } -// -// @Override -// protected Collection getIds() { -// return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.BLOCK_KEY).getTagIds().stream().map(Identifier::getPath).toList(); -// } -// -// @Override -// protected Collection getDeprecatedIds() { -// return ImmutableSet.of( -// "dirt_like" -// ); -// } -// } +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class BlockCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new BlockCategoriesDumper().run(); + } + + public BlockCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistry().get(Registry.BLOCK_KEY).getIds().stream().map(Identifier::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "dirt_like" + ); + } +} diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 6dcbddc..4183236 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,16 +23,16 @@ public BlockTypesDumper() { } @Override - protected Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "sign", - "wall_sign", - "grass_path" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "sign", + "wall_sign", + "grass_path" ); } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 3e3aecc..5603de5 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -17,7 +17,8 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; -import static org.enginehub.util.minecraft.util.GameSetupUtils.*; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; public class DataVersionDumper extends AbstractDumper { @@ -46,11 +47,11 @@ private Map> getTags(Registry registry) { Map> tagCollector = new TreeMap<>(); registry.streamTagsAndEntries().forEach(tagPair -> - tagCollector.put(tagPair.getFirst().id().toString(), tagPair.getSecond().stream() - .map(entry -> checkNotNull(registry.getKey(entry.value()))) - .map(Optional::toString) - .sorted() - .collect(Collectors.toList()))); + tagCollector.put(tagPair.getFirst().id().toString(), tagPair.getSecond().stream() + .map(entry -> checkNotNull(registry.getKey(entry.value()))) + .map(Optional::toString) + .sorted() + .collect(Collectors.toList()))); return tagCollector; } @@ -90,10 +91,10 @@ public void run() { if (!block.getDefaultState().getEntries().isEmpty()) { List bits = new ArrayList<>(); block.getDefaultState().getEntries().entrySet().stream() - .sorted(Comparator.comparing(e -> e.getKey().getName())) - .forEach(e -> - bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) - ); + .sorted(Comparator.comparing(e -> e.getKey().getName())) + .forEach(e -> + bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) + ); defaultState.append("[").append(String.join(",", bits)).append("]"); } bl.put("defaultstate", defaultState.toString()); @@ -128,7 +129,7 @@ public void run() { output.put("entitytags", entityTags); try { - Files.write(gson.toJson(output), file, StandardCharsets.UTF_8); + Files.asCharSink(file, StandardCharsets.UTF_8).write(gson.toJson(output)); } catch (IOException e) { e.printStackTrace(); } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 4b2e73e..30310c9 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -1,30 +1,30 @@ -// package org.enginehub.util.minecraft.dumper; -// -// import com.google.auto.service.AutoService; -// import com.squareup.javapoet.ClassName; -// import net.minecraft.util.Identifier; -// import net.minecraft.util.registry.Registry; -// -// import java.util.Collection; -// -// import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -// import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; -// -// @AutoService(Dumper.class) -// public class EntityTypeCategoriesDumper extends RegistryClassDumper { -// -// // worldedit doesn't actually do entity type categories yet -// public static void main(String[] args) { -// setupGame(); -// new EntityTypeCategoriesDumper().run(); -// } -// -// public EntityTypeCategoriesDumper() { -// super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); -// } -// -// @Override -// protected Collection getIds() { -// return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).toList(); -// } -// } +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypeCategoriesDumper extends RegistryClassDumper { + + // worldedit doesn't actually do entity type categories yet + public static void main(String[] args) { + setupGame(); + new EntityTypeCategoriesDumper().run(); + } + + public EntityTypeCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistry().get(Registry.ENTITY_TYPE_KEY).getIds().stream().map(Identifier::getPath).iterator(); + } +} diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index ce620f4..21f99c9 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,14 +23,14 @@ public EntityTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "zombie_pigman" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "zombie_pigman" ); } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index b886393..a9e8633 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -1,37 +1,37 @@ -// package org.enginehub.util.minecraft.dumper; -// -// import com.google.auto.service.AutoService; -// import com.google.common.collect.ImmutableSet; -// import com.squareup.javapoet.ClassName; -// import net.minecraft.util.Identifier; -// import net.minecraft.util.registry.Registry; -// -// import java.util.Collection; -// -// import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -// import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; -// -// @AutoService(Dumper.class) -// public class ItemCategoriesDumper extends RegistryClassDumper { -// -// public static void main(String[] args) { -// setupGame(); -// new ItemCategoriesDumper().run(); -// } -// -// public ItemCategoriesDumper() { -// super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); -// } -// -// @Override -// protected Collection getIds() { -// return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).toList(); -// } -// -// @Override -// protected Collection getDeprecatedIds() { -// return ImmutableSet.of( -// "furnace_materials" -// ); -// } -// } +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemCategoriesDumper().run(); + } + + public ItemCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistry().get(Registry.ITEM_KEY).getIds().stream().map(Identifier::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "furnace_materials" + ); + } +} diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 167571a..1201111 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -1,12 +1,12 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; -import java.util.Collection; +import java.util.Iterator; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @@ -23,19 +23,19 @@ public ItemTypesDumper() { } @Override - protected Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).toList(); + protected Iterator getIds() { + return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); } @Override - protected Collection getDeprecatedIds() { - return ImmutableSet.of( - "cactus_green", - "dandelion_yellow", - "rose_red", - "sign", - "zombie_pigman_spawn_egg", - "grass_path" + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg", + "grass_path" ); } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index bb3e728..66661de 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -11,7 +11,6 @@ import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; -import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.locks.Lock; @@ -40,13 +39,13 @@ public static DataPackContents getServerResources() { return localResources; } ResourcePackManager resourcePackManager = new ResourcePackManager( - ResourceType.SERVER_DATA, - new VanillaDataPackProvider() + ResourceType.SERVER_DATA, + new VanillaDataPackProvider() ); MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); DynamicRegistryManager.Immutable immutable = DynamicRegistryManager.BUILTIN.get(); LifecycledResourceManagerImpl lifecycledResourceManager = new LifecycledResourceManagerImpl(ResourceType.SERVER_DATA, resourcePackManager.createResourcePacks()); - CompletableFuture completableFuture = ( DataPackContents.reload(lifecycledResourceManager, immutable, CommandManager.RegistrationEnvironment.DEDICATED, 0, ForkJoinPool.commonPool(), Runnable::run).whenComplete((dataPackContents, throwable) -> { + CompletableFuture completableFuture = (DataPackContents.reload(lifecycledResourceManager, immutable, CommandManager.RegistrationEnvironment.DEDICATED, 0, ForkJoinPool.commonPool(), Runnable::run).whenComplete((dataPackContents, throwable) -> { if (throwable != null) { lifecycledResourceManager.close(); } diff --git a/1.19.4/.gitignore b/1.19.4/.gitignore new file mode 100644 index 0000000..5502819 --- /dev/null +++ b/1.19.4/.gitignore @@ -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 + diff --git a/1.19.4/build.gradle.kts b/1.19.4/build.gradle.kts new file mode 100644 index 0000000..97dc81d --- /dev/null +++ b/1.19.4/build.gradle.kts @@ -0,0 +1,19 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + +plugins { + java + id("fabric-loom") version "0.13.20" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + implementation(project(mapOf("path" to ":core"))) + minecraft("com.mojang:minecraft:1.19.4") + mappings(project.the().officialMojangMappings()) + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/RunAll.java new file mode 100644 index 0000000..1be5b9d --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -0,0 +1,19 @@ +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(); + GameSetupUtils.getServerRegistries(); + for (Dumper dumper : ServiceLoader.load(Dumper.class)) { + System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); + dumper.run(); + System.out.println("Finished!"); + } + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java new file mode 100644 index 0000000..90fe7c0 --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -0,0 +1,74 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.BIOME).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "nether", + "tall_birch_forest", + "giant_tree_taiga", + "giant_spruce_taiga", + "snowy_tundra", + "jungle_edge", + "stone_shore", + "mountains", + "wooded_mountains", + "gravelly_mountains", + "shattered_savanna", + "wooded_badlands_plateau", + "badlands_plateau", + "bamboo_jungle_hills", + "birch_forest_hills", + "dark_forest_hills", + "deep_warm_ocean", + "desert_hills", + "desert_lakes", + "giant_spruce_taiga_hills", + "giant_tree_taiga_hills", + "modified_gravelly_hills", + "jungle_hills", + "modified_badlands_plateau", + "modified_jungle", + "modified_jungle_edge", + "modified_wooded_badlands_plateau", + "mountain_edge", + "mushroom_field_shore", + "shattered_savanna_plateau", + "snowy_mountains", + "snowy_taiga_hills", + "snowy_taiga_mountains", + "swamp_hills", + "taiga_hills", + "taiga_mountains", + "tall_birch_hills", + "wooded_hills" + ); + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java new file mode 100644 index 0000000..33d191c --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -0,0 +1,38 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class BlockCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new BlockCategoriesDumper().run(); + } + + public BlockCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "dirt_like", + "carpets", + "lava_pool_stone_replaceables" + ); + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java new file mode 100644 index 0000000..9216afb --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -0,0 +1,143 @@ +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.Vec3i; +import net.minecraft.core.registries.Registries; +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.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.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class BlockRegistryDumper extends RegistryDumper { + + private static final AABB FULL_CUBE = AABB.unitCubeFromLowerCorner(Vec3.ZERO); + + 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 getIds() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).keySet().stream().map(ResourceLocation::toString).toList(); + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(String resourceLocation) { + Block block = getServerRegistries().registryOrThrow(Registries.BLOCK).get(new ResourceLocation(resourceLocation)); + Map map = new TreeMap<>(); + map.put("id", resourceLocation); + map.put("localizedName", Language.getInstance().getOrDefault(block.getDescriptionId())); + map.put("material", getMaterial(block)); + return Lists.newArrayList(map); + } + + private Map getMaterial(Block b) { + BlockState bs = b.defaultBlockState(); + Map 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.isTranslucent(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", bs.requiresCorrectToolForDrops()); + 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(BlockPos.ZERO, bs) 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 { + @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 { + @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(); + } + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java new file mode 100644 index 0000000..b0d23eb --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -0,0 +1,39 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +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(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "sign", + "wall_sign", + "grass_path" + ); + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java new file mode 100644 index 0000000..806d11e --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -0,0 +1,138 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.SharedConstants; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.*; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class DataVersionDumper extends AbstractDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + File file = new File(OUTPUT, SharedConstants.getCurrentVersion().getDataVersion().getVersion() + ".json"); + new DataVersionDumper(file).run(); + } + } + + private final File file; + private final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + + public DataVersionDumper(File file) { + this.file = file; + } + + private Map> getTags(Registry registry) { + Map> tagCollector = new TreeMap<>(); + + registry.getTags().forEach(tagPair -> + tagCollector.put(tagPair.getFirst().location().toString(), tagPair.getSecond().stream() + .map(entry -> checkNotNull(registry.getKey(entry.value()))) + .map(ResourceLocation::toString) + .sorted() + .collect(Collectors.toList()))); + + return tagCollector; + } + + @SuppressWarnings("rawtypes") + private String getTypeName(Class clazz) { + if (clazz == EnumProperty.class) { + return "enum"; + } else if (clazz == IntegerProperty.class) { + return "int"; + } else if (clazz == BooleanProperty.class) { + return "bool"; + } else if (clazz == DirectionProperty.class) { + return "direction"; + } else { + throw new RuntimeException("Unknown property!"); + } + } + + @Override + public void run() { + // Blocks + Map> blocks = new TreeMap<>(); + for (ResourceLocation blockId : getServerRegistries().registryOrThrow(Registries.BLOCK).keySet()) { + Map bl = new TreeMap<>(); + Block block = getServerRegistries().registryOrThrow(Registries.BLOCK).get(blockId); + Map properties = new TreeMap<>(); + for (Property prop : block.defaultBlockState().getProperties()) { + Map propertyValues = new TreeMap<>(); + propertyValues.put("values", prop.getPossibleValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("type", getTypeName(prop.getClass())); + properties.put(prop.getName(), propertyValues); + } + bl.put("properties", properties); + StringBuilder defaultState = new StringBuilder(); + defaultState.append(blockId.toString()); + if (!block.defaultBlockState().getValues().isEmpty()) { + List bits = new ArrayList<>(); + block.defaultBlockState().getValues().entrySet().stream() + .sorted(Comparator.comparing(e -> e.getKey().getName())) + .forEach(e -> + bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) + ); + defaultState.append("[").append(String.join(",", bits)).append("]"); + } + bl.put("defaultstate", defaultState.toString()); + blocks.put(blockId.toString(), bl); + } + + // Items + List items = getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); + + // Entities + List entities = getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); + + // Biomes + List biomes = getServerRegistries().registryOrThrow(Registries.BIOME).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); + + // BlockTags + Map> blockTags = getTags(getServerRegistries().registryOrThrow(Registries.BLOCK)); + + // ItemTags + Map> itemTags = getTags(getServerRegistries().registryOrThrow(Registries.ITEM)); + + // EntityTags + Map> entityTags = getTags(getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE)); + + Map output = new TreeMap<>(); + output.put("blocks", blocks); + output.put("items", items); + output.put("entities", entities); + output.put("biomes", biomes); + output.put("blocktags", blockTags); + output.put("itemtags", itemTags); + output.put("entitytags", entityTags); + + try { + Files.asCharSink(file, StandardCharsets.UTF_8).write(gson.toJson(output)); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java new file mode 100644 index 0000000..307afdf --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -0,0 +1,29 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypeCategoriesDumper extends RegistryClassDumper { + + // worldedit doesn't actually do entity type categories yet + public static void main(String[] args) { + setupGame(); + new EntityTypeCategoriesDumper().run(); + } + + public EntityTypeCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java new file mode 100644 index 0000000..40fdb2b --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -0,0 +1,37 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new EntityTypesDumper().run(); + } + + public EntityTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "zombie_pigman" + ); + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java new file mode 100644 index 0000000..a3f129f --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -0,0 +1,38 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemCategoriesDumper().run(); + } + + public ItemCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ITEM).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "carpets", + "furnace_materials", + "occludes_vibration_signals" + ); + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java new file mode 100644 index 0000000..7db57ab --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -0,0 +1,60 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +import java.io.File; +import java.util.*; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class ItemRegistryDumper extends RegistryDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + new ItemRegistryDumper(new File(OUTPUT, "items.json")).run(); + } + } + + public ItemRegistryDumper(File file) { + super(file); + } + + @Override + public Collection getIds() { + return getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().map(ResourceLocation::toString).toList(); + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(String resourceLocation) { + Item item = getServerRegistries().registryOrThrow(Registries.ITEM).get(new ResourceLocation(resourceLocation)); + List> maps = new ArrayList<>(); + maps.add(getPropertiesForItem(resourceLocation, item)); + return maps; + } + + private Map getPropertiesForItem(String resourceLocation, Item item) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation); + map.put("unlocalizedName", item.getDescriptionId(item.getDefaultInstance())); + map.put("localizedName", item.getName(item.getDefaultInstance()).getString()); + map.put("maxDamage", item.getMaxDamage()); + map.put("maxStackSize", item.getMaxStackSize()); + return map; + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java new file mode 100644 index 0000000..aa89bce --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -0,0 +1,42 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemTypesDumper().run(); + } + + public ItemTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg", + "grass_path" + ); + } +} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java new file mode 100644 index 0000000..4d39438 --- /dev/null +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -0,0 +1,72 @@ +package org.enginehub.util.minecraft.util; + +import com.mojang.serialization.Lifecycle; +import net.minecraft.SharedConstants; +import net.minecraft.Util; +import net.minecraft.commands.Commands; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.Bootstrap; +import net.minecraft.server.WorldLoader; +import net.minecraft.server.WorldStem; +import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.*; +import net.minecraft.world.level.levelgen.WorldOptions; +import net.minecraft.world.level.storage.PrimaryLevelData; +import org.enginehub.util.minecraft.dumper.AbstractDumper; + +import java.io.File; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public final class GameSetupUtils { + + public static void setupGame() { + SharedConstants.tryDetectVersion(); + Bootstrap.bootStrap(); + + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); + } + + private static final Lock lock = new ReentrantLock(); + private static final GameRules GAME_RULES = Util.make(new GameRules(), gameRules -> { + gameRules.getRule(GameRules.RULE_DOMOBSPAWNING).set(false, null); + gameRules.getRule(GameRules.RULE_WEATHER_CYCLE).set(false, null); + }); + private static RegistryAccess SERVER_REGISTRY_MANAGER; + + public static RegistryAccess getServerRegistries() { + setupGame(); + lock.lock(); + try { + RegistryAccess localResources = SERVER_REGISTRY_MANAGER; + if (localResources != null) { + return localResources; + } + PackRepository resourcePackManager = new PackRepository( + new ServerPacksSource() + ); + WorldDataConfiguration wdc = new WorldDataConfiguration(DataPackConfig.DEFAULT, FeatureFlags.DEFAULT_FLAGS); + WorldLoader.PackConfig dataPacks = new WorldLoader.PackConfig(resourcePackManager, wdc, false, true); + WorldLoader.InitConfig serverConfig = new WorldLoader.InitConfig(dataPacks, Commands.CommandSelection.DEDICATED, 4); + + WorldStem saveLoader = Util.blockUntilDone(executor -> WorldLoader.load(serverConfig, (dataLoadContext) -> { + LevelSettings dataGenLevel = new LevelSettings("Data Gen Level", GameType.CREATIVE, false, Difficulty.NORMAL, true, GAME_RULES, dataLoadContext.dataConfiguration()); + RegistryAccess.Frozen immutable = dataLoadContext.datapackDimensions().freeze(); + + PrimaryLevelData saveProperties = new PrimaryLevelData(dataGenLevel, WorldOptions.DEMO_OPTIONS, PrimaryLevelData.SpecialWorldProperty.FLAT, Lifecycle.stable()); + return new WorldLoader.DataLoadOutput<>(saveProperties, immutable); + }, WorldStem::new, Util.backgroundExecutor(), executor)).get(); + return SERVER_REGISTRY_MANAGER = saveLoader.registries().compositeAccess(); + } catch (ExecutionException e) { + throw new RuntimeException(e.getCause()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally { + lock.unlock(); + } + } +} diff --git a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java index 6cb70e5..cb427ea 100644 --- a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -2,15 +2,14 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableSortedSet; +import com.google.common.collect.Iterators; import com.google.common.io.MoreFiles; import com.squareup.javapoet.*; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; +import java.util.Iterator; import java.util.Set; import java.util.function.UnaryOperator; import java.util.regex.Pattern; @@ -48,10 +47,10 @@ protected RegistryClassDumper(ClassName type, boolean nullable) { this.nullable = nullable; } - protected abstract Collection getIds(); + protected abstract Iterator getIds(); - protected Collection getDeprecatedIds() { - return Collections.emptySet(); + protected Iterator getDeprecatedIds() { + return Iterators.forArray(); } @Override diff --git a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java index c855ed7..1ebf416 100644 --- a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryDumper.java @@ -20,7 +20,7 @@ abstract class RegistryDumper extends AbstractDumper { protected RegistryDumper(File file) { this.file = file; - GsonBuilder builder = new GsonBuilder().setPrettyPrinting(); + GsonBuilder builder = new GsonBuilder(); registerAdapters(builder); gson = builder.create(); } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c053550b91381bbd28b1afc82d634bf73a8a..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 20829 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
;BmaEf^h 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index a9f778a..ac1b06f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,7 +71,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/settings.gradle.kts b/settings.gradle.kts index 739abbd..5f3856d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,18 +6,12 @@ include("1.15.2") include("1.16.5") include("1.17.1") include("1.18.2") +include("1.19.4") pluginManagement { repositories { mavenCentral() gradlePluginPortal() - maven { - name = "Forge Maven" - url = uri("https://maven.minecraftforge.net/") - content { - includeGroupByRegex("net\\.minecraftforge\\..*") - } - } maven { name = "Fabric" url = uri("https://maven.fabricmc.net/") From 329de65d6f43628c1c0e11d71c4a03eea78a441f Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Tue, 8 Aug 2023 15:11:26 -0400 Subject: [PATCH 08/18] Add 1.20.1 dumpers --- 1.18.2/build.gradle.kts | 3 - 1.20.1/.gitignore | 79 +++++++++ 1.20.1/build.gradle.kts | 19 +++ .../org/enginehub/util/minecraft/RunAll.java | 19 +++ .../minecraft/dumper/BiomeTypesDumper.java | 74 +++++++++ .../dumper/BlockCategoriesDumper.java | 38 +++++ .../minecraft/dumper/BlockRegistryDumper.java | 155 ++++++++++++++++++ .../minecraft/dumper/BlockTypesDumper.java | 39 +++++ .../minecraft/dumper/DataVersionDumper.java | 138 ++++++++++++++++ .../dumper/EntityTypeCategoriesDumper.java | 29 ++++ .../minecraft/dumper/EntityTypesDumper.java | 37 +++++ .../dumper/ItemCategoriesDumper.java | 38 +++++ .../minecraft/dumper/ItemRegistryDumper.java | 60 +++++++ .../minecraft/dumper/ItemTypesDumper.java | 42 +++++ .../util/minecraft/util/GameSetupUtils.java | 72 ++++++++ settings.gradle.kts | 1 + 16 files changed, 840 insertions(+), 3 deletions(-) create mode 100644 1.20.1/.gitignore create mode 100644 1.20.1/build.gradle.kts create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/RunAll.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java create mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java diff --git a/1.18.2/build.gradle.kts b/1.18.2/build.gradle.kts index 712cece..4e41c71 100644 --- a/1.18.2/build.gradle.kts +++ b/1.18.2/build.gradle.kts @@ -1,5 +1,3 @@ -//import net.fabricmc.loom.api.LoomGradleExtensionAPI - plugins { java id("fabric-loom") version "0.13.20" @@ -12,7 +10,6 @@ dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.18.2") mappings("net.fabricmc:yarn:1.18.2+build.4:v2") -// mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") implementation("com.squareup:javapoet:${project.property("javapoet.version")}") compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") diff --git a/1.20.1/.gitignore b/1.20.1/.gitignore new file mode 100644 index 0000000..5502819 --- /dev/null +++ b/1.20.1/.gitignore @@ -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 + diff --git a/1.20.1/build.gradle.kts b/1.20.1/build.gradle.kts new file mode 100644 index 0000000..f44ea8d --- /dev/null +++ b/1.20.1/build.gradle.kts @@ -0,0 +1,19 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + +plugins { + java + id("fabric-loom") version "0.13.20" +} + +group = "org.enginehub" +version = "1.0.0-SNAPSHOT" + +dependencies { + implementation(project(mapOf("path" to ":core"))) + minecraft("com.mojang:minecraft:1.20.1") + mappings(project.the().officialMojangMappings()) + modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/RunAll.java new file mode 100644 index 0000000..1be5b9d --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -0,0 +1,19 @@ +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(); + GameSetupUtils.getServerRegistries(); + for (Dumper dumper : ServiceLoader.load(Dumper.class)) { + System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); + dumper.run(); + System.out.println("Finished!"); + } + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java new file mode 100644 index 0000000..90fe7c0 --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -0,0 +1,74 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +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(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.BIOME).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "nether", + "tall_birch_forest", + "giant_tree_taiga", + "giant_spruce_taiga", + "snowy_tundra", + "jungle_edge", + "stone_shore", + "mountains", + "wooded_mountains", + "gravelly_mountains", + "shattered_savanna", + "wooded_badlands_plateau", + "badlands_plateau", + "bamboo_jungle_hills", + "birch_forest_hills", + "dark_forest_hills", + "deep_warm_ocean", + "desert_hills", + "desert_lakes", + "giant_spruce_taiga_hills", + "giant_tree_taiga_hills", + "modified_gravelly_hills", + "jungle_hills", + "modified_badlands_plateau", + "modified_jungle", + "modified_jungle_edge", + "modified_wooded_badlands_plateau", + "mountain_edge", + "mushroom_field_shore", + "shattered_savanna_plateau", + "snowy_mountains", + "snowy_taiga_hills", + "snowy_taiga_mountains", + "swamp_hills", + "taiga_hills", + "taiga_mountains", + "tall_birch_hills", + "wooded_hills" + ); + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java new file mode 100644 index 0000000..33d191c --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -0,0 +1,38 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class BlockCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new BlockCategoriesDumper().run(); + } + + public BlockCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "dirt_like", + "carpets", + "lava_pool_stone_replaceables" + ); + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java new file mode 100644 index 0000000..226e542 --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -0,0 +1,155 @@ +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.Vec3i; +import net.minecraft.core.registries.Registries; +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.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.MapColor; +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.lang.reflect.Field; +import java.util.*; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class BlockRegistryDumper extends RegistryDumper { + + private static final AABB FULL_CUBE = AABB.unitCubeFromLowerCorner(Vec3.ZERO); + + 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 getIds() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).keySet().stream().map(ResourceLocation::toString).toList(); + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(String resourceLocation) { + Block block = getServerRegistries().registryOrThrow(Registries.BLOCK).get(new ResourceLocation(resourceLocation)); + Map map = new TreeMap<>(); + map.put("id", resourceLocation); + map.put("localizedName", Language.getInstance().getOrDefault(block.getDescriptionId())); + map.put("material", getMaterial(block)); + return Lists.newArrayList(map); + } + + private Map getMaterial(Block b) { + BlockState bs = b.defaultBlockState(); + Field mapColorField; + try { + mapColorField = BlockBehaviour.BlockStateBase.class.getDeclaredField("mapColor"); + mapColorField.setAccessible(true); + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } + Map 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.isTranslucent(EmptyBlockGetter.INSTANCE, BlockPos.ZERO)); + map.put("liquid", bs.liquid()); + map.put("solid", bs.isSolid()); + map.put("movementBlocker", bs.blocksMotion()); + map.put("burnable", bs.ignitedByLava()); + map.put("opaque", bs.canOcclude()); + map.put("replacedDuringPlacement", bs.canBeReplaced()); + map.put("toolRequired", bs.requiresCorrectToolForDrops()); + map.put("fragileWhenPushed", bs.getPistonPushReaction() == PushReaction.DESTROY); + map.put("unpushable", bs.getPistonPushReaction() == PushReaction.BLOCK); + try { + map.put("mapColor", rgb(((MapColor) mapColorField.get(bs)).col)); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + map.put("hasContainer", b instanceof EntityBlock bep && bep.newBlockEntity(BlockPos.ZERO, bs) 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 { + @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 { + @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(); + } + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java new file mode 100644 index 0000000..b0d23eb --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -0,0 +1,39 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +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(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "sign", + "wall_sign", + "grass_path" + ); + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java new file mode 100644 index 0000000..806d11e --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -0,0 +1,138 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.minecraft.SharedConstants; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.*; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +import static com.google.common.base.Preconditions.checkNotNull; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class DataVersionDumper extends AbstractDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + File file = new File(OUTPUT, SharedConstants.getCurrentVersion().getDataVersion().getVersion() + ".json"); + new DataVersionDumper(file).run(); + } + } + + private final File file; + private final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + + public DataVersionDumper(File file) { + this.file = file; + } + + private Map> getTags(Registry registry) { + Map> tagCollector = new TreeMap<>(); + + registry.getTags().forEach(tagPair -> + tagCollector.put(tagPair.getFirst().location().toString(), tagPair.getSecond().stream() + .map(entry -> checkNotNull(registry.getKey(entry.value()))) + .map(ResourceLocation::toString) + .sorted() + .collect(Collectors.toList()))); + + return tagCollector; + } + + @SuppressWarnings("rawtypes") + private String getTypeName(Class clazz) { + if (clazz == EnumProperty.class) { + return "enum"; + } else if (clazz == IntegerProperty.class) { + return "int"; + } else if (clazz == BooleanProperty.class) { + return "bool"; + } else if (clazz == DirectionProperty.class) { + return "direction"; + } else { + throw new RuntimeException("Unknown property!"); + } + } + + @Override + public void run() { + // Blocks + Map> blocks = new TreeMap<>(); + for (ResourceLocation blockId : getServerRegistries().registryOrThrow(Registries.BLOCK).keySet()) { + Map bl = new TreeMap<>(); + Block block = getServerRegistries().registryOrThrow(Registries.BLOCK).get(blockId); + Map properties = new TreeMap<>(); + for (Property prop : block.defaultBlockState().getProperties()) { + Map propertyValues = new TreeMap<>(); + propertyValues.put("values", prop.getPossibleValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("type", getTypeName(prop.getClass())); + properties.put(prop.getName(), propertyValues); + } + bl.put("properties", properties); + StringBuilder defaultState = new StringBuilder(); + defaultState.append(blockId.toString()); + if (!block.defaultBlockState().getValues().isEmpty()) { + List bits = new ArrayList<>(); + block.defaultBlockState().getValues().entrySet().stream() + .sorted(Comparator.comparing(e -> e.getKey().getName())) + .forEach(e -> + bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) + ); + defaultState.append("[").append(String.join(",", bits)).append("]"); + } + bl.put("defaultstate", defaultState.toString()); + blocks.put(blockId.toString(), bl); + } + + // Items + List items = getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); + + // Entities + List entities = getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); + + // Biomes + List biomes = getServerRegistries().registryOrThrow(Registries.BIOME).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); + + // BlockTags + Map> blockTags = getTags(getServerRegistries().registryOrThrow(Registries.BLOCK)); + + // ItemTags + Map> itemTags = getTags(getServerRegistries().registryOrThrow(Registries.ITEM)); + + // EntityTags + Map> entityTags = getTags(getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE)); + + Map output = new TreeMap<>(); + output.put("blocks", blocks); + output.put("items", items); + output.put("entities", entities); + output.put("biomes", biomes); + output.put("blocktags", blockTags); + output.put("itemtags", itemTags); + output.put("entitytags", entityTags); + + try { + Files.asCharSink(file, StandardCharsets.UTF_8).write(gson.toJson(output)); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java new file mode 100644 index 0000000..307afdf --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -0,0 +1,29 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypeCategoriesDumper extends RegistryClassDumper { + + // worldedit doesn't actually do entity type categories yet + public static void main(String[] args) { + setupGame(); + new EntityTypeCategoriesDumper().run(); + } + + public EntityTypeCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java new file mode 100644 index 0000000..40fdb2b --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -0,0 +1,37 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class EntityTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new EntityTypesDumper().run(); + } + + public EntityTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "zombie_pigman" + ); + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java new file mode 100644 index 0000000..a3f129f --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -0,0 +1,38 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemCategoriesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemCategoriesDumper().run(); + } + + public ItemCategoriesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ITEM).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "carpets", + "furnace_materials", + "occludes_vibration_signals" + ); + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java new file mode 100644 index 0000000..7db57ab --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -0,0 +1,60 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; + +import java.io.File; +import java.util.*; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +public class ItemRegistryDumper extends RegistryDumper { + + public static void main(String[] args) { + setupGame(); + new Default().run(); + } + + @AutoService(Dumper.class) + public static class Default implements Dumper { + @Override + public void run() { + new ItemRegistryDumper(new File(OUTPUT, "items.json")).run(); + } + } + + public ItemRegistryDumper(File file) { + super(file); + } + + @Override + public Collection getIds() { + return getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().map(ResourceLocation::toString).toList(); + } + + @Override + public Comparator> getComparator() { + return Comparator.comparing(map -> (String) map.get("id")); + } + + @Override + public List> getProperties(String resourceLocation) { + Item item = getServerRegistries().registryOrThrow(Registries.ITEM).get(new ResourceLocation(resourceLocation)); + List> maps = new ArrayList<>(); + maps.add(getPropertiesForItem(resourceLocation, item)); + return maps; + } + + private Map getPropertiesForItem(String resourceLocation, Item item) { + Map map = new TreeMap<>(); + map.put("id", resourceLocation); + map.put("unlocalizedName", item.getDescriptionId(item.getDefaultInstance())); + map.put("localizedName", item.getName(item.getDefaultInstance()).getString()); + map.put("maxDamage", item.getMaxDamage()); + map.put("maxStackSize", item.getMaxStackSize()); + return map; + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java new file mode 100644 index 0000000..aa89bce --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -0,0 +1,42 @@ +package org.enginehub.util.minecraft.dumper; + +import com.google.auto.service.AutoService; +import com.google.common.collect.Iterators; +import com.squareup.javapoet.ClassName; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; + +import java.util.Iterator; + +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; +import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; + +@AutoService(Dumper.class) +public class ItemTypesDumper extends RegistryClassDumper { + + public static void main(String[] args) { + setupGame(); + new ItemTypesDumper().run(); + } + + public ItemTypesDumper() { + super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + } + + @Override + protected Iterator getIds() { + return getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().map(ResourceLocation::getPath).iterator(); + } + + @Override + protected Iterator getDeprecatedIds() { + return Iterators.forArray( + "cactus_green", + "dandelion_yellow", + "rose_red", + "sign", + "zombie_pigman_spawn_egg", + "grass_path" + ); + } +} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java new file mode 100644 index 0000000..4d39438 --- /dev/null +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -0,0 +1,72 @@ +package org.enginehub.util.minecraft.util; + +import com.mojang.serialization.Lifecycle; +import net.minecraft.SharedConstants; +import net.minecraft.Util; +import net.minecraft.commands.Commands; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.Bootstrap; +import net.minecraft.server.WorldLoader; +import net.minecraft.server.WorldStem; +import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.*; +import net.minecraft.world.level.levelgen.WorldOptions; +import net.minecraft.world.level.storage.PrimaryLevelData; +import org.enginehub.util.minecraft.dumper.AbstractDumper; + +import java.io.File; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public final class GameSetupUtils { + + public static void setupGame() { + SharedConstants.tryDetectVersion(); + Bootstrap.bootStrap(); + + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); + } + + private static final Lock lock = new ReentrantLock(); + private static final GameRules GAME_RULES = Util.make(new GameRules(), gameRules -> { + gameRules.getRule(GameRules.RULE_DOMOBSPAWNING).set(false, null); + gameRules.getRule(GameRules.RULE_WEATHER_CYCLE).set(false, null); + }); + private static RegistryAccess SERVER_REGISTRY_MANAGER; + + public static RegistryAccess getServerRegistries() { + setupGame(); + lock.lock(); + try { + RegistryAccess localResources = SERVER_REGISTRY_MANAGER; + if (localResources != null) { + return localResources; + } + PackRepository resourcePackManager = new PackRepository( + new ServerPacksSource() + ); + WorldDataConfiguration wdc = new WorldDataConfiguration(DataPackConfig.DEFAULT, FeatureFlags.DEFAULT_FLAGS); + WorldLoader.PackConfig dataPacks = new WorldLoader.PackConfig(resourcePackManager, wdc, false, true); + WorldLoader.InitConfig serverConfig = new WorldLoader.InitConfig(dataPacks, Commands.CommandSelection.DEDICATED, 4); + + WorldStem saveLoader = Util.blockUntilDone(executor -> WorldLoader.load(serverConfig, (dataLoadContext) -> { + LevelSettings dataGenLevel = new LevelSettings("Data Gen Level", GameType.CREATIVE, false, Difficulty.NORMAL, true, GAME_RULES, dataLoadContext.dataConfiguration()); + RegistryAccess.Frozen immutable = dataLoadContext.datapackDimensions().freeze(); + + PrimaryLevelData saveProperties = new PrimaryLevelData(dataGenLevel, WorldOptions.DEMO_OPTIONS, PrimaryLevelData.SpecialWorldProperty.FLAT, Lifecycle.stable()); + return new WorldLoader.DataLoadOutput<>(saveProperties, immutable); + }, WorldStem::new, Util.backgroundExecutor(), executor)).get(); + return SERVER_REGISTRY_MANAGER = saveLoader.registries().compositeAccess(); + } catch (ExecutionException e) { + throw new RuntimeException(e.getCause()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally { + lock.unlock(); + } + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 5f3856d..08d725d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,6 +7,7 @@ include("1.16.5") include("1.17.1") include("1.18.2") include("1.19.4") +include("1.20.1") pluginManagement { repositories { From be4718f1965f1241aaf98c4e2f1b35847baac6f8 Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 28 Aug 2023 15:45:37 -0400 Subject: [PATCH 09/18] Migrate 1.18.2 module to official Mojang mappings --- 1.18.2/build.gradle.kts | 4 +- .../minecraft/dumper/BiomeTypesDumper.java | 6 +- .../dumper/BlockCategoriesDumper.java | 6 +- .../minecraft/dumper/BlockRegistryDumper.java | 90 +++++++++---------- .../minecraft/dumper/BlockTypesDumper.java | 6 +- .../minecraft/dumper/DataVersionDumper.java | 34 +++---- .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 6 +- .../dumper/ItemCategoriesDumper.java | 6 +- .../minecraft/dumper/ItemRegistryDumper.java | 16 ++-- .../minecraft/dumper/ItemTypesDumper.java | 6 +- .../util/minecraft/util/GameSetupUtils.java | 53 +++++------ 12 files changed, 122 insertions(+), 117 deletions(-) diff --git a/1.18.2/build.gradle.kts b/1.18.2/build.gradle.kts index 4e41c71..caecc13 100644 --- a/1.18.2/build.gradle.kts +++ b/1.18.2/build.gradle.kts @@ -1,3 +1,5 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + plugins { java id("fabric-loom") version "0.13.20" @@ -9,7 +11,7 @@ version = "1.0.0-SNAPSHOT" dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.18.2") - mappings("net.fabricmc:yarn:1.18.2+build.4:v2") + mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") implementation("com.squareup:javapoet:${project.property("javapoet.version")}") compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index c8439e3..648539b 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,7 +25,7 @@ public BiomeTypesDumper() { @Override protected Iterator getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).iterator(); + return getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index ddefe33..d719f3f 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,7 +25,7 @@ public BlockCategoriesDumper() { @Override protected Iterator getIds() { - return getServerRegistry().get(Registry.BLOCK_KEY).getIds().stream().map(Identifier::getPath).iterator(); + return getServerRegistry().registryOrThrow(Registry.BLOCK_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index d1dd22c..c9eff23 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -6,21 +6,21 @@ import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.util.Clearable; -import net.minecraft.util.Identifier; -import net.minecraft.util.Language; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.EmptyBlockView; +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.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; @@ -30,7 +30,7 @@ public class BlockRegistryDumper extends RegistryDumper { - private static final Box FULL_CUBE = Box.from(Vec3d.ZERO); + private static final AABB FULL_CUBE = AABB.unitCubeFromLowerCorner(Vec3.ZERO); public BlockRegistryDumper(File file) { super(file); @@ -46,12 +46,12 @@ public void registerAdapters(GsonBuilder builder) { super.registerAdapters(builder); builder.registerTypeAdapter(Vec3i.class, new Vec3iAdapter()); - builder.registerTypeAdapter(Vec3d.class, new Vec3dAdapter()); + builder.registerTypeAdapter(Vec3.class, new Vec3dAdapter()); } @Override public Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -61,42 +61,42 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); + Block block = Registry.BLOCK.get(new ResourceLocation(resourceLocation)); Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); + map.put("localizedName", Language.getInstance().getOrDefault(block.getDescriptionId())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); } private Map getMaterial(Block b) { - BlockState bs = b.getDefaultState(); + BlockState bs = b.defaultBlockState(); Map map = new TreeMap<>(); - map.put("powerSource", bs.emitsRedstonePower()); - map.put("lightValue", bs.getLuminance()); - map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); - map.put("resistance", b.getBlastResistance()); - map.put("ticksRandomly", b.hasRandomTicks(bs)); - VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); - map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); - map.put("slipperiness", b.getSlipperiness()); - map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + 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.blocksMovement()); - map.put("burnable", m.isBurnable()); - map.put("opaque", m.blocksLight()); + map.put("movementBlocker", m.blocksMotion()); + map.put("burnable", m.isFlammable()); + map.put("opaque", m.isSolidBlocking()); map.put("replacedDuringPlacement", m.isReplaceable()); - map.put("toolRequired", bs.isToolRequired()); - map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); - map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); - map.put("mapColor", rgb(m.getColor().color)); - map.put("hasContainer", b instanceof BlockEntityProvider bep && bep.createBlockEntity(BlockPos.ORIGIN, bs) instanceof Clearable); + map.put("toolRequired", bs.requiresCorrectToolForDrops()); + 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(BlockPos.ZERO, bs) instanceof Clearable); return map; } - private boolean isFullCube(Box aabb) { + private boolean isFullCube(AABB aabb) { return aabb.equals(FULL_CUBE); } @@ -124,18 +124,18 @@ public void write(final JsonWriter out, final Vec3i vec) throws IOException { } } - public static class Vec3dAdapter extends TypeAdapter { + public static class Vec3dAdapter extends TypeAdapter { @Override - public Vec3d read(final JsonReader in) { + public Vec3 read(final JsonReader in) { throw new UnsupportedOperationException(); } @Override - public void write(final JsonWriter out, final Vec3d vec) throws IOException { + public void write(final JsonWriter out, final Vec3 vec) throws IOException { out.beginArray(); - out.value(vec.getX()); - out.value(vec.getY()); - out.value(vec.getZ()); + out.value(vec.x()); + out.value(vec.y()); + out.value(vec.z()); out.endArray(); } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 4183236..aab9ffe 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public BlockTypesDumper() { @Override protected Iterator getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 5603de5..5e1065c 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -5,10 +5,10 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; -import net.minecraft.block.Block; -import net.minecraft.state.property.*; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.*; import java.io.File; import java.io.IOException; @@ -31,7 +31,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - File file = new File(OUTPUT, SharedConstants.getGameVersion().getSaveVersion().getId() + ".json"); + File file = new File(OUTPUT, SharedConstants.getCurrentVersion().getDataVersion().getVersion() + ".json"); new DataVersionDumper(file).run(); } } @@ -46,9 +46,9 @@ public DataVersionDumper(File file) { private Map> getTags(Registry registry) { Map> tagCollector = new TreeMap<>(); - registry.streamTagsAndEntries().forEach(tagPair -> - tagCollector.put(tagPair.getFirst().id().toString(), tagPair.getSecond().stream() - .map(entry -> checkNotNull(registry.getKey(entry.value()))) + registry.getTags().forEach(tagPair -> + tagCollector.put(tagPair.getFirst().location().toString(), tagPair.getSecond().stream() + .map(entry -> checkNotNull(registry.getResourceKey(entry.value()))) .map(Optional::toString) .sorted() .collect(Collectors.toList()))); @@ -60,7 +60,7 @@ private Map> getTags(Registry registry) { private String getTypeName(Class clazz) { if (clazz == EnumProperty.class) { return "enum"; - } else if (clazz == IntProperty.class) { + } else if (clazz == IntegerProperty.class) { return "int"; } else if (clazz == BooleanProperty.class) { return "bool"; @@ -75,22 +75,22 @@ private String getTypeName(Class clazz) { public void run() { // Blocks Map> blocks = new TreeMap<>(); - for (Identifier blockId : Registry.BLOCK.getIds()) { + for (ResourceLocation blockId : Registry.BLOCK.keySet()) { Map bl = new TreeMap<>(); Block block = Registry.BLOCK.get(blockId); Map properties = new TreeMap<>(); - for (Property prop : block.getDefaultState().getProperties()) { + for (Property prop : block.defaultBlockState().getProperties()) { Map propertyValues = new TreeMap<>(); - propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("values", prop.getPossibleValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); propertyValues.put("type", getTypeName(prop.getClass())); properties.put(prop.getName(), propertyValues); } bl.put("properties", properties); StringBuilder defaultState = new StringBuilder(); defaultState.append(blockId.toString()); - if (!block.getDefaultState().getEntries().isEmpty()) { + if (!block.defaultBlockState().getValues().isEmpty()) { List bits = new ArrayList<>(); - block.getDefaultState().getEntries().entrySet().stream() + block.defaultBlockState().getValues().entrySet().stream() .sorted(Comparator.comparing(e -> e.getKey().getName())) .forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) @@ -102,13 +102,13 @@ public void run() { } // Items - List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List items = Registry.ITEM.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Entities - List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List entities = Registry.ENTITY_TYPE.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Biomes - List biomes = getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List biomes = getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // BlockTags Map> blockTags = getTags(Registry.BLOCK); diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 30310c9..ba2d588 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,6 +25,6 @@ public EntityTypeCategoriesDumper() { @Override protected Iterator getIds() { - return getServerRegistry().get(Registry.ENTITY_TYPE_KEY).getIds().stream().map(Identifier::getPath).iterator(); + return getServerRegistry().registryOrThrow(Registry.ENTITY_TYPE_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 21f99c9..3ed82c1 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public EntityTypesDumper() { @Override protected Iterator getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index a9e8633..76e87d2 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,7 +25,7 @@ public ItemCategoriesDumper() { @Override protected Iterator getIds() { - return getServerRegistry().get(Registry.ITEM_KEY).getIds().stream().map(Identifier::getPath).iterator(); + return getServerRegistry().registryOrThrow(Registry.ITEM_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 4607ce2..890b78a 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -1,9 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; import java.io.File; import java.util.*; @@ -31,7 +31,7 @@ public ItemRegistryDumper(File file) { @Override public Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -41,7 +41,7 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Item item = Registry.ITEM.get(new Identifier(resourceLocation)); + Item item = Registry.ITEM.get(new ResourceLocation(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; @@ -50,10 +50,10 @@ public List> getProperties(String resourceLocation) { private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); - map.put("localizedName", item.getName(item.getDefaultStack()).getString()); + map.put("unlocalizedName", item.getDescriptionId(item.getDefaultInstance())); + map.put("localizedName", item.getName(item.getDefaultInstance()).getString()); map.put("maxDamage", item.getMaxDamage()); - map.put("maxStackSize", item.getMaxCount()); + map.put("maxStackSize", item.getMaxStackSize()); return map; } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 1201111..ede5cf4 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public ItemTypesDumper() { @Override protected Iterator getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 66661de..fbdca23 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -1,13 +1,17 @@ package org.enginehub.util.minecraft.util; import com.google.common.util.concurrent.Futures; -import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; -import net.minecraft.resource.*; -import net.minecraft.server.DataPackContents; +import net.minecraft.commands.Commands; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.Bootstrap; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.command.CommandManager; -import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.server.ReloadableServerResources; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.server.packs.resources.MultiPackResourceManager; +import net.minecraft.world.level.DataPackConfig; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; @@ -19,39 +23,38 @@ public final class GameSetupUtils { public static void setupGame() { - SharedConstants.createGameVersion(); - // FIXME Bootstrap can not properly initialize for 1.18.2 because calling it leads to an IllegalAccessError later down the call stack - Bootstrap.initialize(); + SharedConstants.tryDetectVersion(); + Bootstrap.bootStrap(); - AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); } private static final Lock lock = new ReentrantLock(); - private static DataPackContents SERVER_RESOURCES; - private static DynamicRegistryManager SERVER_REGISTRY; + private static ReloadableServerResources SERVER_RESOURCES; + private static RegistryAccess SERVER_REGISTRY; - public static DataPackContents getServerResources() { + public static ReloadableServerResources getServerResources() { setupGame(); lock.lock(); try { - DataPackContents localResources = SERVER_RESOURCES; + ReloadableServerResources localResources = SERVER_RESOURCES; if (localResources != null) { return localResources; } - ResourcePackManager resourcePackManager = new ResourcePackManager( - ResourceType.SERVER_DATA, - new VanillaDataPackProvider() + PackRepository resourcePackManager = new PackRepository( + PackType.SERVER_DATA, + new ServerPacksSource() ); - MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); - DynamicRegistryManager.Immutable immutable = DynamicRegistryManager.BUILTIN.get(); - LifecycledResourceManagerImpl lifecycledResourceManager = new LifecycledResourceManagerImpl(ResourceType.SERVER_DATA, resourcePackManager.createResourcePacks()); - CompletableFuture completableFuture = (DataPackContents.reload(lifecycledResourceManager, immutable, CommandManager.RegistrationEnvironment.DEDICATED, 0, ForkJoinPool.commonPool(), Runnable::run).whenComplete((dataPackContents, throwable) -> { + MinecraftServer.configurePackRepository(resourcePackManager, DataPackConfig.DEFAULT, true); + RegistryAccess.Frozen immutable = RegistryAccess.BUILTIN.get(); + MultiPackResourceManager lifecycledResourceManager = new MultiPackResourceManager(PackType.SERVER_DATA, resourcePackManager.openAllSelected()); + CompletableFuture completableFuture = (ReloadableServerResources.loadResources(lifecycledResourceManager, immutable, Commands.CommandSelection.DEDICATED, 0, ForkJoinPool.commonPool(), Runnable::run).whenComplete((dataPackContents, throwable) -> { if (throwable != null) { lifecycledResourceManager.close(); } })); - DataPackContents manager = Futures.getUnchecked(completableFuture); - manager.refresh(immutable); + ReloadableServerResources manager = Futures.getUnchecked(completableFuture); + manager.updateRegistryTags(immutable); SERVER_RESOURCES = manager; return manager; } finally { @@ -59,14 +62,14 @@ public static DataPackContents getServerResources() { } } - public static DynamicRegistryManager getServerRegistry() { + public static RegistryAccess getServerRegistry() { lock.lock(); try { - DynamicRegistryManager localResources = SERVER_REGISTRY; + RegistryAccess localResources = SERVER_REGISTRY; if (localResources != null) { return localResources; } - DynamicRegistryManager manager = DynamicRegistryManager.BUILTIN.get(); + RegistryAccess manager = RegistryAccess.BUILTIN.get(); SERVER_REGISTRY = manager; return manager; } finally { From bbf5ac51f5eff2c12eee171bd578c4418cc6767a Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 28 Aug 2023 15:57:52 -0400 Subject: [PATCH 10/18] Migrate 1.17.1 module to official Mojang mappings May as well do this to all of them. --- 1.17.1/build.gradle.kts | 4 +- .../minecraft/dumper/BiomeTypesDumper.java | 6 +- .../dumper/BlockCategoriesDumper.java | 10 +- .../minecraft/dumper/BlockRegistryDumper.java | 92 +++++++++---------- .../minecraft/dumper/BlockTypesDumper.java | 6 +- .../minecraft/dumper/DataVersionDumper.java | 50 +++++----- .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 6 +- .../dumper/ItemCategoriesDumper.java | 6 +- .../minecraft/dumper/ItemRegistryDumper.java | 16 ++-- .../minecraft/dumper/ItemTypesDumper.java | 6 +- .../util/minecraft/util/GameSetupUtils.java | 52 ++++++----- 12 files changed, 133 insertions(+), 127 deletions(-) diff --git a/1.17.1/build.gradle.kts b/1.17.1/build.gradle.kts index 9ee2358..9c691a2 100644 --- a/1.17.1/build.gradle.kts +++ b/1.17.1/build.gradle.kts @@ -1,3 +1,5 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + plugins { java id("fabric-loom") version "0.13.20" @@ -9,7 +11,7 @@ version = "1.0.0-SNAPSHOT" dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.17.1") - mappings("net.fabricmc:yarn:1.17.1+build.2:v2") + mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") implementation("com.squareup:javapoet:${project.property("javapoet.version")}") compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index c5bcaf6..ea113e7 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,7 +25,7 @@ public BiomeTypesDumper() { @Override protected Iterator getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).iterator(); + return getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index e39c4da..7c7abb1 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,9 +25,9 @@ public BlockCategoriesDumper() { @Override protected Iterator getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup( - Registry.BLOCK_KEY - ).getTagIds().stream().map(Identifier::getPath).iterator(); + return getServerResources().getTags().getOrEmpty( + Registry.BLOCK_REGISTRY + ).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 1a26eae..b3b523c 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -6,21 +6,21 @@ import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.util.Clearable; -import net.minecraft.util.Identifier; -import net.minecraft.util.Language; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.EmptyBlockView; +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.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; @@ -30,7 +30,7 @@ public class BlockRegistryDumper extends RegistryDumper { - private static final Box FULL_CUBE = Box.from(Vec3d.ZERO); + private static final AABB FULL_CUBE = AABB.unitCubeFromLowerCorner(Vec3.ZERO); public BlockRegistryDumper(File file) { super(file); @@ -46,12 +46,12 @@ public void registerAdapters(GsonBuilder builder) { super.registerAdapters(builder); builder.registerTypeAdapter(Vec3i.class, new Vec3iAdapter()); - builder.registerTypeAdapter(Vec3d.class, new Vec3dAdapter()); + builder.registerTypeAdapter(Vec3.class, new Vec3dAdapter()); } @Override public Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -61,43 +61,43 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); + Block block = Registry.BLOCK.get(new ResourceLocation(resourceLocation)); Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); + map.put("localizedName", Language.getInstance().getOrDefault(block.getDescriptionId())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); } private Map getMaterial(Block b) { - BlockState bs = b.getDefaultState(); + BlockState bs = b.defaultBlockState(); Map map = new TreeMap<>(); - map.put("powerSource", bs.emitsRedstonePower()); - map.put("lightValue", bs.getLuminance()); - map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); - map.put("resistance", b.getBlastResistance()); - map.put("ticksRandomly", b.hasRandomTicks(bs)); - VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); - map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); - map.put("slipperiness", b.getSlipperiness()); - map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + 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.blocksMovement()); - map.put("burnable", m.isBurnable()); - map.put("opaque", m.blocksLight()); + map.put("movementBlocker", m.blocksMotion()); + map.put("burnable", m.isFlammable()); + map.put("opaque", m.isSolidBlocking()); map.put("replacedDuringPlacement", m.isReplaceable()); - map.put("toolRequired", bs.isToolRequired()); - map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); - map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); - map.put("mapColor", rgb(m.getColor().color)); - map.put("hasContainer", b instanceof BlockEntityProvider bep && - bep.createBlockEntity(BlockPos.ORIGIN, bs) instanceof Clearable); + map.put("toolRequired", bs.requiresCorrectToolForDrops()); + 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(BlockPos.ZERO, bs) instanceof Clearable); return map; } - private boolean isFullCube(Box aabb) { + private boolean isFullCube(AABB aabb) { return aabb.equals(FULL_CUBE); } @@ -125,18 +125,18 @@ public void write(final JsonWriter out, final Vec3i vec) throws IOException { } } - public static class Vec3dAdapter extends TypeAdapter { + public static class Vec3dAdapter extends TypeAdapter { @Override - public Vec3d read(final JsonReader in) { + public Vec3 read(final JsonReader in) { throw new UnsupportedOperationException(); } @Override - public void write(final JsonWriter out, final Vec3d vec) throws IOException { + public void write(final JsonWriter out, final Vec3 vec) throws IOException { out.beginArray(); - out.value(vec.getX()); - out.value(vec.getY()); - out.value(vec.getZ()); + out.value(vec.x()); + out.value(vec.y()); + out.value(vec.z()); out.endArray(); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index 4183236..aab9ffe 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public BlockTypesDumper() { @Override protected Iterator getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 29b2d63..aa68471 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -5,12 +5,12 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; -import net.minecraft.block.Block; -import net.minecraft.state.property.*; -import net.minecraft.tag.TagGroup; -import net.minecraft.tag.TagManager; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagCollection; +import net.minecraft.tags.TagContainer; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.*; import java.io.File; import java.io.IOException; @@ -32,7 +32,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + File file = new File(OUTPUT, SharedConstants.getCurrentVersion().getWorldVersion() + ".json"); new DataVersionDumper(file).run(); } } @@ -44,13 +44,13 @@ public DataVersionDumper(File file) { this.file = file; } - private Map> getTags(TagGroup provider, Registry registry) { + private Map> getTags(TagCollection provider, Registry registry) { Map> tagCollector = new TreeMap<>(); - provider.getTags().forEach((key, value) -> - tagCollector.put(key.toString(), value.values().stream() - .map(entry -> checkNotNull(registry.getId(entry))) - .map(Identifier::toString) + provider.getAllTags().forEach((key, value) -> + tagCollector.put(key.toString(), value.getValues().stream() + .map(entry -> checkNotNull(registry.getKey(entry))) + .map(ResourceLocation::toString) .sorted() .collect(Collectors.toList()))); @@ -61,7 +61,7 @@ private Map> getTags(TagGroup provider, Registry private String getTypeName(Class clazz) { if (clazz == EnumProperty.class) { return "enum"; - } else if (clazz == IntProperty.class) { + } else if (clazz == IntegerProperty.class) { return "int"; } else if (clazz == BooleanProperty.class) { return "bool"; @@ -76,22 +76,22 @@ private String getTypeName(Class clazz) { public void run() { // Blocks Map> blocks = new TreeMap<>(); - for (Identifier blockId : Registry.BLOCK.getIds()) { + for (ResourceLocation blockId : Registry.BLOCK.keySet()) { Map bl = new TreeMap<>(); Block block = Registry.BLOCK.get(blockId); Map properties = new TreeMap<>(); - for (Property prop : block.getDefaultState().getProperties()) { + for (Property prop : block.defaultBlockState().getProperties()) { Map propertyValues = new TreeMap<>(); - propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("values", prop.getPossibleValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); propertyValues.put("type", getTypeName(prop.getClass())); properties.put(prop.getName(), propertyValues); } bl.put("properties", properties); StringBuilder defaultState = new StringBuilder(); defaultState.append(blockId.toString()); - if (!block.getDefaultState().getEntries().isEmpty()) { + if (!block.defaultBlockState().getValues().isEmpty()) { List bits = new ArrayList<>(); - block.getDefaultState().getEntries().entrySet().stream() + block.defaultBlockState().getValues().entrySet().stream() .sorted(Comparator.comparing(e -> e.getKey().getName())) .forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) @@ -103,23 +103,23 @@ public void run() { } // Items - List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List items = Registry.ITEM.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Entities - List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List entities = Registry.ENTITY_TYPE.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Biomes - List biomes = getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List biomes = getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); - TagManager tagManager = getServerResources().getRegistryTagManager(); + TagContainer tagManager = getServerResources().getTags(); // BlockTags - Map> blockTags = getTags(tagManager.getOrCreateTagGroup(Registry.BLOCK_KEY), Registry.BLOCK); + Map> blockTags = getTags(tagManager.getOrEmpty(Registry.BLOCK_REGISTRY), Registry.BLOCK); // ItemTags - Map> itemTags = getTags(tagManager.getOrCreateTagGroup(Registry.ITEM_KEY), Registry.ITEM); + Map> itemTags = getTags(tagManager.getOrEmpty(Registry.ITEM_REGISTRY), Registry.ITEM); // EntityTags - Map> entityTags = getTags(tagManager.getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY), Registry.ENTITY_TYPE); + Map> entityTags = getTags(tagManager.getOrEmpty(Registry.ENTITY_TYPE_REGISTRY), Registry.ENTITY_TYPE); Map output = new TreeMap<>(); output.put("blocks", blocks); diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 804c149..2f331ff 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,6 +25,6 @@ public EntityTypeCategoriesDumper() { @Override protected Iterator getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ENTITY_TYPE_KEY).getTagIds().stream().map(Identifier::getPath).iterator(); + return getServerResources().getTags().getOrEmpty(Registry.ENTITY_TYPE_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 21f99c9..3ed82c1 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public EntityTypesDumper() { @Override protected Iterator getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 6101ee3..7a71ab8 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,7 +25,7 @@ public ItemCategoriesDumper() { @Override protected Iterator getIds() { - return getServerResources().getRegistryTagManager().getOrCreateTagGroup(Registry.ITEM_KEY).getTagIds().stream().map(Identifier::getPath).iterator(); + return getServerResources().getTags().getOrEmpty(Registry.ITEM_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 4607ce2..890b78a 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -1,9 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; import java.io.File; import java.util.*; @@ -31,7 +31,7 @@ public ItemRegistryDumper(File file) { @Override public Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -41,7 +41,7 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Item item = Registry.ITEM.get(new Identifier(resourceLocation)); + Item item = Registry.ITEM.get(new ResourceLocation(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; @@ -50,10 +50,10 @@ public List> getProperties(String resourceLocation) { private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); - map.put("localizedName", item.getName(item.getDefaultStack()).getString()); + map.put("unlocalizedName", item.getDescriptionId(item.getDefaultInstance())); + map.put("localizedName", item.getName(item.getDefaultInstance()).getString()); map.put("maxDamage", item.getMaxDamage()); - map.put("maxStackSize", item.getMaxCount()); + map.put("maxStackSize", item.getMaxStackSize()); return map; } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 1201111..ede5cf4 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public ItemTypesDumper() { @Override protected Iterator getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 26473ac..1293e34 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -1,12 +1,16 @@ package org.enginehub.util.minecraft.util; import com.google.common.util.concurrent.Futures; -import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; -import net.minecraft.resource.*; +import net.minecraft.commands.Commands; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.Bootstrap; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.command.CommandManager; -import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.server.ServerResources; +import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.world.level.DataPackConfig; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; @@ -18,41 +22,41 @@ public final class GameSetupUtils { public static void setupGame() { - SharedConstants.createGameVersion(); - Bootstrap.initialize(); + SharedConstants.tryDetectVersion(); + Bootstrap.bootStrap(); - AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); } private static final Lock lock = new ReentrantLock(); - private static ServerResourceManager SERVER_RESOURCES; - private static DynamicRegistryManager SERVER_REGISTRY; + private static ServerResources SERVER_RESOURCES; + private static RegistryAccess SERVER_REGISTRY; - public static ServerResourceManager getServerResources() { + public static ServerResources getServerResources() { setupGame(); lock.lock(); try { - ServerResourceManager localResources = SERVER_RESOURCES; + ServerResources localResources = SERVER_RESOURCES; if (localResources != null) { return localResources; } - ResourcePackManager resourcePackManager = new ResourcePackManager( - ResourceType.SERVER_DATA, - new VanillaDataPackProvider() + PackRepository resourcePackManager = new PackRepository( + PackType.SERVER_DATA, + new ServerPacksSource() ); - MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); - DynamicRegistryManager.Impl impl = DynamicRegistryManager.create(); - CompletableFuture completableFuture = ServerResourceManager.reload( - resourcePackManager.createResourcePacks(), + MinecraftServer.configurePackRepository(resourcePackManager, DataPackConfig.DEFAULT, true); + RegistryAccess.RegistryHolder impl = RegistryAccess.builtin(); + CompletableFuture completableFuture = ServerResources.loadResources( + resourcePackManager.openAllSelected(), impl, - CommandManager.RegistrationEnvironment.DEDICATED, + Commands.CommandSelection.DEDICATED, // permission level doesn't matter 0, ForkJoinPool.commonPool(), Runnable::run ); - ServerResourceManager manager = Futures.getUnchecked(completableFuture); - manager.loadRegistryTags(); + ServerResources manager = Futures.getUnchecked(completableFuture); + manager.updateGlobals(); SERVER_RESOURCES = manager; return manager; } finally { @@ -60,14 +64,14 @@ public static ServerResourceManager getServerResources() { } } - public static DynamicRegistryManager getServerRegistry() { + public static RegistryAccess getServerRegistry() { lock.lock(); try { - DynamicRegistryManager localResources = SERVER_REGISTRY; + RegistryAccess localResources = SERVER_REGISTRY; if (localResources != null) { return localResources; } - DynamicRegistryManager manager = DynamicRegistryManager.create(); + RegistryAccess manager = RegistryAccess.builtin(); SERVER_REGISTRY = manager; return manager; } finally { From f6f7db0d3d7ad6b6d67b2ab0466c06ae2a372d31 Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 28 Aug 2023 16:29:19 -0400 Subject: [PATCH 11/18] Migrate 1.16.5 to official Mojang mappings --- 1.16.5/build.gradle.kts | 4 +- .../minecraft/dumper/BiomeTypesDumper.java | 6 +- .../dumper/BlockCategoriesDumper.java | 4 +- .../minecraft/dumper/BlockRegistryDumper.java | 88 +++++++++---------- .../minecraft/dumper/BlockTypesDumper.java | 6 +- .../minecraft/dumper/DataVersionDumper.java | 44 +++++----- .../dumper/EntityTypeCategoriesDumper.java | 4 +- .../minecraft/dumper/EntityTypesDumper.java | 6 +- .../dumper/ItemCategoriesDumper.java | 4 +- .../minecraft/dumper/ItemRegistryDumper.java | 16 ++-- .../minecraft/dumper/ItemTypesDumper.java | 6 +- .../util/minecraft/util/GameSetupUtils.java | 50 ++++++----- 12 files changed, 122 insertions(+), 116 deletions(-) diff --git a/1.16.5/build.gradle.kts b/1.16.5/build.gradle.kts index 3f7c845..1edef83 100644 --- a/1.16.5/build.gradle.kts +++ b/1.16.5/build.gradle.kts @@ -1,3 +1,5 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + plugins { java id("fabric-loom") version "0.13.20" @@ -9,7 +11,7 @@ version = "1.0.0-SNAPSHOT" dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.16.5") - mappings("net.fabricmc:yarn:1.16.5+build.2:v2") + mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") implementation("com.squareup:javapoet:${project.property("javapoet.version")}") compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index c5bcaf6..ea113e7 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -25,7 +25,7 @@ public BiomeTypesDumper() { @Override protected Iterator getIds() { - return getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().map(Identifier::getPath).iterator(); + return getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index e6c2462..1cdb781 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -3,7 +3,7 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public BlockCategoriesDumper() { @Override protected Iterator getIds() { - return getServerResources().getRegistryTagManager().getBlocks().getTagIds().stream().map(Identifier::getPath).iterator(); + return getServerResources().getTags().getBlocks().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index e704000..5fc2568 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -6,21 +6,21 @@ import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.util.Clearable; -import net.minecraft.util.Identifier; -import net.minecraft.util.Language; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.EmptyBlockView; +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.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; @@ -52,12 +52,12 @@ public void registerAdapters(GsonBuilder builder) { super.registerAdapters(builder); builder.registerTypeAdapter(Vec3i.class, new Vec3iAdapter()); - builder.registerTypeAdapter(Vec3d.class, new Vec3dAdapter()); + builder.registerTypeAdapter(Vec3.class, new Vec3dAdapter()); } @Override public Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -67,44 +67,44 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); + Block block = Registry.BLOCK.get(new ResourceLocation(resourceLocation)); Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("localizedName", Language.getInstance().get(block.getTranslationKey())); + map.put("localizedName", Language.getInstance().getOrDefault(block.getDescriptionId())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); } private Map getMaterial(Block b) { - BlockState bs = b.getDefaultState(); + BlockState bs = b.defaultBlockState(); Map map = new TreeMap<>(); - map.put("powerSource", bs.emitsRedstonePower()); - map.put("lightValue", bs.getLuminance()); - map.put("hardness", bs.getHardness(null, null)); - map.put("resistance", b.getBlastResistance()); - map.put("ticksRandomly", b.hasRandomTicks(bs)); - VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); - map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); - map.put("slipperiness", b.getSlipperiness()); + map.put("powerSource", bs.isSignalSource()); + map.put("lightValue", bs.getLightEmission()); + map.put("hardness", bs.getDestroySpeed(null, null)); + 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()); Material m = bs.getMaterial(); map.put("liquid", m.isLiquid()); map.put("solid", m.isSolid()); - map.put("movementBlocker", m.blocksMovement()); - map.put("burnable", m.isBurnable()); - map.put("opaque", m.blocksLight()); + map.put("movementBlocker", m.blocksMotion()); + map.put("burnable", m.isFlammable()); + map.put("opaque", m.isSolidBlocking()); map.put("replacedDuringPlacement", m.isReplaceable()); - map.put("toolRequired", bs.isToolRequired()); - map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); - map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); - map.put("mapColor", rgb(m.getColor().color)); - map.put("hasContainer", b instanceof BlockEntityProvider && ((BlockEntityProvider) b).createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable); + map.put("toolRequired", bs.requiresCorrectToolForDrops()); + 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 && ((EntityBlock) b).newBlockEntity(EmptyBlockGetter.INSTANCE) instanceof Clearable); return map; } // method_29968 -> adds one to get max - private static final Box FULL_CUBE = Box.method_29968(Vec3d.ZERO); + private static final AABB FULL_CUBE = AABB.unitCubeFromLowerCorner(Vec3.ZERO); - private boolean isFullCube(Box aabb) { + private boolean isFullCube(AABB aabb) { return aabb.equals(FULL_CUBE); } @@ -124,18 +124,18 @@ public void write(final JsonWriter out, final Vec3i vec) throws IOException { } } - public static class Vec3dAdapter extends TypeAdapter { + public static class Vec3dAdapter extends TypeAdapter { @Override - public Vec3d read(final JsonReader in) { + public Vec3 read(final JsonReader in) { throw new UnsupportedOperationException(); } @Override - public void write(final JsonWriter out, final Vec3d vec) throws IOException { + public void write(final JsonWriter out, final Vec3 vec) throws IOException { out.beginArray(); - out.value(vec.getX()); - out.value(vec.getY()); - out.value(vec.getZ()); + out.value(vec.x()); + out.value(vec.y()); + out.value(vec.z()); out.endArray(); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index a4f0185..dce3f85 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public BlockTypesDumper() { @Override protected Iterator getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index bf7c66e..b761c6f 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -5,12 +5,12 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; -import net.minecraft.block.Block; -import net.minecraft.state.property.*; -import net.minecraft.tag.TagGroup; -import net.minecraft.tag.TagManager; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagCollection; +import net.minecraft.tags.TagContainer; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.*; import java.io.File; import java.io.IOException; @@ -32,7 +32,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + File file = new File(OUTPUT, SharedConstants.getCurrentVersion().getWorldVersion() + ".json"); new DataVersionDumper(file).run(); } } @@ -44,13 +44,13 @@ public DataVersionDumper(File file) { this.file = file; } - private Map> getTags(TagGroup provider, Registry registry) { + private Map> getTags(TagCollection provider, Registry registry) { Map> tagCollector = new TreeMap<>(); - provider.getTags().forEach((key, value) -> - tagCollector.put(key.toString(), value.values().stream() - .map(entry -> checkNotNull(registry.getId(entry))) - .map(Identifier::toString) + provider.getAllTags().forEach((key, value) -> + tagCollector.put(key.toString(), value.getValues().stream() + .map(entry -> checkNotNull(registry.getKey(entry))) + .map(ResourceLocation::toString) .sorted() .collect(Collectors.toList()))); @@ -61,7 +61,7 @@ private Map> getTags(TagGroup provider, Registry private String getTypeName(Class clazz) { if (clazz == EnumProperty.class) { return "enum"; - } else if (clazz == IntProperty.class) { + } else if (clazz == IntegerProperty.class) { return "int"; } else if (clazz == BooleanProperty.class) { return "bool"; @@ -76,22 +76,22 @@ private String getTypeName(Class clazz) { public void run() { // Blocks Map> blocks = new TreeMap<>(); - for (Identifier blockId : Registry.BLOCK.getIds()) { + for (ResourceLocation blockId : Registry.BLOCK.keySet()) { Map bl = new TreeMap<>(); Block block = Registry.BLOCK.get(blockId); Map properties = new TreeMap<>(); - for (Property prop : block.getDefaultState().getProperties()) { + for (Property prop : block.defaultBlockState().getProperties()) { Map propertyValues = new TreeMap<>(); - propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("values", prop.getPossibleValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); propertyValues.put("type", getTypeName(prop.getClass())); properties.put(prop.getName(), propertyValues); } bl.put("properties", properties); StringBuilder defaultState = new StringBuilder(); defaultState.append(blockId.toString()); - if (!block.getDefaultState().getEntries().isEmpty()) { + if (!block.defaultBlockState().getValues().isEmpty()) { List bits = new ArrayList<>(); - block.getDefaultState().getEntries().entrySet().stream() + block.defaultBlockState().getValues().entrySet().stream() .sorted(Comparator.comparing(e -> e.getKey().getName())) .forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase()) @@ -103,15 +103,15 @@ public void run() { } // Items - List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List items = Registry.ITEM.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Entities - List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List entities = Registry.ENTITY_TYPE.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Biomes - List biomes = getServerRegistry().get(Registry.BIOME_KEY).getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List biomes = getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); - TagManager tagManager = getServerResources().getRegistryTagManager(); + TagContainer tagManager = getServerResources().getTags(); // BlockTags Map> blockTags = getTags(tagManager.getBlocks(), Registry.BLOCK); diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 1ccfef1..8ef992a 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -2,7 +2,7 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,6 +24,6 @@ public EntityTypeCategoriesDumper() { @Override protected Iterator getIds() { - return getServerResources().getRegistryTagManager().getEntityTypes().getTagIds().stream().map(Identifier::getPath).iterator(); + return getServerResources().getTags().getEntityTypes().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 21f99c9..3ed82c1 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public EntityTypesDumper() { @Override protected Iterator getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 0747c83..e374418 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -3,7 +3,7 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public ItemCategoriesDumper() { @Override protected Iterator getIds() { - return getServerResources().getRegistryTagManager().getItems().getTagIds().stream().map(Identifier::getPath).iterator(); + return getServerResources().getTags().getItems().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 4607ce2..890b78a 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -1,9 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; import java.io.File; import java.util.*; @@ -31,7 +31,7 @@ public ItemRegistryDumper(File file) { @Override public Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -41,7 +41,7 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Item item = Registry.ITEM.get(new Identifier(resourceLocation)); + Item item = Registry.ITEM.get(new ResourceLocation(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; @@ -50,10 +50,10 @@ public List> getProperties(String resourceLocation) { private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("unlocalizedName", item.getTranslationKey(item.getDefaultStack())); - map.put("localizedName", item.getName(item.getDefaultStack()).getString()); + map.put("unlocalizedName", item.getDescriptionId(item.getDefaultInstance())); + map.put("localizedName", item.getName(item.getDefaultInstance()).getString()); map.put("maxDamage", item.getMaxDamage()); - map.put("maxStackSize", item.getMaxCount()); + map.put("maxStackSize", item.getMaxStackSize()); return map; } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index a323b03..b0954ec 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public ItemTypesDumper() { @Override protected Iterator getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 24dcfc0..4527d15 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -1,12 +1,16 @@ package org.enginehub.util.minecraft.util; import com.google.common.util.concurrent.Futures; -import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; -import net.minecraft.resource.*; +import net.minecraft.commands.Commands; +import net.minecraft.core.RegistryAccess; +import net.minecraft.server.Bootstrap; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.command.CommandManager; -import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.server.ServerResources; +import net.minecraft.server.packs.repository.Pack; +import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.packs.repository.ServerPacksSource; +import net.minecraft.world.level.DataPackConfig; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; @@ -18,39 +22,39 @@ public final class GameSetupUtils { public static void setupGame() { - SharedConstants.getGameVersion(); - Bootstrap.initialize(); + SharedConstants.getCurrentVersion(); + Bootstrap.bootStrap(); - AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); } private static final Lock lock = new ReentrantLock(); - private static ServerResourceManager SERVER_RESOURCES; - private static DynamicRegistryManager SERVER_REGISTRY; + private static ServerResources SERVER_RESOURCES; + private static RegistryAccess SERVER_REGISTRY; - public static ServerResourceManager getServerResources() { + public static ServerResources getServerResources() { setupGame(); lock.lock(); try { - ServerResourceManager localResources = SERVER_RESOURCES; + ServerResources localResources = SERVER_RESOURCES; if (localResources != null) { return localResources; } - ResourcePackManager resourcePackManager = new ResourcePackManager( - ResourcePackProfile::new, - new VanillaDataPackProvider() + PackRepository resourcePackManager = new PackRepository( + Pack::new, + new ServerPacksSource() ); - MinecraftServer.loadDataPacks(resourcePackManager, DataPackSettings.SAFE_MODE, true); - CompletableFuture completableFuture = ServerResourceManager.reload( - resourcePackManager.createResourcePacks(), - CommandManager.RegistrationEnvironment.DEDICATED, + MinecraftServer.configurePackRepository(resourcePackManager, DataPackConfig.DEFAULT, true); + CompletableFuture completableFuture = ServerResources.loadResources( + resourcePackManager.openAllSelected(), + Commands.CommandSelection.DEDICATED, // permission level doesn't matter 0, ForkJoinPool.commonPool(), Runnable::run ); - ServerResourceManager manager = Futures.getUnchecked(completableFuture); - manager.loadRegistryTags(); + ServerResources manager = Futures.getUnchecked(completableFuture); + manager.updateGlobals(); SERVER_RESOURCES = manager; return manager; } finally { @@ -58,14 +62,14 @@ public static ServerResourceManager getServerResources() { } } - public static DynamicRegistryManager getServerRegistry() { + public static RegistryAccess getServerRegistry() { lock.lock(); try { - DynamicRegistryManager localResources = SERVER_REGISTRY; + RegistryAccess localResources = SERVER_REGISTRY; if (localResources != null) { return localResources; } - DynamicRegistryManager manager = DynamicRegistryManager.create(); + RegistryAccess manager = RegistryAccess.builtin(); SERVER_REGISTRY = manager; return manager; } finally { From c2c4fd495c54d5fed9bfed8bfc1747867141b3b4 Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 28 Aug 2023 19:24:16 -0400 Subject: [PATCH 12/18] Reduce repetition in Gradle build scripts I am not too experienced with Gradle, so feel free to change how I did this. --- 1.14.4/build.gradle.kts | 7 ------- 1.15.2/build.gradle.kts | 7 ------- 1.16.5/build.gradle.kts | 7 ------- 1.17.1/build.gradle.kts | 7 ------- 1.18.2/build.gradle.kts | 7 ------- 1.19.4/build.gradle.kts | 7 ------- 1.20.1/build.gradle.kts | 7 ------- build.gradle.kts | 32 ++++++++++++++++++++++++++++++++ core/build.gradle.kts | 18 ------------------ gradlew | 31 +++++++++++++++++++++++-------- gradlew.bat | 15 +++++++++------ 11 files changed, 64 insertions(+), 81 deletions(-) diff --git a/1.14.4/build.gradle.kts b/1.14.4/build.gradle.kts index 90da84e..7ba6061 100644 --- a/1.14.4/build.gradle.kts +++ b/1.14.4/build.gradle.kts @@ -1,17 +1,10 @@ plugins { - java id("fabric-loom") version "0.13.20" } -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.14.4") mappings("net.fabricmc:yarn:1.14.4+build.9:v2") modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.15.2/build.gradle.kts b/1.15.2/build.gradle.kts index 52fa011..69d741d 100644 --- a/1.15.2/build.gradle.kts +++ b/1.15.2/build.gradle.kts @@ -1,17 +1,10 @@ plugins { - java id("fabric-loom") version "0.13.20" } -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.15.2") mappings("net.fabricmc:yarn:1.15.2+build.9:v2") modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.16.5/build.gradle.kts b/1.16.5/build.gradle.kts index 1edef83..a2eb572 100644 --- a/1.16.5/build.gradle.kts +++ b/1.16.5/build.gradle.kts @@ -1,19 +1,12 @@ import net.fabricmc.loom.api.LoomGradleExtensionAPI plugins { - java id("fabric-loom") version "0.13.20" } -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.16.5") mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.17.1/build.gradle.kts b/1.17.1/build.gradle.kts index 9c691a2..13fea77 100644 --- a/1.17.1/build.gradle.kts +++ b/1.17.1/build.gradle.kts @@ -1,19 +1,12 @@ import net.fabricmc.loom.api.LoomGradleExtensionAPI plugins { - java id("fabric-loom") version "0.13.20" } -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.17.1") mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.18.2/build.gradle.kts b/1.18.2/build.gradle.kts index caecc13..4276c40 100644 --- a/1.18.2/build.gradle.kts +++ b/1.18.2/build.gradle.kts @@ -1,19 +1,12 @@ import net.fabricmc.loom.api.LoomGradleExtensionAPI plugins { - java id("fabric-loom") version "0.13.20" } -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.18.2") mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.19.4/build.gradle.kts b/1.19.4/build.gradle.kts index 97dc81d..fe4a868 100644 --- a/1.19.4/build.gradle.kts +++ b/1.19.4/build.gradle.kts @@ -1,19 +1,12 @@ import net.fabricmc.loom.api.LoomGradleExtensionAPI plugins { - java id("fabric-loom") version "0.13.20" } -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.19.4") mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/1.20.1/build.gradle.kts b/1.20.1/build.gradle.kts index f44ea8d..15e3222 100644 --- a/1.20.1/build.gradle.kts +++ b/1.20.1/build.gradle.kts @@ -1,19 +1,12 @@ import net.fabricmc.loom.api.LoomGradleExtensionAPI plugins { - java id("fabric-loom") version "0.13.20" } -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.20.1") mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") } diff --git a/build.gradle.kts b/build.gradle.kts index e69de29..404e700 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -0,0 +1,32 @@ +plugins { + java +} + +allprojects { + apply() + + repositories { + mavenCentral() + gradlePluginPortal() + maven { + name = "Fabric" + url = uri("https://maven.fabricmc.net/") + } + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } + } +} + +subprojects { + dependencies { + implementation("com.google.guava:guava:31.1-jre") + implementation("com.google.code.gson:gson:2.10.1") + implementation("com.squareup:javapoet:${project.property("javapoet.version")}") + compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") + annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") + } +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 172ad9b..e69de29 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,18 +0,0 @@ -plugins { - java -} - -group = "org.enginehub" -version = "1.0.0-SNAPSHOT" - -repositories { - mavenCentral() -} - -dependencies { - implementation("com.google.guava:guava:31.1-jre") - implementation("com.google.code.gson:gson:2.10.1") - implementation("com.squareup:javapoet:${project.property("javapoet.version")}") - compileOnly("com.google.auto.service:auto-service-annotations:${project.property("autoservice.version")}") - annotationProcessor("com.google.auto.service:auto-service:${project.property("autoservice.version")}") -} diff --git a/gradlew b/gradlew index 1b6c787..0adc8e1 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,6 +198,10 @@ if "$cygwin" || "$msys" ; then done fi + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Collect all arguments for the java command; # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # shell script including quotes and variable substitutions, so put them in @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f..6689b85 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From 2ac2549fa8302fba1aa9269dd3872c7bdf10893e Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 28 Aug 2023 19:24:24 -0400 Subject: [PATCH 13/18] Update Gradle wrapper --- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 63721 bytes gradle/wrapper/gradle-wrapper.properties | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44451 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 W0}GkPe@wIjfE;Yd41Mt9+y4Mm#rGos delta 40585 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�Kz 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fc..ac72c34 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From b5f011948980920b38e80c547e222593e7883c49 Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 28 Aug 2023 19:31:10 -0400 Subject: [PATCH 14/18] Migrate 1.15.2 module to official Mojang mappings --- 1.15.2/build.gradle.kts | 4 +- .../minecraft/dumper/BiomeTypesDumper.java | 6 +- .../dumper/BlockCategoriesDumper.java | 6 +- .../minecraft/dumper/BlockRegistryDumper.java | 90 ++++++++++--------- .../minecraft/dumper/BlockTypesDumper.java | 6 +- .../minecraft/dumper/DataVersionDumper.java | 50 +++++------ .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 6 +- .../dumper/ItemCategoriesDumper.java | 6 +- .../minecraft/dumper/ItemRegistryDumper.java | 16 ++-- .../minecraft/dumper/ItemTypesDumper.java | 6 +- .../util/minecraft/util/GameSetupUtils.java | 8 +- 12 files changed, 108 insertions(+), 102 deletions(-) diff --git a/1.15.2/build.gradle.kts b/1.15.2/build.gradle.kts index 69d741d..aa4eed4 100644 --- a/1.15.2/build.gradle.kts +++ b/1.15.2/build.gradle.kts @@ -1,3 +1,5 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + plugins { id("fabric-loom") version "0.13.20" } @@ -5,6 +7,6 @@ plugins { dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.15.2") - mappings("net.fabricmc:yarn:1.15.2+build.9:v2") + mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 1b1204e..5ab80ae 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -23,6 +23,6 @@ public BiomeTypesDumper() { @Override protected Iterator getIds() { - return Registry.BIOME.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.BIOME.keySet().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 523ef1a..46491fa 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.tag.BlockTags; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import java.util.Iterator; @@ -24,7 +24,7 @@ public BlockCategoriesDumper() { @Override protected Iterator getIds() { - return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); + return BlockTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 56048b4..1bc6358 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -6,18 +6,22 @@ import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.util.Clearable; -import net.minecraft.util.Identifier; -import net.minecraft.util.Language; -import net.minecraft.util.math.*; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.EmptyBlockView; +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; @@ -27,7 +31,7 @@ public class BlockRegistryDumper extends RegistryDumper { - private static final Box FULL_CUBE = Box.from(BlockBox.empty()); + private static final AABB FULL_CUBE = AABB.of(BoundingBox.getUnknownBox()); public BlockRegistryDumper(File file) { super(file); @@ -43,12 +47,12 @@ public void registerAdapters(GsonBuilder builder) { super.registerAdapters(builder); builder.registerTypeAdapter(Vec3i.class, new Vec3iAdapter()); - builder.registerTypeAdapter(Vec3d.class, new Vec3dAdapter()); + builder.registerTypeAdapter(Vec3.class, new Vec3dAdapter()); } @Override public Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -58,43 +62,43 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); + Block block = Registry.BLOCK.get(new ResourceLocation(resourceLocation)); Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("localizedName", Language.getInstance().translate(block.getTranslationKey())); + map.put("localizedName", Language.getInstance().getElement(block.getDescriptionId())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); } private Map getMaterial(Block b) { - BlockState bs = b.getDefaultState(); + BlockState bs = b.defaultBlockState(); Map map = new TreeMap<>(); - map.put("powerSource", bs.emitsRedstonePower()); - map.put("lightValue", bs.getLuminance()); - map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); - map.put("resistance", b.getBlastResistance()); - map.put("ticksRandomly", b.hasRandomTicks(bs)); - VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); - map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); - map.put("slipperiness", b.getSlipperiness()); - map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + 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.blocksMovement()); - map.put("burnable", m.isBurnable()); - map.put("opaque", m.blocksLight()); + map.put("movementBlocker", m.blocksMotion()); + map.put("burnable", m.isFlammable()); + map.put("opaque", m.isSolidBlocking()); map.put("replacedDuringPlacement", m.isReplaceable()); - map.put("toolRequired", !m.canBreakByHand()); - map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); - map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); - map.put("mapColor", rgb(m.getColor().color)); - map.put("hasContainer", b instanceof BlockEntityProvider bep && - bep.createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable); + 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(Box aabb) { + private boolean isFullCube(AABB aabb) { return aabb.equals(FULL_CUBE); } @@ -122,18 +126,18 @@ public void write(final JsonWriter out, final Vec3i vec) throws IOException { } } - public static class Vec3dAdapter extends TypeAdapter { + public static class Vec3dAdapter extends TypeAdapter { @Override - public Vec3d read(final JsonReader in) { + public Vec3 read(final JsonReader in) { throw new UnsupportedOperationException(); } @Override - public void write(final JsonWriter out, final Vec3d vec) throws IOException { + public void write(final JsonWriter out, final Vec3 vec) throws IOException { out.beginArray(); - out.value(vec.getX()); - out.value(vec.getY()); - out.value(vec.getZ()); + out.value(vec.x()); + out.value(vec.y()); + out.value(vec.z()); out.endArray(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index a4f0185..dce3f85 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public BlockTypesDumper() { @Override protected Iterator getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 3d497fb..69040f4 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -5,12 +5,12 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; -import net.minecraft.block.Block; -import net.minecraft.state.property.*; -import net.minecraft.tag.RegistryTagManager; -import net.minecraft.tag.TagContainer; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagCollection; +import net.minecraft.tags.TagManager; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.*; import java.io.File; import java.io.IOException; @@ -32,7 +32,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + File file = new File(OUTPUT, SharedConstants.getCurrentVersion().getWorldVersion() + ".json"); new DataVersionDumper(file).run(); } } @@ -44,13 +44,13 @@ public DataVersionDumper(File file) { this.file = file; } - private Map> getTags(TagContainer provider, Registry registry) { + private Map> getTags(TagCollection provider, Registry registry) { Map> tagCollector = new TreeMap<>(); - provider.getEntries().forEach((key, value) -> - tagCollector.put(key.toString(), value.values().stream() - .map(entry -> checkNotNull(registry.getId(entry))) - .map(Identifier::toString) + provider.getAllTags().forEach((key, value) -> + tagCollector.put(key.toString(), value.getValues().stream() + .map(entry -> checkNotNull(registry.getKey(entry))) + .map(ResourceLocation::toString) .sorted() .collect(Collectors.toList()))); @@ -61,7 +61,7 @@ private Map> getTags(TagContainer provider, Registry private String getTypeName(Class clazz) { if (clazz == EnumProperty.class) { return "enum"; - } else if (clazz == IntProperty.class) { + } else if (clazz == IntegerProperty.class) { return "int"; } else if (clazz == BooleanProperty.class) { return "bool"; @@ -76,22 +76,22 @@ private String getTypeName(Class clazz) { public void run() { // Blocks Map> blocks = new TreeMap<>(); - for (Identifier blockId : Registry.BLOCK.getIds()) { + for (ResourceLocation blockId : Registry.BLOCK.keySet()) { Map bl = new TreeMap<>(); Block block = Registry.BLOCK.get(blockId); Map properties = new TreeMap<>(); - for (Property prop : block.getDefaultState().getProperties()) { + for (Property prop : block.defaultBlockState().getProperties()) { Map propertyValues = new TreeMap<>(); - propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("values", prop.getPossibleValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); propertyValues.put("type", getTypeName(prop.getClass())); properties.put(prop.getName(), propertyValues); } bl.put("properties", properties); StringBuilder defaultState = new StringBuilder(); defaultState.append(blockId.toString()); - if (!block.getDefaultState().getEntries().isEmpty()) { + if (!block.defaultBlockState().getValues().isEmpty()) { List bits = new ArrayList<>(); - block.getDefaultState().getEntries().entrySet().stream().sorted(Comparator.comparing(e -> e.getKey().getName())).forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase())); + block.defaultBlockState().getValues().entrySet().stream().sorted(Comparator.comparing(e -> e.getKey().getName())).forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase())); defaultState.append("[").append(String.join(",", bits)).append("]"); } bl.put("defaultstate", defaultState.toString()); @@ -99,23 +99,23 @@ public void run() { } // Items - List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List items = Registry.ITEM.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Entities - List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List entities = Registry.ENTITY_TYPE.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Biomes - List biomes = Registry.BIOME.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List biomes = Registry.BIOME.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); - RegistryTagManager tagManager = new RegistryTagManager(); + TagManager tagManager = new TagManager(); // BlockTags - Map> blockTags = getTags(tagManager.blocks(), Registry.BLOCK); + Map> blockTags = getTags(tagManager.getBlocks(), Registry.BLOCK); // ItemTags - Map> itemTags = getTags(tagManager.items(), Registry.ITEM); + Map> itemTags = getTags(tagManager.getItems(), Registry.ITEM); // EntityTags - Map> entityTags = getTags(tagManager.entityTypes(), Registry.ENTITY_TYPE); + Map> entityTags = getTags(tagManager.getEntityTypes(), Registry.ENTITY_TYPE); Map output = new TreeMap<>(); output.put("blocks", blocks); diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 89ce90d..ac4ebfe 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.tag.EntityTypeTags; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.EntityTypeTags; import java.util.Iterator; @@ -24,6 +24,6 @@ public EntityTypeCategoriesDumper() { @Override protected Iterator getIds() { - return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); + return EntityTypeTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 042a2d8..6516cce 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -23,6 +23,6 @@ public EntityTypesDumper() { @Override protected Iterator getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 4f1413a..e21f30a 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.tag.ItemTags; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import java.util.Iterator; @@ -23,6 +23,6 @@ public ItemCategoriesDumper() { @Override protected Iterator getIds() { - return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); + return ItemTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 2c7c07b..890b78a 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -1,9 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; import java.io.File; import java.util.*; @@ -31,7 +31,7 @@ public ItemRegistryDumper(File file) { @Override public Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -41,7 +41,7 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Item item = Registry.ITEM.get(new Identifier(resourceLocation)); + Item item = Registry.ITEM.get(new ResourceLocation(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; @@ -50,10 +50,10 @@ public List> getProperties(String resourceLocation) { private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("unlocalizedName", item.getTranslationKey(item.getStackForRender())); - map.put("localizedName", item.getName(item.getStackForRender()).getString()); + map.put("unlocalizedName", item.getDescriptionId(item.getDefaultInstance())); + map.put("localizedName", item.getName(item.getDefaultInstance()).getString()); map.put("maxDamage", item.getMaxDamage()); - map.put("maxStackSize", item.getMaxCount()); + map.put("maxStackSize", item.getMaxStackSize()); return map; } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 5c30a23..77ef722 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public ItemTypesDumper() { @Override protected Iterator getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 79c28ab..452591a 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -1,7 +1,7 @@ package org.enginehub.util.minecraft.util; -import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; +import net.minecraft.server.Bootstrap; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; @@ -9,9 +9,9 @@ public final class GameSetupUtils { public static void setupGame() { - SharedConstants.getGameVersion(); - Bootstrap.initialize(); + SharedConstants.getCurrentVersion(); + Bootstrap.bootStrap(); - AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); } } From ee102dcf175e6bc096eaeeddc25a0e346f7977ca Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Mon, 28 Aug 2023 20:13:03 -0400 Subject: [PATCH 15/18] Migrate 1.14.4 module to official Mojang mappings --- 1.14.4/build.gradle.kts | 4 +- .../minecraft/dumper/BiomeTypesDumper.java | 6 +- .../dumper/BlockCategoriesDumper.java | 6 +- .../minecraft/dumper/BlockRegistryDumper.java | 90 ++++++++++--------- .../minecraft/dumper/BlockTypesDumper.java | 6 +- .../minecraft/dumper/DataVersionDumper.java | 52 +++++------ .../dumper/EntityTypeCategoriesDumper.java | 6 +- .../minecraft/dumper/EntityTypesDumper.java | 6 +- .../dumper/ItemCategoriesDumper.java | 6 +- .../minecraft/dumper/ItemRegistryDumper.java | 16 ++-- .../minecraft/dumper/ItemTypesDumper.java | 6 +- .../util/minecraft/util/GameSetupUtils.java | 8 +- 12 files changed, 109 insertions(+), 103 deletions(-) diff --git a/1.14.4/build.gradle.kts b/1.14.4/build.gradle.kts index 7ba6061..80dd2d6 100644 --- a/1.14.4/build.gradle.kts +++ b/1.14.4/build.gradle.kts @@ -1,3 +1,5 @@ +import net.fabricmc.loom.api.LoomGradleExtensionAPI + plugins { id("fabric-loom") version "0.13.20" } @@ -5,6 +7,6 @@ plugins { dependencies { implementation(project(mapOf("path" to ":core"))) minecraft("com.mojang:minecraft:1.14.4") - mappings("net.fabricmc:yarn:1.14.4+build.9:v2") + mappings(project.the().officialMojangMappings()) modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader.version")}") } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 1b1204e..5ab80ae 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -23,6 +23,6 @@ public BiomeTypesDumper() { @Override protected Iterator getIds() { - return Registry.BIOME.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.BIOME.keySet().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java index 2cd6ceb..b122ce9 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.tag.BlockTags; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import java.util.Iterator; @@ -24,6 +24,6 @@ public BlockCategoriesDumper() { @Override protected Iterator getIds() { - return BlockTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); + return BlockTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java index 64f7516..1bc6358 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockRegistryDumper.java @@ -6,18 +6,22 @@ import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.piston.PistonBehavior; -import net.minecraft.util.Clearable; -import net.minecraft.util.Identifier; -import net.minecraft.util.Language; -import net.minecraft.util.math.*; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.EmptyBlockView; +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; @@ -27,7 +31,7 @@ public class BlockRegistryDumper extends RegistryDumper { - private static final Box FULL_CUBE = Box.from(MutableIntBoundingBox.empty()); + private static final AABB FULL_CUBE = AABB.of(BoundingBox.getUnknownBox()); public BlockRegistryDumper(File file) { super(file); @@ -43,12 +47,12 @@ public void registerAdapters(GsonBuilder builder) { super.registerAdapters(builder); builder.registerTypeAdapter(Vec3i.class, new Vec3iAdapter()); - builder.registerTypeAdapter(Vec3d.class, new Vec3dAdapter()); + builder.registerTypeAdapter(Vec3.class, new Vec3dAdapter()); } @Override public Collection getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::toString).toList(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -58,43 +62,43 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Block block = Registry.BLOCK.get(new Identifier(resourceLocation)); + Block block = Registry.BLOCK.get(new ResourceLocation(resourceLocation)); Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("localizedName", Language.getInstance().translate(block.getTranslationKey())); + map.put("localizedName", Language.getInstance().getElement(block.getDescriptionId())); map.put("material", getMaterial(block)); return Lists.newArrayList(map); } private Map getMaterial(Block b) { - BlockState bs = b.getDefaultState(); + BlockState bs = b.defaultBlockState(); Map map = new TreeMap<>(); - map.put("powerSource", bs.emitsRedstonePower()); - map.put("lightValue", bs.getLuminance()); - map.put("hardness", bs.getHardness(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); - map.put("resistance", b.getBlastResistance()); - map.put("ticksRandomly", b.hasRandomTicks(bs)); - VoxelShape vs = bs.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN); - map.put("fullCube", !vs.isEmpty() && isFullCube(vs.getBoundingBox())); - map.put("slipperiness", b.getSlipperiness()); - map.put("translucent", bs.isTranslucent(EmptyBlockView.INSTANCE, BlockPos.ORIGIN)); + 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.blocksMovement()); - map.put("burnable", m.isBurnable()); - map.put("opaque", m.blocksLight()); + map.put("movementBlocker", m.blocksMotion()); + map.put("burnable", m.isFlammable()); + map.put("opaque", m.isSolidBlocking()); map.put("replacedDuringPlacement", m.isReplaceable()); - map.put("toolRequired", !m.canBreakByHand()); - map.put("fragileWhenPushed", m.getPistonBehavior() == PistonBehavior.DESTROY); - map.put("unpushable", m.getPistonBehavior() == PistonBehavior.BLOCK); - map.put("mapColor", rgb(m.getColor().color)); - map.put("hasContainer", b instanceof BlockEntityProvider bep && - bep.createBlockEntity(EmptyBlockView.INSTANCE) instanceof Clearable); + 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(Box aabb) { + private boolean isFullCube(AABB aabb) { return aabb.equals(FULL_CUBE); } @@ -122,18 +126,18 @@ public void write(final JsonWriter out, final Vec3i vec) throws IOException { } } - public static class Vec3dAdapter extends TypeAdapter { + public static class Vec3dAdapter extends TypeAdapter { @Override - public Vec3d read(final JsonReader in) { + public Vec3 read(final JsonReader in) { throw new UnsupportedOperationException(); } @Override - public void write(final JsonWriter out, final Vec3d vec) throws IOException { + public void write(final JsonWriter out, final Vec3 vec) throws IOException { out.beginArray(); - out.value(vec.getX()); - out.value(vec.getY()); - out.value(vec.getZ()); + out.value(vec.x()); + out.value(vec.y()); + out.value(vec.z()); out.endArray(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index a4f0185..dce3f85 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public BlockTypesDumper() { @Override protected Iterator getIds() { - return Registry.BLOCK.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 849b0f5..2189f10 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -5,14 +5,14 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import net.minecraft.SharedConstants; -import net.minecraft.block.Block; -import net.minecraft.state.property.*; -import net.minecraft.tag.BlockTags; -import net.minecraft.tag.EntityTypeTags; -import net.minecraft.tag.ItemTags; -import net.minecraft.tag.TagContainer; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagCollection; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.*; import java.io.File; import java.io.IOException; @@ -34,7 +34,7 @@ public static void main(String[] args) { public static class Default implements Dumper { @Override public void run() { - File file = new File(OUTPUT, SharedConstants.getGameVersion().getWorldVersion() + ".json"); + File file = new File(OUTPUT, SharedConstants.getCurrentVersion().getWorldVersion() + ".json"); new DataVersionDumper(file).run(); } } @@ -46,13 +46,13 @@ public DataVersionDumper(File file) { this.file = file; } - private Map> getTags(TagContainer provider, Registry registry) { + private Map> getTags(TagCollection provider, Registry registry) { Map> tagCollector = new TreeMap<>(); - provider.getEntries().forEach((key, value) -> - tagCollector.put(key.toString(), value.values().stream() - .map(entry -> checkNotNull(registry.getId(entry))) - .map(Identifier::toString) + provider.getAllTags().forEach((key, value) -> + tagCollector.put(key.toString(), value.getValues().stream() + .map(entry -> checkNotNull(registry.getKey(entry))) + .map(ResourceLocation::toString) .sorted() .collect(Collectors.toList()))); @@ -63,7 +63,7 @@ private Map> getTags(TagContainer provider, Registry private String getTypeName(Class clazz) { if (clazz == EnumProperty.class) { return "enum"; - } else if (clazz == IntProperty.class) { + } else if (clazz == IntegerProperty.class) { return "int"; } else if (clazz == BooleanProperty.class) { return "bool"; @@ -78,22 +78,22 @@ private String getTypeName(Class clazz) { public void run() { // Blocks Map> blocks = new TreeMap<>(); - for (Identifier blockId : Registry.BLOCK.getIds()) { + for (ResourceLocation blockId : Registry.BLOCK.keySet()) { Map bl = new TreeMap<>(); Block block = Registry.BLOCK.get(blockId); Map properties = new TreeMap<>(); - for (Property prop : block.getDefaultState().getProperties()) { + for (Property prop : block.defaultBlockState().getProperties()) { Map propertyValues = new TreeMap<>(); - propertyValues.put("values", prop.getValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); + propertyValues.put("values", prop.getPossibleValues().stream().map(s -> s.toString().toLowerCase()).collect(Collectors.toList())); propertyValues.put("type", getTypeName(prop.getClass())); properties.put(prop.getName(), propertyValues); } bl.put("properties", properties); StringBuilder defaultState = new StringBuilder(); defaultState.append(blockId.toString()); - if (!block.getDefaultState().getEntries().isEmpty()) { + if (!block.defaultBlockState().getValues().isEmpty()) { List bits = new ArrayList<>(); - block.getDefaultState().getEntries().entrySet().stream().sorted(Comparator.comparing(e -> e.getKey().getName())).forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase())); + block.defaultBlockState().getValues().entrySet().stream().sorted(Comparator.comparing(e -> e.getKey().getName())).forEach(e -> bits.add(e.getKey().getName() + "=" + e.getValue().toString().toLowerCase())); defaultState.append("[").append(String.join(",", bits)).append("]"); } bl.put("defaultstate", defaultState.toString()); @@ -101,22 +101,22 @@ public void run() { } // Items - List items = Registry.ITEM.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List items = Registry.ITEM.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Entities - List entities = Registry.ENTITY_TYPE.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List entities = Registry.ENTITY_TYPE.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // Biomes - List biomes = Registry.BIOME.getIds().stream().sorted().map(Identifier::toString).collect(Collectors.toList()); + List biomes = Registry.BIOME.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); // BlockTags - Map> blockTags = getTags(BlockTags.getContainer(), Registry.BLOCK); + Map> blockTags = getTags(BlockTags.getAllTags(), Registry.BLOCK); // ItemTags - Map> itemTags = getTags(ItemTags.getContainer(), Registry.ITEM); + Map> itemTags = getTags(ItemTags.getAllTags(), Registry.ITEM); // EntityTags - Map> entityTags = getTags(EntityTypeTags.getContainer(), Registry.ENTITY_TYPE); + Map> entityTags = getTags(EntityTypeTags.getAllTags(), Registry.ENTITY_TYPE); Map output = new TreeMap<>(); output.put("blocks", blocks); diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java index 89ce90d..ac4ebfe 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.tag.EntityTypeTags; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.EntityTypeTags; import java.util.Iterator; @@ -24,6 +24,6 @@ public EntityTypeCategoriesDumper() { @Override protected Iterator getIds() { - return EntityTypeTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); + return EntityTypeTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 042a2d8..6516cce 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -23,6 +23,6 @@ public EntityTypesDumper() { @Override protected Iterator getIds() { - return Registry.ENTITY_TYPE.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java index 4f1413a..e21f30a 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java @@ -2,8 +2,8 @@ import com.google.auto.service.AutoService; import com.squareup.javapoet.ClassName; -import net.minecraft.tag.ItemTags; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import java.util.Iterator; @@ -23,6 +23,6 @@ public ItemCategoriesDumper() { @Override protected Iterator getIds() { - return ItemTags.getContainer().getKeys().stream().map(Identifier::getPath).iterator(); + return ItemTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java index 2c7c07b..890b78a 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemRegistryDumper.java @@ -1,9 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import net.minecraft.item.Item; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; import java.io.File; import java.util.*; @@ -31,7 +31,7 @@ public ItemRegistryDumper(File file) { @Override public Collection getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::toString).toList(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::toString).toList(); } @Override @@ -41,7 +41,7 @@ public Comparator> getComparator() { @Override public List> getProperties(String resourceLocation) { - Item item = Registry.ITEM.get(new Identifier(resourceLocation)); + Item item = Registry.ITEM.get(new ResourceLocation(resourceLocation)); List> maps = new ArrayList<>(); maps.add(getPropertiesForItem(resourceLocation, item)); return maps; @@ -50,10 +50,10 @@ public List> getProperties(String resourceLocation) { private Map getPropertiesForItem(String resourceLocation, Item item) { Map map = new TreeMap<>(); map.put("id", resourceLocation); - map.put("unlocalizedName", item.getTranslationKey(item.getStackForRender())); - map.put("localizedName", item.getName(item.getStackForRender()).getString()); + map.put("unlocalizedName", item.getDescriptionId(item.getDefaultInstance())); + map.put("localizedName", item.getName(item.getDefaultInstance()).getString()); map.put("maxDamage", item.getMaxDamage()); - map.put("maxStackSize", item.getMaxCount()); + map.put("maxStackSize", item.getMaxStackSize()); return map; } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 5c30a23..77ef722 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -3,8 +3,8 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; import com.squareup.javapoet.ClassName; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import java.util.Iterator; @@ -24,7 +24,7 @@ public ItemTypesDumper() { @Override protected Iterator getIds() { - return Registry.ITEM.getIds().stream().map(Identifier::getPath).iterator(); + return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } @Override diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 79c28ab..452591a 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -1,7 +1,7 @@ package org.enginehub.util.minecraft.util; -import net.minecraft.Bootstrap; import net.minecraft.SharedConstants; +import net.minecraft.server.Bootstrap; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; @@ -9,9 +9,9 @@ public final class GameSetupUtils { public static void setupGame() { - SharedConstants.getGameVersion(); - Bootstrap.initialize(); + SharedConstants.getCurrentVersion(); + Bootstrap.bootStrap(); - AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getGameVersion().getName()); + AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); } } From 6bb331cb53655c689ca489a0a6017b4f3540a1ca Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Tue, 29 Aug 2023 14:49:39 -0400 Subject: [PATCH 16/18] Combine Type and Category dumpers, and fix 1.14.4/1.15.2 tag dumping --- .../minecraft/dumper/BiomeTypesDumper.java | 3 +- .../dumper/BlockCategoriesDumper.java | 29 --- .../minecraft/dumper/BlockTypesDumper.java | 9 +- .../dumper/EntityTypeCategoriesDumper.java | 29 --- .../minecraft/dumper/EntityTypesDumper.java | 9 +- .../dumper/ItemCategoriesDumper.java | 28 --- .../minecraft/dumper/ItemTypesDumper.java | 9 +- .../util/minecraft/util/GameSetupUtils.java | 25 +++ .../util/minecraft/util/ReflectionUtil.java | 28 +++ .../minecraft/dumper/BiomeTypesDumper.java | 3 +- .../dumper/BlockCategoriesDumper.java | 36 ---- .../minecraft/dumper/BlockTypesDumper.java | 16 +- .../minecraft/dumper/DataVersionDumper.java | 10 +- .../dumper/EntityTypeCategoriesDumper.java | 29 --- .../minecraft/dumper/EntityTypesDumper.java | 9 +- .../dumper/ItemCategoriesDumper.java | 28 --- .../minecraft/dumper/ItemTypesDumper.java | 9 +- .../util/minecraft/util/GameSetupUtils.java | 23 +++ .../util/minecraft/util/ReflectionUtil.java | 28 +++ .../minecraft/dumper/BiomeTypesDumper.java | 4 +- .../dumper/BlockCategoriesDumper.java | 36 ---- .../minecraft/dumper/BlockTypesDumper.java | 16 +- .../dumper/EntityTypeCategoriesDumper.java | 29 --- .../minecraft/dumper/EntityTypesDumper.java | 9 +- .../dumper/ItemCategoriesDumper.java | 36 ---- .../minecraft/dumper/ItemTypesDumper.java | 16 +- .../minecraft/dumper/BiomeTypesDumper.java | 11 +- .../dumper/BlockCategoriesDumper.java | 39 ----- .../minecraft/dumper/BlockTypesDumper.java | 16 +- .../dumper/EntityTypeCategoriesDumper.java | 30 ---- .../minecraft/dumper/EntityTypesDumper.java | 9 +- .../dumper/ItemCategoriesDumper.java | 37 ---- .../minecraft/dumper/ItemTypesDumper.java | 16 +- .../util/minecraft/util/GameSetupUtils.java | 2 +- .../minecraft/dumper/BiomeTypesDumper.java | 8 +- .../dumper/BlockCategoriesDumper.java | 37 ---- .../minecraft/dumper/BlockTypesDumper.java | 15 +- .../dumper/EntityTypeCategoriesDumper.java | 30 ---- .../minecraft/dumper/EntityTypesDumper.java | 8 +- .../dumper/ItemCategoriesDumper.java | 37 ---- .../minecraft/dumper/ItemTypesDumper.java | 15 +- .../minecraft/dumper/BiomeTypesDumper.java | 8 +- .../dumper/BlockCategoriesDumper.java | 38 ---- .../minecraft/dumper/BlockTypesDumper.java | 17 +- .../dumper/EntityTypeCategoriesDumper.java | 29 --- .../minecraft/dumper/EntityTypesDumper.java | 8 +- .../dumper/ItemCategoriesDumper.java | 38 ---- .../minecraft/dumper/ItemTypesDumper.java | 17 +- .../minecraft/dumper/BiomeTypesDumper.java | 8 +- .../dumper/BlockCategoriesDumper.java | 38 ---- .../minecraft/dumper/BlockTypesDumper.java | 17 +- .../dumper/EntityTypeCategoriesDumper.java | 29 --- .../minecraft/dumper/EntityTypesDumper.java | 8 +- .../dumper/ItemCategoriesDumper.java | 38 ---- .../minecraft/dumper/ItemTypesDumper.java | 17 +- .../minecraft/dumper/RegistryClassDumper.java | 165 ++++++++++++------ 56 files changed, 468 insertions(+), 823 deletions(-) delete mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java delete mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java delete mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java create mode 100644 1.14.4/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java delete mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java delete mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java delete mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java create mode 100644 1.15.2/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java delete mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java delete mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java delete mode 100644 1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java delete mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java delete mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java delete mode 100644 1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java delete mode 100644 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java delete mode 100644 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java delete mode 100644 1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java delete mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java delete mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java delete mode 100644 1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java delete mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java delete mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java delete mode 100644 1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 5ab80ae..ee06df4 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -1,7 +1,6 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -18,7 +17,7 @@ public static void main(String[] args) { } public BiomeTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + super("com.sk89q.worldedit.world.biome", "Biome"); } @Override diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java deleted file mode 100644 index b122ce9..0000000 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.BlockTags; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -// TODO Get the 1.14.4 and 1.15.2 Category dumpers to work -@AutoService(Dumper.class) -public class BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Iterator getIds() { - return BlockTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index dce3f85..85687b7 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -2,9 +2,9 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import java.util.Iterator; @@ -19,7 +19,7 @@ public static void main(String[] args) { } public BlockTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + super("com.sk89q.worldedit.world.block", "Block"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return BlockTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java deleted file mode 100644 index ac4ebfe..0000000 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.EntityTypeTags; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Iterator getIds() { - return EntityTypeTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 6516cce..51d7315 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -1,9 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.EntityTypeTags; import java.util.Iterator; @@ -18,11 +18,16 @@ public static void main(String[] args) { } public EntityTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + super("com.sk89q.worldedit.world.entity", "Entity"); } @Override protected Iterator getIds() { return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } + + @Override + protected Iterator getTags() { + return EntityTypeTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java deleted file mode 100644 index e21f30a..0000000 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.ItemTags; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Iterator getIds() { - return ItemTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 77ef722..c6be545 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -2,9 +2,9 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import java.util.Iterator; @@ -19,7 +19,7 @@ public static void main(String[] args) { } public ItemTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + super("com.sk89q.worldedit.world.item", "Item"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return ItemTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 452591a..48264e0 100644 --- a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -1,10 +1,21 @@ package org.enginehub.util.minecraft.util; import net.minecraft.SharedConstants; +import net.minecraft.data.Main; +import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.data.tags.EntityTypeTagsProvider; +import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.data.tags.TagsProvider; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.Bootstrap; +import net.minecraft.tags.*; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; +import java.io.IOException; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; public final class GameSetupUtils { @@ -13,5 +24,19 @@ public static void setupGame() { Bootstrap.bootStrap(); AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); + + BlockTags.reset(setupTags(new BlockTagsProvider(null))); + ItemTags.reset(setupTags(new ItemTagsProvider(null))); + EntityTypeTags.reset(setupTags(new EntityTypeTagsProvider(null))); + } + + private static TagCollection setupTags(TagsProvider tagsProvider) { + Map, Tag.Builder> builders = (Map, Tag.Builder>) ReflectionUtil.getField(tagsProvider, TagsProvider.class, "builders"); + builders.clear(); + ReflectionUtil.invokeMethod(tagsProvider, tagsProvider.getClass(), "addTags", null, null); + TagCollection tagCollection = new TagCollection<>(resourceLocation -> Optional.empty(), "", false, "generated"); + Map> map = builders.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey().getId(), Map.Entry::getValue)); + tagCollection.load(map); + return tagCollection; } } diff --git a/1.14.4/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java new file mode 100644 index 0000000..e5950bf --- /dev/null +++ b/1.14.4/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java @@ -0,0 +1,28 @@ +package org.enginehub.util.minecraft.util; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class ReflectionUtil { + + public static Object getField(Object obj, Class clazz, String name) { + try { + Field f = clazz.getDeclaredField(name); + f.setAccessible(true); + return f.get(obj); + } catch (IllegalAccessException | NoSuchFieldException ignored) { + } + return null; + } + + public static Object invokeMethod(Object obj, Class clazz, String name, Class[] paramClasses, Object[] params) { + try { + Method m = clazz.getDeclaredMethod(name, paramClasses); + m.setAccessible(true); + return m.invoke(obj, params); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { + } + return null; + } +} \ No newline at end of file diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 5ab80ae..ee06df4 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -1,7 +1,6 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -18,7 +17,7 @@ public static void main(String[] args) { } public BiomeTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + super("com.sk89q.worldedit.world.biome", "Biome"); } @Override diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java deleted file mode 100644 index 46491fa..0000000 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -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 BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Iterator getIds() { - return BlockTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "dirt_like" - ); - } -} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index dce3f85..b7835bb 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -2,9 +2,9 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import java.util.Iterator; @@ -19,7 +19,7 @@ public static void main(String[] args) { } public BlockTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + super("com.sk89q.worldedit.world.block", "Block"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return BlockTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -34,4 +39,11 @@ protected Iterator getDeprecatedIds() { "wall_sign" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "dirt_like" + ); + } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java index 69040f4..330545f 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/DataVersionDumper.java @@ -7,8 +7,7 @@ import net.minecraft.SharedConstants; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagCollection; -import net.minecraft.tags.TagManager; +import net.minecraft.tags.*; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.properties.*; @@ -107,15 +106,14 @@ public void run() { // Biomes List biomes = Registry.BIOME.keySet().stream().sorted().map(ResourceLocation::toString).collect(Collectors.toList()); - TagManager tagManager = new TagManager(); // BlockTags - Map> blockTags = getTags(tagManager.getBlocks(), Registry.BLOCK); + Map> blockTags = getTags(BlockTags.getAllTags(), Registry.BLOCK); // ItemTags - Map> itemTags = getTags(tagManager.getItems(), Registry.ITEM); + Map> itemTags = getTags(ItemTags.getAllTags(), Registry.ITEM); // EntityTags - Map> entityTags = getTags(tagManager.getEntityTypes(), Registry.ENTITY_TYPE); + Map> entityTags = getTags(EntityTypeTags.getAllTags(), Registry.ENTITY_TYPE); Map output = new TreeMap<>(); output.put("blocks", blocks); diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java deleted file mode 100644 index ac4ebfe..0000000 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.EntityTypeTags; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Iterator getIds() { - return EntityTypeTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 6516cce..51d7315 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -1,9 +1,9 @@ package org.enginehub.util.minecraft.dumper; import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.EntityTypeTags; import java.util.Iterator; @@ -18,11 +18,16 @@ public static void main(String[] args) { } public EntityTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + super("com.sk89q.worldedit.world.entity", "Entity"); } @Override protected Iterator getIds() { return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } + + @Override + protected Iterator getTags() { + return EntityTypeTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java deleted file mode 100644 index e21f30a..0000000 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.ItemTags; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Iterator getIds() { - return ItemTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index 77ef722..c6be545 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -2,9 +2,9 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import java.util.Iterator; @@ -19,7 +19,7 @@ public static void main(String[] args) { } public ItemTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + super("com.sk89q.worldedit.world.item", "Item"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return ItemTags.getAllTags().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 452591a..47a5d93 100644 --- a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -1,10 +1,19 @@ package org.enginehub.util.minecraft.util; import net.minecraft.SharedConstants; +import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.data.tags.EntityTypeTagsProvider; +import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.data.tags.TagsProvider; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.Bootstrap; +import net.minecraft.tags.*; import org.enginehub.util.minecraft.dumper.AbstractDumper; import java.io.File; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; public final class GameSetupUtils { @@ -13,5 +22,19 @@ public static void setupGame() { Bootstrap.bootStrap(); AbstractDumper.OUTPUT = new File("output/" + SharedConstants.getCurrentVersion().getName()); + + BlockTags.reset(setupTags(new BlockTagsProvider(null))); + ItemTags.reset(setupTags(new ItemTagsProvider(null))); + EntityTypeTags.reset(setupTags(new EntityTypeTagsProvider(null))); + } + + private static TagCollection setupTags(TagsProvider tagsProvider) { + Map, Tag.Builder> builders = (Map, Tag.Builder>) ReflectionUtil.getField(tagsProvider, TagsProvider.class, "builders"); + builders.clear(); + ReflectionUtil.invokeMethod(tagsProvider, tagsProvider.getClass(), "addTags", null, null); + TagCollection tagCollection = new TagCollection<>(resourceLocation -> Optional.empty(), "", false, "generated"); + Map> map = builders.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey().getId(), Map.Entry::getValue)); + tagCollection.load(map); + return tagCollection; } } diff --git a/1.15.2/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java new file mode 100644 index 0000000..e5950bf --- /dev/null +++ b/1.15.2/src/main/java/org/enginehub/util/minecraft/util/ReflectionUtil.java @@ -0,0 +1,28 @@ +package org.enginehub.util.minecraft.util; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class ReflectionUtil { + + public static Object getField(Object obj, Class clazz, String name) { + try { + Field f = clazz.getDeclaredField(name); + f.setAccessible(true); + return f.get(obj); + } catch (IllegalAccessException | NoSuchFieldException ignored) { + } + return null; + } + + public static Object invokeMethod(Object obj, Class clazz, String name, Class[] paramClasses, Object[] params) { + try { + Method m = clazz.getDeclaredMethod(name, paramClasses); + m.setAccessible(true); + return m.invoke(obj, params); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { + } + return null; + } +} \ No newline at end of file diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index ea113e7..cc327a5 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -11,6 +10,7 @@ import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +// TODO Find out how to get the Biome tags for dumping @AutoService(Dumper.class) public class BiomeTypesDumper extends RegistryClassDumper { @@ -20,7 +20,7 @@ public static void main(String[] args) { } public BiomeTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + super("com.sk89q.worldedit.world.biome", "Biome"); } @Override diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java deleted file mode 100644 index 1cdb781..0000000 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerResources().getTags().getBlocks().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "dirt_like" - ); - } -} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index dce3f85..3588f80 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -2,12 +2,12 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import java.util.Iterator; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @AutoService(Dumper.class) @@ -19,7 +19,7 @@ public static void main(String[] args) { } public BlockTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + super("com.sk89q.worldedit.world.block", "Block"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerResources().getTags().getBlocks().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -34,4 +39,11 @@ protected Iterator getDeprecatedIds() { "wall_sign" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "dirt_like" + ); + } } diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java deleted file mode 100644 index 8ef992a..0000000 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerResources().getTags().getEntityTypes().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 3ed82c1..bf8511c 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -2,12 +2,12 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import java.util.Iterator; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @AutoService(Dumper.class) @@ -19,7 +19,7 @@ public static void main(String[] args) { } public EntityTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + super("com.sk89q.worldedit.world.entity", "Entity"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerResources().getTags().getEntityTypes().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java deleted file mode 100644 index e374418..0000000 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerResources().getTags().getItems().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "furnace_materials" - ); - } -} diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index b0954ec..588d830 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -2,12 +2,12 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import java.util.Iterator; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @AutoService(Dumper.class) @@ -19,7 +19,7 @@ public static void main(String[] args) { } public ItemTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + super("com.sk89q.worldedit.world.item", "Item"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerResources().getTags().getItems().getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -37,4 +42,11 @@ protected Iterator getDeprecatedIds() { "zombie_pigman_spawn_egg" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "furnace_materials" + ); + } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index ea113e7..ec1ff0a 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -2,14 +2,12 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import java.util.Iterator; -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; +import static org.enginehub.util.minecraft.util.GameSetupUtils.*; @AutoService(Dumper.class) public class BiomeTypesDumper extends RegistryClassDumper { @@ -20,7 +18,7 @@ public static void main(String[] args) { } public BiomeTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + super("com.sk89q.worldedit.world.biome", "Biome"); } @Override @@ -28,6 +26,11 @@ protected Iterator getIds() { return getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerResources().getTags().getOrEmpty(Registry.BIOME_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java deleted file mode 100644 index 7c7abb1..0000000 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerResources().getTags().getOrEmpty( - Registry.BLOCK_REGISTRY - ).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "dirt_like" - ); - } -} diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index aab9ffe..3f5b3bf 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -2,12 +2,12 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import java.util.Iterator; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @AutoService(Dumper.class) @@ -19,7 +19,7 @@ public static void main(String[] args) { } public BlockTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + super("com.sk89q.worldedit.world.block", "Block"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerResources().getTags().getOrEmpty(Registry.BLOCK_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -35,4 +40,11 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "dirt_like" + ); + } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java deleted file mode 100644 index 2f331ff..0000000 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerResources().getTags().getOrEmpty(Registry.ENTITY_TYPE_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 3ed82c1..9008d17 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -2,12 +2,12 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import java.util.Iterator; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @AutoService(Dumper.class) @@ -19,7 +19,7 @@ public static void main(String[] args) { } public EntityTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + super("com.sk89q.worldedit.world.entity", "Entity"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerResources().getTags().getOrEmpty(Registry.ENTITY_TYPE_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java deleted file mode 100644 index 7a71ab8..0000000 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerResources().getTags().getOrEmpty(Registry.ITEM_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "furnace_materials" - ); - } -} diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index ede5cf4..d46314c 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -2,12 +2,12 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import java.util.Iterator; +import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerResources; import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; @AutoService(Dumper.class) @@ -19,7 +19,7 @@ public static void main(String[] args) { } public ItemTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + super("com.sk89q.worldedit.world.item", "Item"); } @Override @@ -27,6 +27,11 @@ protected Iterator getIds() { return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerResources().getTags().getOrEmpty(Registry.ITEM_REGISTRY).getAvailableTags().stream().map(ResourceLocation::getPath).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -38,4 +43,11 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "furnace_materials" + ); + } } diff --git a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java index 1293e34..d555307 100644 --- a/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java +++ b/1.17.1/src/main/java/org/enginehub/util/minecraft/util/GameSetupUtils.java @@ -45,7 +45,7 @@ public static ServerResources getServerResources() { new ServerPacksSource() ); MinecraftServer.configurePackRepository(resourcePackManager, DataPackConfig.DEFAULT, true); - RegistryAccess.RegistryHolder impl = RegistryAccess.builtin(); + RegistryAccess.RegistryHolder impl = (RegistryAccess.RegistryHolder) getServerRegistry(); CompletableFuture completableFuture = ServerResources.loadResources( resourcePackManager.openAllSelected(), impl, diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 648539b..e37f1e9 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public BiomeTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + super("com.sk89q.worldedit.world.biome", "Biome"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistry().registryOrThrow(Registry.BIOME_REGISTRY).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java deleted file mode 100644 index d719f3f..0000000 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistry().registryOrThrow(Registry.BLOCK_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "dirt_like" - ); - } -} diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index aab9ffe..de2ac44 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -19,7 +18,7 @@ public static void main(String[] args) { } public BlockTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + super("com.sk89q.worldedit.world.block", "Block"); } @Override @@ -27,6 +26,11 @@ protected Iterator getIds() { return Registry.BLOCK.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return Registry.BLOCK.getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -35,4 +39,11 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "dirt_like" + ); + } } diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java deleted file mode 100644 index ba2d588..0000000 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistry().registryOrThrow(Registry.ENTITY_TYPE_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); - } -} diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 3ed82c1..f09f88a 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -19,7 +18,7 @@ public static void main(String[] args) { } public EntityTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + super("com.sk89q.worldedit.world.entity", "Entity"); } @Override @@ -27,6 +26,11 @@ protected Iterator getIds() { return Registry.ENTITY_TYPE.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return Registry.ENTITY_TYPE.getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java deleted file mode 100644 index 76e87d2..0000000 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistry; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistry().registryOrThrow(Registry.ITEM_REGISTRY).keySet().stream().map(ResourceLocation::getPath).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "furnace_materials" - ); - } -} diff --git a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index ede5cf4..d0cc2df 100644 --- a/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.18.2/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -19,7 +18,7 @@ public static void main(String[] args) { } public ItemTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + super("com.sk89q.worldedit.world.item", "Item"); } @Override @@ -27,6 +26,11 @@ protected Iterator getIds() { return Registry.ITEM.keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return Registry.ITEM.getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -38,4 +42,11 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "furnace_materials" + ); + } } diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 90fe7c0..3093723 100644 --- a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public BiomeTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + super("com.sk89q.worldedit.world.biome", "Biome"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.BIOME).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.BIOME).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java deleted file mode 100644 index 33d191c..0000000 --- a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.registries.Registries; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistries().registryOrThrow(Registries.BLOCK).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "dirt_like", - "carpets", - "lava_pool_stone_replaceables" - ); - } -} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index b0d23eb..8696ff6 100644 --- a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public BlockTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + super("com.sk89q.worldedit.world.block", "Block"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.BLOCK).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -36,4 +40,13 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "dirt_like", + "carpets", + "lava_pool_stone_replaceables" + ); + } } diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java deleted file mode 100644 index 307afdf..0000000 --- a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.registries.Registries; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); - } -} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 40fdb2b..80d3822 100644 --- a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public EntityTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + super("com.sk89q.worldedit.world.entity", "Entity"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java deleted file mode 100644 index a3f129f..0000000 --- a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.registries.Registries; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistries().registryOrThrow(Registries.ITEM).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "carpets", - "furnace_materials", - "occludes_vibration_signals" - ); - } -} diff --git a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index aa89bce..4d84b56 100644 --- a/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.19.4/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public ItemTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + super("com.sk89q.worldedit.world.item", "Item"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.ITEM).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -39,4 +43,13 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "carpets", + "furnace_materials", + "occludes_vibration_signals" + ); + } } diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java index 90fe7c0..3093723 100644 --- a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BiomeTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public BiomeTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.biome", "BiomeType"), true); + super("com.sk89q.worldedit.world.biome", "Biome"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.BIOME).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.BIOME).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java deleted file mode 100644 index 33d191c..0000000 --- a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockCategoriesDumper.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.registries.Registries; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class BlockCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new BlockCategoriesDumper().run(); - } - - public BlockCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistries().registryOrThrow(Registries.BLOCK).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "dirt_like", - "carpets", - "lava_pool_stone_replaceables" - ); - } -} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java index b0d23eb..8696ff6 100644 --- a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/BlockTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public BlockTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.block", "BlockType"), true); + super("com.sk89q.worldedit.world.block", "Block"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.BLOCK).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.BLOCK).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -36,4 +40,13 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "dirt_like", + "carpets", + "lava_pool_stone_replaceables" + ); + } } diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java deleted file mode 100644 index 307afdf..0000000 --- a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypeCategoriesDumper.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.registries.Registries; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class EntityTypeCategoriesDumper extends RegistryClassDumper { - - // worldedit doesn't actually do entity type categories yet - public static void main(String[] args) { - setupGame(); - new EntityTypeCategoriesDumper().run(); - } - - public EntityTypeCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityTypeCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); - } -} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java index 40fdb2b..80d3822 100644 --- a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/EntityTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public EntityTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.entity", "EntityType"), true); + super("com.sk89q.worldedit.world.entity", "Entity"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.ENTITY_TYPE).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java deleted file mode 100644 index a3f129f..0000000 --- a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemCategoriesDumper.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.enginehub.util.minecraft.dumper; - -import com.google.auto.service.AutoService; -import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; -import net.minecraft.core.registries.Registries; - -import java.util.Iterator; - -import static org.enginehub.util.minecraft.util.GameSetupUtils.getServerRegistries; -import static org.enginehub.util.minecraft.util.GameSetupUtils.setupGame; - -@AutoService(Dumper.class) -public class ItemCategoriesDumper extends RegistryClassDumper { - - public static void main(String[] args) { - setupGame(); - new ItemCategoriesDumper().run(); - } - - public ItemCategoriesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemCategory"), false); - } - - @Override - protected Iterator getIds() { - return getServerRegistries().registryOrThrow(Registries.ITEM).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); - } - - @Override - protected Iterator getDeprecatedIds() { - return Iterators.forArray( - "carpets", - "furnace_materials", - "occludes_vibration_signals" - ); - } -} diff --git a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java index aa89bce..4d84b56 100644 --- a/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java +++ b/1.20.1/src/main/java/org/enginehub/util/minecraft/dumper/ItemTypesDumper.java @@ -2,7 +2,6 @@ import com.google.auto.service.AutoService; import com.google.common.collect.Iterators; -import com.squareup.javapoet.ClassName; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; @@ -20,7 +19,7 @@ public static void main(String[] args) { } public ItemTypesDumper() { - super(ClassName.get("com.sk89q.worldedit.world.item", "ItemType"), true); + super("com.sk89q.worldedit.world.item", "Item"); } @Override @@ -28,6 +27,11 @@ protected Iterator getIds() { return getServerRegistries().registryOrThrow(Registries.ITEM).keySet().stream().map(ResourceLocation::getPath).iterator(); } + @Override + protected Iterator getTags() { + return getServerRegistries().registryOrThrow(Registries.ITEM).getTagNames().map(tagKey -> tagKey.location().getPath()).iterator(); + } + @Override protected Iterator getDeprecatedIds() { return Iterators.forArray( @@ -39,4 +43,13 @@ protected Iterator getDeprecatedIds() { "grass_path" ); } + + @Override + protected Iterator getDeprecatedTags() { + return Iterators.forArray( + "carpets", + "furnace_materials", + "occludes_vibration_signals" + ); + } } diff --git a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java index cb427ea..811695d 100644 --- a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -18,7 +18,8 @@ public abstract class RegistryClassDumper extends AbstractDumper { - private static final ClassName JAVAX_NULLABLE = ClassName.get("javax.annotation", "Nullable"); + private static final ClassName JAVAX_NULLABLE = + ClassName.get("javax.annotation", "Nullable"); private static final String FOUR_SPACES = Strings.repeat(" ", 4); private static UnaryOperator inlineAnnotation(String name) { @@ -39,73 +40,121 @@ private static String makePlural(String name) { return name + "s"; } - private final ClassName type; - private final boolean nullable; + protected record DumperInfo(ClassName type, boolean nullable) { + private void generate(Iterator ids, Iterator deprecatedIdsIter) { + Set deprecatedIds = ImmutableSortedSet.copyOf(deprecatedIdsIter); + Set resources = ImmutableSortedSet + .naturalOrder() + .addAll(ids) + .addAll(deprecatedIds) + .build(); + ClassName pluralType = type.peerClass(makePlural(type.simpleName())); + TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); + builder.addModifiers(PUBLIC, FINAL); + builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class) + .addMember("value", "$S", "unused") + .build()); + builder.addJavadoc( + "Stores a list of common {@link $1T $2N}.\n\n@see $1T", + type, pluralType.simpleName() + ); + builder.addMethod(MethodSpec.constructorBuilder() + .addModifiers(PRIVATE) + .build()); + builder.addMethod(createGetMethod()); + for (String resourceLocation : resources) { + String name = resourceLocation.toUpperCase().replace('/', '_'); + FieldSpec.Builder fieldBuilder = FieldSpec.builder( + type, + name, + PUBLIC, STATIC, FINAL + ); + if (deprecatedIds.contains(resourceLocation)) { + fieldBuilder.addAnnotation(Deprecated.class); + } + if (nullable) { + fieldBuilder.addAnnotation(JAVAX_NULLABLE); + } + fieldBuilder.initializer("get($S)", resourceLocation); + builder.addField(fieldBuilder.build()); + } + TypeSpec spec = builder.build(); + JavaFile javaFile = JavaFile.builder(type.packageName(), spec) + .indent(FOUR_SPACES) + .skipJavaLangImports(true) + .build(); + + try { + // TODO Try to migrate OUTPUT to a Path object + Path outputFile = OUTPUT.toPath().resolve(spec.name + ".java"); + String content = fixContent(javaFile.toString()); + MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } + + private MethodSpec createGetMethod() { + MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); + builder + .addJavadoc("Gets the {@link $T} associated with the given id.", type) + .addModifiers(PUBLIC, STATIC) + .addParameter(String.class, "id"); + if (nullable) { + builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())) + .addStatement("return $T.REGISTRY.get(id)", type); + } else { + builder.returns(type) + .addCode(CodeBlock.builder() + .addStatement("$1T entry = $1T.REGISTRY.get(id)", type) + .beginControlFlow("if (entry == null)") + .addStatement("return new $T(id)", type) + .endControlFlow() + .addStatement("return entry") + .build()); + } + return builder.build(); + } - protected RegistryClassDumper(ClassName type, boolean nullable) { - this.type = type; - this.nullable = nullable; + private String fixContent(String content) { + if (nullable) { + content = INLINE_NULLABLE.apply(content); + } + content = INLINE_DEPRECATED.apply(content); + content = content.replace(");\n\n", ");\n") + .replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); + return content; + } } - protected abstract Iterator getIds(); + private final DumperInfo idDumper; + private final DumperInfo tagDumper; - protected Iterator getDeprecatedIds() { + protected RegistryClassDumper(String packageName, String baseName) { + this.idDumper = new DumperInfo(ClassName.get(packageName, baseName + "Type"), true); + this.tagDumper = new DumperInfo(ClassName.get(packageName, baseName + "Category"), false); + } + + protected Iterator getIds() { return Iterators.forArray(); } - @Override - public void run() { - Set deprecatedIds = ImmutableSortedSet.copyOf(getDeprecatedIds()); - Set resources = ImmutableSortedSet.naturalOrder().addAll(getIds()).addAll(deprecatedIds).build(); - ClassName pluralType = type.peerClass(makePlural(type.simpleName())); - TypeSpec.Builder builder = TypeSpec.classBuilder(pluralType); - builder.addModifiers(PUBLIC, FINAL); - builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "$S", "unused").build()); - builder.addJavadoc("Stores a list of common {@link $1T $2N}.\n\n@see $1T", type, pluralType.simpleName()); - builder.addMethod(MethodSpec.constructorBuilder().addModifiers(PRIVATE).build()); - builder.addMethod(createGetMethod()); - for (String resourceLocation : resources) { - String name = resourceLocation.toUpperCase().replace('/', '_'); - FieldSpec.Builder fieldBuilder = FieldSpec.builder(type, name, PUBLIC, STATIC, FINAL); - if (deprecatedIds.contains(resourceLocation)) { - fieldBuilder.addAnnotation(Deprecated.class); - } - if (nullable) { - fieldBuilder.addAnnotation(JAVAX_NULLABLE); - } - fieldBuilder.initializer("get($S)", resourceLocation); - builder.addField(fieldBuilder.build()); - } - TypeSpec spec = builder.build(); - JavaFile javaFile = JavaFile.builder(type.packageName(), spec).indent(FOUR_SPACES).skipJavaLangImports(true).build(); - - try { - Path outputFile = OUTPUT.toPath().resolve(spec.name + ".java"); - String content = fixContent(javaFile.toString()); - MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content); - } catch (IOException e) { - throw new IllegalStateException(e); - } + protected Iterator getTags() { + return Iterators.forArray(); } - private MethodSpec createGetMethod() { - MethodSpec.Builder builder = MethodSpec.methodBuilder("get"); - builder.addJavadoc("Gets the {@link $T} associated with the given id.", type).addModifiers(PUBLIC, STATIC).addParameter(String.class, "id"); - if (nullable) { - builder.returns(type.annotated(AnnotationSpec.builder(JAVAX_NULLABLE).build())).addStatement("return $T.REGISTRY.get(id)", type); - } else { - builder.returns(type).addCode(CodeBlock.builder().addStatement("$1T entry = $1T.REGISTRY.get(id)", type).beginControlFlow("if (entry == null)").addStatement("return new $T(id)", type).endControlFlow().addStatement("return entry").build()); - } - return builder.build(); + protected Iterator getDeprecatedIds() { + return Iterators.forArray(); } - private String fixContent(String content) { - if (nullable) { - content = INLINE_NULLABLE.apply(content); - } - content = INLINE_DEPRECATED.apply(content); - content = content.replace(");\n\n", ");\n").replace(FOUR_SPACES + "private ", "\n" + FOUR_SPACES + "private "); - return content; + protected Iterator getDeprecatedTags() { + return Iterators.forArray(); + } + + @Override + public void run() { + idDumper.generate(getIds(), getDeprecatedIds()); + tagDumper.generate(getTags(), getDeprecatedTags()); } -} +} \ No newline at end of file From 1371252cc040e4eb105cd3e90e63db1f8cde31df Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Tue, 29 Aug 2023 15:07:33 -0400 Subject: [PATCH 17/18] Fix issue from merging --- 1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java b/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java index 1be5b9d..c88321d 100644 --- a/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java +++ b/1.16.5/src/main/java/org/enginehub/util/minecraft/RunAll.java @@ -9,7 +9,8 @@ public class RunAll { public static void main(String[] args) { GameSetupUtils.setupGame(); - GameSetupUtils.getServerRegistries(); + GameSetupUtils.getServerResources(); + GameSetupUtils.getServerRegistry(); for (Dumper dumper : ServiceLoader.load(Dumper.class)) { System.out.println("Running dumper: " + dumper.getClass().getCanonicalName()); dumper.run(); From e5ceb254c516b3e559a2373f50f422c7790d4f9d Mon Sep 17 00:00:00 2001 From: DalekCraft Date: Tue, 29 Aug 2023 15:10:42 -0400 Subject: [PATCH 18/18] Update RegistryClassDumper.java It's fine as a `File`, I guess. --- .../org/enginehub/util/minecraft/dumper/RegistryClassDumper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java index 811695d..018bbd2 100644 --- a/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java +++ b/core/src/main/java/org/enginehub/util/minecraft/dumper/RegistryClassDumper.java @@ -85,7 +85,6 @@ private void generate(Iterator ids, Iterator deprecatedIdsIter) .build(); try { - // TODO Try to migrate OUTPUT to a Path object Path outputFile = OUTPUT.toPath().resolve(spec.name + ".java"); String content = fixContent(javaFile.toString()); MoreFiles.asCharSink(outputFile, StandardCharsets.UTF_8).write(content);