From ae1c34ce7c12fa1556cec9d8ffa55530ba746b97 Mon Sep 17 00:00:00 2001 From: StarWishSama Date: Mon, 3 Feb 2020 17:17:55 +0800 Subject: [PATCH] Updated to 6f7f6c632391fbb233a4566c1a38ecab4cdf9e3d --- pom.xml | 4 +- renovate.json | 11 - .../slimefun4/api/player/StatusEffect.java | 128 +++ .../slimefun4/core/SlimefunRegistry.java | 357 ++++---- .../commands/subcommands/GiveCommand.java | 94 +-- .../commands/subcommands/ResearchCommand.java | 150 ++-- .../core/guide/ChestSlimefunGuide.java | 8 +- .../slimefun4/core/guide/GuideSettings.java | 765 +++++++++--------- .../core/services/GitHubService.java | 83 +- .../core/services/LocalizationService.java | 249 +++--- .../core/services/MetricsService.java | 85 +- .../core/services/github/Translators.java | 80 ++ .../core/services/localization/Language.java | 79 +- .../localization/SlimefunLocalization.java | 197 ++--- .../localization/SupportedLanguage.java | 2 +- .../implementation/setup/MiscSetup.java | 255 ++++++ .../implementation/setup/ResearchSetup.java | 250 ++++++ .../implementation/setup}/SlimefunSetup.java | 9 +- .../implementation/setup}/WikiSetup.java | 2 +- .../Slimefun/Lists/SlimefunItems.java | 9 +- .../Slimefun/Objects/Research.java | 735 ++++++++--------- .../machines/electric/XPCollector.java | 5 +- .../SlimefunItem/multiblocks/Smeltery.java | 12 +- .../Slimefun/Setup/MiscSetup.java | 255 ------ .../Setup/PostSlimefunLoadingHandler.java | 13 - .../Slimefun/Setup/ResearchSetup.java | 253 ------ .../Slimefun/SlimefunPlugin.java | 13 +- .../Slimefun/api/BlockStorage.java | 7 +- .../mrCookieSlime/Slimefun/api/Slimefun.java | 11 + .../Slimefun/utils/ConfigCache.java | 72 +- src/main/resources/languages/messages_de.yml | 21 +- src/main/resources/languages/messages_en.yml | 2 +- src/main/resources/languages/messages_fr.yml | 32 +- src/main/resources/languages/messages_hu.yml | 397 ++++----- src/main/resources/languages/messages_it.yml | 389 ++++----- src/main/resources/languages/messages_pl.yml | 247 ++++++ src/main/resources/languages/messages_ru.yml | 250 ++++++ src/main/resources/languages/messages_sk.yml | 383 ++++----- src/main/resources/languages/messages_vi.yml | 403 ++++----- .../resources/languages/researches_en.yml | 231 ++++++ .../resources/languages/researches_fr.yml | 232 ++++++ .../resources/languages/researches_vi.yml | 232 ++++++ 42 files changed, 4227 insertions(+), 2785 deletions(-) delete mode 100644 renovate.json create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/api/player/StatusEffect.java create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Translators.java create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/MiscSetup.java create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java rename src/main/java/{me/mrCookieSlime/Slimefun/Setup => io/github/thebusybiscuit/slimefun4/implementation/setup}/SlimefunSetup.java (99%) rename src/main/java/{me/mrCookieSlime/Slimefun/Setup => io/github/thebusybiscuit/slimefun4/implementation/setup}/WikiSetup.java (95%) delete mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java delete mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Setup/PostSlimefunLoadingHandler.java delete mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java create mode 100644 src/main/resources/languages/messages_pl.yml create mode 100644 src/main/resources/languages/messages_ru.yml create mode 100644 src/main/resources/languages/researches_en.yml create mode 100644 src/main/resources/languages/researches_fr.yml create mode 100644 src/main/resources/languages/researches_vi.yml diff --git a/pom.xml b/pom.xml index 7dd729fa70..303046e828 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 me.mrCookieSlime Slimefun - 4.2-UNOFFCIAL-20200202 + 4.2-UNOFFCIAL-20200203 1.8 @@ -127,7 +127,7 @@ com.sk89q.worldedit worldedit-bukkit - 7.0.1 + 7.1.0 provided diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 972c7f99ac..0000000000 --- a/renovate.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": [ - "config:base" - ], - "assignees": [ - "TheBusyBiscuit" - ], - "labels": [ - "Dependency Update" - ] -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/StatusEffect.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/StatusEffect.java new file mode 100644 index 0000000000..41ccde9452 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/StatusEffect.java @@ -0,0 +1,128 @@ +package io.github.thebusybiscuit.slimefun4.api.player; + +import java.util.Optional; +import java.util.OptionalInt; +import java.util.concurrent.TimeUnit; + +import org.bukkit.Keyed; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; + +import io.github.thebusybiscuit.cscorelib2.data.PersistentDataAPI; + +/** + * A very simple API that is meant for adding/getting/clearing custom status effects + * to/from players. + * + * The effects are stored via {@link PersistentDataAPI} and use NBT data that is + * saved across server restarts. + * + * You can specify a level for your status effect too. + * + * @author TheBusyBiscuit + * + */ +public class StatusEffect implements Keyed { + + private final NamespacedKey key; + + public StatusEffect(NamespacedKey key) { + this.key = key; + } + + @Override + public NamespacedKey getKey() { + return key; + } + + /** + * This applies this {@link StatusEffect} to the given {@link Player}. + * You can specify a duration, this will reference + * {@link StatusEffect#add(Player, int, int, TimeUnit)} with a level of 1. + * + * @param p The {@link Player} whom to apply the effect to + * @param duration The duration of how long that status effect shall last + * @param unit The {@link TimeUnit} for the given duration + */ + public void add(Player p, int duration, TimeUnit unit) { + add(p, 1, duration, unit); + } + + /** + * This applies this {@link StatusEffect} to the given {@link Player}. + * + * @param p The {@link Player} whom to apply the effect to + * @param level The level of this effect + * @param duration The duration of how long that status effect shall last + * @param unit The {@link TimeUnit} for the given duration + */ + public void add(Player p, int level, int duration, TimeUnit unit) { + PersistentDataAPI.setString(p, getKey(), level + ";" + System.currentTimeMillis() + unit.toMillis(duration)); + } + + /** + * This applies this {@link StatusEffect} to the given {@link Player}. + * This will apply it permanently, there is no duration. + * + * @param p The {@link Player} whom to apply the effect to + * @param level The level of this effect + */ + public void addPermanent(Player p, int level) { + PersistentDataAPI.setString(p, getKey(), level + ";0"); + } + + /** + * This will check whether this {@link StatusEffect} is currently applied + * to that {@link Player}. + * If the effect has expired, it will automatically remove all associated + * NBT data of this effect. + * + * @param p The {@link Player} to check for + * @return Whether this {@link StatusEffect} is currently applied + */ + public boolean isPresent(Player p) { + Optional optional = PersistentDataAPI.getOptionalString(p, getKey()); + + if (optional.isPresent()) { + String[] data = optional.get().split(";"); + long timestamp = Long.parseLong(data[1]); + + if (timestamp == 0 || timestamp >= System.currentTimeMillis()) { + return true; + } + else { + clear(p); + return false; + } + } + else return false; + } + + /** + * This method returns an {@link OptionalInt} describing the level of this status + * effect on that player. + * + * @param p The {@link Player} to check for + * @return An {@link OptionalInt} that describes the result + */ + public OptionalInt getLevel(Player p) { + Optional optional = PersistentDataAPI.getOptionalString(p, getKey()); + + if (optional.isPresent()) { + String[] data = optional.get().split(";"); + return OptionalInt.of(Integer.parseInt(data[0])); + + } + else return OptionalInt.empty(); + } + + /** + * This will remove this {@link StatusEffect} from the given {@link Player}. + * + * @param p The {@link Player} to clear it from + */ + public void clear(Player p) { + PersistentDataAPI.remove(p, getKey()); + } + +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/SlimefunRegistry.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/SlimefunRegistry.java index d1ff2ae73c..8531cdad15 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/SlimefunRegistry.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/SlimefunRegistry.java @@ -1,7 +1,6 @@ package io.github.thebusybiscuit.slimefun4.core; import java.util.ArrayList; -import java.util.Collection; import java.util.EnumMap; import java.util.HashMap; import java.util.HashSet; @@ -15,11 +14,13 @@ import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.cscorelib2.collections.KeyMap; import io.github.thebusybiscuit.cscorelib2.config.Config; import io.github.thebusybiscuit.slimefun4.core.guide.BookSlimefunGuide; import io.github.thebusybiscuit.slimefun4.core.guide.ChestSlimefunGuide; import io.github.thebusybiscuit.slimefun4.core.guide.ISlimefunGuide; import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.GEO.OreGenResource; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.MultiBlock; @@ -27,7 +28,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; -import me.mrCookieSlime.Slimefun.Setup.PostSlimefunLoadingHandler; import me.mrCookieSlime.Slimefun.api.BlockInfoConfig; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.GuideHandler; @@ -37,180 +37,179 @@ public class SlimefunRegistry { - private final Map slimefunIds = new HashMap<>(); - private final List slimefunItems = new ArrayList<>(); - private final List enabledItems = new ArrayList<>(); - - private final List categories = new ArrayList<>(); - private final List researches = new LinkedList<>(); - private final List multiblocks = new LinkedList<>(); - - private final Set tickers = new HashSet<>(); - private final Set radioactive = new HashSet<>(); - private final Set activeChunks = new HashSet<>(); - private final Set researchingPlayers = new HashSet<>(); - - private final Map geoResources = new HashMap<>(); - private final Map geoResourcesConfigs = new HashMap<>(); - - private final Set energyGenerators = new HashSet<>(); - private final Set energyCapacitors = new HashSet<>(); - private final Set energyConsumers = new HashSet<>(); - private final Set chargeableBlocks = new HashSet<>(); - - private final Map worlds = new HashMap<>(); - private final Map chunks = new HashMap<>(); - private final Map profiles = new HashMap<>(); - private final Map layouts = new EnumMap<>(SlimefunGuideLayout.class); - private final Map> drops = new EnumMap<>(EntityType.class); - private final Map capacities = new HashMap<>(); - private final Map blockMenuPresets = new HashMap<>(); - private final Map universalInventories = new HashMap<>(); - private final Map, Set> itemHandlers = new HashMap<>(); - private final Map blockHandlers = new HashMap<>(); - - private final Map> activeTickers = new HashMap<>(); - - private final Map> guideHandlers = new HashMap<>(); - private final List postHandlers = new ArrayList<>(); - private final Map automatedCraftingChamberRecipes = new HashMap<>(); - - public SlimefunRegistry() { - ISlimefunGuide chestGuide = new ChestSlimefunGuide(); - layouts.put(SlimefunGuideLayout.CHEST, chestGuide); - layouts.put(SlimefunGuideLayout.CHEAT_SHEET, chestGuide); - layouts.put(SlimefunGuideLayout.BOOK, new BookSlimefunGuide()); - } - - public List getEnabledCategories() { - return categories; - } - - public List getAllSlimefunItems() { - return slimefunItems; - } - - public List getEnabledSlimefunItems() { - return enabledItems; - } - - public int countVanillaItems() { - return (int) getEnabledSlimefunItems().stream().filter(item -> !item.isAddonItem()).count(); - } - - public List getResearches() { - return researches; - } - - public List getMultiBlocks() { - return multiblocks; - } - - public ISlimefunGuide getGuideLayout(SlimefunGuideLayout layout) { - return layouts.get(layout); - } - - public Set getMobDrops(EntityType entity) { - return drops.get(entity); - } - - public Set getRadioactiveItems() { - return radioactive; - } - - public Set getTickerBlocks() { - return tickers; - } - - public Set getActiveChunks() { - return activeChunks; - } - - public Set getCurrentlyResearchingPlayers() { - return researchingPlayers; - } - - public Map getSlimefunItemIds() { - return slimefunIds; - } - - public Map> getMobDrops() { - return drops; - } - - public Map getEnergyCapacities() { - return capacities; - } - - public Map getMenuPresets() { - return blockMenuPresets; - } - - public Map getUniversalInventories() { - return universalInventories; - } - - public Map getPlayerProfiles() { - return profiles; - } - - public Map, Set> getItemHandlers() { - return itemHandlers; - } - - public Map getBlockHandlers() { - return blockHandlers; - } - - public Map getWorlds() { - return worlds; - } - - public Map getChunks() { - return chunks; - } - - public Map> getActiveTickers() { - return activeTickers; - } - - public Map getGEOResources() { - return geoResources; - } - - public Map getGEOResourceConfigs() { - return geoResourcesConfigs; - } - - @Deprecated - public Map> getGuideHandlers() { - return guideHandlers; - } - - @Deprecated - public List getPostHandlers() { - return postHandlers; - } - - @Deprecated - public Map getAutomatedCraftingChamberRecipes() { - return automatedCraftingChamberRecipes; - } - - public Set getEnergyGenerators() { - return energyGenerators; - } - - public Set getEnergyCapacitors() { - return energyCapacitors; - } - - public Set getEnergyConsumers() { - return energyConsumers; - } - - public Set getChargeableBlocks() { - return chargeableBlocks; - } - -} + private final Map slimefunIds = new HashMap<>(); + private final List slimefunItems = new ArrayList<>(); + private final List enabledItems = new ArrayList<>(); + + private final KeyMap researchIds = new KeyMap<>(); + private final List categories = new ArrayList<>(); + private final List researches = new LinkedList<>(); + private final List multiblocks = new LinkedList<>(); + + private final Set tickers = new HashSet<>(); + private final Set radioactive = new HashSet<>(); + private final Set activeChunks = new HashSet<>(); + private final Set researchingPlayers = new HashSet<>(); + + private final Map geoResources = new HashMap<>(); + private final Map geoResourcesConfigs = new HashMap<>(); + + private final Set energyGenerators = new HashSet<>(); + private final Set energyCapacitors = new HashSet<>(); + private final Set energyConsumers = new HashSet<>(); + private final Set chargeableBlocks = new HashSet<>(); + + private final Map worlds = new HashMap<>(); + private final Map chunks = new HashMap<>(); + private final Map profiles = new HashMap<>(); + private final Map layouts = new EnumMap<>(SlimefunGuideLayout.class); + private final Map> drops = new EnumMap<>(EntityType.class); + private final Map capacities = new HashMap<>(); + private final Map blockMenuPresets = new HashMap<>(); + private final Map universalInventories = new HashMap<>(); + private final Map, Set> itemHandlers = new HashMap<>(); + private final Map blockHandlers = new HashMap<>(); + + private final Map> activeTickers = new HashMap<>(); + + private final Map> guideHandlers = new HashMap<>(); + private final Map automatedCraftingChamberRecipes = new HashMap<>(); + + public SlimefunRegistry() { + ISlimefunGuide chestGuide = new ChestSlimefunGuide(SlimefunPlugin.getCfg().getBoolean("options.show-vanilla-recipes-in-guide")); + layouts.put(SlimefunGuideLayout.CHEST, chestGuide); + layouts.put(SlimefunGuideLayout.CHEAT_SHEET, chestGuide); + layouts.put(SlimefunGuideLayout.BOOK, new BookSlimefunGuide()); + } + + public List getEnabledCategories() { + return categories; + } + + public List getAllSlimefunItems() { + return slimefunItems; + } + + public List getEnabledSlimefunItems() { + return enabledItems; + } + + public int countVanillaItems() { + return (int) getEnabledSlimefunItems().stream().filter(item -> !item.isAddonItem()).count(); + } + + public List getResearches() { + return researches; + } + + public List getMultiBlocks() { + return multiblocks; + } + + public ISlimefunGuide getGuideLayout(SlimefunGuideLayout layout) { + return layouts.get(layout); + } + + public Set getMobDrops(EntityType entity) { + return drops.get(entity); + } + + public Set getRadioactiveItems() { + return radioactive; + } + + public Set getTickerBlocks() { + return tickers; + } + + public Set getActiveChunks() { + return activeChunks; + } + + public Set getCurrentlyResearchingPlayers() { + return researchingPlayers; + } + + public Map getSlimefunItemIds() { + return slimefunIds; + } + + public KeyMap getResearchIds() { + return researchIds; + } + + public Map> getMobDrops() { + return drops; + } + + public Map getEnergyCapacities() { + return capacities; + } + + public Map getMenuPresets() { + return blockMenuPresets; + } + + public Map getUniversalInventories() { + return universalInventories; + } + + public Map getPlayerProfiles() { + return profiles; + } + + public Map, Set> getItemHandlers() { + return itemHandlers; + } + + public Map getBlockHandlers() { + return blockHandlers; + } + + public Map getWorlds() { + return worlds; + } + + public Map getChunks() { + return chunks; + } + + public Map> getActiveTickers() { + return activeTickers; + } + + public Map getGEOResources() { + return geoResources; + } + + public Map getGEOResourceConfigs() { + return geoResourcesConfigs; + } + + @Deprecated + public Map> getGuideHandlers() { + return guideHandlers; + } + + @Deprecated + public Map getAutomatedCraftingChamberRecipes() { + return automatedCraftingChamberRecipes; + } + + public Set getEnergyGenerators() { + return energyGenerators; + } + + public Set getEnergyCapacitors() { + return energyCapacitors; + } + + public Set getEnergyConsumers() { + return energyConsumers; + } + + public Set getChargeableBlocks() { + return chargeableBlocks; + } + +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java index 975da1ddf2..5188569cd2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java @@ -14,56 +14,58 @@ public class GiveCommand extends SubCommand { - private static final String PLACEHOLDER_PLAYER = "%player%"; - private static final String PLACEHOLDER_ITEM = "%item%"; - private static final String PLACEHOLDER_AMOUNT = "%amount%"; + private static final String PLACEHOLDER_PLAYER = "%player%"; + private static final String PLACEHOLDER_ITEM = "%item%"; + private static final String PLACEHOLDER_AMOUNT = "%amount%"; - public GiveCommand(SlimefunPlugin plugin, SlimefunCommand cmd) { - super(plugin, cmd); - } + public GiveCommand(SlimefunPlugin plugin, SlimefunCommand cmd) { + super(plugin, cmd); + } - @Override - public String getName() { - return "give"; - } + @Override + public String getName() { + return "give"; + } - @Override - public void onExecute(CommandSender sender, String[] args) { - if (sender.hasPermission("slimefun.cheat.items") || !(sender instanceof Player)) { - if (args.length > 2) { - Optional player = PlayerList.findByName(args[1]); + @Override + public void onExecute(CommandSender sender, String[] args) { + if (sender.hasPermission("slimefun.cheat.items") || !(sender instanceof Player)) { + if (args.length > 2) { + Optional player = PlayerList.findByName(args[1]); - if (player.isPresent()) { - Player p = player.get(); + if (player.isPresent()) { + Player p = player.get(); - SlimefunItem sfItem = SlimefunItem.getByID(args[2].toUpperCase()); - if (sfItem != null) { - int amount = 1; - - if (args.length == 4 && args[3].chars().allMatch(Character::isDigit)) { - amount = Integer.parseInt(args[3]); - } - else { - SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace(PLACEHOLDER_AMOUNT, args[3])); - return; - } + SlimefunItem sfItem = SlimefunItem.getByID(args[2].toUpperCase()); + if (sfItem != null) { + int amount = 1; - int finalAmount = amount; - - if (amount > 0) { - SlimefunPlugin.getLocal().sendMessage(p, "messages.given-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, sfItem.getItemName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(finalAmount))); - p.getInventory().addItem(new CustomItem(sfItem.getItem(), amount)); - SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-item", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1]).replace(PLACEHOLDER_ITEM, sfItem.getItemName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(finalAmount))); - } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace(PLACEHOLDER_AMOUNT, String.valueOf(finalAmount))); - } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, args[2])); - } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); - } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.usage", true, msg -> msg.replace("%usage%", "/sf give [Amount]")); - } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.no-permission", true); - } + if (args.length == 4) { + if (args[3].chars().allMatch(Character::isDigit)) { + amount = Integer.parseInt(args[3]); + } + else { + SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace(PLACEHOLDER_AMOUNT, args[3])); + return; + } + } -} + int finalAmount = amount; + + if (amount > 0) { + SlimefunPlugin.getLocal().sendMessage(p, "messages.given-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, sfItem.getItemName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(finalAmount))); + p.getInventory().addItem(new CustomItem(sfItem.getItem(), amount)); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-item", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1]).replace(PLACEHOLDER_ITEM, sfItem.getItemName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(finalAmount))); + } + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace(PLACEHOLDER_AMOUNT, String.valueOf(finalAmount))); + } + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, args[2])); + } + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); + } + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.usage", true, msg -> msg.replace("%usage%", "/sf give <玩家> [数量]")); + } + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.no-permission", true); + } + +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java index 8dccccf52c..8baa4b463c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java @@ -13,75 +13,81 @@ import me.mrCookieSlime.Slimefun.api.PlayerProfile; public class ResearchCommand extends SubCommand { - - private static final String PLACEHOLDER_PLAYER = "%player%"; - private static final String PLACEHOLDER_RESEARCH = "%research%"; - - public ResearchCommand(SlimefunPlugin plugin, SlimefunCommand cmd) { - super(plugin, cmd); - } - - @Override - public String getName() { - return "research"; - } - - @Override - protected String getDescriptionPath() { - return "commands.research.description"; - } - - @Override - public void onExecute(CommandSender sender, String[] args) { - if (args.length == 3) { - if (sender.hasPermission("slimefun.cheat.researches") || !(sender instanceof Player)) { - Optional player = PlayerList.findByName(args[1]); - - if (player.isPresent()) { - Player p = player.get(); - - PlayerProfile.get(p, profile -> { - if (args[2].equalsIgnoreCase("all")) { - for (Research res : SlimefunPlugin.getRegistry().getResearches()) { - if (!profile.hasUnlocked(res)) SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace(PLACEHOLDER_PLAYER, p.getName()).replace(PLACEHOLDER_RESEARCH, res.getName())); - res.unlock(p, true); - } - } - else if (args[2].equalsIgnoreCase("reset")) { - for (Research res : SlimefunPlugin.getRegistry().getResearches()) { - profile.setResearched(res, false); - } - SlimefunPlugin.getLocal().sendMessage(p, "commands.research.reset", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); - } - else { - Research research = null; - for (Research res : SlimefunPlugin.getRegistry().getResearches()) { - if (res.getName().toUpperCase().replace(' ', '_').equalsIgnoreCase(args[2])) { - research = res; - break; - } - } - - if (research != null) { - research.unlock(p, true); - final Research r = research; - SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace(PLACEHOLDER_PLAYER, p.getName()).replace(PLACEHOLDER_RESEARCH, r.getName())); - } - else { - SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-research", true, msg -> msg.replace(PLACEHOLDER_RESEARCH, args[2])); - } - } - }); - } - else { - SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); - } - } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.no-permission", true); - } - else { - SlimefunPlugin.getLocal().sendMessage(sender, "messages.usage", true, msg -> msg.replace("%usage%", "/sf research ")); - } - } - -} + + private static final String PLACEHOLDER_PLAYER = "%player%"; + private static final String PLACEHOLDER_RESEARCH = "%research%"; + + public ResearchCommand(SlimefunPlugin plugin, SlimefunCommand cmd) { + super(plugin, cmd); + } + + @Override + public String getName() { + return "research"; + } + + @Override + protected String getDescriptionPath() { + return "commands.research.description"; + } + + @Override + public void onExecute(CommandSender sender, String[] args) { + if (args.length == 3) { + if (sender.hasPermission("slimefun.cheat.researches") || !(sender instanceof Player)) { + Optional player = PlayerList.findByName(args[1]); + + if (player.isPresent()) { + Player p = player.get(); + + PlayerProfile.get(p, profile -> { + if (args[2].equalsIgnoreCase("all")) { + for (Research res : SlimefunPlugin.getRegistry().getResearches()) { + if (!profile.hasUnlocked(res)) { + SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace(PLACEHOLDER_PLAYER, p.getName()).replace(PLACEHOLDER_RESEARCH, res.getName(p))); + } + + res.unlock(p, true); + } + } + else if (args[2].equalsIgnoreCase("reset")) { + for (Research res : SlimefunPlugin.getRegistry().getResearches()) { + profile.setResearched(res, false); + } + SlimefunPlugin.getLocal().sendMessage(p, "commands.research.reset", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); + } + else { + Optional research = getResearchFromString(args[2]); + + if (research.isPresent()) { + research.get().unlock(p, true); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace(PLACEHOLDER_PLAYER, p.getName()).replace(PLACEHOLDER_RESEARCH, research.get().getName(p))); + } + else { + SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-research", true, msg -> msg.replace(PLACEHOLDER_RESEARCH, args[2])); + } + } + }); + } + else { + SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); + } + } + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.no-permission", true); + } + else { + SlimefunPlugin.getLocal().sendMessage(sender, "messages.usage", true, msg -> msg.replace("%usage%", "/sf research ")); + } + } + + private Optional getResearchFromString(String input) { + for (Research research : SlimefunPlugin.getRegistry().getResearches()) { + if (research.getName().toUpperCase().replace(' ', '_').equalsIgnoreCase(input)) { + return Optional.of(research); + } + } + + return Optional.empty(); + } + +} \ No newline at end of file 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 604f1e4f8b..9688693931 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 @@ -46,6 +46,12 @@ public class ChestSlimefunGuide implements ISlimefunGuide { private static final int[] RECIPE_SLOTS = {3, 4, 5, 12, 13, 14, 21, 22, 23}; private static final int CATEGORY_SIZE = 36; + private final boolean showVanillaRecipes; + + public ChestSlimefunGuide(boolean showVanillaRecipes) { + this.showVanillaRecipes = showVanillaRecipes; + } + @Override public SlimefunGuideLayout getLayout() { return SlimefunGuideLayout.CHEST; @@ -346,7 +352,7 @@ public void displayItem(PlayerProfile profile, ItemStack item, boolean addToHist return; } - if (!SlimefunPlugin.getSettings().guideShowVanillaRecipes) { + if (!showVanillaRecipes) { return; } 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 6209a54c6f..4c60ef7231 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 @@ -31,386 +31,385 @@ import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; public final class GuideSettings { - - public static final NamespacedKey FIREWORKS_KEY = new NamespacedKey(SlimefunPlugin.instance, "research_fireworks"); - private static final int[] BACKGROUND_SLOTS = {1, 3, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 50, 52, 53}; - - private GuideSettings() {} - - public static void openSettings(Player p, ItemStack guide) { - ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.settings")); - - menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); - - for (int slot : BACKGROUND_SLOTS) { - menu.addItem(slot, ChestMenuUtils.getBackground()); - menu.addMenuClickHandler(slot, ChestMenuUtils.getEmptyClickHandler()); - } - - addMenubar(p, menu, guide); - addConfigurableOptions(p, menu, guide); - - menu.open(p); - } - - private static void addMenubar(Player p, ChestMenu menu, ItemStack guide) { - menu.addItem(0, new CustomItem(getItem(SlimefunGuideLayout.CHEST), "&e\u21E6 Back", "", "&7Go back to your Slimefun Guide"), - (pl, slot, item, action) -> { - SlimefunGuide.openGuide(pl, guide); - return false; - }); - - menu.addItem(2, new CustomItem(SkullItem.fromBase64("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTk1MmQyYjNmMzUxYTZiMDQ4N2NjNTlkYjMxYmY1ZjI2NDExMzNlNWJhMDAwNmIxODU3NmU5OTZhMDI5M2U1MiJ9fX0="), - "&c" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.credits"), - "", - "&7Contributors: &e" + SlimefunPlugin.getGitHubService().getContributors().size(), - "", - "&7Slimefun is an open-source project", - "&7and maintained by a large community.", - "&7Here you can find them all", - "", - "&7\u21E8 &eClick to see all of them" - ), - (pl, slot, action, item) -> { - openCredits(pl, 0); - return false; - }); - - menu.addItem(4, new CustomItem(Material.WRITABLE_BOOK, - "&aSlimefun Version", - "&7&o" + SlimefunPlugin.getLocal().getMessage(p, "guide.tooltips.versions-notice"), - "", - "&7Minecraft Version: &a" + Bukkit.getBukkitVersion(), - "&7Slimefun Version: &a" + SlimefunPlugin.getVersion(), - "&7CS-CoreLib Version: &a" + CSCoreLib.getLib().getDescription().getVersion() - ), ChestMenuUtils.getEmptyClickHandler()); - - menu.addItem(6, new CustomItem(Material.COMPARATOR, - "&eSource Code", - "", - "&7Bytes of Code: &6" + NumberUtils.formatBigNumber(SlimefunPlugin.getGitHubService().getCodeSize()), - "&7Last Activity: &a" + NumberUtils.timeDelta(SlimefunPlugin.getGitHubService().getLastUpdate()) + " ago", - "&7Forks: &e" + SlimefunPlugin.getGitHubService().getForks(), - "&7Stars: &e" + SlimefunPlugin.getGitHubService().getStars(), - "", - "&7&oSlimefun 4 is a community project,", - "&7&othe source code is available on GitHub", - "&7&oand if you want to keep this Plugin alive,", - "&7&othen please consider contributing to it", - "", - "&7\u21E8 &eClick to go to GitHub" - ), - (pl, slot, item, action) -> { - pl.closeInventory(); - ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4"); - return false; - }); - - menu.addItem(8, new CustomItem(Material.KNOWLEDGE_BOOK, - "&3" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.wiki"), - "", - "&7Do you need help with an Item or machine?", - "&7You cannot figure out what to do?", - "&7Check out our community-maintained Wiki", - "&7and become one of our Editors!", - "", - "&7\u21E8 &eClick to go to the official Slimefun Wiki" - ), - (pl, slot, item, action) -> { - pl.closeInventory(); - ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki"); - return false; - }); - - menu.addItem(47, new CustomItem(Material.BOOKSHELF, - "&3" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.addons"), - "", - "&7Slimefun is huge. But its addons are what makes", - "&7this plugin truly shine. Go check them out, some", - "&7of them may be exactly what you were missing out on!", - "", - "&7Installed on this Server: &b" + SlimefunPlugin.getInstalledAddons().size(), - "", - "&7\u21E8 &eClick to see all available Addons for Slimefun4" - ), - (pl, slot, item, action) -> { - pl.closeInventory(); - ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki/Addons"); - return false; - }); - - menu.addItem(49, new CustomItem(Material.REDSTONE_TORCH, - "&4" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.bugs"), - "", - "&7&oBug reports have to be made in English!", - "", - "&7Open Issues: &a" + SlimefunPlugin.getGitHubService().getIssues(), - "&7Pending Pull Requests: &a" + SlimefunPlugin.getGitHubService().getPullRequests(), - "", - "&7\u21E8 &eClick to go to the Slimefun4 Bug Tracker" - ), - (pl, slot, item, action) -> { - pl.closeInventory(); - ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/issues"); - return false; - }); - - menu.addItem(51, new CustomItem(Material.TOTEM_OF_UNDYING, - "&cSoon", - "", - "&7Something will be added here later..." - ), - (pl, slot, item, action) -> { - // Add something here - return false; - }); - } - - private static void addConfigurableOptions(Player p, ChestMenu menu, ItemStack guide) { - int i = 19; - - if (SlimefunManager.isItemSimilar(guide, getItem(SlimefunGuideLayout.CHEST), true)) { - if (p.hasPermission("slimefun.cheat.items")) { - menu.addItem(i, new CustomItem(Material.CHEST, "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "&7Cheat Sheet", "", "&7\u21E8 &eClick to change your layout")); - menu.addMenuClickHandler(i, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - else { - menu.addItem(i, new CustomItem(Material.CHEST, "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "", "&7\u21E8 &eClick to change your layout")); - menu.addMenuClickHandler(i, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - - i++; - } - else if (SlimefunManager.isItemSimilar(guide, getItem(SlimefunGuideLayout.BOOK), true)) { - if (p.hasPermission("slimefun.cheat.items")) { - menu.addItem(i, new CustomItem(Material.BOOK, "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "&7Cheat Sheet", "", "&7\u21E8 &eClick to change your layout")); - menu.addMenuClickHandler(i, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEAT_SHEET)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - else { - menu.addItem(i, new CustomItem(Material.BOOK, "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "", "&7\u21E8 &eClick to change your layout")); - menu.addMenuClickHandler(i, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - } - - i++; - } - else if (SlimefunManager.isItemSimilar(guide, getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { - menu.addItem(i, new CustomItem(Material.COMMAND_BLOCK, "&7Guide Layout: &eCheat Sheet", "", "&7Chest GUI", "&7Book GUI", "&aCheat Sheet", "", "&7\u21E8 &eClick to change your layout")); - menu.addMenuClickHandler(i, (pl, slot, item, action) -> { - pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); - openSettings(pl, pl.getInventory().getItemInMainHand()); - return false; - }); - - i++; - } - - if (SlimefunPlugin.getSettings().researchFireworksEnabled) { - if (!PersistentDataAPI.hasByte(p, FIREWORKS_KEY) || PersistentDataAPI.getByte(p, FIREWORKS_KEY) == (byte) 1) { - menu.addItem(i, new CustomItem(Material.FIREWORK_ROCKET, "&bFireworks: &aYes", "", "&7When researching items, you will", "&7be presented with a big firework.", "", "&7\u21E8 &eClick to disable your fireworks"), - (pl, slot, item, action) -> { - PersistentDataAPI.setByte(pl, FIREWORKS_KEY, (byte) 0); - openSettings(pl, guide); - return false; - }); - } - else { - menu.addItem(i, new CustomItem(Material.FIREWORK_ROCKET, "&bFireworks: &4No", "", "&7When researching items, you will", "&7not be presented with a big firework.", "", "&7\u21E8 &eClick to enable your fireworks"), - (pl, slot, item, action) -> { - PersistentDataAPI.setByte(pl, FIREWORKS_KEY, (byte) 1); - openSettings(pl, guide); - return false; - }); - } - - i++; - } - - Language language = SlimefunPlugin.getLocal().getLanguage(p); - String languageName = language.isDefault() ? (SlimefunPlugin.getLocal().getMessage(p, "languages.default") + ChatColor.DARK_GRAY + " (" + language.getName(p) + ")"): SlimefunPlugin.getLocal().getMessage(p, "languages." + language.getID()); - - menu.addItem(i, new CustomItem(language.getItem(), "&7" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.selected-language") + ": &a" + languageName, "", "&7You now have the option to change", "&7the language in which Slimefun", "&7will send you messages.", "&7Note that this only translates", "&7messages, not items.", "", "&7\u21E8 &eClick to change your language"), - (pl, slot, item, action) -> { - openLanguages(pl); - return false; - }); - } - - private static void openLanguages(Player p) { - ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.languages")); - - menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); - - for (int i = 0; i < 9; i++) { - if (i == 1) { - menu.addItem(1, new CustomItem(ChestMenuUtils.getBackButton(), "&e\u21E6 Back", "", "&7Go back to the Settings Panel") - , (pl, slot, item, action) -> { - openSettings(pl, p.getInventory().getItemInMainHand()); - return false; - }); - } - else if (i == 7) { - menu.addItem(7, new CustomItem(SkullItem.fromHash("3edd20be93520949e6ce789dc4f43efaeb28c717ee6bfcbbe02780142f716"), SlimefunPlugin.getLocal().getMessage(p, "guide.languages.translations.name"), "", "&7\u21E8 &e" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.translations.lore")) - , (pl, slot, item, action) -> { - ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki/Translating-Slimefun"); - pl.closeInventory(); - return false; - }); - } - else { - menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); - } - } - - Language defaultLanguage = SlimefunPlugin.getLocal().getDefaultLanguage(); - menu.addItem(9, new CustomItem(defaultLanguage.getItem(), ChatColor.GRAY + SlimefunPlugin.getLocal().getMessage(p, "languages.default") + ChatColor.DARK_GRAY + " (" + defaultLanguage.getName(p) + ")", "", "&7\u21E8 &e" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.select-default")), - (pl, i, item, action) -> { - PersistentDataAPI.remove(pl, SlimefunPlugin.getLocal().getKey()); - - String name = SlimefunPlugin.getLocal().getMessage(p, "languages.default"); - SlimefunPlugin.getLocal().sendMessage(pl, "guide.languages.updated", msg -> msg.replace("%lang%", name)); - - openSettings(pl, p.getInventory().getItemInMainHand()); - return false; - }); - - int slot = 10; - - for (Language language : SlimefunPlugin.getLocal().getLanguages()) { - menu.addItem(slot, new CustomItem(language.getItem(), ChatColor.GREEN + language.getName(p), "", "&7\u21E8 &e" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.select")), - (pl, i, item, action) -> { - PersistentDataAPI.setString(pl, SlimefunPlugin.getLocal().getKey(), language.getID()); - - String name = language.getName(pl); - SlimefunPlugin.getLocal().sendMessage(pl, "guide.languages.updated", msg -> msg.replace("%lang%", name)); - - openSettings(pl, p.getInventory().getItemInMainHand()); - return false; - }); - - slot++; - } - - menu.open(p); - } - - private static void openCredits(Player p, int page) { - ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.credits")); - - menu.setEmptySlotsClickable(false); - menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); - - for (int i = 0; i < 9; i++) { - if (i != 1) { - menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); - } - else { - menu.addItem(1, new CustomItem(ChestMenuUtils.getBackButton(), "&e\u21E6 Back", "", "&7Go back to the Settings Panel")); - menu.addMenuClickHandler(1, (pl, slot, item, action) -> { - openSettings(pl, p.getInventory().getItemInMainHand()); - return false; - }); - } - } - - for (int i = 45; i < 54; i++) { - if (i != 46 && i != 52) { - menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); - } - } - - List contributors = new ArrayList<>(SlimefunPlugin.getGitHubService().getContributors().values()); - contributors.sort(Comparator.comparingInt(Contributor::index)); - - int pages = (contributors.size() - 1) / 36 + 1; - - for (int i = page * 36; i < contributors.size(); i++) { - if (i >= (page + 1) * 36) { - break; - } - - Contributor contributor = contributors.get(i); - ItemStack skull = SkullItem.fromBase64(contributor.getTexture()); - - SkullMeta meta = (SkullMeta) skull.getItemMeta(); - meta.setDisplayName(contributor.getDisplayName()); - - List lore = new LinkedList<>(); - lore.add(""); - - for (Map.Entry entry : contributor.getContributions()) { - String info = entry.getKey(); - - if (!info.startsWith("&")) { - String[] segments = info.split(","); - info = SlimefunPlugin.getLocal().getMessage(p, "guide.credits.roles." + segments[0]); - - if (segments.length == 2) { - info += " &7(" + SlimefunPlugin.getLocal().getMessage(p, "languages." + segments[1]) + ")"; - } - } - - if (entry.getValue() > 0) { - String commits = SlimefunPlugin.getLocal().getMessage(p, "guide.credits." + (entry.getValue() > 1 ? "commits": "commit")); - - info += " &7(" + entry.getValue() + " " + commits + ")"; - } - - lore.add(ChatColors.color(info)); - } - - if (contributor.getProfile() != null) { - lore.add(""); - lore.add(ChatColors.color("&7\u21E8 &e") + SlimefunPlugin.getLocal().getMessage(p, "guide.credits.profile-link")); - } - - meta.setLore(lore); - skull.setItemMeta(meta); - - menu.addItem(i - page * 36 + 9, skull); - menu.addMenuClickHandler(i - page * 36 + 9, (pl, slot, item, action) -> { - if (contributor.getProfile() != null) { - pl.closeInventory(); - ChatUtils.sendURL(pl, contributor.getProfile()); - } - return false; - }); - } - - 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(p, page + 1, pages)); - menu.addMenuClickHandler(52, (pl, slot, item, action) -> { - if (page + 1 < pages) openCredits(pl, page + 1); - return false; - }); - - menu.open(p); - } - - private static ItemStack getItem(SlimefunGuideLayout layout) { - return SlimefunGuide.getItem(layout); - } - -} + + public static final NamespacedKey FIREWORKS_KEY = new NamespacedKey(SlimefunPlugin.instance, "research_fireworks"); + private static final int[] BACKGROUND_SLOTS = {1, 3, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 50, 52, 53}; + + private GuideSettings() {} + + public static void openSettings(Player p, ItemStack guide) { + ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.settings")); + + menu.setEmptySlotsClickable(false); + menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); + + for (int slot : BACKGROUND_SLOTS) { + menu.addItem(slot, ChestMenuUtils.getBackground()); + menu.addMenuClickHandler(slot, ChestMenuUtils.getEmptyClickHandler()); + } + + addMenubar(p, menu, guide); + addConfigurableOptions(p, menu, guide); + + menu.open(p); + } + + private static void addMenubar(Player p, ChestMenu menu, ItemStack guide) { + menu.addItem(0, new CustomItem(getItem(SlimefunGuideLayout.CHEST), "&e\u21E6 Back", "", "&7Go back to your Slimefun Guide"), + (pl, slot, item, action) -> { + SlimefunGuide.openGuide(pl, guide); + return false; + }); + + menu.addItem(2, new CustomItem(SkullItem.fromBase64("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTk1MmQyYjNmMzUxYTZiMDQ4N2NjNTlkYjMxYmY1ZjI2NDExMzNlNWJhMDAwNmIxODU3NmU5OTZhMDI5M2U1MiJ9fX0="), + "&c" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.credits"), + "", + "&7Contributors: &e" + SlimefunPlugin.getGitHubService().getContributors().size(), + "", + "&7Slimefun is an open-source project", + "&7and maintained by a large community.", + "&7Here you can find them all", + "", + "&7\u21E8 &eClick to see all of them" + ), + (pl, slot, action, item) -> { + openCredits(pl, 0); + return false; + }); + + menu.addItem(4, new CustomItem(Material.WRITABLE_BOOK, + "&aSlimefun Version", + "&7&o" + SlimefunPlugin.getLocal().getMessage(p, "guide.tooltips.versions-notice"), + "", + "&7Minecraft Version: &a" + Bukkit.getBukkitVersion(), + "&7Slimefun Version: &a" + SlimefunPlugin.getVersion(), + "&7CS-CoreLib Version: &a" + CSCoreLib.getLib().getDescription().getVersion() + ), ChestMenuUtils.getEmptyClickHandler()); + + menu.addItem(6, new CustomItem(Material.COMPARATOR, + "&eSource Code", + "", + "&7Last Activity: &a" + NumberUtils.timeDelta(SlimefunPlugin.getGitHubService().getLastUpdate()) + " ago", + "&7Forks: &e" + SlimefunPlugin.getGitHubService().getForks(), + "&7Stars: &e" + SlimefunPlugin.getGitHubService().getStars(), + "", + "&7&oSlimefun 4 is a community project,", + "&7&othe source code is available on GitHub", + "&7&oand if you want to keep this Plugin alive,", + "&7&othen please consider contributing to it", + "", + "&7\u21E8 &eClick to go to GitHub" + ), + (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4"); + return false; + }); + + menu.addItem(8, new CustomItem(Material.KNOWLEDGE_BOOK, + "&3" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.wiki"), + "", + "&7Do you need help with an Item or machine?", + "&7You cannot figure out what to do?", + "&7Check out our community-maintained Wiki", + "&7and become one of our Editors!", + "", + "&7\u21E8 &eClick to go to the official Slimefun Wiki" + ), + (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki"); + return false; + }); + + menu.addItem(47, new CustomItem(Material.BOOKSHELF, + "&3" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.addons"), + "", + "&7Slimefun is huge. But its addons are what makes", + "&7this plugin truly shine. Go check them out, some", + "&7of them may be exactly what you were missing out on!", + "", + "&7Installed on this Server: &b" + SlimefunPlugin.getInstalledAddons().size(), + "", + "&7\u21E8 &eClick to see all available Addons for Slimefun4" + ), + (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki/Addons"); + return false; + }); + + menu.addItem(49, new CustomItem(Material.REDSTONE_TORCH, + "&4" + SlimefunPlugin.getLocal().getMessage(p, "guide.title.bugs"), + "", + "&7&oBug reports have to be made in English!", + "", + "&7Open Issues: &a" + SlimefunPlugin.getGitHubService().getIssues(), + "&7Pending Pull Requests: &a" + SlimefunPlugin.getGitHubService().getPullRequests(), + "", + "&7\u21E8 &eClick to go to the Slimefun4 Bug Tracker" + ), + (pl, slot, item, action) -> { + pl.closeInventory(); + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/issues"); + return false; + }); + + menu.addItem(51, new CustomItem(Material.TOTEM_OF_UNDYING, + "&cSoon", + "", + "&7Something will be added here later..." + ), + (pl, slot, item, action) -> { + // Add something here + return false; + }); + } + + private static void addConfigurableOptions(Player p, ChestMenu menu, ItemStack guide) { + int i = 19; + + if (SlimefunManager.isItemSimilar(guide, getItem(SlimefunGuideLayout.CHEST), true)) { + if (p.hasPermission("slimefun.cheat.items")) { + menu.addItem(i, new CustomItem(Material.CHEST, "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "&7Cheat Sheet", "", "&7\u21E8 &eClick to change your layout")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + else { + menu.addItem(i, new CustomItem(Material.CHEST, "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "", "&7\u21E8 &eClick to change your layout")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + + i++; + } + else if (SlimefunManager.isItemSimilar(guide, getItem(SlimefunGuideLayout.BOOK), true)) { + if (p.hasPermission("slimefun.cheat.items")) { + menu.addItem(i, new CustomItem(Material.BOOK, "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "&7Cheat Sheet", "", "&7\u21E8 &eClick to change your layout")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEAT_SHEET)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + else { + menu.addItem(i, new CustomItem(Material.BOOK, "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "", "&7\u21E8 &eClick to change your layout")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + } + + i++; + } + else if (SlimefunManager.isItemSimilar(guide, getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { + menu.addItem(i, new CustomItem(Material.COMMAND_BLOCK, "&7Guide Layout: &eCheat Sheet", "", "&7Chest GUI", "&7Book GUI", "&aCheat Sheet", "", "&7\u21E8 &eClick to change your layout")); + menu.addMenuClickHandler(i, (pl, slot, item, action) -> { + pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST)); + openSettings(pl, pl.getInventory().getItemInMainHand()); + return false; + }); + + i++; + } + + if (SlimefunPlugin.getSettings().researchFireworksEnabled) { + if (!PersistentDataAPI.hasByte(p, FIREWORKS_KEY) || PersistentDataAPI.getByte(p, FIREWORKS_KEY) == (byte) 1) { + menu.addItem(i, new CustomItem(Material.FIREWORK_ROCKET, "&bFireworks: &aYes", "", "&7When researching items, you will", "&7be presented with a big firework.", "", "&7\u21E8 &eClick to disable your fireworks"), + (pl, slot, item, action) -> { + PersistentDataAPI.setByte(pl, FIREWORKS_KEY, (byte) 0); + openSettings(pl, guide); + return false; + }); + } + else { + menu.addItem(i, new CustomItem(Material.FIREWORK_ROCKET, "&bFireworks: &4No", "", "&7When researching items, you will", "&7not be presented with a big firework.", "", "&7\u21E8 &eClick to enable your fireworks"), + (pl, slot, item, action) -> { + PersistentDataAPI.setByte(pl, FIREWORKS_KEY, (byte) 1); + openSettings(pl, guide); + return false; + }); + } + + i++; + } + + Language language = SlimefunPlugin.getLocal().getLanguage(p); + String languageName = language.isDefault() ? (SlimefunPlugin.getLocal().getMessage(p, "languages.default") + ChatColor.DARK_GRAY + " (" + language.getName(p) + ")"): SlimefunPlugin.getLocal().getMessage(p, "languages." + language.getID()); + + menu.addItem(i, new CustomItem(language.getItem(), "&7" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.selected-language") + " &a" + languageName, "", "&7You now have the option to change", "&7the language in which Slimefun", "&7will send you messages.", "&7Note that this only translates", "&7messages, not items.", "", "&7\u21E8 &eClick to change your language"), + (pl, slot, item, action) -> { + openLanguages(pl); + return false; + }); + } + + private static void openLanguages(Player p) { + ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.languages")); + + menu.setEmptySlotsClickable(false); + menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); + + for (int i = 0; i < 9; i++) { + if (i == 1) { + menu.addItem(1, new CustomItem(ChestMenuUtils.getBackButton(), "&e\u21E6 Back", "", "&7Go back to the Settings Panel") + , (pl, slot, item, action) -> { + openSettings(pl, p.getInventory().getItemInMainHand()); + return false; + }); + } + else if (i == 7) { + menu.addItem(7, new CustomItem(SkullItem.fromHash("3edd20be93520949e6ce789dc4f43efaeb28c717ee6bfcbbe02780142f716"), SlimefunPlugin.getLocal().getMessage(p, "guide.languages.translations.name"), "", "&7\u21E8 &e" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.translations.lore")) + , (pl, slot, item, action) -> { + ChatUtils.sendURL(pl, "https://github.com/TheBusyBiscuit/Slimefun4/wiki/Translating-Slimefun"); + pl.closeInventory(); + return false; + }); + } + else { + menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); + } + } + + Language defaultLanguage = SlimefunPlugin.getLocal().getDefaultLanguage(); + menu.addItem(9, new CustomItem(defaultLanguage.getItem(), ChatColor.GRAY + SlimefunPlugin.getLocal().getMessage(p, "languages.default") + ChatColor.DARK_GRAY + " (" + defaultLanguage.getName(p) + ")", "", "&7\u21E8 &e" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.select-default")), + (pl, i, item, action) -> { + PersistentDataAPI.remove(pl, SlimefunPlugin.getLocal().getKey()); + + String name = SlimefunPlugin.getLocal().getMessage(p, "languages.default"); + SlimefunPlugin.getLocal().sendMessage(pl, "guide.languages.updated", msg -> msg.replace("%lang%", name)); + + openSettings(pl, p.getInventory().getItemInMainHand()); + return false; + }); + + int slot = 10; + + for (Language language : SlimefunPlugin.getLocal().getLanguages()) { + menu.addItem(slot, new CustomItem(language.getItem(), ChatColor.GREEN + language.getName(p), "", "&7\u21E8 &e" + SlimefunPlugin.getLocal().getMessage(p, "guide.languages.select")), + (pl, i, item, action) -> { + PersistentDataAPI.setString(pl, SlimefunPlugin.getLocal().getKey(), language.getID()); + + String name = language.getName(pl); + SlimefunPlugin.getLocal().sendMessage(pl, "guide.languages.updated", msg -> msg.replace("%lang%", name)); + + openSettings(pl, p.getInventory().getItemInMainHand()); + return false; + }); + + slot++; + } + + menu.open(p); + } + + private static void openCredits(Player p, int page) { + ChestMenu menu = new ChestMenu(SlimefunPlugin.getLocal().getMessage(p, "guide.title.credits")); + + menu.setEmptySlotsClickable(false); + menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HARP, 0.7F, 0.7F)); + + for (int i = 0; i < 9; i++) { + if (i != 1) { + menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); + } + else { + menu.addItem(1, new CustomItem(ChestMenuUtils.getBackButton(), "&e\u21E6 Back", "", "&7Go back to the Settings Panel")); + menu.addMenuClickHandler(1, (pl, slot, item, action) -> { + openSettings(pl, p.getInventory().getItemInMainHand()); + return false; + }); + } + } + + for (int i = 45; i < 54; i++) { + if (i != 46 && i != 52) { + menu.addItem(i, ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler()); + } + } + + List contributors = new ArrayList<>(SlimefunPlugin.getGitHubService().getContributors().values()); + contributors.sort(Comparator.comparingInt(Contributor::index)); + + int pages = (contributors.size() - 1) / 36 + 1; + + for (int i = page * 36; i < contributors.size(); i++) { + if (i >= (page + 1) * 36) { + break; + } + + Contributor contributor = contributors.get(i); + ItemStack skull = SkullItem.fromBase64(contributor.getTexture()); + + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setDisplayName(contributor.getDisplayName()); + + List lore = new LinkedList<>(); + lore.add(""); + + for (Map.Entry entry : contributor.getContributions()) { + String info = entry.getKey(); + + if (!info.startsWith("&")) { + String[] segments = info.split(","); + info = SlimefunPlugin.getLocal().getMessage(p, "guide.credits.roles." + segments[0]); + + if (segments.length == 2) { + info += " &7(" + SlimefunPlugin.getLocal().getMessage(p, "languages." + segments[1]) + ")"; + } + } + + if (entry.getValue() > 0) { + String commits = SlimefunPlugin.getLocal().getMessage(p, "guide.credits." + (entry.getValue() > 1 ? "commits": "commit")); + + info += " &7(" + entry.getValue() + " " + commits + ")"; + } + + lore.add(ChatColors.color(info)); + } + + if (contributor.getProfile() != null) { + lore.add(""); + lore.add(ChatColors.color("&7\u21E8 &e") + SlimefunPlugin.getLocal().getMessage(p, "guide.credits.profile-link")); + } + + meta.setLore(lore); + skull.setItemMeta(meta); + + menu.addItem(i - page * 36 + 9, skull); + menu.addMenuClickHandler(i - page * 36 + 9, (pl, slot, item, action) -> { + if (contributor.getProfile() != null) { + pl.closeInventory(); + ChatUtils.sendURL(pl, contributor.getProfile()); + } + return false; + }); + } + + 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(p, page + 1, pages)); + menu.addMenuClickHandler(52, (pl, slot, item, action) -> { + if (page + 1 < pages) openCredits(pl, page + 1); + return false; + }); + + menu.open(p); + } + + private static ItemStack getItem(SlimefunGuideLayout layout) { + return SlimefunGuide.getItem(layout); + } + +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/GitHubService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/GitHubService.java index 8f8aeac4a6..035a288eb1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/GitHubService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/GitHubService.java @@ -16,6 +16,7 @@ import io.github.thebusybiscuit.slimefun4.core.services.github.Contributor; import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubConnector; import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubTask; +import io.github.thebusybiscuit.slimefun4.core.services.github.Translators; import io.github.thebusybiscuit.slimefun4.utils.NumberUtils; public class GitHubService { @@ -30,7 +31,6 @@ public class GitHubService { private int pullRequests = 0; private int forks = 0; private int stars = 0; - private int codeBytes = 0; private Date lastUpdate = new Date(); public GitHubService(String repository) { @@ -49,58 +49,7 @@ private void addDefaultContributors() { fuffles.setContribution("&dSkull Texture Artist", 0); contributors.put(fuffles.getName(), fuffles); - // Translators - German - addTranslator("TheBusyBiscuit", "de", false); - - // Translators - French - addTranslator("JustDams", "D4ms_", "fr", true); - addTranslator("edkerforne", "fr", true); - addTranslator("tnthomastn", "fr", true); - - // Translators - Italian - addTranslator("xXDOTTORXx", "it", true); - - // Translators - Latvian - addTranslator("AgnisT", "lv", true); - - // Translators - Hungarian - addTranslator("andris155", "hu", true); - - // Translators - Vietnamese - addTranslator("huynhqtienvtag", "vi", false); - addTranslator("JustMangoT", "JFF_JustMango", "vi", true); - - // Translators - Slovak - addTranslator("KillerXCoder", "sk", true); - addTranslator("PixelHotDog", "sk", true); - - // Translators - Spanish - addTranslator("Luu7", "_Luu", "es", true); - addTranslator("Vravinite", "es", true); - addTranslator("NotUmBr4", "es", true); - addTranslator("dbzjjoe", "es", true); - - // Translators - Swedish - addTranslator("NihilistBrew", "ma1yang2", "sv", false); - addTranslator("Tra-sh", "TurretTrash", "sv", true); - - // Translators - Dutch - addTranslator("Dr4gonD", "nl", true); - addTranslator("svr333", "nl", false); - - // Translators - Chinese (China) - addTranslator("StarWishsama", "StarWish_Sama", "zh-CN", false); - } - - private void addTranslator(String name, String language, boolean lock) { - addTranslator(name, name, language, lock); - } - - private void addTranslator(String name, String alias, String language, boolean lock) { - Contributor contributor = contributors.computeIfAbsent(name, user -> new Contributor(alias, "https://github.com/" + user)); - contributor.setContribution("translator," + language, 0); - - if (lock) contributor.lock(); + new Translators(contributors); } public void connect(boolean logging) { @@ -172,30 +121,6 @@ public String getURLSuffix() { return "/issues"; } }); - - connectors.add(new GitHubConnector(this) { - - @Override - public void onSuccess(JsonElement element) { - JsonObject object = element.getAsJsonObject(); - codeBytes = object.get("Java").getAsInt(); - } - - @Override - public String getRepository() { - return repository; - } - - @Override - public String getFileName() { - return "languages"; - } - - @Override - public String getURLSuffix() { - return "/languages"; - } - }); } public Set getConnectors() { @@ -222,10 +147,6 @@ public int getPullRequests() { return pullRequests; } - public int getCodeSize() { - return codeBytes; - } - public Date getLastUpdate() { return lastUpdate; } 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 278b111436..ee369c3ab3 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 @@ -24,110 +24,145 @@ public class LocalizationService extends SlimefunLocalization { - private static final String LANGUAGE_PATH = "language"; - - // All supported languages are stored in this LinkedHashMap, it is Linked so we keep the order - private final Map languages = new LinkedHashMap<>(); - private final SlimefunPlugin plugin; - private final NamespacedKey languageKey; - private final Language defaultLanguage; - - public LocalizationService(SlimefunPlugin plugin, String serverDefaultLanguage) { - super(plugin); - - this.plugin = plugin; - languageKey = new NamespacedKey(plugin, LANGUAGE_PATH); - defaultLanguage = new Language(serverDefaultLanguage, getConfig().getConfiguration(), "11b3188fd44902f72602bd7c2141f5a70673a411adb3d81862c69e536166b"); - - for (SupportedLanguage lang : SupportedLanguage.values()) { - addLanguage(lang.getId(), lang.getTexture()); - } - - String language = getConfig().getString(LANGUAGE_PATH); - if (language == null) language = serverDefaultLanguage; - - if (hasLanguage(serverDefaultLanguage)) { - setLanguage(serverDefaultLanguage, !serverDefaultLanguage.equals(language)); - } - else { - setLanguage("en", false); - plugin.getLogger().log(Level.WARNING, "Could not recognize the given language: \"{0}\"", serverDefaultLanguage); - } - - setPrefix("&aSlimefun 4 &7> "); - save(); - } - - @Override - public NamespacedKey getKey() { - return languageKey; - } - - @Override - public Language getLanguage(String id) { - return languages.get(id); - } - - @Override - public Collection getLanguages() { - return languages.values(); - } - - @Override - public boolean hasLanguage(String language) { - // Checks if our jar files contains a .yml file for this id - return plugin.getClass().getResource("/languages/messages_" + language + ".yml") != null; - } - - @Override - public Language getDefaultLanguage() { - return defaultLanguage; - } - - @Override - public Language getLanguage(Player p) { - Optional language = PersistentDataAPI.getOptionalString(p, languageKey); - - if (language.isPresent()) return languages.get(language.get()); - else return getDefaultLanguage(); - } - - private void setLanguage(String language, boolean reset) { - // Clearing out the old Language (if necessary) - if (reset) { - getConfig().clear(); - } - - Slimefun.getLogger().log(Level.INFO, "Loading language \"{0}\"", language); - getConfig().setValue(LANGUAGE_PATH, language); - - // Loading in the defaults from our resources folder - String path = "/languages/messages_" + language + ".yml"; - - try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(path), StandardCharsets.UTF_8))) { - FileConfiguration config = YamlConfiguration.loadConfiguration(reader); - getConfig().getConfiguration().setDefaults(config); - } catch (IOException e) { - Slimefun.getLogger().log(Level.SEVERE, "Failed to load language file: \"" + path + "\"", e); - } - - save(); - } - - private void addLanguage(String id, String hash) { - if (hasLanguage(id)) { - FileConfiguration cfg; - String path = "/languages/messages_" + id + ".yml"; - - try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(path), StandardCharsets.UTF_8))) { - 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); - return; - } - - languages.put(id, new Language(id, cfg, hash)); - } - } -} + private static final String LANGUAGE_PATH = "language"; + + // All supported languages are stored in this LinkedHashMap, it is Linked so we keep the order + private final Map languages = new LinkedHashMap<>(); + private final SlimefunPlugin plugin; + private final NamespacedKey languageKey; + private final Language defaultLanguage; + + public LocalizationService(SlimefunPlugin plugin, String serverDefaultLanguage) { + super(plugin); + + this.plugin = plugin; + languageKey = new NamespacedKey(plugin, LANGUAGE_PATH); + defaultLanguage = new Language(serverDefaultLanguage, "11b3188fd44902f72602bd7c2141f5a70673a411adb3d81862c69e536166b"); + + defaultLanguage.setMessages(getConfig().getConfiguration()); + + for (SupportedLanguage lang : SupportedLanguage.values()) { + addLanguage(lang.getId(), lang.getTexture()); + } + + String language = getConfig().getString(LANGUAGE_PATH); + if (language == null) language = serverDefaultLanguage; + + if (hasLanguage(serverDefaultLanguage)) { + setLanguage(serverDefaultLanguage, !serverDefaultLanguage.equals(language)); + } + else { + setLanguage("en", false); + plugin.getLogger().log(Level.WARNING, "Could not recognize the given language: \"{0}\"", serverDefaultLanguage); + } + + Slimefun.getLogger().log(Level.INFO, "Available languages: {0}", String.join(", ", languages.keySet())); + + setPrefix("&aSlimefun 4 &7> "); + save(); + } + + @Override + public NamespacedKey getKey() { + return languageKey; + } + + @Override + public Language getLanguage(String id) { + return languages.get(id); + } + + @Override + public Collection getLanguages() { + return languages.values(); + } + + @Override + public boolean hasLanguage(String language) { + // Checks if our jar files contains a .yml file for this id + return + plugin.getClass().getResource("/languages/messages_" + language + ".yml") != null + || plugin.getClass().getResource("/languages/researches_" + language + ".yml") != null + ; + } + + public boolean isLanguageLoaded(String id) { + return languages.containsKey(id); + } + + @Override + public Language getDefaultLanguage() { + return defaultLanguage; + } + + @Override + public Language getLanguage(Player p) { + Optional language = PersistentDataAPI.getOptionalString(p, languageKey); + + if (language.isPresent()) { + Language lang = languages.get(language.get()); + + if (lang != null) { + return lang; + } + } + + return getDefaultLanguage(); + } + + private void setLanguage(String language, boolean reset) { + // Clearing out the old Language (if necessary) + if (reset) { + getConfig().clear(); + } + + Slimefun.getLogger().log(Level.INFO, "Loaded language \"{0}\"", language); + getConfig().setValue(LANGUAGE_PATH, language); + + // Loading in the defaults from our resources folder + String path = "/languages/messages_" + language + ".yml"; + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(path), StandardCharsets.UTF_8))) { + FileConfiguration config = YamlConfiguration.loadConfiguration(reader); + getConfig().getConfiguration().setDefaults(config); + } catch (IOException e) { + Slimefun.getLogger().log(Level.SEVERE, "Failed to load language file: \"" + path + "\"", e); + } + + save(); + } + + private void addLanguage(String id, String hash) { + if (hasLanguage(id)) { + FileConfiguration messages = streamConfigFile("messages_" + id + ".yml", getConfig().getConfiguration()); + FileConfiguration researches = streamConfigFile("researches_" + id + ".yml", null); + + Language language = new Language(id, hash); + language.setMessages(messages); + language.setResearches(researches); + + languages.put(id, language); + } + } + + private FileConfiguration streamConfigFile(String file, FileConfiguration defaults) { + String path = "/languages/" + file; + + if (plugin.getClass().getResourceAsStream(path) == null) { + return new YamlConfiguration(); + } + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(path), StandardCharsets.UTF_8))) { + FileConfiguration config = YamlConfiguration.loadConfiguration(reader); + + if (defaults != null) { + config.setDefaults(defaults); + } + + return config; + } catch (IOException e) { + Slimefun.getLogger().log(Level.SEVERE, "Failed to load language file into memory: \"" + path + "\"", e); + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/MetricsService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/MetricsService.java index fb9bc67a3d..1a6fc2d347 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/MetricsService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/MetricsService.java @@ -12,54 +12,55 @@ public class MetricsService extends Metrics { - public MetricsService(SlimefunPlugin plugin) { - super(plugin); + public MetricsService(SlimefunPlugin plugin) { + super(plugin); - addCustomChart(new SimplePie("auto_updates", () -> - SlimefunPlugin.getCfg().getBoolean("options.auto-update") ? "enabled": "disabled" - )); + addCustomChart(new SimplePie("auto_updates", () -> + SlimefunPlugin.getCfg().getBoolean("options.auto-update") ? "enabled": "disabled" + )); - addCustomChart(new SimplePie("resourcepack", () -> { - String version = SlimefunPlugin.getItemTextureService().getVersion(); + addCustomChart(new SimplePie("resourcepack", () -> { + String version = SlimefunPlugin.getItemTextureService().getVersion(); - if (version != null && version.startsWith("v")) { - return version + " (Official)"; - } - else if (SlimefunPlugin.getItemTextureService().isActive()) { - return "Custom / Modified"; - } - else { - return "None"; - } - })); + if (version != null && version.startsWith("v")) { + return version + " (Official)"; + } + else if (SlimefunPlugin.getItemTextureService().isActive()) { + return "Custom / Modified"; + } + else { + return "None"; + } + })); - addCustomChart(new SimplePie("branch", () -> { - if (plugin.getDescription().getVersion().startsWith("DEV - ")) { - return "master"; - } - else if (plugin.getDescription().getVersion().startsWith("RC - ")) { - return "stable"; - } - else { - return "Unknown"; - } - })); + addCustomChart(new SimplePie("branch", () -> { + if (plugin.getDescription().getVersion().startsWith("DEV - ")) { + return "master"; + } + else if (plugin.getDescription().getVersion().startsWith("RC - ")) { + return "stable"; + } + else { + return "Unknown"; + } + })); - addCustomChart(new SimplePie("language", () -> { - Language language = SlimefunPlugin.getLocal().getDefaultLanguage(); - return language.getID(); - })); + addCustomChart(new SimplePie("language", () -> { + Language language = SlimefunPlugin.getLocal().getDefaultLanguage(); + return SlimefunPlugin.getLocal().isLanguageLoaded(language.getID()) ? language.getID(): "Unsupported Language"; + })); - addCustomChart(new AdvancedPie("player_languages", () -> { - Map languages = new HashMap<>(); + addCustomChart(new AdvancedPie("player_languages", () -> { + Map languages = new HashMap<>(); - for (Player p : Bukkit.getOnlinePlayers()) { - Language lang = SlimefunPlugin.getLocal().getLanguage(p); - languages.merge(lang.getID(), 1, Integer::sum); - } + for (Player p : Bukkit.getOnlinePlayers()) { + Language language = SlimefunPlugin.getLocal().getLanguage(p); + String lang = SlimefunPlugin.getLocal().isLanguageLoaded(language.getID()) ? language.getID(): "Unsupported Language"; + languages.merge(lang, 1, Integer::sum); + } - return languages; - })); - } + return languages; + })); + } -} +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Translators.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Translators.java new file mode 100644 index 0000000000..b7e3ab784b --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Translators.java @@ -0,0 +1,80 @@ +package io.github.thebusybiscuit.slimefun4.core.services.github; + +import java.util.concurrent.ConcurrentMap; + +public class Translators { + + private final ConcurrentMap contributors; + + public Translators(ConcurrentMap contributors) { + this.contributors = contributors; + + // Translators - German + addTranslator("TheBusyBiscuit", "de", false); + addTranslator("MeerBiene", "de", true); + + // Translators - French + addTranslator("JustDams", "D4ms_", "fr", true); + addTranslator("edkerforne", "fr", true); + addTranslator("tnthomastn", "fr", true); + addTranslator("Nouma", "fr", true); + addTranslator("ishi-sama", "fr", true); + + // Translators - Italian + addTranslator("xXDOTTORXx", "it", true); + + // Translators - Latvian + addTranslator("AgnisT", "lv", true); + + // Translators - Hungarian + addTranslator("andris155", "hu", true); + + // Translators - Vietnamese + addTranslator("huynhqtienvtag", "vi", false); + addTranslator("JustMangoT", "JFF_JustMango", "vi", true); + addTranslator("Julie-Sigtuna", "vi", true); + addTranslator("nahkd123", "vi", true); + + // Translators - Slovak + addTranslator("KillerXCoder", "sk", true); + addTranslator("PixelHotDog", "sk", true); + + // Translators - Russian + addTranslator("SoSeDiK", "ru", false); + addTranslator("KostaTV", "ru", true); + + // Translators - Spanish + addTranslator("Luu7", "_Luu", "es", true); + addTranslator("Vravinite", "es", true); + addTranslator("NotUmBr4", "es", true); + addTranslator("dbzjjoe", "es", true); + + // Translators - Swedish + addTranslator("NihilistBrew", "ma1yang2", "sv", false); + addTranslator("Tra-sh", "TurretTrash", "sv", true); + + // Translators - Dutch + addTranslator("Dr4gonD", "nl", true); + addTranslator("svr333", "nl", false); + + // Translators - Polish + addTranslator("kbartek05", "kbartek_", "pl", true); + addTranslator("Xylitus", "pl", true); + addTranslator("Wirusiu", "pl", true); + + // Translators - Chinese (China) + addTranslator("StarWishsama", "StarWish_Sama", "zh-CN", false); + } + + private void addTranslator(String name, String language, boolean lock) { + addTranslator(name, name, language, lock); + } + + private void addTranslator(String name, String alias, String language, boolean lock) { + Contributor contributor = contributors.computeIfAbsent(name, user -> new Contributor(alias, "https://github.com/" + user)); + contributor.setContribution("translator," + language, 0); + + if (lock) contributor.lock(); + } + +} \ No newline at end of file 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 b13119727b..13f3d61fe5 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 @@ -9,36 +9,49 @@ public final class Language { - private final String id; - private final FileConfiguration config; - private final ItemStack item; - - public Language(String id, FileConfiguration config, String hash) { - this.id = id; - this.config = config; - - item = SkullItem.fromHash(hash); - SlimefunPlugin.getItemTextureService().setTexture(item, "_UI_LANGUAGE_" + id.toUpperCase()); - } - - public String getID() { - return id; - } - - public FileConfiguration getConfig() { - return config; - } - - public ItemStack getItem() { - return item; - } - - public String getName(Player p) { - return SlimefunPlugin.getLocal().getMessage(p, "languages." + id); - } - - public boolean isDefault() { - return this == SlimefunPlugin.getLocal().getDefaultLanguage(); - } - -} + private final String id; + private final ItemStack item; + + private FileConfiguration messages; + private FileConfiguration researches; + + public Language(String id, String hash) { + this.id = id; + + item = SkullItem.fromHash(hash); + SlimefunPlugin.getItemTextureService().setTexture(item, "_UI_LANGUAGE_" + id.toUpperCase()); + } + + public String getID() { + return id; + } + + public FileConfiguration getMessages() { + return messages; + } + + public FileConfiguration getResearches() { + return researches; + } + + public void setMessages(FileConfiguration config) { + this.messages = config; + } + + public void setResearches(FileConfiguration config) { + this.researches = config; + } + + public ItemStack getItem() { + return item; + } + + public String getName(Player p) { + return SlimefunPlugin.getLocal().getMessage(p, "languages." + id); + } + + public boolean isDefault() { + return this == SlimefunPlugin.getLocal().getDefaultLanguage(); + } + +} \ No newline at end of file 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 70be705b40..9b0e7b5f79 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 @@ -6,6 +6,7 @@ import org.bukkit.ChatColor; import org.bukkit.Keyed; +import org.bukkit.NamespacedKey; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -15,98 +16,104 @@ public abstract class SlimefunLocalization extends Localization implements Keyed{ - public SlimefunLocalization(SlimefunPlugin plugin) { - super(plugin); - } - - public abstract Language getLanguage(String id); - public abstract Language getLanguage(Player p); - public abstract Language getDefaultLanguage(); - - public abstract boolean hasLanguage(String id); - public abstract Collection getLanguages(); - - public String getMessage(Player p, String key) { - Language language = getLanguage(p); - return language.getConfig().getString(key); - } - - public List getMessages(Player p, String key) { - Language language = getLanguage(p); - return language.getConfig().getStringList(key); - } - - @Override - public void sendMessage(CommandSender sender, String key, boolean addPrefix) { - String prefix = addPrefix ? getPrefix(): ""; - - if (sender instanceof Player) { - sender.sendMessage(ChatColors.color(prefix + getMessage((Player) sender, key))); - } - else { - sender.sendMessage(ChatColor.stripColor(ChatColors.color(prefix + getMessage(key)))); - } - } - - @Override - public void sendMessage(CommandSender sender, String key) { - sendMessage(sender, key, true); - } - - public void sendMessage(CommandSender sender, String key, UnaryOperator function) { - sendMessage(sender, key, true, function); - } - - @Override - public void sendMessage(CommandSender sender, String key, boolean addPrefix, UnaryOperator function) { - String prefix = addPrefix ? getPrefix(): ""; - - if (sender instanceof Player) { - sender.sendMessage(ChatColors.color(prefix + function.apply(getMessage((Player) sender, key)))); - } - else { - sender.sendMessage(ChatColor.stripColor(ChatColors.color(prefix + function.apply(getMessage(key))))); - } - } - - @Override - public void sendMessages(CommandSender sender, String key) { - String prefix = getPrefix(); - - if (sender instanceof Player) { - for (String translation : getMessages((Player) sender, key)) { - String message = ChatColors.color(prefix + translation); - sender.sendMessage(message); - } - } - else { - for (String translation : getMessages(key)) { - String message = ChatColors.color(prefix + translation); - sender.sendMessage(ChatColor.stripColor(message)); - } - } - } - - @Override - public void sendMessages(CommandSender sender, String key, boolean addPrefix, UnaryOperator function) { - String prefix = addPrefix ? getPrefix(): ""; - - if (sender instanceof Player) { - for (String translation : getMessages((Player) sender, key)) { - String message = ChatColors.color(prefix + function.apply(translation)); - sender.sendMessage(message); - } - } - else { - for (String translation : getMessages(key)) { - String message = ChatColors.color(prefix + function.apply(translation)); - sender.sendMessage(ChatColor.stripColor(message)); - } - } - } - - public void sendMessages(CommandSender sender, String key, UnaryOperator function) { - sendMessages(sender, key, true, function); - } - -} + public SlimefunLocalization(SlimefunPlugin plugin) { + super(plugin); + } + + public abstract Language getLanguage(String id); + public abstract Language getLanguage(Player p); + public abstract Language getDefaultLanguage(); + + public abstract boolean hasLanguage(String id); + public abstract Collection getLanguages(); + + public String getMessage(Player p, String key) { + Language language = getLanguage(p); + return language.getMessages().getString(key); + } + + public List getMessages(Player p, String key) { + Language language = getLanguage(p); + return language.getMessages().getStringList(key); + } + + public String getResearchName(Player p, NamespacedKey key) { + Language language = getLanguage(p); + if (language == null || language.getResearches() == null) return null; + return language.getResearches().getString(key.getNamespace() + "." + key.getKey()); + } + + @Override + public void sendMessage(CommandSender sender, String key, boolean addPrefix) { + String prefix = addPrefix ? getPrefix(): ""; + + if (sender instanceof Player) { + sender.sendMessage(ChatColors.color(prefix + getMessage((Player) sender, key))); + } + else { + sender.sendMessage(ChatColor.stripColor(ChatColors.color(prefix + getMessage(key)))); + } + } + + @Override + public void sendMessage(CommandSender sender, String key) { + sendMessage(sender, key, true); + } + + public void sendMessage(CommandSender sender, String key, UnaryOperator function) { + sendMessage(sender, key, true, function); + } + + @Override + public void sendMessage(CommandSender sender, String key, boolean addPrefix, UnaryOperator function) { + String prefix = addPrefix ? getPrefix(): ""; + + if (sender instanceof Player) { + sender.sendMessage(ChatColors.color(prefix + function.apply(getMessage((Player) sender, key)))); + } + else { + sender.sendMessage(ChatColor.stripColor(ChatColors.color(prefix + function.apply(getMessage(key))))); + } + } + + @Override + public void sendMessages(CommandSender sender, String key) { + String prefix = getPrefix(); + + if (sender instanceof Player) { + for (String translation : getMessages((Player) sender, key)) { + String message = ChatColors.color(prefix + translation); + sender.sendMessage(message); + } + } + else { + for (String translation : getMessages(key)) { + String message = ChatColors.color(prefix + translation); + sender.sendMessage(ChatColor.stripColor(message)); + } + } + } + + @Override + public void sendMessages(CommandSender sender, String key, boolean addPrefix, UnaryOperator function) { + String prefix = addPrefix ? getPrefix(): ""; + + if (sender instanceof Player) { + for (String translation : getMessages((Player) sender, key)) { + String message = ChatColors.color(prefix + function.apply(translation)); + sender.sendMessage(message); + } + } + else { + for (String translation : getMessages(key)) { + String message = ChatColors.color(prefix + function.apply(translation)); + sender.sendMessage(ChatColor.stripColor(message)); + } + } + } + + public void sendMessages(CommandSender sender, String key, UnaryOperator function) { + sendMessages(sender, key, true, function); + } + +} \ No newline at end of file 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 0a962b51d5..70fe3d2f45 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 @@ -39,4 +39,4 @@ public String getId() { public String getTexture() { return textureHash; } -} +} \ No newline at end of file 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 new file mode 100644 index 0000000000..ca67ef2221 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/MiscSetup.java @@ -0,0 +1,255 @@ +package io.github.thebusybiscuit.slimefun4.implementation.setup; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.logging.Level; +import java.util.stream.Stream; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer.ItemFlag; +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.machines.electric.AutomatedCraftingChamber; +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 { + + private MiscSetup() {} + + public static void setupMisc() { + SlimefunItem talisman = SlimefunItem.getByID("COMMON_TALISMAN"); + + if (talisman != null && (boolean) Slimefun.getItemValue(talisman.getID(), "recipe-requires-nether-stars")) { + talisman.setRecipe(new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.NETHER_STAR), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}); + } + + SlimefunItem.setRadioactive(SlimefunItems.URANIUM); + SlimefunItem.setRadioactive(SlimefunItems.SMALL_URANIUM); + SlimefunItem.setRadioactive(SlimefunItems.BLISTERING_INGOT); + SlimefunItem.setRadioactive(SlimefunItems.BLISTERING_INGOT_2); + SlimefunItem.setRadioactive(SlimefunItems.BLISTERING_INGOT_3); + SlimefunItem.setRadioactive(SlimefunItems.NETHER_ICE); + SlimefunItem.setRadioactive(SlimefunItems.ENRICHED_NETHER_ICE); + } + + public static void loadItems(ConfigCache settings) { + Iterator iterator = SlimefunPlugin.getRegistry().getEnabledSlimefunItems().iterator(); + + while (iterator.hasNext()) { + SlimefunItem item = iterator.next(); + + if (item == null) { + Slimefun.getLogger().log(Level.WARNING, "Removed bugged Item ('NULL?')"); + iterator.remove(); + } + else if (item.getItem() == null) { + Slimefun.getLogger().log(Level.WARNING, "Removed bugged Item ('" + item.getID() + "')"); + iterator.remove(); + } + } + + List pre = new ArrayList<>(); + List init = new ArrayList<>(); + List post = new ArrayList<>(); + + for (SlimefunItem item : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { + if (item instanceof Alloy || item instanceof ReplacingAlloy) pre.add(item); + else if (item instanceof SlimefunMachine) init.add(item); + else post.add(item); + } + + for (SlimefunItem item : pre) { + item.load(); + } + + for (SlimefunItem item : init) { + item.load(); + } + + for (SlimefunItem item : post) { + item.load(); + } + + 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)) { + StringBuilder builder = new StringBuilder(); + int i = 0; + + for (ItemStack item : inputs) { + if (i > 0) { + builder.append(" "); + } + + builder.append(CustomItemSerializer.serialize(item, ItemFlag.MATERIAL, ItemFlag.ITEMMETA_DISPLAY_NAME, ItemFlag.ITEMMETA_LORE)); + + i++; + } + + SlimefunPlugin.getRegistry().getAutomatedCraftingChamberRecipes().put(builder.toString(), RecipeType.getRecipeOutputList(machine, inputs)); + } + + } + + List grinderRecipes = new ArrayList<>(); + + SlimefunItem grinder = SlimefunItem.getByID("GRIND_STONE"); + if (grinder != null) { + ItemStack[] input = null; + + for (ItemStack[] recipe : ((SlimefunMachine) grinder).getRecipes()) { + if (input == null) { + input = recipe; + } + else { + if (input[0] != null && recipe[0] != null) { + grinderRecipes.add(new ItemStack[] {input[0], recipe[0]}); + } + input = null; + } + } + } + + SlimefunItem crusher = SlimefunItem.getByID("ORE_CRUSHER"); + if (crusher != null) { + ItemStack[] input = null; + + for (ItemStack[] recipe : ((SlimefunMachine) crusher).getRecipes()) { + if (input == null) { + input = recipe; + } + else { + if (input[0] != null && recipe[0] != null) { + grinderRecipes.add(new ItemStack[] {input[0], recipe[0]}); + } + input = null; + } + } + } + + // Favour 8 Cobblestone -> 1 Sand Recipe over 1 Cobblestone -> 1 Gravel Recipe + Stream stream = grinderRecipes.stream(); + + if (!settings.legacyOreGrinder) { + 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]})); + + SlimefunItem smeltery = SlimefunItem.getByID("SMELTERY"); + if (smeltery != null) { + ItemStack[] input = null; + + for (ItemStack[] recipe : ((SlimefunMachine) smeltery).getRecipes()) { + if (input == null) { + input = recipe; + } + else { + if (input[0] != null && recipe[0] != null) { + List inputs = new ArrayList<>(); + boolean dust = false; + + for (ItemStack item : input) { + if (item != null) { + inputs.add(item); + if (SlimefunManager.isItemSimilar(item, SlimefunItems.ALUMINUM_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.COPPER_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.GOLD_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.IRON_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.LEAD_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.MAGNESIUM_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.SILVER_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.TIN_DUST, true)) dust = true; + if (SlimefunManager.isItemSimilar(item, SlimefunItems.ZINC_DUST, true)) dust = true; + } + } + + // 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]}); + } + } + + input = null; + } + } + } + + CommandSender sender = Bukkit.getConsoleSender(); + + int total = SlimefunPlugin.getRegistry().getEnabledSlimefunItems().size(); + int vanilla = SlimefunPlugin.getRegistry().countVanillaItems(); + + sender.sendMessage(""); + sender.sendMessage(ChatColor.GREEN + "######################### - Slimefun v" + SlimefunPlugin.getVersion() + " - #########################"); + sender.sendMessage(""); + sender.sendMessage(ChatColor.GREEN + "Successfully loaded " + total + " Items (" + SlimefunPlugin.getRegistry().getResearches().size() + " Researches)"); + sender.sendMessage(ChatColor.GREEN + "( " + vanilla + " Items from Slimefun, " + (total - vanilla) + " Items from " + SlimefunPlugin.getInstalledAddons().size() + " Addons )"); + sender.sendMessage(""); + sender.sendMessage(ChatColor.GREEN + "Slimefun is an Open-Source project that is maintained by community developers!"); + sender.sendMessage(""); + sender.sendMessage(ChatColor.GREEN + " -- Source Code: https://github.com/TheBusyBiscuit/Slimefun4"); + sender.sendMessage(ChatColor.GREEN + " -- Wiki: https://github.com/TheBusyBiscuit/Slimefun4/wiki"); + sender.sendMessage(ChatColor.GREEN + " -- Bug Reports: https://github.com/TheBusyBiscuit/Slimefun4/issues"); + sender.sendMessage(ChatColor.GREEN + " -- Discord: https://discord.gg/fsD4Bkh"); + sender.sendMessage(""); + + SlimefunPlugin.getItemCfg().save(); + SlimefunPlugin.getResearchCfg().save(); + SlimefunPlugin.getWhitelist().save(); + } + + public static void setupItemSettings() { + for (World world : Bukkit.getWorlds()) { + SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled-items.SLIMEFUN_GUIDE", true); + } + + Slimefun.setItemVariable("ORE_CRUSHER", "double-ores", true); + + for (Enchantment enchantment : Enchantment.values()) { + for (int i = 1; i <= enchantment.getMaxLevel(); i++) { + Slimefun.setItemVariable("MAGICIAN_TALISMAN", "allow-enchantments." + enchantment.getKey().getKey() + ".level." + i, true); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java new file mode 100644 index 0000000000..4e73b355e5 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java @@ -0,0 +1,250 @@ +package io.github.thebusybiscuit.slimefun4.implementation.setup; + +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Objects.Research; +import me.mrCookieSlime.Slimefun.api.Slimefun; + +public final class ResearchSetup { + + private ResearchSetup() {} + + public static void setupResearches() { + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "walking_sticks"), 0, "Walking Sticks", 1, SlimefunItems.GRANDMAS_WALKING_STICK, SlimefunItems.GRANDPAS_WALKING_STICK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "portable_crafter"), 1, "Portable Crafter", 1, SlimefunItems.PORTABLE_CRAFTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "fortune_cookie"), 2, "Fortune Cookie", 1, SlimefunItems.FORTUNE_COOKIE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "portable_dustbin"), 4, "Portable Dustbin", 2, SlimefunItems.PORTABLE_DUSTBIN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "meat_jerky"), 5, "Jerkys", 2, SlimefunItems.BEEF_JERKY, SlimefunItems.FISH_JERKY, SlimefunItems.RABBIT_JERKY, SlimefunItems.MUTTON_JERKY, SlimefunItems.CHICKEN_JERKY, SlimefunItems.PORK_JERKY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "armor_forge"), 6, "Armor Crafting", 2, SlimefunItems.ARMOR_FORGE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "glowstone_armor"), 7, "Glowstone Armor", 3, SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "lumps"), 8, "Lumps and Magic", 3, SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "ender_backpack"), 9, "Ender Backpack", 4, SlimefunItems.ENDER_BACKPACK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "ender_armor"), 10, "Ender Armor", 4, SlimefunItems.ENDER_HELMET, SlimefunItems.ENDER_CHESTPLATE, SlimefunItems.ENDER_LEGGINGS, SlimefunItems.ENDER_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "magic_eye_of_ender"), 11, "Magic Eye of Ender", 4, SlimefunItems.MAGIC_EYE_OF_ENDER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "magic_sugar"), 12, "Magic Sugar", 4, SlimefunItems.MAGIC_SUGAR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "monster_jerky"), 13, "Monster Jerky", 5, SlimefunItems.MONSTER_JERKY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "slime_armor"), 14, "Slime Armor", 5, SlimefunItems.SLIME_HELMET, SlimefunItems.SLIME_CHESTPLATE, SlimefunItems.SLIME_LEGGINGS, SlimefunItems.SLIME_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "sword_of_beheading"), 15, "Sword of Beheading", 6, SlimefunItems.SWORD_OF_BEHEADING); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "basic_circuit_board"), 16, "Electric Work", 8, SlimefunItems.BASIC_CIRCUIT_BOARD); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "advanced_circuit_board"), 17, "Advanced Electricity", 9, SlimefunItems.ADVANCED_CIRCUIT_BOARD); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "smeltery"), 18, "Hot Smelting", 10, SlimefunItems.SMELTERY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "steel"), 19, "Steel Age", 11, SlimefunItems.STEEL_INGOT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "misc_power_items"), 20, "Important Power-Related Items", 12, SlimefunItems.SULFATE, SlimefunItems.POWER_CRYSTAL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "battery"), 21, "Your first Battery", 10, SlimefunItems.BATTERY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "steel_plate"), 22, "Steel Plating", 14, SlimefunItems.STEEL_PLATE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "steel_thruster"), 23, "Steel Thruster", 14, SlimefunItems.STEEL_THRUSTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "parachute"), 24, "Parachute", 15, SlimefunItems.PARACHUTE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "grappling_hook"), 25, "Grappling Hook", 15, SlimefunItems.GRAPPLING_HOOK, SlimefunItems.HOOK, SlimefunItems.CHAIN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "jetpacks"), 26, "Jetpacks", 22, SlimefunItems.DURALUMIN_JETPACK, SlimefunItems.BILLON_JETPACK, SlimefunItems.SOLDER_JETPACK, SlimefunItems.STEEL_JETPACK, SlimefunItems.DAMASCUS_STEEL_JETPACK, SlimefunItems.REINFORCED_ALLOY_JETPACK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "multitools"), 27, "Multi Tools", 18, SlimefunItems.DURALUMIN_MULTI_TOOL, SlimefunItems.SOLDER_MULTI_TOOL, SlimefunItems.BILLON_MULTI_TOOL, SlimefunItems.STEEL_MULTI_TOOL, SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL, SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "solar_panel_and_helmet"), 28, "Solar Power", 17, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_HELMET); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "elemental_staff"), 29, "Elemental Staves", 17, SlimefunItems.STAFF_ELEMENTAL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "grind_stone"), 30, "Grind Stone", 4, SlimefunItems.GRIND_STONE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "cactus_armor"), 31, "Cactus Suit", 5, SlimefunItems.CACTUS_BOOTS, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_LEGGINGS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gold_pan"), 32, "Gold Pan", 5, SlimefunItems.GOLD_PAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "magical_book_cover"), 33, "Magical Book Binding", 5, SlimefunItems.MAGICAL_BOOK_COVER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "slimefun_metals"), 34, "New Metals", 6, SlimefunItems.COPPER_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.MAGNESIUM_INGOT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "ore_crusher"), 35, "Ore Doubling", 6, SlimefunItems.ORE_CRUSHER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "bronze"), 36, "Bronze Creation", 8, SlimefunItems.BRONZE_INGOT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "alloys"), 37, "Advanced Alloys", 12, SlimefunItems.BILLON_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BRASS_INGOT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "compressor_and_carbon"), 38, "Carbon Creation", 9, SlimefunItems.COMPRESSOR, SlimefunItems.CARBON); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gilded_iron_armor"), 40, "Gilded Iron Armor", 16, SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "synthetic_diamond"), 41, "Synthetic Diamonds", 10, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "pressure_chamber"), 42, "Pressure Chamber", 14, SlimefunItems.PRESSURE_CHAMBER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "synthetic_sapphire"), 43, "Synthetic Sapphires", 16, SlimefunItems.SYNTHETIC_SAPPHIRE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "damascus_steel"), 45, "Damascus Steel", 17, SlimefunItems.DAMASCUS_STEEL_INGOT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "damascus_steel_armor"), 46, "Damascus Steel Armor", 18, SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "reinforced_alloy"), 47, "Reinforced Alloy", 22, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "carbonado"), 48, "Black Diamonds", 26, SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "magic_workbench"), 50, "Magic Workbench", 12, SlimefunItems.MAGIC_WORKBENCH); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "wind_staff"), 51, "Wind Staff", 17, SlimefunItems.STAFF_WIND); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "reinforced_armor"), 52, "Reinforced Armor", 26, SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "ore_washer"), 53, "Ore Washer", 5, SlimefunItems.ORE_WASHER, SlimefunItems.STONE_CHUNK, SlimefunItems.SIFTED_ORE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gold_carats"), 54, "Pure Gold", 7, SlimefunItems.GOLD_4K, SlimefunItems.GOLD_6K, SlimefunItems.GOLD_8K, SlimefunItems.GOLD_10K, SlimefunItems.GOLD_12K, SlimefunItems.GOLD_14K, SlimefunItems.GOLD_16K, SlimefunItems.GOLD_18K, SlimefunItems.GOLD_20K, SlimefunItems.GOLD_22K, SlimefunItems.GOLD_24K); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "silicon"), 55, "Silicon Valley", 12, SlimefunItems.SILICON, SlimefunItems.FERROSILICON); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "fire_staff"), 56, "Fire Staff", 2, SlimefunItems.STAFF_FIRE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "smelters_pickaxe"), 57, "Smelters Pickaxe", 17, SlimefunItems.AUTO_SMELT_PICKAXE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "common_talisman"), 58, "Common Talisman", 14, SlimefunItems.TALISMAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "anvil_talisman"), 59, "Talisman of the Anvil", 18, SlimefunItems.TALISMAN_ANVIL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "miner_talisman"), 60, "Talisman of the Miner", 18, SlimefunItems.TALISMAN_MINER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "hunter_talisman"), 61, "Talisman of the Hunter", 18, SlimefunItems.TALISMAN_HUNTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "lava_talisman"), 62, "Talisman of the Lava Walker", 18, SlimefunItems.TALISMAN_LAVA); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "water_talisman"), 63, "Talisman of the Water Breather", 18, SlimefunItems.TALISMAN_WATER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "angel_talisman"), 64, "Talisman of the Angel", 18, SlimefunItems.TALISMAN_ANGEL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "fire_talisman"), 65, "Talisman of the Firefighter", 18, SlimefunItems.TALISMAN_FIRE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "lava_crystal"), 67, "Firey Situation", 14, SlimefunItems.LAVA_CRYSTAL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "magician_talisman"), 68, "Talisman of the Magician", 20, SlimefunItems.TALISMAN_MAGICIAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "traveller_talisman"), 69, "Talisman of the Traveller", 20, SlimefunItems.TALISMAN_TRAVELLER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "warrior_talisman"), 70, "Talisman of the Warrior", 20, SlimefunItems.TALISMAN_WARRIOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "knight_talisman"), 71, "Talisman of the Knight", 20, SlimefunItems.TALISMAN_KNIGHT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gilded_iron"), 72, "Shiny Iron", 11, SlimefunItems.GILDED_IRON); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "synthetic_emerald"), 73, "Fake Gem", 17, SlimefunItems.SYNTHETIC_EMERALD); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "chainmail_armor"), 74, "Chainmail Armor", 8, new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "whirlwind_talisman"), 75, "Talisman of the Whirlwind", 19, SlimefunItems.TALISMAN_WHIRLWIND); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "wizard_talisman"), 76, "Talisman of the Wizard", 22, SlimefunItems.TALISMAN_WIZARD); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "lumber_axe"), 77, "Lumber Axe", 21, SlimefunItems.LUMBER_AXE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "hazmat_suit"), 79, "Hazmat Suit", 21, SlimefunItems.SCUBA_HELMET, SlimefunItems.HAZMATSUIT_CHESTPLATE, SlimefunItems.HAZMATSUIT_LEGGINGS, SlimefunItems.RUBBER_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "uranium"), 80, "Radioactive", 30, SlimefunItems.TINY_URANIUM, SlimefunItems.SMALL_URANIUM, SlimefunItems.URANIUM); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "crushed_ore"), 81, "Ore Purification", 25, SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "redstone_alloy"), 84, "Redstone Alloy", 16, SlimefunItems.REDSTONE_ALLOY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "carbonado_tools"), 85, "Top Tier Machines", 24, SlimefunItems.CARBONADO_MULTI_TOOL, SlimefunItems.CARBONADO_JETPACK, SlimefunItems.CARBONADO_JETBOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "first_aid"), 86, "First Aid", 2, SlimefunItems.CLOTH, SlimefunItems.RAG, SlimefunItems.BANDAGE, SlimefunItems.SPLINT, SlimefunItems.CAN, SlimefunItems.VITAMINS, SlimefunItems.MEDICINE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gold_armor"), 87, "Shiny Armor", 13, SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "night_vision_googles"), 89, "Night Vision Goggles", 10, SlimefunItems.NIGHT_VISION_GOGGLES); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "pickaxe_of_containment"), 90, "Pickaxe of Containment", 14, SlimefunItems.PICKAXE_OF_CONTAINMENT, SlimefunItems.BROKEN_SPAWNER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "hercules_pickaxe"), 91, "Hercules Pickaxe", 28, SlimefunItems.HERCULES_PICKAXE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "table_saw"), 92, "Table Saw", 4, SlimefunItems.TABLE_SAW); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "slime_steel_armor"), 93, "Slimy Steel Armor", 27, SlimefunItems.SLIME_HELMET_STEEL, SlimefunItems.SLIME_CHESTPLATE_STEEL, SlimefunItems.SLIME_LEGGINGS_STEEL, SlimefunItems.SLIME_BOOTS_STEEL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "blade_of_vampires"), 94, "Blade of Vampires", 26, SlimefunItems.BLADE_OF_VAMPIRES); + Slimefun.registerResearch(new Research(95, "Lazy Mining", 40), SlimefunItems.DIGITAL_MINER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "water_staff"), 96, "Water Staff", 8, SlimefunItems.STAFF_WATER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "24k_gold_block"), 97, "Golden City", 19, SlimefunItems.GOLD_24K_BLOCK); + Slimefun.registerResearch(new Research(98, "Advanced Mining 101", 42), SlimefunItems.ADVANCED_DIGITAL_MINER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "composter"), 99, "Composting Dirt", 3, SlimefunItems.COMPOSTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "farmer_shoes"), 100, "Farmer Shoes", 4, SlimefunItems.FARMER_SHOES); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "explosive_tools"), 101, "Explosive Tools", 30, SlimefunItems.EXPLOSIVE_PICKAXE, SlimefunItems.EXPLOSIVE_SHOVEL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "automated_panning_machine"), 102, "Automated Gold Pan", 17, SlimefunItems.AUTOMATED_PANNING_MACHINE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "boots_of_the_stomper"), 103, "Boots of the Stomper", 19, SlimefunItems.BOOTS_OF_THE_STOMPER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "pickaxe_of_the_seeker"), 104, "Pickaxe of the Seeker", 19, SlimefunItems.PICKAXE_OF_THE_SEEKER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "backpacks"), 105, "Backpacks", 15, SlimefunItems.BACKPACK_LARGE, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.BACKPACK_SMALL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "woven_backpack"), 106, "Woven Backpack", 19, SlimefunItems.WOVEN_BACKPACK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "crucible"), 107, "Crucible", 13, SlimefunItems.CRUCIBLE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gilded_backpack"), 108, "Gilded Backpack", 22, SlimefunItems.GILDED_BACKPACK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "armored_jetpack"), 111, "Armored Jetpack", 27, SlimefunItems.ARMORED_JETPACK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "ender_talismans"), 112, "Ender Talismans", 28); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "nickel_and_cobalt"), 115, "Even more Ores", 10, SlimefunItems.NICKEL_INGOT, SlimefunItems.COBALT_INGOT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "magnet"), 116, "Magnetic Metals", 16, SlimefunItems.MAGNET); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "infused_magnet"), 117, "Infused Magnets", 18, SlimefunItems.INFUSED_MAGNET); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "cobalt_pickaxe"), 118, "Speedy Pickaxe", 14, SlimefunItems.COBALT_PICKAXE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "essence_of_afterlife"), 119, "Necromancy", 19, SlimefunItems.NECROTIC_SKULL, SlimefunItems.ESSENCE_OF_AFTERLIFE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "bound_backpack"), 120, "Soulbound Storage", 22, SlimefunItems.BOUND_BACKPACK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "jetboots"), 121, "Jet Boots", 25, SlimefunItems.DURALUMIN_JETBOOTS, SlimefunItems.BILLON_JETBOOTS, SlimefunItems.SOLDER_JETBOOTS, SlimefunItems.STEEL_JETBOOTS, SlimefunItems.DAMASCUS_STEEL_JETBOOTS, SlimefunItems.REINFORCED_ALLOY_JETBOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "armored_jetboots"), 122, "Armored Jet Boots", 27, SlimefunItems.ARMORED_JETBOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "seismic_axe"), 123, "Seismic Axe", 29, SlimefunItems.SEISMIC_AXE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "pickaxe_of_vein_mining"), 124, "Pickaxe of Vein Mining", 29, SlimefunItems.PICKAXE_OF_VEIN_MINING); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "bound_weapons"), 125, "Soulbound Weapons", 29, SlimefunItems.SOULBOUND_SWORD, SlimefunItems.SOULBOUND_BOW, SlimefunItems.SOULBOUND_TRIDENT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "bound_tools"), 126, "Soulbound Tools", 29, SlimefunItems.SOULBOUND_PICKAXE, SlimefunItems.SOULBOUND_AXE, SlimefunItems.SOULBOUND_SHOVEL, SlimefunItems.SOULBOUND_HOE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "bound_armor"), 127, "Soulbound Armor", 29, SlimefunItems.SOULBOUND_HELMET, SlimefunItems.SOULBOUND_CHESTPLATE, SlimefunItems.SOULBOUND_LEGGINGS, SlimefunItems.SOULBOUND_BOOTS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "juicer"), 129, "Delicious Drinks", 29, SlimefunItems.JUICER, SlimefunItems.APPLE_JUICE, SlimefunItems.MELON_JUICE, SlimefunItems.CARROT_JUICE, SlimefunItems.PUMPKIN_JUICE, SlimefunItems.SWEET_BERRY_JUICE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "repaired_spawner"), 130, "Repairing Spawners", 15, SlimefunItems.REPAIRED_SPAWNER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "enhanced_furnace"), 132, "Enhanced Furnace", 7, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.ENHANCED_FURNACE_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "more_enhanced_furnaces"), 133, "Better Furnaces", 18, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.ENHANCED_FURNACE_7); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "high_tier_enhanced_furnaces"), 134, "High Tier Furnace", 29, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.ENHANCED_FURNACE_11); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "reinforced_furnace"), 135, "Reinforced Furnace", 32, SlimefunItems.REINFORCED_FURNACE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "carbonado_furnace"), 136, "Carbonado Edged Furnace", 35, SlimefunItems.CARBONADO_EDGED_FURNACE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "electric_motor"), 137, "Heating up", 32, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.HEATING_COIL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "block_placer"), 138, "Block Placer", 17, SlimefunItems.BLOCK_PLACER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "scroll_of_dimensional_teleposition"), 142, "Turning things around", 38, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "special_bows"), 143, "Robin Hood", 22, SlimefunItems.EXPLOSIVE_BOW, SlimefunItems.ICY_BOW); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "tome_of_knowledge_sharing"), 144, "Sharing with friends", 30, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "flask_of_knowledge"), 145, "XP Storage", 13, SlimefunItems.FLASK_OF_KNOWLEDGE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "hardened_glass"), 146, "Withstanding Explosions", 15, SlimefunItems.REINFORCED_PLATE, SlimefunItems.HARDENED_GLASS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "golden_apple_juice"), 149, "Golden potion", 24, SlimefunItems.GOLDEN_APPLE_JUICE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "cooler"), 150, "Portable Beverages", 24, SlimefunItems.COOLING_UNIT, SlimefunItems.COOLER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "ancient_altar"), 151, "Ancient Altar", 15, SlimefunItems.ANCIENT_PEDESTAL, SlimefunItems.ANCIENT_ALTAR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "wither_proof_obsidian"), 152, "Wither-Proof Obsidian", 21, SlimefunItems.WITHER_PROOF_OBSIDIAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "ancient_runes"), 155, "Elemental Runes", 15, SlimefunItems.BLANK_RUNE, SlimefunItems.RUNE_EARTH, SlimefunItems.RUNE_WATER, SlimefunItems.RUNE_AIR, SlimefunItems.RUNE_FIRE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "special_runes"), 156, "Purple Runes", 18, SlimefunItems.RUNE_ENDER, SlimefunItems.RUNE_RAINBOW); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "infernal_bonemeal"), 157, "Infernal Bonemeal", 12, SlimefunItems.INFERNAL_BONEMEAL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "rainbow_blocks"), 158, "Rainbow Blocks", 24, SlimefunItems.RAINBOW_CLAY, SlimefunItems.RAINBOW_GLASS, SlimefunItems.RAINBOW_GLASS_PANE, SlimefunItems.RAINBOW_WOOL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "infused_hopper"), 159, "Infused Hopper", 22, SlimefunItems.INFUSED_HOPPER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "wither_proof_glass"), 160, "Wither-Proof Glass", 20, SlimefunItems.WITHER_PROOF_GLASS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "duct_tape"), 161, "Duct Tape", 14, SlimefunItems.DUCT_TAPE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "plastic_sheet"), 162, "Plastic", 25, SlimefunItems.PLASTIC_SHEET); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "android_memory_core"), 163, "Memory Core", 28, SlimefunItems.ANDROID_MEMORY_CORE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "oil"), 164, "Oil", 30, SlimefunItems.BUCKET_OF_OIL, SlimefunItems.OIL_PUMP); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "fuel"), 165, "Fuel", 30, SlimefunItems.BUCKET_OF_FUEL, SlimefunItems.REFINERY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "hologram_projector"), 166, "Holograms", 36, SlimefunItems.HOLOGRAM_PROJECTOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "capacitors"), 167, "Tier 1 Capacitors", 25, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.BIG_CAPACITOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "high_tier_capacitors"), 168, "Tier 2 Capacitors", 32, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO_EDGED_CAPACITOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "solar_generators"), 169, "Solar Power Plant", 14, SlimefunItems.SOLAR_GENERATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "electric_furnaces"), 170, "Powered Furnace", 15, SlimefunItems.ELECTRIC_FURNACE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "electric_ore_grinding"), 171, "Crushing and Grinding", 20, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.ELECTRIC_INGOT_PULVERIZER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "heated_pressure_chamber"), 172, "Heated Pressure Chamber", 22, SlimefunItems.HEATED_PRESSURE_CHAMBER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "coal_generator"), 173, "Coal Generator", 18, SlimefunItems.COAL_GENERATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "bio_reactor"), 173, "Bio-Reactor", 18, SlimefunItems.BIO_REACTOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "auto_enchanting"), 174, "Automatic Enchanting and Disenchanting", 24, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.AUTO_DISENCHANTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "auto_anvil"), 175, "Automatic Anvil", 34, SlimefunItems.AUTO_ANVIL, SlimefunItems.AUTO_ANVIL_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "multimeter"), 176, "Power Measurement", 10, SlimefunItems.MULTIMETER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gps_setup"), 177, "Basic GPS Setup", 28, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.GPS_MARKER_TOOL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "gps_emergency_transmitter"), 178, "GPS Emergency Waypoint", 30, SlimefunItems.GPS_EMERGENCY_TRANSMITTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "programmable_androids"), 179, "Programmable Androids", 50, SlimefunItems.PROGRAMMABLE_ANDROID, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "android_interfaces"), 180, "Android Interfaces", 26, SlimefunItems.ANDROID_INTERFACE_FUEL, SlimefunItems.ANDROID_INTERFACE_ITEMS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "geo_scanner"), 181, "GEO-Scans", 30, SlimefunItems.GPS_GEO_SCANNER, SlimefunItems.PORTABLE_GEO_SCANNER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "combustion_reactor"), 182, "Combustion Reactor", 38, SlimefunItems.COMBUSTION_REACTOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "teleporter"), 183, "Teleporter Base Components", 42, SlimefunItems.GPS_TELEPORTATION_MATRIX, SlimefunItems.GPS_TELEPORTER_PYLON); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "teleporter_activation_plates"), 184, "Teleporter Activation", 36, SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_solar_generators"), 185, "Upgraded Solar Generators", 28, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.SOLAR_GENERATOR_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_gps_transmitters"), 186, "Upgraded Transmitters", 36, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.GPS_TRANSMITTER_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "elevator"), 187, "Elevators", 28, SlimefunItems.ELEVATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "energized_solar_generator"), 188, "Full-Time Solar Power", 44, SlimefunItems.SOLAR_GENERATOR_4); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "energized_gps_transmitter"), 189, "Top Tier Transmitter", 44, SlimefunItems.GPS_TRANSMITTER_4); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "energy_regulator"), 190, "Energy Networks 101", 6, SlimefunItems.ENERGY_REGULATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "butcher_androids"), 191, "Butcher Androids", 32, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "organic_food"), 192, "Organic Food", 25, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.WHEAT_ORGANIC_FOOD, SlimefunItems.CARROT_ORGANIC_FOOD, SlimefunItems.POTATO_ORGANIC_FOOD, SlimefunItems.SEEDS_ORGANIC_FOOD, SlimefunItems.BEETROOT_ORGANIC_FOOD, SlimefunItems.MELON_ORGANIC_FOOD, SlimefunItems.APPLE_ORGANIC_FOOD, SlimefunItems.SWEET_BERRIES_ORGANIC_FOOD, SlimefunItems.KELP_ORGANIC_FOOD); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "auto_breeder"), 193, "Automated Feeding", 25, SlimefunItems.AUTO_BREEDER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "advanced_android"), 194, "Advanced Androids", 60, SlimefunItems.PROGRAMMABLE_ANDROID_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "advanced_butcher_android"), 195, "Advanced Androids - Butcher", 30, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "advanced_fisherman_android"), 196, "Advanced Androids - Fisherman", 30, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "animal_growth_accelerator"), 197, "Animal Growth Manipulation", 32, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "xp_collector"), 198, "XP Collector", 36, SlimefunItems.XP_COLLECTOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "organic_fertilizer"), 199, "Organic Fertilizer", 36, SlimefunItems.FOOD_COMPOSTER, SlimefunItems.WHEAT_FERTILIZER, SlimefunItems.CARROT_FERTILIZER, SlimefunItems.POTATO_FERTILIZER, SlimefunItems.SEEDS_FERTILIZER, SlimefunItems.BEETROOT_FERTILIZER, SlimefunItems.MELON_FERTILIZER, SlimefunItems.APPLE_FERTILIZER, SlimefunItems.SWEET_BERRIES_FERTILIZER, SlimefunItems.KELP_FERTILIZER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "crop_growth_accelerator"), 200, "Crop Growth Acceleration", 40, SlimefunItems.CROP_GROWTH_ACCELERATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_crop_growth_accelerator"), 201, "Upgraded Crop Growth Accelerator", 44, SlimefunItems.CROP_GROWTH_ACCELERATOR_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "reactor_essentials"), 202, "Reactor Essentials", 36, SlimefunItems.REACTOR_COOLANT_CELL, SlimefunItems.NEPTUNIUM, SlimefunItems.PLUTONIUM); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "nuclear_reactor"), 203, "Nuclear Power Plant", 48, SlimefunItems.NUCLEAR_REACTOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "freezer"), 204, "Mr Freeze", 20, SlimefunItems.FREEZER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "cargo_basics"), 205, "Cargo Basics", 30, SlimefunItems.CARGO_MOTOR, SlimefunItems.CARGO_MANAGER, SlimefunItems.CARGO_NODE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "cargo_nodes"), 206, "Cargo Setup", 30, SlimefunItems.CARGO_INPUT, SlimefunItems.CARGO_OUTPUT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "electric_ingot_machines"), 207, "Electric Ingot Fabrication", 18, SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRIC_INGOT_FACTORY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "high_tier_electric_ingot_machines"), 209, "Super Fast Ingot Fabrication", 32, SlimefunItems.ELECTRIC_GOLD_PAN_3, SlimefunItems.ELECTRIC_DUST_WASHER_3, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, SlimefunItems.ELECTRIC_ORE_GRINDER_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "automated_crafting_chamber"), 210, "Automated Crafting", 20, SlimefunItems.AUTOMATED_CRAFTING_CHAMBER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_food_fabricator"), 211, "Upgraded Food Fabrication", 28, SlimefunItems.FOOD_FABRICATOR_2, SlimefunItems.FOOD_COMPOSTER_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "reactor_access_port"), 212, "Reactor Interaction", 18, SlimefunItems.REACTOR_ACCESS_PORT); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "fluid_pump"), 213, "Fluid Pump", 28, SlimefunItems.FLUID_PUMP); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_freezer"), 214, "Upgraded Freezer", 29, SlimefunItems.FREEZER_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "boosted_uranium"), 215, "Never-Ending Circle", 30, SlimefunItems.BOOSTED_URANIUM); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "trash_can"), 216, "Trash", 8, SlimefunItems.TRASH_CAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "advanced_output_node"), 217, "Advanced Output Node", 24, SlimefunItems.CARGO_OUTPUT_ADVANCED); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "carbon_press"), 218, "Carbon Press", 28, SlimefunItems.CARBON_PRESS); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "electric_smeltery"), 219, "Electric Smeltery", 28, SlimefunItems.ELECTRIC_SMELTERY); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_electric_furnace"), 220, "Upgraded Electric Furnace", 20, SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.ELECTRIC_FURNACE_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_carbon_press"), 221, "Upgraded Carbon Press", 26, SlimefunItems.CARBON_PRESS_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "empowered_android"), 222, "Empowered Androids", 60, SlimefunItems.PROGRAMMABLE_ANDROID_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "empowered_butcher_android"), 223, "Empowered Androids - Butcher", 30, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "empowered_fisherman_android"), 224, "Empowered Androids - Fisherman", 30, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "high_tier_carbon_press"), 225, "Ultimate Carbon Press", 32, SlimefunItems.CARBON_PRESS_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "wither_assembler"), 226, "Automated Wither Killer", 35, SlimefunItems.WITHER_ASSEMBLER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_heated_pressure_chamber"), 227, "Upgraded Heated Pressure Chamber", 20, SlimefunItems.HEATED_PRESSURE_CHAMBER_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "elytra"), 228, "Elytras", 20, SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "special_elytras"), 229, "Special Elytras", 30, SlimefunItems.INFUSED_ELYTRA, SlimefunItems.SOULBOUND_ELYTRA); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "electric_crucible"), 230, "Electrified Crucible", 26, SlimefunItems.ELECTRIFIED_CRUCIBLE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "better_electric_crucibles"), 231, "Hot Crucibles", 30, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.ELECTRIFIED_CRUCIBLE_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "advanced_electric_smeltery"), 232, "Advanced Electric Smeltery", 28, SlimefunItems.ELECTRIC_SMELTERY_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "advanced_farmer_android"), 233, "Advanced Androids - Farmer", 30, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "lava_generator"), 234, "Lava Generator", 38, SlimefunItems.LAVA_GENERATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "nether_ice"), 235, "Nether Ice Coolant", 45, SlimefunItems.NETHER_ICE, SlimefunItems.ENRICHED_NETHER_ICE, SlimefunItems.NETHER_ICE_COOLANT_CELL); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "nether_star_reactor"), 236, "Nether Star Reactor", 60, SlimefunItems.NETHERSTAR_REACTOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "blistering_ingots"), 237, "Blistering Radioactivity", 38, SlimefunItems.BLISTERING_INGOT, SlimefunItems.BLISTERING_INGOT_2, SlimefunItems.BLISTERING_INGOT_3); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "automatic_ignition_chamber"), 239, "Automatic Ignition Chamber", 12, SlimefunItems.IGNITION_CHAMBER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "output_chest"), 240, "Basic machinery output chest", 20, SlimefunItems.OUTPUT_CHEST); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "copper_wire"), 241, "Thinned-down Conductivity", 15, SlimefunItems.COPPER_WIRE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "radiant_backpack"), 242, "Radiant Backpack", 25, SlimefunItems.RADIANT_BACKPACK); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "auto_drier"), 243, "A Dry Day", 15, SlimefunItems.AUTO_DRIER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "diet_cookie"), 244, "Diet Cookie", 3, SlimefunItems.DIET_COOKIE); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "storm_staff"), 245, "Storm Staff", 30, SlimefunItems.STAFF_STORM); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "soulbound_rune"), 246, "Soulbound Rune", 60, SlimefunItems.RUNE_SOULBOUND); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "geo_miner"), 247, "GEO-Miner", 24, SlimefunItems.GEO_MINER); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "lightning_rune"), 248, "Lightning Rune", 24, SlimefunItems.RUNE_LIGHTNING); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "totem_of_undying"), 249, "Totem of Undying", 36, SlimefunItems.TOTEM_OF_UNDYING); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "charging_bench"), 250, "Charging Bench", 8, SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "nether_gold_pan"), 251, "Nether Gold Pan", 8, SlimefunItems.NETHER_GOLD_PAN); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "electric_press"), 252, "Electric Press", 16, SlimefunItems.ELECTRIC_PRESS, SlimefunItems.ELECTRIC_PRESS_2); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "magnesium_generator"), 253, "Power from Magnesium", 20, SlimefunItems.MAGNESIUM_SALT, SlimefunItems.MAGNESIUM_GENERATOR); + Slimefun.registerResearch(new NamespacedKey(SlimefunPlugin.instance, "kelp_cookie"), 254, "Tasty Kelp", 4, SlimefunItems.KELP_COOKIE); + } +} \ No newline at end of file diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunSetup.java similarity index 99% rename from src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunSetup.java index 6afb9e2b60..0268a7499e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunSetup.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.Setup; +package io.github.thebusybiscuit.slimefun4.implementation.setup; import java.util.ArrayList; import java.util.Arrays; @@ -6,6 +6,7 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; @@ -3078,10 +3079,4 @@ public int getSpeed() { new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, new ItemStack(Material.NETHER_STAR), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBONADO_EDGED_CAPACITOR}) .registerChargeableBlock(true, 4096); } - - @Deprecated - public static void registerPostHandler(PostSlimefunLoadingHandler handler) { - SlimefunPlugin.getRegistry().getPostHandlers().add(handler); - } - } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/WikiSetup.java similarity index 95% rename from src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/WikiSetup.java index b87c74cf5f..4d0e705854 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/WikiSetup.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.Setup; +package io.github.thebusybiscuit.slimefun4.implementation.setup; import java.io.BufferedReader; import java.io.IOException; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 36e1222412..515694a80d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -53,12 +53,13 @@ private SlimefunItems() {} public static final ItemStack NIGHT_VISION_GOGGLES = new SlimefunItemStack("NIGHT_VISION_GOGGLES", Material.LEATHER_HELMET, Color.BLACK, "&a夜视眼镜", "", "&9+ 夜视效果"); public static final ItemStack FARMER_SHOES = new SlimefunItemStack("FARMER_SHOES", Material.LEATHER_BOOTS, Color.YELLOW, "&e农夫的靴子", "", "&6&o能够防止你踩坏农田"); public static final ItemStack INFUSED_MAGNET = new SlimefunItemStack("INFUSED_MAGNET", "aba8ebc4c6a81730947499bf7e1d5e73fed6c1bb2c051e96d35eb16d24610e7", "&aInfused Magnet" , "&a吸入磁铁" , "", "&r注入了魔法的磁铁", "&r能够将附近的物品", "&r放入你的背包", "", "&7按住 &eShift&7 吸取周围的物品"); - public static final ItemStack FLASK_OF_KNOWLEDGE = new SlimefunItemStack("FLASK_OF_KNOWLEDGE", Material.GLASS_BOTTLE, "&c学识之瓶", "", "&r允许你将经验储存在瓶子里", "&7需要消耗 &a1 个等级"); public static final ItemStack RAG = new SlimefunItemStack("RAG", Material.PAPER, "&c破布", "", "&a1级医疗供给", "", "&r恢复2点血量", "&r可以熄灭身上的火", "", "&7&e右键&7 使用"); public static final ItemStack BANDAGE = new SlimefunItemStack("BANDAGE", Material.PAPER, "&c绷带", "", "&a2级医疗供给", "", "&r恢复4点血量", "&r可以熄灭身上的火", "", "&7&e右键&7 使用"); public static final ItemStack SPLINT = new SlimefunItemStack("SPLINT", Material.STICK, "&c夹板", "", "&a1级医疗供给", "", "&r恢复2点血量", "", "&7&e右键&7 使用"); public static final ItemStack VITAMINS = new SlimefunItemStack("VITAMINS", Material.NETHER_WART, "&c维他命", "", "&a3级医疗供给", "", "&r恢复4点血量", "&r可以熄灭身上的火", "&r治愈中毒/凋零/辐射的负面效果", "", "&7&e右键&7 使用"); public static final ItemStack MEDICINE = new SlimefunItemStack("MEDICINE", Material.POTION, Color.RED, "&c药物", "", "&a3级医疗供给", "", "&r恢复4点血量", "&r可以熄灭身上的火", "&r治愈中毒/凋零/辐射的负面效果", "", "&7&e右键&7 饮用"); + public static final ItemStack FLASK_OF_KNOWLEDGE = new SlimefunItemStack("FLASK_OF_KNOWLEDGE", Material.GLASS_BOTTLE, "&c学识之瓶", "", "&r允许你将经验储存在瓶子里", "&7需要消耗 &a1 个等级"); + public static final ItemStack FILLED_FLASK_OF_KNOWLEDGE = new SlimefunItemStack("FILLED_FLASK_OF_KNOWLEDGE", Material.EXPERIENCE_BOTTLE, "&a学识之瓶"); /* Backpacks */ public static final ItemStack BACKPACK_SMALL = new SlimefunItemStack("SMALL_BACKPACK","40cb1e67b512ab2d4bf3d7ace0eaaf61c32cd4681ddc3987ceb326706a33fa", "&e小型背包", "", "&7大小: &e9", "&7ID: ", "", "&7&e右键&7 打开"); @@ -452,9 +453,9 @@ private SlimefunItems() {} public static final ItemStack GOLD_24K_BLOCK = new SlimefunItemStack("GOLD_24K_BLOCK", Material.GOLD_BLOCK, "&r&r金块 &7(24克拉)"); /* Gems */ - public static final ItemStack SYNTHETIC_DIAMOND = new SlimefunItemStack("SYNTHETIC_DIAMOND", Material.DIAMOND, "&b人造钻石"); - public static final ItemStack SYNTHETIC_EMERALD = new SlimefunItemStack("SYNTHETIC_EMERALD", Material.EMERALD, "&b人造绿宝石"); - public static final ItemStack SYNTHETIC_SAPPHIRE = new SlimefunItemStack("SYNTHETIC_SAPPHIRE", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTM1MDMyZjRkN2QwMWRlOGVjOTlkODlmODcyMzAxMmQ0ZTc0ZmE3MzAyMmM0ZmFjZjFiNTdjN2ZmNmZmMCJ9fX0=", "&b人造蓝宝石"); + public static final ItemStack SYNTHETIC_DIAMOND = new SlimefunItemStack("SYNTHETIC_DIAMOND", Material.DIAMOND, "&b人造钻石", "", "&r可以在工作台中作为钻石使用"); + public static final ItemStack SYNTHETIC_EMERALD = new SlimefunItemStack("SYNTHETIC_EMERALD", Material.EMERALD, "&b人造绿宝石", "", "&r可以用来和村民交易"); + public static final ItemStack SYNTHETIC_SAPPHIRE = new SlimefunItemStack("SYNTHETIC_SAPPHIRE", "e35032f4d7d01de8ec99d89f8723012d4e74fa73022c4facf1b57c7ff6ff0", "&b人造蓝宝石", "", "&r可以在工作台中作为青金石使用"); public static final ItemStack CARBONADO = new SlimefunItemStack("CARBONADO", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTJmNGIxNTc3ZjUxNjBjNjg5MzE3MjU3MWM0YTcxZDhiMzIxY2RjZWFhMDMyYzZlMGUzYjYwZTBiMzI4ZmEifX19", "&b&l黑金刚石", "", "&7&o\"黑色钻石\""); public static final ItemStack RAW_CARBONADO = new SlimefunItemStack("RAW_CARBONADO", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWI0OWU2ZWMxMDc3MWU4OTkyMjVhZWE3M2NkOGNmMDM2ODRmNDExZDE0MTVjNzMyM2M5M2NiOTQ3NjIzMCJ9fX0=", "&b黑金刚石原矿"); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java index e917f1ec86..29c3a62d49 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java @@ -3,12 +3,15 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.UUID; import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.GameMode; +import org.bukkit.Keyed; +import org.bukkit.NamespacedKey; import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -17,10 +20,10 @@ import io.github.thebusybiscuit.slimefun4.api.events.ResearchUnlockEvent; import io.github.thebusybiscuit.slimefun4.core.SlimefunRegistry; import io.github.thebusybiscuit.slimefun4.core.guide.GuideSettings; +import io.github.thebusybiscuit.slimefun4.implementation.setup.ResearchSetup; import io.github.thebusybiscuit.slimefun4.utils.FireworkUtils; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Setup.ResearchSetup; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -31,367 +34,377 @@ * See {@link #Research(int, String, int)} to create a research. *

* See {@link ResearchSetup} for the built-in researches. - * + * * @author TheBusyBiscuit * @since 4.0 */ -public class Research { - - private static final int[] RESEARCH_PROGRESS = {23, 44, 57, 92}; - - private final int id; - private final List items; - private String name; - private int cost; - private boolean enabled; - - /** - * The constructor for a Research. - *

- * Create a new research by calling {@link #Research(int, String, int)}, then - * bind this research to the Slimefun items you want by calling - * {@link #addItems(SlimefunItem...)}. Once you're finished, call {@link #register()} - * to register it. - *

- * To speed up, directly setup the research by calling - * {@link Slimefun#registerResearch(Research, org.bukkit.inventory.ItemStack...)}. - * - * @param id Unique integer ID for this research, used for {@link #getByID(int)} and to - * register it in Researches.yml - * @param name Display name of the research - * @param cost Cost in XP levels to unlock the research - * - * @since 4.0 - */ - public Research(int id, String name, int cost) { - this.id = id; - this.name = name; - this.cost = cost; - this.items = new ArrayList<>(); - this.enabled = true; - } - - public boolean isEnabled() { - return SlimefunPlugin.getSettings().researchesEnabled && enabled; - } - - /** - * Gets the ID of the research. - * - * @return ID of the research - * - * @since 4.0 - */ - public int getID() { - return id; - } - - /** - * Gets the display name of the research. - * - * @return The display name of the research - * - * @since 4.0 - */ - public String getName() { - return name; - } - - /** - * Gets the cost in XP levels to unlock the research. - * - * @return The cost in XP levels of the research - * @since 4.1.10 - */ - public int getCost() { - return cost; - } - - /** - * Sets the cost in XP levels to unlock the research. - * - * @param cost Cost in XP levels - * - * @since 4.1.10 - */ - public void setCost(int cost) { - this.cost = cost; - } - - /** - * Bind the specified Slimefun items to the research. - * - * @param items {@link SlimefunItem} to bind to the research - * - * @since 4.0 - */ - public void addItems(SlimefunItem... items) { - for (SlimefunItem item: items) { - if (item != null) item.bindToResearch(this); - } - } - - /** - * Gets the list of the Slimefun items bound to the research. - * - * @return the Slimefun items bound to the research - * - * @since 4.0 - */ - public List getAffectedItems() { - return items; - } - - /** - * Convenience method to check if the player unlocked this research. - * - * @param p Player to check - * @return true if he unlocked the research, otherwise false - * - * @since 4.0 - * @see #hasUnlocked(UUID) - */ - @Deprecated - public boolean hasUnlocked(Player p) { - return hasUnlocked(p.getUniqueId()); - } - - /** - * Checks if the player unlocked this research. - * - * @param uuid UUID of the player to check - * @return true if he unlocked the research, otherwise false - * - * @since 4.0 - * @see #hasUnlocked(Player) - */ - @Deprecated - public boolean hasUnlocked(UUID uuid) { - return PlayerProfile.fromUUID(uuid).hasUnlocked(this); - } - - /** - * Checks if the player can unlock this research. - * - * @param p Player to check - * @return true if he can unlock the research, otherwise false - * - * @since 4.1.10 - */ - public boolean canUnlock(Player p) { - if (!isEnabled()) return true; - return (p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative) || p.getLevel() >= this.cost; - } - - /** - * Locks the research for the specified player. - * - * @param p Player to lock the research - * - * @since 4.0 - */ - @Deprecated - public void lock(Player p) { - PlayerProfile.get(p).setResearched(this, false); - SlimefunPlugin.getLocal().sendMessage(p, "commands.research.reset-target", true); - } - - /** - * Unlocks the research for the specified player. - * - * @param p Player to unlock the research - * @param instant Whether to unlock the research instantly - * - * @since 4.0 - */ - public void unlock(final Player p, boolean instant) { - if (!instant) { - Slimefun.runSync(() -> { - p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); - SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName()).replace("%progress%", "0%")); - }, 10L); - } - - PlayerProfile.get(p, profile -> { - if (!profile.hasUnlocked(this)) { - Runnable runnable = () -> { - profile.setResearched(this, true); - SlimefunPlugin.getLocal().sendMessage(p, "messages.unlocked", true, msg -> msg.replace("%research%", getName())); - - if (SlimefunPlugin.getSettings().researchFireworksEnabled && (!PersistentDataAPI.hasByte(p, GuideSettings.FIREWORKS_KEY) || PersistentDataAPI.getByte(p, GuideSettings.FIREWORKS_KEY) == (byte) 1)) { - FireworkUtils.launchRandom(p, 1); - } - }; - - Slimefun.runSync(() -> { - ResearchUnlockEvent event = new ResearchUnlockEvent(p, this); - Bukkit.getPluginManager().callEvent(event); - - if (!event.isCancelled()) { - if (instant) { - runnable.run(); - } - else if (SlimefunPlugin.getRegistry().getCurrentlyResearchingPlayers().add(p.getUniqueId())) { - SlimefunPlugin.getLocal().sendMessage(p, "messages.research.start", true, msg -> msg.replace("%research%", getName())); - - for (int i = 1; i < RESEARCH_PROGRESS.length + 1; i++) { - int j = i; - - Slimefun.runSync(() -> { - p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); - SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName()).replace("%progress%", RESEARCH_PROGRESS[j - 1] + "%")); - }, i * 20L); - } - - Slimefun.runSync(() -> { - runnable.run(); - SlimefunPlugin.getRegistry().getCurrentlyResearchingPlayers().remove(p.getUniqueId()); - }, (RESEARCH_PROGRESS.length + 1) * 20L); - } - } - }); - } - }); - } - - /** - * Registers the research. - * - * @since 4.0 - */ - public void register() { - SlimefunPlugin.getResearchCfg().setDefaultValue("enable-researching", true); - - if (SlimefunPlugin.getResearchCfg().contains(this.getID() + ".enabled") && !SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled")) { - Iterator iterator = items.iterator(); - while (iterator.hasNext()) { - SlimefunItem item = iterator.next(); - if (item != null) item.bindToResearch(null); - iterator.remove(); - } - return; - } - - SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".name", this.getName()); - SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost()); - SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true); - - this.name = SlimefunPlugin.getResearchCfg().getString(this.getID() + ".name"); - this.cost = SlimefunPlugin.getResearchCfg().getInt(this.getID() + ".cost"); - this.enabled = SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled"); - - SlimefunPlugin.getRegistry().getResearches().add(this); - if (SlimefunPlugin.getSettings().printOutLoading) { - Slimefun.getLogger().log(Level.INFO, "Loaded Research \"" + this.getName() + "\""); - } - } - - /** - * Gets the list of all registered researches. - * - * @return The list of registered researches - * - * @deprecated Use {@link SlimefunRegistry#getResearches()} - * - * @since 4.0 - * @see ResearchSetup - */ - @Deprecated - public static List list() { - return SlimefunPlugin.getRegistry().getResearches(); - } - - /** - * Gets if the specified player is currently unlocking a research. - * - * @param p Player to check - * @return true if the player is unlocking a research, otherwise false - * - * @since 4.0 - */ - public static boolean isResearching(Player p) { - return SlimefunPlugin.getRegistry().getCurrentlyResearchingPlayers().contains(p.getUniqueId()); - } - - /** - * Sends the research statistics and title of the specified player to the command sender. - * - * @param sender CommandSender to send the statistics - * @param p Player to get the statistics - * - * @since 4.0 - * @see #getTitle(Player, List) - */ - @Deprecated - public static void sendStats(CommandSender sender, Player p) { - PlayerProfile.get(p).sendStats(sender); - } - - /** - * Gets the title of the specified player. - * - * @param p Player to get the rank - * @param researched List of the player's unlocked researches - * @return the title of the specified player - * - * @since 4.0 - * @see #sendStats(CommandSender, Player) - */ - @Deprecated - public static String getTitle(Player p, Collection researched) { - return PlayerProfile.get(p).getTitle(); - } - - /** - * Attempts to get the research with the given ID. - * - * @param id ID of the research to get - * @return Research if found, or null - * - * @since 4.0 - */ - public static Research getByID(int id) { - for (Research research : list()) { - if (research.getID() == id) return research; - } - return null; - } - - /** - * Gets the list of unlocked researches for a player using his UUID. - * - * @param uuid UUID of the player - * @return the list of unlocked researches for the player - * - * @since 4.0 - * @see #getResearches(String) - */ - @Deprecated - public static List getResearches(UUID uuid) { - List researched = new ArrayList<>(); - for (Research research : list()) { - if (research.hasUnlocked(uuid)) researched.add(research); - } - return researched; - } - - /** - * Convenience method to get the list of unlocked researches - * for a player using his UUID (specified as a String). - * - * @param uuid String representing the UUID of the player - * @return the list of unlocked researches for the player - * - * @since 4.0 - * @see #getResearches(UUID) - */ - @Deprecated - public static List getResearches(String uuid) { - return getResearches(UUID.fromString(uuid)); - } - - @Override - public String toString() { - return "Research {" + id + ',' + name + "}"; - } +public class Research implements Keyed { + + private static final int[] RESEARCH_PROGRESS = {23, 44, 57, 92}; + + private final NamespacedKey key; + private final int id; + private String name; + private int cost; + + private final List items = new LinkedList<>(); + private boolean enabled = true; + + /** + * The constructor for a Research. + *

+ * Create a new research by calling {@link #Research(int, String, int)}, then + * bind this research to the Slimefun items you want by calling + * {@link #addItems(SlimefunItem...)}. Once you're finished, call {@link #register()} + * to register it. + *

+ * To speed up, directly setup the research by calling + * {@link Slimefun#registerResearch(Research, org.bukkit.inventory.ItemStack...)}. + * + * @deprecated Use the constuctor with {@link NamespacedKey} instead + * + * @param id Unique integer ID for this research, used for {@link #getByID(int)} and to + * register it in Researches.yml + * @param name Display name of the research + * @param cost Cost in XP levels to unlock the research + * + * @since 4.0 + */ + @Deprecated + public Research(int id, String name, int cost) { + this.id = id; + this.name = name; + this.cost = cost; + + this.key = new NamespacedKey(SlimefunPlugin.instance, name.replace(' ', '_')); + } + + public Research(NamespacedKey key, int id, String name, int defaultCost) { + this.key = key; + this.id = id; + this.name = name; + this.cost = defaultCost; + } + + @Override + public NamespacedKey getKey() { + return key; + } + + public boolean isEnabled() { + return SlimefunPlugin.getSettings().researchesEnabled && enabled; + } + + /** + * Gets the ID of the research. + * + * @return ID of the research + * + * @since 4.0 + */ + public int getID() { + return id; + } + + /** + * Gets the display name of the research. + * + * @deprecated Use {@link Research#getName(Player)} instead. It is localized. + * + * @return The display name of the research + * + * @since 4.0 + */ + @Deprecated + public String getName() { + return name; + } + + public String getName(Player p) { + String localized = SlimefunPlugin.getLocal().getResearchName(p, key); + return localized != null ? localized: name; + } + + /** + * Gets the cost in XP levels to unlock the research. + * + * @return The cost in XP levels of the research + * @since 4.1.10 + */ + public int getCost() { + return cost; + } + + /** + * Sets the cost in XP levels to unlock the research. + * + * @param cost Cost in XP levels + * + * @since 4.1.10 + */ + public void setCost(int cost) { + this.cost = cost; + } + + /** + * Bind the specified Slimefun items to the research. + * + * @param items {@link SlimefunItem} to bind to the research + * + * @since 4.0 + */ + public void addItems(SlimefunItem... items) { + for (SlimefunItem item : items) { + if (item != null) item.bindToResearch(this); + } + } + + /** + * Gets the list of the Slimefun items bound to the research. + * + * @return the Slimefun items bound to the research + * + * @since 4.0 + */ + public List getAffectedItems() { + return items; + } + + /** + * Convenience method to check if the player unlocked this research. + * + * @param p Player to check + * @return true if he unlocked the research, otherwise false + * + * @since 4.0 + * @see #hasUnlocked(UUID) + */ + @Deprecated + public boolean hasUnlocked(Player p) { + return hasUnlocked(p.getUniqueId()); + } + + /** + * Checks if the player unlocked this research. + * + * @param uuid UUID of the player to check + * @return true if he unlocked the research, otherwise false + * + * @since 4.0 + * @see #hasUnlocked(Player) + */ + @Deprecated + public boolean hasUnlocked(UUID uuid) { + return PlayerProfile.fromUUID(uuid).hasUnlocked(this); + } + + /** + * Checks if the player can unlock this research. + * + * @param p Player to check + * @return true if he can unlock the research, otherwise false + * + * @since 4.1.10 + */ + public boolean canUnlock(Player p) { + if (!isEnabled()) return true; + return (p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative) || p.getLevel() >= this.cost; + } + + /** + * Locks the research for the specified player. + * + * @param p Player to lock the research + * + * @since 4.0 + */ + @Deprecated + public void lock(Player p) { + PlayerProfile.get(p).setResearched(this, false); + SlimefunPlugin.getLocal().sendMessage(p, "commands.research.reset-target", true); + } + + /** + * Unlocks the research for the specified player. + * + * @param p Player to unlock the research + * @param instant Whether to unlock the research instantly + * + * @since 4.0 + */ + public void unlock(final Player p, boolean instant) { + if (!instant) { + Slimefun.runSync(() -> { + p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); + SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName(p)).replace("%progress%", "0%")); + }, 10L); + } + + PlayerProfile.get(p, profile -> { + if (!profile.hasUnlocked(this)) { + Runnable runnable = () -> { + profile.setResearched(this, true); + SlimefunPlugin.getLocal().sendMessage(p, "messages.unlocked", true, msg -> msg.replace("%research%", getName(p))); + + if (SlimefunPlugin.getSettings().researchFireworksEnabled && (!PersistentDataAPI.hasByte(p, GuideSettings.FIREWORKS_KEY) || PersistentDataAPI.getByte(p, GuideSettings.FIREWORKS_KEY) == (byte) 1)) { + FireworkUtils.launchRandom(p, 1); + } + }; + + Slimefun.runSync(() -> { + ResearchUnlockEvent event = new ResearchUnlockEvent(p, this); + Bukkit.getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + if (instant) { + runnable.run(); + } + else if (SlimefunPlugin.getRegistry().getCurrentlyResearchingPlayers().add(p.getUniqueId())) { + SlimefunPlugin.getLocal().sendMessage(p, "messages.research.start", true, msg -> msg.replace("%research%", getName(p))); + + for (int i = 1; i < RESEARCH_PROGRESS.length + 1; i++) { + int j = i; + + Slimefun.runSync(() -> { + p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); + SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName(p)).replace("%progress%", RESEARCH_PROGRESS[j - 1] + "%")); + }, i * 20L); + } + + Slimefun.runSync(() -> { + runnable.run(); + SlimefunPlugin.getRegistry().getCurrentlyResearchingPlayers().remove(p.getUniqueId()); + }, (RESEARCH_PROGRESS.length + 1) * 20L); + } + } + }); + } + }); + } + + /** + * Registers the research. + * + * @since 4.0 + */ + public void register() { + SlimefunPlugin.getResearchCfg().setDefaultValue("enable-researching", true); + + if (SlimefunPlugin.getResearchCfg().contains(this.getID() + ".enabled") && !SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled")) { + Iterator iterator = items.iterator(); + while (iterator.hasNext()) { + SlimefunItem item = iterator.next(); + if (item != null) item.bindToResearch(null); + iterator.remove(); + } + return; + } + + SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost()); + SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true); + + this.cost = SlimefunPlugin.getResearchCfg().getInt(this.getID() + ".cost"); + this.enabled = SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled"); + + SlimefunPlugin.getRegistry().getResearches().add(this); + SlimefunPlugin.getRegistry().getResearchIds().add(this); + + if (SlimefunPlugin.getSettings().printOutLoading) { + Slimefun.getLogger().log(Level.INFO, "Loaded Research \"{0}\"", name); + } + } + + /** + * Gets the list of all registered researches. + * + * @return The list of registered researches + * + * @deprecated Use {@link SlimefunRegistry#getResearches()} + * + * @since 4.0 + * @see ResearchSetup + */ + @Deprecated + public static List list() { + return SlimefunPlugin.getRegistry().getResearches(); + } + + /** + * Gets if the specified player is currently unlocking a research. + * + * @param p Player to check + * @return true if the player is unlocking a research, otherwise false + * + * @since 4.0 + */ + public static boolean isResearching(Player p) { + return SlimefunPlugin.getRegistry().getCurrentlyResearchingPlayers().contains(p.getUniqueId()); + } + + /** + * Sends the research statistics and title of the specified player to the command sender. + * + * @param sender CommandSender to send the statistics + * @param p Player to get the statistics + * + * @since 4.0 + * @see #getTitle(Player, List) + */ + @Deprecated + public static void sendStats(CommandSender sender, Player p) { + PlayerProfile.get(p).sendStats(sender); + } + + /** + * Gets the title of the specified player. + * + * @param p Player to get the rank + * @param researched List of the player's unlocked researches + * @return the title of the specified player + * + * @since 4.0 + * @see #sendStats(CommandSender, Player) + */ + @Deprecated + public static String getTitle(Player p, Collection researched) { + return PlayerProfile.get(p).getTitle(); + } + + /** + * Attempts to get the research with the given ID. + * + * @param id ID of the research to get + * @return Research if found, or null + * + * @since 4.0 + */ + public static Research getByID(int id) { + for (Research research : list()) { + if (research.getID() == id) return research; + } + return null; + } + + /** + * Gets the list of unlocked researches for a player using his UUID. + * + * @param uuid UUID of the player + * @return the list of unlocked researches for the player + * + * @since 4.0 + * @see #getResearches(UUID) + */ + @Deprecated + public static List getResearches(UUID uuid) { + List researched = new ArrayList<>(); + for (Research research : list()) { + if (research.hasUnlocked(uuid)) researched.add(research); + } + return researched; + } + + @Override + public String toString() { + return "Research {" + id + ',' + name + "}"; + } } \ No newline at end of file diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java index 68eb6d083e..451b9939b0 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/XPCollector.java @@ -2,6 +2,7 @@ import java.util.Iterator; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -108,9 +109,9 @@ protected void tick(Block b) { BlockMenu menu = BlockStorage.getInventory(b); for (int level = 0; level < getEXP(b); level = level + 10) { - if (menu.fits(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), getOutputSlots())) { + if (menu.fits(SlimefunItems.FILLED_FLASK_OF_KNOWLEDGE, getOutputSlots())) { withdrawn = withdrawn + 10; - menu.pushItem(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"), getOutputSlots()); + menu.pushItem(SlimefunItems.FILLED_FLASK_OF_KNOWLEDGE, getOutputSlots()); } } BlockStorage.addBlockInfo(b, "stored-exp", String.valueOf(xp - withdrawn)); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Smeltery.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Smeltery.java index 04d547651c..bc96be4cf4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Smeltery.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/multiblocks/Smeltery.java @@ -30,6 +30,7 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; public class Smeltery extends MultiBlockMachine { + private int fireBreakingChance; public Smeltery() { super( @@ -44,7 +45,14 @@ SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT) new String[] {"chance.fireBreak"}, new Integer[] {34} ); } - + + @Override + public void postRegister() { + super.postRegister(); + + fireBreakingChance = (int) Slimefun.getItemValue(getID(), "chance.fireBreak"); + } + @Override public List getDisplayRecipes() { List items = new ArrayList<>(); @@ -87,7 +95,7 @@ public void onInteract(Player p, Block b) { Hopper chamber = findHopper(dispBlock, BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST); - if (ThreadLocalRandom.current().nextInt(100) < SlimefunPlugin.getSettings().smelteryFireBreakChance) { + if (ThreadLocalRandom.current().nextInt(100) < fireBreakingChance) { if (chamber != null) { if (chamber.getInventory().contains(Material.FLINT_AND_STEEL)) { ItemStack item = chamber.getInventory().getItem(chamber.getInventory().first(Material.FLINT_AND_STEEL)); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java deleted file mode 100644 index 98963d6971..0000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java +++ /dev/null @@ -1,255 +0,0 @@ -package me.mrCookieSlime.Slimefun.Setup; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.logging.Level; -import java.util.stream.Stream; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.command.CommandSender; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemStack; - -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer.ItemFlag; -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.machines.electric.AutomatedCraftingChamber; -import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.api.SlimefunRecipes; -import me.mrCookieSlime.Slimefun.utils.ConfigCache; - -public final class MiscSetup { - - private MiscSetup() {} - - public static void setupMisc() { - SlimefunItem talisman = SlimefunItem.getByID("COMMON_TALISMAN"); - if (talisman != null && (boolean) Slimefun.getItemValue(talisman.getID(), "recipe-requires-nether-stars")) { - talisman.setRecipe(new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.NETHER_STAR), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}); - } - - SlimefunItem.setRadioactive(SlimefunItems.URANIUM); - SlimefunItem.setRadioactive(SlimefunItems.SMALL_URANIUM); - SlimefunItem.setRadioactive(SlimefunItems.BLISTERING_INGOT); - SlimefunItem.setRadioactive(SlimefunItems.BLISTERING_INGOT_2); - SlimefunItem.setRadioactive(SlimefunItems.BLISTERING_INGOT_3); - SlimefunItem.setRadioactive(SlimefunItems.NETHER_ICE); - SlimefunItem.setRadioactive(SlimefunItems.ENRICHED_NETHER_ICE); - } - - public static void loadItems(ConfigCache settings) { - Iterator iterator = SlimefunPlugin.getRegistry().getEnabledSlimefunItems().iterator(); - - while (iterator.hasNext()) { - SlimefunItem item = iterator.next(); - - if (item == null) { - Slimefun.getLogger().log(Level.WARNING, "Removed bugged Item ('NULL?')"); - iterator.remove(); - } - else if (item.getItem() == null) { - Slimefun.getLogger().log(Level.WARNING, "Removed bugged Item ('" + item.getID() + "')"); - iterator.remove(); - } - } - - List pre = new ArrayList<>(); - List init = new ArrayList<>(); - List post = new ArrayList<>(); - - for (SlimefunItem item : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { - if (item instanceof Alloy || item instanceof ReplacingAlloy) pre.add(item); - else if (item instanceof SlimefunMachine) init.add(item); - else post.add(item); - } - - for (SlimefunItem item : pre) { - item.load(); - } - for (SlimefunItem item : init) { - item.load(); - } - for (SlimefunItem item : post) { - item.load(); - } - - 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)) { - StringBuilder builder = new StringBuilder(); - int i = 0; - - for (ItemStack item : inputs) { - if (i > 0) { - builder.append(" "); - } - - builder.append(CustomItemSerializer.serialize(item, ItemFlag.MATERIAL, ItemFlag.ITEMMETA_DISPLAY_NAME, ItemFlag.ITEMMETA_LORE)); - - i++; - } - - SlimefunPlugin.getRegistry().getAutomatedCraftingChamberRecipes().put(builder.toString(), RecipeType.getRecipeOutputList(machine, inputs)); - } - - } - - List grinderRecipes = new ArrayList<>(); - - SlimefunItem grinder = SlimefunItem.getByID("GRIND_STONE"); - if (grinder != null) { - ItemStack[] input = null; - - for (ItemStack[] recipe : ((SlimefunMachine) grinder).getRecipes()) { - if (input == null) { - input = recipe; - } - else { - if (input[0] != null && recipe[0] != null) { - grinderRecipes.add(new ItemStack[] {input[0], recipe[0]}); - } - input = null; - } - } - } - - SlimefunItem crusher = SlimefunItem.getByID("ORE_CRUSHER"); - if (crusher != null) { - ItemStack[] input = null; - - for (ItemStack[] recipe : ((SlimefunMachine) crusher).getRecipes()) { - if (input == null) { - input = recipe; - } - else { - if (input[0] != null && recipe[0] != null) { - grinderRecipes.add(new ItemStack[] {input[0], recipe[0]}); - } - input = null; - } - } - } - - // Favour 8 Cobblestone -> 1 Sand Recipe over 1 Cobblestone -> 1 Gravel Recipe - Stream stream = grinderRecipes.stream(); - - if (!settings.legacyOreGrinder) { - 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]})); - - SlimefunItem smeltery = SlimefunItem.getByID("SMELTERY"); - if (smeltery != null) { - ItemStack[] input = null; - - for (ItemStack[] recipe : ((SlimefunMachine) smeltery).getRecipes()) { - if (input == null) { - input = recipe; - } - else { - if (input[0] != null && recipe[0] != null) { - List inputs = new ArrayList<>(); - boolean dust = false; - - for (ItemStack item : input) { - if (item != null) { - inputs.add(item); - if (SlimefunManager.isItemSimilar(item, SlimefunItems.ALUMINUM_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.COPPER_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.GOLD_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.IRON_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.LEAD_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.MAGNESIUM_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.SILVER_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.TIN_DUST, true)) dust = true; - if (SlimefunManager.isItemSimilar(item, SlimefunItems.ZINC_DUST, true)) dust = true; - } - } - - // 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]}); - } - } - - input = null; - } - } - } - - CommandSender sender = Bukkit.getConsoleSender(); - - for (PostSlimefunLoadingHandler handler : SlimefunPlugin.getRegistry().getPostHandlers()) { - handler.run(pre, init, post); - } - - int total = SlimefunPlugin.getRegistry().getEnabledSlimefunItems().size(); - int vanilla = SlimefunPlugin.getRegistry().countVanillaItems(); - - sender.sendMessage(""); - sender.sendMessage(ChatColor.GREEN + "######################### - Slimefun v" + SlimefunPlugin.getVersion() + " - #########################"); - sender.sendMessage(""); - sender.sendMessage(ChatColor.GREEN + "Successfully loaded " + total + " Items (" + SlimefunPlugin.getRegistry().getResearches().size() + " Researches)"); - sender.sendMessage(ChatColor.GREEN + "( " + vanilla + " Items from Slimefun, " + (total - vanilla) + " Items from " + SlimefunPlugin.getInstalledAddons().size() + " Addons )"); - sender.sendMessage(""); - sender.sendMessage(ChatColor.GREEN + "Slimefun is an Open-Source project that is maintained by community developers!"); - sender.sendMessage(""); - sender.sendMessage(ChatColor.GREEN + " -- Source Code: https://github.com/TheBusyBiscuit/Slimefun4"); - sender.sendMessage(ChatColor.GREEN + " -- Wiki: https://github.com/TheBusyBiscuit/Slimefun4/wiki"); - sender.sendMessage(ChatColor.GREEN + " -- Bug Reports: https://github.com/TheBusyBiscuit/Slimefun4/issues"); - sender.sendMessage(ChatColor.GREEN + " -- Discord: https://discord.gg/fsD4Bkh"); - sender.sendMessage(""); - - SlimefunPlugin.getItemCfg().save(); - SlimefunPlugin.getResearchCfg().save(); - SlimefunPlugin.getWhitelist().save(); - } - - public static void setupItemSettings() { - for (World world : Bukkit.getWorlds()) { - SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled-items.SLIMEFUN_GUIDE", true); - } - - Slimefun.setItemVariable("ORE_CRUSHER", "double-ores", true); - - for (Enchantment enchantment : Enchantment.values()) { - for (int i = 1; i <= enchantment.getMaxLevel(); i++) { - Slimefun.setItemVariable("MAGICIAN_TALISMAN", "allow-enchantments." + enchantment.getKey().getKey() + ".level." + i, true); - } - } - } -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/PostSlimefunLoadingHandler.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/PostSlimefunLoadingHandler.java deleted file mode 100644 index 69a0b9ccd3..0000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/PostSlimefunLoadingHandler.java +++ /dev/null @@ -1,13 +0,0 @@ -package me.mrCookieSlime.Slimefun.Setup; - -import java.util.List; - -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; - -@Deprecated -@FunctionalInterface -public interface PostSlimefunLoadingHandler { - - public void run(List preloaded, List loaded, List postloaded); - -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java deleted file mode 100644 index 543a5f3cbb..0000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ /dev/null @@ -1,253 +0,0 @@ -package me.mrCookieSlime.Slimefun.Setup; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - -import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; -import me.mrCookieSlime.Slimefun.Objects.Research; -import me.mrCookieSlime.Slimefun.api.Slimefun; - -public final class ResearchSetup { - - private ResearchSetup() {} - - public static void setupResearches() { - Slimefun.registerResearch(new Research(0, "Walking Sticks", 1), SlimefunItems.GRANDMAS_WALKING_STICK, SlimefunItems.GRANDPAS_WALKING_STICK); - Slimefun.registerResearch(new Research(1, "Portable Crafter", 1), SlimefunItems.PORTABLE_CRAFTER); - Slimefun.registerResearch(new Research(2, "Fortune Cookie", 1), SlimefunItems.FORTUNE_COOKIE); - Slimefun.registerResearch(new Research(4, "Portable Dustbin", 2), SlimefunItems.PORTABLE_DUSTBIN); - Slimefun.registerResearch(new Research(5, "Jerkys", 2), SlimefunItems.BEEF_JERKY, SlimefunItems.FISH_JERKY, SlimefunItems.RABBIT_JERKY, SlimefunItems.MUTTON_JERKY, SlimefunItems.CHICKEN_JERKY, SlimefunItems.PORK_JERKY); - Slimefun.registerResearch(new Research(6, "Armor Crafting", 2), SlimefunItems.ARMOR_FORGE); - Slimefun.registerResearch(new Research(8, "Lumps and Magic", 3), SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_3); - Slimefun.registerResearch(new Research(9, "Ender Backpack", 4), SlimefunItems.ENDER_BACKPACK); - Slimefun.registerResearch(new Research(7, "Glowstone Armor", 3), SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS); - Slimefun.registerResearch(new Research(10, "Ender Armor", 4), SlimefunItems.ENDER_HELMET, SlimefunItems.ENDER_CHESTPLATE, SlimefunItems.ENDER_LEGGINGS, SlimefunItems.ENDER_BOOTS); - Slimefun.registerResearch(new Research(11, "Magic Eye of Ender", 4), SlimefunItems.MAGIC_EYE_OF_ENDER); - Slimefun.registerResearch(new Research(12, "Magic Sugar", 4), SlimefunItems.MAGIC_SUGAR); - Slimefun.registerResearch(new Research(13, "Monster Jerky", 5), SlimefunItems.MONSTER_JERKY); - Slimefun.registerResearch(new Research(14, "Slime Armor", 5), SlimefunItems.SLIME_HELMET, SlimefunItems.SLIME_CHESTPLATE, SlimefunItems.SLIME_LEGGINGS, SlimefunItems.SLIME_BOOTS); - Slimefun.registerResearch(new Research(15, "Sword of Beheading", 6), SlimefunItems.SWORD_OF_BEHEADING); - Slimefun.registerResearch(new Research(16, "Electric Work", 8), SlimefunItems.BASIC_CIRCUIT_BOARD); - Slimefun.registerResearch(new Research(17, "Advanced Electricity", 9), SlimefunItems.ADVANCED_CIRCUIT_BOARD); - Slimefun.registerResearch(new Research(18, "Hot Smelting", 10), SlimefunItems.SMELTERY); - Slimefun.registerResearch(new Research(19, "Steel Age", 11), SlimefunItems.STEEL_INGOT); - Slimefun.registerResearch(new Research(20, "Important Power-Related Items", 12), SlimefunItems.SULFATE, SlimefunItems.POWER_CRYSTAL); - Slimefun.registerResearch(new Research(21, "Your first Battery", 10), SlimefunItems.BATTERY); - Slimefun.registerResearch(new Research(22, "Steel Plating", 14), SlimefunItems.STEEL_PLATE); - Slimefun.registerResearch(new Research(23, "Steel Thruster", 14), SlimefunItems.STEEL_THRUSTER); - Slimefun.registerResearch(new Research(24, "Parachute", 15), SlimefunItems.PARACHUTE); - Slimefun.registerResearch(new Research(25, "Grappling Hook", 15), SlimefunItems.GRAPPLING_HOOK, SlimefunItems.HOOK, SlimefunItems.CHAIN); - Slimefun.registerResearch(new Research(26, "Jetpacks", 22), SlimefunItems.DURALUMIN_JETPACK, SlimefunItems.BILLON_JETPACK, SlimefunItems.SOLDER_JETPACK, SlimefunItems.STEEL_JETPACK, SlimefunItems.DAMASCUS_STEEL_JETPACK, SlimefunItems.REINFORCED_ALLOY_JETPACK); - Slimefun.registerResearch(new Research(27, "Multi Tools", 18), SlimefunItems.DURALUMIN_MULTI_TOOL, SlimefunItems.SOLDER_MULTI_TOOL, SlimefunItems.BILLON_MULTI_TOOL, SlimefunItems.STEEL_MULTI_TOOL, SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL, SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL); - Slimefun.registerResearch(new Research(28, "Solar Power", 17), SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_HELMET); - Slimefun.registerResearch(new Research(29, "Elemental Staves", 17), SlimefunItems.STAFF_ELEMENTAL); - Slimefun.registerResearch(new Research(30, "Grind Stone", 4), SlimefunItems.GRIND_STONE); - Slimefun.registerResearch(new Research(31, "Cactus Suit", 5), SlimefunItems.CACTUS_BOOTS, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_LEGGINGS); - Slimefun.registerResearch(new Research(32, "Gold Pan", 5), SlimefunItems.GOLD_PAN); - Slimefun.registerResearch(new Research(33, "Magical Book Binding", 5), SlimefunItems.MAGICAL_BOOK_COVER); - Slimefun.registerResearch(new Research(34, "New Metals", 6), SlimefunItems.COPPER_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.MAGNESIUM_INGOT); - Slimefun.registerResearch(new Research(35, "Ore Doubling", 6), SlimefunItems.ORE_CRUSHER); - Slimefun.registerResearch(new Research(36, "Bronze Creation", 8), SlimefunItems.BRONZE_INGOT); - Slimefun.registerResearch(new Research(37, "Advanced Alloys", 12), SlimefunItems.BILLON_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BRASS_INGOT); - Slimefun.registerResearch(new Research(38, "Carbon Creation", 9), SlimefunItems.COMPRESSOR, SlimefunItems.CARBON); - Slimefun.registerResearch(new Research(39, "Bakery Innovation", 1), SlimefunItems.WHEAT_FLOUR); - Slimefun.registerResearch(new Research(40, "Gilded Iron Armor", 16), SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS); - Slimefun.registerResearch(new Research(41, "Synthetic Diamonds", 10), SlimefunItems.COMPRESSED_CARBON, SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND); - Slimefun.registerResearch(new Research(42, "Pressure Chamber", 14), SlimefunItems.PRESSURE_CHAMBER); - Slimefun.registerResearch(new Research(43, "Synthetic Sapphires", 16), SlimefunItems.SYNTHETIC_SAPPHIRE); - Slimefun.registerResearch(new Research(45, "Damascus Steel", 17), SlimefunItems.DAMASCUS_STEEL_INGOT); - Slimefun.registerResearch(new Research(46, "Damascus Steel Armor", 18), SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS); - Slimefun.registerResearch(new Research(47, "Reinforced Alloy", 22), SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT); - Slimefun.registerResearch(new Research(48, "Black Diamonds", 26), SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO); - Slimefun.registerResearch(new Research(50, "Magic Workbench", 12), SlimefunItems.MAGIC_WORKBENCH); - Slimefun.registerResearch(new Research(51, "Wind Staff", 17), SlimefunItems.STAFF_WIND); - Slimefun.registerResearch(new Research(52, "Reinforced Armor", 26), SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS); - Slimefun.registerResearch(new Research(53, "Ore Washer", 5), SlimefunItems.ORE_WASHER, SlimefunItems.STONE_CHUNK, SlimefunItems.SIFTED_ORE); - Slimefun.registerResearch(new Research(54, "Pure Gold", 7), SlimefunItems.GOLD_4K, SlimefunItems.GOLD_6K, SlimefunItems.GOLD_8K, SlimefunItems.GOLD_10K, SlimefunItems.GOLD_12K, SlimefunItems.GOLD_14K, SlimefunItems.GOLD_16K, SlimefunItems.GOLD_18K, SlimefunItems.GOLD_20K, SlimefunItems.GOLD_22K, SlimefunItems.GOLD_24K); - Slimefun.registerResearch(new Research(55, "Silicon Valley", 12), SlimefunItems.SILICON, SlimefunItems.FERROSILICON); - Slimefun.registerResearch(new Research(56, "Fire Staff", 2), SlimefunItems.STAFF_FIRE); - Slimefun.registerResearch(new Research(57, "Smelters Pickaxe", 17), SlimefunItems.AUTO_SMELT_PICKAXE); - Slimefun.registerResearch(new Research(58, "Common Talisman", 14), SlimefunItems.TALISMAN); - Slimefun.registerResearch(new Research(59, "Talisman of the Anvil", 18), SlimefunItems.TALISMAN_ANVIL); - Slimefun.registerResearch(new Research(60, "Talisman of the Miner", 18), SlimefunItems.TALISMAN_MINER); - Slimefun.registerResearch(new Research(61, "Talisman of the Hunter", 18), SlimefunItems.TALISMAN_HUNTER); - Slimefun.registerResearch(new Research(62, "Talisman of the Lava Walker", 18), SlimefunItems.TALISMAN_LAVA); - Slimefun.registerResearch(new Research(63, "Talisman of the Water Breather", 18), SlimefunItems.TALISMAN_WATER); - Slimefun.registerResearch(new Research(64, "Talisman of the Angel", 18), SlimefunItems.TALISMAN_ANGEL); - Slimefun.registerResearch(new Research(65, "Talisman of the Firefighter", 18), SlimefunItems.TALISMAN_FIRE); - Slimefun.registerResearch(new Research(67, "Firey Situation", 14), SlimefunItems.LAVA_CRYSTAL); - Slimefun.registerResearch(new Research(68, "Talisman of the Magician", 20), SlimefunItems.TALISMAN_MAGICIAN); - Slimefun.registerResearch(new Research(69, "Talisman of the Traveller", 20), SlimefunItems.TALISMAN_TRAVELLER); - Slimefun.registerResearch(new Research(70, "Talisman of the Warrior", 20), SlimefunItems.TALISMAN_WARRIOR); - Slimefun.registerResearch(new Research(71, "Talisman of the Knight", 20), SlimefunItems.TALISMAN_KNIGHT); - Slimefun.registerResearch(new Research(72, "Shiny Iron", 11), SlimefunItems.GILDED_IRON); - Slimefun.registerResearch(new Research(73, "Fake Gem", 17), SlimefunItems.SYNTHETIC_EMERALD); - Slimefun.registerResearch(new Research(74, "Chainmail Armor", 8), new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)); - Slimefun.registerResearch(new Research(75, "Talisman of the Whirlwind", 19), SlimefunItems.TALISMAN_WHIRLWIND); - Slimefun.registerResearch(new Research(76, "Talisman of the Wizard", 22), SlimefunItems.TALISMAN_WIZARD); - Slimefun.registerResearch(new Research(77, "Lumber Axe", 21), SlimefunItems.LUMBER_AXE); - Slimefun.registerResearch(new Research(79, "Hazmat Suit", 21), SlimefunItems.SCUBA_HELMET, SlimefunItems.HAZMATSUIT_CHESTPLATE, SlimefunItems.HAZMATSUIT_LEGGINGS, SlimefunItems.RUBBER_BOOTS); - Slimefun.registerResearch(new Research(80, "Radioactive", 30), SlimefunItems.TINY_URANIUM, SlimefunItems.SMALL_URANIUM, SlimefunItems.URANIUM); - Slimefun.registerResearch(new Research(81, "Ore Purification", 25), SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER); - Slimefun.registerResearch(new Research(84, "Redstone Alloy", 16), SlimefunItems.REDSTONE_ALLOY); - Slimefun.registerResearch(new Research(85, "Top Tier Machines", 24), SlimefunItems.CARBONADO_MULTI_TOOL, SlimefunItems.CARBONADO_JETPACK, SlimefunItems.CARBONADO_JETBOOTS); - Slimefun.registerResearch(new Research(86, "First Aid", 2), SlimefunItems.CLOTH, SlimefunItems.RAG, SlimefunItems.BANDAGE, SlimefunItems.SPLINT, SlimefunItems.CAN, SlimefunItems.VITAMINS, SlimefunItems.MEDICINE); - Slimefun.registerResearch(new Research(87, "Shiny Armor", 13), SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS); - Slimefun.registerResearch(new Research(89, "Night Vision Goggles", 10), SlimefunItems.NIGHT_VISION_GOGGLES); - Slimefun.registerResearch(new Research(90, "Pickaxe of Containment", 14), SlimefunItems.PICKAXE_OF_CONTAINMENT, SlimefunItems.BROKEN_SPAWNER); - Slimefun.registerResearch(new Research(91, "Hercules Pickaxe", 28), SlimefunItems.HERCULES_PICKAXE); - Slimefun.registerResearch(new Research(92, "Table Saw", 4), SlimefunItems.TABLE_SAW); - Slimefun.registerResearch(new Research(93, "Slimy Steel Armor", 27), SlimefunItems.SLIME_HELMET_STEEL, SlimefunItems.SLIME_CHESTPLATE_STEEL, SlimefunItems.SLIME_LEGGINGS_STEEL, SlimefunItems.SLIME_BOOTS_STEEL); - Slimefun.registerResearch(new Research(94, "Blade of Vampires", 26), SlimefunItems.BLADE_OF_VAMPIRES); - Slimefun.registerResearch(new Research(95, "Lazy Mining", 40), SlimefunItems.DIGITAL_MINER); - Slimefun.registerResearch(new Research(96, "Water Staff", 8), SlimefunItems.STAFF_WATER); - Slimefun.registerResearch(new Research(97, "Golden City", 19), SlimefunItems.GOLD_24K_BLOCK); - Slimefun.registerResearch(new Research(98, "Advanced Mining 101", 42), SlimefunItems.ADVANCED_DIGITAL_MINER); - Slimefun.registerResearch(new Research(99, "Composting Dirt", 3), SlimefunItems.COMPOSTER); - Slimefun.registerResearch(new Research(100, "Farmer Shoes", 4), SlimefunItems.FARMER_SHOES); - Slimefun.registerResearch(new Research(101, "Explosive Tools", 30), SlimefunItems.EXPLOSIVE_PICKAXE, SlimefunItems.EXPLOSIVE_SHOVEL); - Slimefun.registerResearch(new Research(102, "Automated Gold Pan", 17), SlimefunItems.AUTOMATED_PANNING_MACHINE); - Slimefun.registerResearch(new Research(103, "Boots of the Stomper", 19), SlimefunItems.BOOTS_OF_THE_STOMPER); - Slimefun.registerResearch(new Research(104, "Pickaxe of the Seeker", 19), SlimefunItems.PICKAXE_OF_THE_SEEKER); - Slimefun.registerResearch(new Research(105, "Backpacks", 15), SlimefunItems.BACKPACK_LARGE, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.BACKPACK_SMALL); - Slimefun.registerResearch(new Research(106, "Woven Backpack", 19), SlimefunItems.WOVEN_BACKPACK); - Slimefun.registerResearch(new Research(107, "Crucible", 13), SlimefunItems.CRUCIBLE); - Slimefun.registerResearch(new Research(108, "Gilded Backpack", 22), SlimefunItems.GILDED_BACKPACK); - Slimefun.registerResearch(new Research(111, "Armored Jetpack", 27), SlimefunItems.ARMORED_JETPACK); - Slimefun.registerResearch(new Research(112, "Ender Talismans", 28)); - Slimefun.registerResearch(new Research(115, "Even more Ores", 10), SlimefunItems.NICKEL_INGOT, SlimefunItems.COBALT_INGOT); - Slimefun.registerResearch(new Research(116, "Magnetic Metals", 16), SlimefunItems.MAGNET); - Slimefun.registerResearch(new Research(117, "Infused Magnets", 18), SlimefunItems.INFUSED_MAGNET); - Slimefun.registerResearch(new Research(118, "Speedy Pickaxe", 14), SlimefunItems.COBALT_PICKAXE); - Slimefun.registerResearch(new Research(119, "Necromancy", 19), SlimefunItems.NECROTIC_SKULL, SlimefunItems.ESSENCE_OF_AFTERLIFE); - Slimefun.registerResearch(new Research(120, "Soulbound Storage", 22), SlimefunItems.BOUND_BACKPACK); - Slimefun.registerResearch(new Research(121, "Jet Boots", 25), SlimefunItems.DURALUMIN_JETBOOTS, SlimefunItems.BILLON_JETBOOTS, SlimefunItems.SOLDER_JETBOOTS, SlimefunItems.STEEL_JETBOOTS, SlimefunItems.DAMASCUS_STEEL_JETBOOTS, SlimefunItems.REINFORCED_ALLOY_JETBOOTS); - Slimefun.registerResearch(new Research(122, "Armored Jet Boots", 27), SlimefunItems.ARMORED_JETBOOTS); - Slimefun.registerResearch(new Research(123, "Seismic Axe", 29), SlimefunItems.SEISMIC_AXE); - Slimefun.registerResearch(new Research(124, "Pickaxe of Vein Mining", 29), SlimefunItems.PICKAXE_OF_VEIN_MINING); - Slimefun.registerResearch(new Research(125, "Soulbound Weapons", 29), SlimefunItems.SOULBOUND_SWORD, SlimefunItems.SOULBOUND_BOW, SlimefunItems.SOULBOUND_TRIDENT); - Slimefun.registerResearch(new Research(126, "Soulbound Tools", 29), SlimefunItems.SOULBOUND_PICKAXE, SlimefunItems.SOULBOUND_AXE, SlimefunItems.SOULBOUND_SHOVEL, SlimefunItems.SOULBOUND_HOE); - Slimefun.registerResearch(new Research(127, "Soulbound Armor", 29), SlimefunItems.SOULBOUND_HELMET, SlimefunItems.SOULBOUND_CHESTPLATE, SlimefunItems.SOULBOUND_LEGGINGS, SlimefunItems.SOULBOUND_BOOTS); - Slimefun.registerResearch(new Research(129, "Delicious Drinks", 29), SlimefunItems.JUICER, SlimefunItems.APPLE_JUICE, SlimefunItems.MELON_JUICE, SlimefunItems.CARROT_JUICE, SlimefunItems.PUMPKIN_JUICE, SlimefunItems.SWEET_BERRY_JUICE); - Slimefun.registerResearch(new Research(130, "Repairing Spawners", 15), SlimefunItems.REPAIRED_SPAWNER); - Slimefun.registerResearch(new Research(131, "HO HO HO", 1)); - Slimefun.registerResearch(new Research(132, "Enhanced Furnace", 7), SlimefunItems.ENHANCED_FURNACE, SlimefunItems.ENHANCED_FURNACE_2); - Slimefun.registerResearch(new Research(133, "Better Furnaces", 18), SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.ENHANCED_FURNACE_7); - Slimefun.registerResearch(new Research(134, "High Tier Furnace", 29), SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.ENHANCED_FURNACE_11); - Slimefun.registerResearch(new Research(135, "Reinforced Furnace", 32), SlimefunItems.REINFORCED_FURNACE); - Slimefun.registerResearch(new Research(136, "Carbonado Edged Furnace", 35), SlimefunItems.CARBONADO_EDGED_FURNACE); - Slimefun.registerResearch(new Research(137, "Heating up", 32), SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.HEATING_COIL); - Slimefun.registerResearch(new Research(138, "Block Placer", 17), SlimefunItems.BLOCK_PLACER); - Slimefun.registerResearch(new Research(139, "Lazy Panning", 29), SlimefunItems.AUTOMATED_PANNING_MACHINE); - Slimefun.registerResearch(new Research(142, "Turning things around", 38), SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION); - Slimefun.registerResearch(new Research(143, "Robin Hood", 22), SlimefunItems.EXPLOSIVE_BOW, SlimefunItems.ICY_BOW); - Slimefun.registerResearch(new Research(144, "Sharing with friends", 30), SlimefunItems.TOME_OF_KNOWLEDGE_SHARING); - Slimefun.registerResearch(new Research(145, "XP Storage", 13), SlimefunItems.FLASK_OF_KNOWLEDGE); - Slimefun.registerResearch(new Research(146, "Withstanding Explosions", 15), SlimefunItems.REINFORCED_PLATE, SlimefunItems.HARDENED_GLASS); - Slimefun.registerResearch(new Research(148, "Happy Easter", 1)); - Slimefun.registerResearch(new Research(149, "Golden potion", 24), SlimefunItems.GOLDEN_APPLE_JUICE); - Slimefun.registerResearch(new Research(150, "Portable Beverages", 24), SlimefunItems.COOLING_UNIT, SlimefunItems.COOLER); - Slimefun.registerResearch(new Research(151, "Ancient Altar", 15), SlimefunItems.ANCIENT_PEDESTAL, SlimefunItems.ANCIENT_ALTAR); - Slimefun.registerResearch(new Research(152, "Wither-Proof Obsidian", 21), SlimefunItems.WITHER_PROOF_OBSIDIAN); - Slimefun.registerResearch(new Research(155, "Elemental Runes", 15), SlimefunItems.BLANK_RUNE, SlimefunItems.RUNE_EARTH, SlimefunItems.RUNE_WATER, SlimefunItems.RUNE_AIR, SlimefunItems.RUNE_FIRE); - Slimefun.registerResearch(new Research(156, "Purple Runes", 18), SlimefunItems.RUNE_ENDER, SlimefunItems.RUNE_RAINBOW); - Slimefun.registerResearch(new Research(157, "Infernal Bonemeal", 12), SlimefunItems.INFERNAL_BONEMEAL); - Slimefun.registerResearch(new Research(158, "Rainbow Blocks", 24), SlimefunItems.RAINBOW_CLAY, SlimefunItems.RAINBOW_GLASS, SlimefunItems.RAINBOW_GLASS_PANE, SlimefunItems.RAINBOW_WOOL); - Slimefun.registerResearch(new Research(159, "Infused Hopper", 22), SlimefunItems.INFUSED_HOPPER); - Slimefun.registerResearch(new Research(160, "Wither-Proof Glass", 20), SlimefunItems.WITHER_PROOF_GLASS); - Slimefun.registerResearch(new Research(161, "Duct Tape", 14), SlimefunItems.DUCT_TAPE); - Slimefun.registerResearch(new Research(162, "Plastic", 25), SlimefunItems.PLASTIC_SHEET); - Slimefun.registerResearch(new Research(163, "Memory Core", 28), SlimefunItems.ANDROID_MEMORY_CORE); - Slimefun.registerResearch(new Research(164, "Oil", 30), SlimefunItems.BUCKET_OF_OIL, SlimefunItems.OIL_PUMP); - Slimefun.registerResearch(new Research(165, "Fuel", 30), SlimefunItems.BUCKET_OF_FUEL, SlimefunItems.REFINERY); - Slimefun.registerResearch(new Research(166, "Holograms", 36), SlimefunItems.HOLOGRAM_PROJECTOR); - Slimefun.registerResearch(new Research(167, "Tier 1 Capacitors", 25), SlimefunItems.SMALL_CAPACITOR, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.BIG_CAPACITOR); - Slimefun.registerResearch(new Research(168, "Tier 2 Capacitors", 32), SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO_EDGED_CAPACITOR); - Slimefun.registerResearch(new Research(169, "Solar Power Plant", 14), SlimefunItems.SOLAR_GENERATOR); - Slimefun.registerResearch(new Research(170, "Powered Furnace", 15), SlimefunItems.ELECTRIC_FURNACE); - Slimefun.registerResearch(new Research(171, "Crushing and Grinding", 20), SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.ELECTRIC_INGOT_PULVERIZER); - Slimefun.registerResearch(new Research(172, "Heated Pressure Chamber", 22), SlimefunItems.HEATED_PRESSURE_CHAMBER); - Slimefun.registerResearch(new Research(173, "Coal Generator", 18), SlimefunItems.COAL_GENERATOR); - Slimefun.registerResearch(new Research(173, "Bio-Reactor", 18), SlimefunItems.BIO_REACTOR); - Slimefun.registerResearch(new Research(174, "Automatic Enchanting and Disenchanting", 24), SlimefunItems.AUTO_ENCHANTER, SlimefunItems.AUTO_DISENCHANTER); - Slimefun.registerResearch(new Research(175, "Automatic Anvil", 34), SlimefunItems.AUTO_ANVIL, SlimefunItems.AUTO_ANVIL_2); - Slimefun.registerResearch(new Research(176, "Power Measurement", 10), SlimefunItems.MULTIMETER); - Slimefun.registerResearch(new Research(177, "Basic GPS Setup", 28), SlimefunItems.GPS_TRANSMITTER, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.GPS_MARKER_TOOL); - Slimefun.registerResearch(new Research(178, "GPS Emergency Waypoint", 30), SlimefunItems.GPS_EMERGENCY_TRANSMITTER); - Slimefun.registerResearch(new Research(179, "Programmable Androids", 50), SlimefunItems.PROGRAMMABLE_ANDROID, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER); - Slimefun.registerResearch(new Research(180, "Android Interfaces", 26), SlimefunItems.ANDROID_INTERFACE_FUEL, SlimefunItems.ANDROID_INTERFACE_ITEMS); - Slimefun.registerResearch(new Research(181, "GEO-Scans", 30), SlimefunItems.GPS_GEO_SCANNER, SlimefunItems.PORTABLE_GEO_SCANNER); - Slimefun.registerResearch(new Research(182, "Combustion Reactor", 38), SlimefunItems.COMBUSTION_REACTOR); - Slimefun.registerResearch(new Research(183, "Teleporter Base Components", 42), SlimefunItems.GPS_TELEPORTATION_MATRIX, SlimefunItems.GPS_TELEPORTER_PYLON); - Slimefun.registerResearch(new Research(184, "Teleporter Activation", 36), SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED); - Slimefun.registerResearch(new Research(185, "Upgraded Solar Generators", 28), SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.SOLAR_GENERATOR_3); - Slimefun.registerResearch(new Research(186, "Upgraded Transmitters", 36), SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.GPS_TRANSMITTER_3); - Slimefun.registerResearch(new Research(187, "Elevators", 28), SlimefunItems.ELEVATOR); - Slimefun.registerResearch(new Research(188, "Full-Time Solar Power", 44), SlimefunItems.SOLAR_GENERATOR_4); - Slimefun.registerResearch(new Research(189, "Top Tier Transmitter", 44), SlimefunItems.GPS_TRANSMITTER_4); - Slimefun.registerResearch(new Research(190, "Energy Networks 101", 6), SlimefunItems.ENERGY_REGULATOR); - Slimefun.registerResearch(new Research(191, "Butcher Androids", 32), SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER); - Slimefun.registerResearch(new Research(192, "Organic Food", 25), SlimefunItems.FOOD_FABRICATOR, SlimefunItems.WHEAT_ORGANIC_FOOD, SlimefunItems.CARROT_ORGANIC_FOOD, SlimefunItems.POTATO_ORGANIC_FOOD, SlimefunItems.SEEDS_ORGANIC_FOOD, SlimefunItems.BEETROOT_ORGANIC_FOOD, SlimefunItems.MELON_ORGANIC_FOOD, SlimefunItems.APPLE_ORGANIC_FOOD, SlimefunItems.SWEET_BERRIES_ORGANIC_FOOD, SlimefunItems.KELP_ORGANIC_FOOD); - Slimefun.registerResearch(new Research(193, "Automated Feeding", 25), SlimefunItems.AUTO_BREEDER); - Slimefun.registerResearch(new Research(194, "Advanced Androids", 60), SlimefunItems.PROGRAMMABLE_ANDROID_2); - Slimefun.registerResearch(new Research(195, "Advanced Androids - Butcher", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER); - Slimefun.registerResearch(new Research(196, "Advanced Androids - Fisherman", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN); - Slimefun.registerResearch(new Research(197, "Animal Growth Manipulation", 32), SlimefunItems.ANIMAL_GROWTH_ACCELERATOR); - Slimefun.registerResearch(new Research(198, "Exp Collector", 36), SlimefunItems.XP_COLLECTOR); - Slimefun.registerResearch(new Research(199, "Organic Fertilizer", 36), SlimefunItems.FOOD_COMPOSTER, SlimefunItems.WHEAT_FERTILIZER, SlimefunItems.CARROT_FERTILIZER, SlimefunItems.POTATO_FERTILIZER, SlimefunItems.SEEDS_FERTILIZER, SlimefunItems.BEETROOT_FERTILIZER, SlimefunItems.MELON_FERTILIZER, SlimefunItems.APPLE_FERTILIZER, SlimefunItems.SWEET_BERRIES_FERTILIZER, SlimefunItems.KELP_FERTILIZER); - Slimefun.registerResearch(new Research(200, "Crop Growth Acceleration", 40), SlimefunItems.CROP_GROWTH_ACCELERATOR); - Slimefun.registerResearch(new Research(201, "Upgraded Crop Growth Accelerator", 44), SlimefunItems.CROP_GROWTH_ACCELERATOR_2); - Slimefun.registerResearch(new Research(202, "Reactor Essentials", 36), SlimefunItems.REACTOR_COOLANT_CELL, SlimefunItems.NEPTUNIUM, SlimefunItems.PLUTONIUM); - Slimefun.registerResearch(new Research(203, "Nuclear Power Plant", 48), SlimefunItems.NUCLEAR_REACTOR); - Slimefun.registerResearch(new Research(204, "Mr Freeze", 20), SlimefunItems.FREEZER); - Slimefun.registerResearch(new Research(205, "Cargo Basics", 30), SlimefunItems.CARGO_MOTOR, SlimefunItems.CARGO_MANAGER, SlimefunItems.CARGO_NODE); - Slimefun.registerResearch(new Research(206, "Cargo Setup", 30), SlimefunItems.CARGO_INPUT, SlimefunItems.CARGO_OUTPUT); - Slimefun.registerResearch(new Research(207, "Electric Ingot Fabrication", 18), SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRIC_INGOT_FACTORY); - Slimefun.registerResearch(new Research(208, "Faster Ingot Fabrication", 26), SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRIC_INGOT_FACTORY_2); - Slimefun.registerResearch(new Research(209, "Super Fast Ingot Fabrication", 32), SlimefunItems.ELECTRIC_GOLD_PAN_3, SlimefunItems.ELECTRIC_DUST_WASHER_3, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, SlimefunItems.ELECTRIC_ORE_GRINDER_2); - Slimefun.registerResearch(new Research(210, "Automated Crafting", 20), SlimefunItems.AUTOMATED_CRAFTING_CHAMBER); - Slimefun.registerResearch(new Research(211, "Upgraded Food Fabrication", 28), SlimefunItems.FOOD_FABRICATOR_2, SlimefunItems.FOOD_COMPOSTER_2); - Slimefun.registerResearch(new Research(212, "Reactor Interaction", 18), SlimefunItems.REACTOR_ACCESS_PORT); - Slimefun.registerResearch(new Research(213, "Fluid Pump", 28), SlimefunItems.FLUID_PUMP); - Slimefun.registerResearch(new Research(214, "Upgraded Freezer", 29), SlimefunItems.FREEZER_2); - Slimefun.registerResearch(new Research(215, "Never-Ending Circle", 30), SlimefunItems.BOOSTED_URANIUM); - Slimefun.registerResearch(new Research(216, "Trash", 8), SlimefunItems.TRASH_CAN); - Slimefun.registerResearch(new Research(217, "Advanced Output Node", 24), SlimefunItems.CARGO_OUTPUT_ADVANCED); - Slimefun.registerResearch(new Research(218, "Carbon Press", 28), SlimefunItems.CARBON_PRESS); - Slimefun.registerResearch(new Research(219, "Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY); - Slimefun.registerResearch(new Research(220, "Upgraded Electric Furnace", 20), SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.ELECTRIC_FURNACE_3); - Slimefun.registerResearch(new Research(221, "Upgraded Carbon Press", 26), SlimefunItems.CARBON_PRESS_2); - Slimefun.registerResearch(new Research(222, "Empowered Androids", 60), SlimefunItems.PROGRAMMABLE_ANDROID_3); - Slimefun.registerResearch(new Research(223, "Empowered Androids - Butcher", 30), SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER); - Slimefun.registerResearch(new Research(224, "Empowered Androids - Fisherman", 30), SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN); - Slimefun.registerResearch(new Research(225, "Ultimate Carbon Press", 32), SlimefunItems.CARBON_PRESS_3); - Slimefun.registerResearch(new Research(226, "Automated Wither Killer", 35), SlimefunItems.WITHER_ASSEMBLER); - Slimefun.registerResearch(new Research(227, "Upgraded Heated Pressure Chamber", 20), SlimefunItems.HEATED_PRESSURE_CHAMBER_2); - Slimefun.registerResearch(new Research(228, "Elytras", 20), SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA); - Slimefun.registerResearch(new Research(229, "Special Elytras", 30), SlimefunItems.INFUSED_ELYTRA, SlimefunItems.SOULBOUND_ELYTRA); - Slimefun.registerResearch(new Research(230, "Electrified Crucible", 26), SlimefunItems.ELECTRIFIED_CRUCIBLE); - Slimefun.registerResearch(new Research(231, "Hot Crucibles", 30), SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.ELECTRIFIED_CRUCIBLE_3); - Slimefun.registerResearch(new Research(232, "Advanced Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY_2); - Slimefun.registerResearch(new Research(233, "Advanced Androids - Farmer", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER); - Slimefun.registerResearch(new Research(234, "Lava Generator", 38), SlimefunItems.LAVA_GENERATOR); - Slimefun.registerResearch(new Research(235, "Nether Ice Coolant", 45), SlimefunItems.NETHER_ICE, SlimefunItems.ENRICHED_NETHER_ICE, SlimefunItems.NETHER_ICE_COOLANT_CELL); - Slimefun.registerResearch(new Research(236, "Nether Star Reactor", 60), SlimefunItems.NETHERSTAR_REACTOR); - Slimefun.registerResearch(new Research(237, "Blistering Radioactivity", 38), SlimefunItems.BLISTERING_INGOT, SlimefunItems.BLISTERING_INGOT_2, SlimefunItems.BLISTERING_INGOT_3); - Slimefun.registerResearch(new Research(239, "Automatic Ignition Chamber", 12), SlimefunItems.IGNITION_CHAMBER); - Slimefun.registerResearch(new Research(240, "Basic machinery output chest", 20), SlimefunItems.OUTPUT_CHEST); - Slimefun.registerResearch(new Research(241, "Thinned-down Conductivity", 15), SlimefunItems.COPPER_WIRE); - Slimefun.registerResearch(new Research(242, "Radiant Backpack", 25), SlimefunItems.RADIANT_BACKPACK); - Slimefun.registerResearch(new Research(243, "A Dry Day", 15), SlimefunItems.AUTO_DRIER); - Slimefun.registerResearch(new Research(244, "Diet Cookie", 3), SlimefunItems.DIET_COOKIE); - Slimefun.registerResearch(new Research(245, "Storm Staff", 30), SlimefunItems.STAFF_STORM); - Slimefun.registerResearch(new Research(246, "Soulbound Rune", 60), SlimefunItems.RUNE_SOULBOUND); - Slimefun.registerResearch(new Research(247, "GEO-Miner", 24), SlimefunItems.GEO_MINER); - Slimefun.registerResearch(new Research(248, "Lightning Rune", 24), SlimefunItems.RUNE_LIGHTNING); - Slimefun.registerResearch(new Research(249, "Totem of Undying", 36), SlimefunItems.TOTEM_OF_UNDYING); - Slimefun.registerResearch(new Research(250, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); - Slimefun.registerResearch(new Research(251, "Nether Gold Pan", 8), SlimefunItems.NETHER_GOLD_PAN); - Slimefun.registerResearch(new Research(252, "Electric Press", 16), SlimefunItems.ELECTRIC_PRESS, SlimefunItems.ELECTRIC_PRESS_2); - Slimefun.registerResearch(new Research(253, "Power from Magnesium", 20), SlimefunItems.MAGNESIUM_SALT, SlimefunItems.MAGNESIUM_GENERATOR); - Slimefun.registerResearch(new Research(254, "Tasty Kelp", 4), SlimefunItems.KELP_COOKIE); - } -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 6552286f12..e8055bd714 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -62,6 +62,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.listeners.TeleporterListener; import io.github.thebusybiscuit.slimefun4.implementation.listeners.VanillaMachinesListener; import io.github.thebusybiscuit.slimefun4.implementation.listeners.WorldListener; + import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; @@ -71,10 +72,10 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; import me.mrCookieSlime.Slimefun.Objects.tasks.ArmorTask; -import me.mrCookieSlime.Slimefun.Setup.MiscSetup; -import me.mrCookieSlime.Slimefun.Setup.ResearchSetup; -import me.mrCookieSlime.Slimefun.Setup.SlimefunSetup; -import me.mrCookieSlime.Slimefun.Setup.WikiSetup; +import io.github.thebusybiscuit.slimefun4.implementation.setup.MiscSetup; +import io.github.thebusybiscuit.slimefun4.implementation.setup.ResearchSetup; +import io.github.thebusybiscuit.slimefun4.implementation.setup.SlimefunSetup; +import io.github.thebusybiscuit.slimefun4.implementation.setup.WikiSetup; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -90,7 +91,7 @@ public final class SlimefunPlugin extends JavaPlugin { private RecipeSnapshot recipeSnapshot; - private final SlimefunRegistry registry = new SlimefunRegistry(); + private SlimefunRegistry registry; private final CustomItemDataService itemDataService = new CustomItemDataService(this, "slimefun_item"); private final CustomTextureService textureService = new CustomTextureService(this); @@ -142,6 +143,7 @@ public void onEnable() { // Setup config.yml config = new Config(this); + registry = new SlimefunRegistry(); settings = new ConfigCache(config); // Loading all extra configs @@ -180,7 +182,6 @@ public void onEnable() { ResearchSetup.setupResearches(); settings.researchesEnabled = getResearchCfg().getBoolean("enable-researching"); - settings.smelteryFireBreakChance = (int) Slimefun.getItemValue("SMELTERY", "chance.fireBreak"); MiscSetup.setupMisc(); WikiSetup.addWikiPages(this); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java index f963807ee9..52bac1bfd3 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -10,6 +10,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -43,9 +44,9 @@ public class BlockStorage { private static final String PATH_CHUNKS = "data-storage/Slimefun/stored-chunks/"; private World world; - private Map storage = new HashMap<>(); - private Map inventories = new HashMap<>(); - private Map blocksCache = new HashMap<>(); + private Map storage = new ConcurrentHashMap<>(); + private Map inventories = new ConcurrentHashMap<>(); + private Map blocksCache = new ConcurrentHashMap<>(); public static BlockStorage getStorage(World world) { return SlimefunPlugin.getRegistry().getWorlds().get(world.getName()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java b/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java index 9d0603f76d..71e474e757 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java @@ -8,6 +8,7 @@ import java.util.stream.Collectors; import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; @@ -108,6 +109,16 @@ public static void registerResearch(Research research, ItemStack... items) { research.register(); } + public static void registerResearch(NamespacedKey key, int id, String name, int cost, ItemStack... items) { + Research research = new Research(key, id, name, cost); + + for (ItemStack item : items) { + research.addItems(SlimefunItem.getByItem(item)); + } + + research.register(); + } + /** * Checks if this player can use this item. * diff --git a/src/main/java/me/mrCookieSlime/Slimefun/utils/ConfigCache.java b/src/main/java/me/mrCookieSlime/Slimefun/utils/ConfigCache.java index 0c581c6c49..21697fad7d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/utils/ConfigCache.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/utils/ConfigCache.java @@ -5,42 +5,36 @@ import io.github.thebusybiscuit.cscorelib2.config.Config; public final class ConfigCache { - - public final boolean printOutLoading; - - public boolean researchesEnabled; - public final boolean researchesFreeInCreative; - public final boolean researchFireworksEnabled; - public final List researchesTitles; - - public final int blocksInfoLoadingDelay; - - public final boolean guideShowVanillaRecipes; - - public final int emeraldEnchantsLimit; - - public final boolean legacyDustWasher; - public final boolean legacyOreGrinder; - public final boolean legacyOreWasher; - - public int smelteryFireBreakChance; - - public ConfigCache(Config cfg) { - printOutLoading = cfg.getBoolean("options.print-out-loading"); - - researchesFreeInCreative = cfg.getBoolean("options.allow-free-creative-research"); - researchesTitles = cfg.getStringList("research-ranks"); - researchFireworksEnabled = cfg.getBoolean("options.research-unlock-fireworks"); - - blocksInfoLoadingDelay = cfg.getInt("URID.info-delay"); - - guideShowVanillaRecipes = cfg.getBoolean("options.show-vanilla-recipes-in-guide"); - - emeraldEnchantsLimit = cfg.getInt("options.emerald-enchantment-limit"); - - legacyDustWasher = cfg.getBoolean("options.legacy-dust-washer"); - legacyOreWasher = cfg.getBoolean("options.legacy-ore-washer"); - legacyOreGrinder = cfg.getBoolean("options.legacy-ore-grinder"); - } - -} + + public final boolean printOutLoading; + + public boolean researchesEnabled; + public final boolean researchesFreeInCreative; + public final boolean researchFireworksEnabled; + public final List researchesTitles; + + public final int blocksInfoLoadingDelay; + + public final int emeraldEnchantsLimit; + + public final boolean legacyDustWasher; + public final boolean legacyOreGrinder; + public final boolean legacyOreWasher; + + public ConfigCache(Config cfg) { + printOutLoading = cfg.getBoolean("options.print-out-loading"); + + researchesFreeInCreative = cfg.getBoolean("options.allow-free-creative-research"); + researchesTitles = cfg.getStringList("research-ranks"); + researchFireworksEnabled = cfg.getBoolean("options.research-unlock-fireworks"); + + blocksInfoLoadingDelay = cfg.getInt("URID.info-delay"); + + emeraldEnchantsLimit = cfg.getInt("options.emerald-enchantment-limit"); + + legacyDustWasher = cfg.getBoolean("options.legacy-dust-washer"); + legacyOreWasher = cfg.getBoolean("options.legacy-ore-washer"); + legacyOreGrinder = cfg.getBoolean("options.legacy-ore-grinder"); + } + +} \ No newline at end of file diff --git a/src/main/resources/languages/messages_de.yml b/src/main/resources/languages/messages_de.yml index 65c30723c4..d1c888241a 100644 --- a/src/main/resources/languages/messages_de.yml +++ b/src/main/resources/languages/messages_de.yml @@ -90,11 +90,11 @@ guide: languages: select: Klicke hier um diese Sprache auszuwählen select-default: Klicke hier um die Standardsprache auszuwählen + selected-language: 'Aktuell ausgewählt:' translations: lore: Klicke um eine Übersetzung hinzuzufügen name: "&aFehlt etwas?" updated: "&aFolgende Sprache wurde ausgewählt: &b%lang%" - selected-language: 'Aktuell ausgewählt:' pages: next: Nächste Seite previous: Vorherige Seite @@ -105,13 +105,13 @@ guide: message: "&bWonach möchtest du suchen?" name: "&7Suche..." title: + addons: Addons für Slimefun4 + bugs: Fehlermeldungen credits: 'Slimefun4: Mitwirkende' languages: Wähle deine bevorzugte Sprache main: Slimefun-Handbuch settings: Einstellungen & Infos wiki: Slimefun4-Wiki - addons: Addons für Slimefun4 - bugs: Fehlermeldungen tooltips: open-category: Klicke zum Öffnen versions-notice: Dies ist sehr wichtig bei Fehlermeldungen! @@ -121,26 +121,25 @@ languages: cs: Tschechisch de: Deutsch default: Server-Standard + el: Griechisch en: Englisch es: Spanisch fr: Französisch + he: Hebräisch hu: Ungarisch id: Indonesisch it: Italienisch lv: Lettisch nl: Niederländisch pl: Polnisch + pt: Portugiesisch (Portugal) + pt-BR: Portugiesisch (Brasilien) ru: Russisch sk: Slowakisch sv: Schwedisch - zh-CN: 'Chinesisch (China)' - zh-TW: 'Chinesisch (Taiwan)' - vi: 'Vietnamesisch' - id: 'Indonesisch' - el: 'Griechisch' - he: 'Hebräisch' - pt: 'Portugiesisch (Portugal)' - pt-BR: 'Portugiesisch (Brasilien)' + vi: Vietnamesisch + zh-CN: Chinesisch (China) + zh-TW: Chinesisch (Taiwan) machines: ANCIENT_ALTAR: not-enough-pedestals: "&4Es fehlen einige Sockel des Altars &c(%pedestals% / 8)" diff --git a/src/main/resources/languages/messages_en.yml b/src/main/resources/languages/messages_en.yml index e53d8fe947..96f04aa2f3 100644 --- a/src/main/resources/languages/messages_en.yml +++ b/src/main/resources/languages/messages_en.yml @@ -36,7 +36,7 @@ guide: languages: updated: '&aYour language was successfully set to: &b%lang%' - selected-language: 'Currently selected: ' + selected-language: 'Currently selected:' select: 'Click to select this language' select-default: 'Click to select the default language' translations: diff --git a/src/main/resources/languages/messages_fr.yml b/src/main/resources/languages/messages_fr.yml index a2710405c5..7493d4f318 100644 --- a/src/main/resources/languages/messages_fr.yml +++ b/src/main/resources/languages/messages_fr.yml @@ -83,16 +83,17 @@ guide: commits: Contributions roles: developer: "&6Développeur" - resourcepack: "&cArtiste de pack de ressources" + resourcepack: "&cArtiste du pack de ressource" translator: "&9Traducteur" wiki: "&3Éditeur du wiki" - profile-link: Cliquez pour visiter leur profil GitHub + profile-link: Cliquez pour visiter leurs profils GitHub languages: select: Cliquez pour sélectionner cette langue select-default: Cliquez pour sélectionner la langue par défaut + selected-language: 'Actuellement Sélectionné :' translations: - name: "&aIl manque quelque chose ?" lore: Cliquez pour ajouter votre propre traduction + name: "&aIl manque quelque chose ?" updated: "&aVotre langue a été correctement définie à : &b%lang%" pages: next: Page suivante @@ -104,29 +105,42 @@ guide: message: "&bQue souhaitez-vous rechercher?" name: "&7Rechercher..." title: + addons: Extensions de Slimefun4 + bugs: Signaler un bug credits: Contributeurs de Slimefun4 languages: Choisissez votre langue main: Guide Slimefun settings: Paramètres et informations + wiki: Wiki Slimefun4 + tooltips: + open-category: Cliquez pour ouvrir + versions-notice: Ces informations sont très importantes lorsque vous rapportez + des bugs ! inventory: no-access: "&4Vous n'avez pas la permission d'accéder à ce bloc" languages: + cs: Tchèque de: Allemand default: Paramètre par défaut + el: Grec en: Anglais + es: Espagnol fr: Français + he: Hébreu + hu: Hongrois + id: indonésien it: Italien + lv: Letton nl: Néerlandais pl: Polonais - sv: Suédois - es: Espagnol - cs: Tchèque - hu: Hongrois - lv: Letton + pt: Portugais (Portugal) + pt-BR: Portugais (Brésil) ru: Russe sk: Slovaque - zh-TW: Chinois (Taiwan) + sv: Suédois vi: Vietnamien + zh-CN: Chinois (Chine) + zh-TW: Chinois (Taiwan) machines: ANCIENT_ALTAR: not-enough-pedestals: "&4L'autel n'est pas entouré du bon nombre de piédestaux diff --git a/src/main/resources/languages/messages_hu.yml b/src/main/resources/languages/messages_hu.yml index 7286d3de5a..516035b441 100644 --- a/src/main/resources/languages/messages_hu.yml +++ b/src/main/resources/languages/messages_hu.yml @@ -1,129 +1,144 @@ --- +android: + scripts: + already-uploaded: "&4Ezt a szkriptet már feltöltötték." + enter-name: + - + - "&eKérlek, írd be a szkript nevét" + instructions: + ATTACK_ANIMALS: "&4Támadj &c(Állatok)" + ATTACK_ANIMALS_ADULT: "&4Támadj &c(Állatok &7[Felnőtt]&c)" + ATTACK_MOBS: "&4Támadj &c(Ellenséges Élőlények)" + ATTACK_MOBS_ANIMALS: "&4Támadj &c(Ellenséges Élőlények és Állatok)" + CATCH_FISH: "&bFogj Halat" + CHOP_TREE: "&cVágj és Ültess" + DIG_DOWN: "&bÁss le" + DIG_FORWARD: "&bÁss előre" + DIG_UP: "&bÁss" + FARM_DOWN: "&bSzüretelj és Ültess &7(Blokk alatt)" + FARM_EXOTIC_DOWN: "&bFejlett Szüretelés és Ültetés &7(Blokk alatt)" + FARM_EXOTIC_FORWARD: "&bFejlett Szüretelés és Ültetés" + FARM_FORWARD: "&bSzüretelj és Ültess" + GO_DOWN: "&7Menj lefelé" + GO_FORWARD: "&7Menj előre" + GO_UP: "&7Menj felfelé" + INTERFACE_FUEL: "&cVegyen ki az Üzemanyagot a faced Interface-ből" + INTERFACE_ITEMS: "&9Tegye az Eszköztár Tartalmát a faced Interface-be" + MOVE_AND_DIG_DOWN: "&bMenj és Áss lefelé" + MOVE_AND_DIG_FORWARD: "&bMenj és Áss előre" + MOVE_AND_DIG_UP: "&bMenj és Áss felfelé" + REPEAT: "&9Szkript ismétlése" + START: "&2Szkript indítása" + TURN_LEFT: "&7Fordulj balra" + TURN_RIGHT: "&7Fordulj jobbra" + WAIT: "&eVárjon 0.5s" + rating: + already: "&4Ezt a szkriptet már értékelted!" + own: "&4Nem értékelheted a saját szkriptedet!" + uploaded: + - "&bFeltöltés..." + - "&aA szkript sikeresen feltöltve!" + started: "&7Az Androidod folytatja a szkript futtatását" + stopped: "&7Az Androidod szünetelteti a szkript futtatását" +anvil: + not-working: "&4Nem használhatsz Slimefun tárgyakat az Üllőben!" +backpack: + already-open: "&cSajnáljuk, ez a Hátizsák valahol máshol már nyitva van!" + no-stack: "&cNem lehet halmozni a Táskákat" commands: - help: Megjeleníti ezt a súgóképernyőt cheat: Lehetővé teszi a Tárgyak csalását give: Adj valakinek Slimefun Tárgyakat guide: Adj magadnak egy Slimefun Útmutatót - timings: Lag-Információ a Szerverről - teleporter: Nézd meg a többi Játékos Útpontjait - versions: Az összes telepített Kiegészítőt listázza - search: Keresés egy kifejezésre az Útmutatóban + help: Megjeleníti ezt a súgóképernyőt open_guide: A könyv használata nélkül megnyitja a Slimefun útmutatóját - stats: Néhány statisztikát mutat a Játékosról research: description: A játékosok kutatásainak Feloldása/Visszaállítása reset: "&cVisszaállítottad %player% Ismereteit" reset-target: "&cAz ismereteidet visszaállították" + search: Keresés egy kifejezésre az Útmutatóban + stats: Néhány statisztikát mutat a Játékosról + teleporter: Nézd meg a többi Játékos Útpontjait + timings: Lag-Információ a Szerverről + versions: Az összes telepített Kiegészítőt listázza +gps: + deathpoint: "&4Halálpont &7%date%" + geo: + scan-required: "&4GEO-Vizsgálat szükséges! &cElőbb vizsgáld meg ezt a chunk-ot + a GEO-Szkennerrel!" + insufficient-complexity: + - "&4Nem megfelelő a GPS Hálózat Komplexitása: &c%complexity%" + - "&4a) Még nem telepítetted a GPS Hálózatot" + - "&4b) A GPS Hálózatod nem eléggé összetett" + waypoint: + added: "&aSikeresen megadtad az útpontot" + max: "&4Elérted a maximális útpontok számát" + new: "&eKérlek, add meg az új útpontot chatben. &7(A Színkódok használhatóak!)" guide: - search: - message: "&bMit szeretnél keresni?" - name: "&7Keresés..." - lore: - - "&bMit szeretnél keresni?" - - "&7Gépeld be a keresett kifejezést a chatbe" cheat: no-multiblocks: "&4A Multiblokkban nem tudsz csalni, meg kell építened!" - languages: - updated: "&aA nyelvet sikeresen átállítottad erre: &b%lang%" - translations: - name: "&aHiányzik valami?" - lore: Kattints a saját fordítás hozzáadásához - select: Kattints a nyelv kiválasztásához - select-default: Kattints az alapértelmezett nyelv kiválasztásához - title: - main: Slimefun Útmutató - settings: Beállítások és Információk - languages: Válaszd ki a kívánt nyelvet - credits: Slimefun4 Közreműködők credits: commit: Commit + commits: Commits + profile-link: Kattints ide, hogy meglátogasd a profilját a GitHub-on roles: developer: "&6Fejlesztő" - wiki: "&3Wiki Szerkesztő" resourcepack: "&cForráscsomag Művész" translator: "&9Fordító" - profile-link: Kattints ide, hogy meglátogasd a profilját a GitHub-on - commits: Commits + wiki: "&3Wiki Szerkesztő" + languages: + select: Kattints a nyelv kiválasztásához + select-default: Kattints az alapértelmezett nyelv kiválasztásához + translations: + lore: Kattints a saját fordítás hozzáadásához + name: "&aHiányzik valami?" + updated: "&aA nyelvet sikeresen átállítottad erre: &b%lang%" + selected-language: 'Jelenleg kiválasztva:' pages: - previous: Előző oldal next: Következő oldal -messages: - not-researched: "&4Nincs elég ismereted ennek a megértéséhez" - not-enough-xp: "&4Nincs elég XP-d ennek a feloldásához" - unlocked: '&7"%research%" &bfeloldva' - only-players: "&4Ez a parancs csak a Játékosok számára szól" - unknown-player: "&4Ismeretlen Játékos: &c%player%" - no-permission: "&4Nem rendelkezel a szükséges engedélyekkel ehhez" - usage: "&4Használat: &c%usage%" - not-online: "&4%player% &cnincs online!" - not-valid-item: "&4%item% &cnem megfelelő Tárgy!" - not-valid-amount: "&4%amount% &cnem megfelelő mennyiség : 0-nál nagyobbnak kell - lennie!" - given-item: '&bKaptál &a%amount% &7"%item%&7"&b-t' - give-item: '&bAdtál %player%-nek/nak &a%amount% &7"%item%&7"&b-t' - not-valid-research: "&4%research% &cnem érvényes Kutatás!" - give-research: '&bAdtál %player%-nek/nak &7"%research%&7" &bKutatást' - hungry: "&cTúl éhes vagy ehhez!" - mode-change: "&b%device% mód állítva erre: &9%mode%" - disabled-in-world: "&4&lEz a Tárgy tiltva van ebben a világban" - disabled-item: "&4&lEz a Tárgy le van tiltva! Egyáltalán hogyan szerezted?" - no-tome-yourself: "&cNem tudod használni a &4Tome of Knowledge &c-t magadon..." - multimeter: "&bTárolt Energia: &3%stored% &b/ &3%capacity%" - talisman: - anvil: "&a&oA Talizmánod megmentette az eszközöd a töréstől" - miner: "&a&oA Talizmánod megduplázta a dobott tárgyakat" - hunter: "&a&oA Talizmánod megduplázta a dobott tárgyakat" - lava: "&a&oA Talizmánod megmentett a halálos égéstől" - water: "&a&oA Talizmánod megmentett a fulladástól" - angel: "&a&oA Talizmánod megmentett a zuhanási sérüléstől" - fire: "&a&oA Talizmánod megmentett a halálra elégéstől" - magician: "&a&oA Talizmánod adott további Fejlesztéseket is" - traveller: "&a&oA Talizmánod Gyors sebességet adott neked" - warrior: "&a&oA Talizmánodtól növelte az Erőd egy kis időre" - knight: "&a&oA Talizmánod adott 5 Másodpercre élet Regenerációt" - whirlwind: "&a&oA Talizmánod visszavert egy Távolsági lövést" - wizard: "&a&oA Talizmánod erősítette a Szerencse Szinjét, de néhány egyéb Fejlesztés - Szint kicsit gyengül" - soulbound-rune: - fail: "&cEgyszerre csak egy tárgyat köthetsz a lelkedhez." - success: "&aSikeresen hozzákötötted ezt a tárgyat a lelkedhez! Megmarad, amikor - meghalsz." - research: - start: "&7Az Ősi Lelkek titokzatos szavakat súgnak a füledbe!" - progress: "&7Elkezdel kíváncsiskodni a kutatásról, neve: &b%research% &e(%progress%)" - fire-extinguish: "&7Eloltottad magad!" - cannot-place: "&cNem teheted ezt a blokkot oda!" - no-pvp: "&cA pvp itt nem engedélyezett!" - radiation: "&4Halálos sugárzásnak vagy kitéve! &cSzabadulj meg a radioaktív tárgytól, - vagy viselj Hazmat Suit-ot!" - opening-guide: "&bÚtmutató megnyitása, ez eltarthat pár másodpercig..." - opening-backpack: "&bHátizsák megnyitása, ez eltarthat pár másodpercig..." - no-iron-golem-heal: "&cEz nem egy Vasrúd. Ezt nem használhatod a Vasgólem gyógyítására!" - link-prompt: "&eKattints ide:" - diet-cookie: "&eNagyon könnyednek érzed magad..." - fortune-cookie: - - "&7Segítség, csapdába estem egy Szerencsesüti Gyárban!" - - "&7Holnap meghalsz... egy Creeper által" - - "&7Valamikor az életedben valami rossz fog történni!!!" - - "&7A következő héten észreveszed, hogy ez nem az igazi világ, hanem egy számítógépes - játékban vagy" - - "&7Ez a süti néhány másodperc alatt jó ízű lesz" - - '&7Az utolsó szó, amelyet hallani fogsz, "KIÍRTANI!!!"' - - "&7Bármit is teszel, ne ölelj meg egy Creepert... Kipróbáltam. Jó érzés, de nem - éri meg." - - "&742. A válasz 42." - - "&7Walshy egy nap távol tartja a bajokat." - - "&7Soha ne áss egyenesen!" + previous: Előző oldal + search: + lore: + - "&bMit szeretnél keresni?" + - "&7Gépeld be a keresett kifejezést a chatbe" + message: "&bMit szeretnél keresni?" + name: "&7Keresés..." + title: + credits: Slimefun4 Közreműködők + languages: Válaszd ki a kívánt nyelvet + main: Slimefun Útmutató + settings: Beállítások és Információk + wiki: Slimefun4 Wiki + addons: A Slimefun4 kiegészítői + bugs: Hibajelentések + tooltips: + open-category: Kattints a megnyitáshoz + versions-notice: Ezek nagyon fontosak a hibák jelentésekor! +inventory: + no-access: "&4Nincs hozzáférésed ehhez a blokkhoz" +languages: + cs: Cseh + de: Német + default: Szerver-Alapértelmezett + en: Angol + es: Spanyol + fr: Francia + hu: Magyar + it: Olasz + lv: Lett + nl: Holland + pl: Lengyel + ru: Orosz + sk: Szlovák + sv: Svéd + vi: Vietnami + zh-TW: Kínai (Tajvan) + id: Indonéz + zh-CN: Kínai (Kína) + el: Görög + he: Héber + pt: Portugál (Portugália) + pt-BR: Portugál (Brazília) machines: - pattern-not-found: "&eSajnálom, nem ismerem fel ezt a Receptet. Kérlek, helyezd - a Tárgyakat a megfelelő mintában az Adagolóba." - unknown-material: "&eSajnálom, Nem tudtam felismerni a Tárgyat az adagolóban. Kérlek - tegyél bele valamit, amit ismerek." - wrong-item: "&eSajnálom, nem ismerem fel azt a Tárgyat, amire kattintottál velem. - Ellenőrizd a Recepteket, és nézd meg, mely Tárgyakat használhatod." - full-inventory: "&eSajnálom, tele a tárolóm!" - in-use: "&cEnnek a Blokknak a tárolóját éppen megnyitotta egy másik Játékos." - ignition-chamber-no-flint: "&cAz Ignition Chamber-ből hiányik a Kovakő és Acél." ANCIENT_ALTAR: not-enough-pedestals: "&4Az Altar körül nincs elég Pedestal, ami szükséges a működéséhez &c(%pedestals% / 8)" @@ -132,103 +147,101 @@ machines: ANCIENT_PEDESTAL: obstructed: "&4A Pedestal el van torlaszolva! &cTávolíts el mindent, ami a pedestal felett van!" - HOLOGRAM_PROJECTOR: - enter-text: "&7Kérlek, írd be a kívánt Hologram Szöveget a Chatbe. &r(A színkódok - is használhatóak!)" + CARGO_NODES: + must-be-placed: "&4Ládára vagy gépre kell helyezni!" ELEVATOR: - no-destinations: "&4Nem található úticél" - pick-a-floor: "&3- Válassz emeletet -" - current-floor: "&eEz az emelet, amelyen jelenleg tartózkodik:" click-to-teleport: "&eKattints &7erre az emeletre való teleportáláshoz:" + current-floor: "&eEz az emelet, amelyen jelenleg tartózkodik:" enter-name: "&7Kérlek írd be a kívánt emelet nevet a Chatbe. &r(A Színkódok is támogatottak!)" named: "&2Sikeresen elnevezted ezt az emeletet: &r%floor%" + no-destinations: "&4Nem található úticél" + pick-a-floor: "&3- Válassz emeletet -" + full-inventory: "&eSajnálom, tele a tárolóm!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Kérlek, írd be a kívánt Hologram Szöveget a Chatbe. &r(A színkódok + is használhatóak!)" + ignition-chamber-no-flint: "&cAz Ignition Chamber-ből hiányik a Kovakő és Acél." + in-use: "&cEnnek a Blokknak a tárolóját éppen megnyitotta egy másik Játékos." + pattern-not-found: "&eSajnálom, nem ismerem fel ezt a Receptet. Kérlek, helyezd + a Tárgyakat a megfelelő mintában az Adagolóba." TELEPORTER: - teleporting: "&3Teleportálás..." - teleported: "&3Teleportálva!" cancelled: "&4Teleportálás megszakítva!" invulnerability: "&b&l30 másodperc Sérthetetlenséget kaptál!" - CARGO_NODES: - must-be-placed: "&4Ládára vagy gépre kell helyezni!" -anvil: - not-working: "&4Nem használhatsz Slimefun tárgyakat az Üllőben!" -backpack: - already-open: "&cSajnáljuk, ez a Hátizsák valahol máshol már nyitva van!" - no-stack: "&cNem lehet halmozni a Táskákat" + teleported: "&3Teleportálva!" + teleporting: "&3Teleportálás..." + unknown-material: "&eSajnálom, Nem tudtam felismerni a Tárgyat az adagolóban. Kérlek + tegyél bele valamit, amit ismerek." + wrong-item: "&eSajnálom, nem ismerem fel azt a Tárgyat, amire kattintottál velem. + Ellenőrizd a Recepteket, és nézd meg, mely Tárgyakat használhatod." +messages: + cannot-place: "&cNem teheted ezt a blokkot oda!" + diet-cookie: "&eNagyon könnyednek érzed magad..." + disabled-in-world: "&4&lEz a Tárgy tiltva van ebben a világban" + disabled-item: "&4&lEz a Tárgy le van tiltva! Egyáltalán hogyan szerezted?" + fire-extinguish: "&7Eloltottad magad!" + fortune-cookie: + - "&7Segítség, csapdába estem egy Szerencsesüti Gyárban!" + - "&7Holnap meghalsz... egy Creeper által" + - "&7Valamikor az életedben valami rossz fog történni!!!" + - "&7A következő héten észreveszed, hogy ez nem az igazi világ, hanem egy számítógépes + játékban vagy" + - "&7Ez a süti néhány másodperc alatt jó ízű lesz" + - '&7Az utolsó szó, amelyet hallani fogsz, "KIÍRTANI!!!"' + - "&7Bármit is teszel, ne ölelj meg egy Creepert... Kipróbáltam. Jó érzés, de nem + éri meg." + - "&742. A válasz 42." + - "&7Walshy egy nap távol tartja a bajokat." + - "&7Soha ne áss egyenesen!" + give-item: '&bAdtál %player%-nek/nak &a%amount% &7"%item%&7"&b-t' + given-item: '&bKaptál &a%amount% &7"%item%&7"&b-t' + give-research: '&bAdtál %player%-nek/nak &7"%research%&7" &bKutatást' + hungry: "&cTúl éhes vagy ehhez!" + link-prompt: "&eKattints ide:" + mode-change: "&b%device% mód állítva erre: &9%mode%" + multimeter: "&bTárolt Energia: &3%stored% &b/ &3%capacity%" + no-iron-golem-heal: "&cEz nem egy Vasrúd. Ezt nem használhatod a Vasgólem gyógyítására!" + no-permission: "&4Nem rendelkezel a szükséges engedélyekkel ehhez" + no-pvp: "&cA pvp itt nem engedélyezett!" + not-enough-xp: "&4Nincs elég XP-d ennek a feloldásához" + no-tome-yourself: "&cNem tudod használni a &4Tome of Knowledge &c-t magadon..." + not-online: "&4%player% &cnincs online!" + not-researched: "&4Nincs elég ismereted ennek a megértéséhez" + not-valid-amount: "&4%amount% &cnem megfelelő mennyiség : 0-nál nagyobbnak kell + lennie!" + not-valid-item: "&4%item% &cnem megfelelő Tárgy!" + not-valid-research: "&4%research% &cnem érvényes Kutatás!" + only-players: "&4Ez a parancs csak a Játékosok számára szól" + opening-backpack: "&bHátizsák megnyitása, ez eltarthat pár másodpercig..." + opening-guide: "&bÚtmutató megnyitása, ez eltarthat pár másodpercig..." + radiation: "&4Halálos sugárzásnak vagy kitéve! &cSzabadulj meg a radioaktív tárgytól, + vagy viselj Hazmat Suit-ot!" + research: + progress: "&7Elkezdel kíváncsiskodni a kutatásról, neve: &b%research% &e(%progress%)" + start: "&7Az Ősi Lelkek titokzatos szavakat súgnak a füledbe!" + soulbound-rune: + fail: "&cEgyszerre csak egy tárgyat köthetsz a lelkedhez." + success: "&aSikeresen hozzákötötted ezt a tárgyat a lelkedhez! Megmarad, amikor + meghalsz." + talisman: + angel: "&a&oA Talizmánod megmentett a zuhanási sérüléstől" + anvil: "&a&oA Talizmánod megmentette az eszközöd a töréstől" + fire: "&a&oA Talizmánod megmentett a halálra elégéstől" + hunter: "&a&oA Talizmánod megduplázta a dobott tárgyakat" + knight: "&a&oA Talizmánod adott 5 Másodpercre élet Regenerációt" + lava: "&a&oA Talizmánod megmentett a halálos égéstől" + magician: "&a&oA Talizmánod adott további Fejlesztéseket is" + miner: "&a&oA Talizmánod megduplázta a dobott tárgyakat" + traveller: "&a&oA Talizmánod Gyors sebességet adott neked" + warrior: "&a&oA Talizmánodtól növelte az Erőd egy kis időre" + water: "&a&oA Talizmánod megmentett a fulladástól" + whirlwind: "&a&oA Talizmánod visszavert egy Távolsági lövést" + wizard: "&a&oA Talizmánod erősítette a Szerencse Szinjét, de néhány egyéb Fejlesztés + Szint kicsit gyengül" + unknown-player: "&4Ismeretlen Játékos: &c%player%" + unlocked: '&7"%research%" &bfeloldva' + usage: "&4Használat: &c%usage%" miner: no-ores: "&eSajnálom, nem találtam semmilyen Ércet a közelben!" workbench: not-enhanced: "&4Nem használhatsz Slimefun Tárgyakat normális barkácsasztalban" -gps: - deathpoint: "&4Halálpont &7%date%" - waypoint: - new: "&eKérlek, add meg az új útpontot chatben. &7(A Színkódok használhatóak!)" - added: "&aSikeresen megadtad az útpontot" - max: "&4Elérted a maximális útpontok számát" - insufficient-complexity: - - "&4Nem megfelelő a GPS Hálózat Komplexitása: &c%complexity%" - - "&4a) Még nem telepítetted a GPS Hálózatot" - - "&4b) A GPS Hálózatod nem eléggé összetett" - geo: - scan-required: "&4GEO-Vizsgálat szükséges! &cElőbb vizsgáld meg ezt a chunk-ot - a GEO-Szkennerrel!" -inventory: - no-access: "&4Nincs hozzáférésed ehhez a blokkhoz" -android: - started: "&7Az Androidod folytatja a szkript futtatását" - stopped: "&7Az Androidod szünetelteti a szkript futtatását" - scripts: - already-uploaded: "&4Ezt a szkriptet már feltöltötték." - instructions: - START: "&2Szkript indítása" - REPEAT: "&9Szkript ismétlése" - WAIT: "&eVárjon 0.5s" - GO_FORWARD: "&7Menj előre" - GO_UP: "&7Menj felfelé" - GO_DOWN: "&7Menj lefelé" - TURN_LEFT: "&7Fordulj balra" - TURN_RIGHT: "&7Fordulj jobbra" - DIG_UP: "&bÁss" - DIG_FORWARD: "&bÁss előre" - DIG_DOWN: "&bÁss le" - MOVE_AND_DIG_UP: "&bMenj és Áss felfelé" - MOVE_AND_DIG_FORWARD: "&bMenj és Áss előre" - MOVE_AND_DIG_DOWN: "&bMenj és Áss lefelé" - ATTACK_MOBS_ANIMALS: "&4Támadj &c(Ellenséges Élőlények és Állatok)" - ATTACK_MOBS: "&4Támadj &c(Ellenséges Élőlények)" - ATTACK_ANIMALS: "&4Támadj &c(Állatok)" - ATTACK_ANIMALS_ADULT: "&4Támadj &c(Állatok &7[Felnőtt]&c)" - CHOP_TREE: "&cVágj és Ültess" - CATCH_FISH: "&bFogj Halat" - FARM_FORWARD: "&bSzüretelj és Ültess" - FARM_DOWN: "&bSzüretelj és Ültess &7(Blokk alatt)" - FARM_EXOTIC_FORWARD: "&bFejlett Szüretelés és Ültetés" - FARM_EXOTIC_DOWN: "&bFejlett Szüretelés és Ültetés &7(Blokk alatt)" - INTERFACE_ITEMS: "&9Tegye az Eszköztár Tartalmát a faced Interface-be" - INTERFACE_FUEL: "&cVegyen ki az Üzemanyagot a faced Interface-ből" - enter-name: - - - - "&eKérlek, írd be a szkript nevét" - uploaded: - - "&bFeltöltés..." - - "&aA szkript sikeresen feltöltve!" - rating: - own: "&4Nem értékelheted a saját szkriptedet!" - already: "&4Ezt a szkriptet már értékelted!" -languages: - default: Szerver-Alapértelmezett - en: Angol - de: Német - fr: Francia - it: Olasz - es: Spanyol - pl: Lengyel - sv: Svéd - nl: Holland - cs: Cseh - hu: Magyar - lv: Lett - ru: Orosz - sk: Szlovák - zh-TW: Kínai (Tajvan) - vi: Vietnami diff --git a/src/main/resources/languages/messages_it.yml b/src/main/resources/languages/messages_it.yml index be357aea19..67c33dfa55 100644 --- a/src/main/resources/languages/messages_it.yml +++ b/src/main/resources/languages/messages_it.yml @@ -1,126 +1,187 @@ --- +android: + scripts: + already-uploaded: "&4Questo script è già stato caricato." + enter-name: + - + - "&ePer favore, inserisci un nome per il tuo script" + instructions: + ATTACK_ANIMALS: "&4Attacca &c (Animali)" + ATTACK_ANIMALS_ADULT: "&4Attacca &c (Animali &7 [Adulto] &c)" + ATTACK_MOBS: "&4 Attacca &c (Mob ostili)" + ATTACK_MOBS_ANIMALS: "&4attacca &c (Mobs e animali ostili)" + CATCH_FISH: "&bPesca" + CHOP_TREE: "&cTaglia e ripianta" + DIG_DOWN: "&bScava in basso" + DIG_FORWARD: "&bScava avanti" + DIG_UP: "&bScava verso l'alto" + FARM_DOWN: "&bRaccoglie e ripianta &7 (Blocco sottostante)" + FARM_EXOTIC_DOWN: "&bAvanzato Raccoglie e ripianta &7 (Blocco sottostante)" + FARM_EXOTIC_FORWARD: "&bAvanzato Raccoglie e ripianta" + FARM_FORWARD: "&bRaccoglie e ripianta" + GO_DOWN: "&7Si muove verso il basso" + GO_FORWARD: "&7Si muove avanti" + GO_UP: "&7Si muove verso l'alto" + INTERFACE_FUEL: "&cAspira Carbunante dall'interfaccia di fronte" + INTERFACE_ITEMS: "&9Spinge i Contenuti dell'inventario all'interfaccia di fronte" + MOVE_AND_DIG_DOWN: "&bSi muove e scava verso il basso" + MOVE_AND_DIG_FORWARD: "&bSi muove e scava avanti" + MOVE_AND_DIG_UP: "&bSi muove e scava verso l'alto" + REPEAT: "&9Ripeti script" + START: "&2Inizia Script" + TURN_LEFT: "&7Svolta a sinistra" + TURN_RIGHT: "&7Svolta a destra" + WAIT: "&eAspetta 0,5 s" + rating: + already: "&4Hai già lasciato una valutazione per questo script!" + own: "&4Non puoi valutare il tuo script!" + uploaded: + - "&bCaricamento..." + - "&aHai caricato correttamente il tuo script!" + started: "&7Il tuo Android ha ripreso a eseguire il suo script" + stopped: "&7Il tuo Android ha messo in pausa il suo script" +anvil: + not-working: "&4Non puoi usare gli oggetti Slimefun in un'incudine!" +backpack: + already-open: "&cSpiacente, questo zaino è aperto altrove!" + no-stack: "&cNon puoi impilare zaini" commands: - help: Visualizza questa schermata di aiuto - give: Dai a qualcuno alcuni oggetti Slimefun cheat: Ti permette di cheattare items + give: Dai a qualcuno alcuni oggetti Slimefun guide: Ti dà una guida della Slimefun - timings: Ti offre le informazioni sul lag nel tuo server - teleporter: Vedi i Waypoints degli altri players - versions: Elenca tutti gli Addons - search: Cerca nella tua Guida il termine dato + help: Visualizza questa schermata di aiuto open_guide: Apre la guida della Slimefun senza usare il libro guida - stats: Mostra alcune delle statistiche di un Player research: description: Sblocca o Resetta le ricerche per un player reset: "&cHai resettato la conoscenza di %player%" reset-target: "&cLa tua conoscenza è stata resettata" + search: Cerca nella tua Guida il termine dato + stats: Mostra alcune delle statistiche di un Player + teleporter: Vedi i Waypoints degli altri players + timings: Ti offre le informazioni sul lag nel tuo server + versions: Elenca tutti gli Addons +gps: + deathpoint: "&4Punto di morte 7%date%" + geo: + scan-required: "&4GEO-Scanner richiesto! &cScannerizza questo pezzo usando prima + uno scanner GEO!" + insufficient-complexity: + - "&4 Complessità della rete GPS insufficiente: &c.%complexity%" + - "&4a) Non hai ancora una configurazione di rete GPS" + - "&4b) La tua rete GPS non è abbastanza complessa" + waypoint: + added: "&aHa aggiunto con successo un nuovo waypoint" + max: "&4È stato raggiunto il numero massimo di waypoint" + new: "&eSi prega di digitare un nome per il nuovo waypoint nella chat. &7 (Codici + colore supportati!)" guide: - title: - settings: Impostazioni e informazioni - languages: Seleziona la tua lingua preferita - credits: Collaboratori di Slimefun4 - main: Guida della Slimefun - search: - message: "&bChe cosa vuoi cercare?" - name: "&7Ricerca..." - lore: - - "&bChe cosa vuoi cercare?" - - "&7Digita il termine di ricerca in chat" cheat: no-multiblocks: "&4Non puoi cheattare in Multiblocchi, devi costruirli!" - languages: - updated: "&aLa tua lingua è stata impostata correttamente su: &b%lang%" - translations: - name: "&aC'è qualcosa che manca?" - lore: Clicca per aggiungere la tua traduzione - select: Clicca per selezionare questa lingua - select-default: Clicca per selezionare la lingua predefinita credits: + commit: Contributo commits: Contributi + profile-link: Clicca per visitare i loro profili su GitHub roles: developer: "&6Developer" - wiki: "&3Wiki Editor" resourcepack: "&cResourcepack Artist" translator: "&9Translator" - profile-link: Clicca per visitare i loro profili su GitHub - commit: Contributo + wiki: "&3Wiki Editor" + languages: + select: Clicca per selezionare questa lingua + select-default: Clicca per selezionare la lingua predefinita + translations: + lore: Clicca per aggiungere la tua traduzione + name: "&aC'è qualcosa che manca?" + updated: "&aLa tua lingua è stata impostata correttamente su: &b%lang%" + selected-language: 'In questo momento stai selezionando:' pages: - previous: Pagina precedente next: Pagina successiva + previous: Pagina precedente + search: + lore: + - "&bChe cosa vuoi cercare?" + - "&7Digita il termine di ricerca in chat" + message: "&bChe cosa vuoi cercare?" + name: "&7Ricerca..." + title: + credits: Collaboratori di Slimefun4 + languages: Seleziona la tua lingua preferita + main: Guida della Slimefun + settings: Impostazioni e informazioni + wiki: Slimefun4 Wiki + addons: Addons per Slimefun4 + bugs: Bug Reports + tooltips: + open-category: Clicca per aprire + versions-notice: Questi sono molto importanti quando stai reportando dei bugs! +inventory: + no-access: "&4Non ti è permesso accedere a questo blocco" languages: - default: Server predefinito + cs: Ceco de: Tedesco + default: Server predefinito en: Inglese - fr: Francese - it: Italiano es: Spagnolo - pl: Polacco - sv: Svedese - nl: Olandese - cs: Ceco + fr: Francese hu: Ungherese + it: Italiano lv: Lettone + nl: Olandese + pl: Polacco ru: Russo sk: Slovacco - zh-TW: Cinese (Taiwan) + sv: Svedese vi: Vietnamese + zh-TW: Cinese (Taiwan) + id: Indonesiano + zh-CN: Cinese (Cina) + el: Greco + he: Ebreo + pt: Portoghese (Portogallo) + pt-BR: |- + Portoghese + (Brasile) +machines: + ANCIENT_ALTAR: + not-enough-pedestals: "&4L'altare non è circondato dalla quantità necessaria di + piedistalli &c (%pedestals% / 8)" + unknown-catalyst: "&4Catalizzatore sconosciuto! &cUsa invece la ricetta corretta!" + unknown-recipe: "&4Ricetta sconosciuta! &cUsa invece la ricetta corretta!" + ANCIENT_PEDESTAL: + obstructed: "&4Il piedistallo è ostruito! &cRimuovi qualsiasi cosa sopra il piedistallo!" + CARGO_NODES: + must-be-placed: "&4Deve essere posizionato su una cassa o una macchina!" + ELEVATOR: + click-to-teleport: "&eClick &7per teletrasportarti su questo piano:" + current-floor: "&eQuesto è il piano su cui ti trovi attualmente:" + enter-name: "&7Si prega di inserire il nome del piano desiderato nella chat. &r + (i codici colore sono supportati!)" + named: "&2Successivamente chiamato questo piano: &r%floor%" + no-destinations: "&4Nessuna destinazione trovata" + pick-a-floor: "&3- Scegli un piano -" + full-inventory: "&eScusa, il mio inventario è troppo pieno!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Si prega di inserire il testo dell'ologramma desiderato nella chat. + &r (i codici colore sono supportati!)" + ignition-chamber-no-flint: "&cCamera di combustione mancante acciarino." + in-use: "&cQuesto inventario di questo blocco è attualmente aperto da un altro giocatore." + pattern-not-found: "&eScusa, non sono riuscito a riconoscere questa ricetta. Si + prega di posizionare gli items nel modello corretto nel distributore." + TELEPORTER: + cancelled: "&4Il teletrasporto è stato annullato!" + invulnerability: "&b&lTi sono stati dati 30 secondi di Invulnerabilità!" + teleported: "&3Teletrasportato!" + teleporting: "&3Teletrasporto ..." + unknown-material: "&eScusa, non sono riuscito a riconoscere l'item nel mio distributore. + Per favore, metti qualcosa in quello che so." + wrong-item: "&eScusa, non sono riuscito a riconoscere l'item con cui mi hai cliccato + con il tasto destro. Controlla le ricette e vedi quali oggetti puoi usare." messages: - not-researched: "&4Non hai abbastanza conoscenze per capirlo" - not-enough-xp: "&4Non hai abbastanza EXP per sbloccarlo" - unlocked: '&bHai sbloccato &7 "%research%"' - only-players: "&4Questo comando è solo per i players" - unknown-player: "&4Player Sconosciuto: &c%player%" - no-permission: "&4Non hai i permessi necessari per farlo" - usage: "&4Utilizzo: &c%usage%" - not-online: "&4%player% &cnon è online!" - not-valid-item: "&4%item% &cnon è un item valido!" - not-valid-amount: "&4%amount% &cnon è una valida quantità: deve essere maggiore - di 0!" - given-item: '&bTi è stato dato &a%amount% &7 "%item% &7"' - give-item: '&bHai dato a %player% &a%amount% &7 "%item% &7"' - not-valid-research: "&4%research% &cnon è una ricerca valida!" - give-research: '&bHai dato a %player% la ricerca &7 "%research% &7"' - hungry: "&cSei troppo affamato per farlo!" - mode-change: "&d%device% modalità modificata in: &9%mode%" + cannot-place: "&cNon puoi piazzare quel blocco qui!" + diet-cookie: "&e stai iniziando a sentirti molto leggero ..." disabled-in-world: "&4&lQuesto oggetto è stato disattivato in questo mondo" disabled-item: "&4& lQuesto oggetto è stato disabilitato! Come l'hai persino ottenuto?" - no-tome-yourself: "&cNon puoi utilizzare il &4Tomo della conoscienza &c su te stesso - ..." - multimeter: "&bEnergia salvata: &3%stored% &b/&3%capacity%" - talisman: - anvil: "&a&oIl tuo Talismano ha salvato il tuo strumento dalla rottura" - miner: "&a&oIl tuo Talismano ha appena raddoppiato i tuoi drops" - hunter: "&a&oIl tuo Talismano ha appena raddoppiato i tuoi drops" - lava: "&a&oIl tuo Talismano ti ha salvato dalla combustione alla morte" - water: "&a&oIl tuo Talismano ti ha salvato dall'annegamento" - angel: "&a&oIl tuo Talismano ti ha salvato dal subire danni da caduta" - fire: "&a&oIl tuo Talismano ti ha salvato dalla combustione alla morte" - magician: "&a&oIl tuo Talismano ti ha dato un ulteriore incantesimo" - traveller: "&a&oIl tuo Talismano ti ha dato uno Speed Boost" - warrior: "&a&oIl tuo Talismano ha migliorato la tua Forza per un po '" - knight: "&a&oIl tuo Talismano ti ha dato 5 secondi di rigenerazione" - whirlwind: "&a&oIl tuo Talismano ha riflettuto il proiettile" - wizard: "&a&oIl tuo Talismano ti ha dato un livello di fortuna migliore, ma forse - ha anche abbassato alcuni altri livelli di incantesimo" - soulbound-rune: - fail: "&cPuoi legare un solo oggetto alla tua anima alla volta." - success: "&aHai legato con successo questo oggetto alla tua anima! Lo manterrai - quando morirai." - research: - start: "&7Gli Spiriti Antichi ti sussurrano parole misteriose nell'orecchio!" - progress: "&7Inizi a chiederti su &b%research% &e(%progress%)" fire-extinguish: "&7Hai spento le tue fiamme" - cannot-place: "&cNon puoi piazzare quel blocco qui!" - no-pvp: "&cNon puoi fare pvp qui!" - radiation: "&4Sei stato esposto a radiazioni mortali! &cSbarazzati dell'item radioattivo - o equipaggia la tuta completa di hazmat!" - opening-guide: "&bAprendo la guida, potrebbero essere necessari alcuni secondi ..." - opening-backpack: "&bAprendo lo zaino, potrebbero essere necessari alcuni secondi - ..." - no-iron-golem-heal: "&cQuesto non è un lingotto di ferro. Non puoi usarlo per curare - i Golem di ferro!" - link-prompt: "&eClicca qui:" - diet-cookie: "&e stai iniziando a sentirti molto leggero ..." fortune-cookie: - "&7Aiutami, sono intrappolato in una fabbrica di biscotti della fortuna!" - "&7Morirai domani ... da un Creeper" @@ -134,104 +195,58 @@ messages: - "&742. La risposta è 42" - "&7Un Walshy al giorno leva i problemi di torno" - "&7Non scavare mai verso il basso!" -machines: - pattern-not-found: "&eScusa, non sono riuscito a riconoscere questa ricetta. Si - prega di posizionare gli items nel modello corretto nel distributore." - unknown-material: "&eScusa, non sono riuscito a riconoscere l'item nel mio distributore. - Per favore, metti qualcosa in quello che so." - wrong-item: "&eScusa, non sono riuscito a riconoscere l'item con cui mi hai cliccato - con il tasto destro. Controlla le ricette e vedi quali oggetti puoi usare." - full-inventory: "&eScusa, il mio inventario è troppo pieno!" - in-use: "&cQuesto inventario di questo blocco è attualmente aperto da un altro giocatore." - ignition-chamber-no-flint: "&cCamera di combustione mancante acciarino." - ANCIENT_ALTAR: - not-enough-pedestals: "&4L'altare non è circondato dalla quantità necessaria di - piedistalli &c (%pedestals% / 8)" - unknown-catalyst: "&4Catalizzatore sconosciuto! &cUsa invece la ricetta corretta!" - unknown-recipe: "&4Ricetta sconosciuta! &cUsa invece la ricetta corretta!" - ANCIENT_PEDESTAL: - obstructed: "&4Il piedistallo è ostruito! &cRimuovi qualsiasi cosa sopra il piedistallo!" - HOLOGRAM_PROJECTOR: - enter-text: "&7Si prega di inserire il testo dell'ologramma desiderato nella chat. - &r (i codici colore sono supportati!)" - ELEVATOR: - no-destinations: "&4Nessuna destinazione trovata" - pick-a-floor: "&3- Scegli un piano -" - current-floor: "&eQuesto è il piano su cui ti trovi attualmente:" - click-to-teleport: "&eClick &7per teletrasportarti su questo piano:" - enter-name: "&7Si prega di inserire il nome del piano desiderato nella chat. &r - (i codici colore sono supportati!)" - named: "&2Successivamente chiamato questo piano: &r%floor%" - TELEPORTER: - teleporting: "&3Teletrasporto ..." - teleported: "&3Teletrasportato!" - cancelled: "&4Il teletrasporto è stato annullato!" - invulnerability: "&b&lTi sono stati dati 30 secondi di Invulnerabilità!" - CARGO_NODES: - must-be-placed: "&4Deve essere posizionato su una cassa o una macchina!" -anvil: - not-working: "&4Non puoi usare gli oggetti Slimefun in un'incudine!" -backpack: - already-open: "&cSpiacente, questo zaino è aperto altrove!" - no-stack: "&cNon puoi impilare zaini" + give-item: '&bHai dato a %player% &a%amount% &7 "%item% &7"' + given-item: '&bTi è stato dato &a%amount% &7 "%item% &7"' + give-research: '&bHai dato a %player% la ricerca &7 "%research% &7"' + hungry: "&cSei troppo affamato per farlo!" + link-prompt: "&eClicca qui:" + mode-change: "&d%device% modalità modificata in: &9%mode%" + multimeter: "&bEnergia salvata: &3%stored% &b/&3%capacity%" + no-iron-golem-heal: "&cQuesto non è un lingotto di ferro. Non puoi usarlo per curare + i Golem di ferro!" + no-permission: "&4Non hai i permessi necessari per farlo" + no-pvp: "&cNon puoi fare pvp qui!" + not-enough-xp: "&4Non hai abbastanza EXP per sbloccarlo" + no-tome-yourself: "&cNon puoi utilizzare il &4Tomo della conoscienza &c su te stesso + ..." + not-online: "&4%player% &cnon è online!" + not-researched: "&4Non hai abbastanza conoscenze per capirlo" + not-valid-amount: "&4%amount% &cnon è una valida quantità: deve essere maggiore + di 0!" + not-valid-item: "&4%item% &cnon è un item valido!" + not-valid-research: "&4%research% &cnon è una ricerca valida!" + only-players: "&4Questo comando è solo per i players" + opening-backpack: "&bAprendo lo zaino, potrebbero essere necessari alcuni secondi + ..." + opening-guide: "&bAprendo la guida, potrebbero essere necessari alcuni secondi ..." + radiation: "&4Sei stato esposto a radiazioni mortali! &cSbarazzati dell'item radioattivo + o equipaggia la tuta completa di hazmat!" + research: + progress: "&7Inizi a chiederti su &b%research% &e(%progress%)" + start: "&7Gli Spiriti Antichi ti sussurrano parole misteriose nell'orecchio!" + soulbound-rune: + fail: "&cPuoi legare un solo oggetto alla tua anima alla volta." + success: "&aHai legato con successo questo oggetto alla tua anima! Lo manterrai + quando morirai." + talisman: + angel: "&a&oIl tuo Talismano ti ha salvato dal subire danni da caduta" + anvil: "&a&oIl tuo Talismano ha salvato il tuo strumento dalla rottura" + fire: "&a&oIl tuo Talismano ti ha salvato dalla combustione alla morte" + hunter: "&a&oIl tuo Talismano ha appena raddoppiato i tuoi drops" + knight: "&a&oIl tuo Talismano ti ha dato 5 secondi di rigenerazione" + lava: "&a&oIl tuo Talismano ti ha salvato dalla combustione alla morte" + magician: "&a&oIl tuo Talismano ti ha dato un ulteriore incantesimo" + miner: "&a&oIl tuo Talismano ha appena raddoppiato i tuoi drops" + traveller: "&a&oIl tuo Talismano ti ha dato uno Speed Boost" + warrior: "&a&oIl tuo Talismano ha migliorato la tua Forza per un po '" + water: "&a&oIl tuo Talismano ti ha salvato dall'annegamento" + whirlwind: "&a&oIl tuo Talismano ha riflettuto il proiettile" + wizard: "&a&oIl tuo Talismano ti ha dato un livello di fortuna migliore, ma forse + ha anche abbassato alcuni altri livelli di incantesimo" + unknown-player: "&4Player Sconosciuto: &c%player%" + unlocked: '&bHai sbloccato &7 "%research%"' + usage: "&4Utilizzo: &c%usage%" miner: no-ores: "&eScusa, non sono riuscito a trovare nessun minerale nelle vicinanze!" workbench: not-enhanced: "&4Non puoi usare gli item Slimefun in un normale banco di lavoro" -gps: - deathpoint: "&4Punto di morte 7%date%" - waypoint: - new: "&eSi prega di digitare un nome per il nuovo waypoint nella chat. &7 (Codici - colore supportati!)" - added: "&aHa aggiunto con successo un nuovo waypoint" - max: "&4È stato raggiunto il numero massimo di waypoint" - insufficient-complexity: - - "&4 Complessità della rete GPS insufficiente: &c.%complexity%" - - "&4a) Non hai ancora una configurazione di rete GPS" - - "&4b) La tua rete GPS non è abbastanza complessa" - geo: - scan-required: "&4GEO-Scanner richiesto! &cScannerizza questo pezzo usando prima - uno scanner GEO!" -inventory: - no-access: "&4Non ti è permesso accedere a questo blocco" -android: - started: "&7Il tuo Android ha ripreso a eseguire il suo script" - stopped: "&7Il tuo Android ha messo in pausa il suo script" - scripts: - already-uploaded: "&4Questo script è già stato caricato." - instructions: - START: "&2Inizia Script" - REPEAT: "&9Ripeti script" - WAIT: "&eAspetta 0,5 s" - GO_FORWARD: "&7Si muove avanti" - GO_UP: "&7Si muove verso l'alto" - GO_DOWN: "&7Si muove verso il basso" - TURN_LEFT: "&7Svolta a sinistra" - TURN_RIGHT: "&7Svolta a destra" - DIG_UP: "&bScava verso l'alto" - DIG_FORWARD: "&bScava avanti" - DIG_DOWN: "&bScava in basso" - MOVE_AND_DIG_UP: "&bSi muove e scava verso l'alto" - MOVE_AND_DIG_FORWARD: "&bSi muove e scava avanti" - MOVE_AND_DIG_DOWN: "&bSi muove e scava verso il basso" - ATTACK_MOBS_ANIMALS: "&4attacca &c (Mobs e animali ostili)" - ATTACK_MOBS: "&4 Attacca &c (Mob ostili)" - ATTACK_ANIMALS: "&4Attacca &c (Animali)" - ATTACK_ANIMALS_ADULT: "&4Attacca &c (Animali &7 [Adulto] &c)" - CHOP_TREE: "&cTaglia e ripianta" - CATCH_FISH: "&bPesca" - FARM_FORWARD: "&bRaccoglie e ripianta" - FARM_DOWN: "&bRaccoglie e ripianta &7 (Blocco sottostante)" - FARM_EXOTIC_FORWARD: "&bAvanzato Raccoglie e ripianta" - FARM_EXOTIC_DOWN: "&bAvanzato Raccoglie e ripianta &7 (Blocco sottostante)" - INTERFACE_ITEMS: "&9Spinge i Contenuti dell'inventario all'interfaccia di fronte" - INTERFACE_FUEL: "&cAspira Carbunante dall'interfaccia di fronte" - enter-name: - - - - "&ePer favore, inserisci un nome per il tuo script" - uploaded: - - "&bCaricamento..." - - "&aHai caricato correttamente il tuo script!" - rating: - own: "&4Non puoi valutare il tuo script!" - already: "&4Hai già lasciato una valutazione per questo script!" diff --git a/src/main/resources/languages/messages_pl.yml b/src/main/resources/languages/messages_pl.yml new file mode 100644 index 0000000000..9571e9c9b2 --- /dev/null +++ b/src/main/resources/languages/messages_pl.yml @@ -0,0 +1,247 @@ +--- +android: + scripts: + already-uploaded: "&4Ten skrypt został już przesłany." + enter-name: + - + - "&eProszę wpisać nazwę dla tego skryptu" + instructions: + ATTACK_ANIMALS: "&4Atakuj &c(Zwierzęta)" + ATTACK_ANIMALS_ADULT: "&4Atakuj &c(Zwierzęta &7[Dorosłe]&c)" + ATTACK_MOBS: "&4Atakuj &c(Wrogie Moby)" + ATTACK_MOBS_ANIMALS: "&4Atakuj &c(Wrogie Moby i Zwierzęta)" + CATCH_FISH: "&bŁów ryby" + CHOP_TREE: "&cTnij drzewo i posadź sadzonkę" + DIG_DOWN: "&bKop w dół" + DIG_FORWARD: "&bKop do przodu" + DIG_UP: "&bKop w górę" + FARM_DOWN: "&bZbieraj i posadź spowrotem &7(Blok pod spodem)" + FARM_EXOTIC_DOWN: "&bZaawansowanie zbieraj i posadź spowrotem &7(Blok pod spodem)" + FARM_EXOTIC_FORWARD: "&6Zaawansowanie zbieraj i posadź spowrotem" + FARM_FORWARD: "&bZbieraj i posadź spowrotem" + GO_DOWN: "&7Idź w dół" + GO_FORWARD: "&7Idź do przodu" + GO_UP: "&7Idź do góry" + INTERFACE_FUEL: "&cOtrzymaj paliwo z Interfejsu w obecnym kierunku" + INTERFACE_ITEMS: "&9Wyślij zawartość ekwipunku do Interfejsu w obecnym kierunku" + MOVE_AND_DIG_DOWN: "&bIdź i kop w dół" + MOVE_AND_DIG_FORWARD: "&bIdź i kop do przodu" + MOVE_AND_DIG_UP: "&bIdź i kop w górę" + REPEAT: "&9 Powtórz skrypt" + START: "&2Uruchom skrypt" + TURN_LEFT: "&7Skręć w lewo" + TURN_RIGHT: "&7Skręć w prawo" + WAIT: "&ePoczekaj 0.5s" + rating: + already: "&4Oceniłeś już ten skrypt!" + own: "&4Nie możesz ocenić własnego skryptu!" + uploaded: + - "&bPrzesyłanie..." + - "&aPomyślnie przesłano twój skrypt!" + started: "&7Twój Android wznowił swój skrypt" + stopped: "&7Twój Android wstrzymał swój skrypt" +anvil: + not-working: "&4Nie możesz używać przedmiotów Slimefun w kowadle!" +backpack: + already-open: "&cPrzepraszamy, ten plecak jest otwarty gdzie indziej!" + no-stack: "&cNie możesz stakować plecaków" +commands: + give: Daj graczowi przedmioty Slimefun + guide: Daje ci przewodnik Slimefun + help: Pokazuje ten ekran pomocy + open_guide: Otwiera przewodnik Slimefun bez korzystania z książki + research: + description: Odblokuj/Zresetuj badania dla gracza + reset: "&cZresetowano wiedzę gracza %player%" + reset-target: "&c Twoja wiedza została zresetowana" + search: Przeszukuje twój przewodnik dla podanego terminu + stats: Pokazuje niektóre statystyki dotyczące gracza + teleporter: Zobacz punkty lokalizacji innych graczy + timings: Informacje o opóźnieniu na twoim serwerze + versions: Wyświetla listę wszystkich zainstalowanych dodatków + cheat: Daje graczowi przedmioty Slimefun. +gps: + deathpoint: "&4Punkt śmierci &7%date%" + geo: + scan-required: "&4Wymagany jest skan GEO-Skan! &cNajpierw zeskanuj ten fragment + za pomocą skanera GEO!" + insufficient-complexity: + - "&4Niewystarczająca złożoność sieci GPS: &c%complexity%" + - "&4a) Nie masz jeszcze skonfigurowanej sieci GPS" + - "&4b) Twoja sieć GPS nie jest wystarczająco złożona" + waypoint: + added: "&aPomyślnie dodano nowy punkt trasy" + max: "&4Osiągnięto maksymalną liczbę punktów trasy" + new: "&eProszę wpisać nazwę swojego nowego punktu trasy na czacie. &7(Kody kolorów + są obsługiwane!)" +guide: + cheat: + no-multiblocks: "&4Nie możesz otrzymać Multibloków, musisz je zbudować!" + credits: + commit: Rejestracja zmian + commits: Rejestracje zmian + profile-link: Kliknij, aby odwiedzić ich profil na GitHub + roles: + developer: "&6Developer" + resourcepack: "&cArtysta paczki zasobów" + translator: "&9Tłumacz" + wiki: "&3Edytor Wiki" + languages: + select: Kliknij, aby wybrać ten język + select-default: Kliknij, aby wybrać domyślny język + selected-language: 'Aktualnie wybrane:' + translations: + lore: Kliknij, aby dodać własne tłumaczenie + name: "&aCzegoś brakuje?" + updated: "&aTwój język został pomyślnie ustawiony na: &b%lang%" + pages: + next: Kolejna strona + previous: Poprzednia strona + search: + lore: + - "&bCo chcesz wyszukać?" + - "&7Wpisz wyszukiwane hasło na czacie" + message: "&bCo chcesz wyszukać?" + name: "&7Szukaj..." + title: + addons: Dodatki dla Slimefun4 + bugs: Zgłaszanie błędów + credits: Autorzy Slimefun4 + languages: Wybierz preferowany język + main: Przewodnik Slimefun + settings: Ustawienia i informacje + wiki: Wiki Slimefun4 + tooltips: + open-category: Kliknij, aby otworzyć + versions-notice: Jest to bardzo ważne przy zgłaszaniu błędów! +inventory: + no-access: "&4Nie masz dostępu do tego bloku" +languages: + cs: Czeski + de: Niemiecki + default: Domyślny serwera + el: Grecki + en: Język angielski + es: Hiszpański + fr: Francuski + he: Hebrajski + hu: Węgierski + id: Indonezyjski + it: Włoski + lv: Łotewski + nl: Holenderski + pl: Polski + pt: Portugalski (Portugalia) + pt-BR: Portugalski (Brazylia) + ru: Rosyjski + sk: Słowacki + sv: Szwedzki + vi: Wietnamski + zh-CN: Chiński (Chiny) + zh-TW: Chiński (Tajwan) +machines: + ANCIENT_ALTAR: + not-enough-pedestals: "&4Ołtarz nie jest otoczony potrzebną ilością cokołów &c(%pedestals% + / 8)" + unknown-catalyst: "&4Nieznany katalizator! &cZamiast tego użyj prawidłowego przepisu!" + unknown-recipe: "&4Nieznany przepis! &cZamiast tego użyj prawidłowego przepisu!" + ANCIENT_PEDESTAL: + obstructed: "&4Piedestał jest zablokowany! &cUsuń wszystko nad piedestałem!" + CARGO_NODES: + must-be-placed: "&4Musi być umieszczony na skrzyni lub maszynie!" + ELEVATOR: + click-to-teleport: "&eKliknij &7aby teleportować się na to piętro:" + current-floor: "&eTo jest piętro, na którym aktualnie jesteś:" + enter-name: "&7Wprowadź żądaną nazwę piętra na czacie. &r(Kody kolorów są obsługiwane!)" + named: "&2Pomyślnie nazwano podłogę: &r% floor%" + no-destinations: "&4Nie znaleziono miejsc docelowych" + pick-a-floor: "&3- Wybierz piętro-" + full-inventory: "&eEkwipunek jest pełny!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Wprowadź żądany tekst hologramu na czacie. &r(Kody kolorów są obsługiwane!)" + ignition-chamber-no-flint: "&cDo Komory Zapłonowej brakuje Krzesiwa." + in-use: "&cEkwipunek tego bloku jest narazie otworzony przez innego gracza." + pattern-not-found: "&ePrzepraszamy, nie można rozpoznać tego przepisu. Umieść przedmioty + we właściwym wzorze w Dozowniku." + TELEPORTER: + cancelled: "&4Teleportacja anulowana!" + invulnerability: "&b&l Otrzymałeś(-aś) 30 sekund Niewrażliwości!" + teleported: "&3Przeteleportowano!" + teleporting: "&3Teleportuje..." + unknown-material: "&ePrzepraszamy, nie można rozpoznać przedmiotu w tym Dozowniku. + Proszę włożyć coś, co znam." + wrong-item: "&ePrzepraszamy, nie można rozpoznać przedmiotu, którym kliknąłeś(-aś) + mnie prawym przyciskiem myszy. Sprawdź przepisy i zobacz, jakich przedmiotów możesz + użyć." +messages: + cannot-place: "&cNie możesz umieścić tam tego bloku!" + diet-cookie: "&eZaczynasz czuć się bardzo lekko..." + disabled-in-world: "&4&lTen przedmiot został wyłączony na tym świecie" + disabled-item: "&4&l Ten przedmiot został wyłączony! Jak to w ogóle dostałeś(-aś)?" + fire-extinguish: "&7Ty masz zgasły siebie." + fortune-cookie: + - "&7Pomóż mi, jestem uwięziony w fabryce ciastek z wróżbami!" + - "&7Jutro umrzesz... przez Creepera" + - "&7W pewnym momencie w twoim życiu wydarzy się coś złego!" + - "&7W następnym tygodniu zauważysz że to nie jest prawdziwe życie, i że jesteś + w grze komputerowej" + - "&7To ciastko będzie dobrze smakowało za kilka sekund" + - "&7Ostatnim słowem, które usłyszysz, będzie „WYTĘPIĆ!!!”" + - "&7Cokolwiek robisz, nie przytulaj Creepera... Próbowałem. Czuje się dobrze, ale + to nie jest tego warte." + - "&742. Odpowiedź to 42." + - "&7Walshy dziennie pomoże uniknąć kłopotów." + - "&7Nigdy nie kop prosto w dół!" + give-item: '&bDodano przedmiot do plecaka gracza %player%: &a%amount% &7"%item%&7"' + given-item: '&bOtrzymano &a%amount% &7"%item%&7"' + hungry: "&cJesteś zbyt głodny żeby to zrobić!" + link-prompt: "&eKliknij tutaj:" + mode-change: "&bTryb urządzenia %device% został zmieniony na: &9%mode%" + multimeter: "&bZmagazynowana energia: &3%stored% &b/ &3%capacity%" + no-iron-golem-heal: "&cTo nie jest sztabka żelaza. Nie możesz tego użyć do leczenia + Żelaznych Golemów!" + no-permission: "&4Brak uprawnień" + no-pvp: "&c Nie możesz tutaj bić innych graczy!" + not-enough-xp: "&4Nie masz wystarczająco doświadczenia, aby to odblokować" + no-tome-yourself: "&cNie możesz używać &4Księgi wiedzy &cna samym sobie..." + not-online: "&4%player% &cnie jest online!" + not-researched: "&4Nie masz wystarczającej wiedzy, aby to zrozumieć" + not-valid-amount: "&4%amount% &cnie jest prawidłową ilością: ilość musi być większa + od 0!" + not-valid-item: "&4%item% &cnie jest poprawnym przedmiotem!" + not-valid-research: "&4%research% &cnie jest poprawnym Badaniem!" + only-players: "&4To polecenie dotyczy tylko graczy" + opening-backpack: "&bOtwieranie plecaka, może to potrwać kilka sekund..." + opening-guide: "&bOtwieranie przewodnika, może to potrwać kilka sekund..." + radiation: "&4Zostałeś(-aś) narażony na śmiertelne promieniowanie! &c Pozbądź się + radioaktywnego przedmiotu lub załóż kombinezon materiałów niebezpiecznych!" + research: + progress: "&7 Zaczynasz się zastanawiać nad &b%research% &e(%progress%)" + start: "&7Starożytne duchy szepczą ci do ucha tajemnicze słowa!" + soulbound-rune: + fail: "&cMożesz powiązać tylko jeden przedmiot ze swoją duszą na raz." + success: "&aPomyślnie powiązałeś(-aś) ten przedmiot ze swoją duszą! Zatrzymasz + go, gdy umrzesz." + talisman: + angel: "&a&oTwój talizman uratował cię przed odniesieniem obrażeń od upadku" + anvil: "&a&oTwój talizman uratował twoje narzędzie przed złamaniem" + fire: "&a&oTwój talizman uratował cię przed spaleniem na śmierć" + hunter: "&a&oTwój talizman podwoił twoje znaleziska" + knight: "&a&oTwój talizman dał ci 5 sekund regeneracji" + lava: "&a&oTwój talizman uratował cię przed spaleniem na śmierć" + magician: "&a&oTwój talizman dał ci dodatkowe zaklęcie" + miner: "&a&oTwój talizman podwoił twoje znaleziska" + traveller: "&a&oTwój talizman dał ci przyspieszenie prędkości" + warrior: "&a&oTwój talizman na pewien czas poprawił twoją siłę" + water: "&a&oTwój talizman uratował cię przed utonięciem" + whirlwind: "&a&oTwój talizman odbił pocisk" + wizard: "&a&oTwój talizman zapewnił ci lepszy poziom Szczęścia, ale może także + obniżył niektóre inne poziomy zaklinania" + unknown-player: "&4Nieznany gracz: &c%player%" + unlocked: '&bOdblokowano &7"%research%"' + usage: "&4Użycie: &c%usage%" + give-research: '&bOdblokowano badanie &7"%research%&7" dla gracza %player%' +miner: + no-ores: "&eNie można znaleźć żadnych rud w pobliżu!" +workbench: + not-enhanced: "&4Nie można używać przedmiotów Slimefun w zwykłym stole warsztatowym" diff --git a/src/main/resources/languages/messages_ru.yml b/src/main/resources/languages/messages_ru.yml new file mode 100644 index 0000000000..ad77ea3887 --- /dev/null +++ b/src/main/resources/languages/messages_ru.yml @@ -0,0 +1,250 @@ +--- +commands: + help: Вывести это меню помощи + cheat: Войти в режим выдачи предметов + give: Выдать Slimefun предметы + guide: Получить руководство Slimefun + timings: Вывести информацию о нагрузке сервера + teleporter: Просмотреть контрольные точки других игроков + versions: Вывести список установленных дополнений + search: Поиск предметов по заданному запросу + open_guide: Открыть руководство Slimefun + stats: Вывести статистику игрока + research: + reset: "&cВы сбросили исследования для игрока %player%" + reset-target: "&cВаши исследования были сброшены" + description: Выдать или сбросить исследования игрока +guide: + search: + message: "&bЧто бы Вы хотели найти?" + name: "&7Поиск…" + lore: + - "&bЧто бы Вы хотели найти?" + - "&7Введите поисковый запрос в чат" + cheat: + no-multiblocks: "&4Вы не можете выдать себе постройку, она должна быть построена + в мире!" + languages: + updated: "&aВаш язык успешно установлен на: &b%lang%" + translations: + name: "&aЧего-то не хватает?" + lore: Нажмите, чтобы добавить свой перевод + select: Нажмите для выбора этого языка + select-default: Нажмите для выбора языка по умолчанию + selected-language: 'В настоящее время выбрано:' + title: + main: Руководство Slimefun + settings: Информация и настройки + languages: Выберите Ваш предпочитаемый язык + credits: Авторы Slimefun4 + addons: Дополнения к Slimefun4 + bugs: Отчёты об ошибках + wiki: Slimefun4 Вики + credits: + commit: Коммит + commits: Коммитов + roles: + developer: "&6Разработчик" + wiki: "&3Редактор Вики" + resourcepack: "&cТекстурщик" + translator: "&9Локализатор" + profile-link: Нажмите, чтобы посетить GitHub профиль + pages: + previous: Предыдущая страница + next: Следующая страница + tooltips: + versions-notice: Это очень важно, когда Вы сообщаете об ошибках! + open-category: Нажмите, чтобы открыть +messages: + not-researched: "&4Вам не хватает знаний, чтобы понять это" + not-enough-xp: "&4У Вас недостаточно опыта, чтобы исследовать это" + unlocked: '&bВы исследовали &7"%research%"' + only-players: "&4Эта команда предназначена только для игроков" + unknown-player: "&4Неизвестный игрок: &c%player%" + no-permission: "&4У Вас недостаточно прав, чтобы сделать это" + usage: "&4Использование: &c%usage%" + not-online: "&4%player% &cсейчас не в игре!" + not-valid-item: "&4%item% &cне является допустимым предметом!" + not-valid-amount: "&4%amount% &cне является допустимым числом: количество должно + быть больше нуля!" + given-item: '&bВам выдали &a%amount% &7"%item%&7"' + give-item: '&bВы выдали игроку %player% &a%amount% &7"%item%&7"' + not-valid-research: "&4%research% &cне является допустимым исследованием!" + give-research: '&bВы выдали игроку %player% исследование &7"%research%&7"' + hungry: "&cВы слишком голодны для этого!" + mode-change: "&b%device% | Режим изменён на: &9%mode%" + disabled-in-world: "&4&lДанный предмет отключен в этом мире" + disabled-item: "&4&lЭтот предмет был отключен! Где Вы вообще его взяли?" + no-tome-yourself: "&cВы не можете использовать &4том обмена знаниями &cна себе…" + multimeter: "&bНакопленное электричество: &3%stored% &b/ &3%capacity%" + talisman: + anvil: "&a&oВаш талисман сохранил инструмент от поломки" + miner: "&a&oВаш талисман удвоил Ваш дроп" + hunter: "&a&oВаш талисман удвоил Ваш дроп" + lava: "&a&oВаш талисман спас Вас от лавового сжигания до смерти" + water: "&a&oВаш талисман спас Вас от утопления" + angel: "&a&oВаш талисман смягчил урон от падения" + fire: "&a&oВаш талисман спас Вас от сгорания до смерти" + magician: "&a&oВаш талисман прибавил Вам дополнительное зачарование" + traveller: "&a&oВаш талисман повысил Вашу скорость" + warrior: "&a&oВаш талисман повысил Вашу силу на некоторое время" + knight: "&a&oВаш талисман выдал Вам 5 секунд регенерации" + whirlwind: "&a&oВаш талисман отразил снаряд" + wizard: "&a&oТалисман повысил уровень зачарования «Удача», но мог также ухудшить + другие зачарования" + soulbound-rune: + fail: "&cВы можете привязать к себе только один предмет за раз." + success: "&aВы успешно привязали этот предмет к себе! Он останется при Вас после + смерти." + research: + start: "&7Древние духи шепчут загадочные слова в Ваше ухо!" + progress: "&7Вы начинаете задаваться вопросом о &b%research% &e(%progress%)" + fire-extinguish: "&7Вы погасили себя" + cannot-place: "&cВы не можете поставить этот блок здесь!" + no-pvp: "&cВы не можете вступать в PvP здесь!" + radiation: "&4Вы подвергались смертельной радиации! &cИзбавьтесь от всех радиоактивных + предметов или наденьте костюм химзащиты!" + opening-guide: "&bОткрытие руководства, это может занять несколько секунд…" + opening-backpack: "&bОткрытие рюкзака, это может занять несколько секунд…" + no-iron-golem-heal: "&cЭтот предмет не является железным слитком. Его нельзя использовать + для починки железных големов!" + link-prompt: "&eНажмите сюда:" + diet-cookie: "&eВы ощущаете невероятное облегчение…" + fortune-cookie: + - "&7Помоги мне! Я попал в ловушку «Фабрики Печенек Судьбы»!" + - "&7Уже завтра ты умрёшь… от любезного Крипера" + - "&7В какой-то момент Вашей жизни случится что-то плохое!!!" + - "&7На следующей неделе Вы заметите, что это не реальный мир, Вы находитесь в компьютерной + игре" + - "&7Это печенье станет вкусным через несколько секунд" + - '&7Однажды Вы умрёте, а последним словом, которое Вы услышите, будет: "ИСТРЕБИТЬ!!!"' + - "&7Что бы Вы не делали, не обнимайте Крипера… Я попробовал. Это очень приятно, + но того не стоит." + - "&742. Ответ только 42." + - "&7Бед не ждите в этот день – Walshy гонит грусти тень." + - "&7Никогда не копайте под себя!" +machines: + pattern-not-found: "&eК сожалению, не удалось распознать этот рецепт. Пожалуйста, + разложите предметы в верной последовательности в раздатчик." + unknown-material: "&eК сожалению, не удалось распознать предмет в раздатчике. Пожалуйста, + перепроверьте все предметы." + wrong-item: "&eК сожалению, не удалось распознать предмет, которым Вы кликнули. + Проверьте рецепты и посмотрите, какие предметы Вы можете использовать." + full-inventory: "&eК сожалению, инвентарь уже заполнен!" + in-use: "&cИнвентарь этого блока уже открыт другим игроком." + ignition-chamber-no-flint: "&cАвтоматическая камера зажигания не смогла зажечь блок + из-за отсутствия огнива." + ANCIENT_ALTAR: + not-enough-pedestals: "&4Алтарь не окружён необходимым количеством пьедесталов + &c(%pedestals% / 8)" + unknown-catalyst: "&4Неизвестный катализатор! &cИспользуйте правильный рецепт!" + unknown-recipe: "&4Неизвестный рецепт! &cИспользуйте правильный рецепт!" + ANCIENT_PEDESTAL: + obstructed: "&4Что-то мешает! &cУбедитесь, что над пьедесталом ничего нет!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Пожалуйста, введите желаемый текст для голограммы в чат. &r(можно + использовать цветовые коды!)" + ELEVATOR: + no-destinations: "&4Этажи не найдены" + pick-a-floor: "&3- Выберите пункт назначения -" + current-floor: "&eВаш текущий этаж:" + click-to-teleport: "&eНажмите &7для перемещения на этот этаж:" + enter-name: "&7Пожалуйста, введите название для этажа в чат. &r(можно использовать + цветовые коды!)" + named: "&2Этаж успешно переименован: &r%floor%" + TELEPORTER: + teleporting: "&3Телепортация…" + teleported: "&3Телепортирование!" + cancelled: "&4Телепортация отменена!" + invulnerability: "&b&lВы получили 30 секунд неуязвимости!" + CARGO_NODES: + must-be-placed: "&4Должен быть размещён на сундуке или машине!" +anvil: + not-working: "&4Вы не можете использовать Slimefun предметы в наковальне!" +backpack: + already-open: "&cИзвините, этот рюкзак уже открыт в другом месте!" + no-stack: "&cВы не можете складывать рюкзаки вместе" +miner: + no-ores: "&eК сожалению, не удалось найти какую-либо руду поблизости!" +workbench: + not-enhanced: "&4Вы не можете использовать Slimefun предметы в обычном верстаке" +gps: + deathpoint: "&4Точка смерти &7%date%" + waypoint: + new: "&eПожалуйста, введите название новой контрольной точки в чат. &7(можно использовать + цветовые коды!)" + added: "&aКонтрольная точка успешно добавлена" + max: "&4Вы достигли максимального количества контрольных точек" + insufficient-complexity: + - "&4Недостаточная общая сила сигнала GPS сети: &c%complexity%" + - "&4а) Ваша GPS сеть пока что не подключена" + - "&4б) У Вашей GPS сети недостаточная сила сигнала" + geo: + scan-required: "&4Требуется геосканирование! &cПроанализируйте чанк при помощи + GPS-геосканера для начала!" +inventory: + no-access: "&4У Вас нет доступа к этому блоку" +android: + started: "&7Ваш Андроид возобновил работу своего скрипта" + stopped: "&7Ваш Андроид приостановил выполнение своего скрипта" + scripts: + already-uploaded: "&4Этот скрипт уже был загружен." + instructions: + START: "&2Начать работу скрипта" + REPEAT: "&9Повторить скрипт" + WAIT: "&eПодождать 0.5с" + GO_FORWARD: "&7Двинуться вперёд" + GO_UP: "&7Двинуться вверх" + GO_DOWN: "&7Двинуться вниз" + TURN_LEFT: "&7Повернуться налево" + TURN_RIGHT: "&7Повернуться направо" + DIG_UP: "&bКопнуть вверх" + DIG_FORWARD: "&bКопнуть вперёд" + DIG_DOWN: "&bКопнуть вниз" + MOVE_AND_DIG_UP: "&bДвинуться и копнуть вверх" + MOVE_AND_DIG_FORWARD: "&bДвинуться и копнуть вперёд" + MOVE_AND_DIG_DOWN: "&bДвинуться и копнуть вниз" + ATTACK_MOBS_ANIMALS: "&4Атаковать &c(враждебные мобы и скот)" + ATTACK_MOBS: "&4Атаковать &c(враждебные мобы)" + ATTACK_ANIMALS: "&4Атаковать &c(скот)" + ATTACK_ANIMALS_ADULT: "&4Атаковать &c(скот &7[взрослый]&c)" + CHOP_TREE: "&cСрубить и пересадить" + CATCH_FISH: "&bВыловить рыбу" + FARM_FORWARD: "&bСобрать урожай и пересадить" + FARM_DOWN: "&bСобрать урожай и пересадить &7(блок снизу)" + FARM_EXOTIC_FORWARD: "&bПродвинутая сборка урожая и пересадка" + FARM_EXOTIC_DOWN: "&bПродвинутая сборка урожая и пересадка &7(блок снизу)" + INTERFACE_ITEMS: "&9Сложить хранимые предметы в хранилище спереди" + INTERFACE_FUEL: "&cВосполнить топливо из хранилища спереди" + enter-name: + - + - "&eПожалуйста, введите название для Вашего скрипта" + uploaded: + - "&bЗагрузка…" + - "&aВаш скрипт успешно загружен!" + rating: + own: "&4Вы не можете оценить свой скрипт!" + already: "&4Вы уже оценили этот скрипт!" +languages: + default: По умолчанию + en: Английский + de: Немецкий + fr: Французский + it: Итальянский + es: Испанский + pl: Польский + sv: Шведский + nl: Нидерландский + cs: Чешский + hu: Венгерский + lv: Латышский + ru: Русский + sk: Словацкий + zh-TW: Китайский (Тайвань) + vi: Вьетнамский + he: Иврит + id: Индонезийский + zh-CN: Китайский (Китай) + el: Греческий + pt: Португальский (Португалия) + pt-BR: Португальский (Бразилия) diff --git a/src/main/resources/languages/messages_sk.yml b/src/main/resources/languages/messages_sk.yml index e26786f717..a458f22272 100644 --- a/src/main/resources/languages/messages_sk.yml +++ b/src/main/resources/languages/messages_sk.yml @@ -1,97 +1,182 @@ --- +android: + scripts: + already-uploaded: "&4Tento skript už bol nahraný." + enter-name: + - + - "&eProsím napíš meno tvojho skriptu" + instructions: + ATTACK_ANIMALS: "&4Zaútoč &c(Zvieratá)" + ATTACK_ANIMALS_ADULT: "&4Zaútoč &c(Zvieratá &7[dospelé]&c)" + ATTACK_MOBS: "&4Zaútoč &c(nepriateľskí mobovia)" + ATTACK_MOBS_ANIMALS: "&4Zaútoč &c(nepriateľskí mobovia a zvieratá)" + CATCH_FISH: "&bChyť rybu" + CHOP_TREE: "&cVyťaž a zasaď" + DIG_DOWN: "&bKop dole" + DIG_FORWARD: "&bKop dopredu" + DIG_UP: "&bKop hore" + FARM_DOWN: "&bZober a zasaď &7(blok pod sebou)" + FARM_EXOTIC_DOWN: "&bPokročilé zbieranie a sadenie &7(blok pod sebou)" + FARM_EXOTIC_FORWARD: "&bPokročilé zbieranie a sadenie" + FARM_FORWARD: "&bZober a zasaď" + GO_DOWN: "&7Pohyb dole" + GO_FORWARD: "&7Pohyb dopredu" + GO_UP: "&7Pohyb hore" + INTERFACE_FUEL: "&cDoplň palivo z rozhrania pred sebou" + INTERFACE_ITEMS: "&9Vyprázdni svoj inventár do rozhrania pred sebou" + MOVE_AND_DIG_DOWN: "&bPohyb a ťaženie dolu" + MOVE_AND_DIG_FORWARD: "&bPohyb a ťaženie dopredu" + MOVE_AND_DIG_UP: "&bPohyb a ťaženie dohora" + REPEAT: "&9Opakuj skript" + START: "&2Začni skript" + TURN_LEFT: "&7Otoč sa dolava" + TURN_RIGHT: "&7Otoč sa doprava" + WAIT: "&ePočkaj 0.5s" + rating: + already: "&4Už si hodnotil tento skript!" + own: "&4Nemôžeš hodnotiť svoj skript!" + uploaded: + - "&bNahrávam..." + - "&aSkript bol úspešne nahraný!" + started: "&7Tvoj Android pokračuje vo svojom skripte" + stopped: "&7Tvoj Android pauzol svoj skript" +anvil: + not-working: "&4Nemôžeš použiť Slimefun item v kovadline !" +backpack: + already-open: "&cPrepáč, tento batoh je otvorený niekde inde!" + no-stack: "&cNemôžeš stackovať batohy" commands: - help: Zobrazí túto pomocnú stránku - guide: Dá ti Slimefun príručku - teleporter: Pozrite si waypointy iného hráča - stats: Ukáže nejaké štatistiky o hráčovi cheat: Umožňuje cheatovať itemy give: Dajte niekomu nejaký Slimefun item - timings: Lag-Info o tvojom serveri - versions: Zoznam všetkých nainštalovaných doplnkov - search: Vyhľadá vo vašej príručke daný výraz + guide: Dá ti Slimefun príručku + help: Zobrazí túto pomocnú stránku open_guide: Otovrí Slimefun príručku bez použitia knížky. research: description: Odomkne/ Resetuje prieskumy pre hráča reset: "&cResetoval si %player%'s znalosť" reset-target: "&cTvoja znalosť bola resetnutá" + search: Vyhľadá vo vašej príručke daný výraz + stats: Ukáže nejaké štatistiky o hráčovi + teleporter: Pozrite si waypointy iného hráča + timings: Lag-Info o tvojom serveri + versions: Zoznam všetkých nainštalovaných doplnkov +gps: + deathpoint: "&4Miesto smrti &7%date%" + geo: + scan-required: "&4Je potrebný GEO-Scan! &cOskenuj tento chunk pomocou GEO-Scanner + -u!" + insufficient-complexity: + - "&4Nedostatočná veľkosť siete: &c%complexity%" + - "&4a) Nemáš spustenú GPS sieť" + - "&4b)Tvoja GPS sieť nie je dostatočne veľká" + waypoint: + added: "&aÚspešne pridaný nový waypoint" + max: "&4Dosiahol si maximálny počet waypointov" + new: "&eProsím napíš meno pre tvoj nový waypoint do chatu. &7(Kódy farieb sú podporované!)" guide: - search: - name: "&7Hľadať..." - lore: - - "&bČo by si chcel vyhľadať?" - - "&7Napíš čo chceš hľadať do chatu" - message: "&bČo by si chcel vyhľadať?" - title: - main: Slimefun príručka - settings: Nastavenia a informácie - credits: Slimefun4 prispievatelia - languages: Nastav si preferovaný jazyk + cheat: + no-multiblocks: "&4Nemôžeš cheatovať multiblocky, musíš ich postaviť!" credits: commit: Úprava commits: Úprav + profile-link: Klikni pre navštívenie profilu na GitHub-e roles: developer: "&6Vývojár" - wiki: "&3Editor Wiki" resourcepack: "&cNávrhár Resurcepacku" translator: "&9Prekladateľ" - profile-link: Klikni pre navštívenie profilu na GitHub-e - pages: - previous: Predošlá stránka - next: Ďalšia stránka + wiki: "&3Editor Wiki" languages: - translations: - name: "&aNiečo chýba?" - lore: Klikni pre pridanie svojho prekladu select: Klikni pre vybratie tohto jazyka select-default: Klikni pre nastavenie východzieho jazyka + translations: + lore: Klikni pre pridanie svojho prekladu + name: "&aNiečo chýba?" updated: "&aTvoj jazyk bol úspešne nastavený na: &b%lang%" - cheat: - no-multiblocks: "&4Nemôžeš cheatovať multiblocky, musíš ich postaviť!" + selected-language: 'Aktuálne vybrané:' + pages: + next: Ďalšia stránka + previous: Predošlá stránka + search: + lore: + - "&bČo by si chcel vyhľadať?" + - "&7Napíš čo chceš hľadať do chatu" + message: "&bČo by si chcel vyhľadať?" + name: "&7Hľadať..." + title: + credits: Slimefun4 prispievatelia + languages: Nastav si preferovaný jazyk + main: Slimefun príručka + settings: Nastavenia a informácie + wiki: Slimefun4 Wiki + addons: Doplnky pre Slimefun4 + bugs: Report bugov + tooltips: + open-category: Klikni pre otvorenie + versions-notice: Toto je veľmi dôležité pri nahlasovaní bugov! +inventory: + no-access: "&4Nemáš opŕavnenie na otvorenie tohto bloku" +languages: + cs: Čeština + de: Nemčina + default: Východzí jazyk servera + en: Angličtina + es: Španielčina + fr: Francúzština + hu: Maďarčina + it: Taliančina + lv: Lotyština + nl: Holandčina + pl: Poľština + ru: Ruština + sk: Slovenčina + sv: Švédština + vi: Vietnamčina + zh-TW: Čínština (Taiwan) + id: Indonézčina + zh-CN: Čínština (Čína) + el: Gréčtina + he: Hebrejčina + pt: Portugalština (Portugalsko) + pt-BR: Portugalština (Brazília) +machines: + ANCIENT_ALTAR: + not-enough-pedestals: "&4Oltár nie je obkolesený dostatočným počtom podstáv&c(%pedestals% + / 8)" + unknown-catalyst: "&4Neznámy Catalyst! &cPouži správny recept!" + unknown-recipe: "&4Neznámy recept! &cPouži správny recept!" + ANCIENT_PEDESTAL: + obstructed: "&4Podstava je obstavaná! &cOdstráň všetko nad podstavou!" + CARGO_NODES: + must-be-placed: "&4Musí byť položená na truhlu alebo stroj!" + ELEVATOR: + click-to-teleport: "&eKlikni &7pre teleportáciu na toto podlažie:" + current-floor: "&eToto je podlažie na ktorom sa práve nachádzaš:" + enter-name: "&7Prosím zadaj meno pre podlažie do chatu. &r(Kódy farieb sú podporované!)" + named: "&2Úspešne pomenované podlažie:&r%floor%" + no-destinations: "&4Nenájdený žiaden cieľ" + pick-a-floor: "&3- Výber podlažia -" + full-inventory: "&ePrepáč, môj inventár je preplnený!!!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Prosím napíš text pre hologram do chatu. &r(Kódy farieb sú podporované!)" + ignition-chamber-no-flint: "&cV Ignition Chamber chýba zapalovač." + in-use: "&cInventár tohto bloku má aktuálne otvorený iný hráč." + pattern-not-found: "&ePrepáč, nedokážem rozpoznať tento recept. Prosím umiestni + itemy v správnom vzore do dispensera." + TELEPORTER: + cancelled: "&4Teleport zrušený!" + invulnerability: "&b&lSi na 30 sekúnd nezraniteľný!" + teleported: "&3Bol si teleportovaný!" + teleporting: "&3Teleportujem..." + unknown-material: "&ePrepáč, nedokážem rozpoznať item v mojom dispenseri. Prosím + vlož item, ktorý poznám." + wrong-item: "&ePrepáč, nedokážem rozpoznať item s ktorým si na mňa klikol pravým + tlačítkom. Pozri si recepty a pozri, ktoré itemy môžeš použiť." messages: - unlocked: '&bOdomkol si &7"%research%"' - only-players: "&4Tento príkaz je iba pre hráčov" - unknown-player: "&4Neznámy hráč: &c%player%" - not-online: "&4%player% &cnie je online!" - not-valid-item: "&4%item% &cnie je platný item!" - given-item: '&bBolo ti dané &a%amount% &7"%item%&7"' - give-item: '&bDal si %player% &a%amount% &7"%item%&7"' - mode-change: "&b%device% mód zmenený na: &9%mode%" + cannot-place: "&cNemôžeš tam umiestniť blok!" + diet-cookie: "&eZačínaš sa cítiť chudší..." disabled-in-world: "&4&lTento item bol zakázaný v tomto svete" disabled-item: "&4&lTento item bol zakázaný! Ako si ho vôbec dostal ? " - no-tome-yourself: "&cNemôžeš použiť &4Knihu vedomostí &cna seba..." - multimeter: "&bUložená energia: &3%stored% &b/ &3%capacity%" - talisman: - anvil: "&a&oTvoj Talizman zachránil tvoj nástroj pred zničením" - miner: "&a&oTvoj Talizman práve zdvojnásobil tvoj drop" - hunter: "&a&oTvoj Talizman práve zdvojnásobil tvoj drop" - lava: "&a&oTvoj Talizman ťa zachránil pred uhorením" - water: "&a&oTvoj Talizman ťa zachránil pred utopením" - angel: "&a&oTvoj Talizman ťa uchránil pred poškodením z pádu" - fire: "&a&oTvoj Talizman ťa zachránil pred uhorením" - magician: "&a&oTvoj Talizman ti dal Enchant naviac" - traveller: "&a&oTvoj Talizman ťa zrýchlil" - warrior: "&a&oTvoj Talizman ti zvýšil nachvíľu silu " - knight: "&a&oTvoj Talizman ti dal regeneráciu na 5 sekúnd" - whirlwind: "&a&oTvoj Talizman odrazil strelu" - wizard: "&a&oTvoj Talizman ti dal lepší level šťastia ale možno znížil level ostatných - enchantov" - soulbound-rune: - fail: "&cNaraz môžeš spájať iba jeden item s tvojou dušou." - success: "&aÚspešne si si spojil tento item s tvojou dušou! Ostane ti keď zomrieš." - research: - start: "&7Staroveké duše ti šepkajú tajomné slová do ucha!" - progress: "&7Začínaš rozmýšlať o &b%research% &e(%progress%)" fire-extinguish: "&7Uhasil si sa" - cannot-place: "&cNemôžeš tam umiestniť blok!" - no-pvp: "&cTu nemôžeš útočiť na hráčov!" - radiation: "&4Bol si vystavený smrtiacej radiácií &cZbav sa rádioaktívneho itemu - alebo si obleč kompletný hazmat oblek!" - opening-guide: "&bOtváram príručku, môže to trvať pár sekúnd..." - opening-backpack: "&bOtváram batoh, môže to trvať pár sekúnd..." - no-iron-golem-heal: "&cToto nie je železný ingot. Toto nemôžeš použiť na uzdravenie - iron golema!" - link-prompt: "&eKlikni tu:" - diet-cookie: "&eZačínaš sa cítiť chudší..." fortune-cookie: - "&7Pomôž mi, som uväznený v továrni na koláčiky šťastia!" - "&7Umrieš zajtra... creeperom" @@ -105,126 +190,54 @@ messages: - "&742. Odpoveď je 42." - "&7Uteč" - "&7Nikdy nekop priamo pod seba!" - not-researched: "&4Nemáš toľko vedomostí aby si tomu porozumel" - not-enough-xp: "&4Nemáš dostatok XP na odomknutie" + give-item: '&bDal si %player% &a%amount% &7"%item%&7"' + given-item: '&bBolo ti dané &a%amount% &7"%item%&7"' + give-research: '&bDal si hráčovi %player% výskum &7"%research%&7"' + hungry: "&cSte príliš hladní na to!" + link-prompt: "&eKlikni tu:" + mode-change: "&b%device% mód zmenený na: &9%mode%" + multimeter: "&bUložená energia: &3%stored% &b/ &3%capacity%" + no-iron-golem-heal: "&cToto nie je železný ingot. Toto nemôžeš použiť na uzdravenie + iron golema!" no-permission: "& 4Na to nemáte potrebné povolenie" - usage: "&4Použitie: &c%usage%" + no-pvp: "&cTu nemôžeš útočiť na hráčov!" + not-enough-xp: "&4Nemáš dostatok XP na odomknutie" + no-tome-yourself: "&cNemôžeš použiť &4Knihu vedomostí &cna seba..." + not-online: "&4%player% &cnie je online!" + not-researched: "&4Nemáš toľko vedomostí aby si tomu porozumel" not-valid-amount: "&4%amount% &cnie je platné množstvo: Musí byť väčšie ako 0!" + not-valid-item: "&4%item% &cnie je platný item!" not-valid-research: "&4%research% &cnie je platný výskum!" - give-research: '&bDal si hráčovi %player% výskum &7"%research%&7"' - hungry: "&cSte príliš hladní na to!" -machines: - pattern-not-found: "&ePrepáč, nedokážem rozpoznať tento recept. Prosím umiestni - itemy v správnom vzore do dispensera." - unknown-material: "&ePrepáč, nedokážem rozpoznať item v mojom dispenseri. Prosím - vlož item, ktorý poznám." - wrong-item: "&ePrepáč, nedokážem rozpoznať item s ktorým si na mňa klikol pravým - tlačítkom. Pozri si recepty a pozri, ktoré itemy môžeš použiť." - full-inventory: "&ePrepáč, môj inventár je preplnený!!!" - in-use: "&cInventár tohto bloku má aktuálne otvorený iný hráč." - ignition-chamber-no-flint: "&cV Ignition Chamber chýba zapalovač." - ANCIENT_ALTAR: - not-enough-pedestals: "&4Oltár nie je obkolesený dostatočným počtom podstáv&c(%pedestals% - / 8)" - unknown-catalyst: "&4Neznámy Catalyst! &cPouži správny recept!" - unknown-recipe: "&4Neznámy recept! &cPouži správny recept!" - ANCIENT_PEDESTAL: - obstructed: "&4Podstava je obstavaná! &cOdstráň všetko nad podstavou!" - HOLOGRAM_PROJECTOR: - enter-text: "&7Prosím napíš text pre hologram do chatu. &r(Kódy farieb sú podporované!)" - ELEVATOR: - no-destinations: "&4Nenájdený žiaden cieľ" - pick-a-floor: "&3- Výber podlažia -" - current-floor: "&eToto je podlažie na ktorom sa práve nachádzaš:" - click-to-teleport: "&eKlikni &7pre teleportáciu na toto podlažie:" - enter-name: "&7Prosím zadaj meno pre podlažie do chatu. &r(Kódy farieb sú podporované!)" - named: "&2Úspešne pomenované podlažie:&r%floor%" - TELEPORTER: - teleporting: "&3Teleportujem..." - teleported: "&3Bol si teleportovaný!" - cancelled: "&4Teleport zrušený!" - invulnerability: "&b&lSi na 30 sekúnd nezraniteľný!" - CARGO_NODES: - must-be-placed: "&4Musí byť položená na truhlu alebo stroj!" -anvil: - not-working: "&4Nemôžeš použiť Slimefun item v kovadline !" -backpack: - already-open: "&cPrepáč, tento batoh je otvorený niekde inde!" - no-stack: "&cNemôžeš stackovať batohy" + only-players: "&4Tento príkaz je iba pre hráčov" + opening-backpack: "&bOtváram batoh, môže to trvať pár sekúnd..." + opening-guide: "&bOtváram príručku, môže to trvať pár sekúnd..." + radiation: "&4Bol si vystavený smrtiacej radiácií &cZbav sa rádioaktívneho itemu + alebo si obleč kompletný hazmat oblek!" + research: + progress: "&7Začínaš rozmýšlať o &b%research% &e(%progress%)" + start: "&7Staroveké duše ti šepkajú tajomné slová do ucha!" + soulbound-rune: + fail: "&cNaraz môžeš spájať iba jeden item s tvojou dušou." + success: "&aÚspešne si si spojil tento item s tvojou dušou! Ostane ti keď zomrieš." + talisman: + angel: "&a&oTvoj Talizman ťa uchránil pred poškodením z pádu" + anvil: "&a&oTvoj Talizman zachránil tvoj nástroj pred zničením" + fire: "&a&oTvoj Talizman ťa zachránil pred uhorením" + hunter: "&a&oTvoj Talizman práve zdvojnásobil tvoj drop" + knight: "&a&oTvoj Talizman ti dal regeneráciu na 5 sekúnd" + lava: "&a&oTvoj Talizman ťa zachránil pred uhorením" + magician: "&a&oTvoj Talizman ti dal Enchant naviac" + miner: "&a&oTvoj Talizman práve zdvojnásobil tvoj drop" + traveller: "&a&oTvoj Talizman ťa zrýchlil" + warrior: "&a&oTvoj Talizman ti zvýšil nachvíľu silu " + water: "&a&oTvoj Talizman ťa zachránil pred utopením" + whirlwind: "&a&oTvoj Talizman odrazil strelu" + wizard: "&a&oTvoj Talizman ti dal lepší level šťastia ale možno znížil level ostatných + enchantov" + unknown-player: "&4Neznámy hráč: &c%player%" + unlocked: '&bOdomkol si &7"%research%"' + usage: "&4Použitie: &c%usage%" miner: no-ores: "&ePrepáč, nenašiel som žiadne ore naokolo!" workbench: not-enhanced: "&4Nemôžeš použiť Slimefun itemy v normálnom craftingu" -gps: - deathpoint: "&4Miesto smrti &7%date%" - waypoint: - new: "&eProsím napíš meno pre tvoj nový waypoint do chatu. &7(Kódy farieb sú podporované!)" - added: "&aÚspešne pridaný nový waypoint" - max: "&4Dosiahol si maximálny počet waypointov" - insufficient-complexity: - - "&4Nedostatočná veľkosť siete: &c%complexity%" - - "&4a) Nemáš spustenú GPS sieť" - - "&4b)Tvoja GPS sieť nie je dostatočne veľká" - geo: - scan-required: "&4Je potrebný GEO-Scan! &cOskenuj tento chunk pomocou GEO-Scanner - -u!" -inventory: - no-access: "&4Nemáš opŕavnenie na otvorenie tohto bloku" -android: - started: "&7Tvoj Android pokračuje vo svojom skripte" - stopped: "&7Tvoj Android pauzol svoj skript" - scripts: - already-uploaded: "&4Tento skript už bol nahraný." - instructions: - START: "&2Začni skript" - REPEAT: "&9Opakuj skript" - WAIT: "&ePočkaj 0.5s" - GO_FORWARD: "&7Pohyb dopredu" - GO_UP: "&7Pohyb hore" - GO_DOWN: "&7Pohyb dole" - TURN_LEFT: "&7Otoč sa dolava" - TURN_RIGHT: "&7Otoč sa doprava" - DIG_UP: "&bKop hore" - DIG_FORWARD: "&bKop dopredu" - DIG_DOWN: "&bKop dole" - MOVE_AND_DIG_UP: "&bPohyb a ťaženie dohora" - MOVE_AND_DIG_FORWARD: "&bPohyb a ťaženie dopredu" - MOVE_AND_DIG_DOWN: "&bPohyb a ťaženie dolu" - ATTACK_MOBS_ANIMALS: "&4Zaútoč &c(nepriateľskí mobovia a zvieratá)" - ATTACK_MOBS: "&4Zaútoč &c(nepriateľskí mobovia)" - ATTACK_ANIMALS: "&4Zaútoč &c(Zvieratá)" - ATTACK_ANIMALS_ADULT: "&4Zaútoč &c(Zvieratá &7[dospelé]&c)" - CHOP_TREE: "&cVyťaž a zasaď" - CATCH_FISH: "&bChyť rybu" - FARM_FORWARD: "&bZober a zasaď" - FARM_DOWN: "&bZober a zasaď &7(blok pod sebou)" - FARM_EXOTIC_FORWARD: "&bPokročilé zbieranie a sadenie" - FARM_EXOTIC_DOWN: "&bPokročilé zbieranie a sadenie &7(blok pod sebou)" - INTERFACE_ITEMS: "&9Vyprázdni svoj inventár do rozhrania pred sebou" - INTERFACE_FUEL: "&cDoplň palivo z rozhrania pred sebou" - enter-name: - - - - "&eProsím napíš meno tvojho skriptu" - uploaded: - - "&bNahrávam..." - - "&aSkript bol úspešne nahraný!" - rating: - own: "&4Nemôžeš hodnotiť svoj skript!" - already: "&4Už si hodnotil tento skript!" -languages: - default: Východzí jazyk servera - en: Angličtina - de: Nemčina - fr: Francúzština - it: Taliančina - es: Španielčina - pl: Poľština - sv: Švédština - nl: Holandčina - cs: Čeština - hu: Maďarčina - lv: Lotyština - ru: Ruština - sk: Slovenčina - zh-TW: Čínština (Taiwan) - vi: Vietnamčina diff --git a/src/main/resources/languages/messages_vi.yml b/src/main/resources/languages/messages_vi.yml index c6ab0d027e..0077765a9c 100644 --- a/src/main/resources/languages/messages_vi.yml +++ b/src/main/resources/languages/messages_vi.yml @@ -1,116 +1,186 @@ --- +android: + scripts: + already-uploaded: "&4Đoạn mã này đã được tải lên." + enter-name: + - + - "&eVui lòng nhập tên cho đoạn mã của bạn" + instructions: + ATTACK_ANIMALS: "&4Tấn công &c(Động vật)" + ATTACK_ANIMALS_ADULT: "&4Tấn công &c(Động vật &7[Trường thành]&c)" + ATTACK_MOBS: "&4Tấn công &c(Các mob hung dữ)" + ATTACK_MOBS_ANIMALS: "&4Tấn công &c(Mob và Động vật hung giữ)" + CATCH_FISH: "&bBắt cá" + CHOP_TREE: "&cChặt và trồng lại" + DIG_DOWN: "&bĐào xuống" + DIG_FORWARD: "&bĐào thẳng" + DIG_UP: "&bĐào lên" + FARM_DOWN: "&bThu hoạch và trồng lại &7(Khối bên dưới)" + FARM_EXOTIC_DOWN: "&bThu hoạch và thay thế nâng ca o&7(Khối ở dưới)" + FARM_EXOTIC_FORWARD: "&bThu hoạch và thay thế nâng cao" + FARM_FORWARD: "&bThu hoạch và trồng lại" + GO_DOWN: "&7Đi xuống" + GO_FORWARD: "&7Đi thẳng" + GO_UP: "&7Đi lên" + INTERFACE_FUEL: "&cKéo nhiên liệu từ giao diện" + INTERFACE_ITEMS: "&9Đẩy nội dung túi đồ lên giao diện" + MOVE_AND_DIG_DOWN: "&bDi chuyển và đào xuống" + MOVE_AND_DIG_FORWARD: "&bDi chuyển và đào thẳng" + MOVE_AND_DIG_UP: "&bDi chuyển và đào lên" + REPEAT: "&9Lặp lại Đoạn Mã" + START: "&2Bắt đầu chạy Đoạn Mã" + TURN_LEFT: "&7Rẽ trái" + TURN_RIGHT: "&7Rẽ phải" + WAIT: "&eĐợi 0.5s" + rating: + already: "&4Bạn đã để lại Xếp Hạng cho đoạn mã này!" + own: "&4Bạn không thể xếp hạng đoạn mã của chính mình!" + uploaded: + - "&bĐang tải lên..." + - "&aTải đoạn mã lên thành công!" + started: "&7Thiết bị Android của bạn đã tiếp tục chạy đoạn mã của nó" + stopped: "&7Thiết bị Android của bạn đã dùng chạy đoạn mã của nó" +anvil: + not-working: "&4Bạn không thể sử dụng vật phẩm Slimefun trên cái đê!" +backpack: + already-open: "&cXin lỗi, cái Ba lô này đã được mở ở một nơi nào khác!" + no-stack: "&cBạn không thể xếp nhiều Ba lô lại với nhau" commands: - help: Hiển thị màn hình trợ giúp này cheat: Cho phép bạn gian lận vật phẩm give: Đưa cho ai đó vài món đồ Slimefun guide: Cung cấp cho bạn một cuốn hướng dẫn Slimefun - timings: Thông tin Lag về máy chủ của bạn - teleporter: Xem các điểm dịch chuyển của người chơi khác - versions: Liệt kê tất cả các tiện ích mở rộng đã cài đặt - search: Tìm kiếm Hướng dẫn của bạn cho cụm từ đã cho + help: Hiển thị màn hình trợ giúp này open_guide: Mở hướng dẫn của Slimefun mà không cần sử dụng sách - stats: Hiển thị một số thống kê về người chơi research: description: Mở khóa / Đặt lại nghiên cứu cho người chơi reset: "&cBạn đã đặt lại Kiến thức của %player%" reset-target: "&cKiến thức của bạn đã được đặt lại" + search: Tìm kiếm Hướng dẫn của bạn cho cụm từ đã cho + stats: Hiển thị một số thống kê về người chơi + teleporter: Xem các điểm dịch chuyển của người chơi khác + timings: Thông tin Lag về máy chủ của bạn + versions: Liệt kê tất cả các tiện ích mở rộng đã cài đặt +gps: + deathpoint: "&4Điểm chết &7%date%" + geo: + scan-required: "&4Yêu cầu Quét GEO! &cQuét chunk này bằng Máy Quét GEO trước!" + insufficient-complexity: + - "&4Độ phức tạp của mạng GPS không đủ: &c%complexity%" + - "&4a) Bạn chưa có thiết lập Mạng GPS" + - "&4b) Mạng GPS của bạn không đủ phức tạp" + waypoint: + added: "&aĐã thêm thành công một điểm tham chiếu mới" + max: "&4Bạn đã đạt đến số lượng điểm tham chiếu tối đa" + new: "&eVui lòng nhập tên cho điểm tham chiếu mới của bạn trên khung chat. &7(Mã + màu được hỗ trợ!)" guide: - search: - message: "&bBạn muốn tìm kiếm cái gì?" - name: "&7Tìm kiếm..." - lore: - - "&bBạn muốn tìm kiếm cái gì?" - - "&7Nhập cụm từ tìm kiếm của bạn vào khung chat" cheat: no-multiblocks: "&4Bạn không thể gian lận trong chế độ Đa khối, bạn phải xây dựng chúng!" - languages: - updated: "&aNgôn ngữ của bạn đã được đặt thành công: &b%lang%" - translations: - name: "&aThiếu một cái gì đó?" - lore: Nhấn vào đây để thêm bản dịch của riêng bạn - select: Nhấn vào đây để chọn ngôn ngữ này - select-default: Nhấn vào đây để chọn ngôn ngữ mặc định - selected-language: 'Hiện đang chọn:' - title: - main: Hướng dẫn sử dụng Slimefun - settings: Cài đặt và thông tin - languages: Chọn ngôn ngữ ưa thích của bạn - credits: Người đóng góp cho Slimefun4 - wiki: Tài liệu Slimefun4 - addons: Các bổ sung cho Slimefun4 - bugs: Báo cáo lỗi credits: commit: Commit commits: Commits + profile-link: Nhấp để truy cập hồ sơ của họ trên GitHub roles: developer: "&6Nhà phát triển" - wiki: "&3Người chỉnh sửa Wiki" resourcepack: "&cNghệ sĩ gói tài nguyên" translator: "&9Đóng góp bản dịch" - profile-link: Nhấp để truy cập hồ sơ của họ trên GitHub + wiki: "&3Người chỉnh sửa Wiki" + languages: + select: Nhấn vào đây để chọn ngôn ngữ này + select-default: Nhấn vào đây để chọn ngôn ngữ mặc định + selected-language: 'Ngôn ngữ hiện đang chọn:' + translations: + lore: Nhấn vào đây để thêm bản dịch của riêng bạn + name: "&aThiếu một cái gì đó?" + updated: "&aNgôn ngữ của bạn đã được đặt thành công: &b%lang%" pages: - previous: Trang trước next: Trang tiếp theo + previous: Trang trước + search: + lore: + - "&bBạn muốn tìm kiếm cái gì?" + - "&7Nhập cụm từ tìm kiếm của bạn vào khung chat" + message: "&bBạn muốn tìm kiếm cái gì?" + name: "&7Tìm kiếm..." + title: + addons: Các bổ sung cho Slimefun4 + bugs: Báo cáo lỗi + credits: Người đóng góp cho Slimefun4 + languages: Chọn ngôn ngữ ưa thích của bạn + main: Hướng dẫn sử dụng Slimefun + settings: Cài đặt và thông tin + wiki: Tài liệu Slimefun4 tooltips: open-category: Nhấn vào đây để mở versions-notice: Đây là rất quan trọng khi báo cáo lỗi! +inventory: + no-access: "&4Bạn không được phép truy cập vào khối này" +languages: + cs: Tiếng Séc + de: Tiếng Đức + default: Máy chủ-Mặc định + el: Tiếng Hy Lạp + en: Tiếng Anh + es: Tiếng Tây Ban Nha + fr: Tiếng Pháp + he: Tiếng Do Thái + hu: Tiếng Hungary + id: Tiếng Indonesia + it: Tiếng Ý + lv: Tiếng Latvia + nl: Tiếng Hà Lan + pl: Tiếng Ba Lan + pt: Tiếng Bồ Đào Nha (Bồ Đào Nha) + pt-BR: Tiếng Bồ Đào Nha (Brazil) + ru: Tiếng Nga + sk: Tiếng Slovak + sv: Tiếng Thụy Điển + vi: Tiếng Việt + zh-CN: Tiếng Trung (Trung Quốc) + zh-TW: Tiếng Trung Quốc (Đài Loan) +machines: + ANCIENT_ALTAR: + not-enough-pedestals: "&4Bàn thờ không được bao quanh bởi số lượng cần thiết của + các bệ &c(%pedestals% / 8)" + unknown-catalyst: "&4Không rõ Chất Xúc Tác! &cSử dụng đúng công thức thay thế!" + unknown-recipe: "&4Không rõ Công Thức! &cSử dụng đúng công thức thay thế!" + ANCIENT_PEDESTAL: + obstructed: "&4Bệ bị cản trở! &cLoại bỏ bất kì thứ gì trên bệ!" + CARGO_NODES: + must-be-placed: "&4Phải được đặt trên hòm hoặc máy!" + ELEVATOR: + click-to-teleport: "&eẤn &7để dịch chuyển đến tầng:" + current-floor: "&eĐây là tầng mà bạn hiện đang ở:" + enter-name: "&7Vui lòng nhập tên tầng mong muốn của bạn vào Khung trò chuyện. + &r(Mã màu được hỗ trợ)" + named: "&2Đặt tên thành công cho tầng này: &r%floor%" + no-destinations: "&4Không tìm thấy điểm đến" + pick-a-floor: "&4- Chọn một tầng -" + full-inventory: "&eXin lỗi, kho đồ của tôi đã quá đầy!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Vui lòng nhập Văn Bản Ba Chiều mong muốn của bạn vào Khung trò + chuyện. &r(Mã màu được hỗ trợ!)" + ignition-chamber-no-flint: "&cIgnition Chamber đang thiếu Bật Lửa." + in-use: "&cKhối trong túi đồ này hiện đang được mở bởi người chơi khác." + pattern-not-found: "&eXin lỗi, tôi không thể nhận ra Công Thức này. Vui lòng đặt + các vật phẩm với mẫu nhất định vào trong Máy Phân Phát." + TELEPORTER: + cancelled: "&4Dịch chuyển bị hủy bỏ!" + invulnerability: "&b&lBạn đã được cho 30 giây Bất Tử!" + teleported: "&3Đã dịch chuyển!" + teleporting: "&3Đang dịch chuyển..." + unknown-material: "&eXin lỗi, tôi không thể nhận ra vật phẩm trong máy phân phát. + Vui lòng đặt thứ gì đó trong đó mà tôi biết." + wrong-item: "&eXin lỗi, tôi không thể nhận ra vật phẩm mà bạn nhấp chuột phải vào + tôi. Kiểm tra Công Thức và xem những vật phẩm nào bạn có thể sử dụng." messages: - not-researched: "&4Bạn không có đủ kiến thức để hiểu điều này" - not-enough-xp: "&4Bạn không có đủ kinh nghiệm để mở khóa" - unlocked: '&bBạn đã mở khóa &7"%research%"' - only-players: "&4Lệnh này chỉ dành cho người chơi" - unknown-player: "&4Người chơi chưa biết: &c%player%" - no-permission: "&4Bạn không có quyền để làm điều này" - usage: "&4Cách sử dụng: &c%usage%" - not-online: "&4%player% &cđang không trực tuyến!" - not-valid-item: "&4%item% &ckhông phải là vật phẩm hợp lệ!" - not-valid-amount: "&4%amount% &ckhông hợp lệ : phải lớn hơn 0!" - given-item: '&bBạn đã được nhận &a%amount% &7"%item%&7"' - give-item: '&bBạn đã gửi đến %player% &a%amount% &7"%item%&7"' - not-valid-research: "&4%research% &ckhông phải là nghiên cứu hợp lệ!" - give-research: '&bBạn đã cho %player% nghiên cứu &7"%research%&7"' - hungry: "&cBạn quá đói để làm vậy!" - mode-change: "&b%device% đổi chế độ thành: &9%mode%" + cannot-place: "&cBạn không thể đặt khối ở đó!" + diet-cookie: "&eBạn đang bắt đầu cảm thấy rất nhẹ..." disabled-in-world: "&4&lVật phẩm này đã bị vô hiệu hóa ở thế giới này!" disabled-item: "&4&lVật phẩm này đã bị vô hiệu hóa! Sao bạn có thể lấy được vật phẩm đó?" - no-tome-yourself: "&cBạn không thể sử dụng &4Tome of Knowledge &cvào chính bạn..." - multimeter: "&bNăng lượng được tích trữ: &3%stored% &b/ &3%capacity%" - talisman: - anvil: "&a&oTalisman của bạn đã lưu công cụ của bạn khỏi bị phá vỡ" - miner: "&a&oTalisman của bạn vừa nhân đôi vật phẩm rớt" - hunter: "&a&oTalisman của bạn vừa nhân đôi vật phẩm rớt" - lava: "&a&oTailsman của bạn cứu bạn khỏi bị thiêu chết" - water: "&a&oTailsman của bạn vừa cứu bạn khỏi đuối nước" - angel: "&a&oTailsman của bạn vừa cứu bạn khỏi bị sát thương khi rơi" - fire: "&a&oTailsman của bạn cứu bạn khỏi bị thiêu chết" - magician: "&a&oTailsman của bạn cho bạn một phù phép bổ sung" - traveller: "&a&oTailsman của bạn cho bạn hiệu ứng Chạy Nhanh" - warrior: "&a&oTailsman của bạn đã cải thiện Sức mạnh của bạn trong một thời gian" - knight: "&a&oTailsman của bạn đã cho bạn 5 giây hiệu ứng Hồi Máu" - whirlwind: "&a&oTailsman của bạn phản lại Phát Bắn" - wizard: "&a&oTailsman của bạn đã cho bạn một Cấp độ may mắn tốt hơn nhưng cũng - có thể hạ thấp một số Cấp độ phù phép khác" - soulbound-rune: - fail: "&cBạn chỉ có thể liên kết một vật phẩm với linh hồn của bạn trong cùng - một thời điểm." - success: "&aBạn đã liên kết thành công vật phẩm với linh hồn của bạn! Bạn sẽ giữ - vật phẩm khi chết." - research: - start: "&7Các Linh Hồn Cổ Đại nói thì thầm những từ ngữ bí ẩn vào tai bạn! " - progress: "&7Bạn bắt đầu thắc mắc về: &b%research% &e(%progress%)" fire-extinguish: "&7Bạn đã tự dập tắt lửa chính bản thân" - cannot-place: "&cBạn không thể đặt khối ở đó!" - no-pvp: "&cBạn không thể đánh nhau ở đây!" - radiation: "&4Bạn đã tiếp xúc với bức xạ chết người! &cLoại bỏ vật phẩm phóng xạ - hoặc trang bị bộ đồ hazmat!" - opening-guide: "&bĐang mở hướng dẫn, việc này có thể mất một vài giây..." - opening-backpack: "&bĐang mở ba lô, việc này có thể mất một vài giây..." - no-iron-golem-heal: "&cĐây khỏi phải là Thỏi Sắt. Bạn không thể sử dụng thứ này - để hồi máu cho Người Khổng Lồ Sắt!" - link-prompt: "&eẤn vào đây:" - diet-cookie: "&eBạn đang bắt đầu cảm thấy rất nhẹ..." fortune-cookie: - "&7Cứu tôi, tôi bị bẫy trong một Nhà Máy Bánh Quy May Mắn" - "&7Bạn sẽ chết vào ngày mai... bởi Creeper" @@ -124,127 +194,58 @@ messages: - "&742. Câu trả lời là 42." - "&7Một Walshy mỗi ngày sẽ giữ những rắc rối đi." - "&7Không bao giờ đào thẳng xuống!" -machines: - pattern-not-found: "&eXin lỗi, tôi không thể nhận ra Công Thức này. Vui lòng đặt - các vật phẩm với mẫu nhất định vào trong Máy Phân Phát." - unknown-material: "&eXin lỗi, tôi không thể nhận ra vật phẩm trong máy phân phát. - Vui lòng đặt thứ gì đó trong đó mà tôi biết." - wrong-item: "&eXin lỗi, tôi không thể nhận ra vật phẩm mà bạn nhấp chuột phải vào - tôi. Kiểm tra Công Thức và xem những vật phẩm nào bạn có thể sử dụng." - full-inventory: "&eXin lỗi, kho đồ của tôi đã quá đầy!" - in-use: "&cKhối trong túi đồ này hiện đang được mở bởi người chơi khác." - ignition-chamber-no-flint: "&cIgnition Chamber đang thiếu Bật Lửa." - ANCIENT_ALTAR: - not-enough-pedestals: "&4Bàn thờ không được bao quanh bởi số lượng cần thiết của - các bệ &c(%pedestals% / 8)" - unknown-catalyst: "&4Không rõ Chất Xúc Tác! &cSử dụng đúng công thức thay thế!" - unknown-recipe: "&4Không rõ Công Thức! &cSử dụng đúng công thức thay thế!" - ANCIENT_PEDESTAL: - obstructed: "&4Bệ bị cản trở! &cLoại bỏ bất kì thứ gì trên bệ!" - HOLOGRAM_PROJECTOR: - enter-text: "&7Vui lòng nhập Văn Bản Ba Chiều mong muốn của bạn vào Khung trò - chuyện. &r(Mã màu được hỗ trợ!)" - ELEVATOR: - no-destinations: "&4Không tìm thấy điểm đến" - pick-a-floor: "&4- Chọn một tầng -" - current-floor: "&eĐây là tầng mà bạn hiện đang ở:" - click-to-teleport: "&eẤn &7để dịch chuyển đến tầng:" - enter-name: "&7Vui lòng nhập tên tầng mong muốn của bạn vào Khung trò chuyện. - &r(Mã màu được hỗ trợ)" - named: "&2Đặt tên thành công cho tầng này: &r%floor%" - TELEPORTER: - teleporting: "&3Đang dịch chuyển..." - teleported: "&3Đã dịch chuyển!" - cancelled: "&4Dịch chuyển bị hủy bỏ!" - invulnerability: "&b&lBạn đã được cho 30 giây Bất Tử!" - CARGO_NODES: - must-be-placed: "&4Phải được đặt trên hòm hoặc máy!" -anvil: - not-working: "&4Bạn không thể sử dụng vật phẩm Slimefun trên cái đê!" -backpack: - already-open: "&cXin lỗi, cái Ba lô này đã được mở ở một nơi nào khác!" - no-stack: "&cBạn không thể xếp nhiều Ba lô lại với nhau" + give-item: '&bBạn đã gửi đến %player% &a%amount% &7"%item%&7"' + given-item: '&bBạn đã được nhận &a%amount% &7"%item%&7"' + give-research: '&bBạn đã cho %player% nghiên cứu &7"%research%&7"' + hungry: "&cBạn quá đói để làm vậy!" + link-prompt: "&eẤn vào đây:" + mode-change: "&b%device% đổi chế độ thành: &9%mode%" + multimeter: "&bNăng lượng được tích trữ: &3%stored% &b/ &3%capacity%" + no-iron-golem-heal: "&cĐây khỏi phải là Thỏi Sắt. Bạn không thể sử dụng thứ này + để hồi máu cho Người Khổng Lồ Sắt!" + no-permission: "&4Bạn không có quyền để làm điều này" + no-pvp: "&cBạn không thể đánh nhau ở đây!" + not-enough-xp: "&4Bạn không có đủ kinh nghiệm để mở khóa" + not-online: "&4%player% &cđang không trực tuyến!" + not-researched: "&4Bạn không có đủ kiến thức để hiểu điều này" + not-valid-amount: "&4%amount% &ckhông hợp lệ : phải lớn hơn 0!" + not-valid-item: "&4%item% &ckhông phải là vật phẩm hợp lệ!" + not-valid-research: "&4%research% &ckhông phải là nghiên cứu hợp lệ!" + only-players: "&4Lệnh này chỉ dành cho người chơi" + opening-backpack: "&bĐang mở ba lô, việc này có thể mất một vài giây..." + opening-guide: "&bĐang mở hướng dẫn, việc này có thể mất một vài giây..." + radiation: "&4Bạn đã tiếp xúc với bức xạ chết người! &cLoại bỏ vật phẩm phóng xạ + hoặc trang bị bộ đồ hazmat!" + research: + progress: "&7Bạn bắt đầu thắc mắc về: &b%research% &e(%progress%)" + start: "&7Các Linh Hồn Cổ Đại nói thì thầm những từ ngữ bí ẩn vào tai bạn! " + soulbound-rune: + fail: "&cBạn chỉ có thể liên kết một vật phẩm với linh hồn của bạn trong cùng + một thời điểm." + success: "&aBạn đã liên kết thành công vật phẩm với linh hồn của bạn! Bạn sẽ giữ + vật phẩm khi chết." + unknown-player: "&4Người chơi chưa biết: &c%player%" + unlocked: '&bBạn đã mở khóa &7"%research%"' + usage: "&4Cách sử dụng: &c%usage%" + no-tome-yourself: "&cBạn không thể sử dụng &4Bộ kiến thức &ccho chính bạn..." + talisman: + anvil: "&a&oBùa hộ mệnh của bạn đã lưu công cụ của bạn khỏi bị phá vỡ" + miner: "&a&oBùa hộ mệnh của bạn vừa nhân đôi vật phẩm rớt" + hunter: "&a&oBùa hộ mệnh của bạn vừa nhân đôi vật phẩm rớt" + lava: "&a&oBùa hộ mệnh của bạn cứu bạn khỏi bị thiêu chết" + water: "&a&oBùa hộ mệnh của bạn vừa cứu bạn khỏi đuối nước" + angel: "&a&oBùa hộ mệnh của bạn vừa cứu bạn khỏi bị sát thương khi rơi" + fire: "&a&oBùa hộ mệnh của bạn cứu bạn khỏi bị thiêu chết" + magician: "&a&oBùa hộ mệnh của bạn cho bạn một phù phép bổ sung" + traveller: "&a&oBùa hộ mệnh của bạn cho bạn hiệu ứng Chạy Nhanh" + warrior: "&a&oBùa hộ mệnh của bạn đã cải thiện Sức mạnh của bạn trong một thời + gian" + knight: "&a&oBùa hộ mệnh của bạn đã cho bạn 5 giây hiệu ứng Hồi Máu" + whirlwind: "&a&oBùa hộ mệnhcủa bạn phản lại Phát Bắn" + wizard: "&a&oBùa hộ mệnh của bạn đã cho bạn một Cấp độ may mắn tốt hơn nhưng cũng + có thể hạ thấp một số Cấp độ phù phép khác" miner: no-ores: "&eXin lỗi, tôi không thể tìm bất kì Khoáng sản nào xung quanh!" workbench: not-enhanced: "&4Bạn không thể sử dụng vật phẩm Slimefun ở trên bàn làm việc thông thường" -gps: - deathpoint: "&4Điểm chết &7%date%" - waypoint: - new: "&eVui lòng nhập tên cho điểm tham chiếu mới của bạn trên khung chat. &7(Mã - màu được hỗ trợ!)" - added: "&aĐã thêm thành công một điểm tham chiếu mới" - max: "&4Bạn đã đạt đến số lượng điểm tham chiếu tối đa" - insufficient-complexity: - - "&4Độ phức tạp của mạng GPS không đủ: &c%complexity%" - - "&4a) Bạn chưa có thiết lập Mạng GPS" - - "&4b) Mạng GPS của bạn không đủ phức tạp" - geo: - scan-required: "&4Yêu cầu Quét GEO! &cQuét chunk này bằng Máy Quét GEO trước!" -inventory: - no-access: "&4Bạn không được phép truy cập vào khối này" -android: - started: "&7Thiết bị Android của bạn đã tiếp tục chạy đoạn mã của nó" - stopped: "&7Thiết bị Android của bạn đã dùng chạy đoạn mã của nó" - scripts: - already-uploaded: "&4Đoạn mã này đã được tải lên." - instructions: - START: "&2Bắt đầu chạy Đoạn Mã" - REPEAT: "&9Lặp lại Đoạn Mã" - WAIT: "&eĐợi 0.5s" - GO_FORWARD: "&7Đi thẳng" - GO_UP: "&7Đi lên" - GO_DOWN: "&7Đi xuống" - TURN_LEFT: "&7Rẽ trái" - TURN_RIGHT: "&7Rẽ phải" - DIG_UP: "&bĐào lên" - DIG_FORWARD: "&bĐào thẳng" - DIG_DOWN: "&bĐào xuống" - MOVE_AND_DIG_UP: "&bDi chuyển và đào lên" - MOVE_AND_DIG_FORWARD: "&bDi chuyển và đào thẳng" - MOVE_AND_DIG_DOWN: "&bDi chuyển và đào xuống" - ATTACK_MOBS_ANIMALS: "&4Tấn công &c(Mob và Động vật hung giữ)" - ATTACK_MOBS: "&4Tấn công &c(Các mob hung dữ)" - ATTACK_ANIMALS: "&4Tấn công &c(Động vật)" - ATTACK_ANIMALS_ADULT: "&4Tấn công &c(Động vật &7[Trường thành]&c)" - CHOP_TREE: "&cChặt và trồng lại" - CATCH_FISH: "&bBắt cá" - FARM_FORWARD: "&bThu hoạch và trồng lại" - FARM_DOWN: "&bThu hoạch và trồng lại &7(Khối bên dưới)" - FARM_EXOTIC_FORWARD: "&bThu hoạch và thay thế nâng cao" - FARM_EXOTIC_DOWN: "&bThu hoạch và thay thế nâng ca o&7(Khối ở dưới)" - INTERFACE_ITEMS: "&9Đẩy nội dung túi đồ lên giao diện" - INTERFACE_FUEL: "&cKéo nhiên liệu từ giao diện" - enter-name: - - - - "&eVui lòng nhập tên cho đoạn mã của bạn" - uploaded: - - "&bĐang tải lên..." - - "&aTải đoạn mã lên thành công!" - rating: - own: "&4Bạn không thể xếp hạng đoạn mã của chính mình!" - already: "&4Bạn đã để lại Xếp Hạng cho đoạn mã này!" -languages: - default: Máy chủ-Mặc định - en: Tiếng Anh - de: Tiếng Đức - fr: Tiếng Pháp - it: Tiếng Ý - es: Tiếng Tây Ban Nha - pl: Tiếng Ba Lan - sv: Tiếng Thụy Điển - nl: Tiếng Hà Lan - cs: Tiếng Séc - hu: Tiếng Hungary - lv: Tiếng Latvia - ru: Tiếng Nga - sk: Tiếng Slovak - zh-TW: Tiếng Trung Quốc (Đài Loan) - vi: Tiếng Việt - id: Tiếng Indonesia - zh-CN: Tiếng Trung (Trung Quốc) - el: Tiếng Hy Lạp - he: Tiếng Do Thái - pt: Tiếng Bồ Đào Nha (Bồ Đào Nha) - pt-BR: Tiếng Bồ Đào Nha (Brazil) diff --git a/src/main/resources/languages/researches_en.yml b/src/main/resources/languages/researches_en.yml new file mode 100644 index 0000000000..e45c628d6e --- /dev/null +++ b/src/main/resources/languages/researches_en.yml @@ -0,0 +1,231 @@ +slimefun: + walking_sticks: Walking Sticks + portable_crafter: Portable Crafter + fortune_cookie: Fortune Cookie + portable_dustbin: Portable Dustbin + meat_jerky: Meat Jerky + armor_forge: Armor Crafting + glowstone_armor: Glowstone Armor + lumps: Lumps and Magic + ender_backpack: Ender Backpack + ender_armor: Ender Armor + magic_eye_of_ender: Magic Eye of Ender + magic_sugar: Magic Sugar + monster_jerky: Monster Jerky + slime_armor: Slime Armor + sword_of_beheading: Sword of Beheading + basic_circuit_board: Basic Circuit Board + advanced_circuit_board: Advanced Circuit Board + smeltery: Smeltery + steel: Steel Age + misc_power_items: Important power-related Items + battery: Your first Battery + steel_plate: Steel Plating + steel_thruster: Steel Thruster + parachute: Parachute + grappling_hook: Grappling Hook + jetpacks: Jetpacks + multitools: Multi Tools + solar_panel_and_helmet: Solar Power + elemental_staff: Elemental Staves + grind_stone: Grind Stone + cactus_armor: Cactus Suit + gold_pan: Gold Pan + magical_book_cover: Magical Book Binding + slimefun_metals: New Metals + ore_crusher: Ore Doubling + bronze: Bronze Creation + alloys: Advanced Alloys + compressor_and_carbon: Carbon Creation + gilded_iron_armor: Gilded Iron Armor + synthetic_diamond: Synthetic Diamonds + pressure_chamber: Pressure Chamber + synthetic_sapphire: Synthetic Sapphires + damascus_steel: Damascus Steel + damascus_steel_armor: Damascus Steel Armor + reinforced_alloy: Reinforced Alloy + carbonado: Black Diamonds + magic_workbench: Magic Workbench + wind_staff: Wind Staff + reinforced_armor: Reinforced Armor + ore_washer: Ore Washer + gold_carats: Pure Gold + silicon: Silicon Valley + fire_staff: Fire Staff + smelters_pickaxe: Smelters Pickaxe + common_talisman: Common Talisman + anvil_talisman: Talisman of the Anvil + miner_talisman: Talisman of the Miner + hunter_talisman: Talisman of the Hunter + lava_talisman: Talisman of the Lava Walker + water_talisman: Talisman of the Water Breather + angel_talisman: Talisman of the Angel + fire_talisman: Talisman of the Firefighter + lava_crystal: Firey Situation + magician_talisman: Talisman of the Magician + traveller_talisman: Talisman of the Traveller + warrior_talisman: Talisman of the Warrior + knight_talisman: Talisman of the Knight + gilded_iron: Shiny Iron + synthetic_emerald: Fake Gem + chainmail_armor: Chainmail Armor + whirlwind_talisman: Talisman of the Whirlwind + wizard_talisman: Talisman of the Wizard + lumber_axe: Lumber Axe + hazmat_suit: Hazmat Suit + uranium: Radioactive + crushed_ore: Ore Purification + redstone_alloy: Redstone Alloy + carbonado_tools: Top Tier Machines + first_aid: First Aid + gold_armor: Shiny Armor + night_vision_googles: Night Vision Goggles + pickaxe_of_containment: Pickaxe of Containment + hercules_pickaxe: Hercules Pickaxe + table_saw: Table Saw + slime_steel_armor: Slimy Steel Armor + blade_of_vampires: Blade of Vampires + water_staff: Water Staff + 24k_gold_block: Golden City + composter: Composting Dirt + farmer_shoes: Farmer Shoes + explosive_tools: Explosive Tools + automated_panning_machine: Automated Gold Pan + boots_of_the_stomper: Boots of the Stomper + pickaxe_of_the_seeker: Pickaxe of the Seeker + backpacks: Backpacks + woven_backpack: Woven Backpack + crucible: Crucible + gilded_backpack: Gilded Backpack + armored_jetpack: Armored Jetpack + ender_talismans: Ender Talismans + nickel_and_cobalt: Even more Ores + magnet: Magnetic Metals + infused_magnet: Infused Magnets + cobalt_pickaxe: Speedy Pickaxe + essence_of_afterlife: Necromancy + bound_backpack: Soulbound Storage + jetboots: Jet Boots + armored_jetboots: Armored Jet Boots + seismic_axe: Seismic Axe + pickaxe_of_vein_mining: Pickaxe of Vein Mining + bound_weapons: Soulbound Weapons + bound_tools: Soulbound Tools + bound_armor: Soulbound Armor + juicer: Delicious Drinks + repaired_spawner: Repairing Spawners + enhanced_furnace: Enhanced Furnace + more_enhanced_furnaces: Better Furnaces + high_tier_enhanced_furnaces: High Tier Furnace + reinforced_furnace: Reinforced Furnace + carbonado_furnace: Carbonado Edged Furnace + electric_motor: Heating up + block_placer: Block Placer + scroll_of_dimensional_teleposition: Turning things around + special_bows: Robin Hood + tome_of_knowledge_sharing: Sharing with friends + flask_of_knowledge: XP Storage + hardened_glass: Withstanding Explosions + golden_apple_juice: Golden potion + cooler: Portable Beverages + ancient_altar: Ancient Altar + wither_proof_obsidian: Wither-Proof Obsidian + ancient_runes: Elemental Runes + special_runes: Purple Runes + infernal_bonemeal: Infernal Bonemeal + rainbow_blocks: Rainbow Blocks + infused_hopper: Infused Hopper + wither_proof_glass: Wither-Proof Glass + duct_tape: Duct Tape + plastic_sheet: Plastic + android_memory_core: Memory Core + oil: Oil + fuel: Fuel + hologram_projector: Holograms + capacitors: Tier 1 Capacitors + high_tier_capacitors: Tier 2 Capacitors + solar_generators: Solar Power Plant + electric_furnaces: Powered Furnace + electric_ore_grinding: Crushing and Grinding + heated_pressure_chamber: Heated Pressure Chamber + coal_generator: Coal Generator + bio_reactor: Bio-Reactor + auto_enchanting: Automatic Enchanting and Disenchanting + auto_anvil: Automatic Anvil + multimeter: Power Measurement + gps_setup: Basic GPS Setup + gps_emergency_transmitter: GPS Emergency Waypoint + programmable_androids: Programmable Androids + android_interfaces: Android Interfaces + geo_scanner: GEO-Scans + combustion_reactor: Combustion Reactor + teleporter: Teleporter Base Components + teleporter_activation_plates: Teleporter Activation + better_solar_generators: Upgraded Solar Generators + better_gps_transmitters: Upgraded Transmitters + elevator: Elevators + energized_solar_generator: Full-Time Solar Power + energized_gps_transmitter: Top Tier Transmitter + energy_regulator: Energy Networks 101 + butcher_androids: Butcher Androids + organic_food: Organic Food + auto_breeder: Automated Feeding + advanced_android: Advanced Androids + advanced_butcher_android: Advanced Androids - Butcher + advanced_fisherman_android: Advanced Androids - Fisherman + animal_growth_accelerator: Animal Growth Manipulation + xp_collector: XP Collector + organic_fertilizer: Organic Fertilizer + crop_growth_accelerator: Crop Growth Acceleration + better_crop_growth_accelerator: Upgraded Crop Growth Accelerator + reactor_essentials: Reactor Essentials + nuclear_reactor: Nuclear Power Plant + freezer: Mr Freeze + cargo_basics: Cargo Basics + cargo_nodes: Cargo Setup + electric_ingot_machines: Electric Ingot Fabrication + high_tier_electric_ingot_machines: Super Fast Ingot Fabrication + automated_crafting_chamber: Automated Crafting + better_food_fabricator: Upgraded Food Fabrication + reactor_access_port: Reactor Interaction + fluid_pump: Fluid Pump + better_freezer: Upgraded Freezer + boosted_uranium: Never-Ending Circle + trash_can: Trash + advanced_output_node: Advanced Output Node + carbon_press: Carbon Press + electric_smeltery: Electric Smeltery + better_electric_furnace: Upgraded Electric Furnace + better_carbon_press: Upgraded Carbon Press + empowered_android: Empowered Androids + empowered_butcher_android: Empowered Androids - Butcher + empowered_fisherman_android: Empowered Androids - Fisherman + high_tier_carbon_press: Ultimate Carbon Press + wither_assembler: Automated Wither Killer + better_heated_pressure_chamber: Upgraded Heated Pressure Chamber + elytra: Elytras + special_elytras: Special Elytras + electric_crucible: Electrified Crucible + better_electric_crucibles: Hot Crucibles + advanced_electric_smeltery: Advanced Electric Smeltery + advanced_farmer_android: Advanced Androids - Farmer + lava_generator: Lava Generator + nether_ice: Nether Ice Coolant + nether_star_reactor: Nether Star Reactor + blistering_ingots: Blistering Radioactivity + automatic_ignition_chamber: Automatic Ignition Chamber + output_chest: Basic machinery output chest + copper_wire: Thinned-down Conductivity + radiant_backpack: Radiant Backpack + auto_drier: A Dry Day + diet_cookie: Diet Cookie + storm_staff: Storm Staff + soulbound_rune: Soulbound Rune + geo_miner: GEO-Miner + lightning_rune: Lightning Rune + totem_of_undying: Totem of Undying + charging_bench: Charging Bench + nether_gold_pan: Nether Gold Pan + electric_press: Electric Press + magnesium_generator: Power from Magnesium + kelp_cookie: Tasty Kelp diff --git a/src/main/resources/languages/researches_fr.yml b/src/main/resources/languages/researches_fr.yml new file mode 100644 index 0000000000..e551a7edd4 --- /dev/null +++ b/src/main/resources/languages/researches_fr.yml @@ -0,0 +1,232 @@ +--- +slimefun: + walking_sticks: Bâtons de marche + portable_crafter: Établi portable + fortune_cookie: Biscuit chinois + portable_dustbin: Poubelle portable + armor_forge: Confection d'armures + glowstone_armor: Armure en pierre lumineuse + ender_backpack: Sac à dos de l'End + magic_eye_of_ender: Œil magique de l'End + monster_jerky: Viande de monstre séchée + misc_power_items: Composants électriques importants + battery: Votre première pile + grind_stone: Meule + nickel_and_cobalt: Encore plus de minerais + magnet: Métaux magnétiques + infused_magnet: Aimants infusés + cobalt_pickaxe: Pioche rapide + essence_of_afterlife: Nécromancie + bound_backpack: Rangement lié à l'âme + jetboots: Bottes-fusées + seismic_axe: Hache sismique + pickaxe_of_vein_mining: Pioche mineuse de filons + bound_weapons: Armes liées à l'âme + bound_tools: Outils liés à l'âme + bound_armor: Armure liée à l'âme + juicer: Boissons délicieuses + enhanced_furnace: Fourneau amélioré + more_enhanced_furnaces: Meilleurs fourneaux + high_tier_enhanced_furnaces: Fourneau de haut niveau + reinforced_furnace: Fourneau renforcé + carbonado_furnace: Fourneau bordé de carbonado + electric_motor: Ça va chauffer + block_placer: Placeur de blocs + scroll_of_dimensional_teleposition: Retournement de situation + special_bows: Robin des Bois + tome_of_knowledge_sharing: À partager avec ses amis + flask_of_knowledge: Stockage d'expérience + hardened_glass: Résistance aux explosions + golden_apple_juice: Potion dorée + cooler: Boissons portables + ancient_altar: Ancien autel + wither_proof_obsidian: Obsidienne résistante au Wither + ancient_runes: Runes élémentaires + infernal_bonemeal: Poudre d'os infernale + rainbow_blocks: Blocs arc-en-ciel + infused_hopper: Entonnoir infusé + wither_proof_glass: Verre résistant au Wither + duct_tape: Ruban adhésif + plastic_sheet: Plastique + android_memory_core: Mémoire centrale + oil: Pétrole + fuel: Fioul + hologram_projector: Hologrammes + capacitors: Condensateurs de niveau 1 + high_tier_capacitors: Condensateurs de niveau 2 + heated_pressure_chamber: Chambre de compression chauffée + coal_generator: Générateur au charbon + bio_reactor: Bioréacteur + auto_enchanting: Enchantement et désenchantement automatiques + auto_anvil: Enclume automatisée + gps_emergency_transmitter: Émetteur d'urgence + programmable_androids: Androïdes programmables + geo_scanner: GEO-scans + combustion_reactor: Réacteur à combustion + teleporter: La téléportation pour les nuls + teleporter_activation_plates: Activation de téléporteur + better_solar_generators: Panneaux solaires améliorés + better_gps_transmitters: Émetteurs améliorés + elevator: Ascenseurs + energized_solar_generator: Énergie solaire 24h/24 + energized_gps_transmitter: Émetteur de haut niveau + auto_breeder: Mangeoire automatisée + animal_growth_accelerator: Manipulation de la croissance animale + xp_collector: Récolteur d'expérience + organic_fertilizer: Engrais bio + crop_growth_accelerator: Accélération de la croissance des cultures + better_crop_growth_accelerator: Accélération améliorée de la croissance des cultures + reactor_essentials: Les réacteurs pour les nuls + nuclear_reactor: Centrale nucléaire + freezer: Mr. Freeze + cargo_basics: La cargaison pour les nuls + cargo_nodes: Dispositif de cargaison + electric_ingot_machines: Fabrication électrique de lingots + trash_can: Poubelle + better_electric_furnace: Fourneau électrique amélioré + elytra: Élytres + special_elytras: Élytres spéciales + electric_crucible: Creuset électrique + better_electric_crucibles: Creusets chauffés + advanced_farmer_android: Androïdes agriculteurs améliorés + lava_generator: Générateur à lave + blistering_ingots: Radioactivité caustique + automatic_ignition_chamber: Chambre d'allumage automatique + copper_wire: Conductivité plus légère + auto_drier: Une journée sèche + storm_staff: Sceptre des tempêtes + soulbound_rune: Rune de lien à l'âme + geo_miner: GEO-mineur + lightning_rune: Rune de foudre + totem_of_undying: Totem d'invulnérabilité + charging_bench: Station de recharge + magnesium_generator: Puissance du magnésium + kelp_cookie: Algues délicieuses + meat_jerky: Bœuf séché + ender_armor: Armure de l'End + slime_armor: Armure en slime + sword_of_beheading: Épée de décapitation + smeltery: Fonderie + steel: L’âge de l'acier + steel_plate: Placage en acier + grappling_hook: Grappin + multitools: Multi outils + gold_pan: Orpailleur + magical_book_cover: Reliure de livre magique + slimefun_metals: 'Nouveaux métaux ' + ore_crusher: Doublage de minerai + bronze: Création en bronze + compressor_and_carbon: Création de carbone + gilded_iron_armor: Armure en fer doré + pressure_chamber: Chambre de compression + synthetic_sapphire: Saphirs synthétiques + damascus_steel_armor: Armure en acier damas + reinforced_alloy: Alliage renforcé + magic_workbench: Etablie magique + wind_staff: Sceptre de vent + reinforced_armor: Armure renforcée + ore_washer: Nettoyeur de minerai + pickaxe_of_containment: Pioche de confinement + hercules_pickaxe: Pioche de Hercule + table_saw: Scierie + slime_steel_armor: Armure en acier visqueux + blade_of_vampires: Lame des vampires + water_staff: Sceptre de l'eau + 24k_gold_block: Ville de l'or + composter: Composte + farmer_shoes: Chaussure du fermier + explosive_tools: 'Outils explosifs ' + automated_panning_machine: Orpailleur automatique + boots_of_the_stomper: Bottes du Stomper + pickaxe_of_the_seeker: Pioche du chercheur + backpacks: Sac-à-dos + woven_backpack: Sac-à-dos tissé + crucible: Creuset + gilded_backpack: Sac-à-dos doré + armored_jetpack: Jetpack blindé + ender_talismans: Talismans de l'End + armored_jetboots: Bottes-fusées blindées + repaired_spawner: Réparation de spawners + special_runes: Runes violettes + solar_generators: Centrale solaire + electric_furnaces: Fourneau électrique + electric_ore_grinding: Concassage et broyage + gps_setup: Les GPS pour les nuls + android_interfaces: Interfaces d'androïdes + energy_regulator: Les réseaux électriques pour les nuls + butcher_androids: Androïdes Boucher + organic_food: Nourriture bio + automated_crafting_chamber: Fabrication automatisée + better_food_fabricator: Fabrication d'aliments améliorés + reactor_access_port: Interaction avec le réacteur + fluid_pump: Pompe à fluide + better_freezer: Mr. Freeze ++ + boosted_uranium: Cercle sans fin + advanced_output_node: Noeud de sortie avancé + carbon_press: Presse à charbon + better_carbon_press: Presse à charbon améliorée + empowered_butcher_android: Androïdes Surchargés - Boucher + empowered_fisherman_android: Androïdes surchargés - Pêcheurs + better_heated_pressure_chamber: Chambre de compression chauffée améliorée + radiant_backpack: Sac-à-dos rayonnant + lumps: Fragments et magie + anvil_talisman: Talisman de l'Enclume + miner_talisman: Talisman du Mineur + hunter_talisman: Talisman du Chasseur + lava_talisman: Talisman du Marcheur Ardent + water_talisman: Talisman de l'Apnée + angel_talisman: Talisman de l'Ange + fire_talisman: Talisman du Pompier + lava_crystal: Situation Ardente + magician_talisman: Talisman du Magicien + traveller_talisman: Talisman du Voyageur + warrior_talisman: Talisman du Guerrier + knight_talisman: Talisman du Chevalier + whirlwind_talisman: Talisman du Tourbillon + wizard_talisman: Talisman du Sorcier + carbonado_tools: Machines Tier Max + multimeter: Mesure d'énergie + advanced_android: Androïdes Avancés + advanced_butcher_android: Androïdes Avancés - Boucher + advanced_fisherman_android: Androïdes Avancés - Pêcheurs + high_tier_electric_ingot_machines: Fabrication électrique super rapide de lingots + electric_smeltery: Fonderie électrique + empowered_android: Androïdes Surchargés + high_tier_carbon_press: Presse à carbone Ultime + wither_assembler: Tueur de Wither automatisé + advanced_electric_smeltery: Fonderie électrique avancée + nether_ice: Liquide de refroidissement du Nether + nether_star_reactor: Réacteur à étoile du Nether + output_chest: Coffre de sortie de machines de base + diet_cookie: Cookie pour un Régime + nether_gold_pan: Orpailleur du Nether + electric_press: Presse électrique + magic_sugar: Sucre magique + basic_circuit_board: Circuit imprimé basique + advanced_circuit_board: Circuit imprimé avancé + steel_thruster: Propulseur en acier + parachute: Parachute + jetpacks: Jetpacks + solar_panel_and_helmet: Énergie solaire + elemental_staff: Sceptres élémentaires + cactus_armor: Combinaison en cactus + alloys: Alliages avancés + synthetic_diamond: Diamants synthétiques + damascus_steel: Acier damas + carbonado: Diamants noirs + gold_carats: 'Or pur ' + silicon: Silicon Valley + fire_staff: Sceptre de feu + smelters_pickaxe: Pioche-fonderie + common_talisman: Talisman commun + gilded_iron: Fer brillant + synthetic_emerald: Fausse gemme + chainmail_armor: Armure en côte de maille + lumber_axe: 'Hache du bûcheron ' + hazmat_suit: Combinaison Hazmat + uranium: Radioactif + crushed_ore: Purification des minerais + redstone_alloy: Alliage de redstone + first_aid: Premier secours + gold_armor: Armure brillante + night_vision_googles: Lunettes de vision nocture diff --git a/src/main/resources/languages/researches_vi.yml b/src/main/resources/languages/researches_vi.yml new file mode 100644 index 0000000000..5b2053d670 --- /dev/null +++ b/src/main/resources/languages/researches_vi.yml @@ -0,0 +1,232 @@ +--- +slimefun: + walking_sticks: Gậy đi bộ + portable_crafter: Bàn chế tạo di động + portable_dustbin: Thùng rác di động + meat_jerky: Thịt Jerky + armor_forge: Bàn chế tạo giáp + glowstone_armor: Giáp quang học + lumps: Những cục bướu phép + ender_backpack: Balô Ender + ender_armor: Giáp Ender + magic_eye_of_ender: Mắt Ender ma thuật + magic_sugar: Đường ma thuật + slime_armor: Giáp chất nhờn + basic_circuit_board: Bảng mạch cơ bản + advanced_circuit_board: Bảng mạch tiên tiến + smeltery: Lò đút + steel: Thời đại thép + misc_power_items: Vật phẩm quan trọng liên quan đến năng lượng + steel_plate: Mạ thép + steel_thruster: Máy đẩy thép + parachute: Cái dù bay + grappling_hook: Cái Móc + jetpacks: Giáp phản lực + multitools: Đa công cụ + solar_panel_and_helmet: Năng lượng mặt trời ( ngôi sao ) + elemental_staff: Trượng nguyên tố + grind_stone: Máy nghiền đá + cactus_armor: Bộ đồ xương rồng + gold_pan: Sàng vàng + magical_book_cover: Cuốn sách ma thuật liên kết + ore_crusher: Nhân đôi quặng + bronze: Tác phẩm đồng + alloys: Hợp kim cao cấp + compressor_and_carbon: Tác phẩm Carbon + gilded_iron_armor: Giáp sắt mạ vàng + synthetic_diamond: Kim cương tổng hợp + pressure_chamber: Buồng áp suất + synthetic_sapphire: Ngọc bích tổng hợp + damascus_steel: Thép Damascus + damascus_steel_armor: Giáp thép Damascus + reinforced_alloy: Hợp kim gia cố + magic_workbench: Bài chế tạo-ma thuật + wind_staff: Trượng gió + reinforced_armor: Giáp gia cố + ore_washer: Vòng đệm quặng ( giặc quặng ) + common_talisman: Bùa hộ mệnh thông thường + anvil_talisman: Bùa hộ mệnh của cái đe + miner_talisman: Bùa hộ mệnh khai khác + hunter_talisman: Bùa hộ mệnh thợ săn + lava_talisman: Bùa hộ mệnh dung nham + water_talisman: Bùa hộ mệnh nước + angel_talisman: Bùa hộ mệnh thiên sứ + fire_talisman: Bùa hộ mệnh tránh lửa + lava_crystal: Pha lê dung nham + magician_talisman: Bùa hộ mệnh pháp sư + traveller_talisman: Bùa hộ mệnh du hành + warrior_talisman: Bùa hộ mệnh chiến binh + knight_talisman: Bùa hộ mệnh kỵ sỹ + gilded_iron: Sắt mạ vàng + synthetic_emerald: ngọc lục bảo tổng hợp + chainmail_armor: Giáp Chainmail-mail ( lưới ) + whirlwind_talisman: Bùa hộ mệnh vòi rồng + wizard_talisman: Bùa hộ mệnh Thuật Sĩ + lumber_axe: Búa đốn gỗ ( vjp ) + hazmat_suit: Bộ đồ khử nhiễm + crushed_ore: Máy nghiền quặng + carbonado_tools: Công cụ kim cương đen + night_vision_googles: Kính nhìn đêm + pickaxe_of_containment: Cúp ngăn chặn + hercules_pickaxe: Cúp Thần Hercules + table_saw: Bàn cưa củi + slime_steel_armor: Giáp thép trơ + blade_of_vampires: Gươm ma cà rồng + composter: Khùng tổng hợp + farmer_shoes: Giầy làm nông + boots_of_the_stomper: Giày cao cổ + pickaxe_of_the_seeker: Cúp tìm kiếm + woven_backpack: Ba lô kết lại + crucible: Nồi nấu kim loại + gilded_backpack: Ba lô mạ vàng + ender_talismans: Bùa hộ mệnh Ender + magnet: Nam Châm + empowered_android: Chuỗi truyền Hệ điều hành + empowered_butcher_android: Chuỗi chuyền Hệ điều hành Chém + empowered_fisherman_android: Chuỗi chuyền Hệ điều hành Câu cá + fortune_cookie: Bánh quy may mắn + monster_jerky: Thịt quái quật khô + sword_of_beheading: Kiếm chặt đầu + battery: Viên Pin đầu tiên của bạn + carbonado: Kim cương đen + silicon: Thung lũng Silicon + fire_staff: Trượng Lửa + smelters_pickaxe: Cúp nung + redstone_alloy: Hợp kim Đá đỏ + first_aid: Bộ sơ cứu + gold_armor: Bộ giáp sáng bóng + water_staff: Trượng nước + 24k_gold_block: Thành phố Vàng + explosive_tools: Dụng cụ phát nổ + automated_panning_machine: Sàng vàng Tự động + armored_jetpack: Giáp phản lực + nickel_and_cobalt: Nhiều quặng khác + infused_magnet: Nam châm truyền + cobalt_pickaxe: Cúp nhanh nhẹn + essence_of_afterlife: Bột hậu kiếp + bound_backpack: Balo Linh hồn + jetboots: Giày phản lực + armored_jetboots: Giày thép phản lực + seismic_axe: Rìu địa chấn + pickaxe_of_vein_mining: Cúp đào tĩnh mạch + bound_weapons: Vũ khí linh hồn + bound_tools: Dụng cụ linh hồn + bound_armor: Giáp linh hồn + juicer: Thức uống ngon + repaired_spawner: Lồng được sửa chữa + enhanced_furnace: Lò nung cường hóa + more_enhanced_furnaces: Lò nung tốt hơn + high_tier_enhanced_furnaces: Lò nung cao cấp + reinforced_furnace: Lò nung được gia cố + carbonado_furnace: Lò nung cạnh carbon + electric_motor: Động cơ điện + block_placer: Máy đặt khối + scroll_of_dimensional_teleposition: Cuộn giấy của sự xoay chuyển + special_bows: Cung đặc biệt + tome_of_knowledge_sharing: Bộ chia sẽ kiến thức + flask_of_knowledge: Bình lưu trữ kinh nghiệm + hardened_glass: Kính cứng + cooler: Máy uống di động + ancient_altar: Tế đài cổ đại + wither_proof_obsidian: Hắc diện thạch chống Wither + ancient_runes: Ngọc nguyên tố + special_runes: Ngọc tím + infernal_bonemeal: Phân bón âm phủ + rainbow_blocks: Khối cầu vòng + infused_hopper: Phễu thu hút + wither_proof_glass: Kính chống Wither + duct_tape: Băng dính + android_memory_core: Lõi máy móc + hologram_projector: Ảnh ba chiều + solar_generators: Máy sản xuất năng lượng mặt trời + electric_furnaces: Lò nung điện + electric_ore_grinding: Máy nghiền điện + heated_pressure_chamber: Buồng gia nhiệt + bio_reactor: Lò phản ứng sinh học + auto_enchanting: Phù phép tự động + auto_anvil: Đe tự động + multimeter: Máy đo công suất điện + gps_setup: Máy thiết lập GPS cơ bản + gps_emergency_transmitter: Điểm khẩn cấp GPS + programmable_androids: Androids lập trình được + android_interfaces: Giao diện Android + geo_scanner: Máy quét GEO + combustion_reactor: Lò phản ứng đốt cháy + teleporter: Thành phần cơ sở dịch chuyển + teleporter_activation_plates: Kích hoạt dịch chuyển tức thời + better_solar_generators: Máy phát điện được nâng cấp + better_gps_transmitters: Máy phát được nâng cấp + energized_solar_generator: Máy phát điện toàn thời gian + energized_gps_transmitter: Máy phát cấp cao nhất + energy_regulator: Mạng năng lượng 101 + butcher_androids: Máy đồ tể + auto_breeder: Máy cho ăn tự động + advanced_android: Android nâng cao + advanced_butcher_android: Máy đồ tể nâng cao + advanced_fisherman_android: Máy câu cá nâng cao + animal_growth_accelerator: Máy tăng trưởng động vật + organic_fertilizer: Phân hữu cơ + crop_growth_accelerator: Máy tăng trưởng cây trồng + better_crop_growth_accelerator: Máy tăng tưởng cây trồng nâng cấp + reactor_essentials: Lò phản ứng thiết yếu + nuclear_reactor: Nhà máy điện hạt nhân + freezer: Máy làm lạnh + cargo_basics: Máy dịch chuyển đồ cơ bản + cargo_nodes: Thiết lập máy dịch chuyển đồ + electric_ingot_machines: Máy chế tạo phôi điện + high_tier_electric_ingot_machines: Máy chế tạo phôi điện siêu tốc + automated_crafting_chamber: Chế tạo tự động + better_food_fabricator: Máy chế tạo thực phẩm nâng cấp + reactor_access_port: Lò phản ứng được tiếp xúc + fluid_pump: Máy bơm chất lỏng + better_freezer: Máy làm lạnh nâng cấp + boosted_uranium: Vòng tròn không kết thúc + trash_can: Rác + advanced_output_node: Nút đầu ra nâng cao + carbon_press: Máy ép carbon + electric_smeltery: Lò nung điện + better_electric_furnace: Lò nung điện nâng cấp + better_carbon_press: Máy ép carbon nâng cấp + high_tier_carbon_press: Máy ép cacbon tối thượng + wither_assembler: Máy giết Wither tự động + better_heated_pressure_chamber: Máy áp suất nâng cấp + electric_crucible: Điện khí hóa + better_electric_crucibles: Máy nung đồ nóng + advanced_electric_smeltery: Lò rèn điện nâng cao + advanced_farmer_android: Android nâng cao - Nông phu + nether_ice: Đá địa ngục làm mát + nether_star_reactor: Lò hạt nhân sao địa ngục + blistering_ingots: Chất phóng xạ Blistering + automatic_ignition_chamber: Máy đánh lửa tự động + output_chest: Rương máy móc đưa ra cơ bản + copper_wire: Dây dẫn điện đồng + radiant_backpack: Ba lô phát quang + auto_drier: Một Ngày Khô ráo + diet_cookie: Bánh quy ăn kiêng + storm_staff: Trượng Sét + soulbound_rune: Ngọc linh hồn + geo_miner: Máy khai thác GEO + lightning_rune: Ngọc của Sấm sét + totem_of_undying: Vật tổ của sự Bất tử + charging_bench: Bàn sạc + electric_press: Máy ép chạy bằng điện + magnesium_generator: Sức mạnh từ Magiê + kelp_cookie: Tảo bẹ Ngon + slimefun_metals: Kim loại mới + gold_carats: Vàng nguyên chất + uranium: Phóng xạ + backpacks: Ba lô + golden_apple_juice: Thuốc vàng + plastic_sheet: Nhựa + oil: Dầu + fuel: Nhiên liệu + capacitors: Tụ điện cấp 1 + high_tier_capacitors: Tụ điện cấp 2 + coal_generator: Máy phát điện bằng than + elevator: Thang máy + organic_food: Thực phẩm hữu cơ + xp_collector: Máy thu kinh nghiệm + elytra: Cánh cứng + special_elytras: Cánh cứng đặc biệt + lava_generator: Máy phát điện bằng dung nham + nether_gold_pan: Chảo vàng địa ngục