1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

[CI skip] Recipe Types can now be translated as well

This commit is contained in:
TheBusyBiscuit 2020-02-22 15:41:35 +01:00
parent db5e7e5fbd
commit 51d33dee02
16 changed files with 315 additions and 144 deletions

View File

@ -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)

View File

@ -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());
}

View File

@ -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) {

View File

@ -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;
}

View File

@ -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<String> 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) {

View File

@ -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"),

View File

@ -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<SlimefunItem> 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<Recipe> 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()) {

View File

@ -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);

View File

@ -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<ItemStack> getRecipeInputs(SlimefunMachine machine) {
if (machine == null) return new ArrayList<>();

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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) {

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -298,4 +298,7 @@ languages:
ja: 'Japanese'
fa: 'Persian'
th: 'Thai'
ro: 'Romanian'
ro: 'Romanian'
bg: 'Bulgarian'
ko: 'Korean'
tr: 'Turkish'

View File

@ -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'