This is an automated email from the ASF dual-hosted git repository. sergeykamov pushed a commit to branch NLPCRAFT-314 in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 86b64f4169e64291cfc76a5cd1732cfd46c97b51 Author: Sergey Kamov <[email protected]> AuthorDate: Mon May 3 13:07:38 2021 +0300 WIP. --- .../assets/nlpcraft-example-minecraft-mod-1.0.jar | Bin 15986 -> 17857 bytes .../example/minecraft/NCMinecraftExampleMod.java | 8 +- .../minecraft/utils/NCMinecraftFilesDump.java | 123 +++++++++++++++++---- .../minecraft/src/main/resources/block.json | 14 ++- .../minecraft/src/main/resources/item.json | 14 ++- 5 files changed, 123 insertions(+), 36 deletions(-) diff --git a/nlpcraft-examples/minecraft-mod/assets/nlpcraft-example-minecraft-mod-1.0.jar b/nlpcraft-examples/minecraft-mod/assets/nlpcraft-example-minecraft-mod-1.0.jar index b5a7152..a72d54c 100644 Binary files a/nlpcraft-examples/minecraft-mod/assets/nlpcraft-example-minecraft-mod-1.0.jar and b/nlpcraft-examples/minecraft-mod/assets/nlpcraft-example-minecraft-mod-1.0.jar differ diff --git a/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/NCMinecraftExampleMod.java b/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/NCMinecraftExampleMod.java index 1adb1c9..1ab1de4 100644 --- a/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/NCMinecraftExampleMod.java +++ b/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/NCMinecraftExampleMod.java @@ -38,8 +38,8 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Paths; -import java.util.HashSet; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; /** * Minecraft example mod for the Minecraft Forge server. @@ -57,7 +57,7 @@ public class NCMinecraftExampleMod { private static final String MODEL_ID = "nlpcraft.minecraft.ex"; private static final Gson GSON = new Gson(); - private final Set<String> convCmds = new HashSet<>(); + private final Set<String> convCmds = ConcurrentHashMap.newKeySet(); private NCSignIn creds; private String baseUrl; @@ -117,7 +117,9 @@ public class NCMinecraftExampleMod { } private static class UnauthorizedException extends Exception { - // No-op. + public UnauthorizedException() { + super("Authorization error"); + } } /** diff --git a/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/utils/NCMinecraftFilesDump.java b/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/utils/NCMinecraftFilesDump.java index 8fdacdf..7625cc9 100644 --- a/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/utils/NCMinecraftFilesDump.java +++ b/nlpcraft-examples/minecraft-mod/src/main/java/org/apache/nplcraft/example/minecraft/utils/NCMinecraftFilesDump.java @@ -19,39 +19,68 @@ package org.apache.nplcraft.example.minecraft.utils; import com.google.gson.Gson; -import java.util.Map; -import java.util.stream.Collectors; +import com.google.gson.GsonBuilder; +import com.mojang.serialization.Lifecycle; +import net.minecraft.item.Item; +import net.minecraft.util.RegistryKey; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.DefaultedRegistry; import net.minecraft.util.registry.Registry; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.ForgeRegistry; import net.minecraftforge.registries.ForgeRegistryEntry; +import net.minecraftforge.registries.GameData; +import net.minecraftforge.registries.IForgeRegistryEntry; +import net.minecraft.block.Block; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Date; +import java.util.Map; +import java.util.stream.Collectors; /** * Utility for getting data from minecraft. These values are used for preparing synonyms for user defined elements. */ public class NCMinecraftFilesDump { - private final static Gson GSON = new Gson(); + private final static Gson GSON = new GsonBuilder().setPrettyPrinting().create(); - private static class Dump { + private static class Json { private String version; private Map<String, String> data; } - private static <T extends ForgeRegistryEntry<?>> void dumpRegistry(DefaultedRegistry<T> registry, String version) { - Dump dump = new Dump(); + /** + * @param writer + * @param s + * @throws IOException + */ + private static void write(BufferedWriter writer, String s) throws IOException { + writer.write(s); + writer.newLine(); + } + + /** + * @param type + * @param reg + * @param ver + * @param <T> + * @throws IOException + */ + private static <T extends ForgeRegistryEntry<?>> void write(String type, Registry<T> reg, String ver) throws IOException { + Json js = new Json(); - dump.version = version; + js.version = ver; // Regular name -> registry name. - dump.data = - registry.stream().filter(x -> x.getRegistryName() != null). + js.data = + reg.stream().filter(x -> x.getRegistryName() != null). collect(Collectors.toMap( x -> transformPath(x.getRegistryName().getPath()), x -> x.getRegistryName().toString()) ); // Add matching like grass -> grass_block. - dump.data.putAll(registry.stream() + js.data.putAll(reg.stream() .filter(x -> x.getRegistryName() != null && x.getRegistryName().getPath().endsWith("_block")) .collect(Collectors.toMap( x -> transformPath(x.getRegistryName().getPath().replace("_block", "")), @@ -59,30 +88,82 @@ public class NCMinecraftFilesDump { ) ); - System.out.println(GSON.toJson(dump)); + File f = new File(type + ".json"); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(f))) { + write(writer, "/*"); + write(writer, " * Licensed to the Apache Software Foundation (ASF) under one or more"); + write(writer, " * contributor license agreements. See the NOTICE file distributed with"); + write(writer, " * this work for additional information regarding copyright ownership."); + write(writer, " * The ASF licenses this file to You under the Apache License, Version 2.0"); + write(writer, " * (the 'License'); you may not use this file except in compliance with"); + write(writer, " * the License. You may obtain a copy of the License at"); + write(writer, " *"); + write(writer, " * http://www.apache.org/licenses/LICENSE-2.0"); + write(writer, " *"); + write(writer, " * Unless required by applicable law or agreed to in writing, software"); + write(writer, " * distributed under the License is distributed on an 'AS IS' BASIS,"); + write(writer, " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."); + write(writer, " * See the License for the specific language governing permissions and"); + write(writer, " * limitations under the License."); + write(writer, " *"); + write(writer, " * Auto-generated on: " + new Date()); + write(writer, " * Dump file with minecraft '" + type + "' game objects. Was made for specified game version: " + ver); + write(writer, " *"); + write(writer, " */"); + + writer.newLine(); + + writer.write(GSON.toJson(js)); + } + + System.out.println("File prepared: " + f.getAbsolutePath()); } + /** + * @param path + * @return + */ private static String transformPath(String path) { return path.replaceAll("_", " "); } /** - * App entry point. + * @param type + * @param <T> + * @return + */ + private static <T extends IForgeRegistryEntry<T>> DefaultedRegistry<T> mkRegistry(String type) { + RegistryKey<Registry<T>> orCreateRootKey = RegistryKey.getOrCreateRootKey(new ResourceLocation(type)); + + return GameData.getWrapper(orCreateRootKey, Lifecycle.experimental(), "air"); + } + + /** + * Application entry point. * * @param args Command line arguments. + * @throws IOException If any IO error occurs. */ - public static void main(String[] args) { + public static void main(String[] args) throws IOException { + if (args.length != 2) + throw new IllegalArgumentException("2 mandatory parameters should be defined: 'type' and 'version'"); + String type = args[0]; - String version = args[1]; + String ver = args[1]; + + if (!type.equals("block") && !type.equals("item")) + throw new IllegalArgumentException("Unsupported type, supported are 'block' and 'item'"); if (type.equals("block")) { - dumpRegistry(Registry.BLOCK, version); - } - else if (type.equals("item")) { - dumpRegistry(Registry.ITEM, version); + DefaultedRegistry<Block> reg = mkRegistry("block"); + + write(type, reg, ver); } else { - System.err.println("Unknown type"); + DefaultedRegistry<Item> reg = mkRegistry("item"); + + write(type, reg, ver); } } } diff --git a/nlpcraft-examples/minecraft/src/main/resources/block.json b/nlpcraft-examples/minecraft/src/main/resources/block.json index b8c392e..599ef46 100644 --- a/nlpcraft-examples/minecraft/src/main/resources/block.json +++ b/nlpcraft-examples/minecraft/src/main/resources/block.json @@ -3,19 +3,21 @@ * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with + * (the 'License'); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, + * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. + * + * Auto-generated on: Mon May 03 13:04:01 MSK 2021 + * Dump file with minecraft 'block' game objects. Was made for specified game version: 1.16.4 + * */ -// Dump file with minecraft block game objects. Was made for specified game version (see below) -// Generated with dumpBlocks task in minecraft-mod module { "version": "1.16.4", @@ -808,4 +810,4 @@ "pink shulker box": "minecraft:pink_shulker_box", "crimson button": "minecraft:crimson_button" } -} +} \ No newline at end of file diff --git a/nlpcraft-examples/minecraft/src/main/resources/item.json b/nlpcraft-examples/minecraft/src/main/resources/item.json index 1856f3c..291f401 100644 --- a/nlpcraft-examples/minecraft/src/main/resources/item.json +++ b/nlpcraft-examples/minecraft/src/main/resources/item.json @@ -3,19 +3,21 @@ * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with + * (the 'License'); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, + * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. + * + * Auto-generated on: Mon May 03 13:04:39 MSK 2021 + * Dump file with minecraft 'item' game objects. Was made for specified game version: 1.16.4 + * */ -// Dump file with minecraft item game objects. Was made for specified game version (see below) -// Generated with dumpItems task in minecraft-mod module { "version": "1.16.4", @@ -1013,4 +1015,4 @@ "lapis lazuli": "minecraft:lapis_lazuli", "carrot": "minecraft:carrot" } -} +} \ No newline at end of file
