From ebd463e92f86d78fdc3ab1192360fd74850afeba Mon Sep 17 00:00:00 2001 From: tterrag Date: Wed, 30 Oct 2019 15:25:03 -0400 Subject: [PATCH] Fix lang generator escaping newlines, add lang generator test --- src/generated_test/resources/.cache/cache | 1 + .../assets/data_gen_test/lang/en_us.json | 9 +++++++ .../common/data/LanguageProvider.java | 4 +-- .../debug/DataGeneratorTest.java | 27 +++++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/generated_test/resources/assets/data_gen_test/lang/en_us.json diff --git a/src/generated_test/resources/.cache/cache b/src/generated_test/resources/.cache/cache index 58f1a4909..7a9cac4df 100644 --- a/src/generated_test/resources/.cache/cache +++ b/src/generated_test/resources/.cache/cache @@ -1,3 +1,4 @@ +25f832a55d9d61fe27871ce866ef712b625032cc assets\data_gen_test\lang\en_us.json dc2deb0c2da07695855bbb88882455a80787ccac assets\data_gen_test\models\block\acacia_door_bottom.json e987df4921fc71322984556e9617915d4df2bdff assets\data_gen_test\models\block\acacia_door_bottom_hinge.json 5103910559b21ce74f315358935a3e582b0c45cd assets\data_gen_test\models\block\acacia_door_top.json diff --git a/src/generated_test/resources/assets/data_gen_test/lang/en_us.json b/src/generated_test/resources/assets/data_gen_test/lang/en_us.json new file mode 100644 index 000000000..28222703c --- /dev/null +++ b/src/generated_test/resources/assets/data_gen_test/lang/en_us.json @@ -0,0 +1,9 @@ +{ + "biome.minecraft.beach": "Beach", + "block.minecraft.stone": "Stone", + "data_gen_test.test.unicode": "\u0287s\u01DD\u2534 \u01DDpo\u0254\u1D09u\u2229", + "effect.minecraft.poison": "Poison", + "enchantment.minecraft.sharpness": "Sharpness", + "entity.minecraft.cat": "Cat", + "item.minecraft.diamond": "Diamond" +} \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/common/data/LanguageProvider.java b/src/main/java/net/minecraftforge/common/data/LanguageProvider.java index e82f146e7..18a4778e3 100644 --- a/src/main/java/net/minecraftforge/common/data/LanguageProvider.java +++ b/src/main/java/net/minecraftforge/common/data/LanguageProvider.java @@ -27,7 +27,7 @@ import java.util.Objects; import java.util.TreeMap; import java.util.function.Supplier; -import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.text.translate.JavaUnicodeEscaper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -73,7 +73,7 @@ public abstract class LanguageProvider implements IDataProvider { private void save(DirectoryCache cache, Object object, Path target) throws IOException { String data = GSON.toJson(object); - data = StringEscapeUtils.escapeJava(data); // Escape control chars and unicode + data = JavaUnicodeEscaper.outsideOf(0, 0x7f).translate(data); // Escape unicode after the fact so that it's not double escaped by GSON String hash = IDataProvider.HASH_FUNCTION.hashUnencodedChars(data).toString(); if (!Objects.equals(cache.getPreviousHash(target), hash) || !Files.exists(target)) { Files.createDirectories(target.getParent()); diff --git a/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java b/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java index 78993ac8b..965d9e0dc 100644 --- a/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java +++ b/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java @@ -70,11 +70,16 @@ import net.minecraft.data.DirectoryCache; import net.minecraft.data.IFinishedRecipe; import net.minecraft.data.RecipeProvider; import net.minecraft.data.ShapedRecipeBuilder; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.entity.EntityType; +import net.minecraft.item.Items; +import net.minecraft.potion.Effects; import net.minecraft.resources.IResource; import net.minecraft.resources.ResourcePackType; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.world.biome.Biomes; import net.minecraftforge.client.model.generators.BlockStateProvider; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.client.model.generators.ExistingFileHelper; @@ -88,6 +93,7 @@ import net.minecraftforge.client.model.generators.VariantBlockStateBuilder; import net.minecraftforge.common.crafting.ConditionalAdvancement; import net.minecraftforge.common.crafting.ConditionalRecipe; import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.LanguageProvider; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; @@ -113,6 +119,7 @@ public class DataGeneratorTest if (event.includeClient()) { + gen.addProvider(new Lang(gen)); gen.addProvider(new ItemModels(gen, event.getExistingFileHelper())); gen.addProvider(new BlockStates(gen, event.getExistingFileHelper())); } @@ -175,6 +182,26 @@ public class DataGeneratorTest .build(consumer, ID); } } + + public static class Lang extends LanguageProvider + { + public Lang(DataGenerator gen) + { + super(gen, MODID, "en_us"); + } + + @Override + protected void addTranslations() + { + add(Blocks.STONE, "Stone"); + add(Items.DIAMOND, "Diamond"); + add(Biomes.BEACH, "Beach"); + add(Effects.POISON, "Poison"); + add(Enchantments.SHARPNESS, "Sharpness"); + add(EntityType.CAT, "Cat"); + add(MODID + ".test.unicode", "\u0287s\u01DD\u2534 \u01DDpo\u0254\u1D09u\u2229"); + } + } public static class ItemModels extends ItemModelProvider {