diff --git a/CHANGELOG.md b/CHANGELOG.md index 53ec4cbc7..71a947226 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ **Table of contents** -- [Release Candidate 14 (TBD)](#release-candidate-14-tbd) +- [Release Candidate 15 (TBD)](#release-candidate-15-tbd) +- [Release Candidate 14 (12 Jul 2020)](#release-candidate-14-12-jul-2020) - [Release Candidate 13 (16 Jun 2020)](#release-candidate-13-16-jun-2020) - [Release Candidate 12 (27 May 2020)](#release-candidate-12-27-may-2020) - [Release Candidate 11 (25 Apr 2020)](#release-candidate-11-25-apr-2020) @@ -19,7 +20,14 @@ -## Release Candidate 14 (TBD) +## Release Candidate 15 (TBD) + +#### Additions +* Added Reinforced Cloth +* Added Bee protection to Hazmat Suit +* Added Enchantment Rune + +## Release Candidate 14 (12 Jul 2020) #### Additions * Added support for Minecraft 1.16 @@ -42,9 +50,7 @@ * Added runtime deprecation warnings for ItemHandlers and Attributes used by Addons * Added a proper lag profiler * Added per-plugin lag info to /sf timings -* Added Reinforced Cloth -* Added Bee protection to Hazmat Suit -* Added Enchantment Rune +* Added Indonesian translations #### Changes * Coolant Cells now last twice as long @@ -65,9 +71,15 @@ * performance improvements to Generators and Electric Machines * Cargo timings will now be attributed to the corresponding node and not the Cargo manager * Thunderstorms now count as night time for Solar Generators +<<<<<<< HEAD * Fixed an issue with moving androids getting stuck * Changed recipe of Hazmat Suits * Uranium can no longer be placed down +======= +* Coolant Cells can no longer be placed on the ground +* Crafting Nether Ice Coolant Cells now results in 4 items +* Moved Soulbound Backpack to the "Magical Gadgets" Category +>>>>>>> branch 'master' of https://github.com/TheBusyBiscuit/Slimefun4 #### Fixes * Fixed #2005 @@ -92,6 +104,12 @@ * Fixed #2066 * Fixed Rainbow Glass Panes not properly connecting to blocks * Fixed Androids turning in the wrong direction +* Fixed contributors losing their texture after restarts +* Fixed "korean" showing up as "null" +* Fixed an issue with moving androids getting stuck +* Fixed Cargo nodes sometimes preventing chunks from unloading +* Fixed #2081 +* Fixed a NullPointerException when Generators throw an Error Report ## Release Candidate 13 (16 Jun 2020) https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#13 diff --git a/README.md b/README.md index 32fc24d49..b7ffc8315 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Here is a full summary of the differences between the two different versions of | | development (latest) | "stable" | | ------------------ | -------- | -------- | -| **Minecraft version(s)** | :video_game: **1.13.\* - 1.16.\*** | :video_game: **1.13.\* - 1.15.\*** | +| **Minecraft version(s)** | :video_game: **1.13.\* - 1.16.\*** | :video_game: **1.13.\* - 1.16.\*** | | **automatic updates** | :heavy_check_mark: | :heavy_check_mark: | | **frequent updates** | :heavy_check_mark: | :x: | | **latest content** | :heavy_check_mark: | :x: | @@ -114,6 +114,8 @@ To compile Slimefun yourself, follow these steps: If you are already using an IDE, make sure to import the project via git and set it as a *Maven project*. Then you should be able build it via Maven using the goals `clean package`. +If you have any further questions, then please join our [Discord Support Server](#discord) and ask your questions in the `#programming-help` channel. Note that we will not accept any bug reports from custom-compiled versions of Slimefun. + ### Code Quality Slimefun uses [Sonarcloud.io](https://sonarcloud.io/dashboard?id=TheBusyBiscuit_Slimefun4) to monitor Code Quality. diff --git a/pom.xml b/pom.xml index 128eb224b..460e4bfc6 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ https://repo.destroystokyo.com/repository/maven-public/ - worldedit-worldguard-repo + worldedit-repo https://maven.sk89q.com/repo/ @@ -298,7 +298,7 @@ org.mockito mockito-core - 3.3.3 + 3.4.0 test diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java index 365fa129f..2bdcc717b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java @@ -1,7 +1,6 @@ package io.github.thebusybiscuit.slimefun4.api; import java.io.File; -import java.io.IOException; import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; @@ -92,7 +91,7 @@ public class ErrorReport { addon.getLogger().log(Level.WARNING, ""); } - catch (IOException x) { + catch (Exception x) { addon.getLogger().log(Level.SEVERE, x, () -> "An Error occurred while saving an Error-Report for Slimefun " + SlimefunPlugin.getVersion()); } }); @@ -116,6 +115,12 @@ public class ErrorReport { stream.println(); } + if (item.getEnergyTicker() != null) { + stream.println("Ticker-Info:"); + stream.println(" Type: Indirect (Energy Network)"); + stream.println(); + } + stream.println("Slimefun Data:"); stream.println(" ID: " + item.getID()); stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l)); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/exceptions/WrongItemStackException.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/exceptions/WrongItemStackException.java new file mode 100644 index 000000000..9b8c647ec --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/exceptions/WrongItemStackException.java @@ -0,0 +1,36 @@ +package io.github.thebusybiscuit.slimefun4.api.exceptions; + +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +/** + * A {@link WrongItemStackException} is thrown when someone tries to alter an {@link ItemStack} + * but actually wanted to alter a different one. + * + * If for example a {@link DamageableItem} accidentally damages the original {@link SlimefunItem} + * instead of the held {@link ItemStack}, this will be thrown. + * + * @author TheBusyBiscuit + * + * @see SlimefunItemStack + * @see SlimefunItem + * + */ +public class WrongItemStackException extends RuntimeException { + + private static final long serialVersionUID = 9144658137363309071L; + + /** + * This constructs a new {@link WrongItemStackException} with the given error context. + * + * @param message + * An error message to display + */ + public WrongItemStackException(String message) { + super("You probably wanted alter a different ItemStack: " + message); + } + +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java index 8694c661b..511c8e418 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java @@ -54,7 +54,7 @@ public class GPSNetwork { private final Map> transmitters = new HashMap<>(); private final TeleportationManager teleportation = new TeleportationManager(); - private final ResourceManager resourceManager = new ResourceManager(SlimefunPlugin.instance); + private final ResourceManager resourceManager = new ResourceManager(SlimefunPlugin.instance()); /** * This method updates the status of a {@link GPSTransmitter}. @@ -256,7 +256,7 @@ public class GPSNetwork { SlimefunPlugin.getLocalization().sendMessage(p, "gps.waypoint.new", true); p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 0.5F, 1F); - ChatInput.waitForPlayer(SlimefunPlugin.instance, p, message -> addWaypoint(p, message, l)); + ChatInput.waitForPlayer(SlimefunPlugin.instance(), p, message -> addWaypoint(p, message, l)); }); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java index 6980314ea..495211b1d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java @@ -225,6 +225,10 @@ public abstract class Network { }); } + public Location getRegulator() { + return regulator; + } + public void tick() { discoverStep(); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java index 50d58337b..896cf84ae 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java @@ -372,7 +372,7 @@ public final class PlayerProfile { return true; } - Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> { + Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance(), () -> { PlayerProfile pp = new PlayerProfile(p); SlimefunPlugin.getRegistry().getPlayerProfiles().put(uuid, pp); callback.accept(pp); @@ -393,7 +393,7 @@ public final class PlayerProfile { public static boolean request(OfflinePlayer p) { if (!SlimefunPlugin.getRegistry().getPlayerProfiles().containsKey(p.getUniqueId())) { // Should probably prevent multiple requests for the same profile in the future - Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> { + Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance(), () -> { PlayerProfile pp = new PlayerProfile(p); SlimefunPlugin.getRegistry().getPlayerProfiles().put(p.getUniqueId(), pp); }); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RandomMobDrop.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RandomMobDrop.java new file mode 100644 index 000000000..a873b8620 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RandomMobDrop.java @@ -0,0 +1,35 @@ +package io.github.thebusybiscuit.slimefun4.core.attributes; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDeathEvent; + +import io.github.thebusybiscuit.slimefun4.implementation.items.misc.BasicCircuitBoard; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.MobDropListener; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; + +/** + * This interface, when attached to a {@link SlimefunItem}, provides an easy method for adding + * a % chance to drop for an {@link SlimefunItem} on {@link EntityDeathEvent}, this chance is 0-100 + * and used in conjunction with the MOB_DROP {@link RecipeType}. + * + * @author dNiym + * + * @see BasicCircuitBoard + * @see MobDropListener + * + */ +@FunctionalInterface +public interface RandomMobDrop extends ItemAttribute { + + /** + * Implement this method to make the object have a variable chance of being + * added to the dropList when {@link EntityType} (specified in the recipe) + * is killed by the {@link Player} + * + * @return The integer chance (0-100%) {@link SlimefunItem} has to drop. + */ + int getMobDropChance(); + +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java index 29f6c8180..ec46fc522 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java @@ -14,6 +14,7 @@ import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; +import net.md_5.bungee.api.ChatColor; /** * This is just a simple helper class to provide static methods to the {@link Rechargeable} @@ -26,7 +27,7 @@ import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; */ final class RechargeableHelper { - private static final NamespacedKey CHARGE_KEY = new NamespacedKey(SlimefunPlugin.instance, "item_charge"); + private static final NamespacedKey CHARGE_KEY = new NamespacedKey(SlimefunPlugin.instance(), "item_charge"); private static final String LORE_PREFIX = ChatColors.color("&8\u21E8 &e\u26A1 &7"); private static final Pattern REGEX = Pattern.compile(ChatColors.color("(&c&o)?" + LORE_PREFIX) + "[0-9\\.]+ \\/ [0-9\\.]+ J"); @@ -69,7 +70,8 @@ final class RechargeableHelper { if (meta.hasLore()) { for (String line : meta.getLore()) { if (REGEX.matcher(line).matches()) { - return Float.parseFloat(PatternUtils.SLASH_SEPARATOR.split(line)[0].replace(LORE_PREFIX, "")); + String data = ChatColor.stripColor(PatternUtils.SLASH_SEPARATOR.split(line)[0].replace(LORE_PREFIX, "")); + return Float.parseFloat(data); } } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java index 2dd9ce001..3b89ff019 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java @@ -60,13 +60,19 @@ final class ContributorsMenu { menu.addItem(46, ChestMenuUtils.getPreviousButton(p, page + 1, pages)); menu.addMenuClickHandler(46, (pl, slot, item, action) -> { - if (page > 0) open(pl, page - 1); + if (page > 0) { + open(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) open(pl, page + 1); + if (page + 1 < pages) { + open(pl, page + 1); + } + return false; }); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java index e6ac96373..9563e42f6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java @@ -16,12 +16,12 @@ class FireworksOption implements SlimefunGuideOption { @Override public SlimefunAddon getAddon() { - return SlimefunPlugin.instance; + return SlimefunPlugin.instance(); } @Override public NamespacedKey getKey() { - return new NamespacedKey(SlimefunPlugin.instance, "research_fireworks"); + return new NamespacedKey(SlimefunPlugin.instance(), "research_fireworks"); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java index 16173c9ba..e6fe73e3a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java @@ -22,12 +22,12 @@ class GuideLayoutOption implements SlimefunGuideOption { @Override public SlimefunAddon getAddon() { - return SlimefunPlugin.instance; + return SlimefunPlugin.instance(); } @Override public NamespacedKey getKey() { - return new NamespacedKey(SlimefunPlugin.instance, "guide_layout"); + return new NamespacedKey(SlimefunPlugin.instance(), "guide_layout"); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java index ffd660b1a..6d55090a2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java @@ -23,7 +23,7 @@ class PlayerLanguageOption implements SlimefunGuideOption { @Override public SlimefunAddon getAddon() { - return SlimefunPlugin.instance; + return SlimefunPlugin.instance(); } @Override @@ -93,7 +93,7 @@ class PlayerLanguageOption implements SlimefunGuideOption { String defaultLanguageString = SlimefunPlugin.getLocalization().getMessage(p, "languages.default"); menu.addItem(9, new CustomItem(defaultLanguage.getItem(), ChatColor.GRAY + defaultLanguageString + ChatColor.DARK_GRAY + " (" + defaultLanguage.getName(p) + ")", "", "&7\u21E8 &e" + SlimefunPlugin.getLocalization().getMessage(p, "guide.languages.select-default")), (pl, i, item, action) -> { - SlimefunPlugin.instance.getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), defaultLanguage)); + SlimefunPlugin.instance().getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), defaultLanguage)); setSelectedOption(pl, guide, null); SlimefunPlugin.getLocalization().sendMessage(pl, "guide.languages.updated", msg -> msg.replace("%lang%", defaultLanguageString)); @@ -106,7 +106,7 @@ class PlayerLanguageOption implements SlimefunGuideOption { for (Language language : SlimefunPlugin.getLocalization().getLanguages()) { menu.addItem(slot, new CustomItem(language.getItem(), ChatColor.GREEN + language.getName(p), "&b" + SlimefunPlugin.getLocalization().getProgress(language) + '%', "", "&7\u21E8 &e" + SlimefunPlugin.getLocalization().getMessage(p, "guide.languages.select")), (pl, i, item, action) -> { - SlimefunPlugin.instance.getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), language)); + SlimefunPlugin.instance().getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), language)); setSelectedOption(pl, guide, language.getId()); String name = language.getName(pl); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java index 5f35f94dd..919275888 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java @@ -6,7 +6,7 @@ import org.bukkit.event.player.PlayerInteractAtEntityEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java index adaa86513..919da18a9 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java @@ -5,7 +5,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java index 6599fc4b9..3e7756cf8 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java @@ -4,9 +4,9 @@ import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.implementation.items.food.DietCookie; import io.github.thebusybiscuit.slimefun4.implementation.items.food.FortuneCookie; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java index ebc661018..cccbb295c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java @@ -3,7 +3,7 @@ package io.github.thebusybiscuit.slimefun4.core.handlers; import org.bukkit.entity.Player; import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java index d38d1a675..f8df07d58 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java @@ -1,6 +1,5 @@ package io.github.thebusybiscuit.slimefun4.core.networks.cargo; -import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; @@ -8,23 +7,18 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Level; import org.bukkit.Location; import org.bukkit.block.Block; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.api.network.Network; import io.github.thebusybiscuit.slimefun4.api.network.NetworkComponent; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.holograms.SimpleHologram; -import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; -import me.mrCookieSlime.Slimefun.api.inventory.DirtyChestMenu; /** * The {@link CargoNet} is a type of {@link Network} which deals with {@link ItemStack} transportation. @@ -49,7 +43,7 @@ public class CargoNet extends ChestTerminalNetwork { private final Set inputNodes = new HashSet<>(); private final Set outputNodes = new HashSet<>(); - private final Map roundRobin = new HashMap<>(); + protected final Map roundRobin = new HashMap<>(); private int tickDelayThreshold = 0; public static CargoNet getNetworkFromLocation(Location l) { @@ -182,7 +176,9 @@ public class CargoNet extends ChestTerminalNetwork { } SlimefunPlugin.getProfiler().scheduleEntries(1 + inputNodes.size()); - Slimefun.runSync(() -> run(inputs, outputs, chestTerminalInputs, chestTerminalOutputs)); + + CargoNetworkTask runnable = new CargoNetworkTask(this, inputs, outputs, chestTerminalInputs, chestTerminalOutputs); + Slimefun.runSync(runnable); } } @@ -240,135 +236,6 @@ public class CargoNet extends ChestTerminalNetwork { return output; } - private void run(Map inputs, Map> outputs, Set chestTerminalInputs, Set chestTerminalOutputs) { - long timestamp = System.nanoTime(); - - // Chest Terminal Code - if (SlimefunPlugin.getThirdPartySupportService().isChestTerminalInstalled()) { - handleItemRequests(chestTerminalInputs, chestTerminalOutputs); - } - - // All operations happen here: Everything gets iterated from the Input Nodes. - // (Apart from ChestTerminal Buses) - for (Map.Entry entry : inputs.entrySet()) { - long nodeTimestamp = System.nanoTime(); - Location input = entry.getKey(); - Optional attachedBlock = getAttachedBlock(input.getBlock()); - - if (attachedBlock.isPresent()) { - routeItems(input, attachedBlock.get(), entry.getValue(), outputs); - } - - // This will prevent this timings from showing up for the Cargo Manager - timestamp += SlimefunPlugin.getProfiler().closeEntry(entry.getKey(), SlimefunItems.CARGO_INPUT_NODE.getItem(), nodeTimestamp); - } - - // Chest Terminal Code - if (SlimefunPlugin.getThirdPartySupportService().isChestTerminalInstalled()) { - updateTerminals(chestTerminalInputs); - } - - // Submit a timings report - SlimefunPlugin.getProfiler().closeEntry(regulator, SlimefunItems.CARGO_MANAGER.getItem(), timestamp); - } - - private void routeItems(Location inputNode, Block inputTarget, int frequency, Map> outputNodes) { - AtomicReference inventory = new AtomicReference<>(); - ItemStackAndInteger slot = CargoUtils.withdraw(inputNode.getBlock(), inputTarget, inventory); - - if (slot == null) { - return; - } - - ItemStack stack = slot.getItem(); - int previousSlot = slot.getInt(); - List outputs = outputNodes.get(frequency); - - if (outputs != null) { - stack = distributeItem(stack, inputNode, outputs); - } - - if (stack != null) { - Object inputInventory = inventory.get(); - - if (inputInventory instanceof DirtyChestMenu) { - DirtyChestMenu menu = (DirtyChestMenu) inputInventory; - - if (menu.getItemInSlot(previousSlot) == null) { - menu.replaceExistingItem(previousSlot, stack); - } - else { - inputTarget.getWorld().dropItem(inputTarget.getLocation().add(0, 1, 0), stack); - } - } - - if (inputInventory instanceof Inventory) { - Inventory inv = (Inventory) inputInventory; - - if (inv.getItem(previousSlot) == null) { - inv.setItem(previousSlot, stack); - } - else { - inputTarget.getWorld().dropItem(inputTarget.getLocation().add(0, 1, 0), stack); - } - } - } - } - - private ItemStack distributeItem(ItemStack stack, Location inputNode, List outputNodes) { - ItemStack item = stack; - - Deque destinations = new LinkedList<>(outputNodes); - Config cfg = BlockStorage.getLocationInfo(inputNode); - boolean roundrobin = "true".equals(cfg.getString("round-robin")); - - if (roundrobin) { - roundRobinSort(inputNode, destinations); - } - - for (Location output : destinations) { - Optional target = getAttachedBlock(output.getBlock()); - - if (target.isPresent()) { - item = CargoUtils.insert(output.getBlock(), target.get(), item); - - if (item == null) { - break; - } - } - } - - return item; - } - - /** - * This method sorts a given {@link Deque} of output node locations using a semi-accurate - * round-robin method. - * - * @param inputNode - * The {@link Location} of the input node - * @param outputNodes - * A {@link Deque} of {@link Location Locations} of the output nodes - */ - private void roundRobinSort(Location inputNode, Deque outputNodes) { - int index = roundRobin.getOrDefault(inputNode, 0); - - if (index < outputNodes.size()) { - // Not ideal but actually not bad performance-wise over more elegant alternatives - for (int i = 0; i < index; i++) { - Location temp = outputNodes.removeFirst(); - outputNodes.add(temp); - } - - index++; - } - else { - index = 1; - } - - roundRobin.put(inputNode, index); - } - /** * This method returns the frequency a given node is set to. * Should there be an {@link Exception} to this method it will fall back to zero in diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNetworkTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNetworkTask.java new file mode 100644 index 000000000..d43d985b9 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNetworkTask.java @@ -0,0 +1,183 @@ +package io.github.thebusybiscuit.slimefun4.core.networks.cargo; + +import java.util.Deque; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; +import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.inventory.DirtyChestMenu; + +/** + * The {@link CargoNetworkTask} is the actual {@link Runnable} responsible for moving {@link ItemStack ItemStacks} + * around the {@link CargoNet}. + * + * Inbefore this was just a method in the {@link CargoNet} class. + * However for aesthetic reasons but mainly to prevent the Cargo Task from showing up as + * "lambda:xyz-123" in timing reports... this was moved. + * + * @see CargoNet + * @see CargoUtils + * @see ChestTerminalNetwork + * + */ +class CargoNetworkTask implements Runnable { + + private final CargoNet network; + private final Map inventories = new HashMap<>(); + + private final Map inputs; + private final Map> outputs; + + private final Set chestTerminalInputs; + private final Set chestTerminalOutputs; + + CargoNetworkTask(CargoNet network, Map inputs, Map> outputs, Set chestTerminalInputs, Set chestTerminalOutputs) { + this.network = network; + + this.inputs = inputs; + this.outputs = outputs; + this.chestTerminalInputs = chestTerminalInputs; + this.chestTerminalOutputs = chestTerminalOutputs; + } + + @Override + public void run() { + long timestamp = System.nanoTime(); + + // Chest Terminal Code + if (SlimefunPlugin.getThirdPartySupportService().isChestTerminalInstalled()) { + network.handleItemRequests(inventories, chestTerminalInputs, chestTerminalOutputs); + } + + // All operations happen here: Everything gets iterated from the Input Nodes. + // (Apart from ChestTerminal Buses) + for (Map.Entry entry : inputs.entrySet()) { + long nodeTimestamp = System.nanoTime(); + Location input = entry.getKey(); + Optional attachedBlock = network.getAttachedBlock(input); + + if (attachedBlock.isPresent()) { + routeItems(input, attachedBlock.get(), entry.getValue(), outputs); + } + + // This will prevent this timings from showing up for the Cargo Manager + timestamp += SlimefunPlugin.getProfiler().closeEntry(entry.getKey(), SlimefunItems.CARGO_INPUT_NODE.getItem(), nodeTimestamp); + } + + // Chest Terminal Code + if (SlimefunPlugin.getThirdPartySupportService().isChestTerminalInstalled()) { + network.updateTerminals(chestTerminalInputs); + } + + // Submit a timings report + SlimefunPlugin.getProfiler().closeEntry(network.getRegulator(), SlimefunItems.CARGO_MANAGER.getItem(), timestamp); + } + + private void routeItems(Location inputNode, Block inputTarget, int frequency, Map> outputNodes) { + ItemStackAndInteger slot = CargoUtils.withdraw(inventories, inputNode.getBlock(), inputTarget); + + if (slot == null) { + return; + } + + ItemStack stack = slot.getItem(); + int previousSlot = slot.getInt(); + List destinations = outputNodes.get(frequency); + + if (destinations != null) { + stack = distributeItem(stack, inputNode, destinations); + } + + if (stack != null) { + Inventory inv = inventories.get(inputTarget.getLocation()); + + if (inv != null) { + if (inv.getItem(previousSlot) == null) { + inv.setItem(previousSlot, stack); + } + else { + inputTarget.getWorld().dropItem(inputTarget.getLocation().add(0, 1, 0), stack); + } + } + else { + DirtyChestMenu menu = CargoUtils.getChestMenu(inputTarget); + + if (menu != null) { + if (menu.getItemInSlot(previousSlot) == null) { + menu.replaceExistingItem(previousSlot, stack); + } + else { + inputTarget.getWorld().dropItem(inputTarget.getLocation().add(0, 1, 0), stack); + } + } + } + } + } + + private ItemStack distributeItem(ItemStack stack, Location inputNode, List outputNodes) { + ItemStack item = stack; + + Deque destinations = new LinkedList<>(outputNodes); + Config cfg = BlockStorage.getLocationInfo(inputNode); + boolean roundrobin = "true".equals(cfg.getString("round-robin")); + + if (roundrobin) { + roundRobinSort(inputNode, destinations); + } + + for (Location output : destinations) { + Optional target = network.getAttachedBlock(output); + + if (target.isPresent()) { + item = CargoUtils.insert(inventories, output.getBlock(), target.get(), item); + + if (item == null) { + break; + } + } + } + + return item; + } + + /** + * This method sorts a given {@link Deque} of output node locations using a semi-accurate + * round-robin method. + * + * @param inputNode + * The {@link Location} of the input node + * @param outputNodes + * A {@link Deque} of {@link Location Locations} of the output nodes + */ + private void roundRobinSort(Location inputNode, Deque outputNodes) { + int index = network.roundRobin.getOrDefault(inputNode, 0); + + if (index < outputNodes.size()) { + // Not ideal but actually not bad performance-wise over more elegant alternatives + for (int i = 0; i < index; i++) { + Location temp = outputNodes.removeFirst(); + outputNodes.add(temp); + } + + index++; + } + else { + index = 1; + } + + network.roundRobin.put(inputNode, index); + } + +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java index 0d4426c94..ed6cf7105 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoUtils.java @@ -1,10 +1,9 @@ package io.github.thebusybiscuit.slimefun4.core.networks.cargo; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; +import java.util.Map; import java.util.logging.Level; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.block.Block; @@ -83,15 +82,23 @@ final class CargoUtils { return false; } - static ItemStack withdraw(Block node, Block target, ItemStack template) { + static ItemStack withdraw(Map inventories, Block node, Block target, ItemStack template) { DirtyChestMenu menu = getChestMenu(target); if (menu == null) { if (hasInventory(target)) { + Inventory inventory = inventories.get(target.getLocation()); + + if (inventory != null) { + return withdrawFromVanillaInventory(node, template, inventory); + } + BlockState state = target.getState(); if (state instanceof InventoryHolder) { - return withdrawFromVanillaInventory(node, template, ((InventoryHolder) state).getInventory()); + inventory = ((InventoryHolder) state).getInventory(); + inventories.put(target.getLocation(), inventory); + return withdrawFromVanillaInventory(node, template, inventory); } } @@ -135,10 +142,10 @@ final class CargoUtils { ItemStackWrapper wrapper = new ItemStackWrapper(template); for (int slot = minSlot; slot < maxSlot; slot++) { - // Changes to this ItemStack are synchronized with the Item in the Inventory + // Changes to these ItemStacks are synchronized with the Item in the Inventory ItemStack itemInSlot = contents[slot]; - if (SlimefunUtils.isItemSimilar(itemInSlot, wrapper, true) && matchesFilter(node, itemInSlot)) { + if (SlimefunUtils.isItemSimilar(itemInSlot, wrapper, true, false) && matchesFilter(node, itemInSlot)) { if (itemInSlot.getAmount() > template.getAmount()) { itemInSlot.setAmount(itemInSlot.getAmount() - template.getAmount()); return template; @@ -154,7 +161,7 @@ final class CargoUtils { return null; } - static ItemStackAndInteger withdraw(Block node, Block target, AtomicReference inventory) { + static ItemStackAndInteger withdraw(Map inventories, Block node, Block target) { DirtyChestMenu menu = getChestMenu(target); if (menu != null) { @@ -163,45 +170,55 @@ final class CargoUtils { if (matchesFilter(node, is)) { menu.replaceExistingItem(slot, null); - inventory.set(menu); return new ItemStackAndInteger(is, slot); } } } else if (hasInventory(target)) { + Inventory inventory = inventories.get(target.getLocation()); + + if (inventory != null) { + return withdrawFromVanillaInventory(node, inventory); + } + BlockState state = target.getState(); if (state instanceof InventoryHolder) { - Inventory inv = ((InventoryHolder) state).getInventory(); - - ItemStack[] contents = inv.getContents(); - int minSlot = 0; - int maxSlot = contents.length; - - if (inv instanceof FurnaceInventory) { - minSlot = 2; - maxSlot = 3; - } - else if (inv instanceof BrewerInventory) { - maxSlot = 3; - } - - for (int slot = minSlot; slot < maxSlot; slot++) { - ItemStack is = contents[slot]; - - if (matchesFilter(node, is)) { - inv.setItem(slot, null); - inventory.set(inv); - return new ItemStackAndInteger(is, slot); - } - } + inventory = ((InventoryHolder) state).getInventory(); + inventories.put(target.getLocation(), inventory); + return withdrawFromVanillaInventory(node, inventory); } } return null; } - static ItemStack insert(Block node, Block target, ItemStack stack) { + private static ItemStackAndInteger withdrawFromVanillaInventory(Block node, Inventory inv) { + ItemStack[] contents = inv.getContents(); + int minSlot = 0; + int maxSlot = contents.length; + + if (inv instanceof FurnaceInventory) { + minSlot = 2; + maxSlot = 3; + } + else if (inv instanceof BrewerInventory) { + maxSlot = 3; + } + + for (int slot = minSlot; slot < maxSlot; slot++) { + ItemStack is = contents[slot]; + + if (matchesFilter(node, is)) { + inv.setItem(slot, null); + return new ItemStackAndInteger(is, slot); + } + } + + return null; + } + + static ItemStack insert(Map inventories, Block node, Block target, ItemStack stack) { if (!matchesFilter(node, stack)) { return stack; } @@ -210,10 +227,18 @@ final class CargoUtils { if (menu == null) { if (hasInventory(target)) { + Inventory inventory = inventories.get(target.getLocation()); + + if (inventory != null) { + return insertIntoVanillaInventory(stack, inventory); + } + BlockState state = target.getState(); if (state instanceof InventoryHolder) { - return insertIntoVanillaInventory(stack, ((InventoryHolder) state).getInventory()); + inventory = ((InventoryHolder) state).getInventory(); + inventories.put(target.getLocation(), inventory); + return insertIntoVanillaInventory(stack, inventory); } } @@ -251,7 +276,7 @@ final class CargoUtils { return stack; } - static ItemStack insertIntoVanillaInventory(ItemStack stack, Inventory inv) { + private static ItemStack insertIntoVanillaInventory(ItemStack stack, Inventory inv) { ItemStack[] contents = inv.getContents(); int minSlot = 0; int maxSlot = contents.length; @@ -359,9 +384,10 @@ final class CargoUtils { } // Store the returned Config instance to avoid heavy calls - Config blockInfo = BlockStorage.getLocationInfo(block.getLocation()); - String id = blockInfo.getString("id"); + Config blockData = BlockStorage.getLocationInfo(block.getLocation()); + String id = blockData.getString("id"); + // Cargo Output nodes have no filter actually if (id.equals("CARGO_NODE_OUTPUT")) { return true; } @@ -373,43 +399,9 @@ final class CargoUtils { return false; } - boolean lore = "true".equals(blockInfo.getString("filter-lore")); - ItemStackWrapper wrapper = new ItemStackWrapper(item); - - if ("whitelist".equals(blockInfo.getString("filter-type"))) { - List templateItems = new LinkedList<>(); - - for (int slot : FILTER_SLOTS) { - ItemStack template = menu.getItemInSlot(slot); - - if (template != null) { - templateItems.add(template); - } - } - - if (templateItems.isEmpty()) { - return false; - } - - for (ItemStack stack : templateItems) { - if (SlimefunUtils.isItemSimilar(wrapper, stack, lore)) { - return true; - } - } - - return false; - } - else { - for (int slot : FILTER_SLOTS) { - ItemStack itemInSlot = menu.getItemInSlot(slot); - - if (itemInSlot != null && SlimefunUtils.isItemSimilar(wrapper, itemInSlot, lore, false)) { - return false; - } - } - - return true; - } + boolean lore = "true".equals(blockData.getString("filter-lore")); + boolean allowByDefault = !"whitelist".equals(blockData.getString("filter-type")); + return matchesFilterList(item, menu, lore, allowByDefault); } catch (Exception x) { Slimefun.getLogger().log(Level.SEVERE, x, () -> "An Exception occurred while trying to filter items for a Cargo Node (" + id + ") at " + new BlockPosition(block)); @@ -417,6 +409,27 @@ final class CargoUtils { } } + private static boolean matchesFilterList(ItemStack item, BlockMenu menu, boolean respectLore, boolean defaultValue) { + ItemStackWrapper wrapper = null; + + for (int slot : FILTER_SLOTS) { + ItemStack stack = menu.getItemInSlot(slot); + + if (stack != null) { + if (wrapper == null) { + // Only create this as needed to save performance + wrapper = new ItemStackWrapper(item); + } + + if (SlimefunUtils.isItemSimilar(stack, wrapper, respectLore, false)) { + return !defaultValue; + } + } + } + + return defaultValue; + } + /** * Get the whitelist/blacklist slots in a Cargo Input Node. If you wish to access the items * in the cargo (without hardcoding the slots in case of change) then you can use this method. diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ChestTerminalNetwork.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ChestTerminalNetwork.java index 2edafc0e7..31c3e04de 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ChestTerminalNetwork.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/ChestTerminalNetwork.java @@ -12,7 +12,6 @@ import java.util.Map; import java.util.Optional; import java.util.Queue; import java.util.Set; -import java.util.concurrent.atomic.AtomicReference; import org.bukkit.Location; import org.bukkit.Material; @@ -69,25 +68,29 @@ abstract class ChestTerminalNetwork extends Network { super(SlimefunPlugin.getNetworkManager(), regulator); } - protected Optional getAttachedBlock(Block block) { - if (block.getType() == Material.PLAYER_WALL_HEAD) { - BlockFace cached = connectorCache.get(block.getLocation()); + protected Optional getAttachedBlock(Location l) { + if (l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4)) { + Block block = l.getBlock(); - if (cached != null) { - return Optional.of(block.getRelative(cached)); + if (block.getType() == Material.PLAYER_WALL_HEAD) { + BlockFace cached = connectorCache.get(l); + + if (cached != null) { + return Optional.of(block.getRelative(cached)); + } + + BlockFace face = ((Directional) block.getBlockData()).getFacing().getOppositeFace(); + connectorCache.put(l, face); + return Optional.of(block.getRelative(face)); } - - BlockFace face = ((Directional) block.getBlockData()).getFacing().getOppositeFace(); - connectorCache.put(block.getLocation(), face); - return Optional.of(block.getRelative(face)); } return Optional.empty(); } - protected void handleItemRequests(Set providers, Set destinations) { - collectImportRequests(); - collectExportRequests(); + protected void handleItemRequests(Map inventories, Set providers, Set destinations) { + collectImportRequests(inventories); + collectExportRequests(inventories); collectTerminalRequests(); Iterator iterator = itemRequests.iterator(); @@ -99,10 +102,10 @@ abstract class ChestTerminalNetwork extends Network { switch (request.getDirection()) { case INSERT: - distributeInsertionRequest(request, menu, iterator, destinations); + distributeInsertionRequest(inventories, request, menu, iterator, destinations); break; case WITHDRAW: - collectExtractionRequest(request, menu, iterator, providers); + collectExtractionRequest(inventories, request, menu, iterator, providers); break; default: break; @@ -111,14 +114,14 @@ abstract class ChestTerminalNetwork extends Network { } } - private void distributeInsertionRequest(ItemRequest request, BlockMenu terminal, Iterator iterator, Set destinations) { + private void distributeInsertionRequest(Map inventories, ItemRequest request, BlockMenu terminal, Iterator iterator, Set destinations) { ItemStack item = request.getItem(); for (Location l : destinations) { - Optional target = getAttachedBlock(l.getBlock()); + Optional target = getAttachedBlock(l); if (target.isPresent()) { - item = CargoUtils.insert(l.getBlock(), target.get(), item); + item = CargoUtils.insert(inventories, l.getBlock(), target.get(), item); if (item == null) { terminal.replaceExistingItem(request.getSlot(), null); @@ -134,7 +137,7 @@ abstract class ChestTerminalNetwork extends Network { iterator.remove(); } - private void collectExtractionRequest(ItemRequest request, BlockMenu terminal, Iterator iterator, Set providers) { + private void collectExtractionRequest(Map inventories, ItemRequest request, BlockMenu terminal, Iterator iterator, Set providers) { int slot = request.getSlot(); ItemStack prevStack = terminal.getItemInSlot(slot); @@ -147,10 +150,10 @@ abstract class ChestTerminalNetwork extends Network { ItemStack item = request.getItem(); for (Location l : providers) { - Optional target = getAttachedBlock(l.getBlock()); + Optional target = getAttachedBlock(l); if (target.isPresent()) { - ItemStack is = CargoUtils.withdraw(l.getBlock(), target.get(), item); + ItemStack is = CargoUtils.withdraw(inventories, l.getBlock(), target.get(), item); if (is != null) { if (stack == null) { @@ -184,7 +187,7 @@ abstract class ChestTerminalNetwork extends Network { iterator.remove(); } - private void collectImportRequests() { + private void collectImportRequests(Map inventories) { SlimefunItem item = SlimefunItem.getByID("CT_IMPORT_BUS"); for (Location bus : imports) { @@ -192,10 +195,10 @@ abstract class ChestTerminalNetwork extends Network { BlockMenu menu = BlockStorage.getInventory(bus); if (menu.getItemInSlot(17) == null) { - Optional target = getAttachedBlock(bus.getBlock()); + Optional target = getAttachedBlock(bus); if (target.isPresent()) { - ItemStackAndInteger stack = CargoUtils.withdraw(bus.getBlock(), target.get(), new AtomicReference<>()); + ItemStackAndInteger stack = CargoUtils.withdraw(inventories, bus.getBlock(), target.get()); if (stack != null) { menu.replaceExistingItem(17, stack.getItem()); @@ -211,7 +214,7 @@ abstract class ChestTerminalNetwork extends Network { } } - private void collectExportRequests() { + private void collectExportRequests(Map inventories) { SlimefunItem item = SlimefunItem.getByID("CT_EXPORT_BUS"); for (Location bus : exports) { @@ -219,10 +222,10 @@ abstract class ChestTerminalNetwork extends Network { BlockMenu menu = BlockStorage.getInventory(bus); if (menu.getItemInSlot(17) != null) { - Optional target = getAttachedBlock(bus.getBlock()); + Optional target = getAttachedBlock(bus); if (target.isPresent()) { - menu.replaceExistingItem(17, CargoUtils.insert(bus.getBlock(), target.get(), menu.getItemInSlot(17))); + menu.replaceExistingItem(17, CargoUtils.insert(inventories, bus.getBlock(), target.get(), menu.getItemInSlot(17))); } } @@ -231,7 +234,10 @@ abstract class ChestTerminalNetwork extends Network { for (int slot : slots) { ItemStack template = menu.getItemInSlot(slot); - if (template != null) items.add(new CustomItem(template, 1)); + + if (template != null) { + items.add(new CustomItem(template, 1)); + } } if (!items.isEmpty()) { @@ -339,7 +345,7 @@ abstract class ChestTerminalNetwork extends Network { List items = new LinkedList<>(); for (Location l : providers) { - Optional block = getAttachedBlock(l.getBlock()); + Optional block = getAttachedBlock(l); if (block.isPresent()) { Block target = block.get(); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java index 58251cb7c..9c1be58d5 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/Contributor.java @@ -13,6 +13,7 @@ import org.apache.commons.lang.Validate; import org.bukkit.ChatColor; import io.github.thebusybiscuit.cscorelib2.data.ComputedOptional; +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.HeadTexture; /** @@ -132,7 +133,8 @@ public class Contributor { */ public String getTexture() { if (!headTexture.isComputed() || !headTexture.isPresent()) { - return HeadTexture.UNKNOWN.getTexture(); + String cached = SlimefunPlugin.getGitHubService().getCachedTexture(githubUsername); + return cached != null ? cached : HeadTexture.UNKNOWN.getTexture(); } else { return headTexture.get(); 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 72a48028e..1942eeb52 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 @@ -15,6 +15,7 @@ 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; /** @@ -30,7 +31,9 @@ public class GitHubService { private final String repository; private final Set connectors; private final ConcurrentMap contributors; + private final Config uuidCache = new Config("plugins/Slimefun/cache/github/uuids.yml"); + private final Config texturesCache = new Config("plugins/Slimefun/cache/github/skins.yml"); private boolean logging = false; @@ -196,18 +199,31 @@ public class GitHubService { } /** - * This will store the {@link UUID} of all {@link Contributor Contributors} in memory - * in a {@link File} to save requests the next time we iterate over them. + * This will store the {@link UUID} and texture of all {@link Contributor Contributors} + * in memory in a {@link File} to save requests the next time we iterate over them. */ - protected void saveUUIDCache() { + protected void saveCache() { for (Contributor contributor : contributors.values()) { Optional uuid = contributor.getUniqueId(); if (uuid.isPresent()) { uuidCache.setValue(contributor.getName(), uuid.get()); } + + if (contributor.hasTexture()) { + String texture = contributor.getTexture(); + + if (!texture.equals(HeadTexture.UNKNOWN.getTexture())) { + texturesCache.setValue(contributor.getName(), texture); + } + } } uuidCache.save(); + texturesCache.save(); + } + + protected String getCachedTexture(String name) { + return texturesCache.getString(name); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubTask.java index 1f36dcc52..2f8ebe478 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubTask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubTask.java @@ -56,9 +56,9 @@ class GitHubTask implements Runnable { } } - if (requests >= MAX_REQUESTS_PER_MINUTE && SlimefunPlugin.instance != null && SlimefunPlugin.instance.isEnabled()) { + if (requests >= MAX_REQUESTS_PER_MINUTE && SlimefunPlugin.instance() != null && SlimefunPlugin.instance().isEnabled()) { // Slow down API requests and wait a minute after more than x requests were made - Bukkit.getScheduler().runTaskLaterAsynchronously(SlimefunPlugin.instance, this::grabTextures, 2 * 60 * 20L); + Bukkit.getScheduler().runTaskLaterAsynchronously(SlimefunPlugin.instance(), this::grabTextures, 2 * 60 * 20L); } for (GitHubConnector connector : gitHubService.getConnectors()) { @@ -69,7 +69,7 @@ class GitHubTask implements Runnable { // We only wanna save this if all Connectors finished already // This will run multiple times but thats okay, this way we get as much data as possible stored - gitHubService.saveUUIDCache(); + gitHubService.saveCache(); } private int requestTexture(Contributor contributor, Map skins) { @@ -94,14 +94,14 @@ class GitHubTask implements Runnable { // Retry after 5 minutes if it was rate-limiting if (x.getMessage().contains("429")) { - Bukkit.getScheduler().runTaskLaterAsynchronously(SlimefunPlugin.instance, this::grabTextures, 5 * 60 * 20L); + Bukkit.getScheduler().runTaskLaterAsynchronously(SlimefunPlugin.instance(), this::grabTextures, 5 * 60 * 20L); } return -1; } catch (TooManyRequestsException x) { Slimefun.getLogger().log(Level.WARNING, "Received a rate-limit from mojang.com, retrying in 4 minutes"); - Bukkit.getScheduler().runTaskLaterAsynchronously(SlimefunPlugin.instance, this::grabTextures, 4 * 60 * 20L); + Bukkit.getScheduler().runTaskLaterAsynchronously(SlimefunPlugin.instance(), this::grabTextures, 4 * 60 * 20L); return -1; } 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 63be7dcf6..b7231eaa1 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,11 +39,11 @@ enum SupportedLanguage { GREEK("el", false, "1514de6dd2b7682b1d3ebcd10291ae1f021e3012b5c8beffeb75b1819eb4259d"), SLOVAK("sk", true, "6c72a8c115a1fb669a25715c4d15f22136ac4c2452784e4894b3d56bc5b0b9"), VIETNAMESE("vi", true, "8a57b9d7dd04169478cfdb8d0b6fd0b8c82b6566bb28371ee9a7c7c1671ad0bb"), - INDONESIAN("id", false, "5db2678ccaba7934412cb97ee16d416463a392574c5906352f18dea42895ee"), + INDONESIAN("id", true, "5db2678ccaba7934412cb97ee16d416463a392574c5906352f18dea42895ee"), CHINESE_CHINA("zh-CN", true, "7f9bc035cdc80f1ab5e1198f29f3ad3fdd2b42d9a69aeb64de990681800b98dc"), CHINESE_TAIWAN("zh-TW", true, "702a4afb2e1e2e3a1894a8b74272f95cfa994ce53907f9ac140bd3c932f9f"), JAPANESE("ja", true, "d640ae466162a47d3ee33c4076df1cab96f11860f07edb1f0832c525a9e33323"), - KOREAN("kr", false, "fc1be5f12f45e413eda56f3de94e08d90ede8e339c7b1e8f32797390e9a5f"), + KOREAN("ko", false, "fc1be5f12f45e413eda56f3de94e08d90ede8e339c7b1e8f32797390e9a5f"), HEBREW("he", false, "1ba086a2cc7272cf5ba49c80248546c22e5ef1bab54120e8a8e5d9e75b6a"), ARABIC("ar", true, "a4be759a9cf7f0a19a7e8e62f23789ad1d21cebae38af9d9541676a3db001572"), TURKISH("tr", true, "9852b9aba3482348514c1034d0affe73545c9de679ae4647f99562b5e5f47d09"), diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Translators.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Translators.java index c508ad619..088856ec1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Translators.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Translators.java @@ -130,6 +130,10 @@ public class Translators { // Translators - Indonesian addTranslator("diradho", SupportedLanguage.INDONESIAN, false); + addTranslator("Frozenkamui", SupportedLanguage.INDONESIAN, false); + addTranslator("aril3721", SupportedLanguage.INDONESIAN, false); + addTranslator("JunederZ", SupportedLanguage.INDONESIAN, false); + addTranslator("EnderWingZ", SupportedLanguage.INDONESIAN, false); // Translators - Thai addTranslator("phoomin2012", SupportedLanguage.THAI, false); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/plugins/PlaceholderAPIHook.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/plugins/PlaceholderAPIHook.java index 111ee37ad..457068e97 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/plugins/PlaceholderAPIHook.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/plugins/PlaceholderAPIHook.java @@ -16,7 +16,7 @@ class PlaceholderAPIHook extends PlaceholderExpansion { @Override public String getAuthor() { - return SlimefunPlugin.instance.getDescription().getAuthors().toString(); + return SlimefunPlugin.instance().getDescription().getAuthors().toString(); } @Override @@ -26,7 +26,7 @@ class PlaceholderAPIHook extends PlaceholderExpansion { @Override public String getVersion() { - return SlimefunPlugin.instance.getDescription().getVersion(); + return SlimefunPlugin.instance().getDescription().getVersion(); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/PerformanceSummary.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/PerformanceSummary.java index 5262a1745..f23ed6e54 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/PerformanceSummary.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/PerformanceSummary.java @@ -25,10 +25,6 @@ class PerformanceSummary { private static final int MIN_ITEMS = 3; private static final int MAX_ITEMS = 10; - // A minecraft server tick is 50ms and Slimefun ticks are stretched across - // two ticks (sync and async blocks), so we use 100ms as a reference here - static final int MAX_TICK_DURATION = 100; - private final SlimefunProfiler profiler; private final PerformanceRating rating; private final long totalElapsedTime; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/SlimefunProfiler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/SlimefunProfiler.java index 2f22a1f1a..c5c567472 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/SlimefunProfiler.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/profiler/SlimefunProfiler.java @@ -10,7 +10,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Level; import org.apache.commons.lang.Validate; import org.bukkit.Chunk; @@ -25,7 +24,6 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.implementation.tasks.TickerTask; import io.github.thebusybiscuit.slimefun4.utils.NumberUtils; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.api.Slimefun; /** * The {@link SlimefunProfiler} works closely to the {@link TickerTask} and is @@ -41,7 +39,11 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; */ public class SlimefunProfiler { - private final ExecutorService executor = Executors.newFixedThreadPool(3); + // A minecraft server tick is 50ms and Slimefun ticks are stretched across + // two ticks (sync and async blocks), so we use 100ms as a reference here + private static final int MAX_TICK_DURATION = 100; + + private final ExecutorService executor = Executors.newFixedThreadPool(4); private final AtomicBoolean running = new AtomicBoolean(false); private final AtomicInteger queued = new AtomicInteger(0); @@ -125,7 +127,7 @@ public class SlimefunProfiler { public void stop() { running.set(false); - if (SlimefunPlugin.instance == null || !SlimefunPlugin.instance.isEnabled()) { + if (SlimefunPlugin.instance() == null || !SlimefunPlugin.instance().isEnabled()) { // Slimefun has been disabled return; } @@ -135,13 +137,9 @@ public class SlimefunProfiler { // Wait for all timing results to come in while (queued.get() > 0 && !running.get()) { - try { - Thread.sleep(1); - } - catch (InterruptedException e) { - Slimefun.getLogger().log(Level.SEVERE, "A waiting Thread was interrupted", e); - Thread.currentThread().interrupt(); - } + // Ideally we would wait some time here but the ticker task may be faster + // than 1ms, so it would halt this summary for up to 7 minutes + // Not perfect performance-wise but this is a seperate Thread anyway } if (running.get()) { @@ -253,7 +251,7 @@ public class SlimefunProfiler { protected float getPercentageOfTick() { float millis = totalElapsedTime / 1000000.0F; - float fraction = (millis * 100.0F) / PerformanceSummary.MAX_TICK_DURATION; + float fraction = (millis * 100.0F) / MAX_TICK_DURATION; return Math.round((fraction * 100.0F) / 100.0F); } 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 85fc62f3a..e0433c82d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunPlugin.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunPlugin.java @@ -46,7 +46,6 @@ import io.github.thebusybiscuit.slimefun4.core.services.plugins.ThirdPartyPlugin import io.github.thebusybiscuit.slimefun4.core.services.profiler.SlimefunProfiler; import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientAltar; import io.github.thebusybiscuit.slimefun4.implementation.items.backpacks.Cooler; -import io.github.thebusybiscuit.slimefun4.implementation.items.electric.BasicCircuitBoard; import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.Reactor; import io.github.thebusybiscuit.slimefun4.implementation.items.tools.GrapplingHook; import io.github.thebusybiscuit.slimefun4.implementation.items.weapons.SeismicAxe; @@ -107,7 +106,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu; */ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { - public static SlimefunPlugin instance; + private static SlimefunPlugin instance; private MinecraftVersion minecraftVersion = MinecraftVersion.UNKNOWN; @@ -331,7 +330,7 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { @Override public void onDisable() { // Slimefun never loaded successfully, so we don't even bother doing stuff here - if (instance == null || minecraftVersion == MinecraftVersion.UNIT_TEST) { + if (instance() == null || minecraftVersion == MinecraftVersion.UNIT_TEST) { return; } @@ -432,7 +431,7 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { new BeeListener(this); } - new MobDropListener(this, (BasicCircuitBoard) SlimefunItems.BASIC_CIRCUIT_BOARD.getItem()); + new MobDropListener(this); // Item-specific Listeners new VampireBladeListener(this, (VampireBlade) SlimefunItems.BLADE_OF_VAMPIRES.getItem()); @@ -484,6 +483,10 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon { } } + public static SlimefunPlugin instance() { + return instance; + } + public static Config getCfg() { return instance.config; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/BookSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/BookSlimefunGuide.java index cac68da1f..afaa464d4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/BookSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/BookSlimefunGuide.java @@ -35,7 +35,7 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; public class BookSlimefunGuide implements SlimefunGuideImplementation { - private final NamespacedKey guideSearch = new NamespacedKey(SlimefunPlugin.instance, "search"); + private final NamespacedKey guideSearch = new NamespacedKey(SlimefunPlugin.instance(), "search"); @Override public SlimefunGuideLayout getLayout() { @@ -53,7 +53,7 @@ public class BookSlimefunGuide implements SlimefunGuideImplementation { } private void openBook(Player p, PlayerProfile profile, List lines, boolean backButton) { - CustomBookInterface book = new CustomBookInterface(SlimefunPlugin.instance); + CustomBookInterface book = new CustomBookInterface(SlimefunPlugin.instance()); book.setTitle(SlimefunPlugin.getLocalization().getMessage(p, "guide.title.main")); for (int i = 0; i < lines.size(); i = i + 10) { @@ -63,7 +63,7 @@ public class BookSlimefunGuide implements SlimefunGuideImplementation { header.setClickEvent(new ClickEvent(guideSearch, player -> Slimefun.runSync(() -> { SlimefunPlugin.getLocalization().sendMessage(player, "guide.search.message"); - ChatInput.waitForPlayer(SlimefunPlugin.instance, player, msg -> SlimefunGuide.openSearch(profile, msg, true, true)); + ChatInput.waitForPlayer(SlimefunPlugin.instance(), player, msg -> SlimefunGuide.openSearch(profile, msg, true, true)); }, 1))); page.append(header); @@ -77,7 +77,7 @@ public class BookSlimefunGuide implements SlimefunGuideImplementation { if (backButton) { ChatComponent button = new ChatComponent(ChatColor.DARK_BLUE + "\u21E6 " + SlimefunPlugin.getLocalization().getMessage(p, "guide.back.title")); button.setHoverEvent(new HoverEvent(ChatColor.DARK_BLUE + "\u21E6 " + SlimefunPlugin.getLocalization().getMessage(p, "guide.back.title"), "", ChatColor.GRAY + SlimefunPlugin.getLocalization().getMessage(p, "guide.back.guide"))); - button.setClickEvent(new ClickEvent(new NamespacedKey(SlimefunPlugin.instance, "slimefun_guide"), pl -> openMainMenu(profile, 1))); + button.setClickEvent(new ClickEvent(new NamespacedKey(SlimefunPlugin.instance(), "slimefun_guide"), pl -> openMainMenu(profile, 1))); page.append(button); } @@ -189,7 +189,7 @@ public class BookSlimefunGuide implements SlimefunGuideImplementation { } private void appendSlimefunItem(Category category, int page, Player p, PlayerProfile profile, SlimefunItem item, List items) { - NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance, item.getID().toLowerCase(Locale.ROOT)); + NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance(), item.getID().toLowerCase(Locale.ROOT)); if (!Slimefun.hasUnlocked(p, item, false) && item.getResearch() != null) { Research research = item.getResearch(); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/ChestSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/ChestSlimefunGuide.java index 6d8ead8b1..52b3670ed 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/ChestSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/ChestSlimefunGuide.java @@ -561,7 +561,7 @@ public class ChestSlimefunGuide implements SlimefunGuideImplementation { pl.closeInventory(); SlimefunPlugin.getLocalization().sendMessage(pl, "guide.search.message"); - ChatInput.waitForPlayer(SlimefunPlugin.instance, pl, msg -> SlimefunGuide.openSearch(profile, msg, isSurvivalMode(), isSurvivalMode())); + ChatInput.waitForPlayer(SlimefunPlugin.instance(), pl, msg -> SlimefunGuide.openSearch(profile, msg, isSurvivalMode(), isSurvivalMode())); return false; }); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/RecipeChoiceTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/RecipeChoiceTask.java index f48420ec3..642ff0b58 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/RecipeChoiceTask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/RecipeChoiceTask.java @@ -42,7 +42,7 @@ class RecipeChoiceTask implements Runnable { public void start(Inventory inv) { Validate.notNull(inv, "Inventory must not be null"); inventory = inv; - id = Bukkit.getScheduler().runTaskTimerAsynchronously(SlimefunPlugin.instance, this, 0, UPDATE_INTERVAL).getTaskId(); + id = Bukkit.getScheduler().runTaskTimerAsynchronously(SlimefunPlugin.instance(), this, 0, UPDATE_INTERVAL).getTaskId(); } public void add(int slot, MaterialChoice choice) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/SimpleSlimefunItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/SimpleSlimefunItem.java new file mode 100644 index 000000000..f8ce58999 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/SimpleSlimefunItem.java @@ -0,0 +1,50 @@ +package io.github.thebusybiscuit.slimefun4.implementation.items; + +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +/** + * This is basically a quickstart class for your very first {@link SlimefunItem}. + * This class easily allows you to add one {@link ItemHandler} to your {@link SlimefunItem}. + * + * You could use an {@link ItemUseHandler} for example to give your {@link SlimefunItem} + * very basic right-click functionalities. + * + * @author TheBusyBiscuit + * + * @see ItemHandler + * @see ItemUseHandler + * @see SlimefunItem + * + * @param + * The Type of {@link ItemHandler} to add to this {@link SlimefunItem} + */ +public abstract class SimpleSlimefunItem extends SlimefunItem { + + 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); + } + + @Override + public void preRegister() { + addItemHandler(getItemHandler()); + } + + /** + * This returns the {@link ItemHandler} that will be added to this {@link SlimefunItem}. + * + * @return The {@link ItemHandler} that should be added to this {@link SlimefunItem} + */ + public abstract T getItemHandler(); + +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/altar/AncientPedestal.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/altar/AncientPedestal.java index 8c2242596..a57fddafa 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/altar/AncientPedestal.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/altar/AncientPedestal.java @@ -20,7 +20,7 @@ public class AncientPedestal extends SlimefunItem { Item stack = listener.findItem(b); if (stack != null) { - stack.removeMetadata("no_pickup", SlimefunPlugin.instance); + stack.removeMetadata("no_pickup", SlimefunPlugin.instance()); b.getWorld().dropItem(b.getLocation(), listener.fixItemStack(stack.getItemStack(), stack.getCustomName())); stack.remove(); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ButcherAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ButcherAndroid.java index f0580738c..0c1e8ad0f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ButcherAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ButcherAndroid.java @@ -14,7 +14,6 @@ import org.bukkit.metadata.FixedMetadataValue; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public abstract class ButcherAndroid extends ProgrammableAndroid { @@ -31,14 +30,14 @@ public abstract class ButcherAndroid extends ProgrammableAndroid { } @Override - protected void attack(Block b, Predicate predicate) { + protected void attack(Block b, BlockFace face, Predicate predicate) { double damage = getTier() >= 3 ? 20D : 4D * getTier(); double radius = 4.0 + getTier(); for (Entity n : b.getWorld().getNearbyEntities(b.getLocation(), radius, radius, radius, n -> n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.isValid() && predicate.test((LivingEntity) n))) { boolean attack = false; - switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) { + switch (face) { case NORTH: attack = n.getLocation().getZ() < b.getZ(); break; @@ -57,10 +56,10 @@ public abstract class ButcherAndroid extends ProgrammableAndroid { if (attack) { if (n.hasMetadata(METADATA_KEY)) { - n.removeMetadata(METADATA_KEY, SlimefunPlugin.instance); + n.removeMetadata(METADATA_KEY, SlimefunPlugin.instance()); } - n.setMetadata(METADATA_KEY, new FixedMetadataValue(SlimefunPlugin.instance, new AndroidInstance(this, b))); + n.setMetadata(METADATA_KEY, new FixedMetadataValue(SlimefunPlugin.instance(), new AndroidInstance(this, b))); ((LivingEntity) n).damage(damage); break; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/Instruction.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/Instruction.java index a2c70889b..02a24c1af 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/Instruction.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/Instruction.java @@ -83,22 +83,22 @@ enum Instruction { // Action - Sword ATTACK_MOBS_ANIMALS(AndroidType.FIGHTER, HeadTexture.SCRIPT_ATTACK, (android, b, inv, face) -> { Predicate predicate = e -> true; - android.attack(b, predicate); + android.attack(b, face, predicate); }), ATTACK_MOBS(AndroidType.FIGHTER, HeadTexture.SCRIPT_ATTACK, (android, b, inv, face) -> { Predicate predicate = e -> e instanceof Monster; - android.attack(b, predicate); + android.attack(b, face, predicate); }), ATTACK_ANIMALS(AndroidType.FIGHTER, HeadTexture.SCRIPT_ATTACK, (android, b, inv, face) -> { Predicate predicate = e -> e instanceof Animals; - android.attack(b, predicate); + android.attack(b, face, predicate); }), ATTACK_ANIMALS_ADULT(AndroidType.FIGHTER, HeadTexture.SCRIPT_ATTACK, (android, b, inv, face) -> { Predicate predicate = e -> e instanceof Animals && e instanceof Ageable && ((Ageable) e).isAdult(); - android.attack(b, predicate); + android.attack(b, face, predicate); }), // Action - Axe diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java index 874b13505..52547aa0e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/ProgrammableAndroid.java @@ -441,7 +441,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent SlimefunPlugin.getLocalization().sendMessages(p, "android.scripts.enter-name"); int id = nextId; - ChatInput.waitForPlayer(SlimefunPlugin.instance, p, msg -> { + ChatInput.waitForPlayer(SlimefunPlugin.instance(), p, msg -> { Script.upload(p, getAndroidType(), id, msg, code); SlimefunPlugin.getLocalization().sendMessages(p, "android.scripts.uploaded"); openScriptDownloader(p, b, page); @@ -814,7 +814,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent } } - protected void attack(Block b, Predicate predicate) { + protected void attack(Block b, BlockFace face, Predicate predicate) { throw new UnsupportedOperationException("Non-butcher Android tried to butcher!"); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/EnderBackpack.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/EnderBackpack.java index 288ca6c69..14f7b30fe 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/EnderBackpack.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/EnderBackpack.java @@ -6,9 +6,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class EnderBackpack extends SimpleSlimefunItem implements NotPlaceable { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/SlimefunBackpack.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/SlimefunBackpack.java index 359f9fff8..5d7af79f1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/SlimefunBackpack.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/backpacks/SlimefunBackpack.java @@ -7,10 +7,10 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.api.player.PlayerBackpack; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/BlockPlacer.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/BlockPlacer.java index 6b2f02caa..7a0c7ee02 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/BlockPlacer.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/BlockPlacer.java @@ -21,9 +21,9 @@ import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockDispenseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java index cbb7bd53c..11e1fd462 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Composter.java @@ -22,10 +22,10 @@ import io.github.thebusybiscuit.cscorelib2.scheduling.TaskQueue; import io.github.thebusybiscuit.slimefun4.core.attributes.RecipeDisplayItem; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; @@ -98,7 +98,7 @@ public class Composter extends SimpleSlimefunItem implements Re pushItem(b, output.clone()); }); - tasks.execute(SlimefunPlugin.instance); + tasks.execute(SlimefunPlugin.instance()); } else { SlimefunPlugin.getLocalization().sendMessage(p, "machines.wrong-item", true); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java index e866be381..b87d1cfe6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/Crucible.java @@ -19,10 +19,10 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import io.github.thebusybiscuit.slimefun4.core.attributes.RecipeDisplayItem; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/EnhancedFurnace.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/EnhancedFurnace.java index 24012fc56..a57ea975c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/EnhancedFurnace.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/EnhancedFurnace.java @@ -7,10 +7,10 @@ import org.bukkit.block.Block; import org.bukkit.block.Furnace; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/HologramProjector.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/HologramProjector.java index ff09249af..c030eee2d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/HologramProjector.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/HologramProjector.java @@ -13,13 +13,13 @@ import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.ChatUtils; import io.github.thebusybiscuit.slimefun4.utils.holograms.SimpleHologram; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.api.BlockStorage; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/InfusedHopper.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/InfusedHopper.java index 15ba809cd..8e98ce420 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/InfusedHopper.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/InfusedHopper.java @@ -10,11 +10,11 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RainbowBlock.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RainbowBlock.java index 613a72fc4..6f9c13dfc 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RainbowBlock.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RainbowBlock.java @@ -3,9 +3,9 @@ package io.github.thebusybiscuit.slimefun4.implementation.items.blocks; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.handlers.RainbowTickHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class RainbowBlock extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RepairedSpawner.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RepairedSpawner.java index d64ef794d..6155cbd97 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RepairedSpawner.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/RepairedSpawner.java @@ -10,10 +10,10 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockPlaceHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class RepairedSpawner extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/UnplaceableBlock.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/UnplaceableBlock.java index 688d4571c..5697103a3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/UnplaceableBlock.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/blocks/UnplaceableBlock.java @@ -5,9 +5,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class UnplaceableBlock extends SimpleSlimefunItem implements NotPlaceable { @@ -16,6 +16,10 @@ public class UnplaceableBlock extends SimpleSlimefunItem impleme super(category, item, recipeType, recipe); } + public UnplaceableBlock(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, recipeType, recipe, recipeOutput); + } + @Override public ItemUseHandler getItemHandler() { return PlayerRightClickEvent::cancel; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoConnectorNode.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoConnectorNode.java index 16da4bca6..13f46f541 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoConnectorNode.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/CargoConnectorNode.java @@ -7,9 +7,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.core.networks.cargo.CargoNet; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class CargoConnectorNode extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/ReactorAccessPort.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/ReactorAccessPort.java index 4f31246ec..899b8b937 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/ReactorAccessPort.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/cargo/ReactorAccessPort.java @@ -11,8 +11,8 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.Reactor; +import io.github.thebusybiscuit.slimefun4.implementation.items.misc.CoolantCell; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; -import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; @@ -74,18 +74,27 @@ public class ReactorAccessPort extends SlimefunItem { @Override public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) { - if (flow == ItemTransportFlow.INSERT) return getInputSlots(); - else return getOutputSlots(); + if (flow == ItemTransportFlow.INSERT) { + return getInputSlots(); + } + else { + return getOutputSlots(); + } } @Override public int[] getSlotsAccessedByItemTransport(DirtyChestMenu menu, ItemTransportFlow flow, ItemStack item) { if (flow == ItemTransportFlow.INSERT) { - if (SlimefunUtils.isItemSimilar(item, SlimefunItems.REACTOR_COOLANT_CELL, true)) return getCoolantSlots(); - else if (SlimefunUtils.isItemSimilar(item, SlimefunItems.NETHER_ICE_COOLANT_CELL, true)) return getCoolantSlots(); - else return getFuelSlots(); + if (SlimefunItem.getByItem(item) instanceof CoolantCell) { + return getCoolantSlots(); + } + else { + return getFuelSlots(); + } + } + else { + return getOutputSlots(); } - else return getOutputSlots(); } }; @@ -157,12 +166,11 @@ public class ReactorAccessPort extends SlimefunItem { } private BlockMenu getReactor(Location l) { - Location reactorL = new Location(l.getWorld(), l.getX(), l.getY() - 3, l.getZ()); - - SlimefunItem item = BlockStorage.check(reactorL.getBlock()); + Location location = new Location(l.getWorld(), l.getX(), l.getY() - 3, l.getZ()); + SlimefunItem item = BlockStorage.check(location.getBlock()); if (item instanceof Reactor) { - return BlockStorage.getInventory(reactorL); + return BlockStorage.getInventory(location); } return null; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/Multimeter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/Multimeter.java index 437f1e4d4..8cbd760a1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/Multimeter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/gadgets/Multimeter.java @@ -9,9 +9,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/generators/SolarGenerator.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/generators/SolarGenerator.java index f7042c789..512d6e2a3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/generators/SolarGenerator.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/generators/SolarGenerator.java @@ -9,10 +9,10 @@ import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent; import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.GeneratorTicker; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java index c405cb0f4..242e4fd75 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FluidPump.java @@ -14,6 +14,7 @@ import io.github.thebusybiscuit.cscorelib2.blocks.Vein; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent; import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; @@ -21,7 +22,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenu import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/WitherAssembler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/WitherAssembler.java index 549d1f938..a4a1a86dd 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/WitherAssembler.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/WitherAssembler.java @@ -14,13 +14,13 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent; import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; @@ -63,7 +63,7 @@ public class WitherAssembler extends SimpleSlimefunItem implements @Override public void newInstance(BlockMenu menu, Block b) { if (!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "enabled") == null || BlockStorage.getLocationInfo(b.getLocation(), "enabled").equals(String.valueOf(false))) { - menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.GUNPOWDER), "&7Enabled: &4\u2718", "", "&e> Click to enable this Machine")); + menu.replaceExistingItem(22, new CustomItem(Material.GUNPOWDER, "&7Enabled: &4\u2718", "", "&e> Click to enable this Machine")); menu.addMenuClickHandler(22, (p, slot, item, action) -> { BlockStorage.addBlockInfo(b, "enabled", String.valueOf(true)); newInstance(menu, b); @@ -71,7 +71,7 @@ public class WitherAssembler extends SimpleSlimefunItem implements }); } else { - menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.REDSTONE), "&7Enabled: &2\u2714", "", "&e> Click to disable this Machine")); + menu.replaceExistingItem(22, new CustomItem(Material.REDSTONE, "&7Enabled: &2\u2714", "", "&e> Click to disable this Machine")); menu.addMenuClickHandler(22, (p, slot, item, action) -> { BlockStorage.addBlockInfo(b, "enabled", String.valueOf(false)); newInstance(menu, b); @@ -81,7 +81,7 @@ public class WitherAssembler extends SimpleSlimefunItem implements double offset = (!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "offset") == null) ? 3.0F : Double.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "offset")); - menu.replaceExistingItem(31, new CustomItem(new ItemStack(Material.PISTON), "&7Offset: &3" + offset + " Block(s)", "", "&rLeft Click: &7+0.1", "&rRight Click: &7-0.1")); + menu.replaceExistingItem(31, new CustomItem(Material.PISTON, "&7Offset: &3" + offset + " Block(s)", "", "&rLeft Click: &7+0.1", "&rRight Click: &7-0.1")); menu.addMenuClickHandler(31, (p, slot, item, action) -> { double offsetv = DoubleHandler.fixDouble(Double.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "offset")) + (action.isRightClicked() ? -0.1F : 0.1F)); BlockStorage.addBlockInfo(b, "offset", String.valueOf(offsetv)); @@ -97,17 +97,27 @@ public class WitherAssembler extends SimpleSlimefunItem implements @Override public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) { - if (flow == ItemTransportFlow.INSERT) return getInputSlots(); - else return new int[0]; + if (flow == ItemTransportFlow.INSERT) { + return getInputSlots(); + } + else { + return new int[0]; + } } @Override public int[] getSlotsAccessedByItemTransport(DirtyChestMenu menu, ItemTransportFlow flow, ItemStack item) { - if (flow == ItemTransportFlow.INSERT) { - if (SlimefunUtils.isItemSimilar(item, new ItemStack(Material.SOUL_SAND), true)) return getSoulSandSlots(); - else return getWitherSkullSlots(); + if (flow == ItemTransportFlow.INSERT && item != null) { + if (item.getType() == Material.SOUL_SAND) { + return getSoulSandSlots(); + } + + if (item.getType() == Material.WITHER_SKELETON_SKULL) { + return getWitherSkullSlots(); + } } - else return new int[0]; + + return new int[0]; } }; @@ -121,7 +131,10 @@ public class WitherAssembler extends SimpleSlimefunItem implements @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - if (reason == UnregisterReason.EXPLODE) return false; + if (reason == UnregisterReason.EXPLODE) { + return false; + } + BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { @@ -139,6 +152,7 @@ public class WitherAssembler extends SimpleSlimefunItem implements } } } + return true; } }); @@ -227,7 +241,7 @@ public class WitherAssembler extends SimpleSlimefunItem implements int found = 0; for (int slot : slots) { - if (SlimefunUtils.isItemSimilar(menu.getItemInSlot(slot), new ItemStack(resource), true)) { + if (SlimefunUtils.isItemSimilar(menu.getItemInSlot(slot), new ItemStack(resource), true, false)) { found += menu.getItemInSlot(slot).getAmount(); if (found > required) { @@ -244,7 +258,7 @@ public class WitherAssembler extends SimpleSlimefunItem implements int skulls = 3; for (int slot : getSoulSandSlots()) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), new ItemStack(Material.SOUL_SAND), true)) { + if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), new ItemStack(Material.SOUL_SAND), true, false)) { int amount = inv.getItemInSlot(slot).getAmount(); if (amount >= soulsand) { @@ -259,7 +273,7 @@ public class WitherAssembler extends SimpleSlimefunItem implements } for (int slot : getWitherSkullSlots()) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), new ItemStack(Material.WITHER_SKELETON_SKULL), true)) { + if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), new ItemStack(Material.WITHER_SKELETON_SKULL), true, false)) { int amount = inv.getItemInSlot(slot).getAmount(); if (amount >= skulls) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/DietCookie.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/DietCookie.java index 5956b14cf..634746bf9 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/DietCookie.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/DietCookie.java @@ -7,9 +7,9 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemConsumptionHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; /** diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/FortuneCookie.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/FortuneCookie.java index d57ba3b2f..cb8a13a23 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/FortuneCookie.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/FortuneCookie.java @@ -10,9 +10,9 @@ import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemConsumptionHandler; import io.github.thebusybiscuit.slimefun4.core.services.LocalizationService; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java index 6e48a99bc..a09eaf31e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java @@ -10,9 +10,9 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class MagicSugar extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MeatJerky.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MeatJerky.java index 1304fea16..3ca675d84 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MeatJerky.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MeatJerky.java @@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemConsumptionHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; /** diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MonsterJerky.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MonsterJerky.java index 8377f6ff0..1766b481f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MonsterJerky.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MonsterJerky.java @@ -5,9 +5,9 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemConsumptionHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOScanner.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOScanner.java index 2b0834283..de00637ad 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOScanner.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOScanner.java @@ -5,9 +5,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class GEOScanner extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java index 6996a3d87..721020aa2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/OilPump.java @@ -36,7 +36,7 @@ public abstract class OilPump extends AContainer implements RecipeDisplayItem { public OilPump(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); - oil = SlimefunPlugin.getRegistry().getGEOResources().get(new NamespacedKey(SlimefunPlugin.instance, "oil")).orElse(null); + oil = SlimefunPlugin.getRegistry().getGEOResources().get(new NamespacedKey(SlimefunPlugin.instance(), "oil")).orElse(null); new BlockMenuPreset(getID(), getInventoryTitle()) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/PortableGEOScanner.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/PortableGEOScanner.java index 1a30b19e4..1c336c348 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/PortableGEOScanner.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/PortableGEOScanner.java @@ -7,9 +7,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class PortableGEOScanner extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/ElevatorPlate.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/ElevatorPlate.java index b411cc895..86e7d4482 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/ElevatorPlate.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/ElevatorPlate.java @@ -22,12 +22,12 @@ import io.github.thebusybiscuit.cscorelib2.chat.json.HoverEvent; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.ChatUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -96,7 +96,7 @@ public class ElevatorPlate extends SimpleSlimefunItem { return; } - CustomBookInterface book = new CustomBookInterface(SlimefunPlugin.instance); + CustomBookInterface book = new CustomBookInterface(SlimefunPlugin.instance()); ChatComponent page = null; List floors = getFloors(b); @@ -125,7 +125,7 @@ public class ElevatorPlate extends SimpleSlimefunItem { else { line = new ChatComponent("\n" + ChatColor.GRAY.toString() + (floors.size() - i) + ". " + ChatColor.RESET + floor); line.setHoverEvent(new HoverEvent(ChatColors.color(SlimefunPlugin.getLocalization().getMessage(p, "machines.ELEVATOR.click-to-teleport")), "", ChatColor.RESET + floor, "")); - line.setClickEvent(new ClickEvent(new NamespacedKey(SlimefunPlugin.instance, DATA_KEY + i), player -> Slimefun.runSync(() -> { + line.setClickEvent(new ClickEvent(new NamespacedKey(SlimefunPlugin.instance(), DATA_KEY + i), player -> Slimefun.runSync(() -> { users.add(player.getUniqueId()); float yaw = player.getEyeLocation().getYaw() + 180; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSControlPanel.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSControlPanel.java index 57323e3d7..4d11de893 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSControlPanel.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSControlPanel.java @@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class GPSControlPanel extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSMarkerTool.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSMarkerTool.java index 9cba1fbe4..b19fd4c0b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSMarkerTool.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSMarkerTool.java @@ -6,9 +6,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class GPSMarkerTool extends SimpleSlimefunItem implements NotPlaceable { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSTransmitter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSTransmitter.java index d96be8f1f..ef66e79c0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSTransmitter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/gps/GPSTransmitter.java @@ -9,11 +9,11 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent; import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/InfernalBonemeal.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/InfernalBonemeal.java index 28b7a88d5..f10c86655 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/InfernalBonemeal.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/InfernalBonemeal.java @@ -12,9 +12,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class InfernalBonemeal extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java index 72d6fa168..99744102d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeFlask.java @@ -7,9 +7,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeTome.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeTome.java index 7a32c1eae..ed923bc6d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeTome.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/KnowledgeTome.java @@ -17,9 +17,9 @@ import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.core.researching.Research; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class KnowledgeTome extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java index 810d53f31..b8163c176 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicEyeOfEnder.java @@ -8,10 +8,10 @@ import org.bukkit.inventory.PlayerInventory; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class MagicEyeOfEnder extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicalZombiePills.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicalZombiePills.java index 1882e63c7..b14be25e1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicalZombiePills.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/MagicalZombiePills.java @@ -10,9 +10,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion; import io.github.thebusybiscuit.slimefun4.core.handlers.EntityInteractHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/SoulboundRune.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/SoulboundRune.java index eb07c0540..c9f33c4e5 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/SoulboundRune.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/SoulboundRune.java @@ -14,10 +14,10 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.attributes.Soulbound; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemDropHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/StormStaff.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/StormStaff.java index 0d649de9f..8e14f1ed1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/StormStaff.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/StormStaff.java @@ -20,9 +20,9 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; @@ -37,7 +37,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; */ public class StormStaff extends SimpleSlimefunItem { - private static final NamespacedKey usageKey = new NamespacedKey(SlimefunPlugin.instance, "stormstaff_usage"); + private static final NamespacedKey usageKey = new NamespacedKey(SlimefunPlugin.instance(), "stormstaff_usage"); public static final int MAX_USES = 8; public StormStaff(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/TelepositionScroll.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/TelepositionScroll.java index 4a7f227e4..be4d3ed4f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/TelepositionScroll.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/TelepositionScroll.java @@ -8,9 +8,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WaterStaff.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WaterStaff.java index f81147741..ca0f26c6d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WaterStaff.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WaterStaff.java @@ -5,9 +5,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WindStaff.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WindStaff.java index ddf53c80f..6c07381ac 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WindStaff.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/WindStaff.java @@ -11,9 +11,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class WindStaff extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/EnderTalisman.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/EnderTalisman.java index 4790a6a1d..ee66d564f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/EnderTalisman.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/EnderTalisman.java @@ -19,7 +19,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; */ class EnderTalisman extends Talisman { - private static final LockedCategory ENDER_TALISMANS_CATEGORY = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "ender_talismans"), new CustomItem(SlimefunItems.ENDER_TALISMAN, "&7Talismans - &aTier II"), 3, Talisman.TALISMANS_CATEGORY.getKey()); + private static final LockedCategory ENDER_TALISMANS_CATEGORY = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance(), "ender_talismans"), new CustomItem(SlimefunItems.ENDER_TALISMAN, "&7Talismans - &aTier II"), 3, Talisman.TALISMANS_CATEGORY.getKey()); public EnderTalisman(Talisman parent, SlimefunItemStack item) { super(ENDER_TALISMANS_CATEGORY, item, new ItemStack[] { SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3 }, parent.isConsumable(), parent.isEventCancelled(), parent.getMessageSuffix(), parent.getChance(), parent.getEffects()); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java index e5a945025..e0a58a0da 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java @@ -31,7 +31,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class Talisman extends SlimefunItem { - protected static final Category TALISMANS_CATEGORY = new Category(new NamespacedKey(SlimefunPlugin.instance, "talismans"), new CustomItem(SlimefunItems.COMMON_TALISMAN, "&7Talismans - &aTier I"), 2); + protected static final Category TALISMANS_CATEGORY = new Category(new NamespacedKey(SlimefunPlugin.instance(), "talismans"), new CustomItem(SlimefunItems.COMMON_TALISMAN, "&7Talismans - &aTier I"), 2); private final SlimefunItemStack enderTalisman; @@ -117,7 +117,7 @@ public class Talisman extends SlimefunItem { protected void createEnderTalisman() { EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(getEnderVariant()); - Optional research = Research.getResearch(new NamespacedKey(SlimefunPlugin.instance, "ender_talismans")); + Optional research = Research.getResearch(new NamespacedKey(SlimefunPlugin.instance(), "ender_talismans")); if (talisman != null && research.isPresent()) { talisman.setResearch(research.get()); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Bandage.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Bandage.java index 8b9f68f9d..33235a6a3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Bandage.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Bandage.java @@ -11,9 +11,9 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class Bandage extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Medicine.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Medicine.java index 1fa813917..8d42e4b7e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Medicine.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Medicine.java @@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemConsumptionHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class Medicine extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Rag.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Rag.java index 772faed29..2d314ee86 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Rag.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Rag.java @@ -11,9 +11,9 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class Rag extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Splint.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Splint.java index ec417312c..7518fd402 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Splint.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Splint.java @@ -10,9 +10,9 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class Splint extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Vitamins.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Vitamins.java index fc9fd4261..2b7240427 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Vitamins.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/medical/Vitamins.java @@ -9,9 +9,9 @@ import org.bukkit.potion.PotionEffectType; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class Vitamins extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/BasicCircuitBoard.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/misc/BasicCircuitBoard.java similarity index 72% rename from src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/BasicCircuitBoard.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/misc/BasicCircuitBoard.java index d7e6e42aa..ee6d4420a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/BasicCircuitBoard.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/misc/BasicCircuitBoard.java @@ -1,24 +1,32 @@ -package io.github.thebusybiscuit.slimefun4.implementation.items.electric; +package io.github.thebusybiscuit.slimefun4.implementation.items.misc; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; +import io.github.thebusybiscuit.slimefun4.core.attributes.RandomMobDrop; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class BasicCircuitBoard extends SimpleSlimefunItem implements NotPlaceable { +public class BasicCircuitBoard extends SimpleSlimefunItem implements NotPlaceable, RandomMobDrop { private final ItemSetting dropSetting = new ItemSetting<>("drop-from-golems", true); + private final ItemSetting chance = new ItemSetting<>("golem-drop-chance", 75); public BasicCircuitBoard(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); addItemSetting(dropSetting); + addItemSetting(chance); + } + + @Override + public int getMobDropChance() { + return chance.getValue(); } public boolean isDroppedFromGolems() { @@ -30,4 +38,4 @@ public class BasicCircuitBoard extends SimpleSlimefunItem implem return PlayerRightClickEvent::cancel; } -} +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/misc/CoolantCell.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/misc/CoolantCell.java new file mode 100644 index 000000000..347a70d75 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/misc/CoolantCell.java @@ -0,0 +1,35 @@ +package io.github.thebusybiscuit.slimefun4.implementation.items.misc; + +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.slimefun4.implementation.items.blocks.UnplaceableBlock; +import io.github.thebusybiscuit.slimefun4.implementation.items.cargo.ReactorAccessPort; +import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.NetherStarReactor; +import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.NuclearReactor; +import io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactors.Reactor; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +/** + * A {@link CoolantCell} is an {@link ItemStack} that is used to cool a {@link Reactor}. + * + * @author TheBusyBiscuit + * + * @see Reactor + * @see ReactorAccessPort + * @see NuclearReactor + * @see NetherStarReactor + * + */ +public class CoolantCell extends UnplaceableBlock { + + public CoolantCell(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + public CoolantCell(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, recipeType, recipe, recipeOutput); + } + +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AutomatedPanningMachine.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AutomatedPanningMachine.java index aa33cc629..d70141974 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AutomatedPanningMachine.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/AutomatedPanningMachine.java @@ -76,7 +76,7 @@ public class AutomatedPanningMachine extends MultiBlockMachine { } }); - queue.execute(SlimefunPlugin.instance); + queue.execute(SlimefunPlugin.instance()); } else { SlimefunPlugin.getLocalization().sendMessage(p, "machines.wrong-item", true); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java index bc853dbdd..147205048 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/MagicWorkbench.java @@ -81,7 +81,7 @@ public class MagicWorkbench extends BackpackCrafter { private void startAnimation(Player p, Block b, Inventory inv, ItemStack output) { for (int j = 0; j < 4; j++) { int current = j; - Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> { + Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance(), () -> { p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java index 50f919e5d..ad89e95b4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/PressureChamber.java @@ -70,7 +70,7 @@ public class PressureChamber extends MultiBlockMachine { for (int i = 0; i < 4; i++) { int j = i; - Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> { + Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance(), () -> { p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/miner/ActiveMiner.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/miner/ActiveMiner.java index 557953ef6..ecf09dabd 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/miner/ActiveMiner.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/multiblocks/miner/ActiveMiner.java @@ -149,7 +149,7 @@ class ActiveMiner implements Runnable { queue.thenRun(2, () -> setPistonState(pistons[1], false)); queue.thenRun(1, this); - queue.execute(SlimefunPlugin.instance); + queue.execute(SlimefunPlugin.instance()); } @Override @@ -202,7 +202,7 @@ class ActiveMiner implements Runnable { } }); - queue.execute(SlimefunPlugin.instance); + queue.execute(SlimefunPlugin.instance()); } /** diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/ChristmasPresent.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/ChristmasPresent.java index a408deb6e..bf0ffe8c7 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/ChristmasPresent.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/ChristmasPresent.java @@ -8,10 +8,10 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockPlaceHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.FireworkUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class ChristmasPresent extends SimpleSlimefunItem implements NotPlaceable { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/EasterEgg.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/EasterEgg.java index 5073842d7..14660476a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/EasterEgg.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/seasonal/EasterEgg.java @@ -8,10 +8,10 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.utils.FireworkUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/ExplosiveTool.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/ExplosiveTool.java index 770bcfe17..2ad1cb1b2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/ExplosiveTool.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/ExplosiveTool.java @@ -21,10 +21,10 @@ import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockBreakHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -38,6 +38,7 @@ class ExplosiveTool extends SimpleSlimefunItem implements Not public ExplosiveTool(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); + addItemSetting(damageOnUse, callExplosionEvent); } @@ -54,6 +55,7 @@ class ExplosiveTool extends SimpleSlimefunItem implements Not public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { if (isItem(item)) { Player p = e.getPlayer(); + if (Slimefun.hasUnlocked(p, ExplosiveTool.this, true)) { Block b = e.getBlock(); @@ -61,21 +63,7 @@ class ExplosiveTool extends SimpleSlimefunItem implements Not b.getWorld().playSound(b.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.2F, 1F); List blocks = findBlocks(b); - if (callExplosionEvent.getValue().booleanValue()) { - BlockExplodeEvent blockExplodeEvent = new BlockExplodeEvent(b, blocks, 0); - Bukkit.getServer().getPluginManager().callEvent(blockExplodeEvent); - - if (!blockExplodeEvent.isCancelled()) { - for (Block block : blockExplodeEvent.blockList()) { - breakBlock(p, item, block, fortune, drops); - } - } - } - else { - for (Block block : blocks) { - breakBlock(p, item, block, fortune, drops); - } - } + breakBlocks(p, item, b, blocks, fortune, drops); } return true; @@ -87,6 +75,24 @@ class ExplosiveTool extends SimpleSlimefunItem implements Not }; } + private void breakBlocks(Player p, ItemStack item, Block b, List blocks, int fortune, List drops) { + if (callExplosionEvent.getValue().booleanValue()) { + BlockExplodeEvent blockExplodeEvent = new BlockExplodeEvent(b, blocks, 0); + Bukkit.getServer().getPluginManager().callEvent(blockExplodeEvent); + + if (!blockExplodeEvent.isCancelled()) { + for (Block block : blockExplodeEvent.blockList()) { + breakBlock(p, item, block, fortune, drops); + } + } + } + else { + for (Block block : blocks) { + breakBlock(p, item, block, fortune, drops); + } + } + } + private List findBlocks(Block b) { List blocks = new ArrayList<>(26); @@ -112,7 +118,7 @@ class ExplosiveTool extends SimpleSlimefunItem implements Not } protected void breakBlock(Player p, ItemStack item, Block b, int fortune, List drops) { - if (b.getType() != Material.AIR && !b.isLiquid() && !MaterialCollections.getAllUnbreakableBlocks().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.BREAK_BLOCK)) { + if (!b.isEmpty() && !b.isLiquid() && !MaterialCollections.getAllUnbreakableBlocks().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.BREAK_BLOCK)) { SlimefunPlugin.getProtectionManager().logAction(p, b, ProtectableAction.BREAK_BLOCK); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java index 23a8f6136..2e7c09c60 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GoldPan.java @@ -18,11 +18,11 @@ import io.github.thebusybiscuit.slimefun4.core.attributes.RecipeDisplayItem; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.implementation.items.electric.machines.ElectricGoldPan; import io.github.thebusybiscuit.slimefun4.implementation.items.multiblocks.AutomatedPanningMachine; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GrapplingHook.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GrapplingHook.java index aa78365d4..8d0c68682 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GrapplingHook.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/GrapplingHook.java @@ -15,9 +15,9 @@ import org.bukkit.util.Vector; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class GrapplingHook extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/HerculesPickaxe.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/HerculesPickaxe.java index 7292a16b0..ddcee83ca 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/HerculesPickaxe.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/HerculesPickaxe.java @@ -9,9 +9,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockBreakHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/LumberAxe.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/LumberAxe.java index 5e35de377..77610b2a1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/LumberAxe.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/LumberAxe.java @@ -19,9 +19,9 @@ import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockBreakHandler; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfContainment.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfContainment.java index 2580a8abe..c43194abf 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfContainment.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfContainment.java @@ -11,12 +11,12 @@ import org.bukkit.inventory.meta.ItemMeta; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockBreakHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import io.github.thebusybiscuit.slimefun4.implementation.items.blocks.BrokenSpawner; import io.github.thebusybiscuit.slimefun4.implementation.items.blocks.RepairedSpawner; import io.github.thebusybiscuit.slimefun4.utils.ChatUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfTheSeeker.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfTheSeeker.java index 204b5719e..82ae021d1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfTheSeeker.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfTheSeeker.java @@ -10,9 +10,9 @@ import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class PickaxeOfTheSeeker extends SimpleSlimefunItem implements DamageableItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfVeinMining.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfVeinMining.java index 9862f4dcf..e2ed14c78 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfVeinMining.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PickaxeOfVeinMining.java @@ -17,9 +17,9 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockBreakHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableCrafter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableCrafter.java index ce223f020..4a9d02af4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableCrafter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableCrafter.java @@ -6,9 +6,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class PortableCrafter extends SimpleSlimefunItem implements NotPlaceable { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableDustbin.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableDustbin.java index cf43a17c9..9d785b3bf 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableDustbin.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/PortableDustbin.java @@ -8,9 +8,9 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class PortableDustbin extends SimpleSlimefunItem implements NotPlaceable { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/SmeltersPickaxe.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/SmeltersPickaxe.java index 5fdc56a50..bbd13af58 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/SmeltersPickaxe.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/tools/SmeltersPickaxe.java @@ -14,9 +14,9 @@ import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem; import io.github.thebusybiscuit.slimefun4.core.handlers.BlockBreakHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SeismicAxe.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SeismicAxe.java index 9305abdac..3f8bd137a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SeismicAxe.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SeismicAxe.java @@ -23,9 +23,9 @@ import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem; import io.github.thebusybiscuit.slimefun4.core.attributes.NotPlaceable; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; /** @@ -63,7 +63,7 @@ public class SeismicAxe extends SimpleSlimefunItem implements No FallingBlock block = ground.getWorld().spawnFallingBlock(loc, ground.getBlockData()); block.setDropItem(false); block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0)); - block.setMetadata("seismic_axe", new FixedMetadataValue(SlimefunPlugin.instance, "fake_block")); + block.setMetadata("seismic_axe", new FixedMetadataValue(SlimefunPlugin.instance(), "fake_block")); } for (Entity n : ground.getChunk().getEntities()) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SwordOfBeheading.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SwordOfBeheading.java index 92c2b4222..cd4affd3e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SwordOfBeheading.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/weapons/SwordOfBeheading.java @@ -15,9 +15,9 @@ import org.bukkit.inventory.meta.SkullMeta; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.core.handlers.EntityKillHandler; +import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class SwordOfBeheading extends SimpleSlimefunItem { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ButcherAndroidListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ButcherAndroidListener.java index f90df4ddf..78dda0ec3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ButcherAndroidListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ButcherAndroidListener.java @@ -61,7 +61,7 @@ public class ButcherAndroidListener implements Listener { }, 1L); // Removing metadata to prevent memory leaks - e.getEntity().removeMetadata(METADATA_KEY, SlimefunPlugin.instance); + e.getEntity().removeMetadata(METADATA_KEY, SlimefunPlugin.instance()); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MobDropListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MobDropListener.java index 0d511e58a..204db964a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MobDropListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/MobDropListener.java @@ -1,7 +1,7 @@ package io.github.thebusybiscuit.slimefun4.implementation.listeners; -import java.util.List; import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -10,20 +10,17 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.slimefun4.core.attributes.RandomMobDrop; import io.github.thebusybiscuit.slimefun4.core.handlers.EntityKillHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; -import io.github.thebusybiscuit.slimefun4.implementation.items.electric.BasicCircuitBoard; +import io.github.thebusybiscuit.slimefun4.implementation.items.misc.BasicCircuitBoard; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; public class MobDropListener implements Listener { - private final BasicCircuitBoard circuitBoard; - - public MobDropListener(SlimefunPlugin plugin, BasicCircuitBoard circuitBoard) { + public MobDropListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); - - this.circuitBoard = circuitBoard; } @EventHandler @@ -33,8 +30,13 @@ public class MobDropListener implements Listener { ItemStack item = p.getInventory().getItemInMainHand(); Set customDrops = SlimefunPlugin.getRegistry().getMobDrops(e.getEntityType()); + if (customDrops != null && !customDrops.isEmpty()) { - addDrops(p, customDrops, e.getDrops()); + for (ItemStack drop : customDrops) { + if (canDrop(p, drop)) { + e.getDrops().add(drop.clone()); + } + } } if (item.getType() != Material.AIR) { @@ -47,15 +49,30 @@ public class MobDropListener implements Listener { } } - private void addDrops(Player p, Set customDrops, List drops) { - for (ItemStack drop : customDrops) { - if (Slimefun.hasUnlocked(p, drop, true)) { - if (circuitBoard != null && circuitBoard.isItem(drop) && !circuitBoard.isDroppedFromGolems()) { - continue; - } + private boolean canDrop(Player p, ItemStack item) { + SlimefunItem sfi = SlimefunItem.getByItem(item); - drops.add(drop.clone()); + if (sfi == null) { + return true; + } + else if (Slimefun.hasUnlocked(p, sfi, true)) { + + if (sfi instanceof RandomMobDrop) { + int random = ThreadLocalRandom.current().nextInt(100); + + if (((RandomMobDrop) sfi).getMobDropChance() <= random) { + return false; + } } + + if (sfi instanceof BasicCircuitBoard) { + return ((BasicCircuitBoard) sfi).isDroppedFromGolems(); + } + + return true; + } + else { + return false; } } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SeismicAxeListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SeismicAxeListener.java index 4b5aae5fd..50b3e6384 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SeismicAxeListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SeismicAxeListener.java @@ -35,7 +35,7 @@ public class SeismicAxeListener implements Listener { if (e.getEntity().getType() == EntityType.FALLING_BLOCK && e.getEntity().hasMetadata("seismic_axe")) { e.setCancelled(true); - e.getEntity().removeMetadata("seismic_axe", SlimefunPlugin.instance); + e.getEntity().removeMetadata("seismic_axe", SlimefunPlugin.instance()); e.getEntity().remove(); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/NetherIceResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/NetherIceResource.java index 5a1e0f7c8..994b20290 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/NetherIceResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/NetherIceResource.java @@ -11,7 +11,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; class NetherIceResource implements GEOResource { - private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance, "nether_ice"); + private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance(), "nether_ice"); @Override public int getDefaultSupply(Environment environment, Biome biome) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/OilResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/OilResource.java index 44ff1a090..f40777c83 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/OilResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/OilResource.java @@ -11,7 +11,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; class OilResource implements GEOResource { - private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance, "oil"); + private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance(), "oil"); @Override public int getDefaultSupply(Environment environment, Biome biome) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/SaltResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/SaltResource.java index 5a4cabb61..a93014bab 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/SaltResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/SaltResource.java @@ -11,7 +11,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; class SaltResource implements GEOResource { - private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance, "salt"); + private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance(), "salt"); @Override public int getDefaultSupply(Environment environment, Biome biome) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/UraniumResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/UraniumResource.java index a98010ac1..b85528480 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/UraniumResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/resources/UraniumResource.java @@ -11,7 +11,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; class UraniumResource implements GEOResource { - private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance, "uranium"); + private final NamespacedKey key = new NamespacedKey(SlimefunPlugin.instance(), "uranium"); @Override public int getDefaultSupply(Environment envionment, Biome biome) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/DefaultCategories.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/DefaultCategories.java index c18221bc3..c90bc6e43 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/DefaultCategories.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/DefaultCategories.java @@ -32,35 +32,35 @@ import me.mrCookieSlime.Slimefun.Objects.Category; class DefaultCategories { // Standard Categories - protected final Category weapons = new Category(new NamespacedKey(SlimefunPlugin.instance, "weapons"), new CustomItem(SlimefunItems.BLADE_OF_VAMPIRES, "&7Weapons"), 1); - protected final Category tools = new Category(new NamespacedKey(SlimefunPlugin.instance, "tools"), new CustomItem(SlimefunItems.SMELTERS_PICKAXE, "&7Tools"), 1); - protected final Category usefulItems = new Category(new NamespacedKey(SlimefunPlugin.instance, "items"), new CustomItem(SlimefunItems.BACKPACK_MEDIUM, "&7Useful Items"), 1); - protected final Category basicMachines = new Category(new NamespacedKey(SlimefunPlugin.instance, "basic_machines"), new CustomItem(Material.CRAFTING_TABLE, "&7Basic Machines"), 1); - protected final Category food = new Category(new NamespacedKey(SlimefunPlugin.instance, "food"), new CustomItem(SlimefunItems.FORTUNE_COOKIE, "&7Food"), 2); - protected final Category armor = new Category(new NamespacedKey(SlimefunPlugin.instance, "armor"), new CustomItem(SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, "&7Armor"), 2); + protected final Category weapons = new Category(new NamespacedKey(SlimefunPlugin.instance(), "weapons"), new CustomItem(SlimefunItems.BLADE_OF_VAMPIRES, "&7Weapons"), 1); + protected final Category tools = new Category(new NamespacedKey(SlimefunPlugin.instance(), "tools"), new CustomItem(SlimefunItems.SMELTERS_PICKAXE, "&7Tools"), 1); + protected final Category usefulItems = new Category(new NamespacedKey(SlimefunPlugin.instance(), "items"), new CustomItem(SlimefunItems.BACKPACK_MEDIUM, "&7Useful Items"), 1); + protected final Category basicMachines = new Category(new NamespacedKey(SlimefunPlugin.instance(), "basic_machines"), new CustomItem(SlimefunItems.ENHANCED_CRAFTING_TABLE, "&7Basic Machines"), 1); + protected final Category food = new Category(new NamespacedKey(SlimefunPlugin.instance(), "food"), new CustomItem(SlimefunItems.FORTUNE_COOKIE, "&7Food"), 2); + protected final Category armor = new Category(new NamespacedKey(SlimefunPlugin.instance(), "armor"), new CustomItem(SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, "&7Armor"), 2); // Magical - protected final Category magicalResources = new Category(new NamespacedKey(SlimefunPlugin.instance, "magical_items"), new CustomItem(SlimefunItems.ENDER_RUNE, "&7Magical Items"), 2); - protected final Category magicalGadgets = new Category(new NamespacedKey(SlimefunPlugin.instance, "magical_gadgets"), new CustomItem(SlimefunItems.INFUSED_ELYTRA, "&7Magical Gadgets"), 3); - protected final Category magicalArmor = new Category(new NamespacedKey(SlimefunPlugin.instance, "magical_armor"), new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor"), 2); + protected final Category magicalResources = new Category(new NamespacedKey(SlimefunPlugin.instance(), "magical_items"), new CustomItem(SlimefunItems.ENDER_RUNE, "&7Magical Items"), 2); + protected final Category magicalGadgets = new Category(new NamespacedKey(SlimefunPlugin.instance(), "magical_gadgets"), new CustomItem(SlimefunItems.INFUSED_ELYTRA, "&7Magical Gadgets"), 3); + protected final Category magicalArmor = new Category(new NamespacedKey(SlimefunPlugin.instance(), "magical_armor"), new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor"), 2); // Resources and tech stuff - protected final Category misc = new Category(new NamespacedKey(SlimefunPlugin.instance, "misc"), new CustomItem(SlimefunItems.TIN_CAN, "&7Miscellaneous"), 2); - protected final Category technicalComponents = new Category(new NamespacedKey(SlimefunPlugin.instance, "tech_misc"), new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components"), 2); - protected final Category technicalGadgets = new Category(new NamespacedKey(SlimefunPlugin.instance, "technical_gadgets"), new CustomItem(SlimefunItems.STEEL_JETPACK, "&7Technical Gadgets"), 3); - protected final Category resources = new Category(new NamespacedKey(SlimefunPlugin.instance, "resources"), new CustomItem(SlimefunItems.SYNTHETIC_SAPPHIRE, "&7Resources"), 1); + protected final Category misc = new Category(new NamespacedKey(SlimefunPlugin.instance(), "misc"), new CustomItem(SlimefunItems.TIN_CAN, "&7Miscellaneous"), 2); + protected final Category technicalComponents = new Category(new NamespacedKey(SlimefunPlugin.instance(), "tech_misc"), new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components"), 2); + protected final Category technicalGadgets = new Category(new NamespacedKey(SlimefunPlugin.instance(), "technical_gadgets"), new CustomItem(SlimefunItems.STEEL_JETPACK, "&7Technical Gadgets"), 3); + protected final Category resources = new Category(new NamespacedKey(SlimefunPlugin.instance(), "resources"), new CustomItem(SlimefunItems.SYNTHETIC_SAPPHIRE, "&7Resources"), 1); // Locked Categories - protected final LockedCategory electricity = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "electricity"), new CustomItem(SlimefunItems.NUCLEAR_REACTOR, "&bEnergy and Electricity"), 4, basicMachines.getKey()); - protected final LockedCategory androids = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "androids"), new CustomItem(SlimefunItems.PROGRAMMABLE_ANDROID, "&cProgrammable Androids"), 4, basicMachines.getKey()); - protected final Category cargo = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "cargo"), new CustomItem(SlimefunItems.CARGO_MANAGER, "&cCargo Management"), 4, basicMachines.getKey()); - protected final LockedCategory gps = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "gps"), new CustomItem(SlimefunItems.GPS_TRANSMITTER, "&bGPS-based Machines"), 4, basicMachines.getKey()); + protected final LockedCategory electricity = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance(), "electricity"), new CustomItem(SlimefunItems.NUCLEAR_REACTOR, "&bEnergy and Electricity"), 4, basicMachines.getKey()); + protected final LockedCategory androids = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance(), "androids"), new CustomItem(SlimefunItems.PROGRAMMABLE_ANDROID, "&cProgrammable Androids"), 4, basicMachines.getKey()); + protected final Category cargo = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance(), "cargo"), new CustomItem(SlimefunItems.CARGO_MANAGER, "&cCargo Management"), 4, basicMachines.getKey()); + protected final LockedCategory gps = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance(), "gps"), new CustomItem(SlimefunItems.GPS_TRANSMITTER, "&bGPS-based Machines"), 4, basicMachines.getKey()); // Seasonal Categories - protected final SeasonalCategory christmas = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance, "christmas"), Month.DECEMBER, 1, new CustomItem(SlimefunUtils.getCustomHead("215ba31cde2671b8f176de6a9ffd008035f0590d63ee240be6e8921cd2037a45"), ChatUtils.christmas("Christmas") + " &7(December only)")); - protected final SeasonalCategory valentinesDay = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance, "valentines_day"), Month.FEBRUARY, 2, new CustomItem(SlimefunUtils.getCustomHead("55d89431d14bfef2060461b4a3565614dc51115c001fae2508e8684bc0ae6a80"), "&dValentine's Day" + " &7(14th February)")); - protected final SeasonalCategory easter = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance, "easter"), Month.APRIL, 2, new CustomItem(HeadTexture.EASTER_EGG.getAsItemStack(), "&6Easter" + " &7(April)")); - protected final SeasonalCategory birthday = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance, "birthday"), Month.OCTOBER, 1, new CustomItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)")); - protected final SeasonalCategory halloween = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance, "halloween"), Month.OCTOBER, 1, new CustomItem(Material.JACK_O_LANTERN, "&6&lHalloween &7(31st October)")); + protected final SeasonalCategory christmas = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance(), "christmas"), Month.DECEMBER, 1, new CustomItem(SlimefunUtils.getCustomHead("215ba31cde2671b8f176de6a9ffd008035f0590d63ee240be6e8921cd2037a45"), ChatUtils.christmas("Christmas") + " &7(December only)")); + protected final SeasonalCategory valentinesDay = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance(), "valentines_day"), Month.FEBRUARY, 2, new CustomItem(SlimefunUtils.getCustomHead("55d89431d14bfef2060461b4a3565614dc51115c001fae2508e8684bc0ae6a80"), "&dValentine's Day" + " &7(14th February)")); + protected final SeasonalCategory easter = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance(), "easter"), Month.APRIL, 2, new CustomItem(HeadTexture.EASTER_EGG.getAsItemStack(), "&6Easter" + " &7(April)")); + protected final SeasonalCategory birthday = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance(), "birthday"), Month.OCTOBER, 1, new CustomItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)")); + protected final SeasonalCategory halloween = new SeasonalCategory(new NamespacedKey(SlimefunPlugin.instance(), "halloween"), Month.OCTOBER, 1, new CustomItem(Material.JACK_O_LANTERN, "&6&lHalloween &7(31st October)")); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java index 1a541a456..e5cedb8c8 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/PostSetup.java @@ -217,9 +217,13 @@ public final class PostSetup { } for (SlimefunItem item : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { - if (item instanceof AContainer && ((AContainer) item).getMachineIdentifier().equals("ELECTRIC_SMELTERY")) { - List recipes = ((AContainer) item).getMachineRecipes(); - Collections.sort(recipes, Comparator.comparingInt(recipe -> recipe == null ? 0 : -recipe.getInput().length)); + if (item instanceof AContainer) { + AContainer machine = (AContainer) item; + + if (machine.getMachineIdentifier().equals("ELECTRIC_SMELTERY")) { + List recipes = machine.getMachineRecipes(); + Collections.sort(recipes, Comparator.comparingInt(recipe -> recipe == null ? 0 : -recipe.getInput().length)); + } } } } @@ -254,8 +258,12 @@ public final class PostSetup { private static void registerMachineRecipe(String machine, int seconds, ItemStack[] input, ItemStack[] output) { for (SlimefunItem item : SlimefunPlugin.getRegistry().getEnabledSlimefunItems()) { - if (item instanceof AContainer && ((AContainer) item).getMachineIdentifier().equals(machine)) { - ((AContainer) item).registerRecipe(seconds, input, output); + if (item instanceof AContainer) { + AContainer container = (AContainer) item; + + if (container.getMachineIdentifier().equals(machine)) { + container.registerRecipe(seconds, input, output); + } } } } 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 index bb9ebdf7c..10ff6de68 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/ResearchSetup.java @@ -272,7 +272,7 @@ public final class ResearchSetup { } private static void register(String key, int id, String name, int defaultCost, ItemStack... items) { - Research research = new Research(new NamespacedKey(SlimefunPlugin.instance, key), id, name, defaultCost); + Research research = new Research(new NamespacedKey(SlimefunPlugin.instance(), key), id, name, defaultCost); for (ItemStack item : items) { SlimefunItem sfItem = SlimefunItem.getByItem(item); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java index 99ca3d436..073158958 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java @@ -57,7 +57,6 @@ import io.github.thebusybiscuit.slimefun4.implementation.items.cargo.CargoManage import io.github.thebusybiscuit.slimefun4.implementation.items.cargo.CargoOutputNode; import io.github.thebusybiscuit.slimefun4.implementation.items.cargo.ReactorAccessPort; import io.github.thebusybiscuit.slimefun4.implementation.items.cargo.TrashCan; -import io.github.thebusybiscuit.slimefun4.implementation.items.electric.BasicCircuitBoard; import io.github.thebusybiscuit.slimefun4.implementation.items.electric.Capacitor; import io.github.thebusybiscuit.slimefun4.implementation.items.electric.EnergyRegulator; import io.github.thebusybiscuit.slimefun4.implementation.items.electric.gadgets.JetBoots; @@ -140,6 +139,8 @@ import io.github.thebusybiscuit.slimefun4.implementation.items.medical.Medicine; import io.github.thebusybiscuit.slimefun4.implementation.items.medical.Rag; import io.github.thebusybiscuit.slimefun4.implementation.items.medical.Splint; import io.github.thebusybiscuit.slimefun4.implementation.items.medical.Vitamins; +import io.github.thebusybiscuit.slimefun4.implementation.items.misc.BasicCircuitBoard; +import io.github.thebusybiscuit.slimefun4.implementation.items.misc.CoolantCell; import io.github.thebusybiscuit.slimefun4.implementation.items.misc.OrganicFertilizer; import io.github.thebusybiscuit.slimefun4.implementation.items.misc.OrganicFood; import io.github.thebusybiscuit.slimefun4.implementation.items.multiblocks.ArmorForge; @@ -1117,7 +1118,7 @@ public final class SlimefunItemSetup { new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.AIR_RUNE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.EARTH_RUNE, SlimefunItems.NECROTIC_SKULL, SlimefunItems.FIRE_RUNE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.WATER_RUNE, SlimefunItems.ENDER_LUMP_3}) .register(plugin); - new SoulboundBackpack(36, categories.usefulItems, SlimefunItems.BOUND_BACKPACK, RecipeType.MAGIC_WORKBENCH, + new SoulboundBackpack(36, categories.magicalGadgets, SlimefunItems.BOUND_BACKPACK, RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.WOVEN_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2}) .register(plugin); @@ -3042,12 +3043,13 @@ public final class SlimefunItemSetup { }.register(plugin); - new SlimefunItem(categories.technicalComponents, SlimefunItems.REACTOR_COOLANT_CELL, RecipeType.FREEZER, + new CoolantCell(categories.technicalComponents, SlimefunItems.REACTOR_COOLANT_CELL, RecipeType.FREEZER, new ItemStack[] {new ItemStack(Material.BLUE_ICE), null, null, null, null, null, null, null, null}) .register(plugin); - new SlimefunItem(categories.technicalComponents, SlimefunItems.NETHER_ICE_COOLANT_CELL, RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.ENRICHED_NETHER_ICE, null, null, null, null, null, null, null, null}) + new CoolantCell(categories.technicalComponents, SlimefunItems.NETHER_ICE_COOLANT_CELL, RecipeType.HEATED_PRESSURE_CHAMBER, + new ItemStack[] {SlimefunItems.ENRICHED_NETHER_ICE, null, null, null, null, null, null, null, null}, + new SlimefunItemStack(SlimefunItems.NETHER_ICE_COOLANT_CELL, 4)) .register(plugin); new RadioactiveItem(categories.resources, Radioactivity.HIGH, SlimefunItems.NEPTUNIUM, RecipeType.NUCLEAR_REACTOR, diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/AncientAltarTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/AncientAltarTask.java index 29cc8a153..837a34a5f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/AncientAltarTask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/AncientAltarTask.java @@ -129,7 +129,7 @@ public class AncientAltarTask implements Runnable { itemLock.remove(item); item.remove(); - item.removeMetadata("no_pickup", SlimefunPlugin.instance); + item.removeMetadata("no_pickup", SlimefunPlugin.instance()); } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/PlayerTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/PlayerTask.java index 0a77c0f14..7f9f49fcc 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/PlayerTask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/PlayerTask.java @@ -19,11 +19,11 @@ abstract class PlayerTask implements Runnable { } public void schedule(long delay) { - setID(Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, this, delay)); + setID(Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance(), this, delay)); } public void scheduleRepeating(long delay, long interval) { - setID(Bukkit.getScheduler().scheduleSyncRepeatingTask(SlimefunPlugin.instance, this, delay, interval)); + setID(Bukkit.getScheduler().scheduleSyncRepeatingTask(SlimefunPlugin.instance(), this, delay, interval)); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/TickerTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/TickerTask.java index e13d9c236..722dd77a6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/TickerTask.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/tasks/TickerTask.java @@ -150,7 +150,7 @@ public class TickerTask implements Runnable { bugs.remove(position); BlockStorage._integrated_removeBlockInfo(l, true); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> l.getBlock().setType(Material.AIR)); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance(), () -> l.getBlock().setType(Material.AIR)); } else { bugs.put(position, errors); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChatUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChatUtils.java index f1c5725bf..143b7b3f5 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChatUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/ChatUtils.java @@ -48,7 +48,7 @@ public final class ChatUtils { } public static void awaitInput(Player p, Consumer callback) { - ChatInput.waitForPlayer(SlimefunPlugin.instance, p, callback); + ChatInput.waitForPlayer(SlimefunPlugin.instance(), p, callback); } /** diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index 99e233fab..e73acbb3c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -45,7 +45,7 @@ public final class SlimefunUtils { private static final String EMERALDENCHANTS_LORE = ChatColor.YELLOW.toString() + ChatColor.YELLOW.toString() + ChatColor.GRAY.toString(); private static final String NO_PICKUP_METADATA = "no_pickup"; - private static final NamespacedKey SOULBOUND_KEY = new NamespacedKey(SlimefunPlugin.instance, "soulbound"); + private static final NamespacedKey SOULBOUND_KEY = new NamespacedKey(SlimefunPlugin.instance(), "soulbound"); private static final String SOULBOUND_LORE = ChatColor.GRAY + "Soulbound"; private SlimefunUtils() {} @@ -72,7 +72,7 @@ public final class SlimefunUtils { * The context in which this {@link Item} was flagged */ public static void markAsNoPickup(Item item, String context) { - item.setMetadata(NO_PICKUP_METADATA, new FixedMetadataValue(SlimefunPlugin.instance, context)); + item.setMetadata(NO_PICKUP_METADATA, new FixedMetadataValue(SlimefunPlugin.instance(), context)); } /** @@ -188,7 +188,7 @@ public final class SlimefunUtils { * @return An {@link ItemStack} with this Head texture */ public static ItemStack getCustomHead(String texture) { - if (SlimefunPlugin.instance == null) { + if (SlimefunPlugin.instance() == null) { throw new PrematureCodeException("You cannot instantiate a custom head before Slimefun was loaded."); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index 646bb5c01..fab7fceed 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -28,34 +28,34 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class RecipeType implements Keyed { - public static final RecipeType MULTIBLOCK = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "multiblock"), new CustomItem(Material.BRICKS, "&bMultiBlock", "", "&a&oBuild it in the World")); - public static final RecipeType ARMOR_FORGE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "armor_forge"), SlimefunItems.ARMOR_FORGE, "", "&a&oCraft it in an Armor Forge"); - public static final RecipeType GRIND_STONE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "grind_stone"), SlimefunItems.GRIND_STONE, "", "&a&oGrind it using the Grind Stone"); - public static final RecipeType SMELTERY = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "smeltery"), SlimefunItems.SMELTERY, "", "&a&oSmelt it using a Smeltery"); - public static final RecipeType ORE_CRUSHER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "ore_crusher"), SlimefunItems.ORE_CRUSHER, "", "&a&oCrush it using the Ore Crusher"); - public static final RecipeType GOLD_PAN = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "gold_pan"), SlimefunItems.GOLD_PAN, "", "&a&oUse a Gold Pan on Gravel to obtain this Item"); - public static final RecipeType COMPRESSOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "compressor"), SlimefunItems.COMPRESSOR, "", "&a&oCompress it using the Compressor"); - public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "pressure_chamber"), SlimefunItems.PRESSURE_CHAMBER, "", "&a&oCompress it using the Pressure Chamber"); - public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "magic_workbench"), SlimefunItems.MAGIC_WORKBENCH, "", "&a&oCraft it in a Magic Workbench"); - public static final RecipeType ORE_WASHER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "ore_washer"), SlimefunItems.ORE_WASHER, "", "&a&oWash it in an Ore Washer"); - public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "enhanced_crafting_table"), SlimefunItems.ENHANCED_CRAFTING_TABLE, "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."); - public static final RecipeType JUICER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "juicer"), SlimefunItems.JUICER, "", "&a&oUsed for Juice Creation"); + public static final RecipeType MULTIBLOCK = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "multiblock"), new CustomItem(Material.BRICKS, "&bMultiBlock", "", "&a&oBuild it in the World")); + public static final RecipeType ARMOR_FORGE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "armor_forge"), SlimefunItems.ARMOR_FORGE, "", "&a&oCraft it in an Armor Forge"); + public static final RecipeType GRIND_STONE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "grind_stone"), SlimefunItems.GRIND_STONE, "", "&a&oGrind it using the Grind Stone"); + public static final RecipeType SMELTERY = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "smeltery"), SlimefunItems.SMELTERY, "", "&a&oSmelt it using a Smeltery"); + public static final RecipeType ORE_CRUSHER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "ore_crusher"), SlimefunItems.ORE_CRUSHER, "", "&a&oCrush it using the Ore Crusher"); + public static final RecipeType GOLD_PAN = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "gold_pan"), SlimefunItems.GOLD_PAN, "", "&a&oUse a Gold Pan on Gravel to obtain this Item"); + public static final RecipeType COMPRESSOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "compressor"), SlimefunItems.COMPRESSOR, "", "&a&oCompress it using the Compressor"); + public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "pressure_chamber"), SlimefunItems.PRESSURE_CHAMBER, "", "&a&oCompress it using the Pressure Chamber"); + public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "magic_workbench"), SlimefunItems.MAGIC_WORKBENCH, "", "&a&oCraft it in a Magic Workbench"); + public static final RecipeType ORE_WASHER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "ore_washer"), SlimefunItems.ORE_WASHER, "", "&a&oWash it in an Ore Washer"); + public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "enhanced_crafting_table"), SlimefunItems.ENHANCED_CRAFTING_TABLE, "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."); + public static final RecipeType JUICER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "juicer"), SlimefunItems.JUICER, "", "&a&oUsed for Juice Creation"); - public static final RecipeType ANCIENT_ALTAR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "ancient_altar"), SlimefunItems.ANCIENT_ALTAR, (recipe, output) -> { + public static final RecipeType ANCIENT_ALTAR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "ancient_altar"), SlimefunItems.ANCIENT_ALTAR, (recipe, output) -> { AltarRecipe altarRecipe = new AltarRecipe(Arrays.asList(recipe), output); SlimefunPlugin.getAncientAltarListener().getRecipes().add(altarRecipe); }); - public static final RecipeType MOB_DROP = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "mob_drop"), new CustomItem(Material.IRON_SWORD, "&bMob Drop"), RecipeType::registerMobDrop, "", "&rKill the specified Mob to obtain this Item"); + public static final RecipeType MOB_DROP = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "mob_drop"), new CustomItem(Material.IRON_SWORD, "&bMob Drop"), RecipeType::registerMobDrop, "", "&rKill the specified Mob to obtain this Item"); - public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "heated_pressure_chamber"), SlimefunItems.HEATED_PRESSURE_CHAMBER); - public static final RecipeType FOOD_FABRICATOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "food_fabricator"), SlimefunItems.FOOD_FABRICATOR); - public static final RecipeType FOOD_COMPOSTER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "food_composter"), SlimefunItems.FOOD_COMPOSTER); - public static final RecipeType FREEZER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "freezer"), SlimefunItems.FREEZER); - public static final RecipeType REFINERY = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "refinery"), SlimefunItems.REFINERY); + public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "heated_pressure_chamber"), SlimefunItems.HEATED_PRESSURE_CHAMBER); + public static final RecipeType FOOD_FABRICATOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "food_fabricator"), SlimefunItems.FOOD_FABRICATOR); + public static final RecipeType FOOD_COMPOSTER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "food_composter"), SlimefunItems.FOOD_COMPOSTER); + public static final RecipeType FREEZER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "freezer"), SlimefunItems.FREEZER); + public static final RecipeType REFINERY = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "refinery"), SlimefunItems.REFINERY); - public static final RecipeType GEO_MINER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "geo_miner"), SlimefunItems.GEO_MINER); - public static final RecipeType NUCLEAR_REACTOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance, "nuclear_reactor"), SlimefunItems.NUCLEAR_REACTOR); + public static final RecipeType GEO_MINER = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "geo_miner"), SlimefunItems.GEO_MINER); + public static final RecipeType NUCLEAR_REACTOR = new RecipeType(new NamespacedKey(SlimefunPlugin.instance(), "nuclear_reactor"), SlimefunItems.NUCLEAR_REACTOR); public static final RecipeType NULL = new RecipeType(); @@ -67,7 +67,7 @@ public class RecipeType implements Keyed { private RecipeType() { this.item = null; this.machine = ""; - this.key = new NamespacedKey(SlimefunPlugin.instance, "null"); + this.key = new NamespacedKey(SlimefunPlugin.instance(), "null"); } public RecipeType(ItemStack item, String machine) { @@ -75,10 +75,10 @@ public class RecipeType implements Keyed { this.machine = machine; if (machine.length() > 0) { - this.key = new NamespacedKey(SlimefunPlugin.instance, machine.toLowerCase(Locale.ROOT)); + this.key = new NamespacedKey(SlimefunPlugin.instance(), machine.toLowerCase(Locale.ROOT)); } else { - this.key = new NamespacedKey(SlimefunPlugin.instance, "unknown"); + this.key = new NamespacedKey(SlimefunPlugin.instance(), "unknown"); } } @@ -149,22 +149,27 @@ public class RecipeType implements Keyed { SlimefunPlugin.getRegistry().getMobDrops().put(entity, dropping); } - @Deprecated public static List getRecipeInputs(MultiBlockMachine machine) { - if (machine == null) return new ArrayList<>(); + if (machine == null) { + return new ArrayList<>(); + } + List recipes = machine.getRecipes(); List convertible = new ArrayList<>(); for (int i = 0; i < recipes.size(); i++) { - if (i % 2 == 0) convertible.add(recipes.get(i)[0]); + if (i % 2 == 0) { + convertible.add(recipes.get(i)[0]); + } } return convertible; } - @Deprecated public static List getRecipeInputList(MultiBlockMachine machine) { - if (machine == null) return new ArrayList<>(); + if (machine == null) { + return new ArrayList<>(); + } List recipes = machine.getRecipes(); List convertible = new ArrayList<>(); @@ -190,13 +195,11 @@ public class RecipeType implements Keyed { return convertible; } - @Deprecated public static ItemStack getRecipeOutput(MultiBlockMachine machine, ItemStack input) { List recipes = machine.getRecipes(); return recipes.get(((getRecipeInputs(machine).indexOf(input) * 2) + 1))[0].clone(); } - @Deprecated public static ItemStack getRecipeOutputList(MultiBlockMachine machine, ItemStack[] input) { List recipes = machine.getRecipes(); return recipes.get((recipes.indexOf(input) + 1))[0]; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargableItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargableItem.java deleted file mode 100644 index 2d1bddbbb..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargableItem.java +++ /dev/null @@ -1,31 +0,0 @@ -package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; - -import org.bukkit.inventory.ItemStack; - -import io.github.thebusybiscuit.slimefun4.core.attributes.Rechargeable; -import me.mrCookieSlime.Slimefun.Lists.RecipeType; -import me.mrCookieSlime.Slimefun.Objects.Category; -import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy; - -/** - * This class is deprecated. - * - * @deprecated Please implement the {@link Rechargeable} interface from now on. - * - * @author TheBusyBiscuit - * - */ -@Deprecated -public class ChargableItem extends SlimefunItem implements Rechargeable { - - public ChargableItem(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); - } - - @Override - public float getMaxItemCharge(ItemStack item) { - return ItemEnergy.getMaxEnergy(item); - } - -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java index 690b13c58..f90416c80 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java @@ -2,29 +2,19 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; import org.bukkit.inventory.ItemStack; -import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; 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; /** - * This is basically a quickstart class for your very first {@link SlimefunItem}. - * This class easily allows you to add one {@link ItemHandler} to your {@link SlimefunItem}. - * - * You could use an {@link ItemUseHandler} for example to give your {@link SlimefunItem} - * very basic right-click functionalities. - * - * @author TheBusyBiscuit - * - * @see ItemHandler - * @see ItemUseHandler - * @see SlimefunItem + * @deprecated Moved to {@link io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem} * * @param - * The Type of {@link ItemHandler} to add to this {@link SlimefunItem} + * deprecated. */ -public abstract class SimpleSlimefunItem extends SlimefunItem { +@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); @@ -34,16 +24,4 @@ public abstract class SimpleSlimefunItem extends Slimefun super(category, item, recipeType, recipe, recipeOutput); } - @Override - public void preRegister() { - addItemHandler(getItemHandler()); - } - - /** - * This returns the {@link ItemHandler} that will be added to this {@link SlimefunItem}. - * - * @return The {@link ItemHandler} that should be added to this {@link SlimefunItem} - */ - public abstract T getItemHandler(); - } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 32f22f887..4877a3161 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -24,6 +24,7 @@ import io.github.thebusybiscuit.slimefun4.api.exceptions.IdConflictException; import io.github.thebusybiscuit.slimefun4.api.exceptions.IncompatibleItemHandlerException; import io.github.thebusybiscuit.slimefun4.api.exceptions.MissingDependencyException; import io.github.thebusybiscuit.slimefun4.api.exceptions.UnregisteredItemException; +import io.github.thebusybiscuit.slimefun4.api.exceptions.WrongItemStackException; import io.github.thebusybiscuit.slimefun4.api.items.ItemSetting; import io.github.thebusybiscuit.slimefun4.api.items.ItemState; import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent; @@ -409,6 +410,10 @@ public class SlimefunItem implements Placeable { state = ItemState.DISABLED; } + if (item instanceof SlimefunItemStack && isItemStackImmutable()) { + ((SlimefunItemStack) item).lock(); + } + postRegister(); if (SlimefunPlugin.getRegistry().isAutoLoadingEnabled() && state == ItemState.ENABLED) { @@ -442,6 +447,20 @@ public class SlimefunItem implements Placeable { } } + /** + * This method returns whether the original {@link SlimefunItemStack} of this + * {@link SlimefunItem} is immutable. + * + * If true is returned, then any changes to the original {@link SlimefunItemStack} + * will be rejected with a {@link WrongItemStackException}. + * This ensures integrity so developers don't accidentally damage the wrong {@link ItemStack}. + * + * @return Whether the original {@link SlimefunItemStack} is immutable. + */ + protected boolean isItemStackImmutable() { + return true; + } + /** * This method checks recursively for all {@link Class} parents to look for any {@link Deprecated} * elements. diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java b/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java index 97b5c1b65..0b88f19dc 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/Slimefun.java @@ -29,7 +29,7 @@ public final class Slimefun { private Slimefun() {} public static Logger getLogger() { - return SlimefunPlugin.instance.getLogger(); + return SlimefunPlugin.instance().getLogger(); } /** @@ -231,11 +231,11 @@ public final class Slimefun { return null; } - if (SlimefunPlugin.instance == null || !SlimefunPlugin.instance.isEnabled()) { + if (SlimefunPlugin.instance() == null || !SlimefunPlugin.instance().isEnabled()) { return null; } - return Bukkit.getScheduler().runTask(SlimefunPlugin.instance, r); + return Bukkit.getScheduler().runTask(SlimefunPlugin.instance(), r); } public static BukkitTask runSync(Runnable r, long delay) { @@ -244,10 +244,10 @@ public final class Slimefun { return null; } - if (SlimefunPlugin.instance == null || !SlimefunPlugin.instance.isEnabled()) { + if (SlimefunPlugin.instance() == null || !SlimefunPlugin.instance().isEnabled()) { return null; } - return Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, r, delay); + return Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance(), r, delay); } } \ No newline at end of file diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java b/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java index 6ea97ce8f..22c1ebd9a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/SlimefunItemStack.java @@ -24,6 +24,7 @@ import io.github.thebusybiscuit.cscorelib2.item.ImmutableItemMeta; import io.github.thebusybiscuit.cscorelib2.skull.SkullItem; import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion; import io.github.thebusybiscuit.slimefun4.api.exceptions.PrematureCodeException; +import io.github.thebusybiscuit.slimefun4.api.exceptions.WrongItemStackException; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.HeadTexture; import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; @@ -34,6 +35,7 @@ public class SlimefunItemStack extends CustomItem { private String id; private ImmutableItemMeta immutableMeta; + private boolean locked = false; private String texture = null; public SlimefunItemStack(String id, Material type, String name, String... lore) { @@ -148,7 +150,7 @@ public class SlimefunItemStack extends CustomItem { Validate.notNull(id, "The Item id must never be null!"); Validate.isTrue(id.equals(id.toUpperCase(Locale.ROOT)), "Slimefun Item Ids must be uppercase! (e.g. 'MY_ITEM_ID')"); - if (SlimefunPlugin.instance == null) { + if (SlimefunPlugin.instance() == null) { throw new PrematureCodeException("A SlimefunItemStack must never be be created before your Plugin was enabled."); } @@ -206,11 +208,34 @@ public class SlimefunItemStack extends CustomItem { @Override public boolean setItemMeta(ItemMeta meta) { + validate(); immutableMeta = new ImmutableItemMeta(meta); return super.setItemMeta(meta); } + @Override + public void setType(Material type) { + validate(); + super.setType(type); + } + + @Override + public void setAmount(int amount) { + validate(); + super.setAmount(amount); + } + + private void validate() { + if (locked) { + throw new WrongItemStackException(id + " is not mutable."); + } + } + + public void lock() { + locked = true; + } + @Override public ItemStack clone() { return new SlimefunItemStack(id, this); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java b/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java index 8dd461328..8558ca0c8 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java @@ -46,10 +46,6 @@ public final class ChargableBlock { } } - public static void setCharge(Block b, int charge) { - setCharge(b.getLocation(), charge); - } - public static void setCharge(Location l, int charge) { if (charge < 0) { charge = 0; @@ -62,7 +58,9 @@ public final class ChargableBlock { } } - BlockStorage.addBlockInfo(l, KEY, String.valueOf(charge), false); + if (charge != getCharge(l)) { + BlockStorage.addBlockInfo(l, KEY, String.valueOf(charge), false); + } } public static void setUnsafeCharge(Location l, int charge, boolean updateTexture) { @@ -96,15 +94,15 @@ public final class ChargableBlock { if (availableSpace > 0 && addedCharge > 0) { if (availableSpace > addedCharge) { charge += addedCharge; - setCharge(l, charge); rest = 0; } else { rest = addedCharge - availableSpace; charge = capacity; - setCharge(l, charge); } + setCharge(l, charge); + if (SlimefunPlugin.getRegistry().getEnergyCapacitors().contains(id)) { updateCapacitor(l, charge, capacity); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ItemEnergy.java b/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ItemEnergy.java deleted file mode 100644 index a668d0ad1..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/energy/ItemEnergy.java +++ /dev/null @@ -1,118 +0,0 @@ -package me.mrCookieSlime.Slimefun.api.energy; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.List; - -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; -import io.github.thebusybiscuit.slimefun4.core.attributes.Rechargeable; -import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; - -/** - * @deprecated Please implement {@link Rechargeable} on your {@link SlimefunItem} instead. - * - * @author TheBusyBiscuit - * - */ -@Deprecated -public final class ItemEnergy { - - // We should find a replacement for this class - // Perhaps we could also use PersistentData here too? - private ItemEnergy() {} - - // "&c&o&8\u21E8 &e\u26A1 &70 / 50 J" - - public static float getStoredEnergy(ItemStack item) { - if (item == null || item.getType() == Material.AIR || item.getAmount() < 1) return 0F; - if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F; - - for (String line : item.getItemMeta().getLore()) { - if (line.startsWith(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) { - return Float.parseFloat(PatternUtils.SLASH_SEPARATOR.split(line)[0].replace(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7"), "")); - } - } - - return 0F; - } - - public static float getMaxEnergy(ItemStack item) { - if (item == null || item.getType() == Material.AIR || item.getAmount() < 1) return 0F; - if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F; - - for (String line : item.getItemMeta().getLore()) { - if (line.startsWith(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) { - return Float.parseFloat(PatternUtils.SLASH_SEPARATOR.split(line)[1].replace(" J", "")); - } - } - - return 0F; - } - - public static float addStoredEnergy(ItemStack item, float energy) { - if (item == null || item.getType() == Material.AIR || item.getAmount() < 1) return 0F; - if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0; - - float rest = 0F; - float capacity = getMaxEnergy(item); - - if ((int) capacity == 0) { - return rest; - } - - float stored = getStoredEnergy(item); - - if (stored + energy > capacity) { - rest = (stored + energy) - capacity; - stored = capacity; - } - else if (stored + energy < 0) { - stored = 0F; - } - else { - stored = stored + energy; - } - - List lore = item.getItemMeta().getLore(); - - int index = -1; - for (int i = 0; i < lore.size(); i++) { - String line = lore.get(i); - - if (line.startsWith(ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) { - index = i; - break; - } - } - - BigDecimal decimal = BigDecimal.valueOf(stored).setScale(2, RoundingMode.HALF_UP); - - lore.set(index, ChatColors.color("&c&o&8\u21E8 &e\u26A1 &7") + decimal.floatValue() + " / " + capacity + " J"); - - ItemMeta im = item.getItemMeta(); - im.setLore(lore); - item.setItemMeta(im); - return rest; - } - - public static ItemStack chargeItem(ItemStack item, float energy) { - addStoredEnergy(item, energy); - return item; - } - - public static void chargeInventory(Player p, float energy) { - p.getInventory().setItemInMainHand(chargeItem(p.getInventory().getItemInMainHand(), energy)); - p.getInventory().setItemInOffHand(chargeItem(p.getInventory().getItemInOffHand(), energy)); - p.getInventory().setHelmet(chargeItem(p.getInventory().getHelmet(), energy)); - p.getInventory().setChestplate(chargeItem(p.getInventory().getChestplate(), energy)); - p.getInventory().setLeggings(chargeItem(p.getInventory().getLeggings(), energy)); - p.getInventory().setBoots(chargeItem(p.getInventory().getBoots(), energy)); - } - -} diff --git a/src/main/resources/languages/categories_id.yml b/src/main/resources/languages/categories_id.yml index d6a335dc6..447af2e93 100644 --- a/src/main/resources/languages/categories_id.yml +++ b/src/main/resources/languages/categories_id.yml @@ -2,10 +2,10 @@ slimefun: weapons: Senjata tools: Peralatan - items: Alat Penting + items: Barang yang Berguna food: Makanan basic_machines: Mesin Dasar - electricity: Energi Dan Listrik + electricity: Energi dan Listrik gps: Mesin - Mesin GPS armor: Baju Zirah magical_items: Benda Sihir @@ -13,13 +13,14 @@ slimefun: misc: Lain - Lain technical_gadgets: Alat Teknis resources: Sumber Daya - cargo: Pengatur Muatan + cargo: Manajemen Kargo tech_misc: Komponen Teknis magical_armor: Pakaian Sihir talismans: Jimat (Tingkat I) ender_talismans: Jimat Ender (Tingkat II) christmas: Natal (Desember) valentines_day: Hari Valentine (14 Februari) - easter: Easter (April) + easter: Paskah (April) birthday: Ulang Tahun TheBusyBiscuit (26 Oktober) halloween: Halloween (31 Oktober) + androids: Mesin Berprogram diff --git a/src/main/resources/languages/categories_pl.yml b/src/main/resources/languages/categories_pl.yml index 503164073..47bda5b42 100644 --- a/src/main/resources/languages/categories_pl.yml +++ b/src/main/resources/languages/categories_pl.yml @@ -23,3 +23,4 @@ slimefun: easter: Wielkanoc (Kwiecień) birthday: Urodziny TheBusyBiscuit (26 Października) halloween: Halloween (31 Października) + androids: Programowalne Androidy diff --git a/src/main/resources/languages/messages_id.yml b/src/main/resources/languages/messages_id.yml new file mode 100644 index 000000000..033a0c516 --- /dev/null +++ b/src/main/resources/languages/messages_id.yml @@ -0,0 +1,309 @@ +--- +commands: + help: Menampilkan layar bantuan ini + cheat: Mengijinkan kamu untuk mendapatkan item instan + give: Berikan seseorang Item Slimefun + guide: Berikan diri kamu Panduan Slimefun + timings: Informasi Lag tentang Servermu + teleporter: Lihat Waypoint Pemain lain + versions: Daftar Addons Yang Terpasang + search: Cari panduan anda untuk istilah yang diberikan + open_guide: Membuka Panduan Slimefun Tanpa Buku + stats: Lihat Statistik Seorang Pemain + research: + description: Membuka/Atur Ulang Penelitian Seorang Pemain + reset: "&cAnda Telah Mengatur Ulang Penelitian %player%" + reset-target: "&cPenelitian Anda Telah Di Atur Ulang" + backpack: + description: Ambil salinan tas yang ada + invalid-id: "&4 Id harus berupa angka nol hingga negatif!" + player-never-joined: "&4Tidak ada pemain dengan nama itu" + backpack-does-not-exist: "&4Ransel yang ditentukan tidak ada!" + restored-backpack-given: "&a Backpack Anda telah di tambahkan ke inventory Anda!" +guide: + search: + message: "&bApa Yang Anda Ingi Cari ?" + name: "&7Cari..." + tooltip: "&bKlik untuk mencari sebuah barang" + inventory: 'Hasil pencarian: %item%' + cheat: + no-multiblocks: "&4Anda Tidak Bisa Bermain Curang, Anda Harus Membuatnya!" + languages: + updated: "&aBahasa Anda Telah Berhasil Di Ubah Menjadi: &b%lang%" + translations: + name: "&aAda yang kurang?" + lore: Klik untuk menambahkan terjemahan anda + select: Klik untuk memilih bahasa ini + select-default: Klik untuk menggunakan bahasa standar server + selected-language: 'Yang sedang dipilih:' + title: + main: Panduan Slimefun + settings: Pengaturan & Informasi + languages: Pilih Bahasa Yang Anda Inginkan + credits: Para Kontributor Slimefun4 + wiki: Slimefun4 Wiki + addons: Addons untuk Slimefun4 + bugs: Laporkan masalah + source: Kode sumber + credits: + commit: Melakukan + roles: + developer: "&6Para Pengembang" + wiki: "&3Pengedit Wiki" + resourcepack: "&cArtis Resourcepack" + translator: "&9Penerjemah" + profile-link: Klik untuk mengunjungi profil mereka di GitHub + pages: + previous: Halaman sebelumnya + next: Halaman berikutnya + tooltips: + open-category: Klik untuk membuka + versions-notice: Melaporkan kesalahan program sangatlah penting! + wiki: Lihat benda ini di wiki resmi Slimefun + recipes: + machine: Resep yang di buat dalam mesin ini + miner: Sumber daya yang dapat diambil dengan penambang ini + generator: Bahan bakar yang dapat digunakan + gold-pan: Sumber daya yang dapat anda ambil + back: + title: Kembali + guide: Kembali ke panduan Slimefun + settings: Kemabali ke panel pengaturan + locked: TERKUNCI + locked-category: + - Untuk membuka kategori ini anda + - harus membuka semua barang dari + - kategori berikut +messages: + not-researched: "&4Anda Tidak Memiliki Cukup Pengehatuan Untuk Mengetahui Ini" + not-enough-xp: "&4Anda Tidak Memiliki Cukup XP untuk Membuka Ini" + unlocked: '&bAnda Telah Membuka &7"%research%"' + only-players: "&4Perintah Ini Hanya Untuk Para Pemain" + unknown-player: "&4Pemain Tidak Diketahui: &c%player%" + no-permission: "&4Anda Tidak Memiliki Izin Untuk Ini" + usage: "&4Penggunaan: &c%usage%" + not-online: "&4%player% &cTidak Sedang Bermain Disini!" + not-valid-item: "&4%item% &cBenda Ini Tidak sah" + not-valid-amount: "&4%amount% &cJumlah Ini Salah : Harus Lebih Tinggi Dari 0!" + given-item: '&bAnda Telah Diberikan &a%amount% &7"%item%&7"' + give-item: '&bAnda Telah Memberi %player% &a%amount% &7"%item%&7"' + not-valid-research: "&4%research% &cIni Bukan Penelitian Yang Benar!" + give-research: '&bAnda Telah Memberi %player% Penelitian &7"%research%&7"' + hungry: "&cAnda Terlalu Lapar Untuk Ini " + mode-change: "&b%device% Mode Telah Berubah Menjadi: &9%mode%" + disabled-in-world: "&4&lBarang Ini Telah Dilarang Di Dunia Ini" + disabled-item: "&4&lBenda Ini Telah Dinonakrifkan! Bagaimana Anda Mendapatkannya?" + no-tome-yourself: "&cKamu Tidak Bisa Menggunakan &4Tome Of Knowledge &cUntuk Diri + Anda Sendiri..." + multimeter: "&bEnergi Yang Telah Tersimpan: &3%stored% &b/ &3%capacity%" + talisman: + anvil: "&a&oJimat Anda Mencegah Barang Mu Agar Tidak Hancur" + miner: "&a&oJimat Anda Baru Saja Melipat Gandakan Penghasilan Mu" + hunter: "&a&oJimat Anda Baru Saja Melipat Gandakan Penghasilan Mu" + lava: "&a&oJimat Mu Menyelamatkan Kamu Dari kebakar Hingga Tewas" + water: "&a&oJimat Anda Menyelematkan Anda Dari Tenggelam" + angel: "&a&oJimat Anda Menyelematkan Anda Dari Jatuh Dari Ketinggian" + fire: "&a&oJimat Anda Menyelematkan Anda Dari Terbakar Hingga Mati" + magician: "&a&oJimat Anda Memberikan Pemikat Tambahan" + traveller: "&a&oJimat Anda Memberikan Kecepatan Tambahan" + warrior: "&a&oJimat Anda Memberikan Kekuatan Tambahan Untuk Sementara" + knight: "&a&oJimat Anda Memberikan Regenerasi Selama 5 Detik" + whirlwind: "&a&oJimat Anda Memantulkan Proyektil" + wizard: "&a&oJimat Anda Memberikan Keberuntungan Lebih Namun Mungkin Mengurangi + Pemikat Lain" + soulbound-rune: + fail: "&cAnda hanya dapat mengikat satu benda ke jiwa anda dalam waktu yang bersamaan." + success: "&aAnda Telah Berhasil Mengikat Benda Ini Ke Jiwa Anda! Benda Ini Akan + Tetap Bersama Anda Walaupun Setelah Kematian" + research: + start: "&7Roh Kuno Telah Membisikan Pesan Misterius Ke Telinga Anda!" + progress: "&7Anda Mulai Ingin Tahu Tentang &b%research% &e(%progress%)" + fire-extinguish: "&7Anda Telah Memadamkan Diri Anda Sendiri" + cannot-place: "&cAnda Tidak Bisa Menaruh Blok Disini!" + no-pvp: "&cAnda Tidak Bisa PvP Disini!" + radiation: "&4Anda Tidak Terlindungi Dari Benda Radioaktif! &cSegera Letakan Benda + Tersebut Atau Gunakan Pakaian Hazmat!" + opening-guide: "&bMembuka Panduan, Mungkin Membutuhkan Waktu Sebentar..." + opening-backpack: "&bMembuka tas, mungkin membutuhkan waktu sebentar..." + no-iron-golem-heal: "&cIni bukan sebuah Batang Besi. Anda tidak bisa munggunakan + ini untuk menyembuhkan Iron Golems!" + link-prompt: "&eKlik disini:" + diet-cookie: "&eAnda mulai merasa sangat ringan..." + fortune-cookie: + - "&7Tolong saya, Saya terjebak di pabrik kue keberuntungan!" + - "&7Anda akan mati besok... dibunuh oleh Creeper" + - "&7Suatu saat akan ada hal buruk dalam hidupmu!!!" + - "&7Minggu depan anda akan memperhatiakn ini bukan di dunia nyata, kamu dalam permainan + komputer" + - "&7Kue ini akan berubah menjadi enak dalam beberapa detik" + - '&7Kalimat terakhir yang akan anda dengar adalah "MEMUSNAHKAN!!!"' + - "&7Apapun yang anda lakukan, jangan memeluk Creeper... saya sudah mencobanya. + Terasa nyaman, tapi itu tidak setimpal." + - "&742. Jawabannya adalah 42" + - "&7AHari yang membosankan akan menjauhkan anda dari masalah" + - "&7Jangan pernah menggali lurus kebawah!" + - "&7Ini hanya luka Luar!" + - "& 7Selalu lihat sisi terang hidup!" + - "&7Yang ini sebenarnya biskuit dan bukan kue" + - "&7Neon signs are LIT!" +machines: + pattern-not-found: "&eMaaf, Saya tidak mengenali resep ini. Letakan benda pada dispenser + \ sesuai dengan pola." + unknown-material: "&eMaaf, Saya tidak mengenali benda yang ada di dalam dispenser. + Masukan benda yang saya ketahui." + wrong-item: "&eMaaf, Saya tidak mengenali barang yang anda klik terhadap saya. Cek + kembali resep dan lihat apa yang dapat anda gunakan." + full-inventory: "&eMaaf, Penyimpanan saya sudah penuh!" + in-use: "&cPenyimpanan blok ini sedang dibuka oleh pemain lain." + ignition-chamber-no-flint: '&cRuang perapian kehabisan "flint and steel"' + ANCIENT_ALTAR: + not-enough-pedestals: "&4Altar ini tidak dikelilingi dengan tumpuan yang cukup&c(%pedestals% + / 8)" + unknown-catalyst: "&4Katalisator tidak diketahui! &cGunakan resep yang benar!" + unknown-recipe: "&4Resep tidak diketahui! &cGunakan Pola yang benar!" + ANCIENT_PEDESTAL: + obstructed: "&4Tumpuan terhalangi! &Hancurkan semua yang berada di atas tumpuan!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Masukan teks sesuai yang anda inginkan. &r(Mendukung warna teks!)" + inventory-title: Pengedit hologram + ELEVATOR: + no-destinations: "&4Tujuan tidak ditemukan" + pick-a-floor: "&3- Pilih Lantai -" + current-floor: "&eAnda sedang berada di lantai ini:" + click-to-teleport: "&eKlik &7untuk teleport ke lantai ini:" + enter-name: "&7Silakan masukan nama lantai pada kolom chat. &r(Mendukung warna + teks!)" + named: "&2Berhasil merubah nama lantai: &r%floor%" + TELEPORTER: + teleporting: "&3Melakukan teleportasi..." + teleported: "&3Teleportasi selesai!" + cancelled: "&4Teleportasi dibatalkan!" + invulnerability: "&b&lAnda kebal selama 30 detik!" + gui: + title: Titik jalan anda + tooltip: Klik untuk teleportasi + time: Perkiraan waktu + CARGO_NODES: + must-be-placed: "&4Harus diletakan di dalam peti atau mesin!" + GPS_CONTROL_PANEL: + title: Panel kendali GPS + transmitters: Gambaran pemancar + waypoints: Gambaran titik jalan + INDUSTRIAL_MINER: + no-fuel: "&c Penambang Industri Anda kehabisan bahan bakar! Masuklah bahan bakar + Anda ke peti di atas." + piston-facing: "& c Penambang Industri Anda membutuhkan piston untuk menghadap + ke atas!" + destroyed: "&c Penambang Industri Anda tampaknya telah hancurkan." + full-chest: "&c Penambang Industri Anda penuh!" + no-permission: "& 4Tampaknya Anda tidak memiliki izin untuk mengoperasikan Penambang + Industri Ini" + finished: "&e Penambang Industri Anda telah selesai! Itu memperoleh total% bijih% + bijih!" +anvil: + not-working: "&4Anda bisa menggunakan barang Slimefun di landasan!" +backpack: + already-open: "&cMaaf, tas ini dibuka di tempat lain!" + no-stack: "&cAnda tidak bisa menumpuk tas" +workbench: + not-enhanced: "&4Anda tidak dapat menggunakan barang Slimefun di meja kerajinan + biasa" +gps: + deathpoint: "&4Lokasi Kematian &7%date%" + waypoint: + new: "&eKetik nama baru untuk titik jalan di kolom pesan. &7(Mendukung warna teks!)" + added: "&aBerhasil menambahkan titik jalan baru" + max: "&4Anda telah mencapai jumlah maksimal penggunaan titik jalan" + insufficient-complexity: + - "&4Kompleksitas jaringan GPS tidak cukup: &c%complexity%" + - "&4a) Anda belum membuat sistem jaringan GPS" + - "&4b) Kompleksitas jaringan GPS anda belum cukup" + geo: + scan-required: "&4Dibutuhkan peninjauan GEO terlebih dahulu! &cGunakan Peninjau + GEO!" +inventory: + no-access: "&4Anda tidak di izinkan mengakses blok ini" +android: + started: "&7Android anda melanjutkan naskah nya" + stopped: "&7Android anda berhenti menjalankan naskah" + scripts: + already-uploaded: "&4Naskah yang sama sudah di unggah." + instructions: + START: "&2Mulai naskah" + REPEAT: "&9Ulangi naskah" + WAIT: "&eTunggu 0.5 detik" + GO_FORWARD: "&7Maju kedepan" + GO_UP: "&7Bergerak keatas" + GO_DOWN: "&7Bergerak kebawah" + TURN_LEFT: "&7Menghadap ke kiri" + TURN_RIGHT: "&7Menghadap ke kanan" + DIG_UP: "&bMenggali ke atas" + DIG_FORWARD: "&bMenggali ke depan" + DIG_DOWN: "&bMenggali ke bawah" + MOVE_AND_DIG_UP: "&bBergerak & Menggali ke atas" + MOVE_AND_DIG_FORWARD: "&bBergerak & Menggali ke depan" + MOVE_AND_DIG_DOWN: "&bBergerak & Menggali ke bawah" + ATTACK_MOBS_ANIMALS: "&4Serang &c(Musuh & Hewan)" + ATTACK_MOBS: "&4Serang &c(Musuh)" + ATTACK_ANIMALS: "&4Serang &c(Hewan)" + ATTACK_ANIMALS_ADULT: "&4Serang &c(Hewan &7[Dewasa]&c)" + CHOP_TREE: "&cTebang dan tanam kembali" + CATCH_FISH: "&bMenangkap ikan" + FARM_FORWARD: "&bPanen dan tanam kembali" + FARM_DOWN: "&bPanen dan tanam kembali &7(Blok yang dibawahnya)" + FARM_EXOTIC_FORWARD: "&bPanen dan tanam kembali tingkat lanjut" + FARM_EXOTIC_DOWN: "&bPanen dan tanam kembali tingkat lanjut &7(Blok yang dibawahnya)" + INTERFACE_ITEMS: "&9Masukan barang ke antarmuka penyimpanan" + INTERFACE_FUEL: "&cMengambil bahan bakar dari penyimpanan" + enter-name: + - + - "&eMasukan nama naskah anda" + uploaded: + - "&bMengunggah..." + - "&aBerhasil mengunggah naskah!" + rating: + own: "&4Anda tidak bisa menilai naskah anda sendiri!" + already: "&4Anda sudah memberikan nilai untuk naskah ini!" + editor: pengedit naskah +languages: + default: Server-Standar + en: Inggris + de: Jerman + fr: Perancis + it: Italia + es: Spanyol + pl: Polandia + sv: Swedia + nl: Belanda + cs: Ceko + hu: Hongaria + lv: Latvia + ru: Rusia + sk: Slovakia + zh-TW: Cina (Taiwan) + vi: Vietnam + id: Indonesia + zh-CN: Cina + el: Yunani + he: Ibrani + ar: Arab + af: Afrika + da: Denmark + fi: Finlandia + uk: Ukraina + ms: Malaysia + 'no': Norwegia + ja: Jepang + fa: Persia + th: Thailand + ro: Rumania + pt: Portugis + pt-BR: Portugis (Brazil) + bg: Bulgaria + ko: Korea + tr: Turki + hr: Croation + mk: Macedonian + sr: Serbian + be: Belarusian + tl: Tagalog diff --git a/src/main/resources/languages/messages_pl.yml b/src/main/resources/languages/messages_pl.yml index 23aa33300..1cff0f74c 100644 --- a/src/main/resources/languages/messages_pl.yml +++ b/src/main/resources/languages/messages_pl.yml @@ -1,184 +1,132 @@ --- -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ź z powrotem &7(Blok pod spodem)" - FARM_EXOTIC_DOWN: "&bZaawansowanie zbieraj i posadź z powrotem &7(Blok pod spodem)" - FARM_EXOTIC_FORWARD: "&6Zaawansowanie zbieraj i posadź z powrotem" - FARM_FORWARD: "&bZbieraj i posadź z powrotem" - 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: + help: Pokazuje ten ekran pomocy + cheat: Daje graczowi przedmioty Slimefun. give: Daj graczowi przedmioty Slimefun guide: Daje ci przewodnik Slimefun - help: Pokazuje ten ekran pomocy + timings: Informacje o opóźnieniu na twoim serwerze + teleporter: Zobacz punkty lokalizacji innych graczy + versions: Wyświetla listę wszystkich zainstalowanych dodatków + search: Przeszukuje twój przewodnik dla podanego terminu open_guide: Otwiera przewodnik Slimefun bez korzystania z książki + stats: Pokazuje niektóre statystyki dotyczące gracza 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: + message: "&bCo chcesz wyszukać?" + name: "&7Szukaj..." + tooltip: "&bKliknij, aby wyszukać przedmiot" + inventory: 'Wyszukiwanie dla: % item%' lore: - "&bCo chcesz wyszukać?" - "&7Wpisz wyszukiwane hasło na czacie" - message: "&bCo chcesz wyszukać?" - name: "&7Szukaj..." + cheat: + no-multiblocks: "&4Nie możesz otrzymać Multibloków, musisz je zbudować!" + languages: + updated: "&aTwój język został pomyślnie ustawiony na: &b%lang%" + translations: + name: "&aCzegoś brakuje?" + lore: Kliknij, aby dodać własne tłumaczenie + select: Kliknij, aby wybrać ten język + select-default: Kliknij, aby wybrać domyślny język + selected-language: 'Aktualnie wybrane:' 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 + languages: Wybierz preferowany język + credits: Autorzy Slimefun4 wiki: Wiki Slimefun4 + addons: Dodatki dla Slimefun4 + bugs: Zgłaszanie błędów + source: Kod Źródłowy + credits: + commit: Rejestracja zmian + commits: Rejestracje zmian + roles: + developer: "&6Developer" + wiki: "&3Edytor Wiki" + resourcepack: "&cArtysta paczki zasobów" + translator: "&9Tłumacz" + profile-link: Kliknij, aby odwiedzić ich profil na GitHub + pages: + previous: Poprzednia strona + next: Kolejna strona 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 na razie 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ć." + wiki: Zobacz ten przedmiot na oficjalnej stronie Wiki Slimefun + recipes: + machine: Przepisy wykonane w tym urządzeniu + miner: Zasoby, które możesz uzyskać za pomocą tego Górnika + generator: Dostępne rodzaje paliwa + gold-pan: Zasoby, które możesz zdobyć + back: + title: Wstecz + guide: Wróć Do Przewodnika Slimefun + settings: Wróć Do Panelu Ustawień + locked: Zablokowany + locked-category: + - Aby odblokować tę kategorię, będziesz + - Musisz odblokować wszystkie przedmioty z + - Następujące kategorie messages: - cannot-place: "&cNie możesz umieścić tam tego bloku!" - diet-cookie: "&eZaczynasz czuć się bardzo lekko..." + not-researched: "&4Nie masz wystarczającej wiedzy, aby to zrozumieć" + not-enough-xp: "&4Nie masz wystarczająco doświadczenia, aby to odblokować" + unlocked: '&bOdblokowano &7"%research%"' + only-players: "&4To polecenie dotyczy tylko graczy" + unknown-player: "&4Nieznany gracz: &c%player%" + no-permission: "&4Brak uprawnień" + usage: "&4Użycie: &c%usage%" + not-online: "&4%player% &cnie jest online!" + not-valid-item: "&4%item% &cnie jest poprawnym przedmiotem!" + not-valid-amount: "&4%amount% &cnie jest prawidłową ilością: ilość musi być większa + od 0!" + given-item: '&bOtrzymano &a%amount% &7"%item%&7"' + give-item: '&bDodano przedmiot do plecaka gracza %player%: &a%amount% &7"%item%&7"' + not-valid-research: "&4%research% &cnie jest poprawnym Badaniem!" + give-research: '&bOdblokowano badanie &7"%research%&7" dla gracza %player%' + hungry: "&cJesteś zbyt głodny, żeby to zrobić!" + mode-change: "&bTryb urządzenia %device% został zmieniony na: &9%mode%" 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ś)?" + no-tome-yourself: "&cNie możesz używać &4Księgi wiedzy &cna samym sobie..." + multimeter: "&bZmagazynowana energia: &3%stored% &b/ &3%capacity%" + talisman: + anvil: "&a&oTwój talizman uratował twoje narzędzie przed złamaniem" + miner: "&a&oTwój talizman podwoił twoje znaleziska" + hunter: "&a&oTwój talizman podwoił twoje znaleziska" + lava: "&a&oTwój talizman uratował cię przed spaleniem na śmierć" + water: "&a&oTwój talizman uratował cię przed utonięciem" + angel: "&a&oTwój talizman uratował cię przed odniesieniem obrażeń od upadku" + fire: "&a&oTwój talizman uratował cię przed spaleniem na śmierć" + magician: "&a&oTwój talizman dał ci dodatkowe zaklęcie" + traveller: "&a&oTwój talizman dał ci przyspieszenie prędkości" + warrior: "&a&oTwój talizman na pewien czas poprawił twoją siłę" + knight: "&a&oTwój talizman dał ci 5 sekund regeneracji" + 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" + 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." + research: + start: "&7Starożytne duchy szepczą ci do ucha tajemnicze słowa!" + progress: "&7 Zaczynasz się zastanawiać nad &b%research% &e(%progress%)" fire-extinguish: "&7Ty masz zgasły siebie." + cannot-place: "&cNie możesz umieścić tam tego bloku!" + no-pvp: "&c Nie możesz tutaj bić innych graczy!" + radiation: "&4Zostałeś(-aś) narażony na śmiertelne promieniowanie! &c Pozbądź się + radioaktywnego przedmiotu lub załóż kombinezon materiałów niebezpiecznych!" + opening-guide: "&bOtwieranie przewodnika, może to potrwać kilka sekund..." + opening-backpack: "&bOtwieranie plecaka, może to potrwać kilka sekund..." + no-iron-golem-heal: "&cTo nie jest sztabka żelaza. Nie możesz tego użyć do leczenia + Żelaznych Golemów!" + link-prompt: "&eKliknij tutaj:" + diet-cookie: "&eZaczynasz czuć się bardzo lekko..." fortune-cookie: - "&7Pomóż mi, jestem uwięziony w fabryce ciastek z wróżbami!" - "&7Jutro umrzesz... przez Creepera" @@ -192,56 +140,150 @@ messages: - "&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!" +machines: + pattern-not-found: "&ePrzepraszamy, nie można rozpoznać tego przepisu. Umieść przedmioty + we właściwym wzorze w Dozowniku." + 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ć." + full-inventory: "&eEkwipunek jest pełny!" + in-use: "&cEkwipunek tego bloku jest na razie otworzony przez innego gracza." + ignition-chamber-no-flint: "&cDo Komory Zapłonowej brakuje Krzesiwa." + 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!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Wprowadź żądany tekst hologramu na czacie. &r(Kody kolorów są obsługiwane!)" + inventory-title: Edytor hologramów + ELEVATOR: + no-destinations: "&4Nie znaleziono miejsc docelowych" + pick-a-floor: "&3- Wybierz piętro-" + current-floor: "&eTo jest piętro, na którym aktualnie jesteś:" + click-to-teleport: "&eKliknij &7aby teleportować się na to piętro:" + enter-name: "&7Wprowadź żądaną nazwę piętra na czacie. &r(Kody kolorów są obsługiwane!)" + named: "&2Pomyślnie nazwano podłogę: &r% floor%" + TELEPORTER: + teleporting: "&3Teleportuje..." + teleported: "&3Przeteleportowano!" + cancelled: "&4Teleportacja anulowana!" + invulnerability: "&b&l Otrzymałeś(-aś) 30 sekund Niewrażliwości!" + gui: + title: Twoje punkty trasy + tooltip: Kliknij, aby się teleportować + time: Szacowany czas + CARGO_NODES: + must-be-placed: "&4Musi być umieszczony na skrzyni lub maszynie!" + GPS_CONTROL_PANEL: + title: GPS - Panel sterowania + transmitters: Transmiter Przegląd + waypoints: Waypoint Przegląd +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" workbench: not-enhanced: "&4Nie można używać przedmiotów Slimefun w zwykłym stole warsztatowym" +gps: + deathpoint: "&4Punkt śmierci &7%date%" + waypoint: + new: "&eProszę wpisać nazwę swojego nowego punktu trasy na czacie. &7(Kody kolorów + są obsługiwane!)" + added: "&aPomyślnie dodano nowy punkt trasy" + max: "&4Osiągnięto maksymalną liczbę punktów trasy" + 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" + geo: + scan-required: "&4Wymagany jest skan GEO-Skan! &cNajpierw zeskanuj ten fragment + za pomocą skanera GEO!" +inventory: + no-access: "&4Nie masz dostępu do tego bloku" +android: + started: "&7Twój Android wznowił swój skrypt" + stopped: "&7Twój Android wstrzymał swój skrypt" + scripts: + already-uploaded: "&4Ten skrypt został już przesłany." + instructions: + START: "&2Uruchom skrypt" + REPEAT: "&9 Powtórz skrypt" + WAIT: "&ePoczekaj 0.5s" + GO_FORWARD: "&7Idź do przodu" + GO_UP: "&7Idź do góry" + GO_DOWN: "&7Idź w dół" + TURN_LEFT: "&7Skręć w lewo" + TURN_RIGHT: "&7Skręć w prawo" + DIG_UP: "&bKop w górę" + DIG_FORWARD: "&bKop do przodu" + DIG_DOWN: "&bKop w dół" + MOVE_AND_DIG_UP: "&bIdź i kop w górę" + MOVE_AND_DIG_FORWARD: "&bIdź i kop do przodu" + MOVE_AND_DIG_DOWN: "&bIdź i kop w dół" + ATTACK_MOBS_ANIMALS: "&4Atakuj &c(Wrogie Moby i Zwierzęta)" + ATTACK_MOBS: "&4Atakuj &c(Wrogie Moby)" + ATTACK_ANIMALS: "&4Atakuj &c(Zwierzęta)" + ATTACK_ANIMALS_ADULT: "&4Atakuj &c(Zwierzęta &7[Dorosłe]&c)" + CHOP_TREE: "&cTnij drzewo i posadź sadzonkę" + CATCH_FISH: "&bŁów ryby" + FARM_FORWARD: "&bZbieraj i posadź z powrotem" + FARM_DOWN: "&bZbieraj i posadź z powrotem &7(Blok pod spodem)" + FARM_EXOTIC_FORWARD: "&6Zaawansowanie zbieraj i posadź z powrotem" + FARM_EXOTIC_DOWN: "&bZaawansowanie zbieraj i posadź z powrotem &7(Blok pod spodem)" + INTERFACE_ITEMS: "&9Wyślij zawartość ekwipunku do Interfejsu w obecnym kierunku" + INTERFACE_FUEL: "&cOtrzymaj paliwo z Interfejsu w obecnym kierunku" + enter-name: + - + - "&eProszę wpisać nazwę dla tego skryptu" + uploaded: + - "&bPrzesyłanie..." + - "&aPomyślnie przesłano twój skrypt!" + rating: + own: "&4Nie możesz ocenić własnego skryptu!" + already: "&4Oceniłeś już ten skrypt!" + editor: Edytor skryptów +languages: + default: Domyślny serwera + en: Język angielski + de: Niemiecki + fr: Francuski + it: Włoski + es: Hiszpański + pl: Polski + sv: Szwedzki + nl: Holenderski + cs: Czeski + hu: Węgierski + lv: Łotewski + ru: Rosyjski + sk: Słowacki + zh-TW: Chiński (Tajwan) + vi: Wietnamski + id: Indonezyjski + zh-CN: Chiński (Chiny) + el: Grecki + he: Hebrajski + pt-BR: Portugalski (Brazylia) + ar: Arabski (Arabic) + af: Afrykański (Afrikaans) + da: Duński (Danish) + fi: Fiński (Finnish) + uk: Ukraiński (Ukrainian) + ms: Malajski (Malay) + 'no': Norweski + ja: Japonia + fa: Perski + th: Tajski + ro: Rumuński + pt: Portugalski (Portugalia) + bg: Bułgarski + ko: Koreański + tr: Turecki +miner: + no-ores: "&eNie można znaleźć żadnych rud w pobliżu!" diff --git a/src/main/resources/languages/recipes_ja.yml b/src/main/resources/languages/recipes_ja.yml index c7ceb72c6..3a482d34f 100644 --- a/src/main/resources/languages/recipes_ja.yml +++ b/src/main/resources/languages/recipes_ja.yml @@ -1,158 +1,163 @@ --- -minecraft: - blasting: - lore: - - このアイテムの精錬に使用する - - '機械: 溶鉱炉' - name: 溶鉱炉での精錬 - campfire: - lore: - - このアイテムの精錬に使用する - - '機械: 焚き火' - name: 焚き火 - furnace: - lore: - - このアイテムの精錬に使用する - - '機械: かまど' - name: かまどでの精錬 - shaped: - lore: - - このアイテムの作成に使用する - - '機械: 作業台' - - 並べ方は固定 - name: 定形レシピ - shapeless: - lore: - - このアイテムの作成に使用する - - '機械: 作業台' - - 並べ方は自由 - name: 不定形レシピ - smoking: - lore: - - このアイテムの燻製に使用する - - '機械: 燻製器' - name: 燻製器 - stonecutting: - lore: - - このアイテムの作成に使用する - - '機械: 石切台' - name: 石切台 slimefun: - ancient_altar: + multiblock: + name: マルチブロック lore: - - このアイテムの作成に使用する - - '機械: Ancient Altar' - - 詳細はAncient Altarに記載 - name: Ancient Altar - armor_forge: - lore: - - このアイテムの作成に使用する - - '機械: Armor Forge' - name: Armor Forge - compressor: - lore: - - このアイテムの作成に使用する - - '機械: Compressor' - name: Compressor + - 図面通りに設置して建造する。 + - クラフトではありません! enhanced_crafting_table: + name: Enhanced Crafting Table lore: - このアイテムの作成に使用する - '機械: Enhanced Crafting Table' - 通常の作業台では不十分です! - name: Enhanced Crafting Table - food_composter: + armor_forge: + name: Armor Forge lore: - このアイテムの作成に使用する - - '機械: Food Composter' - name: Food Composter - food_fabricator: - lore: - - このアイテムの作成に使用する - - '機械: Food Fabricator' - name: Food Fabricator - freezer: - lore: - - このアイテムの作成に使用する - - '機械: Freezer' - name: Freezer - geo_miner: - lore: - - このアイテムの採掘に使用する - - '機械: GEO Miner' - name: GEO Miner - gold_pan: - lore: - - このアイテムの入手に使用する - - '機械: Gold Pan' - name: Gold Pan + - '機械: Armor Forge' grind_stone: + name: Grind Stone lore: - このアイテムの作成に使用する - '機械: Grind Stone' - name: Grind Stone - heated_pressure_chamber: + smeltery: + name: Smeltery lore: - このアイテムの作成に使用する - - '機械: Heated Pressure Chamber' - name: Heated Pressure Chamber - juicer: - lore: - - このジュースの作成に使用する - - '機械: Juicer' - name: Juicer - magic_workbench: - lore: - - このアイテムの作成に使用する - - '機械: Magic Workbench' - name: Magic Workbench - mob_drop: - lore: - - モブを倒して - - 入手するアイテム - name: モブドロップ - multiblock: - lore: - - 図面通りに設置して - - 建造する。クラフトではありません! - name: マルチブロック - nuclear_reactor: - lore: - - このアイテムを副産物として入手できる - - '機械: Nuclear Reactor' - name: Nuclear Reactor - oil_pump: - lore: - - このアイテムの収集に使用する - - '機械: Oil Pump' - name: Oil Pump + - '機械: Smeltery' ore_crusher: + name: Ore Crusher lore: - このアイテムの作成に使用する - '機械: Ore Crusher' - name: Ore Crusher + mob_drop: + name: モブドロップ + lore: + - モブを倒して + - 入手するアイテム + gold_pan: + name: Gold Pan + lore: + - このアイテムの入手に使用する + - '機械: Gold Pan' + compressor: + name: Compressor + lore: + - このアイテムの作成に使用する + - '機械: Compressor' + pressure_chamber: + name: Pressure Chamber + lore: + - このアイテムの作成に使用する + - '機械: Pressure Chamber' ore_washer: + name: Ore Washer lore: - このアイテムの作成に使用する - '機械: Ore Washer' - name: Ore Washer + juicer: + name: Juicer + lore: + - このジュースの作成に使用する + - '機械: Juicer' + magic_workbench: + name: Magic Workbench + lore: + - このアイテムの作成に使用する + - '機械: Magic Workbench' + ancient_altar: + name: Ancient Altar + lore: + - このアイテムの作成に使用する + - '機械: Ancient Altar' + - 詳細はAncient Altarに記載 + heated_pressure_chamber: + name: Heated Pressure Chamber + lore: + - このアイテムの作成に使用する + - '機械: Heated Pressure Chamber' + food_fabricator: + name: Food Fabricator + lore: + - このアイテムの作成に使用する + - '機械: Food Fabricator' + food_composter: + name: Food Composter + lore: + - このアイテムの作成に使用する + - '機械: Food Composter' + freezer: + name: Freezer + lore: + - このアイテムの作成に使用する + - '機械: Freezer' + geo_miner: + name: GEO Miner + lore: + - このアイテムの採掘に使用する + - '機械: GEO Miner' + nuclear_reactor: + name: Nuclear Reactor + lore: + - このアイテムを副産物として入手できる + - '機械: Nuclear Reactor' + oil_pump: + name: Oil Pump + lore: + - このアイテムの収集に使用する + - '機械: Oil Pump' pickaxe_of_containment: + name: Pickaxe of Containment lore: - このブロックを入手するには - Pickaxe of Containmentを - 使用してスポナーを採掘する - name: Pickaxe of Containment - pressure_chamber: - lore: - - このアイテムの作成に使用する - - '機械: Pressure Chamber' - name: Pressure Chamber refinery: + name: Refinery lore: - このアイテムの作成に使用する - '機械: Refinery' - name: Refinery - smeltery: +minecraft: + shaped: + name: 定形レシピ lore: - このアイテムの作成に使用する - - '機械: Smeltery' - name: Smeltery + - '機械: 作業台' + - 並べ方は固定 + shapeless: + name: 不定形レシピ + lore: + - このアイテムの作成に使用する + - '機械: 作業台' + - 並べ方は自由 + furnace: + name: かまどでの精錬 + lore: + - このアイテムの精錬に使用する + - '機械: かまど' + blasting: + name: 溶鉱炉での精錬 + lore: + - このアイテムの精錬に使用する + - '機械: 溶鉱炉' + smoking: + name: 燻製器 + lore: + - このアイテムの燻製に使用する + - '機械: 燻製器' + campfire: + name: 焚き火 + lore: + - このアイテムの精錬に使用する + - '機械: 焚き火' + stonecutting: + name: 石切台 + lore: + - このアイテムの作成に使用する + - '機械: 石切台' + smithing: + name: 鍛冶台 + lore: + - このアイテムの作成に使用する + - '機械: 鍛冶台' diff --git a/src/main/resources/languages/researches_id.yml b/src/main/resources/languages/researches_id.yml new file mode 100644 index 000000000..0bf6617cc --- /dev/null +++ b/src/main/resources/languages/researches_id.yml @@ -0,0 +1,238 @@ +--- +slimefun: + walking_sticks: 'Tongkat ' + portable_crafter: Alat Crafting + fortune_cookie: Kue Keberuntungan + portable_dustbin: Tempat Sampah Portabel + meat_jerky: Dendeng Sapi + armor_forge: Meja Kerajinan Armor + glowstone_armor: Baju Zirah Glowstone + lumps: Gumpalan dan Sihir + ender_backpack: Tas Ender + ender_armor: Baju Zirah Ender + magic_eye_of_ender: Mata Sihir Ender + magic_sugar: Gula Sihir + monster_jerky: Dendeng Monster + slime_armor: Baju Zirah Lendir + sword_of_beheading: Pedang Pemenggal + basic_circuit_board: Papan Sirkuit Dasar + advanced_circuit_board: Papan Sirkuit Lanjutan + smeltery: Kompor Pelebur + steel: Baja + misc_power_items: Item terkait daya yang penting + battery: Baterai Pertamamu + steel_plate: Lembaran Baja + steel_thruster: Penekan Baja + parachute: Parasut + grappling_hook: Penggenggam Besi + jetpacks: Jetpacks + multitools: Alat Serbaguna + solar_panel_and_helmet: Tenaga Surya + elemental_staff: Tongkat Unsur + grind_stone: Penggiling Batu + cactus_armor: Pakaian Kaktus + gold_pan: Wajan Emas + magical_book_cover: Buku Pengikat Sihir + slimefun_metals: Logam Baru + ore_crusher: Bijih Dua Kali Lipat + bronze: Pembuatan Perunggu + alloys: Logam Campuran lanjutan + compressor_and_carbon: Pembuatan Karbon + gilded_iron_armor: Baju Zirah Besi Berlapis Emas + synthetic_diamond: Berlian Sintetis + pressure_chamber: Ruangan Bertekanan + synthetic_sapphire: Safir Sintetis + damascus_steel: Baja Damaskus + damascus_steel_armor: Baju Zirah Baja Damaskus + reinforced_alloy: Logam Campuran Yang Diperkuat + carbonado: Berlian Hitam + magic_workbench: Meja Kerajinan Sihir + wind_staff: Tongkat Sihir Udara + reinforced_armor: Baju Zirah Logam Campurang Yang Diperkuat + ore_washer: Mesin Pencuci Bijih + gold_carats: Emas Murni + silicon: Lembah Silikon + fire_staff: Tongkat Sihir Api + smelters_pickaxe: Beliung Pelebur + common_talisman: Jimat Biasa + anvil_talisman: Jimat Landasan + miner_talisman: Jimat Penambang + hunter_talisman: Jimat Pemburu + lava_talisman: Jimat Pejalan Lahar + water_talisman: Jimat Bernafas Dalam Air + angel_talisman: Jimat Malaikat + fire_talisman: Jimat Pemadam Kebakaran + lava_crystal: Kebakaran + magician_talisman: Jimat Pesulap + traveller_talisman: Jimat Petualang + warrior_talisman: Jimat Prajurit + knight_talisman: Jimat Ksatria + gilded_iron: Besi Bersinar + synthetic_emerald: Permata Palsu + chainmail_armor: Baju Zirah Rantai + whirlwind_talisman: Jimat Angin Puyuh + wizard_talisman: Jimat Penyihir + lumber_axe: Kapak Pemotong Kayu + hazmat_suit: Pakaian Pelindung Diri + uranium: Radio Aktif + crushed_ore: Pemurnian Bijih + redstone_alloy: Logam Campuran Redstone + carbonado_tools: Mesin Tingkat Atas + first_aid: Pertolongan Pertama + gold_armor: Baju Zirah Bersinar + night_vision_googles: Kacamata Penglihatan Malam + pickaxe_of_containment: Beliung Penahan + hercules_pickaxe: Beliung Hercules + table_saw: Meja Gergaji + slime_steel_armor: Pakaian Baja Berlendir + blade_of_vampires: Pedang Vampir + water_staff: Tongkat Sihir Air + 24k_gold_block: Kota Emas + composter: Tanah Kompos + farmer_shoes: Sepatu Petani + explosive_tools: Alat Peledak + automated_panning_machine: Wajan Emas Otomatis + boots_of_the_stomper: Sepatu Penginjak + pickaxe_of_the_seeker: Beliung Pencari + backpacks: Tas + woven_backpack: Tas Anyaman + crucible: Tempat Pencair Logam + gilded_backpack: Tas Berlapis Emas + armored_jetpack: Jetpack Berlapis Baja + ender_talismans: Jimat Ender + nickel_and_cobalt: Lebih Banyak Bijih + magnet: Besi Berani + infused_magnet: Besi Berani Tertanam + cobalt_pickaxe: Beliung Cepat + essence_of_afterlife: Penujuman + bound_backpack: Penyimpanan Terikat Jiwa + jetboots: Sepatu Jet + armored_jetboots: Sepatu Jet Berlapis Baja + seismic_axe: Kapak Seismik + pickaxe_of_vein_mining: Beliung Penambang Vena + bound_weapons: Senjata Terikat Jiwa + bound_tools: Peralatan Terikat Jiwa + bound_armor: Pakaian Terikat Jiwa + juicer: Minuman Segar + repaired_spawner: Memperbaiki Spawner + enhanced_furnace: Tungku Pembakaran Tingkatan + more_enhanced_furnaces: Tungku Pembakaran Yang Lebih Baik + high_tier_enhanced_furnaces: Tingkat Tinggi Tungku Pembakaran + reinforced_furnace: Tungku Pembakaran Yang Diperkuat + carbonado_furnace: 'Tungku Pembakaran Bersisi Carbonado ' + electric_motor: Memanaskan + block_placer: Peletak Blok + scroll_of_dimensional_teleposition: Memutar Sesuatu Disekeliling + special_bows: Robin Hood + tome_of_knowledge_sharing: Berbagi Dengan Teman + flask_of_knowledge: Penyimpan XP + hardened_glass: Tahan Terhadap Ledakan + golden_apple_juice: Ramuan Emas + cooler: Tempat Minuman Portabel + ancient_altar: Altar Kuno + wither_proof_obsidian: Obsidian Anti Wither + ancient_runes: Sajak Berelemen + special_runes: Sajak Ungu + infernal_bonemeal: Pupuk Neraka + rainbow_blocks: Blok Pelangi + infused_hopper: Hopper Infus + wither_proof_glass: Kaca Anti Wither + duct_tape: Lakban + plastic_sheet: Plastik + android_memory_core: Inti Memori + oil: Minyak + fuel: Bahan Bakar + hologram_projector: Hologram + capacitors: Kapasitor Tingkat 1 + high_tier_capacitors: Kapasitor Tingkat 2 + solar_generators: Pembangkit Listrik Tenaga Surya + electric_furnaces: Tungku Pembakaran Bertenaga + electric_ore_grinding: Penghancur Dan Penggiling + heated_pressure_chamber: Ruangan Bertekanan Panas + coal_generator: Batu Bara Generator + bio_reactor: Bio-Reaktor + auto_enchanting: Pemikat Otomatis Dan Pencabut Pemikat + auto_anvil: Landasan Otomatis + multimeter: Pengukur Daya + gps_setup: Susunan GPS Dasar + gps_emergency_transmitter: Titik Lokasi Darurat GPS + programmable_androids: Android + android_interfaces: Antarmuka Android + geo_scanner: Peninjau GEO + combustion_reactor: Reaktor Pembakaran + teleporter: Komponen Teleportasi + teleporter_activation_plates: Pengaktif Teleportasi + better_solar_generators: Pembangkit Listrik Bertenaga Surya Tingkat Lanjut + better_gps_transmitters: Pemancar Tingkat Lanjut + elevator: Tangga Berjalan + energized_solar_generator: Pembangkit Listrik Tenaga Surya Setiap Saat + energized_gps_transmitter: Pemancar Tingkat Tinggi + energy_regulator: Jaringan Energi 101 + butcher_androids: Android Tukang Daging + organic_food: Makanan Organik + auto_breeder: Pemberi Makan Otomatis + advanced_android: Android Lanjutan + advanced_butcher_android: Android Lanjutan - Tukang Daging + advanced_fisherman_android: Android Lanjutan - Pemancing + animal_growth_accelerator: Mesin Manipulasi Pertumbuhan Hewan + xp_collector: Pengumpul XP + organic_fertilizer: Pupuk Organik + crop_growth_accelerator: Mesin Akselerasi Pertumbuhan Tanaman + better_crop_growth_accelerator: Mesin Akselerasi Pertumbuhan Tanaman Tingka Lanjut + reactor_essentials: Barang Penting Reaktor + nuclear_reactor: Pembangkit Listrik Tenaga Nuklir + freezer: Pembeku + cargo_basics: Muatan Dasar + cargo_nodes: Susunan Muatan + electric_ingot_machines: Pembuat Batang Logam Elektrik + high_tier_electric_ingot_machines: Pembuat Batang Logam Sangat Cepat + automated_crafting_chamber: Pembuat Otomatis + better_food_fabricator: Mesin Pembuat Makanan Lanjutan + reactor_access_port: Interaksi Reaktor + fluid_pump: Pompa Cairan + better_freezer: Lemari Es Lanjutan + boosted_uranium: Perputaran Tiada Henti + trash_can: Sampah + advanced_output_node: Jalur Keluaran Lanjutan + carbon_press: Penekan Karbon + electric_smeltery: Kompor Pelebur Elektrik + better_electric_furnace: Kompor Pembakaran Elektrik Lanjutan + better_carbon_press: Penekan Karbon Lanjutan + empowered_android: Diberdayakan Android + empowered_butcher_android: Diberdayakan Android - Tukang Daging + empowered_fisherman_android: Diberdayakan Android - Pemancing + high_tier_carbon_press: Penekan Karbon Tingkat Akhir + wither_assembler: Pembunuh Wither Otomatis + better_heated_pressure_chamber: Ruang Bertenakan Tinggi Lanjutan + elytra: Elytra + special_elytras: Elytra Spesial + electric_crucible: Tempat Pencair Logam Elektrik + better_electric_crucibles: Tempat Pencain Logam Panas + advanced_electric_smeltery: Kompor Pelebur Elektrik Lanjutan + advanced_farmer_android: Android Lanjutan - Petani + lava_generator: Mesin Pembangkit Tenaga Lahar + nether_ice: 'Es Neraka Cairan Pendingin ' + nether_star_reactor: Reaktor Nether Star + blistering_ingots: Radioaktivitas Terik + automatic_ignition_chamber: Alat Perapian Otomatis + output_chest: 'Alat Penyimpanan Keluaran Dasar ' + copper_wire: Daya Konduksi Yang Menipis + radiant_backpack: Tas Berseri + auto_drier: Hari Yang Kering + diet_cookie: Kue Diet + storm_staff: Tongkat Sihir Petir + soulbound_rune: Sajak Terikat Jiwa + geo_miner: Penambang GEO + lightning_rune: Sajak Petir + totem_of_undying: Totem Keabadian + charging_bench: Meja Isi Daya + nether_gold_pan: Wajan Emas Neraka + electric_press: Mesin Tekan Elektrik + magnesium_generator: Tenaga Dari Magnesium + kelp_cookie: Rumput Laut Lezat + makeshift_smeltery: Pelebur Tingkat Lanjut + tree_growth_accelerator: Percepat Pohon + industrial_miner: Industrial tambang + advanced_industrial_miner: Menambang Yang Jauh Lebih Baik + magical_zombie_pills: De-Zombification + auto_brewer: Industri Bir diff --git a/src/main/resources/languages/researches_pl.yml b/src/main/resources/languages/researches_pl.yml new file mode 100644 index 000000000..e31a805d3 --- /dev/null +++ b/src/main/resources/languages/researches_pl.yml @@ -0,0 +1,234 @@ +--- +slimefun: + walking_sticks: Ruchomy Patyk + portable_crafter: Przenośny Stół Rzemieślniczy + fortune_cookie: Ciastko z wróżbą + portable_dustbin: Przenośny Kosz + meat_jerky: Suszone Mięso + armor_forge: Tworzenie Zbroji + glowstone_armor: Jasnopyłowa Zbroja + lumps: Grudki i Magia + ender_backpack: Plecak Endu + ender_armor: Zbroja Endu + magic_eye_of_ender: Magiczne Oko Endera + magic_sugar: Magiczny Cukier + monster_jerky: 'Potworne Mięso ' + slime_armor: Szlamowa Zbroja + sword_of_beheading: Miecz Odcinania Głów + basic_circuit_board: Podstawowa Płyta Drukowana + advanced_circuit_board: Zaawansowana Płyta Drukowana + smeltery: Wytapiacz + steel: Epoka Stali + misc_power_items: Ważne przedmioty związane z prądem + battery: Twoja pierwsza bateria + steel_plate: Stalowa Blacha + steel_thruster: Stalowy Ster Strumieniowy + parachute: Spadochron + grappling_hook: Hak do Chwytania + jetpacks: Plecaki Odrzutowe + multitools: Narzędzia Wielofunkcyjne + solar_panel_and_helmet: Energia Słoneczna + elemental_staff: Drążki Żywiołów + grind_stone: Kamień Szliferski + cactus_armor: Kaktusowy Garnitur + gold_pan: Złota Patelnia + magical_book_cover: Magiczna Oprawa do Książek + slimefun_metals: Nowe Metale + ore_crusher: Kruszarka Rud + bronze: Tworzenie Bronzu + alloys: Zaawansowane Stopy + compressor_and_carbon: Tworzenie Węgla + gilded_iron_armor: Pozłacana Żelazna Zbroja + synthetic_diamond: Diamenty Syntetyczne + pressure_chamber: Komora Ciśnieniowa + synthetic_sapphire: Szafiry Syntetyczne + damascus_steel: Stal Damasceńska + damascus_steel_armor: Zbroja ze Stali Damasceńskiej + reinforced_alloy: Wzmocniony Stop + carbonado: Czarne Diamenty + magic_workbench: Magiczny Stół Rzemieślniczy + wind_staff: Laska Wiatru + reinforced_armor: Wzmocniona Zbroja + ore_washer: Zmywacz Rud + gold_carats: Czyste Złoto + silicon: Dolina Krzemowa + fire_staff: Laska Ognia + smelters_pickaxe: Kilof Hutniczy + common_talisman: Pospolity Talizman + anvil_talisman: Talizman Kowadła + miner_talisman: Talizman Górnika + hunter_talisman: Talizman Łowcy + lava_talisman: Talizman Chodzącego po Lawie + water_talisman: Talizman Oddychacza pod Wodą + angel_talisman: Talizman Anioła + fire_talisman: Talizman Strażaka + lava_crystal: Ogniowa Sytuacja + magician_talisman: Talizman Maga + traveller_talisman: Talizman Podróżnika + warrior_talisman: Talizman Wojownika + knight_talisman: Talizman Rycerza + gilded_iron: Błyszczące Żelazo + synthetic_emerald: Fałszywy Klejnot + chainmail_armor: Kolczuga + whirlwind_talisman: Talizman Wiatru + wizard_talisman: Talizman Czarnoksiężnika + lumber_axe: Siekiera Drwala + hazmat_suit: Kombinezon Materiałów Niebezpiecznych + uranium: Radioaktywny + crushed_ore: Oczyszczanie Rud + redstone_alloy: Stop Czerwonego Proszku + carbonado_tools: Maszyny na Najwyższym Poziomie + first_aid: Pierwsza Pomoc + gold_armor: Błyszcząca Zbroja + night_vision_googles: Gogle Noktowizyjne + pickaxe_of_containment: Kilof Przechowywania + hercules_pickaxe: Kilof Herkulesa + table_saw: Piła Stołowa + slime_steel_armor: Szlamowy Pancerz Stalowy + blade_of_vampires: Ostrze Wampirów + water_staff: Laska Wody + 24k_gold_block: Miasto ze Złota + composter: Kompostowanie Ziemi + farmer_shoes: Buty Rolnika + explosive_tools: Narzędzia Wybuchowe + automated_panning_machine: Zautomatyzowana Złota Patelnia + boots_of_the_stomper: Buty Stompera + pickaxe_of_the_seeker: Kilof Poszukiwacza + backpacks: Plecaki + woven_backpack: Pleciony Plecak + crucible: Tygiel + gilded_backpack: Pozłacany Plecak + armored_jetpack: Opancerzony Plecak Odrzutowy + ender_talismans: Talizmany Endera + nickel_and_cobalt: Jeszcze więcej Rud + magnet: Metale Magnetyczne + infused_magnet: Natchnione Magnesy + cobalt_pickaxe: Kobaltowy Kilof + essence_of_afterlife: Nekromancja + bound_backpack: Plecak Soulbound + jetboots: Buty Odrzutowe + armored_jetboots: Opancerzone Buty Odrzutowe + seismic_axe: Sejsmiczny Topór + pickaxe_of_vein_mining: Kilof z Żyły Górnictwa + bound_weapons: Bronie Soulbound + bound_tools: Narzędzia Soulbound + bound_armor: Soulbound Zbroja + juicer: Pyszne Drinki + repaired_spawner: Naprawianie Spawnerów + enhanced_furnace: Ulepszony Piec + more_enhanced_furnaces: Lepsze Piece + high_tier_enhanced_furnaces: Piec Wysokopoziomowy + reinforced_furnace: Wzmocniony Piec + carbonado_furnace: Karbonado Ostry Piec + electric_motor: Podgrzewać + block_placer: Blok Kładący + scroll_of_dimensional_teleposition: Odwracając rzeczy dookoła + special_bows: Robin Hood + tome_of_knowledge_sharing: Podziel się z Znajomym + flask_of_knowledge: Przechowywacz Expa + hardened_glass: Wytrzymałość na Wybuchy + golden_apple_juice: Złota Mikstura + cooler: Przenośna Chłodnica + ancient_altar: Starożytny Ołtarz + wither_proof_obsidian: Wither-Ochronne Obsydian + ancient_runes: Runy Żywiołów + special_runes: Fioletowe Runy + infernal_bonemeal: Piekielna Mączka Kostna + rainbow_blocks: Tęczowy Blok + infused_hopper: Lej Infused + wither_proof_glass: Wither-Ochronne Szkło + duct_tape: Taśma Klejąca + plastic_sheet: Plastik + android_memory_core: Rdzeń Pamięci + oil: Olej + fuel: Paliwo + hologram_projector: Projektor Hologramów + capacitors: Poziom 1 Kondensator + high_tier_capacitors: Poziom 2 Kondensator + solar_generators: Generator Słoneczny + electric_furnaces: Elektryczny Piec + electric_ore_grinding: Elektryczna Szlifierka Rudy + heated_pressure_chamber: Ogrzewana Komora Ciśnieniowa + coal_generator: Generator Węgla + bio_reactor: Bio-Reaktor + auto_enchanting: Automatyczne zaczarowanie i odczarowywanie + auto_anvil: Automatyczne Kowadło + multimeter: Pomiar Mocy + gps_setup: Podstawowa Konfiguracja GPS + gps_emergency_transmitter: Awaryjny punkt GPS + programmable_androids: Programowalne Androidy + android_interfaces: Interfejsyjny Android + geo_scanner: GEO-Skaner + combustion_reactor: Reaktor Spalania + teleporter: Komponenty Podstawowe Teleportera + teleporter_activation_plates: Aktywacja Teleportera + better_solar_generators: Ulepszony Słoneczny Generator + better_gps_transmitters: Ulepszony Transmiter + elevator: Windy + energized_solar_generator: Pełny-Czas Energia Słoneczna + energized_gps_transmitter: Transmiter Najwyższego Poziomu + energy_regulator: Regulator Energii + butcher_androids: Rzeźnik Android + organic_food: Organiczne Jedzenie + auto_breeder: Zautomatyzowane Karmienie + advanced_android: Zaawansowane Androidy + advanced_butcher_android: Zaawansowany Android - Rzeźnik + advanced_fisherman_android: Zaawansowany Android - Rybak + animal_growth_accelerator: Manipulacja Wzrostem Zwierząt + xp_collector: Kolekcjoner Expa + organic_fertilizer: Organiczny Nawóz + crop_growth_accelerator: Przyspieszenie Wzrostu Upraw + better_crop_growth_accelerator: Upgraded Crop Growth Accelerator + reactor_essentials: Podstawowy Reaktor + nuclear_reactor: Elektrownia Atomowa + freezer: Zamrażarka + cargo_basics: Podstawy Ładunku + cargo_nodes: Konfiguracja Ładunku + electric_ingot_machines: Elektryczna Fabryka Sztabek + high_tier_electric_ingot_machines: Super Szybka Produkcja Sztabek + automated_crafting_chamber: Automatyczny Stół Rzemieślniczy + better_food_fabricator: Ulepszone Wytwarzanie Żywności + reactor_access_port: Interakcja Reaktora + fluid_pump: Pompa Płynu + better_freezer: Ulepszona Zamrażarka + boosted_uranium: Niekończący się krąg + trash_can: Kosz + advanced_output_node: Zaawansowany Węzeł Wyjściowy + carbon_press: Prasa do Karbonado + electric_smeltery: Elektryczny Wytapiacz + better_electric_furnace: Ulepszony Elektryczny Piec + better_carbon_press: Ulepszona Prasa do Karbonado + empowered_android: 'Wzmocniony Android ' + empowered_butcher_android: Wzmocniony Android - Rzeźnik + empowered_fisherman_android: Wzmocniony Android - Rybak + high_tier_carbon_press: Ostateczna Prasa Węglowa + wither_assembler: Automatyczny Zabijacz Withera + better_heated_pressure_chamber: Ulepszona Ogrzewana Komora Ciśnieniowa + elytra: Elytra + special_elytras: Specjalna Elytra + electric_crucible: Naelektryzowany Tygiel + better_electric_crucibles: Gorące Tygle + advanced_electric_smeltery: Zaawansowana Huta Elektryczna + advanced_farmer_android: Zaawansowany Android - Farmer + lava_generator: Generator Lawy + nether_ice: Piekielny Lód Chłodzący + nether_star_reactor: Piekielny Reaktor + blistering_ingots: Pękająca Promieniotwórczość + automatic_ignition_chamber: Automatyczna Komora Zapłonowa + output_chest: Podstawowa Skrzynia Wyjściowa Maszyn + copper_wire: Zmniejszona Przewodność + radiant_backpack: Radioaktywny Plecak + auto_drier: Suchy Dzień + diet_cookie: Dietetyczne Ciasteczko + storm_staff: Laska Burzowa + soulbound_rune: Soulbound Rune + geo_miner: GEO-Górnik + lightning_rune: Błyskawiczna Runa + totem_of_undying: Totem Nieśmiertelności + charging_bench: Stół do Ładowania + nether_gold_pan: Piekielna Złota Patelnia + electric_press: Prasa Elektryczna + magnesium_generator: Moc z Magnezu + kelp_cookie: Ciastko z Wodorostów + makeshift_smeltery: Improwizowana huta + tree_growth_accelerator: Szybsze drzewa diff --git a/src/main/resources/languages/researches_tl.yml b/src/main/resources/languages/researches_tl.yml index 224a6c1bb..b03a65186 100644 --- a/src/main/resources/languages/researches_tl.yml +++ b/src/main/resources/languages/researches_tl.yml @@ -1,17 +1,17 @@ --- slimefun: - walking_sticks: Mga Lumalakad na Tusok + 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: Tipak at Mahika + lumps: Lumps and Magic ender_backpack: Ender Backpack ender_armor: Ender Armor - magic_eye_of_ender: Ang Mahiwagang Mata ng Ender - magic_sugar: Mahiwagang Asukal + magic_eye_of_ender: Magic Eye of Ender + magic_sugar: Magic Sugar monster_jerky: Monster Jerky slime_armor: Slime Armor sword_of_beheading: Espada sa Pagpugot ng Ulo diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestCategories.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestCategories.java index 01fdc202b..bd4bf5d7e 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestCategories.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestCategories.java @@ -49,7 +49,7 @@ public class TestCategories { Category category = new Category(new NamespacedKey(plugin, "getter_test"), new CustomItem(Material.DIAMOND_AXE, "&6Testing")); Assertions.assertEquals(3, category.getTier()); - Assertions.assertEquals(new NamespacedKey(SlimefunPlugin.instance, "getter_test"), category.getKey()); + Assertions.assertEquals(new NamespacedKey(SlimefunPlugin.instance(), "getter_test"), category.getKey()); Assertions.assertEquals("Testing", category.getUnlocalizedName()); Assertions.assertEquals(0, category.getItems().size()); }