From 51d33dee02e557f707c62ced8cef9d02c29c880e Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sat, 22 Feb 2020 15:41:35 +0100 Subject: [PATCH] [CI skip] Recipe Types can now be translated as well --- CHANGELOG.md | 2 + .../core/guide/ChestSlimefunGuide.java | 13 +- .../core/services/LocalizationService.java | 12 +- .../core/services/localization/Language.java | 9 ++ .../localization/SlimefunLocalization.java | 27 ++++ .../localization/SupportedLanguage.java | 3 + .../implementation/setup/MiscSetup.java | 37 ++--- .../setup/SlimefunItemSetup.java | 11 +- .../Slimefun/Lists/RecipeType.java | 105 +++++++++--- .../Objects/SlimefunItem/ReplacingAlloy.java | 25 --- .../Objects/SlimefunItem/ReplacingItem.java | 22 --- .../Objects/SlimefunItem/SlimefunItem.java | 9 +- .../Slimefun/Setup/SlimefunManager.java | 6 +- .../Slimefun/api/SlimefunRecipes.java | 22 --- src/main/resources/languages/messages_en.yml | 5 +- src/main/resources/languages/recipes_en.yml | 151 ++++++++++++++++++ 16 files changed, 315 insertions(+), 144 deletions(-) delete mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingAlloy.java delete mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingItem.java delete mode 100644 src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java create mode 100644 src/main/resources/languages/recipes_en.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index d380fddfa..199e16224 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ ## Release Candidate 7 (TBD) ### Additions +* Added translations for Recipe Types ### Changes @@ -40,6 +41,7 @@ * Fixed #1553 * Fixed #1513 * Fixed #1557 +* Fixed #1558 ## Release Candidate 6 (16 Feb 2020) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java index d06e451a8..cceac9a34 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java @@ -398,16 +398,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { } } - if (mcRecipe == MinecraftRecipe.SHAPED_CRAFTING) { - recipeType = new RecipeType(new CustomItem(mcRecipe.getMachine(), null, "&7Shaped Recipe")); - } - else if (mcRecipe == MinecraftRecipe.SHAPELESS_CRAFTING) { - recipeType = new RecipeType(new CustomItem(mcRecipe.getMachine(), null, "&7Shapeless Recipe")); - } - else { - recipeType = new RecipeType(mcRecipe); - } - + recipeType = new RecipeType(mcRecipe); result = recipe.getResult(); } else { @@ -494,7 +485,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { menu.addItem(RECIPE_SLOTS[i], getDisplayItem(p, isSlimefunRecipe, recipe[i]), clickHandler); } - menu.addItem(10, recipeType.toItem(), ChestMenuUtils.getEmptyClickHandler()); + menu.addItem(10, recipeType.getItem(p), ChestMenuUtils.getEmptyClickHandler()); menu.addItem(16, output, ChestMenuUtils.getEmptyClickHandler()); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java index b79c0e6ba..17d78d53f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java @@ -81,7 +81,11 @@ public class LocalizationService extends SlimefunLocalization { @Override public boolean hasLanguage(String language) { // Checks if our jar files contains any .yml file for this id - return containsResource("messages_" + language) || containsResource("researches_" + language) || containsResource("resources_" + language); + return containsResource("messages_" + language) + || containsResource("researches_" + language) + || containsResource("resources_" + language) + || containsResource("categories_" + language) + || containsResource("recipes_" + language); } private boolean containsResource(String file) { @@ -121,7 +125,7 @@ public class LocalizationService extends SlimefunLocalization { defaultLanguage.setResearches(streamConfigFile("researches_" + language + ".yml", null)); defaultLanguage.setResources(streamConfigFile("resources_" + language + ".yml", null)); defaultLanguage.setCategories(streamConfigFile("categories_" + language + ".yml", null)); - + defaultLanguage.setRecipeTypes(streamConfigFile("recipes_" + language + ".yml", null)); Slimefun.getLogger().log(Level.INFO, "Loaded language \"{0}\"", language); getConfig().setValue(LANGUAGE_PATH, language); @@ -145,12 +149,14 @@ public class LocalizationService extends SlimefunLocalization { FileConfiguration researches = streamConfigFile("researches_" + id + ".yml", null); FileConfiguration resources = streamConfigFile("resources_" + id + ".yml", null); FileConfiguration categories = streamConfigFile("categories_" + id + ".yml", null); + FileConfiguration recipes = streamConfigFile("recipes_" + id + ".yml", null); Language language = new Language(id, hash); language.setMessages(messages); language.setResearches(researches); language.setResources(resources); language.setCategories(categories); + language.setRecipeTypes(recipes); languages.put(id, language); } @@ -164,7 +170,7 @@ public class LocalizationService extends SlimefunLocalization { } private int getTotalKeys(Language lang) { - return getKeys(lang.getMessages(), lang.getResearches(), lang.getResources(), lang.getCategories()); + return getKeys(lang.getMessages(), lang.getResearches(), lang.getResources(), lang.getCategories(), lang.getRecipeTypes()); } private int getKeys(FileConfiguration... files) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java index 046804607..469875219 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java @@ -16,6 +16,7 @@ public final class Language { private FileConfiguration researches; private FileConfiguration resources; private FileConfiguration categories; + private FileConfiguration recipeTypes; public Language(String id, String hash) { this.id = id; @@ -43,6 +44,10 @@ public final class Language { public FileConfiguration getCategories() { return categories; } + + public FileConfiguration getRecipeTypes() { + return recipeTypes; + } public void setMessages(FileConfiguration config) { this.messages = config; @@ -60,6 +65,10 @@ public final class Language { this.categories = config; } + public void setRecipeTypes(FileConfiguration config) { + this.recipeTypes = config; + } + public ItemStack getItem() { return item; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java index 13eab0ac8..bb7cb85e6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java @@ -8,11 +8,15 @@ import org.bukkit.ChatColor; import org.bukkit.Keyed; import org.bukkit.NamespacedKey; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.cscorelib2.config.Localization; +import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; public abstract class SlimefunLocalization extends Localization implements Keyed { @@ -61,6 +65,29 @@ public abstract class SlimefunLocalization extends Localization implements Keyed return getLanguage("en").getResources().getString(key); } } + + public ItemStack getRecipeTypeItem(Player p, RecipeType recipeType) { + Language language = getLanguage(p); + ItemStack item = recipeType.toItem(); + NamespacedKey key = recipeType.getKey(); + + if (language.getRecipeTypes() == null || !language.getRecipeTypes().contains(key.getNamespace() + "." + key.getKey())) { + language = getLanguage("en"); + } + + if (!language.getRecipeTypes().contains(key.getNamespace() + "." + key.getKey())) { + return item; + } + + FileConfiguration config = language.getRecipeTypes(); + + return new CustomItem(item, meta -> { + meta.setDisplayName(ChatColor.AQUA + config.getString(key.getNamespace() + "." + key.getKey() + ".name")); + List lore = config.getStringList(key.getNamespace() + "." + key.getKey() + ".lore"); + lore.replaceAll(str -> ChatColor.GRAY + str); + meta.setLore(lore); + }); + } @Override public void sendMessage(CommandSender sender, String key, boolean addPrefix) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SupportedLanguage.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SupportedLanguage.java index c3f25f5d0..aa38b8275 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SupportedLanguage.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SupportedLanguage.java @@ -17,6 +17,7 @@ public enum SupportedLanguage { NORWEGIAN("no", "e0596e165ec3f389b59cfdda93dd6e363e97d9c6456e7c2e123973fa6c5fda"), CZECH("cs", "48152b7334d7ecf335e47a4f35defbd2eb6957fc7bfe94212642d62f46e61e"), ROMANIAN("ro", "dceb1708d5404ef326103e7b60559c9178f3dce729007ac9a0b498bdebe46107"), + BULGARIAN("bg", "19039e1fd88c78d9d7adc5aad5ab16e356be13464934ed9e2b0cef2051c5b534"), PORTUGESE_PORTUGAL("pt", "ebd51f4693af174e6fe1979233d23a40bb987398e3891665fafd2ba567b5a53a"), PORTUGESE_BRAZIL("pt-BR", "9a46475d5dcc815f6c5f2859edbb10611f3e861c0eb14f088161b3c0ccb2b0d9"), HUNGARIAN("hu", "4a9c3c4b6c5031332dd2bfece5e31e999f8deff55474065cc86993d7bdcdbd0"), @@ -28,8 +29,10 @@ public enum SupportedLanguage { CHINESE_CHINA("zh-CN", "7f9bc035cdc80f1ab5e1198f29f3ad3fdd2b42d9a69aeb64de990681800b98dc"), CHINESE_TAIWAN("zh-TW", "702a4afb2e1e2e3a1894a8b74272f95cfa994ce53907f9ac140bd3c932f9f"), JAPANESE("ja", "d640ae466162a47d3ee33c4076df1cab96f11860f07edb1f0832c525a9e33323"), + KOREAN("kr", "fc1be5f12f45e413eda56f3de94e08d90ede8e339c7b1e8f32797390e9a5f"), HEBREW("he", "1ba086a2cc7272cf5ba49c80248546c22e5ef1bab54120e8a8e5d9e75b6a"), ARABIC("ar", "a4be759a9cf7f0a19a7e8e62f23789ad1d21cebae38af9d9541676a3db001572"), + TURKISH("tr", "9852b9aba3482348514c1034d0affe73545c9de679ae4647f99562b5e5f47d09"), PERSIAN("fa", "5cd9badf1972583b663b44b1e027255de8f275aa1e89defcf77782ba6fcc652"), AFRIKAANS("af", "961a1eacc10524d1f45f23b0e487bb2fc33948d9676b418b19a3da0b109d0e3c"), MALAY("ms", "754b9041dea6db6db44750f1385a743adf653767b4b8802cad4c585dd3f5be46"), diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/MiscSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/MiscSetup.java index bbd5fbe0b..470490b2c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/MiscSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/MiscSetup.java @@ -21,12 +21,11 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Alloy; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.api.SlimefunRecipes; import me.mrCookieSlime.Slimefun.utils.ConfigCache; public final class MiscSetup { @@ -62,7 +61,7 @@ public final class MiscSetup { List post = new ArrayList<>(); for (SlimefunItem item : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { - if (item instanceof Alloy || item instanceof ReplacingAlloy) pre.add(item); + if (item instanceof Alloy) pre.add(item); else if (item instanceof SlimefunMachine) init.add(item); else post.add(item); } @@ -82,26 +81,6 @@ public final class MiscSetup { AutomatedCraftingChamber crafter = (AutomatedCraftingChamber) SlimefunItem.getByID("AUTOMATED_CRAFTING_CHAMBER"); if (crafter != null) { -// Iterator recipes = Bukkit.recipeIterator(); -// -// while (recipes.hasNext()) { -// Recipe r = recipes.next(); -// boolean allow = true; -// if (Bukkit.getPluginManager().isPluginEnabled("SensibleToolbox")) { -// BaseSTBItem item = SensibleToolbox.getItemRegistry().fromItemStack(r.getResult()); -// allow = item == null; -// } -// -// if (allow) { -// if (r instanceof ShapedRecipe) { -// -// } -// else if (r instanceof ShapelessRecipe) { -// -// } -// } -// } - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"); for (ItemStack[] inputs : RecipeType.getRecipeInputList(machine)) { @@ -166,7 +145,7 @@ public final class MiscSetup { stream = stream.sorted((a, b) -> Integer.compare(b[0].getAmount(), a[0].getAmount())); } - stream.forEach(recipe -> SlimefunRecipes.registerMachineRecipe("ELECTRIC_ORE_GRINDER", 4, new ItemStack[] {recipe[0]}, new ItemStack[] {recipe[1]})); + stream.forEach(recipe -> registerMachineRecipe("ELECTRIC_ORE_GRINDER", 4, new ItemStack[] {recipe[0]}, new ItemStack[] {recipe[1]})); SlimefunItem smeltery = SlimefunItem.getByID("SMELTERY"); if (smeltery != null) { @@ -198,7 +177,7 @@ public final class MiscSetup { // We want to exclude Dust to Ingot Recipes if (!(dust && inputs.size() == 1)) { - SlimefunRecipes.registerMachineRecipe("ELECTRIC_SMELTERY", 12, inputs.toArray(new ItemStack[inputs.size()]), new ItemStack[] {recipe[0]}); + registerMachineRecipe("ELECTRIC_SMELTERY", 12, inputs.toArray(new ItemStack[0]), new ItemStack[] {recipe[0]}); } } @@ -230,6 +209,14 @@ public final class MiscSetup { SlimefunPlugin.getResearchCfg().save(); SlimefunPlugin.getWhitelist().save(); } + + private static void registerMachineRecipe(String machine, int seconds, ItemStack[] input, ItemStack[] output) { + for (SlimefunItem item : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { + if (item instanceof AContainer && ((AContainer) item).getMachineIdentifier().equals(machine)) { + ((AContainer) item).registerRecipe(seconds, input, output); + } + } + } public static void setupItemSettings() { for (World world : Bukkit.getWorlds()) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java index 0cb0695d3..1d7ff4843 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java @@ -160,8 +160,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.JetBoots; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Jetpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.RadioactiveItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; @@ -418,12 +416,14 @@ public final class SlimefunItemSetup { new ItemStack[] {SlimefunItems.LEAD_DUST, SlimefunItems.TIN_DUST, SlimefunItems.LEAD_INGOT, null, null, null, null, null, null}) .register(plugin); - new ReplacingAlloy(SlimefunItems.SYNTHETIC_SAPPHIRE, "SYNTHETIC_SAPPHIRE", + new Alloy((SlimefunItemStack) SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack[] {SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS_PANE), SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.LAPIS_LAZULI), null, null, null, null}) + .setUseableInWorkbench(true) .register(plugin); - new ReplacingItem(Categories.RESOURCES, SlimefunItems.SYNTHETIC_DIAMOND, "SYNTHETIC_DIAMOND", RecipeType.PRESSURE_CHAMBER, + new SlimefunItem(Categories.RESOURCES, (SlimefunItemStack) SlimefunItems.SYNTHETIC_DIAMOND, RecipeType.PRESSURE_CHAMBER, new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, null, null, null, null, null, null, null}) + .setUseableInWorkbench(true) .register(plugin); new Alloy((SlimefunItemStack) SlimefunItems.RAW_CARBONADO, @@ -795,8 +795,9 @@ public final class SlimefunItemSetup { new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.IRON_DUST, null, null, null, null, null, null, null}) .register(plugin); - new ReplacingAlloy(SlimefunItems.SYNTHETIC_EMERALD, "SYNTHETIC_EMERALD", + new Alloy((SlimefunItemStack) SlimefunItems.SYNTHETIC_EMERALD, new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.GLASS_PANE), null, null, null, null, null}) + .setUseableInWorkbench(true) .register(plugin); SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true, true); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index 30752b4be..fa42776ab 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -2,78 +2,133 @@ package me.mrCookieSlime.Slimefun.Lists; import java.util.ArrayList; import java.util.List; +import java.util.Locale; +import org.bukkit.Keyed; import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -import me.mrCookieSlime.Slimefun.api.SlimefunRecipes; -public class RecipeType { +public class RecipeType implements Keyed { + + public static final RecipeType MULTIBLOCK = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "multiblock"), new CustomItem(Material.BRICKS, "&bMultiBlock", "", "&a&oBuild it in the World")); + public static final RecipeType ARMOR_FORGE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "armor_forge"), (SlimefunItemStack) SlimefunItems.ARMOR_FORGE, "", "&a&oCraft it in an Armor Forge"); + public static final RecipeType GRIND_STONE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "grind_stone"), (SlimefunItemStack) SlimefunItems.GRIND_STONE, "", "&a&oGrind it using the Grind Stone"); + public static final RecipeType MOB_DROP = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "mob_drop"), new CustomItem(Material.IRON_SWORD, "&bMob Drop", "", "&a&oKill the specified Mob to obtain this Item")); + public static final RecipeType SMELTERY = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "smeltery"), (SlimefunItemStack) SlimefunItems.SMELTERY, "", "&a&oSmelt it using a Smeltery"); + public static final RecipeType ORE_CRUSHER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "ore_crusher"), (SlimefunItemStack) SlimefunItems.ORE_CRUSHER, "", "&a&oCrush it using the Ore Crusher"); + public static final RecipeType GOLD_PAN = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "gold_pan"), (SlimefunItemStack) SlimefunItems.GOLD_PAN, "", "&a&oUse a Gold Pan on Gravel to obtain this Item"); + public static final RecipeType COMPRESSOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "compressor"), (SlimefunItemStack) SlimefunItems.COMPRESSOR, "", "&a&oCompress it using the Compressor"); + public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "pressure_chamber"), (SlimefunItemStack) SlimefunItems.PRESSURE_CHAMBER, "", "&a&oCompress it using the Pressure Chamber"); + public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "magic_workbench"), (SlimefunItemStack) SlimefunItems.MAGIC_WORKBENCH, "", "&a&oCraft it in a Magic Workbench"); + public static final RecipeType ORE_WASHER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "ore_washer"), (SlimefunItemStack) SlimefunItems.ORE_WASHER, "", "&a&oWash it in an Ore Washer"); + public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "enhanced_crafting_table"), (SlimefunItemStack) SlimefunItems.ENHANCED_CRAFTING_TABLE, "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."); + public static final RecipeType JUICER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "juicer"), (SlimefunItemStack) SlimefunItems.JUICER, "", "&a&oUsed for Juice Creation"); + public static final RecipeType ANCIENT_ALTAR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "ancient_altar"), (SlimefunItemStack) SlimefunItems.ANCIENT_ALTAR, "", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"); + + public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "heated_pressure_chamber"), (SlimefunItemStack) SlimefunItems.HEATED_PRESSURE_CHAMBER, "", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"); + public static final RecipeType FOOD_FABRICATOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "food_fabricator"), (SlimefunItemStack) SlimefunItems.FOOD_FABRICATOR, "", "&a&oCraft this Item in a", "&a&oFood Fabricator"); + public static final RecipeType FOOD_COMPOSTER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "food_composter"), (SlimefunItemStack) SlimefunItems.FOOD_COMPOSTER, "", "&a&oCraft this Item in a", "&a&oFood Composter"); + + public static final RecipeType NULL = new RecipeType(); + - public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICKS, "&bMultiBlock", "", "&a&oBuild it in the World")); - public static final RecipeType ARMOR_FORGE = new RecipeType((SlimefunItemStack) SlimefunItems.ARMOR_FORGE, "", "&a&oCraft it in an Armor Forge"); - public static final RecipeType GRIND_STONE = new RecipeType((SlimefunItemStack) SlimefunItems.GRIND_STONE, "", "&a&oGrind it using the Grind Stone"); - public static final RecipeType MOB_DROP = new RecipeType(new CustomItem(Material.IRON_SWORD, "&bMob Drop", "", "&a&oKill the specified Mob to obtain this Item")); - public static final RecipeType SMELTERY = new RecipeType((SlimefunItemStack) SlimefunItems.SMELTERY, "", "&a&oSmelt it using a Smeltery"); - public static final RecipeType ORE_CRUSHER = new RecipeType((SlimefunItemStack) SlimefunItems.ORE_CRUSHER, "", "&a&oCrush it using the Ore Crusher"); - public static final RecipeType GOLD_PAN = new RecipeType((SlimefunItemStack) SlimefunItems.GOLD_PAN, "", "&a&oUse a Gold Pan on Gravel to obtain this Item"); - public static final RecipeType COMPRESSOR = new RecipeType((SlimefunItemStack) SlimefunItems.COMPRESSOR, "", "&a&oCompress it using the Compressor"); - public static final RecipeType PRESSURE_CHAMBER = new RecipeType((SlimefunItemStack) SlimefunItems.PRESSURE_CHAMBER, "", "&a&oCompress it using the Pressure Chamber"); - public static final RecipeType MAGIC_WORKBENCH = new RecipeType((SlimefunItemStack) SlimefunItems.MAGIC_WORKBENCH, "", "&a&oCraft it in a Magic Workbench"); - public static final RecipeType ORE_WASHER = new RecipeType((SlimefunItemStack) SlimefunItems.ORE_WASHER, "", "&a&oWash it in an Ore Washer"); - public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType((SlimefunItemStack) SlimefunItems.ENHANCED_CRAFTING_TABLE, "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."); - public static final RecipeType JUICER = new RecipeType((SlimefunItemStack) SlimefunItems.JUICER, "", "&a&oUsed for Juice Creation"); - public static final RecipeType ANCIENT_ALTAR = new RecipeType((SlimefunItemStack) SlimefunItems.ANCIENT_ALTAR, "", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"); - public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType((SlimefunItemStack) SlimefunItems.HEATED_PRESSURE_CHAMBER, "", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"); - public static final RecipeType FOOD_FABRICATOR = new RecipeType((SlimefunItemStack) SlimefunItems.FOOD_FABRICATOR, "", "&a&oCraft this Item in a", "&a&oFood Fabricator"); - public static final RecipeType FOOD_COMPOSTER = new RecipeType((SlimefunItemStack) SlimefunItems.FOOD_COMPOSTER, "", "&a&oCraft this Item in a", "&a&oFood Composter"); - public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShaped Recipe", "", "&a&oJust a standard Recipe in the Workbench...")); - public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShapeless Recipe", "", "&a&oJust a standard Recipe in the Workbench...")); - public static final RecipeType FURNACE = new RecipeType(new CustomItem(Material.FURNACE, "&eFurnace Recipe", "", "&a&oJust smelt it in a regular Furnace")); - public static final RecipeType NULL = new RecipeType((ItemStack) null); private final ItemStack item; + private final NamespacedKey key; private final String machine; + private RecipeType() { + this.item = null; + this.machine = ""; + this.key = new NamespacedKey(SlimefunPlugin.instance, "null"); + } + public RecipeType(ItemStack item, String machine) { this.item = item; this.machine = machine; + + if (machine.length() > 0) { + this.key = new NamespacedKey(SlimefunPlugin.instance, machine.toLowerCase()); + } + else { + this.key = new NamespacedKey(SlimefunPlugin.instance, "unknown"); + } } + public RecipeType(NamespacedKey key, SlimefunItemStack slimefunItem, String... lore) { + this.item = new CustomItem(slimefunItem, null, lore); + this.machine = slimefunItem.getItemID(); + this.key = key; + } + + @Deprecated public RecipeType(SlimefunItemStack slimefunItem, String... lore) { this.item = new CustomItem(slimefunItem, null, lore); this.machine = slimefunItem.getItemID(); + this.key = new NamespacedKey(SlimefunPlugin.instance, machine.toLowerCase()); } + /** + * @deprecated Use the constructor with {@link NamespacedKey} instead + * @param item The {@link ItemStack} to use for this {@link RecipeType} + */ + @Deprecated public RecipeType(ItemStack item) { this(item, ""); } + public RecipeType(NamespacedKey key, ItemStack item) { + this.key = key; + this.item = item; + this.machine = ""; + } + public RecipeType(MinecraftRecipe recipe) { - this(new ItemStack(recipe.getMachine())); + this.item = new ItemStack(recipe.getMachine()); + this.machine = ""; + this.key = NamespacedKey.minecraft(recipe.getRecipeClass().getSimpleName().toLowerCase(Locale.ROOT).replace("recipe", "")); } public RecipeType(String machine, int seconds, ItemStack[] input, ItemStack[] output) { this.machine = machine; this.item = getMachine().getItem(); + this.key = new NamespacedKey(SlimefunPlugin.instance, machine.toLowerCase()); - SlimefunRecipes.registerMachineRecipe(machine, seconds, input, output); + for (SlimefunItem sfItem : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { + if (sfItem instanceof AContainer && ((AContainer) sfItem).getMachineIdentifier().equals(machine)) { + ((AContainer) sfItem).registerRecipe(seconds, input, output); + } + } } public ItemStack toItem() { return this.item; } + public ItemStack getItem(Player p) { + return SlimefunPlugin.getLocal().getRecipeTypeItem(p, this); + } + public SlimefunItem getMachine() { return SlimefunItem.getByID(machine); } + + @Override + public NamespacedKey getKey() { + return key; + } public static List getRecipeInputs(SlimefunMachine machine) { if (machine == null) return new ArrayList<>(); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingAlloy.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingAlloy.java deleted file mode 100644 index 4e265ea3d..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingAlloy.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; - -import me.mrCookieSlime.Slimefun.Lists.Categories; -import me.mrCookieSlime.Slimefun.Lists.RecipeType; -import me.mrCookieSlime.Slimefun.Objects.Category; - -import org.bukkit.inventory.ItemStack; - -/** - * - * @deprecated The method name is very misleading, therefore it should be renamed - * - */ -@Deprecated -public class ReplacingAlloy extends ReplacingItem { - - public ReplacingAlloy(ItemStack item, String id, ItemStack[] recipe) { - super(Categories.RESOURCES, item, id, RecipeType.SMELTERY, recipe); - } - - public ReplacingAlloy(Category category, ItemStack item, String id, ItemStack[] recipe) { - super(category, item, id, RecipeType.SMELTERY, recipe); - } - -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingItem.java deleted file mode 100644 index 934f56285..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ReplacingItem.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; - -import me.mrCookieSlime.Slimefun.Lists.RecipeType; -import me.mrCookieSlime.Slimefun.Objects.Category; - -import org.bukkit.inventory.ItemStack; - -/** - * - * @deprecated The method name is very misleading, therefore it should be renamed - * - */ -@Deprecated -public class ReplacingItem extends SlimefunItem { - - public ReplacingItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); - - useableInWorkbench = true; - } - -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 17c90caa9..31c964a74 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -361,6 +361,11 @@ public class SlimefunItem implements Placeable { return useableInWorkbench; } + public SlimefunItem setUseableInWorkbench(boolean useable) { + this.useableInWorkbench = useable; + return this; + } + public static SlimefunItem getByID(String id) { return SlimefunPlugin.getRegistry().getSlimefunItemIds().get(id); } @@ -417,7 +422,7 @@ public class SlimefunItem implements Placeable { ItemStack output = item.clone(); if (recipeOutput != null) output = recipeOutput.clone(); - if (recipeType.toItem().isSimilar(RecipeType.MOB_DROP.toItem())) { + if (recipeType == RecipeType.MOB_DROP) { String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(' ', '_'); try { @@ -429,7 +434,7 @@ public class SlimefunItem implements Placeable { Slimefun.getLogger().log(Level.WARNING, "An Exception occured when setting a Drop for the Mob: " + mob + " (" + x.getClass().getSimpleName() + ")"); } } - else if (recipeType.toItem().isSimilar(RecipeType.ANCIENT_ALTAR.toItem())) { + else if (recipeType == RecipeType.ANCIENT_ALTAR) { new AltarRecipe(Arrays.asList(recipe), output); } else if (recipeType.getMachine() != null) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index e05fb1137..39dfa828e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -44,10 +44,10 @@ public final class SlimefunManager { for (int i = 0; i < 4; i++) { if (i < effects.length && effects[i].length > 0) { - new SlimefunArmorPiece(category, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i), effects[i]).register(slimefun); + new SlimefunArmorPiece(category, new SlimefunItemStack(idSyntax + components[i], items[i]), RecipeType.ARMOR_FORGE, recipes.get(i), effects[i]).register(slimefun); } else { - new SlimefunItem(category, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + new SlimefunItem(category, new SlimefunItemStack(idSyntax + components[i], items[i]), RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); } } } @@ -66,7 +66,7 @@ public final class SlimefunManager { new VanillaItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); } else { - new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + new SlimefunItem(cat, new SlimefunItemStack(idSyntax + components[i], items[i]), RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); } } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java b/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java deleted file mode 100644 index e9d5129aa..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunRecipes.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.mrCookieSlime.Slimefun.api; - -import org.bukkit.inventory.ItemStack; - -import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; - -@Deprecated -public final class SlimefunRecipes { - - private SlimefunRecipes() {} - - public static void registerMachineRecipe(String machine, int seconds, ItemStack[] input, ItemStack[] output) { - for (SlimefunItem item : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { - if (item instanceof AContainer && ((AContainer) item).getMachineIdentifier().equals(machine)) { - ((AContainer) item).registerRecipe(seconds, input, output); - } - } - } - -} diff --git a/src/main/resources/languages/messages_en.yml b/src/main/resources/languages/messages_en.yml index 86011c3eb..ac7e0b031 100644 --- a/src/main/resources/languages/messages_en.yml +++ b/src/main/resources/languages/messages_en.yml @@ -298,4 +298,7 @@ languages: ja: 'Japanese' fa: 'Persian' th: 'Thai' - ro: 'Romanian' \ No newline at end of file + ro: 'Romanian' + bg: 'Bulgarian' + ko: 'Korean' + tr: 'Turkish' \ No newline at end of file diff --git a/src/main/resources/languages/recipes_en.yml b/src/main/resources/languages/recipes_en.yml new file mode 100644 index 000000000..10c8949bf --- /dev/null +++ b/src/main/resources/languages/recipes_en.yml @@ -0,0 +1,151 @@ +slimefun: + + multiblock: + name: 'Multiblock' + lore: + - 'Build the shown structure' + - 'as shown. It is not crafted.' + + enhanced_crafting_table: + name: 'Enhanced Crafting Table' + lore: + - 'Craft this Item as shown' + - 'in an Enhanced Crafting Table.' + - 'A normal Crafting Table will not suffice!' + + armor_forge: + name: 'Armor Forge' + lore: + - 'Craft this Item as shown' + - 'using an Armor Forge' + + grind_stone: + name: 'Grind Stone' + lore: + - 'Craft this Item as shown' + - 'using a Grind Stone' + + smeltery: + name: 'Smeltery' + lore: + - 'Craft this Item as shown' + - 'using a Smeltery' + + ore_crusher: + name: 'Ore Crusher' + lore: + - 'Craft this Item as shown' + - 'using an Ore Crusher' + + mob_drop: + name: 'Mob Drop' + lore: + - 'Kill that Mob to' + - 'obtain this item' + + gold_pan: + name: 'Gold Pan' + lore: + - 'Use a Gold Pan to' + - 'obtain this item' + + compressor: + name: 'Compressor' + lore: + - 'Craft this Item as shown' + - 'using a Compressor' + + pressure_chamber: + name: 'Pressure Chamber' + lore: + - 'Craft this Item as shown' + - 'using a Pressure Chamber' + + ore_washer: + name: 'Ore Washer' + lore: + - 'Craft this Item as shown' + - 'using an Ore Washer' + + juicer: + name: 'Juicer' + lore: + - 'Craft this Juice as shown' + - 'using a Juicer' + + magic_workbench: + name: 'Magic Workbench' + lore: + - 'Craft this Item as shown' + - 'using a Magic Workbench' + + ancient_altar: + name: 'Ancient Altar' + lore: + - 'Craft this Item as shown' + - 'using an Ancient Altar.' + - 'Look up the Ancient Altar for more Info' + + heated_pressure_chamber: + name: 'Heated Pressure Chamber' + lore: + - 'Craft this Item as shown' + - 'using a Heated Pressure Chamber' + + food_fabricator: + name: 'Food Fabricator' + lore: + - 'Craft this Item as shown' + - 'using a Heated Pressure Chamber' + + food_composter: + name: 'Food Composter' + lore: + - 'Craft this Item as shown' + - 'using a Food Composter' + +minecraft: + + shaped: + name: 'Shaped Crafting Recipe' + lore: + - 'Craft this Item as shown' + - 'in a normal Crafting Table.' + - 'The shape is important.' + + shapeless: + name: 'Shapeless Crafting Recipe' + lore: + - 'Craft this Item as shown' + - 'in a normal Crafting Table.' + - 'This Recipe is shapeless.' + + furnace: + name: 'Furnace Recipe' + lore: + - 'Smelt this item in a Furnace' + - 'to craft your desired item' + + blasting: + name: 'Blast Furnace Recipe' + lore: + - 'Smelt this item in a Blast Furnace' + - 'to craft your desired item' + + smoking: + name: 'Smoker Recipe' + lore: + - 'Smelt this item in a Smoker' + - 'to craft your desired item' + + campfire: + name: 'Campfire Recipe' + lore: + - 'Smelt this item over a Campfire' + - 'to craft your desired item' + + stonecutting: + name: 'Stonecutter Recipe' + lore: + - 'Craft this Item as shown' + - 'using a Stonecutter' \ No newline at end of file