diff --git a/CHANGELOG.md b/CHANGELOG.md index 297c3820b..2eda43a04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,12 +23,15 @@ ## Release Candidate 15 (TBD) #### Additions +* Added "Bone Block -> Bone meal" recipe to the Grind Stone +* Added a [Metrics module](https://github.com/Slimefun/MetricsModule) which allows us to release updates to metrics (bStats) independently from the main plugin +* Added "Compressed Carbon -> Carbon" recipe to the Ore Crusher +* Added "Carbon -> Coal" recipe to the Ore Crusher +* Added Iron Golem Assembler * Added Reinforced Cloth * Added Bee protection to Hazmat Suit * Added Enchantment Rune * Added Tape Measure -* Added "Bone Block -> Bone meal" recipe to the Grind Stone -* Added Iron Golem Assembler #### Changes * Refactored and reworked the Generator API diff --git a/README.md b/README.md index b7ffc8315..78a818163 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,10 @@ All of the collected data is publicly accessible: https://bstats.org/plugin/bukk You can also disable this behaviour under `/plugins/bStats/config.yml`.
For more info see [bStats' Privacy Policy](https://bstats.org/privacy-policy) + +Our [bStats Module](https://github.com/Slimefun/MetricsModule) is downloaded automatically when installing this Plugin, this module will automatically update on server starts independently from the main plugin. This way we can automatically roll out updates to the bStats module, in cases of severe performance issues for example where live data and insight into what is impacting performance can be crucial. +These updates can of course be disabled under `/plugins/Slimefun/config.yml`. To disable metrics collection as a whole, see the paragraph above. +
diff --git a/pom.xml b/pom.xml index c5f80f960..1e7d52776 100644 --- a/pom.xml +++ b/pom.xml @@ -327,6 +327,17 @@ 1.7 compile + + com.konghq + unirest-java + 3.8.06 + + + com.google.code.gson + gson + + + io.papermc paperlib diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java index c63601815..2ca581eff 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/VersionsCommand.java @@ -2,17 +2,16 @@ package io.github.thebusybiscuit.slimefun4.core.commands.subcommands; import java.util.Collection; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.plugin.Plugin; - import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.cscorelib2.reflection.ReflectionUtils; import io.github.thebusybiscuit.slimefun4.core.commands.SlimefunCommand; import io.github.thebusybiscuit.slimefun4.core.commands.SubCommand; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.plugin.Plugin; import io.papermc.lib.PaperLib; class VersionsCommand extends SubCommand { @@ -42,8 +41,11 @@ class VersionsCommand extends SubCommand { sender.sendMessage(ChatColors.color("&aCS-CoreLib &2v" + SlimefunPlugin.getCSCoreLibVersion())); sender.sendMessage(ChatColors.color("&aSlimefun &2v" + SlimefunPlugin.getVersion())); + if (SlimefunPlugin.getMetricsService().getVersion() != null) + sender.sendMessage(ChatColors.color("&aMetrics: &2#" + SlimefunPlugin.getMetricsService().getVersion() + ')')); + if (SlimefunPlugin.getRegistry().isBackwardsCompatible()) { - sender.sendMessage(ChatColor.YELLOW + "Backwards compatiblity enabled!"); + sender.sendMessage(ChatColor.YELLOW + "Backwards compatibility enabled!"); } sender.sendMessage(""); 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 new file mode 100644 index 000000000..fef03a78a --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/MetricsService.java @@ -0,0 +1,242 @@ +package io.github.thebusybiscuit.slimefun4.core.services; + +import javax.annotation.Nullable; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; + +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; +import kong.unirest.HttpResponse; +import kong.unirest.JsonNode; +import kong.unirest.Unirest; +import kong.unirest.UnirestException; +import me.mrCookieSlime.Slimefun.api.Slimefun; +import org.bukkit.plugin.Plugin; + +/** + * This Class represents a Metrics Service that sends data to https://bstats.org/ + * This data is used to analyse the usage of this {@link Plugin}. + *

+ * You can find more info in the README file of this Project on GitHub.
+ * Note: To start the metrics you will need to be calling {@link #start()} + * + * @author WalshyDev + */ +public class MetricsService { + + private static final String REPO_NAME = "MetricsModule"; + private static final String GH_API = "https://api.github.com/repos/Slimefun/" + REPO_NAME; + private static final String GH_RELEASES = "https://github.com/Slimefun/" + REPO_NAME + "/releases/download"; + + private final SlimefunPlugin plugin; + private final File parentFolder; + private final File metricsModuleFile; + + private URLClassLoader moduleClassLoader; + private String metricVersion = null; + private boolean hasDownloadedUpdate = false; + + static { + Unirest.config() + .concurrency(2, 1) + .setDefaultHeader("User-Agent", "MetricsModule Auto-Updater") + .setDefaultHeader("Accept", "application/vnd.github.v3+json") + .enableCookieManagement(false) + .cookieSpec("ignoreCookies"); + } + + public MetricsService(SlimefunPlugin plugin) { + this.plugin = plugin; + this.parentFolder = new File(plugin.getDataFolder(), "cache" + File.separatorChar + "modules"); + + if (!parentFolder.exists()) { + parentFolder.mkdirs(); + } + + this.metricsModuleFile = new File(parentFolder, REPO_NAME + ".jar"); + } + + /** + * This method loads the metric module and starts the metrics collection. + */ + public void start() { + if (!metricsModuleFile.exists()) { + plugin.getLogger().info(REPO_NAME + " does not exist, downloading..."); + + if (!download(getLatestVersion())) { + plugin.getLogger().warning("Failed to start metrics as the file could not be downloaded."); + return; + } + } + + try { + // Load the jar file into a child class loader using the SF PluginClassLoader + // as a parent. + moduleClassLoader = URLClassLoader.newInstance(new URL[] { metricsModuleFile.toURI().toURL() }, + plugin.getClass().getClassLoader()); + Class cl = moduleClassLoader.loadClass("dev.walshy.sfmetrics.MetricsModule"); + + metricVersion = cl.getPackage().getImplementationVersion(); + + // If it has not been newly downloaded, auto-updates are on AND there's a new version + // then cleanup, download and start + if (!hasDownloadedUpdate && hasAutoUpdates() && checkForUpdate(metricVersion) + ) { + plugin.getLogger().info("Cleaning up and re-loading Metrics."); + cleanUp(); + start(); + return; + } + + // Finally, we're good to start this. + Method start = cl.getDeclaredMethod("start"); + String version = cl.getPackage().getImplementationVersion(); + + // This is required to be sync due to bStats. + Slimefun.runSync(() -> { + try { + start.invoke(null); + plugin.getLogger().info("Metrics build #" + version + " started."); + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Failed to start metrics.", e); + } + }); + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, + "Failed to load the metrics module. Maybe the jar is corrupt?", e); + } + } + + /** + * This will close the child classloader and mark all the resources held under this no longer + * in use, they will be cleaned up the next GC run. + */ + public void cleanUp() { + try { + if (this.moduleClassLoader != null) { + this.moduleClassLoader.close(); + } + } catch (IOException e) { + plugin.getLogger().log(Level.WARNING, + "Could not clean up module class loader. Some memory may have been leaked."); + } + } + + /** + * Checks for a new update and compares it against the current version. + * If there is a new version available then this returns true. + * + * @param currentVersion The current version which is being used. + * @return True if there is an update available. + */ + public boolean checkForUpdate(String currentVersion) { + if (currentVersion == null || !PatternUtils.NUMERIC.matcher(currentVersion).matches()) { + return false; + } + + int latest = getLatestVersion(); + + if (latest > Integer.parseInt(currentVersion)) { + return download(latest); + } + + return false; + } + + /** + * Gets the latest version available as an int. + * This is an internal method used by {@link #checkForUpdate(String)}. + * If it cannot get the version for whatever reason this will return 0, effectively always + * being behind. + * + * @return The latest version as an integer or -1 if it failed to fetch. + */ + private int getLatestVersion() { + try { + HttpResponse response = Unirest.get(GH_API + "/releases/latest") + .asJson(); + if (!response.isSuccess()) return -1; + + JsonNode node = response.getBody(); + + if (node == null) return -1; + + return node.getObject().getInt("tag_name"); + } catch (UnirestException e) { + plugin.getLogger().log(Level.SEVERE, "Failed to fetch latest builds for SFMetrics"); + return -1; + } + } + + /** + * Downloads the version specified to Slimefun's data folder. + * + * @param version The version to download. + */ + private boolean download(int version) { + File f = new File(parentFolder, "Metrics-" + version + ".jar"); + + try { + plugin.getLogger().log(Level.INFO, "# Starting download of MetricsModule build: #{0}", version); + + AtomicInteger lastPercentPosted = new AtomicInteger(); + HttpResponse response = Unirest.get(GH_RELEASES + "/" + version + + "/" + REPO_NAME + ".jar") + .downloadMonitor((b, fileName, bytesWritten, totalBytes) -> { + int percent = (int) (20 * (Math.round((((double) bytesWritten / totalBytes) * 100) / 20))); + + if (percent != 0 && percent != lastPercentPosted.get()) { + plugin.getLogger().info("# Downloading... " + percent + "% " + + "(" + bytesWritten + "/" + totalBytes + " bytes)"); + lastPercentPosted.set(percent); + } + }) + .asFile(f.getPath()); + if (response.isSuccess()) { + plugin.getLogger().log(Level.INFO, "Successfully downloaded {0} build: #{1}", new Object[] {REPO_NAME, version}); + + // Replace the metric file with the new one + Files.move(f.toPath(), metricsModuleFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + + metricVersion = String.valueOf(version); + hasDownloadedUpdate = true; + return true; + } + } catch (UnirestException e) { + plugin.getLogger().log(Level.WARNING, "Failed to fetch the latest jar file from the" + + " builds page. Perhaps GitHub is down."); + } catch (IOException e) { + plugin.getLogger().log(Level.WARNING, "Failed to replace the old metric file with the " + + "new one. Please do this manually! Error: {0}", e.getMessage()); + } + return false; + } + + /** + * Returns the currently downloaded metrics version. + * This can change! It may be null or an + * older version before it has downloaded a newer one. + * + * @return The current version or null if not loaded. + */ + @Nullable + public String getVersion() { + return metricVersion; + } + + /** + * Returns if the current server has metrics auto-updates enabled. + * + * @return True if the current server has metrics auto-updates enabled. + */ + public boolean hasAutoUpdates() { + return SlimefunPlugin.instance().getConfig().getBoolean("metrics.auto-update"); + } +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java index 5f50d2783..7aea16847 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java @@ -6,10 +6,9 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - +import kong.unirest.JsonNode; +import kong.unirest.json.JSONArray; +import kong.unirest.json.JSONObject; import me.mrCookieSlime.Slimefun.api.Slimefun; class ContributionsConnector extends GitHubConnector { @@ -57,10 +56,10 @@ class ContributionsConnector extends GitHubConnector { } @Override - public void onSuccess(JsonElement element) { + public void onSuccess(JsonNode element) { finished = true; - if (element.isJsonArray()) { - computeContributors(element.getAsJsonArray()); + if (element.isArray()) { + computeContributors(element.getArray()); } else { Slimefun.getLogger().log(Level.WARNING, "Received an unusual answer from GitHub, possibly a timeout? ({0})", element); @@ -82,13 +81,13 @@ class ContributionsConnector extends GitHubConnector { return "/contributors?per_page=100&page=" + page; } - private void computeContributors(JsonArray array) { - for (int i = 0; i < array.size(); i++) { - JsonObject object = array.get(i).getAsJsonObject(); + private void computeContributors(JSONArray array) { + for (int i = 0; i < array.length(); i++) { + JSONObject object = array.getJSONObject(i); - String name = object.get("login").getAsString(); - int commits = object.get("contributions").getAsInt(); - String profile = object.get("html_url").getAsString(); + String name = object.getString("login"); + int commits = object.getInt("contributions"); + String profile = object.getString("html_url"); if (!blacklist.contains(name)) { github.addContributor(aliases.getOrDefault(name, name), profile, role, commits); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubConnector.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubConnector.java index 68e76ec42..1ab1b4149 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubConnector.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubConnector.java @@ -6,17 +6,14 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; import java.nio.charset.StandardCharsets; import java.util.logging.Level; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import kong.unirest.HttpResponse; +import kong.unirest.JsonNode; +import kong.unirest.Unirest; +import kong.unirest.UnirestException; +import kong.unirest.json.JSONException; import me.mrCookieSlime.Slimefun.api.Slimefun; abstract class GitHubConnector { @@ -34,7 +31,7 @@ abstract class GitHubConnector { public abstract String getURLSuffix(); - public abstract void onSuccess(JsonElement element); + public abstract void onSuccess(JsonNode element); public void onFailure() { // Don't do anything by default @@ -48,58 +45,54 @@ abstract class GitHubConnector { } try { - URL website = new URL("https://api.github.com/repos/" + repository + getURLSuffix()); + HttpResponse resp = Unirest.get("https://api.github.com/repos/" + repository + getURLSuffix()) + .header("User-Agent", "Slimefun4 (https://github.com/Slimefun)") + .asJson(); - URLConnection connection = website.openConnection(); - connection.setConnectTimeout(8000); - connection.addRequestProperty("Accept-Charset", "UTF-8"); - connection.addRequestProperty("User-Agent", "Slimefun 4 GitHub Agent (by TheBusyBiscuit)"); - connection.setDoOutput(true); - - try (ReadableByteChannel channel = Channels.newChannel(connection.getInputStream())) { - try (FileOutputStream stream = new FileOutputStream(file)) { - stream.getChannel().transferFrom(channel, 0, Long.MAX_VALUE); - parseData(); - } + if (resp.isSuccess()) { + onSuccess(resp.getBody()); + writeCacheFile(resp.getBody()); + } + else { + Slimefun.getLogger().log(Level.WARNING, "Failed to fetch {0}", repository + getURLSuffix()); } } - catch (IOException e) { + catch (UnirestException e) { if (github.isLoggingEnabled()) { Slimefun.getLogger().log(Level.WARNING, "Could not connect to GitHub in time."); } - if (hasData()) { - parseData(); - } - else { - onFailure(); - } - } - } + // It has the cached file, let's just read that then + if (file.exists()) { + JsonNode cache = readCacheFile(); - public boolean hasData() { - return getFile().exists(); - } - - public File getFile() { - return file; - } - - public void parseData() { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(getFile()), StandardCharsets.UTF_8))) { - StringBuilder builder = new StringBuilder(); - - String line; - while ((line = reader.readLine()) != null) { - builder.append(line); + if (cache != null) { + onSuccess(cache); + return; + } } - JsonElement element = new JsonParser().parse(builder.toString()); - onSuccess(element); - } - catch (IOException x) { - Slimefun.getLogger().log(Level.SEVERE, x, () -> "An Error occurred while parsing GitHub-Data for Slimefun " + SlimefunPlugin.getVersion()); + // If the request failed and it failed to read the cache then call onFailure. onFailure(); } } + + private JsonNode readCacheFile() { + try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) { + return new JsonNode(br.readLine()); + } + catch (IOException | JSONException e) { + Slimefun.getLogger().log(Level.WARNING, "Failed to read Github cache file: {0}", file.getName()); + return null; + } + } + + private void writeCacheFile(JsonNode node) { + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(node.toString().getBytes(StandardCharsets.UTF_8)); + } + catch (IOException e) { + Slimefun.getLogger().log(Level.WARNING, "Failed to populate GitHub cache"); + } + } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubIssuesTracker.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubIssuesTracker.java index 9686d4e92..84af62998 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubIssuesTracker.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubIssuesTracker.java @@ -2,10 +2,9 @@ package io.github.thebusybiscuit.slimefun4.core.services.github; import java.util.logging.Level; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - +import kong.unirest.JsonNode; +import kong.unirest.json.JSONArray; +import kong.unirest.json.JSONObject; import me.mrCookieSlime.Slimefun.api.Slimefun; class GitHubIssuesTracker extends GitHubConnector { @@ -25,15 +24,15 @@ class GitHubIssuesTracker extends GitHubConnector { } @Override - public void onSuccess(JsonElement element) { - if (element.isJsonArray()) { - JsonArray array = element.getAsJsonArray(); + public void onSuccess(JsonNode element) { + if (element.isArray()) { + JSONArray array = element.getArray(); int issues = 0; int pullRequests = 0; - for (JsonElement elem : array) { - JsonObject obj = elem.getAsJsonObject(); + for (int i = 0; i < array.length(); i++) { + JSONObject obj = array.getJSONObject(i); if (obj.has("pull_request")) { pullRequests++; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java index 0364140d0..77df08cc0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java @@ -9,14 +9,13 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - import io.github.thebusybiscuit.cscorelib2.config.Config; import io.github.thebusybiscuit.slimefun4.core.services.localization.Translators; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.HeadTexture; import io.github.thebusybiscuit.slimefun4.utils.NumberUtils; +import kong.unirest.JsonNode; +import kong.unirest.json.JSONObject; /** * This Service is responsible for grabbing every {@link Contributor} to this project @@ -108,11 +107,11 @@ public class GitHubService { connectors.add(new GitHubConnector(this, repository) { @Override - public void onSuccess(JsonElement element) { - JsonObject object = element.getAsJsonObject(); - forks = object.get("forks").getAsInt(); - stars = object.get("stargazers_count").getAsInt(); - lastUpdate = NumberUtils.parseGitHubDate(object.get("pushed_at").getAsString()); + public void onSuccess(JsonNode element) { + JSONObject object = element.getObject(); + forks = object.getInt("forks"); + stars = object.getInt("stargazers_count"); + lastUpdate = NumberUtils.parseGitHubDate(object.getString("pushed_at")); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/AddonsChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/AddonsChart.java deleted file mode 100644 index 2ed2a7d59..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/AddonsChart.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import java.util.HashMap; -import java.util.Map; - -import org.bstats.bukkit.Metrics.AdvancedPie; -import org.bukkit.plugin.Plugin; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class AddonsChart extends AdvancedPie { - - AddonsChart() { - super("installed_addons", () -> { - Map addons = new HashMap<>(); - - for (Plugin plugin : SlimefunPlugin.getInstalledAddons()) { - if (plugin.isEnabled()) { - addons.put(plugin.getName(), 1); - } - } - - return addons; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/AutoUpdaterChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/AutoUpdaterChart.java deleted file mode 100644 index eba426338..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/AutoUpdaterChart.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics.SimplePie; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class AutoUpdaterChart extends SimplePie { - - AutoUpdaterChart() { - super("auto_updates", () -> { - boolean enabled = SlimefunPlugin.getUpdater().isEnabled(); - return enabled ? "enabled" : "disabled"; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/CommandChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/CommandChart.java deleted file mode 100644 index d9fc909c1..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/CommandChart.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import java.util.HashMap; -import java.util.Map; - -import org.bstats.bukkit.Metrics.AdvancedPie; - -import io.github.thebusybiscuit.slimefun4.core.commands.SubCommand; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class CommandChart extends AdvancedPie { - - CommandChart() { - super("commands_ran", () -> { - Map commands = new HashMap<>(); - - for (Map.Entry entry : SlimefunPlugin.getCommand().getCommandUsage().entrySet()) { - commands.put("/sf " + entry.getKey().getName(), entry.getValue()); - } - - return commands; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/CompatibilityModeChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/CompatibilityModeChart.java deleted file mode 100644 index 045c2657e..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/CompatibilityModeChart.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics.SimplePie; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class CompatibilityModeChart extends SimplePie { - - CompatibilityModeChart() { - super("compatibility_mode", () -> { - boolean enabled = SlimefunPlugin.getRegistry().isBackwardsCompatible(); - return enabled ? "enabled" : "disabled"; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/GuideLayoutChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/GuideLayoutChart.java deleted file mode 100644 index 75fc72b42..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/GuideLayoutChart.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics.SimplePie; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class GuideLayoutChart extends SimplePie { - - GuideLayoutChart() { - super("guide_layout", () -> { - boolean book = SlimefunPlugin.getCfg().getBoolean("guide.default-view-book"); - - return book ? "Book" : "Chest GUI"; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/MetricsService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/MetricsService.java deleted file mode 100644 index d6654f6a2..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/MetricsService.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics; -import org.bukkit.plugin.Plugin; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -/** - * This Class represents a Metrics Service that sends data to https://bstats.org/ - * This data is used to analyse the usage of this {@link Plugin}. - * - * You can find more info in the README file of this Project on GitHub. - * - * @author TheBusyBiscuit - * - */ -public class MetricsService { - - private final SlimefunPlugin plugin; - - /** - * This creates a new {@link MetricsService}. The constructor does not set up - * anything related to bStats yet, that happens in the {@link MetricsService#start()} method. - * - * @param plugin - * The instance of our {@link SlimefunPlugin} - */ - public MetricsService(SlimefunPlugin plugin) { - this.plugin = plugin; - } - - /** - * This method intializes and starts the metrics collection. - */ - public void start() { - Metrics metrics = new Metrics(plugin, 4574); - - if (SlimefunPlugin.getUpdater().getBranch().isOfficial()) { - // We really do not need this data if it is an unofficially modified build... - metrics.addCustomChart(new AutoUpdaterChart()); - } - - metrics.addCustomChart(new ResourcePackChart()); - metrics.addCustomChart(new SlimefunVersionChart()); - metrics.addCustomChart(new ServerLanguageChart()); - metrics.addCustomChart(new PlayerLanguageChart()); - metrics.addCustomChart(new ResearchesEnabledChart()); - metrics.addCustomChart(new GuideLayoutChart()); - metrics.addCustomChart(new AddonsChart()); - metrics.addCustomChart(new CommandChart()); - metrics.addCustomChart(new ServerSizeChart()); - metrics.addCustomChart(new CompatibilityModeChart()); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/PlayerLanguageChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/PlayerLanguageChart.java deleted file mode 100644 index 347bf0640..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/PlayerLanguageChart.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import java.util.HashMap; -import java.util.Map; - -import org.bstats.bukkit.Metrics.AdvancedPie; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -import io.github.thebusybiscuit.slimefun4.core.services.localization.Language; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class PlayerLanguageChart extends AdvancedPie { - - PlayerLanguageChart() { - super("player_languages", () -> { - Map languages = new HashMap<>(); - - for (Player p : Bukkit.getOnlinePlayers()) { - Language language = SlimefunPlugin.getLocalization().getLanguage(p); - boolean supported = SlimefunPlugin.getLocalization().isLanguageLoaded(language.getId()); - - String lang = supported ? language.getId() : "Unsupported Language"; - languages.merge(lang, 1, Integer::sum); - } - - return languages; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ResearchesEnabledChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ResearchesEnabledChart.java deleted file mode 100644 index 87a66bf2f..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ResearchesEnabledChart.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics.SimplePie; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class ResearchesEnabledChart extends SimplePie { - - ResearchesEnabledChart() { - super("servers_with_researches_enabled", () -> { - boolean enabled = SlimefunPlugin.getRegistry().isFreeCreativeResearchingEnabled(); - return enabled ? "enabled" : "disabled"; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ResourcePackChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ResourcePackChart.java deleted file mode 100644 index 0622c6e03..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ResourcePackChart.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics.SimplePie; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class ResourcePackChart extends SimplePie { - - ResourcePackChart() { - super("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"; - } - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ServerLanguageChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ServerLanguageChart.java deleted file mode 100644 index e006eaf6d..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ServerLanguageChart.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics.SimplePie; - -import io.github.thebusybiscuit.slimefun4.core.services.localization.Language; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class ServerLanguageChart extends SimplePie { - - ServerLanguageChart() { - super("language", () -> { - Language language = SlimefunPlugin.getLocalization().getDefaultLanguage(); - boolean supported = SlimefunPlugin.getLocalization().isLanguageLoaded(language.getId()); - return supported ? language.getId() : "Unsupported Language"; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ServerSizeChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ServerSizeChart.java deleted file mode 100644 index 607859ba6..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/ServerSizeChart.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import org.bstats.bukkit.Metrics.SimplePie; -import org.bukkit.Bukkit; - -class ServerSizeChart extends SimplePie { - - ServerSizeChart() { - super("server_size", () -> { - int players = Bukkit.getOnlinePlayers().size(); - - if (players < 10) { - return "0-10"; - } - - if (players < 25) { - return "10-25"; - } - - if (players < 50) { - return "25-50"; - } - - if (players < 100) { - return "50-100"; - } - - if (players < 200) { - return "100-200"; - } - - if (players < 300) { - return "200-300"; - } - - return "300+"; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/SlimefunVersionChart.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/SlimefunVersionChart.java deleted file mode 100644 index 6140b60b0..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/SlimefunVersionChart.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; - -import java.util.HashMap; -import java.util.Map; - -import org.bstats.bukkit.Metrics.DrilldownPie; - -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; - -class SlimefunVersionChart extends DrilldownPie { - - SlimefunVersionChart() { - super("slimefun_version", () -> { - Map> outerMap = new HashMap<>(); - Map innerMap = new HashMap<>(); - - innerMap.put(SlimefunPlugin.getVersion(), 1); - outerMap.put(SlimefunPlugin.getUpdater().getBranch().getName(), innerMap); - - return outerMap; - }); - } - -} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/package-info.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/package-info.java deleted file mode 100644 index 3528603ca..000000000 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/metrics/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This package contains everything related to bStats Metrics - */ -package io.github.thebusybiscuit.slimefun4.core.services.metrics; \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunPlugin.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunPlugin.java index f149a7712..b46b45f22 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunPlugin.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunPlugin.java @@ -41,7 +41,7 @@ import io.github.thebusybiscuit.slimefun4.core.services.PerWorldSettingsService; import io.github.thebusybiscuit.slimefun4.core.services.PermissionsService; import io.github.thebusybiscuit.slimefun4.core.services.UpdaterService; import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubService; -import io.github.thebusybiscuit.slimefun4.core.services.metrics.MetricsService; +import io.github.thebusybiscuit.slimefun4.core.services.MetricsService; import io.github.thebusybiscuit.slimefun4.core.services.plugins.ThirdPartyPluginService; import io.github.thebusybiscuit.slimefun4.core.services.profiler.SlimefunProfiler; import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientAltar; @@ -197,7 +197,7 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { networkManager = new NetworkManager(networkSize); // Setting up bStats - metricsService.start(); + new Thread(metricsService::start).start(); // Starting the Auto-Updater if (config.getBoolean("options.auto-update")) { @@ -368,6 +368,8 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { // Create a new backup zip backupService.run(); + metricsService.cleanUp(); + // Prevent Memory Leaks // These static Maps should be removed at some point... AContainer.processing = null; @@ -570,6 +572,16 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { return instance.updaterService; } + /** + * This method returns the {@link MetricsService} of Slimefun. + * It is used to handle sending metric information to bStats. + * + * @return The {@link MetricsService} for Slimefun + */ + public static MetricsService getMetricsService() { + return instance.metricsService; + } + /** * This method returns the {@link GitHubService} of Slimefun. * It is used to retrieve data from GitHub repositories. diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoManager.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoManager.java index be3bb5d5d..bd1e20633 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoManager.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoManager.java @@ -46,8 +46,6 @@ public class CargoManager extends SlimefunItem { }, new BlockUseHandler() { - private final String visualizerKey = "visualizer"; - @Override public void onRightClick(PlayerRightClickEvent e) { Optional block = e.getClickedBlock(); @@ -56,12 +54,12 @@ public class CargoManager extends SlimefunItem { Player p = e.getPlayer(); Block b = block.get(); - if (BlockStorage.getLocationInfo(b.getLocation(), visualizerKey) == null) { - BlockStorage.addBlockInfo(b, visualizerKey, "disabled"); + if (BlockStorage.getLocationInfo(b.getLocation(), "visualizer") == null) { + BlockStorage.addBlockInfo(b, "visualizer", "disabled"); p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718")); } else { - BlockStorage.addBlockInfo(b, visualizerKey, null); + BlockStorage.addBlockInfo(b, "visualizer", null); p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714")); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java index d5b52795a..9d07221a0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/OreCrusher.java @@ -50,6 +50,12 @@ public class OreCrusher extends MultiBlockMachine { recipes.add(new ItemStack(Material.MAGMA_BLOCK, 4)); recipes.add(SlimefunItems.SULFATE); + + recipes.add(SlimefunItems.CARBON); + recipes.add(new ItemStack(Material.COAL, 8)); + + recipes.add(SlimefunItems.COMPRESSED_CARBON); + recipes.add(new SlimefunItemStack(SlimefunItems.CARBON, 4)); } public boolean isOreDoublingEnabled() { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java deleted file mode 100644 index eeb6ab35d..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java +++ /dev/null @@ -1,15 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects; - -import org.bukkit.NamespacedKey; - -/** - * @deprecated Moved to io.github.thebusybiscuit.slimefun4.core.researching.Research - * - */ -@Deprecated -public class Research extends io.github.thebusybiscuit.slimefun4.core.researching.Research { - - public Research(NamespacedKey key, int id, String name, int cost) { - super(key, id, name, cost); - } -} \ No newline at end of file diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java deleted file mode 100644 index f90416c80..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; - -import org.bukkit.inventory.ItemStack; - -import me.mrCookieSlime.Slimefun.Lists.RecipeType; -import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; -import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; - -/** - * @deprecated Moved to {@link io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem} - * - * @param - * deprecated. - */ -@Deprecated -public abstract class SimpleSlimefunItem extends io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem { - - public SimpleSlimefunItem(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); - } - - public SimpleSlimefunItem(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { - super(category, item, recipeType, recipe, recipeOutput); - } - -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemUseHandler.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemUseHandler.java deleted file mode 100644 index 13c5653b2..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemUseHandler.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects.handlers; - -/** - * @deprecated Moved to {@link io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler} - */ -@Deprecated -public interface ItemUseHandler extends io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler { - -} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 3ff862a3d..eca44c177 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -6,7 +6,7 @@ options: auto-update: true backwards-compatibility: true - chat-prefix: '&a&lSlimefun 4 &7>' + chat-prefix: '&a&lSlimefun 4&7> ' armor-update-interval: 10 enable-armor-effects: true auto-save-delay-in-minutes: 10 @@ -40,6 +40,9 @@ items: backpacks: true soulbound: true +metrics: + auto-update: true + research-ranks: - Chicken - Cow diff --git a/src/main/resources/languages/categories_hu.yml b/src/main/resources/languages/categories_hu.yml index c02ce2fcb..812f254a8 100644 --- a/src/main/resources/languages/categories_hu.yml +++ b/src/main/resources/languages/categories_hu.yml @@ -23,3 +23,4 @@ slimefun: easter: Húsvét (Április) birthday: TheBusyBiscuit születésnapja (Október 26.) halloween: Halloween (Október 31.) + androids: Programozható Androidok diff --git a/src/main/resources/languages/recipes_hu.yml b/src/main/resources/languages/recipes_hu.yml index 4ded3545d..1992ade71 100644 --- a/src/main/resources/languages/recipes_hu.yml +++ b/src/main/resources/languages/recipes_hu.yml @@ -1,145 +1,107 @@ --- -minecraft: - blasting: - lore: - - Olvaszd meg ezt a tárgyat egy Kohóban, - - hogy elkészítsd a kívánt tárgyat - name: Kohó Recept - campfire: - lore: - - Olvaszd meg ezt a tárgyat egy Tábortűzön, - - hogy elkészítsd a kívánt tárgyat - name: Tábortűz Recept - furnace: - lore: - - Olvaszd meg ezt a tárgyat egy Kemencében, - - hogy elkészítsd a kívánt tárgyat - name: Kemence Recept - shaped: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Normális Barkácsasztal segítségével. - - A forma fontos. - name: Barkácsrecept Forma - shapeless: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Normális Barkácsasztal segítségével. - - Ez a Recept forma nélküli. - name: Forma Nélküli Barkácsrecept - smoking: - lore: - - Olvaszd meg ezt a tárgyat egy Füstölőben, - - hogy elkészítsd a kívánt tárgyat - name: Füstölő Recept - stonecutting: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Kővágó segítségével - name: Kővágó Recept slimefun: - ancient_altar: + multiblock: + name: Multiblock lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Ancient Altar segítségével. - - Keress utána az Ancient Altar-nak a további információkért - name: Ancient Altar - armor_forge: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Armor Forge segítségével - name: Armor Forge - compressor: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Compressor segítségével - name: Compressor + - Építsd meg a látott szerkezetet + - az ábra alapján. Ez nem barkácsolás. enhanced_crafting_table: + name: Enhanced Crafting Table lore: - Készítsd el ezt a Tárgyat az ábra alapján - egy Enhanced Crafting Table-ben. - A normális Barkácsasztal nem lesz elegendő! - name: Enhanced Crafting Table - food_composter: + armor_forge: + name: Armor Forge lore: - Készítsd el ezt a Tárgyat az ábra alapján - - egy Food Composter segítségével - name: Food Composter - food_fabricator: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Food Fabricator segítségével - name: Food Fabricator - freezer: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Freezer segítségével - name: Freezer - geo_miner: - lore: - - Ez a tárgy összegyűjthető - - egy GEO Miner segítségével - name: GEO Miner - gold_pan: - lore: - - Használd az Gold Pan-t, - - hogy megszerezd ezt a tárgyat - name: Gold Pan + - egy Armor Forge segítségével grind_stone: + name: Grind Stone lore: - Készítsd el ezt a Tárgyat az ábra alapján - egy Grind Stone segítségével - name: Grind Stone - heated_pressure_chamber: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Heated Pressure Chamber segítségével - name: Heated Pressure Chamber - juicer: - lore: - - Készítsd el ezt a Gyümölcslevet az ábra alapján - - egy Juicer segítségével - name: Juicer - magic_workbench: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Magic Workbench segítségével - name: Magic Workbench - mob_drop: - lore: - - Öld meg ezt az Élőlényt, - - hogy megszerezd ezt a tárgyat - name: Mob Drop - multiblock: - lore: - - Építsd meg a látott szerkezetet - - az ábra alapján. Ez nem barkácsolás. - name: Multiblock - nuclear_reactor: - lore: - - Ez a tárgy mellékterméke - - a Nuclear Reactor működésének - name: Nuclear Reactor - ore_crusher: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Ore Crusher segítségével - name: Ore Crusher - ore_washer: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Ore Washer segítségével - name: Ore Washer - pressure_chamber: - lore: - - Készítsd el ezt a Tárgyat az ábra alapján - - egy Pressure Chamber segítségével - name: Pressure Chamber smeltery: + name: Smeltery lore: - Készítsd el ezt a Tárgyat az ábra alapján - egy Smeltery segítségével - name: Smeltery + ore_crusher: + name: Ore Crusher + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Ore Crusher segítségével + mob_drop: + name: Mob Drop + lore: + - Öld meg ezt az Élőlényt, + - hogy megszerezd ezt a tárgyat + gold_pan: + name: Gold Pan + lore: + - Használd az Gold Pan-t, + - hogy megszerezd ezt a tárgyat + compressor: + name: Compressor + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Compressor segítségével + pressure_chamber: + name: Pressure Chamber + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Pressure Chamber segítségével + ore_washer: + name: Ore Washer + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Ore Washer segítségével + juicer: + name: Juicer + lore: + - Készítsd el ezt a Gyümölcslevet az ábra alapján + - egy Juicer segítségével + magic_workbench: + name: Magic Workbench + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Magic Workbench segítségével + ancient_altar: + name: Ancient Altar + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Ancient Altar segítségével. + - Keress utána az Ancient Altar-nak a további információkért + heated_pressure_chamber: + name: Heated Pressure Chamber + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Heated Pressure Chamber segítségével + food_fabricator: + name: Food Fabricator + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Food Fabricator segítségével + food_composter: + name: Food Composter + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Food Composter segítségével + freezer: + name: Freezer + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Freezer segítségével + geo_miner: + name: GEO Miner + lore: + - Ez a tárgy összegyűjthető + - egy GEO Miner segítségével + nuclear_reactor: + name: Nuclear Reactor + lore: + - Ez a tárgy mellékterméke + - a Nuclear Reactor működésének oil_pump: name: Oil Pump lore: @@ -156,3 +118,46 @@ slimefun: lore: - Készítsd el ezt a Tárgyat az ábra alapján - egy Refinery segítségével +minecraft: + shaped: + name: Barkácsrecept Forma + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Normális Barkácsasztal segítségével. + - A forma fontos. + shapeless: + name: Forma Nélküli Barkácsrecept + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Normális Barkácsasztal segítségével. + - Ez a Recept forma nélküli. + furnace: + name: Kemence Recept + lore: + - Olvaszd meg ezt a tárgyat egy Kemencében, + - hogy elkészítsd a kívánt tárgyat + blasting: + name: Kohó Recept + lore: + - Olvaszd meg ezt a tárgyat egy Kohóban, + - hogy elkészítsd a kívánt tárgyat + smoking: + name: Füstölő Recept + lore: + - Olvaszd meg ezt a tárgyat egy Füstölőben, + - hogy elkészítsd a kívánt tárgyat + campfire: + name: Tábortűz Recept + lore: + - Olvaszd meg ezt a tárgyat egy Tábortűzön, + - hogy elkészítsd a kívánt tárgyat + stonecutting: + name: Kővágó Recept + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Kővágó segítségével + smithing: + name: Kovácsasztal Recept + lore: + - Készítsd el ezt a Tárgyat az ábra alapján + - egy Kovácsasztal segítségével diff --git a/src/main/resources/languages/researches_hu.yml b/src/main/resources/languages/researches_hu.yml index 21165e6ea..6ae319fe9 100644 --- a/src/main/resources/languages/researches_hu.yml +++ b/src/main/resources/languages/researches_hu.yml @@ -1,234 +1,238 @@ --- slimefun: - 24k_gold_block: Aranyváros - advanced_android: Speciális Androidok - advanced_butcher_android: Fejlett Androidok - Hentes - advanced_circuit_board: Fejlett Áramköri Lap - advanced_electric_smeltery: Fejlett Elektromos Olvasztómű - advanced_farmer_android: Fejlett Androidok - Farmer - advanced_fisherman_android: Fejlett Androidok - Halász - advanced_output_node: Speciális Kimeneti Csomópont - alloys: Speciális Ötvözetek - ancient_altar: Ősi Oltár - ancient_runes: Elemi Rúnák - android_interfaces: Android Csatlakozási Felületek - android_memory_core: Memóriamag - angel_talisman: Az Angyal Talizmánja - animal_growth_accelerator: Az állatok Növekedésének Manipulálása - anvil_talisman: Az Üllő Talizmánja - armored_jetboots: Páncélozott Sugárhajtású Csizmák - armored_jetpack: Páncélozott Jetpack + walking_sticks: Sétapálcák + portable_crafter: Hordozható Barkácsoló + fortune_cookie: Szerencsesüti + portable_dustbin: Hordozható Kuka + meat_jerky: Pácolt Hús armor_forge: Páncél Barkácsolás - auto_anvil: Automatikus Üllő - auto_breeder: Automatizált Etetés - auto_drier: Egy Száraz Nap - auto_enchanting: Automatikus Fejlesztés és Fejlesztés Törlés - automated_crafting_chamber: Automatizált Barkácsolás - automated_panning_machine: Automatizált Aranymosó - automatic_ignition_chamber: Automatikus Gyújtókamra - backpacks: Hátizsákok + glowstone_armor: Izzókő Páncél + lumps: Rögök és Varázslat + ender_backpack: Ender Hátizsák + ender_armor: Ender Páncél + magic_eye_of_ender: Varázslatos Ender Szeme + magic_sugar: Varázscukor + monster_jerky: Pácolt Szörnyhús + slime_armor: Nyálka Páncél + sword_of_beheading: Lefejezés Kardja basic_circuit_board: Alapvető Áramköri Lap + advanced_circuit_board: Fejlett Áramköri Lap + smeltery: Kohó + steel: Acélkor + misc_power_items: Fontos energiával kapcsolatos tárgyak battery: Az első Akkumulátorod - better_carbon_press: Továbbfejlesztett Szénprés - better_crop_growth_accelerator: Továbbfejlesztett Növény Növekedés Gyorsító - better_electric_crucibles: Forró Olvasztótégelyek - better_electric_furnace: Továbbfejlesztett Elektromos Kemence - better_food_fabricator: Továbbfejlesztett Élelmiszergyártás - better_freezer: Továbbfejlesztett Fagyasztó - better_gps_transmitters: Továbbfejlesztett Transzmitterek - better_heated_pressure_chamber: Továbbfejlesztett Fűtött Nyomású Kamra - better_solar_generators: Továbbfejlesztett Napelemes Generátorok - bio_reactor: Bioreaktor - blade_of_vampires: Vámpírok Pengéje - blistering_ingots: Hólyagos Radioaktivitás - block_placer: Blokk Lehelyező - boosted_uranium: Soha Véget Nem Érő Kör - boots_of_the_stomper: A Taposás Cipője - bound_armor: Lélekhez Kötött Páncél - bound_backpack: Lélekhez Kötött Tárolás - bound_tools: Lélélekhez Kötött Eszközök - bound_weapons: Lélekhez Kötött Fegyverek - bronze: Bronzkészítés - butcher_androids: Hentes Androidok + steel_plate: Acéllemez + steel_thruster: Acélhajtómű + parachute: Ejtőernyő + grappling_hook: Vasmacska + jetpacks: Jetpackek + multitools: Többfunkciós Eszközök + solar_panel_and_helmet: Napenergia + elemental_staff: Elemi Pálcák + grind_stone: Köszörűkő cactus_armor: Kaktusz Ruha - capacitors: 1. Szintű Kondenzátorok - carbonado: Fekete Gyémántok - carbonado_furnace: Karbonádó Szélű Kemence - carbonado_tools: Felső Szintű Gépek - carbon_press: Szénprés - cargo_basics: Szállítmány Alapjai - cargo_nodes: Szállítmány Beállítása - chainmail_armor: Lánc Páncél - charging_bench: Töltőpad - coal_generator: Széngenerátor - cobalt_pickaxe: Gyors Csákány - combustion_reactor: Égésreaktor - common_talisman: Gyakori Talizmán - composter: Föld Komposztáló + gold_pan: Aranymosó + magical_book_cover: Varázslatos Könyvkötés + slimefun_metals: Új Fémek + ore_crusher: Érc Duplázás + bronze: Bronzkészítés + alloys: Speciális Ötvözetek compressor_and_carbon: Szénkészítés - cooler: Hordozható Italok - copper_wire: Hígított Vezetőképesség - crop_growth_accelerator: Növény Növekedés Gyorsító - crucible: Olvasztótégely - crushed_ore: Ércek Tisztítása + gilded_iron_armor: Aranyozott Vaspáncél + synthetic_diamond: Szintetikus Gyémántok + pressure_chamber: Nyomáskamra + synthetic_sapphire: Szintetikus Zafírok damascus_steel: Damaszkuszi Acél damascus_steel_armor: Damaszkuszi Acél Páncél - diet_cookie: Diétás Süti - duct_tape: Szövetbetétes Ragasztószalag - electric_crucible: Elektromos Olvasztótégely - electric_furnaces: Erős Kemence - electric_ingot_machines: Elektromos Öntvénygyártás + reinforced_alloy: Megerősített Ötvözet + carbonado: Fekete Gyémántok + magic_workbench: Varázslatos Barkácsasztal + wind_staff: Szél Pálca + reinforced_armor: Megerősített Páncél + ore_washer: Ércmosó + gold_carats: Tiszta Arany + silicon: Szilícium-völgy + fire_staff: Tűz Pálca + smelters_pickaxe: Olvasztó Csákány + common_talisman: Gyakori Talizmán + anvil_talisman: Az Üllő Talizmánja + miner_talisman: A Bányász Talizmánja + hunter_talisman: A Vadász Talizmánja + lava_talisman: A Láva Járó Talizmánja + water_talisman: A Vízlélegzés Talizmánja + angel_talisman: Az Angyal Talizmánja + fire_talisman: A Tűzoltó Talizmánja + lava_crystal: Tüzes Helyzet + magician_talisman: A Bűvész Talizmánja + traveller_talisman: Az Utazó Talizmánja + warrior_talisman: A Harcos Talizmánja + knight_talisman: A Lovag Talizmánja + gilded_iron: Fényes Vas + synthetic_emerald: Hamis Drágakő + chainmail_armor: Lánc Páncél + whirlwind_talisman: A Forgószél Talizmánja + wizard_talisman: A Varázsló Talizmánja + lumber_axe: Fadöntő Fejsze + hazmat_suit: Vegyvédelmi Ruha + uranium: Radioaktív + crushed_ore: Ércek Tisztítása + redstone_alloy: Redstone Ötvözet + carbonado_tools: Felső Szintű Gépek + first_aid: Elsősegély + gold_armor: Fényes Páncél + night_vision_googles: Éjjellátó Szemüvegek + pickaxe_of_containment: Csomagtartó Csákány + hercules_pickaxe: Herkules Csákány + table_saw: Asztali Fűrész + slime_steel_armor: Nyálkás Acél Páncél + blade_of_vampires: Vámpírok Pengéje + water_staff: Víz Pálca + 24k_gold_block: Aranyváros + composter: Föld Komposztáló + farmer_shoes: Farmer Cipők + explosive_tools: Robbanóeszközök + automated_panning_machine: Automatizált Aranymosó + boots_of_the_stomper: A Taposás Cipője + pickaxe_of_the_seeker: A Kutatók Csákánya + backpacks: Hátizsákok + woven_backpack: Szőtt Hátizsák + crucible: Olvasztótégely + gilded_backpack: Aranyozott Hátizsák + armored_jetpack: Páncélozott Jetpack + ender_talismans: Ender Talizmánok + nickel_and_cobalt: Még több Érc + magnet: Mágneses Fémek + infused_magnet: Infúziós Mágnesek + cobalt_pickaxe: Gyors Csákány + essence_of_afterlife: Szellemidézés + bound_backpack: Lélekhez Kötött Tárolás + jetboots: Sugárhajtású Csizma + armored_jetboots: Páncélozott Sugárhajtású Csizmák + seismic_axe: Szeizmikus Fejsze + pickaxe_of_vein_mining: 'Ér Bányász Csákány ' + bound_weapons: Lélekhez Kötött Fegyverek + bound_tools: Lélélekhez Kötött Eszközök + bound_armor: Lélekhez Kötött Páncél + juicer: Ízletes Italok + repaired_spawner: Spawnerek Javítása + enhanced_furnace: Továbbfejlesztett Kemence + more_enhanced_furnaces: Jobb Kemencék + high_tier_enhanced_furnaces: Magas Szintű Kemence + reinforced_furnace: Megerősített Kemence + carbonado_furnace: Karbonádó Szélű Kemence electric_motor: Felmelegítés + block_placer: Blokk Lehelyező + scroll_of_dimensional_teleposition: Megfordítva a dolgokat + special_bows: Robin Hood + tome_of_knowledge_sharing: Megosztás a barátokkal + flask_of_knowledge: XP Tároló + hardened_glass: Robbanások Ellen + golden_apple_juice: Arany Főzet + cooler: Hordozható Italok + ancient_altar: Ősi Oltár + wither_proof_obsidian: Wither-Védett Obszidián + ancient_runes: Elemi Rúnák + special_runes: Lila Rúnák + infernal_bonemeal: Pokoli Csontliszt + rainbow_blocks: Szivárvány Blokkok + infused_hopper: Pokoli Tölcsér + wither_proof_glass: Wither-Védett Üveg + duct_tape: Szövetbetétes Ragasztószalag + plastic_sheet: Műanyag + android_memory_core: Memóriamag + oil: Olaj + fuel: Üzemanyag + hologram_projector: Hologramok + capacitors: 1. Szintű Kondenzátorok + high_tier_capacitors: 2. Szintű Kondenzátorok + solar_generators: Napenergia Erőmű + electric_furnaces: Erős Kemence electric_ore_grinding: Zúzás és Őrlés - electric_press: Elektromos Prés - electric_smeltery: Elektromos Olvasztó - elemental_staff: Elemi Pálcák + heated_pressure_chamber: Fűtött Nyomáskamra + coal_generator: Széngenerátor + bio_reactor: Bioreaktor + auto_enchanting: Automatikus Fejlesztés és Fejlesztés Törlés + auto_anvil: Automatikus Üllő + multimeter: Teljesítménymérés + gps_setup: Alapvető GPS Beállítás + gps_emergency_transmitter: GPS Vészhelyzeti Útpont + programmable_androids: Programozható Androidok + android_interfaces: Android Csatlakozási Felületek + geo_scanner: GEO-Vizsgálatok + combustion_reactor: Égésreaktor + teleporter: Teleportáló Alapelemek + teleporter_activation_plates: Teleportáló Aktiválás + better_solar_generators: Továbbfejlesztett Napelemes Generátorok + better_gps_transmitters: Továbbfejlesztett Transzmitterek elevator: Liftek - elytra: Kitinszárnyak + energized_solar_generator: Teljes-Munkaidős Napenergia + energized_gps_transmitter: Legfelső Szintű Transzmitter + energy_regulator: Energiahálózatok 101 + butcher_androids: Hentes Androidok + organic_food: Bioélelmiszerek + auto_breeder: Automatizált Etetés + advanced_android: Speciális Androidok + advanced_butcher_android: Fejlett Androidok - Hentes + advanced_fisherman_android: Fejlett Androidok - Halász + animal_growth_accelerator: Az állatok Növekedésének Manipulálása + xp_collector: XP Gyűjtő + organic_fertilizer: Organikus Trágya + crop_growth_accelerator: Növény Növekedés Gyorsító + better_crop_growth_accelerator: Továbbfejlesztett Növény Növekedés Gyorsító + reactor_essentials: Reaktor Alapjai + nuclear_reactor: Atomerőmű + freezer: Fagyasztó Úr + cargo_basics: Szállítmány Alapjai + cargo_nodes: Szállítmány Beállítása + electric_ingot_machines: Elektromos Öntvénygyártás + high_tier_electric_ingot_machines: Szupergyors Öntvénygyártás + automated_crafting_chamber: Automatizált Barkácsolás + better_food_fabricator: Továbbfejlesztett Élelmiszergyártás + reactor_access_port: Reaktor Kölcsönhatás + fluid_pump: Folyadék Szivattyú + better_freezer: Továbbfejlesztett Fagyasztó + boosted_uranium: Soha Véget Nem Érő Kör + trash_can: Szemetes + advanced_output_node: Speciális Kimeneti Csomópont + carbon_press: Szénprés + electric_smeltery: Elektromos Olvasztó + better_electric_furnace: Továbbfejlesztett Elektromos Kemence + better_carbon_press: Továbbfejlesztett Szénprés empowered_android: Felhatalmazott Androidok empowered_butcher_android: Felhatalmazott Androidok - Hentes empowered_fisherman_android: Felhatalmazott Androidok - Halász - ender_armor: Ender Páncél - ender_backpack: Ender Hátizsák - ender_talismans: Ender Talizmánok - energized_gps_transmitter: Legfelső Szintű Transzmitter - energized_solar_generator: Teljes-Munkaidős Napenergia - energy_regulator: Energiahálózatok 101 - enhanced_furnace: Továbbfejlesztett Kemence - essence_of_afterlife: Szellemidézés - explosive_tools: Robbanóeszközök - farmer_shoes: Farmer Cipők - fire_staff: Tűz Pálca - fire_talisman: A Tűzoltó Talizmánja - first_aid: Elsősegély - flask_of_knowledge: XP Tároló - fluid_pump: Folyadék Szivattyú - fortune_cookie: Szerencsesüti - freezer: Fagyasztó Úr - fuel: Üzemanyag - geo_miner: GEO-Bányász - geo_scanner: GEO-Vizsgálatok - gilded_backpack: Aranyozott Hátizsák - gilded_iron: Fényes Vas - gilded_iron_armor: Aranyozott Vaspáncél - glowstone_armor: Izzókő Páncél - gold_armor: Fényes Páncél - gold_carats: Tiszta Arany - golden_apple_juice: Arany Főzet - gold_pan: Aranymosó - gps_emergency_transmitter: GPS Vészhelyzeti Útpont - gps_setup: Alapvető GPS Beállítás - grappling_hook: Vasmacska - grind_stone: Köszörűkő - hardened_glass: Robbanások Ellen - hazmat_suit: Vegyvédelmi Ruha - heated_pressure_chamber: Fűtött Nyomáskamra - hercules_pickaxe: Herkules Csákány - high_tier_capacitors: 2. Szintű Kondenzátorok high_tier_carbon_press: Végleges Szénprés - high_tier_electric_ingot_machines: Szupergyors Öntvénygyártás - high_tier_enhanced_furnaces: Magas Szintű Kemence - hologram_projector: Hologramok - hunter_talisman: A Vadász Talizmánja - infernal_bonemeal: Pokoli Csontliszt - infused_hopper: Pokoli Tölcsér - infused_magnet: Infúziós Mágnesek - jetboots: Sugárhajtású Csizma - jetpacks: Jetpackek - juicer: Ízletes Italok - kelp_cookie: Ízletes Moszat - knight_talisman: A Lovag Talizmánja - lava_crystal: Tüzes Helyzet + wither_assembler: Automatizált Wither Ölő + better_heated_pressure_chamber: Továbbfejlesztett Fűtött Nyomású Kamra + elytra: Kitinszárnyak + special_elytras: Speciális Kitinszárnyak + electric_crucible: Elektromos Olvasztótégely + better_electric_crucibles: Forró Olvasztótégelyek + advanced_electric_smeltery: Fejlett Elektromos Olvasztómű + advanced_farmer_android: Fejlett Androidok - Farmer lava_generator: Lávagenerátor - lava_talisman: A Láva Járó Talizmánja - lightning_rune: Villám Rúna - lumber_axe: Fadöntő Fejsze - lumps: Rögök és Varázslat - magical_book_cover: Varázslatos Könyvkötés - magic_eye_of_ender: Varázslatos Ender Szeme - magician_talisman: A Bűvész Talizmánja - magic_sugar: Varázscukor - magic_workbench: Varázslatos Barkácsasztal - magnesium_generator: Energia Magnéziumból - magnet: Mágneses Fémek - meat_jerky: Pácolt Hús - miner_talisman: A Bányász Talizmánja - misc_power_items: Fontos energiával kapcsolatos tárgyak - monster_jerky: Pácolt Szörnyhús - more_enhanced_furnaces: Jobb Kemencék - multimeter: Teljesítménymérés - multitools: Többfunkciós Eszközök - nether_gold_pan: Nether Aranymosó nether_ice: Nether Jéghűtő nether_star_reactor: Nethercsillag Reaktor - nickel_and_cobalt: Még több Érc - night_vision_googles: Éjjellátó Szemüvegek - nuclear_reactor: Atomerőmű - oil: Olaj - ore_crusher: Érc Duplázás - ore_washer: Ércmosó - organic_fertilizer: Organikus Trágya - organic_food: Bioélelmiszerek + blistering_ingots: Hólyagos Radioaktivitás + automatic_ignition_chamber: Automatikus Gyújtókamra output_chest: Alapvető Gépek Kimeneti Láda - parachute: Ejtőernyő - pickaxe_of_containment: Csomagtartó Csákány - pickaxe_of_the_seeker: A Kutatók Csákánya - pickaxe_of_vein_mining: 'Ér Bányász Csákány ' - plastic_sheet: Műanyag - portable_crafter: Hordozható Barkácsoló - portable_dustbin: Hordozható Kuka - pressure_chamber: Nyomáskamra - programmable_androids: Programozható Androidok + copper_wire: Hígított Vezetőképesség radiant_backpack: Sugárzó Hátizsák - rainbow_blocks: Szivárvány Blokkok - reactor_access_port: Reaktor Kölcsönhatás - reactor_essentials: Reaktor Alapjai - redstone_alloy: Redstone Ötvözet - reinforced_alloy: Megerősített Ötvözet - reinforced_armor: Megerősített Páncél - reinforced_furnace: Megerősített Kemence - repaired_spawner: Spawnerek Javítása - scroll_of_dimensional_teleposition: Megfordítva a dolgokat - seismic_axe: Szeizmikus Fejsze - silicon: Szilícium-völgy - slime_armor: Nyálka Páncél - slimefun_metals: Új Fémek - slime_steel_armor: Nyálkás Acél Páncél - smelters_pickaxe: Olvasztó Csákány - smeltery: Kohó - solar_generators: Napenergia Erőmű - solar_panel_and_helmet: Napenergia - soulbound_rune: Lélekhez Kötött Rúna - special_bows: Robin Hood - special_elytras: Speciális Kitinszárnyak - special_runes: Lila Rúnák - steel: Acélkor - steel_plate: Acéllemez - steel_thruster: Acélhajtómű + auto_drier: Egy Száraz Nap + diet_cookie: Diétás Süti storm_staff: Vihar Pálca - sword_of_beheading: Lefejezés Kardja - synthetic_diamond: Szintetikus Gyémántok - synthetic_emerald: Hamis Drágakő - synthetic_sapphire: Szintetikus Zafírok - table_saw: Asztali Fűrész - teleporter: Teleportáló Alapelemek - teleporter_activation_plates: Teleportáló Aktiválás - tome_of_knowledge_sharing: Megosztás a barátokkal + soulbound_rune: Lélekhez Kötött Rúna + geo_miner: GEO-Bányász + lightning_rune: Villám Rúna totem_of_undying: Életmentés Toteme - trash_can: Szemetes - traveller_talisman: Az Utazó Talizmánja - uranium: Radioaktív - walking_sticks: Sétapálcák - warrior_talisman: A Harcos Talizmánja - water_staff: Víz Pálca - water_talisman: A Vízlélegzés Talizmánja - whirlwind_talisman: A Forgószél Talizmánja - wind_staff: Szél Pálca - wither_assembler: Automatizált Wither Ölő - wither_proof_glass: Wither-Védett Üveg - wither_proof_obsidian: Wither-Védett Obszidián - wizard_talisman: A Varázsló Talizmánja - woven_backpack: Szőtt Hátizsák - xp_collector: XP Gyűjtő + charging_bench: Töltőpad + nether_gold_pan: Nether Aranymosó + electric_press: Elektromos Prés + magnesium_generator: Energia Magnéziumból + kelp_cookie: Ízletes Moszat makeshift_smeltery: Improvizált Olvasztó tree_growth_accelerator: Gyorsabb Fák + industrial_miner: Ipari Bányászat + advanced_industrial_miner: Jobb Bányászat + magical_zombie_pills: Zombi Átváltoztató + auto_brewer: Ipari Sörgyár diff --git a/src/main/resources/languages/resources_hu.yml b/src/main/resources/languages/resources_hu.yml index 7f35f3c57..6e46c219d 100644 --- a/src/main/resources/languages/resources_hu.yml +++ b/src/main/resources/languages/resources_hu.yml @@ -1,7 +1,7 @@ --- tooltips: results: GEO-Vizsgálat Eredmények - chunk: Vizsgált Chunkok + chunk: Vizsgált Chunk world: Világ unit: Egység units: Egységek