diff --git a/CHANGELOG.md b/CHANGELOG.md index b9b1337a2..e79f9b5df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ * Added support for Furnaces and Brewing Stands to Cargo Networks * Added Organic Food/Fertilizer for Dried Kelp * Added many more strings to the messages.yml +* Added ability to translate messages for Players ### Changes * Removed Solar Array @@ -59,6 +60,7 @@ * Fixed #1394 * Fixed #1313 * Fixed #1396 +* Fixed Backpacks being placeable ## Release Candidate 4 (06 Jan 2020) https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#4 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 869658d5b..cb7a6cc83 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 @@ -147,14 +147,14 @@ public class ChestSlimefunGuide implements ISlimefunGuide { } } - menu.addItem(46, ChestMenuUtils.getPreviousButton(page, pages)); + menu.addItem(46, ChestMenuUtils.getPreviousButton(p, page, pages)); menu.addMenuClickHandler(46, (pl, slot, item, action) -> { int next = page - 1; if (next != page && next > 0) openMainMenu(profile, survival, next); return false; }); - menu.addItem(52, ChestMenuUtils.getNextButton(page, pages)); + menu.addItem(52, ChestMenuUtils.getNextButton(p, page, pages)); menu.addMenuClickHandler(52, (pl, slot, item, action) -> { int next = page + 1; if (next != page && next <= pages) openMainMenu(profile, survival, next); @@ -185,14 +185,14 @@ public class ChestSlimefunGuide implements ISlimefunGuide { int index = 9; int pages = (category.getItems().size() - 1) / CATEGORY_SIZE + 1; - menu.addItem(46, ChestMenuUtils.getPreviousButton(page, pages)); + menu.addItem(46, ChestMenuUtils.getPreviousButton(p, page, pages)); menu.addMenuClickHandler(46, (pl, slot, item, action) -> { int next = page - 1; if (next != page && next > 0) openCategory(profile, category, survival, next); return false; }); - menu.addItem(52, ChestMenuUtils.getNextButton(page, pages)); + menu.addItem(52, ChestMenuUtils.getNextButton(p, page, pages)); menu.addMenuClickHandler(52, (pl, slot, item, action) -> { int next = page + 1; if (next != page && next <= pages) openCategory(profile, category, survival, next); @@ -408,7 +408,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); } - menu.addItem(28, ChestMenuUtils.getPreviousButton(index + 1, recipes.length), + menu.addItem(28, ChestMenuUtils.getPreviousButton(p, index + 1, recipes.length), (pl, slot, action, stack) -> { if (index > 0) { showMinecraftRecipe(recipes, index - 1, item, profile, p, false); @@ -416,7 +416,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { return false; }); - menu.addItem(34, ChestMenuUtils.getNextButton(index + 1, recipes.length), + menu.addItem(34, ChestMenuUtils.getNextButton(p, index + 1, recipes.length), (pl, slot, action, stack) -> { if (index < recipes.length - 1) { showMinecraftRecipe(recipes, index + 1, item, profile, p, false); @@ -455,7 +455,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { displayItem(menu, profile, p, item, result, recipeType, recipe, addToHistory); if (item instanceof RecipeDisplayItem) { - displayRecipes(profile, menu, (RecipeDisplayItem) item, 0); + displayRecipes(p, profile, menu, (RecipeDisplayItem) item, 0); } menu.open(p); @@ -559,7 +559,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { } } - private void displayRecipes(PlayerProfile profile, ChestMenu menu, RecipeDisplayItem sfItem, int page) { + private void displayRecipes(Player p, PlayerProfile profile, ChestMenu menu, RecipeDisplayItem sfItem, int page) { List recipes = sfItem.getDisplayRecipes(); if (!recipes.isEmpty()) { @@ -574,20 +574,20 @@ public class ChestSlimefunGuide implements ISlimefunGuide { int pages = (recipes.size() - 1) / 18 + 1; - menu.replaceExistingItem(28, ChestMenuUtils.getPreviousButton(page + 1, pages)); + menu.replaceExistingItem(28, ChestMenuUtils.getPreviousButton(p, page + 1, pages)); menu.addMenuClickHandler(28, (pl, slot, itemstack, action) -> { if (page > 0) { - displayRecipes(profile, menu, sfItem, page - 1); + displayRecipes(pl, profile, menu, sfItem, page - 1); pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1); } return false; }); - menu.replaceExistingItem(34, ChestMenuUtils.getNextButton(page + 1, pages)); + menu.replaceExistingItem(34, ChestMenuUtils.getNextButton(p, page + 1, pages)); menu.addMenuClickHandler(34, (pl, slot, itemstack, action) -> { if (recipes.size() > (18 * (page + 1))) { - displayRecipes(profile, menu, sfItem, page + 1); + displayRecipes(pl, profile, menu, sfItem, page + 1); pl.playSound(pl.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 1); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java index c37fbeabb..98377f427 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java @@ -266,10 +266,11 @@ public final class GuideSettings { }); } else if (i == 7) { - menu.addItem(7, new CustomItem(SkullItem.fromHash("3edd20be93520949e6ce789dc4f43efaeb28c717ee6bfcbbe02780142f716"), "&cAdd your Translation", "", "&4This is not possible yet", "&4Stay tuned for updates on this!") - , (pl, slot, item, action) -> - false - ); + menu.addItem(7, new CustomItem(SkullItem.fromHash("3edd20be93520949e6ce789dc4f43efaeb28c717ee6bfcbbe02780142f716"), SlimefunPlugin.getLocal().getMessage(p, "guide.languages.translations.name"), "", "&7\u21E8 &eClick to add your own translations") + , (pl, slot, item, action) -> { + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki/Translating-Slimefun"); + return false; + }); } else { menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); @@ -386,13 +387,13 @@ public final class GuideSettings { }); } - menu.addItem(46, ChestMenuUtils.getPreviousButton(page + 1, pages)); + menu.addItem(46, ChestMenuUtils.getPreviousButton(p, page + 1, pages)); menu.addMenuClickHandler(46, (pl, slot, item, action) -> { if (page > 0) openCredits(pl, page - 1); return false; }); - menu.addItem(52, ChestMenuUtils.getNextButton(page + 1, pages)); + menu.addItem(52, ChestMenuUtils.getNextButton(p, page + 1, pages)); menu.addMenuClickHandler(52, (pl, slot, item, action) -> { if (page + 1 < pages) openCredits(pl, page + 1); return false; 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 6516cd1f7..5b2b71264 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 @@ -114,22 +114,19 @@ public class LocalizationService extends SlimefunLocalization { } private void addLanguage(String id, String hash) { - FileConfiguration cfg; - - if (!hasLanguage(id)) { - cfg = getConfig().getConfiguration(); - } - else { + if (hasLanguage(id)) { + FileConfiguration cfg; String path = "/languages/messages_" + id + ".yml"; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(path)))) { cfg = YamlConfiguration.loadConfiguration(reader); cfg.setDefaults(getConfig().getConfiguration()); } catch (IOException e) { Slimefun.getLogger().log(Level.SEVERE, "Failed to load language file into memory: \"" + path + "\"", e); - cfg = getConfig().getConfiguration(); + return; } - } - languages.put(id, new Language(id, cfg, hash)); + languages.put(id, new Language(id, cfg, hash)); + } } } 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 caffb1913..c22b67a4f 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 @@ -2,7 +2,14 @@ package io.github.thebusybiscuit.slimefun4.core.services.localization; public enum SupportedLanguage { - ENGLISH("en", "a1701f21835a898b20759fb30a583a38b994abf60d3912ab4ce9f2311e74f72"); + ENGLISH("en", "a1701f21835a898b20759fb30a583a38b994abf60d3912ab4ce9f2311e74f72"), + GERMAN("de", "5e7899b4806858697e283f084d9173fe487886453774626b24bd8cfecc77b3f"), + FRENCH("fr", "51269a067ee37e63635ca1e723b676f139dc2dbddff96bbfef99d8b35c996bc"), + ITALIAN("it", "85ce89223fa42fe06ad65d8d44ca412ae899c831309d68924dfe0d142fdbeea4"), + SPANISH("es", "32bd4521983309e0ad76c1ee29874287957ec3d96f8d889324da8c887e485ea8"), + POLISH("pl", "921b2af8d2322282fce4a1aa4f257a52b68e27eb334f4a181fd976bae6d8eb"), + SWEDISH("sv", "e910904bff9c86f6ed47688e9429c26e8d9c5d5743bd3ebb8e6f5040be192998"), + DUTCH("nl", "c23cf210edea396f2f5dfbced69848434f93404eefeabf54b23c073b090adf"); private final String id; private final String textureHash; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java index 77ebd539b..2b51fba56 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java @@ -113,14 +113,6 @@ public class BlockListener implements Listener { else if (SlimefunManager.isItemSimilar(item, SlimefunItems.PORTABLE_CRAFTER, true)) e.setCancelled(true); else if (SlimefunManager.isItemSimilar(item, SlimefunItems.PORTABLE_DUSTBIN, true)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_SMALL, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_MEDIUM, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BACKPACK_LARGE, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.WOVEN_BACKPACK, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.GILDED_BACKPACK, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.RADIANT_BACKPACK, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.BOUND_BACKPACK, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.COOLER, false)) e.setCancelled(true); else if (SlimefunManager.isItemSimilar(item, SlimefunItems.ENDER_BACKPACK, false)) e.setCancelled(true); else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARBON, false)) e.setCancelled(true); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChestMenuUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChestMenuUtils.java index 1ea51aaf3..f0ca44698 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChestMenuUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChestMenuUtils.java @@ -4,6 +4,7 @@ import java.util.Arrays; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; @@ -12,6 +13,7 @@ import org.bukkit.inventory.meta.ItemMeta; import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.MenuClickHandler; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; @@ -56,20 +58,32 @@ public final class ChestMenuUtils { return WIKI_BUTTON; } - public static ItemStack getPreviousButton(int page, int pages) { + public static ItemStack getPreviousButton(Player p, int page, int pages) { if (pages == 1 || page == 1) { - return new CustomItem(PREV_BUTTON_INACTIVE, meta -> meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")"))); + return new CustomItem(PREV_BUTTON_INACTIVE, meta -> { + meta.setDisplayName(ChatColor.DARK_GRAY + "\u21E6 " + SlimefunPlugin.getLocal().getMessage(p, "guide.pages.previous")); + meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")")); + }); } - return new CustomItem(PREV_BUTTON_ACTIVE, meta -> meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")"))); + return new CustomItem(PREV_BUTTON_ACTIVE, meta -> { + meta.setDisplayName(ChatColor.RESET + "\u21E6 " + SlimefunPlugin.getLocal().getMessage(p, "guide.pages.previous")); + meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")")); + }); } - public static ItemStack getNextButton(int page, int pages) { + public static ItemStack getNextButton(Player p, int page, int pages) { if (pages == 1 || page == pages) { - return new CustomItem(NEXT_BUTTON_INACTIVE, meta -> meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")"))); + return new CustomItem(NEXT_BUTTON_INACTIVE, meta -> { + meta.setDisplayName(ChatColor.DARK_GRAY + SlimefunPlugin.getLocal().getMessage(p, "guide.pages.next") + " \u21E6"); + meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")")); + }); } - - return new CustomItem(NEXT_BUTTON_ACTIVE, meta -> meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")"))); + + return new CustomItem(NEXT_BUTTON_ACTIVE, meta -> { + meta.setDisplayName(ChatColor.RESET + SlimefunPlugin.getLocal().getMessage(p, "guide.pages.next") + " \u21E6"); + meta.setLore(Arrays.asList("", ChatColor.GRAY + "(" + page + " / " + pages + ")")); + }); } public static void updateProgressbar(BlockMenu menu, int slot, int timeleft, int time, ItemStack indicator) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java index 0dd203599..9d30a9db5 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java @@ -26,6 +26,8 @@ public class SlimefunBackpack extends SimpleSlimefunItem { @Override public ItemUseHandler getItemHandler() { return e -> { + e.cancel(); + BackpackListener listener = SlimefunPlugin.getBackpackListener(); if (listener != null) { diff --git a/src/main/resources/languages/messages_en.yml b/src/main/resources/languages/messages_en.yml index c6aa0db33..004eb4c40 100644 --- a/src/main/resources/languages/messages_en.yml +++ b/src/main/resources/languages/messages_en.yml @@ -25,9 +25,15 @@ guide: cheat: no-multiblocks: '&4You cannot cheat in Multiblocks, you have to build them!' + + pages: + previous: 'Previous page' + next: 'Next page' languages: updated: '&aYour language was successfully set to: &b%lang%' + translations: + name: '&aIs something missing?' title: main: 'Slimefun Guide' @@ -231,3 +237,7 @@ languages: de: 'German' fr: 'French' it: 'Italian' + es: 'Spanish' + pl: 'Polish' + sv: 'Swedish' + nl: 'Dutch' \ No newline at end of file