diff --git a/CHANGELOG.md b/CHANGELOG.md index ad9af9284..7be1cf6f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,12 @@ * Small performance improvements for Slimefun guides * Small performance improvements for Cargo networks * Small performance improvements for Miner Androids +* Small performance improvements for all machines, especially Electric Smelteries +* Small performance improvements for Holograms +* Small performance improvements for Tree Growth Accelerators +* Small performance improvements for Reactors +* Electric machines now show their tier in the Inventory name too +* Removed "Fuel efficiency" attribute for androids, since that was pretty much always at 1.0 anyway... #### Fixes * Fixed Programmable Androids rotating in the wrong direction @@ -70,6 +76,9 @@ * Fixed ChestTerminal timings showing up as cargo nodes * Fixed timings reports never arriving sometimes * Fixed #2138 +* Fixed #1951 (again) +* Fixed Electric Press not working +* Fixed #2240 ## Release Candidate 15 (01 Aug 2020) diff --git a/pom.xml b/pom.xml index 9cd7e2639..3eff29036 100644 --- a/pom.xml +++ b/pom.xml @@ -320,7 +320,7 @@ org.mockito mockito-core - 3.5.2 + 3.5.5 test @@ -340,7 +340,7 @@ com.konghq unirest-java - 3.9.00 + 3.10.00 com.google.code.gson 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 462c77064..71059260d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java @@ -19,6 +19,7 @@ import org.bukkit.plugin.Plugin; import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetProvider; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.papermc.lib.PaperLib; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; @@ -34,71 +35,23 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; * @author TheBusyBiscuit * */ -public class ErrorReport { +public class ErrorReport { private static final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm", Locale.ROOT); + private static int count; + private SlimefunAddon addon; + private T throwable; private File file; - public ErrorReport(Throwable throwable, SlimefunAddon addon, Consumer printer) { - Slimefun.runSync(() -> { - file = getNewFile(); + public ErrorReport(T throwable, SlimefunAddon addon, Consumer printer) { + this.throwable = throwable; + this.addon = addon; - try (PrintStream stream = new PrintStream(file, StandardCharsets.UTF_8.name())) { - stream.println(); - stream.println("Java Environment:"); - stream.println(" Operating System: " + System.getProperty("os.name")); - stream.println(" Java Version: " + System.getProperty("java.version")); - stream.println(); - stream.println("Server Software: " + Bukkit.getName()); - stream.println(" Build: " + Bukkit.getVersion()); - stream.println(" Minecraft: " + Bukkit.getBukkitVersion()); - stream.println(); - stream.println("Slimefun Environment:"); - stream.println(" CS-CoreLib v" + SlimefunPlugin.getCSCoreLibVersion()); - stream.println(" Slimefun v" + SlimefunPlugin.getVersion()); - stream.println(" Caused by: " + addon.getName() + " v" + addon.getPluginVersion()); - stream.println(); - - List plugins = new ArrayList<>(); - List addons = new ArrayList<>(); - - scanPlugins(plugins, addons); - - stream.println("Installed Addons (" + addons.size() + ")"); - addons.forEach(stream::println); - - stream.println(); - - stream.println("Installed Plugins (" + plugins.size() + "):"); - plugins.forEach(stream::println); - - stream.println(); - - printer.accept(stream); - - stream.println("Stacktrace:"); - stream.println(); - throwable.printStackTrace(stream); - - addon.getLogger().log(Level.WARNING, ""); - addon.getLogger().log(Level.WARNING, "An Error occurred! It has been saved as: "); - addon.getLogger().log(Level.WARNING, "/plugins/Slimefun/error-reports/{0}", file.getName()); - addon.getLogger().log(Level.WARNING, "Please put this file on https://pastebin.com/ and report this to the developer(s)."); - - if (addon.getBugTrackerURL() != null) { - addon.getLogger().log(Level.WARNING, "Bug Tracker: {0}", addon.getBugTrackerURL()); - } - - addon.getLogger().log(Level.WARNING, ""); - } - catch (Exception x) { - addon.getLogger().log(Level.SEVERE, x, () -> "An Error occurred while saving an Error-Report for Slimefun " + SlimefunPlugin.getVersion()); - } - }); + Slimefun.runSync(() -> print(printer)); } - public ErrorReport(Throwable throwable, Location l, SlimefunItem item) { + public ErrorReport(T throwable, Location l, SlimefunItem item) { this(throwable, item.getAddon(), stream -> { stream.println("Block Info:"); stream.println(" World: " + l.getWorld().getName()); @@ -130,7 +83,7 @@ public class ErrorReport { }); } - public ErrorReport(Throwable throwable, SlimefunItem item) { + public ErrorReport(T throwable, SlimefunItem item) { this(throwable, item.getAddon(), stream -> { stream.println("SlimefunItem:"); stream.println(" ID: " + item.getID()); @@ -139,6 +92,94 @@ public class ErrorReport { }); } + /** + * This method returns the {@link File} this {@link ErrorReport} has been written to. + * + * @return The {@link File} for this {@link ErrorReport} + */ + public File getFile() { + return file; + } + + /** + * This returns the {@link Throwable} that was thrown. + * + * @return The {@link Throwable} + */ + public T getThrown() { + return throwable; + } + + /** + * This method returns the amount of {@link ErrorReport ErrorReports} created in this session. + * + * @return The amount of {@link ErrorReport ErrorReports} created. + */ + public static int count() { + return count; + } + + private void print(Consumer printer) { + this.file = getNewFile(); + count++; + + try (PrintStream stream = new PrintStream(file, StandardCharsets.UTF_8.name())) { + stream.println(); + + stream.println("Java Environment:"); + stream.println(" Operating System: " + System.getProperty("os.name")); + stream.println(" Java Version: " + System.getProperty("java.version")); + stream.println(); + + String serverSoftware = PaperLib.isSpigot() && !PaperLib.isPaper() ? "Spigot" : Bukkit.getName(); + stream.println("Server Software: " + serverSoftware); + stream.println(" Build: " + Bukkit.getVersion()); + stream.println(" Minecraft v" + Bukkit.getBukkitVersion()); + stream.println(); + + stream.println("Slimefun Environment:"); + stream.println(" CS-CoreLib v" + SlimefunPlugin.getCSCoreLibVersion()); + stream.println(" Slimefun v" + SlimefunPlugin.getVersion()); + stream.println(" Caused by: " + addon.getName() + " v" + addon.getPluginVersion()); + stream.println(); + + List plugins = new ArrayList<>(); + List addons = new ArrayList<>(); + + scanPlugins(plugins, addons); + + stream.println("Installed Addons (" + addons.size() + ")"); + addons.forEach(stream::println); + + stream.println(); + + stream.println("Installed Plugins (" + plugins.size() + "):"); + plugins.forEach(stream::println); + + stream.println(); + + printer.accept(stream); + + stream.println("Stacktrace:"); + stream.println(); + throwable.printStackTrace(stream); + + addon.getLogger().log(Level.WARNING, ""); + addon.getLogger().log(Level.WARNING, "An Error occurred! It has been saved as: "); + addon.getLogger().log(Level.WARNING, "/plugins/Slimefun/error-reports/{0}", file.getName()); + addon.getLogger().log(Level.WARNING, "Please put this file on https://pastebin.com/ and report this to the developer(s)."); + + if (addon.getBugTrackerURL() != null) { + addon.getLogger().log(Level.WARNING, "Bug Tracker: {0}", addon.getBugTrackerURL()); + } + + addon.getLogger().log(Level.WARNING, ""); + } + catch (Exception x) { + addon.getLogger().log(Level.SEVERE, x, () -> "An Error occurred while saving an Error-Report for Slimefun " + SlimefunPlugin.getVersion()); + } + } + private static void scanPlugins(List plugins, List addons) { String dependency = "Slimefun"; @@ -174,11 +215,7 @@ public class ErrorReport { return newFile; } - public File getFile() { - return file; - } - - public static void tryCatch(Function function, Runnable runnable) { + public static void tryCatch(Function> function, Runnable runnable) { try { runnable.run(); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/TeleportationManager.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/TeleportationManager.java index 9de0d816d..a455639a5 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/TeleportationManager.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/TeleportationManager.java @@ -62,17 +62,8 @@ public final class TeleportationManager { Location l = waypoint.getLocation(); double time = DoubleHandler.fixDouble(0.5 * getTeleportationTime(complexity, source, l)); - String[] lore = { - "", - "&8\u21E8 &7" + SlimefunPlugin.getLocalization().getResourceString(p, "tooltips.world") + ": &f" + l.getWorld().getName(), - "&8\u21E8 &7X: &f" + l.getX(), - "&8\u21E8 &7Y: &f" + l.getY(), - "&8\u21E8 &7Z: &f" + l.getZ(), - "&8\u21E8 &7" + SlimefunPlugin.getLocalization().getMessage(p, "machines.TELEPORTER.gui.time") + ": &f" + time + "s", - "", - "&8\u21E8 &c" + SlimefunPlugin.getLocalization().getMessage(p, "machines.TELEPORTER.gui.tooltip") - }; - + String[] lore = { "", "&8\u21E8 &7" + SlimefunPlugin.getLocalization().getResourceString(p, "tooltips.world") + ": &f" + l.getWorld().getName(), "&8\u21E8 &7X: &f" + l.getX(), "&8\u21E8 &7Y: &f" + l.getY(), "&8\u21E8 &7Z: &f" + l.getZ(), "&8\u21E8 &7" + SlimefunPlugin.getLocalization().getMessage(p, "machines.TELEPORTER.gui.time") + ": &f" + time + "s", "", "&8\u21E8 &c" + SlimefunPlugin.getLocalization().getMessage(p, "machines.TELEPORTER.gui.tooltip") }; + menu.addItem(slot, new CustomItem(waypoint.getIcon(), waypoint.getName().replace("player:death ", ""), lore)); menu.addMenuClickHandler(slot, (pl, s, item, action) -> { pl.closeInventory(); @@ -112,7 +103,7 @@ public final class TeleportationManager { } private boolean isValid(Player p, Location source) { - return p != null && p.getLocation().distanceSquared(source) < 2.0; + return p != null && p.isValid() && p.getWorld().getUID().equals(source.getWorld().getUID()) && p.getLocation().distanceSquared(source) < 2.0; } private void cancel(UUID uuid, Player p) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java index eb9c8d131..400ab5958 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java @@ -1,11 +1,5 @@ package io.github.thebusybiscuit.slimefun4.core.commands.subcommands; -import java.util.Locale; -import java.util.Optional; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.players.PlayerList; import io.github.thebusybiscuit.slimefun4.core.commands.SlimefunCommand; @@ -14,6 +8,13 @@ import io.github.thebusybiscuit.slimefun4.core.multiblocks.MultiBlockMachine; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.Locale; +import java.util.Map; +import java.util.Optional; class GiveCommand extends SubCommand { @@ -65,7 +66,13 @@ class GiveCommand extends SubCommand { if (amount > 0) { SlimefunPlugin.getLocalization().sendMessage(p, "messages.given-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, sfItem.getItemName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(amount))); - p.getInventory().addItem(new CustomItem(sfItem.getItem(), amount)); + Map excess = p.getInventory().addItem(new CustomItem(sfItem.getItem(), amount)); + if (SlimefunPlugin.getCfg().getBoolean("options.drop-excess-sf-give-items") && !excess.isEmpty()) { + for (ItemStack is : excess.values()) { + p.getWorld().dropItem(p.getLocation(), is); + } + } + SlimefunPlugin.getLocalization().sendMessage(sender, "messages.give-item", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1]).replace(PLACEHOLDER_ITEM, sfItem.getItemName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(amount))); } else { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/energy/EnergyNet.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/energy/EnergyNet.java index b034c7a17..9c9e8e216 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/energy/EnergyNet.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/energy/EnergyNet.java @@ -233,8 +233,8 @@ public class EnergyNet extends Network { } } catch (Exception | LinkageError t) { - explodedBlocks.add(loc); - new ErrorReport(t, loc, item); + exploded.add(loc); + new ErrorReport<>(t, loc, item); } long time = SlimefunPlugin.getProfiler().closeEntry(loc, item, timestamp); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/UpdaterService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/UpdaterService.java index b4b47634c..2cd2bc1b5 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/UpdaterService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/UpdaterService.java @@ -94,8 +94,9 @@ public class UpdaterService { * @return The build number of this Slimefun. */ public int getBuildNumber() { - if (updater != null && PatternUtils.NUMERIC.matcher(this.updater.getLocalVersion()).matches()) - return Integer.parseInt(this.updater.getLocalVersion()); + if (updater != null && PatternUtils.NUMERIC.matcher(this.updater.getLocalVersion()).matches()) { + return Integer.parseInt(updater.getLocalVersion()); + } return -1; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java index b347a66d5..1f89cf001 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/SlimefunItems.java @@ -834,14 +834,14 @@ public final class SlimefunItems { if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14)) { TABLE_SAW = new SlimefunItemStack("TABLE_SAW", Material.STONECUTTER, "&6Table Saw", "", "&aAllows you to get 8 planks from 1 Log", "&a(Works with all log types)"); MAKESHIFT_SMELTERY = new SlimefunItemStack("MAKESHIFT_SMELTERY", Material.BLAST_FURNACE, "&eMakeshift Smeltery", "", "&fImprovised version of the Smeltery", "&fthat only allows you to", "&fsmelt dusts into ingots"); - AUTO_DRIER = new SlimefunItemStack("AUTO_DRIER", Material.SMOKER, "&eAuto Drier", "", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(10)); - AUTO_BREWER = new SlimefunItemStack("AUTO_BREWER", Material.SMOKER, "&eAuto Brewer", "", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(12)); + AUTO_DRIER = new SlimefunItemStack("AUTO_DRIER", Material.SMOKER, "&6Auto Drier", "", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(10)); + AUTO_BREWER = new SlimefunItemStack("AUTO_BREWER", Material.SMOKER, "&6Auto Brewer", "", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(12)); } else { TABLE_SAW = null; MAKESHIFT_SMELTERY = new SlimefunItemStack("MAKESHIFT_SMELTERY", Material.FURNACE, "&eMakeshift Smeltery", "", "&fImprovised version of the Smeltery", "&fthat only allows you to", "&fsmelt dusts into ingots"); - AUTO_DRIER = new SlimefunItemStack("AUTO_DRIER", Material.FURNACE, "&eAuto Drier", "", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(10)); - AUTO_BREWER = new SlimefunItemStack("AUTO_BREWER", Material.BREWING_STAND, "&eAuto Brewer", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(12)); + AUTO_DRIER = new SlimefunItemStack("AUTO_DRIER", Material.FURNACE, "&6Auto Drier", "", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(10)); + AUTO_BREWER = new SlimefunItemStack("AUTO_BREWER", Material.BREWING_STAND, "&6Auto Brewer", LoreBuilder.machine(MachineTier.MEDIUM, MachineType.MACHINE), LoreBuilder.speed(1), LoreBuilder.powerPerSecond(12)); } } } 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 90cfc8234..8a4861141 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 @@ -6,11 +6,9 @@ import java.util.List; import java.util.Locale; import org.bukkit.ChatColor; -import org.bukkit.Material; import org.bukkit.NamespacedKey; 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.cscorelib2.chat.ChatInput; @@ -29,6 +27,7 @@ import io.github.thebusybiscuit.slimefun4.core.researching.Research; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.ChatUtils; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; +import io.github.thebusybiscuit.slimefun4.utils.itemstack.SlimefunGuideItem; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -39,20 +38,7 @@ public class BookSlimefunGuide implements SlimefunGuideImplementation { private final ItemStack item; public BookSlimefunGuide() { - item = new ItemStack(Material.ENCHANTED_BOOK); - ItemMeta meta = item.getItemMeta(); - - meta.setDisplayName(ChatColors.color("&aSlimefun Guide &7(Book GUI)")); - - List lore = new LinkedList<>(); - - lore.add(""); - lore.add(ChatColors.color("&eRight Click &8\u21E8 &7Browse Items")); - lore.add(ChatColors.color("&eShift + Right Click &8\u21E8 &7Open Settings / Credits")); - - meta.setLore(lore); - SlimefunPlugin.getItemTextureService().setTexture(meta, "SLIMEFUN_GUIDE"); - item.setItemMeta(meta); + item = new SlimefunGuideItem(this, "&aSlimefun Guide &7(Book GUI)"); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/CheatSheetSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/CheatSheetSlimefunGuide.java index b115cc54b..861c50fa6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/CheatSheetSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/guide/CheatSheetSlimefunGuide.java @@ -1,18 +1,12 @@ package io.github.thebusybiscuit.slimefun4.implementation.guide; -import java.util.LinkedList; -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.api.player.PlayerProfile; import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout; -import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; +import io.github.thebusybiscuit.slimefun4.utils.itemstack.SlimefunGuideItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; public class CheatSheetSlimefunGuide extends ChestSlimefunGuide { @@ -22,20 +16,7 @@ public class CheatSheetSlimefunGuide extends ChestSlimefunGuide { public CheatSheetSlimefunGuide() { super(false); - item = new ItemStack(Material.ENCHANTED_BOOK); - ItemMeta meta = item.getItemMeta(); - - meta.setDisplayName(ChatColors.color("&cSlimefun Guide &4(Cheat Sheet)")); - - List lore = new LinkedList<>(); - - lore.add(ChatColors.color("&4&lOnly openable by Admins")); - lore.add(ChatColors.color("&eRight Click &8\u21E8 &7Browse Items")); - lore.add(ChatColors.color("&eShift + Right Click &8\u21E8 &7Open Settings / Credits")); - - meta.setLore(lore); - SlimefunPlugin.getItemTextureService().setTexture(meta, "SLIMEFUN_GUIDE"); - item.setItemMeta(meta); + item = new SlimefunGuideItem(this, "&cSlimefun Guide &4(Cheat Sheet)"); } @Override 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 48f97598d..59471feba 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 @@ -18,9 +18,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; import org.bukkit.inventory.RecipeChoice; import org.bukkit.inventory.RecipeChoice.MaterialChoice; -import org.bukkit.inventory.meta.ItemMeta; -import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.cscorelib2.chat.ChatInput; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; @@ -41,6 +39,7 @@ import io.github.thebusybiscuit.slimefun4.core.researching.Research; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.ChatUtils; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; +import io.github.thebusybiscuit.slimefun4.utils.itemstack.SlimefunGuideItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.MenuClickHandler; import me.mrCookieSlime.Slimefun.Lists.RecipeType; @@ -59,6 +58,7 @@ public class ChestSlimefunGuide implements SlimefunGuideImplementation { public ChestSlimefunGuide(boolean vanillaRecipes) { showVanillaRecipes = vanillaRecipes; + item = new SlimefunGuideItem(this, "&aSlimefun Guide &7(Chest GUI)"); if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14)) { sound = Sound.ITEM_BOOK_PAGE_TURN; @@ -66,21 +66,6 @@ public class ChestSlimefunGuide implements SlimefunGuideImplementation { else { sound = Sound.ENTITY_BAT_TAKEOFF; } - - item = new ItemStack(Material.ENCHANTED_BOOK); - ItemMeta meta = item.getItemMeta(); - - meta.setDisplayName(ChatColors.color("&aSlimefun Guide &7(Chest GUI)")); - - List lore = new LinkedList<>(); - - lore.add(""); - lore.add(ChatColors.color("&eRight Click &8\u21E8 &7Browse Items")); - lore.add(ChatColors.color("&eShift + Right Click &8\u21E8 &7Open Settings / Credits")); - - meta.setLore(lore); - SlimefunPlugin.getItemTextureService().setTexture(meta, "SLIMEFUN_GUIDE"); - item.setItemMeta(meta); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/AdvancedFarmerAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/AdvancedFarmerAndroid.java index 716d21473..87ecbb3f6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/AdvancedFarmerAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/AdvancedFarmerAndroid.java @@ -23,10 +23,10 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; * @see FarmerAndroid * */ -public abstract class AdvancedFarmerAndroid extends FarmerAndroid { +public class AdvancedFarmerAndroid extends FarmerAndroid { - public AdvancedFarmerAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); + public AdvancedFarmerAndroid(Category category, int tier, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, tier, item, recipeType, recipe); } @Override 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 0c1e8ad0f..51c458d5a 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 @@ -16,12 +16,12 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public abstract class ButcherAndroid extends ProgrammableAndroid { +public class ButcherAndroid extends ProgrammableAndroid { private static final String METADATA_KEY = "android_killer"; - public ButcherAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); + public ButcherAndroid(Category category, int tier, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, tier, item, recipeType, recipe); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FarmerAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FarmerAndroid.java index 2edd555eb..060bb6b81 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FarmerAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FarmerAndroid.java @@ -17,10 +17,10 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; -public abstract class FarmerAndroid extends ProgrammableAndroid { +public class FarmerAndroid extends ProgrammableAndroid { - public FarmerAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); + public FarmerAndroid(Category category, int tier, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, tier, item, recipeType, recipe); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FisherAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FisherAndroid.java index 5bc7adf33..085895521 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FisherAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/FisherAndroid.java @@ -17,12 +17,12 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; -public abstract class FisherAndroid extends ProgrammableAndroid { +public class FisherAndroid extends ProgrammableAndroid { private final RandomizedSet fishingLoot = new RandomizedSet<>(); - public FisherAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); + public FisherAndroid(Category category, int tier, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, tier, item, recipeType, recipe); // Fish for (Material fish : MaterialCollections.getAllFishItems()) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/MinerAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/MinerAndroid.java index f475995fe..48b90420b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/MinerAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/MinerAndroid.java @@ -22,13 +22,13 @@ import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; -public abstract class MinerAndroid extends ProgrammableAndroid { +public class MinerAndroid extends ProgrammableAndroid { // Determines the drops a miner android will get private final ItemStack effectivePickaxe = new ItemStack(Material.DIAMOND_PICKAXE); - public MinerAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); + public MinerAndroid(Category category, int tier, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, tier, item, recipeType, recipe); } @Override 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 4bd2b00e5..b341e7789 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 @@ -36,6 +36,7 @@ import io.github.thebusybiscuit.slimefun4.core.handlers.BlockPlaceHandler; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; +import io.github.thebusybiscuit.slimefun4.utils.HeadTexture; import io.github.thebusybiscuit.slimefun4.utils.NumberUtils; import io.github.thebusybiscuit.slimefun4.utils.PatternUtils; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; @@ -59,7 +60,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; -public abstract class ProgrammableAndroid extends SlimefunItem implements InventoryBlock, RecipeDisplayItem { +public class ProgrammableAndroid extends SlimefunItem implements InventoryBlock, RecipeDisplayItem { private static final List POSSIBLE_ROTATIONS = Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST); private static final int[] BORDER = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 18, 24, 25, 26, 27, 33, 35, 36, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }; @@ -68,10 +69,12 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent protected final List fuelTypes = new ArrayList<>(); protected final String texture; + private final int tier; - public ProgrammableAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + public ProgrammableAndroid(Category category, int tier, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); + this.tier = tier; texture = item.getSkullTexture().orElse(null); registerDefaultFuelTypes(); @@ -95,7 +98,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent @Override public void newInstance(BlockMenu menu, Block b) { - menu.replaceExistingItem(15, new CustomItem(SlimefunUtils.getCustomHead("e01c7b5726178974b3b3a01b42a590e54366026fd43808f2a787648843a7f5a"), "&aStart/Continue")); + menu.replaceExistingItem(15, new CustomItem(HeadTexture.SCRIPT_START.getAsItemStack(), "&aStart/Continue")); menu.addMenuClickHandler(15, (p, slot, item, action) -> { SlimefunPlugin.getLocalization().sendMessage(p, "android.started", true); BlockStorage.addBlockInfo(b, "paused", "false"); @@ -103,14 +106,14 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent return false; }); - menu.replaceExistingItem(17, new CustomItem(SlimefunUtils.getCustomHead("16139fd1c5654e56e9e4e2c8be7eb2bd5b499d633616663feee99b74352ad64"), "&4Pause")); + menu.replaceExistingItem(17, new CustomItem(HeadTexture.SCRIPT_PAUSE.getAsItemStack(), "&4Pause")); menu.addMenuClickHandler(17, (p, slot, item, action) -> { BlockStorage.addBlockInfo(b, "paused", "true"); SlimefunPlugin.getLocalization().sendMessage(p, "android.stopped", true); return false; }); - menu.replaceExistingItem(16, new CustomItem(SlimefunUtils.getCustomHead("d78f2b7e5e75639ea7fb796c35d364c4df28b4243e66b76277aadcd6261337"), "&bMemory Core", "", "&8\u21E8 &7Click to open the Script Editor")); + menu.replaceExistingItem(16, new CustomItem(HeadTexture.ENERGY_REGULATOR.getAsItemStack(), "&bMemory Core", "", "&8\u21E8 &7Click to open the Script Editor")); menu.addMenuClickHandler(16, (p, slot, item, action) -> { BlockStorage.addBlockInfo(b, "paused", "true"); SlimefunPlugin.getLocalization().sendMessage(p, "android.stopped", true); @@ -235,7 +238,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent boolean hasFreeSlot = script.length < 54; if (hasFreeSlot) { - menu.addItem(i, new CustomItem(SlimefunUtils.getCustomHead("171d8979c1878a05987a7faf21b56d1b744f9d068c74cffcde1ea1edad5852"), "&7> Add new Command")); + menu.addItem(i, new CustomItem(HeadTexture.SCRIPT_NEW.getAsItemStack(), "&7> Add new Command")); menu.addMenuClickHandler(i, (pl, slot, item, action) -> { editInstruction(pl, b, script, index); return false; @@ -359,7 +362,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent return false; }); - menu.addItem(48, new CustomItem(SlimefunUtils.getCustomHead("105a2cab8b68ea57e3af992a36e47c8ff9aa87cc8776281966f8c3cf31a38"), "&eUpload a Script", "", "&6Click &7to upload your Android's Script", "&7to the Server's database")); + menu.addItem(48, new CustomItem(HeadTexture.SCRIPT_UP.getAsItemStack(), "&eUpload a Script", "", "&6Click &7to upload your Android's Script", "&7to the Server's database")); menu.addMenuClickHandler(48, (pl, slot, item, action) -> { uploadScript(pl, b, page); return false; @@ -377,7 +380,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent return false; }); - menu.addItem(53, new CustomItem(SlimefunUtils.getCustomHead("a185c97dbb8353de652698d24b64327b793a3f32a98be67b719fbedab35e"), "&6> Back", "", "&7Return to the Android's interface")); + menu.addItem(53, new CustomItem(HeadTexture.SCRIPT_LEFT.getAsItemStack(), "&6> Back", "", "&7Return to the Android's interface")); menu.addMenuClickHandler(53, (pl, slot, item, action) -> { openScriptEditor(pl, b); return false; @@ -457,25 +460,25 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent public void openScriptEditor(Player p, Block b) { ChestMenu menu = new ChestMenu(ChatColor.DARK_AQUA + SlimefunPlugin.getLocalization().getMessage(p, "android.scripts.editor")); - menu.addItem(1, new CustomItem(SlimefunUtils.getCustomHead("d9bf6db4aeda9d8822b9f736538e8c18b9a4844f84eb45504adfbfee87eb"), "&2> Edit Script", "", "&aEdits your current Script")); + menu.addItem(1, new CustomItem(HeadTexture.SCRIPT_FORWARD.getAsItemStack(), "&2> Edit Script", "", "&aEdits your current Script")); menu.addMenuClickHandler(1, (pl, slot, item, action) -> { openScript(pl, b, getScript(b.getLocation())); return false; }); - menu.addItem(3, new CustomItem(SlimefunUtils.getCustomHead("171d8979c1878a05987a7faf21b56d1b744f9d068c74cffcde1ea1edad5852"), "&4> Create new Script", "", "&cDeletes your current Script", "&cand creates a blank one")); + menu.addItem(3, new CustomItem(HeadTexture.SCRIPT_NEW.getAsItemStack(), "&4> Create new Script", "", "&cDeletes your current Script", "&cand creates a blank one")); menu.addMenuClickHandler(3, (pl, slot, item, action) -> { openScript(pl, b, DEFAULT_SCRIPT); return false; }); - menu.addItem(5, new CustomItem(SlimefunUtils.getCustomHead("c01586e39f6ffa63b4fb301b65ca7da8a92f7353aaab89d3886579125dfbaf9"), "&6> Download a Script", "", "&eDownload a Script from the Server", "&eYou can edit or simply use it")); + menu.addItem(5, new CustomItem(HeadTexture.SCRIPT_DOWN.getAsItemStack(), "&6> Download a Script", "", "&eDownload a Script from the Server", "&eYou can edit or simply use it")); menu.addMenuClickHandler(5, (pl, slot, item, action) -> { openScriptDownloader(pl, b, 1); return false; }); - menu.addItem(8, new CustomItem(SlimefunUtils.getCustomHead("a185c97dbb8353de652698d24b64327b793a3f32a98be67b719fbedab35e"), "&6> Back", "", "&7Return to the Android's interface")); + menu.addItem(8, new CustomItem(HeadTexture.SCRIPT_LEFT.getAsItemStack(), "&6> Back", "", "&7Return to the Android's interface")); menu.addMenuClickHandler(8, (pl, slot, item, action) -> { BlockStorage.getInventory(b).open(p); return false; @@ -504,7 +507,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent ChestMenu menu = new ChestMenu(ChatColor.DARK_AQUA + SlimefunPlugin.getLocalization().getMessage(p, "android.scripts.editor")); ChestMenuUtils.drawBackground(menu, 0, 1, 2, 3, 4, 5, 6, 7, 8); - menu.addItem(9, new CustomItem(SlimefunUtils.getCustomHead("16139fd1c5654e56e9e4e2c8be7eb2bd5b499d633616663feee99b74352ad64"), "&fDo nothing"), (pl, slot, item, action) -> { + menu.addItem(9, new CustomItem(HeadTexture.SCRIPT_PAUSE.getAsItemStack(), "&fDo nothing"), (pl, slot, item, action) -> { String code = deleteInstruction(script, index); setScript(b.getLocation(), code); openScript(p, b, code); @@ -609,9 +612,9 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent return new int[] { 20, 21, 22, 29, 30, 31 }; } - public abstract float getFuelEfficiency(); - - public abstract int getTier(); + public int getTier() { + return tier; + } protected void tick(Block b, Config data) { if (b.getType() != Material.PLAYER_HEAD) { @@ -774,7 +777,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent menu.pushItem(new ItemStack(Material.BUCKET), getOutputSlots()); } - int fuelLevel = (int) (fuel.getTicks() * getFuelEfficiency()); + int fuelLevel = fuel.getTicks(); BlockStorage.addBlockInfo(b, "fuel", String.valueOf(fuelLevel)); break; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/WoodcutterAndroid.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/WoodcutterAndroid.java index f0900fa58..39cfa1ff0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/WoodcutterAndroid.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/androids/WoodcutterAndroid.java @@ -23,12 +23,12 @@ import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; -public abstract class WoodcutterAndroid extends ProgrammableAndroid { +public class WoodcutterAndroid extends ProgrammableAndroid { private static final int MAX_REACH = 160; - public WoodcutterAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, recipeType, recipe); + public WoodcutterAndroid(Category category, int tier, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, tier, item, recipeType, recipe); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoBrewer.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoBrewer.java index 50fa528f7..ab4d25641 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoBrewer.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoBrewer.java @@ -4,20 +4,16 @@ import java.util.EnumMap; import java.util.Map; import org.bukkit.Material; -import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionType; import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils; -import io.github.thebusybiscuit.cscorelib2.item.CustomItem; -import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe; -import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; @@ -58,52 +54,7 @@ public abstract class AutoBrewer extends AContainer { } @Override - protected void tick(Block b) { - BlockMenu menu = BlockStorage.getInventory(b.getLocation()); - - if (isProcessing(b)) { - int timeleft = progress.get(b); - - if (timeleft > 0) { - ChestMenuUtils.updateProgressbar(menu, 22, timeleft, processing.get(b).getTicks(), getProgressBar()); - - if (getCharge(b.getLocation()) < getEnergyConsumption()) { - return; - } - - removeCharge(b.getLocation(), getEnergyConsumption()); - progress.put(b, timeleft - 1); - } - else { - menu.replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " ")); - - for (ItemStack item : processing.get(b).getOutput()) { - menu.pushItem(item, getOutputSlots()); - } - - progress.remove(b); - processing.remove(b); - } - } - else { - MachineRecipe recipe = findRecipe(menu); - - if (recipe != null) { - if (!InvUtils.fitAll(menu.toInventory(), recipe.getOutput(), getOutputSlots())) { - return; - } - - for (int slot : getInputSlots()) { - menu.consumeItem(slot); - } - - processing.put(b, recipe); - progress.put(b, recipe.getTicks()); - } - } - } - - private MachineRecipe findRecipe(BlockMenu menu) { + protected MachineRecipe findNextRecipe(BlockMenu menu) { ItemStack input1 = menu.getItemInSlot(getInputSlots()[0]); ItemStack input2 = menu.getItemInSlot(getInputSlots()[1]); @@ -112,15 +63,15 @@ public abstract class AutoBrewer extends AContainer { } if (isPotion(input1.getType()) || isPotion(input2.getType())) { - boolean slot = isPotion(input1.getType()); - ItemStack ingredient = slot ? input2 : input1; + boolean isPotionInFirstSlot = isPotion(input1.getType()); + ItemStack ingredient = isPotionInFirstSlot ? input2 : input1; // Reject any named items if (ingredient.hasItemMeta()) { return null; } - ItemStack potionItem = slot ? input1 : input2; + ItemStack potionItem = isPotionInFirstSlot ? input1 : input2; PotionMeta potion = (PotionMeta) potionItem.getItemMeta(); ItemStack output = brew(ingredient.getType(), potionItem.getType(), potion); @@ -129,6 +80,15 @@ public abstract class AutoBrewer extends AContainer { } output.setItemMeta(potion); + + if (!InvUtils.fits(menu.toInventory(), output, getOutputSlots())) { + return null; + } + + for (int slot : getInputSlots()) { + menu.consumeItem(slot); + } + return new MachineRecipe(30, new ItemStack[] { input1, input2 }, new ItemStack[] { output }); } else { @@ -154,14 +114,14 @@ public abstract class AutoBrewer extends AContainer { else if (potionType == Material.SPLASH_POTION && input == Material.DRAGON_BREATH) { return new ItemStack(Material.LINGERING_POTION); } - else { - return null; - } - } else if (input == Material.FERMENTED_SPIDER_EYE) { - potion.setBasePotionData(new PotionData(fermentations.get(data.getType()), false, false)); - return new ItemStack(potionType); + PotionType fermented = fermentations.get(data.getType()); + + if (fermented != null) { + potion.setBasePotionData(new PotionData(fermented, false, false)); + return new ItemStack(potionType); + } } else if (input == Material.REDSTONE) { potion.setBasePotionData(new PotionData(data.getType(), true, data.isUpgraded())); @@ -171,13 +131,16 @@ public abstract class AutoBrewer extends AContainer { potion.setBasePotionData(new PotionData(data.getType(), data.isExtended(), true)); return new ItemStack(potionType); } - else if (data.getType() == PotionType.AWKWARD && potionRecipes.containsKey(input)) { - potion.setBasePotionData(new PotionData(potionRecipes.get(input), false, false)); - return new ItemStack(potionType); - } - else { - return null; + else if (data.getType() == PotionType.AWKWARD) { + PotionType potionRecipe = potionRecipes.get(input); + + if (potionRecipe != null) { + potion.setBasePotionData(new PotionData(potionRecipe, false, false)); + return new ItemStack(potionType); + } } + + return null; } /** @@ -192,14 +155,9 @@ public abstract class AutoBrewer extends AContainer { return mat == Material.POTION || mat == Material.SPLASH_POTION || mat == Material.LINGERING_POTION; } - @Override - public String getInventoryTitle() { - return "&6Auto-Brewer"; - } - @Override public ItemStack getProgressBar() { - return new ItemStack(Material.CARROT_ON_A_STICK); + return new ItemStack(Material.FISHING_ROD); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDisenchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDisenchanter.java index 5c52da238..4d78b548c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDisenchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDisenchanter.java @@ -48,11 +48,6 @@ public class AutoDisenchanter extends AContainer { super(category, item, recipeType, recipe); } - @Override - public String getInventoryTitle() { - return "&5Auto-Disenchanter"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.DIAMOND_CHESTPLATE); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDrier.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDrier.java index 43fa7d251..82a88da4f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDrier.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoDrier.java @@ -91,11 +91,6 @@ public class AutoDrier extends AContainer implements RecipeDisplayItem { } } - @Override - public String getInventoryTitle() { - return "&eAuto Drier"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.FLINT_AND_STEEL); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoEnchanter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoEnchanter.java index d77a19913..5470abfe4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoEnchanter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/AutoEnchanter.java @@ -36,11 +36,6 @@ public class AutoEnchanter extends AContainer { emeraldEnchantsLimit = SlimefunPlugin.getCfg().getInt("options.emerald-enchantment-limit"); } - @Override - public String getInventoryTitle() { - return "&5Auto-Enchanter"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.GOLDEN_CHESTPLATE); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/CarbonPress.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/CarbonPress.java index 9a865df14..943102bf0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/CarbonPress.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/CarbonPress.java @@ -37,9 +37,4 @@ public abstract class CarbonPress extends AContainer implements RecipeDisplayIte return new ItemStack(Material.DIAMOND_PICKAXE); } - @Override - public String getInventoryTitle() { - return "&cCarbon Press"; - } - } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ChargingBench.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ChargingBench.java index ae4932013..3ad79dd24 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ChargingBench.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ChargingBench.java @@ -13,17 +13,20 @@ import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; +/** + * The {@link ChargingBench} is a powered machine that can be used to charge any {@link Rechargeable} item. + * + * @author TheBusyBiscuit + * + * @see Rechargeable + * + */ public class ChargingBench extends AContainer { public ChargingBench(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } - @Override - public String getInventoryTitle() { - return "&3Charging Bench"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.GOLDEN_PICKAXE); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java index eccd31b8b..2dbdd9b4f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricDustWasher.java @@ -36,11 +36,6 @@ public abstract class ElectricDustWasher extends AContainer { oreWasher = (OreWasher) SlimefunItems.ORE_WASHER.getItem(); } - @Override - public String getInventoryTitle() { - return "&bElectric Dust Washer"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.GOLDEN_SHOVEL); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricFurnace.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricFurnace.java index c631c5ad4..91cdfdca8 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricFurnace.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricFurnace.java @@ -43,9 +43,4 @@ public abstract class ElectricFurnace extends AContainer { return new ItemStack(Material.FLINT_AND_STEEL); } - @Override - public String getInventoryTitle() { - return "&bElectric Furnace"; - } - } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricGoldPan.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricGoldPan.java index 874cc1cb6..ed863f321 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricGoldPan.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricGoldPan.java @@ -40,11 +40,6 @@ public abstract class ElectricGoldPan extends AContainer implements RecipeDispla return recipes; } - @Override - public String getInventoryTitle() { - return "&6Electric Gold Pan"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.DIAMOND_SHOVEL); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotFactory.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotFactory.java index c2c431f1a..d3be5e64b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotFactory.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotFactory.java @@ -25,9 +25,4 @@ public abstract class ElectricIngotFactory extends AContainer implements RecipeD return new ItemStack(Material.FLINT_AND_STEEL); } - @Override - public String getInventoryTitle() { - return "&cElectric Ingot Factory"; - } - } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotPulverizer.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotPulverizer.java index 3fb9aec88..36056dd21 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotPulverizer.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricIngotPulverizer.java @@ -29,11 +29,6 @@ public class ElectricIngotPulverizer extends AContainer implements RecipeDisplay super(category, item, recipeType, recipe); } - @Override - public String getInventoryTitle() { - return "&bElectric Ingot Pulverizer"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.IRON_PICKAXE); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricOreGrinder.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricOreGrinder.java index 00a943fe8..a216e7abd 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricOreGrinder.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricOreGrinder.java @@ -25,9 +25,4 @@ public abstract class ElectricOreGrinder extends AContainer implements RecipeDis return new ItemStack(Material.IRON_PICKAXE); } - @Override - public String getInventoryTitle() { - return "&bElectric Ore Grinder"; - } - } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricPress.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricPress.java index a945983cc..334985e7a 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricPress.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricPress.java @@ -19,7 +19,7 @@ public abstract class ElectricPress extends AContainer implements RecipeDisplayI @Override protected void registerDefaultRecipes() { - addRecipe(4, new CustomItem(SlimefunItems.STONE_CHUNK, 3), new ItemStack(Material.COBBLESTONE)); + addRecipe(4, new SlimefunItemStack(SlimefunItems.STONE_CHUNK, 3), new ItemStack(Material.COBBLESTONE)); addRecipe(4, new ItemStack(Material.FLINT, 6), new ItemStack(Material.COBBLESTONE)); addRecipe(5, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS_PANE, 3)); addRecipe(4, new ItemStack(Material.SNOWBALL, 4), new ItemStack(Material.SNOW_BLOCK)); @@ -30,19 +30,19 @@ public abstract class ElectricPress extends AContainer implements RecipeDisplayI addRecipe(3, new ItemStack(Material.CLAY_BALL, 4), new ItemStack(Material.CLAY)); addRecipe(6, SlimefunItems.COPPER_INGOT, new CustomItem(SlimefunItems.COPPER_WIRE, 3)); - addRecipe(16, new CustomItem(SlimefunItems.STEEL_INGOT, 8), SlimefunItems.STEEL_PLATE); - addRecipe(18, new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), SlimefunItems.REINFORCED_PLATE); + addRecipe(16, new SlimefunItemStack(SlimefunItems.STEEL_INGOT, 8), SlimefunItems.STEEL_PLATE); + addRecipe(18, new SlimefunItemStack(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), SlimefunItems.REINFORCED_PLATE); addRecipe(8, new ItemStack(Material.NETHER_WART), new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2)); - addRecipe(10, new CustomItem(SlimefunItems.MAGIC_LUMP_1, 4), SlimefunItems.MAGIC_LUMP_2); - addRecipe(12, new CustomItem(SlimefunItems.MAGIC_LUMP_2, 4), SlimefunItems.MAGIC_LUMP_3); + addRecipe(10, new SlimefunItemStack(SlimefunItems.MAGIC_LUMP_1, 4), SlimefunItems.MAGIC_LUMP_2); + addRecipe(12, new SlimefunItemStack(SlimefunItems.MAGIC_LUMP_2, 4), SlimefunItems.MAGIC_LUMP_3); addRecipe(10, new ItemStack(Material.ENDER_EYE), new CustomItem(SlimefunItems.ENDER_LUMP_1, 2)); - addRecipe(12, new CustomItem(SlimefunItems.ENDER_LUMP_1, 4), SlimefunItems.ENDER_LUMP_2); - addRecipe(14, new CustomItem(SlimefunItems.ENDER_LUMP_2, 4), SlimefunItems.ENDER_LUMP_3); + addRecipe(12, new SlimefunItemStack(SlimefunItems.ENDER_LUMP_1, 4), SlimefunItems.ENDER_LUMP_2); + addRecipe(14, new SlimefunItemStack(SlimefunItems.ENDER_LUMP_2, 4), SlimefunItems.ENDER_LUMP_3); - addRecipe(18, new CustomItem(SlimefunItems.TINY_URANIUM, 9), SlimefunItems.SMALL_URANIUM); - addRecipe(24, new CustomItem(SlimefunItems.SMALL_URANIUM, 4), SlimefunItems.URANIUM); + addRecipe(18, new SlimefunItemStack(SlimefunItems.TINY_URANIUM, 9), SlimefunItems.SMALL_URANIUM); + addRecipe(24, new SlimefunItemStack(SlimefunItems.SMALL_URANIUM, 4), SlimefunItems.URANIUM); addRecipe(4, new ItemStack(Material.QUARTZ, 4), new ItemStack(Material.QUARTZ_BLOCK)); addRecipe(4, new ItemStack(Material.IRON_NUGGET, 9), new ItemStack(Material.IRON_INGOT)); @@ -50,7 +50,7 @@ public abstract class ElectricPress extends AContainer implements RecipeDisplayI addRecipe(4, new ItemStack(Material.COAL, 9), new ItemStack(Material.COAL_BLOCK)); addRecipe(4, new ItemStack(Material.SAND, 4), new ItemStack(Material.SANDSTONE)); addRecipe(4, new ItemStack(Material.RED_SAND, 4), new ItemStack(Material.RED_SANDSTONE)); - + addRecipe(5, new ItemStack(Material.IRON_INGOT, 9), new ItemStack(Material.IRON_BLOCK)); addRecipe(5, new ItemStack(Material.GOLD_INGOT, 9), new ItemStack(Material.GOLD_BLOCK)); @@ -65,12 +65,6 @@ public abstract class ElectricPress extends AContainer implements RecipeDisplayI registerRecipe(seconds, new ItemStack[] { input }, new ItemStack[] { output }); } - @Override - public String getInventoryTitle() { - return "&eElectric Press"; - - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.IRON_HOE); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java index df30e46ca..13cacf61c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectricSmeltery.java @@ -14,6 +14,7 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.items.multiblocks.Smeltery; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenuClickHandler; @@ -28,6 +29,12 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.inventory.DirtyChestMenu; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; +/** + * The {@link ElectricSmeltery} is an electric version of the standard {@link Smeltery}. + * + * @author TheBusyBiscuit + * + */ public abstract class ElectricSmeltery extends AContainer { private static final int[] border = { 4, 5, 6, 7, 8, 13, 31, 40, 41, 42, 43, 44 }; @@ -37,7 +44,7 @@ public abstract class ElectricSmeltery extends AContainer { public ElectricSmeltery(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); - new BlockMenuPreset(getID(), getInventoryTitle()) { + new BlockMenuPreset(getID(), getItemName()) { @Override public void init() { @@ -65,8 +72,8 @@ public abstract class ElectricSmeltery extends AContainer { for (int slot : getInputSlots()) { ItemStack stack = menu.getItemInSlot(slot); - if (stack != null && SlimefunUtils.isItemSimilar(stack, item, true)) { - if (stack.getAmount() < stack.getMaxStackSize()) { + if (stack != null && SlimefunUtils.isItemSimilar(stack, item, true, false)) { + if (stack.getAmount() >= stack.getMaxStackSize()) { fullSlots++; } @@ -117,18 +124,18 @@ public abstract class ElectricSmeltery extends AContainer { @Override protected void constructMenu(BlockMenuPreset preset) { for (int i : border) { - preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), ChestMenuUtils.getEmptyClickHandler()); + preset.addItem(i, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, " "), ChestMenuUtils.getEmptyClickHandler()); } for (int i : inputBorder) { - preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), ChestMenuUtils.getEmptyClickHandler()); + preset.addItem(i, new CustomItem(Material.CYAN_STAINED_GLASS_PANE, " "), ChestMenuUtils.getEmptyClickHandler()); } for (int i : outputBorder) { - preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), ChestMenuUtils.getEmptyClickHandler()); + preset.addItem(i, new CustomItem(Material.ORANGE_STAINED_GLASS_PANE, " "), ChestMenuUtils.getEmptyClickHandler()); } - preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), ChestMenuUtils.getEmptyClickHandler()); + preset.addItem(22, new CustomItem(Material.BLACK_STAINED_GLASS_PANE, " "), ChestMenuUtils.getEmptyClickHandler()); for (int i : getOutputSlots()) { preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() { @@ -146,11 +153,6 @@ public abstract class ElectricSmeltery extends AContainer { } } - @Override - public String getInventoryTitle() { - return "&cElectric Smeltery"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.FLINT_AND_STEEL); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectrifiedCrucible.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectrifiedCrucible.java index 0b199e18c..8bd212d00 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectrifiedCrucible.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/ElectrifiedCrucible.java @@ -41,9 +41,4 @@ public abstract class ElectrifiedCrucible extends AContainer { return new ItemStack(Material.FLINT_AND_STEEL); } - @Override - public String getInventoryTitle() { - return "&4Electrified Crucible"; - } - } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodComposter.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodComposter.java index ea89ba234..8f7988af3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodComposter.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodComposter.java @@ -46,9 +46,4 @@ public abstract class FoodComposter extends AContainer implements RecipeDisplayI return new ItemStack(Material.GOLDEN_HOE); } - @Override - public String getInventoryTitle() { - return "&cFood Composter"; - } - } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodFabricator.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodFabricator.java index 2a52499e5..03fec44c6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodFabricator.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/FoodFabricator.java @@ -45,9 +45,4 @@ public abstract class FoodFabricator extends AContainer { return new ItemStack(Material.GOLDEN_HOE); } - @Override - public String getInventoryTitle() { - return "&cFood Fabricator"; - } - } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Freezer.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Freezer.java index 6bd3d0316..b04851e48 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Freezer.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Freezer.java @@ -47,11 +47,6 @@ public abstract class Freezer extends AContainer implements RecipeDisplayItem { return new ItemStack(Material.GOLDEN_PICKAXE); } - @Override - public String getInventoryTitle() { - return "&bFreezer"; - } - @Override public String getMachineIdentifier() { return "FREEZER"; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java index 383510cd4..0ea103b0b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/HeatedPressureChamber.java @@ -28,7 +28,7 @@ public abstract class HeatedPressureChamber extends AContainer { public HeatedPressureChamber(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); - new BlockMenuPreset(getID(), getInventoryTitle()) { + new BlockMenuPreset(getID(), getItemName()) { @Override public void init() { @@ -94,11 +94,6 @@ public abstract class HeatedPressureChamber extends AContainer { registerRecipe(8, new ItemStack[] { SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SALT }, new ItemStack[] { SlimefunItems.MAGNESIUM_SALT }); } - @Override - public String getInventoryTitle() { - return "&cHeated Pressure Chamber"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.FLINT_AND_STEEL); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Refinery.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Refinery.java index 2ac834f31..721f7f3ee 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Refinery.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/Refinery.java @@ -21,11 +21,6 @@ public abstract class Refinery extends AContainer implements RecipeDisplayItem { registerRecipe(40, SlimefunItems.OIL_BUCKET, SlimefunItems.FUEL_BUCKET); } - @Override - public String getInventoryTitle() { - return "&cRefinery"; - } - @Override public ItemStack getProgressBar() { return new ItemStack(Material.FLINT_AND_STEEL); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/TreeGrowthAccelerator.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/TreeGrowthAccelerator.java index 91b5a0f6c..c60345eb0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/TreeGrowthAccelerator.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/machines/TreeGrowthAccelerator.java @@ -129,7 +129,7 @@ public class TreeGrowthAccelerator extends SlimefunItem implements InventoryBloc removeCharge(machine.getLocation(), ENERGY_CONSUMPTION); sapling.setStage(sapling.getStage() + 1); - block.setBlockData(sapling); + block.setBlockData(sapling, false); inv.consumeItem(slot); block.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, block.getLocation().add(0.5D, 0.5D, 0.5D), 4, 0.1F, 0.1F, 0.1F); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/NetherStarReactor.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/NetherStarReactor.java index a181f28fe..db3f38517 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/NetherStarReactor.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/NetherStarReactor.java @@ -2,6 +2,7 @@ package io.github.thebusybiscuit.slimefun4.implementation.items.electric.reactor import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.ItemStack; @@ -44,12 +45,13 @@ public abstract class NetherStarReactor extends Reactor { @Override public void extraTick(Location l) { Slimefun.runSync(() -> { - for (Entity entity : ReactorHologram.getArmorStand(l, true).getNearbyEntities(5, 5, 5)) { - if (entity instanceof LivingEntity) { + ArmorStand hologram = ReactorHologram.getArmorStand(l, true); + for (Entity entity : hologram.getNearbyEntities(5, 5, 5)) { + if (entity instanceof LivingEntity && entity.isValid()) { ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 60, 1)); } } - }, 0L); + }); } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java index 3f13bac0e..78a3941b1 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/electric/reactors/Reactor.java @@ -26,6 +26,7 @@ import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import io.github.thebusybiscuit.slimefun4.utils.holograms.ReactorHologram; import io.github.thebusybiscuit.slimefun4.utils.holograms.SimpleHologram; +import io.github.thebusybiscuit.slimefun4.utils.itemstack.ItemStackWrapper; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; @@ -401,9 +402,11 @@ public abstract class Reactor extends AbstractEnergyProvider { boolean requiresCoolant = (processing.get(reactor).getTicks() - timeleft) % COOLANT_DURATION == 0; if (requiresCoolant) { + ItemStack coolant = new ItemStackWrapper(getCoolant()); + if (accessPort != null) { for (int slot : getCoolantSlots()) { - if (SlimefunUtils.isItemSimilar(accessPort.getItemInSlot(slot), getCoolant(), true)) { + if (SlimefunUtils.isItemSimilar(accessPort.getItemInSlot(slot), coolant, true, false)) { ItemStack remainingItem = menu.pushItem(accessPort.getItemInSlot(slot), getCoolantSlots()); accessPort.replaceExistingItem(slot, remainingItem); } @@ -411,7 +414,7 @@ public abstract class Reactor extends AbstractEnergyProvider { } for (int slot : getCoolantSlots()) { - if (SlimefunUtils.isItemSimilar(menu.getItemInSlot(slot), getCoolant(), true)) { + if (SlimefunUtils.isItemSimilar(menu.getItemInSlot(slot), coolant, true, false)) { menu.consumeItem(slot); ReactorHologram.update(reactor, "&b\u2744 &7100%"); return true; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOMiner.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOMiner.java index fe7385ed0..f6e2aaa20 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOMiner.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/geo/GEOMiner.java @@ -66,11 +66,6 @@ public abstract class GEOMiner extends AContainer implements RecipeDisplayItem { }; } - @Override - public String getInventoryTitle() { - return "&6GEO-Miner"; - } - @Override public String getMachineIdentifier() { return "GEO_MINER"; @@ -112,14 +107,14 @@ public abstract class GEOMiner extends AContainer implements RecipeDisplayItem { @Override protected void constructMenu(BlockMenuPreset preset) { for (int i : BORDER) { - preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false); + preset.addItem(i, new CustomItem(Material.GRAY_STAINED_GLASS_PANE, " "), (p, slot, item, action) -> false); } for (int i : OUTPUT_BORDER) { - preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false); + preset.addItem(i, new CustomItem(Material.ORANGE_STAINED_GLASS_PANE, " "), (p, slot, item, action) -> false); } - preset.addItem(4, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false); + preset.addItem(4, new CustomItem(Material.BLACK_STAINED_GLASS_PANE, " "), (p, slot, item, action) -> false); for (int i : getOutputSlots()) { preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() { 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 ccbaf67d6..eb55db291 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 @@ -2198,212 +2198,56 @@ public final class SlimefunItemSetup { new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET, new ItemStack(Material.RED_STAINED_GLASS), SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET}) .register(plugin); - new ProgrammableAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COAL_GENERATOR, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) { - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } + new ProgrammableAndroid(categories.androids, 1, SlimefunItems.PROGRAMMABLE_ANDROID, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COAL_GENERATOR, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) .register(plugin); - new MinerAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } + new MinerAndroid(categories.androids, 1, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new FarmerAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } + new FarmerAndroid(categories.androids, 1, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new WoodcutterAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_AXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_AXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } + new WoodcutterAndroid(categories.androids, 1, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_AXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_AXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new FisherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } + new FisherAndroid(categories.androids, 1, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new ButcherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } + new ButcherAndroid(categories.androids, 1, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new ProgrammableAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COMBUSTION_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.POWER_CRYSTAL, SlimefunItems.PLASTIC_SHEET}) { - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } + new ProgrammableAndroid(categories.androids, 2, SlimefunItems.PROGRAMMABLE_ANDROID_2, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COMBUSTION_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.POWER_CRYSTAL, SlimefunItems.PLASTIC_SHEET}) .register(plugin); - new FisherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } + new FisherAndroid(categories.androids, 2, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new ButcherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } + new ButcherAndroid(categories.androids, 2, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new AdvancedFarmerAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } + new AdvancedFarmerAndroid(categories.androids, 2, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new ProgrammableAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_3, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.NUCLEAR_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.CHEST), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BLISTERING_INGOT_3}) { - - @Override - public float getFuelEfficiency() { - return 1F; - } - - @Override - public int getTier() { - return 3; - } - - } + new ProgrammableAndroid(categories.androids, 3, SlimefunItems.PROGRAMMABLE_ANDROID_3, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.NUCLEAR_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.CHEST), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BLISTERING_INGOT_3}) .register(plugin); - new FisherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1F; - } - - @Override - public int getTier() { - return 3; - } - - } + new FisherAndroid(categories.androids, 3, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); - new ButcherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER_3, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public float getFuelEfficiency() { - return 1F; - } - - @Override - public int getTier() { - return 3; - } - - } + new ButcherAndroid(categories.androids, 3, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER_3, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(plugin); new SlimefunItem(categories.magicalResources, SlimefunItems.BLANK_RUNE, RecipeType.ANCIENT_ALTAR, 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 b6a3e7138..11485df7c 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 @@ -182,7 +182,7 @@ public class TickerTask implements Runnable { if (errors == 1) { // Generate a new Error-Report - new ErrorReport(x, l, item); + new ErrorReport<>(x, l, item); bugs.put(position, errors); } else if (errors == 4) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/HeadTexture.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/HeadTexture.java index 028d7e092..4be9f4f39 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/HeadTexture.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/HeadTexture.java @@ -88,6 +88,8 @@ public enum HeadTexture { SCRIPT_FARM_DOWN("2d4296b333d25319af3f33051797f9e6d821cd19a014fb7137beb86a4e9e96"), SCRIPT_PUSH_ITEMS("90a4dbf6625c42be57a8ba2c330954a76bdf22785540e87a5c9672685238ec"), SCRIPT_PULL_FUEL("2432f5282a50745b912be14deda581bd4a09b977a3c32d7e9578491fee8fa7"), + SCRIPT_NEW("171d8979c1878a05987a7faf21b56d1b744f9d068c74cffcde1ea1edad5852"), + SCRIPT_PAUSE("16139fd1c5654e56e9e4e2c8be7eb2bd5b499d633616663feee99b74352ad64"), GLOBE_OVERWORLD("c9c8881e42915a9d29bb61a16fb26d059913204d265df5b439b3d792acd56"), GLOBE_NETHER("d83571ff589f1a59bb02b80800fc736116e27c3dcf9efebede8cf1fdde"), GLOBE_THE_END("c6cac59b2aae489aa0687b5d802b2555eb14a40bd62b21eb116fa569cdb756"), diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/holograms/SimpleHologram.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/holograms/SimpleHologram.java index 796f50fc3..42204e421 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/holograms/SimpleHologram.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/holograms/SimpleHologram.java @@ -40,7 +40,7 @@ public final class SimpleHologram { Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5); for (Entity n : l.getChunk().getEntities()) { - if (n instanceof ArmorStand && l.distanceSquared(n.getLocation()) < 0.4D && n.getCustomName() != null) { + if (n instanceof ArmorStand && l.distanceSquared(n.getLocation()) < 0.4D && isPossibleHologram((ArmorStand) n)) { return (ArmorStand) n; } } @@ -53,6 +53,10 @@ public final class SimpleHologram { } } + private static boolean isPossibleHologram(ArmorStand armorstand) { + return armorstand.isValid() && armorstand.isSilent() && armorstand.isMarker() && !armorstand.hasGravity() && armorstand.isCustomNameVisible(); + } + public static ArmorStand create(Location l) { ArmorStand armorStand = (ArmorStand) l.getWorld().spawnEntity(l, EntityType.ARMOR_STAND); armorStand.setVisible(false); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java index 04ed50401..6df8146d0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/ItemStackWrapper.java @@ -25,10 +25,12 @@ public final class ItemStackWrapper extends ItemStack { private static final String ERROR_MESSAGE = "ItemStackWrappers are immutable and not indended for actual usage."; private final ItemMeta meta; + private final int amount; private final boolean hasItemMeta; public ItemStackWrapper(ItemStack item) { super(item.getType()); + amount = item.getAmount(); hasItemMeta = item.hasItemMeta(); if (hasItemMeta) { @@ -60,7 +62,7 @@ public final class ItemStackWrapper extends ItemStack { @Override public int getAmount() { - return 1; + return amount; } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/SlimefunGuideItem.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/SlimefunGuideItem.java new file mode 100644 index 000000000..e3ffc62e9 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/itemstack/SlimefunGuideItem.java @@ -0,0 +1,46 @@ +package io.github.thebusybiscuit.slimefun4.utils.itemstack; + +import java.util.LinkedList; +import java.util.List; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; +import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuide; +import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideImplementation; +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.implementation.guide.CheatSheetSlimefunGuide; + +/** + * This is just a helper {@link ItemStack} class for the {@link SlimefunGuide} {@link ItemStack}. + * + * @author TheBusyBiscuit + * + * @see SlimefunGuide + * @see SlimefunGuideImplementation + * + */ +public class SlimefunGuideItem extends ItemStack { + + public SlimefunGuideItem(SlimefunGuideImplementation implementation, String name) { + super(Material.ENCHANTED_BOOK); + + ItemMeta meta = getItemMeta(); + + meta.setDisplayName(ChatColors.color(name)); + + List lore = new LinkedList<>(); + + lore.add(implementation instanceof CheatSheetSlimefunGuide ? "&4&lOnly openable by Admins" : ""); + lore.add(ChatColors.color("&eRight Click &8\u21E8 &7Browse Items")); + lore.add(ChatColors.color("&eShift + Right Click &8\u21E8 &7Open Settings / Credits")); + + meta.setLore(lore); + SlimefunPlugin.getItemTextureService().setTexture(meta, "SLIMEFUN_GUIDE"); + + setItemMeta(meta); + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index fda50f104..2419ccbaf 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -18,6 +18,7 @@ import io.github.thebusybiscuit.slimefun4.core.attributes.EnergyNetComponent; import io.github.thebusybiscuit.slimefun4.core.networks.energy.EnergyNetComponentType; import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; +import io.github.thebusybiscuit.slimefun4.utils.itemstack.ItemStackWrapper; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenuClickHandler; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction; @@ -107,7 +108,9 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock, * * @return The title of the {@link Inventory} of this {@link AContainer} */ - public abstract String getInventoryTitle(); + public String getInventoryTitle() { + return getItemName(); + } /** * This method returns the {@link ItemStack} that this {@link AContainer} will @@ -256,39 +259,54 @@ public abstract class AContainer extends SlimefunItem implements InventoryBlock, } } else { - MachineRecipe r = null; - Map found = new HashMap<>(); + MachineRecipe next = findNextRecipe(inv); - for (MachineRecipe recipe : recipes) { - for (ItemStack input : recipe.getInput()) { - for (int slot : getInputSlots()) { - if (SlimefunUtils.isItemSimilar(inv.getItemInSlot(slot), input, true)) { - found.put(slot, input.getAmount()); - break; - } + if (next != null) { + processing.put(b, next); + progress.put(b, next.getTicks()); + } + } + } + + protected MachineRecipe findNextRecipe(BlockMenu inv) { + Map inventory = new HashMap<>(); + + for (int slot : getInputSlots()) { + ItemStack item = inv.getItemInSlot(slot); + + if (item != null) { + inventory.put(slot, new ItemStackWrapper(item)); + } + } + + Map found = new HashMap<>(); + + for (MachineRecipe recipe : recipes) { + for (ItemStack input : recipe.getInput()) { + for (int slot : getInputSlots()) { + if (SlimefunUtils.isItemSimilar(inventory.get(slot), input, true)) { + found.put(slot, input.getAmount()); + break; } } - if (found.size() == recipe.getInput().length) { - r = recipe; - break; - } - else { - found.clear(); - } } - if (r != null) { - if (!InvUtils.fitAll(inv.toInventory(), r.getOutput(), getOutputSlots())) { - return; + if (found.size() == recipe.getInput().length) { + if (!InvUtils.fitAll(inv.toInventory(), recipe.getOutput(), getOutputSlots())) { + return null; } for (Map.Entry entry : found.entrySet()) { inv.consumeItem(entry.getKey(), entry.getValue()); } - processing.put(b, r); - progress.put(b, r.getTicks()); + return recipe; + } + else { + found.clear(); } } + + return null; } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 35b9a48da..bad81f55d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -18,6 +18,7 @@ options: enable-translations: true log-duplicate-block-entries: true burn-players-when-radioactive: true + drop-excess-sf-give-items: false guide: default-view-book: false diff --git a/src/main/resources/languages/messages_cs.yml b/src/main/resources/languages/messages_cs.yml index 27e02840d..51b8b885b 100644 --- a/src/main/resources/languages/messages_cs.yml +++ b/src/main/resources/languages/messages_cs.yml @@ -1,240 +1,149 @@ --- -android: - scripts: - already-uploaded: "&4Tento script byl již nahrán." - editor: Editor skriptu - enter-name: - - - - "&eProsíme, zadejte název vašeho scriptu" - instructions: - ATTACK_ANIMALS: "&4Útoč na &czvířata" - ATTACK_ANIMALS_ADULT: "&4Útoč na &czvířata&7[Dospělá]" - ATTACK_MOBS: "&4Útoč na &cnepřátelské moby" - ATTACK_MOBS_ANIMALS: "&4Útoč na &cnepřátelské moby a zvířata" - CATCH_FISH: "&bRybař" - CHOP_TREE: "&cPokácej a zasaď" - DIG_DOWN: "&bKopej dolů" - DIG_FORWARD: "&bKopej dopředu" - DIG_UP: "&bKopej nahoru" - FARM_DOWN: "&bSkliď a zasaď &7(Blok pod)" - FARM_EXOTIC_DOWN: "&bSkliď a zasaď &7(Blok pod + Pokročilé)" - FARM_EXOTIC_FORWARD: "&bSkliď a zasaď &7(Pokročilé)" - FARM_FORWARD: "&bSkliď a zasaď" - GO_DOWN: "&7Posuň se dolů" - GO_FORWARD: "&7Posuň se vpřed" - GO_UP: "&7Posuň se nahoru" - INTERFACE_FUEL: "&cVyndej palivo z rozhraní přední strany" - INTERFACE_ITEMS: "&9Přesuň obsah inventáře do rozhraní na přední straně" - MOVE_AND_DIG_DOWN: "&bPosuň se a zároveň kopej dolů" - MOVE_AND_DIG_FORWARD: "&bPosuň se a zároveň kopej dopředu" - MOVE_AND_DIG_UP: "&bPosuň se a zároveň kopej nahoru" - REPEAT: "&9Opakovat Script" - START: "&2Začít Script" - TURN_LEFT: "&7Otoč se doleva" - TURN_RIGHT: "&7Otoč se doprava" - WAIT: "&ePočkej 0.5s" - rating: - already: "&4K tomuto scriptu jsi již zanechal hlasování!" - own: "&4Nemůžeš hodnotit vlastní script!" - uploaded: - - "&bNahrávání..." - - "&aTvůj script byl úspěšně nahrán!" - started: "&7Tvůj Android právě začal používat jemu přidělený script" - stopped: "&7Tvůj Android pozastavil jemu přidělený script" -backpack: - already-open: "&cOmlouváme se, tento batoh je otevřený již někde jinde!" - no-stack: "&cNemůžeš stackovat batohy" commands: + help: Zobrazí tuto nápovědu cheat: Umožňuje nacheatovat věci give: Dejte někomu nějaké Slimefun věci guide: Dá vám Slimefun příručku - help: Zobrazí tuto nápovědu + timings: Lag-Info vašeho serveru + teleporter: "Zobrazí \nznačky \nostatních hráčů" + versions: Seznam všech nainstalovaných doplňků + search: Vyhledá ve vaší příručce daný příkaz open_guide: Otevře Slimefun příručku bez použití knihy + stats: Ukáže statistiky hráče research: description: Odemkne/Resetuje výzkum daného hráče reset: "&cResetoval jsi výzkum hráče %player%" reset-target: "&cTvoje znalost byla resetována " - search: Vyhledá ve vaší příručce daný příkaz - stats: Ukáže statistiky hráče - teleporter: "Zobrazí \nznačky \nostatních hráčů" - timings: Lag-Info vašeho serveru - versions: Seznam všech nainstalovaných doplňků backpack: - player-never-joined: "&4Hráče s tímto jménem nelze nalézt!" description: Načíst kopii existujícího batohu invalid-id: "&4Id nesmí být záporné!" + player-never-joined: "&4Hráče s tímto jménem nelze nalézt!" backpack-does-not-exist: "&4Určený batoh neexistuje!" restored-backpack-given: "&aTvůj batoh byl obnoven a navrácen do tvého inventáře!" -gps: - geo: - scan-required: "&4GEO-Scan je požadován! &cProzkoumejte tento chunk pomocí GEO-Scanneru!" - insufficient-complexity: - - "&4Nedostatečná komplexita GPS Networku: &c%complexity%" - - "&4a) Nemáš nastavený GPS Network" - - "&4b) TvůjGPS Network není dostatečně komplexní" - waypoint: - added: "&aÚspěšně přidán nový waypoint" - max: "&4Dosáhl jsi maxima waypointů" - new: "&eProsím, zadejte název waypointu do chatu. &7(Barvy jsou podporovány!)" - deathpoint: "&4Bod úmrtí &7%date%" guide: - back: - guide: Zpět do Slimefun Guide - settings: Zpět do Settings Panel - title: Zpět + search: + message: "&bCo bys chtěl vyhledat?" + name: "&7Hledat..." + tooltip: "&bKliknutím vyhledejte položku" + inventory: 'Hledání: %item%' + lore: + - "&bCo bys chtěl vyhledat?" + - "&7Napiš do chatu co chceš vyhledat" cheat: no-multiblocks: "&4Nemůžeš podvádět v multiblocích, musíš je postavit!" + languages: + updated: "&aTvůj jazyk byl úspěšně nastaven na: &b%lang%" + translations: + name: "&aChybí zde něco?" + lore: Klikni pro přidání vlastního překladu + select: Klikni pro vybrání jazyka + select-default: Klikni pro vybrání výchozího jazyka + selected-language: 'Aktuálně vybráno:' + change: Klikni pro výběr nového jazyka + description: + - "&7Nyní máš možnost to změnit" + - "&7jazyk, ve kterém bude Slimefun" + - "&7bude ti představeno. Předměty" + - "&7nelze prozatím přeložit." + title: + main: Slimefun příručka + settings: Nastavení a informace + languages: Zvol tvůj preferovaný jazyk + credits: Slimefun4 pomocníci + wiki: Slimefun4 Wiki + addons: Addony pro Slimefun4 + bugs: Nahlášení chyb + source: Zdrojový kód + versions: Nainstalovaná verze credits: commits: Commits - profile-link: Klikni pro navštívení jejich profilu na GitHubu roles: developer: "&6Vývojář" + wiki: "&3Wiki správce" resourcepack: "&cTvůrce Resourcepacku" translator: "&9Překladač" - wiki: "&3Wiki správce" - languages: - select: Klikni pro vybrání jazyka - selected-language: 'Aktuálně vybráno:' - translations: - lore: Klikni pro přidání vlastního překladu - name: "&aChybí zde něco?" - updated: "&aTvůj jazyk byl úspěšně nastaven na: &b%lang%" - select-default: Klikni pro vybrání výchozího jazyka + profile-link: Klikni pro navštívení jejich profilu na GitHubu + open: Klikni pro zobrazení našich spoluúčastníků + description: + - "&7Slimefun je open-source projekt" + - "&7a udržován velkou komunitou lidí." + - "&Přes&e%contributors% &7lidí na tom pracovalo" + - "&7Slimefun za všechny ty roky." + pages: + previous: Předchozí strana + next: Následující strana + tooltips: + open-category: Klikni pro otevření + versions-notice: To jsou velmi důležité při hlášení chyb! + wiki: Zobrazit tento předmět na oficiální SlimeFun Wiki + recipes: + machine: Recepty vytvářené tímto strojem + miner: Materiály, které můžeš získat tímto těžebním robotem + generator: Dostupné typy paliv + gold-pan: Materiály, které můžeš získat + back: + title: Zpět + guide: Zpět do Slimefun Guide + settings: Zpět do Settings Panel locked: ZAMČENO locked-category: - Chcete-li odemknout tuto kategorii, budete - 'je třeba odemknout všechny položky z ' - následující kategorie - pages: - next: Následující strana - previous: Předchozí strana - search: - inventory: 'Hledání: %item%' - lore: - - "&bCo bys chtěl vyhledat?" - - "&7Napiš do chatu co chceš vyhledat" - message: "&bCo bys chtěl vyhledat?" - name: "&7Hledat..." - tooltip: "&bKliknutím vyhledejte položku" - title: - addons: Addony pro Slimefun4 - bugs: Nahlášení chyb - credits: Slimefun4 pomocníci - main: Slimefun příručka - settings: Nastavení a informace - source: Zdrojový kód - wiki: Slimefun4 Wiki - languages: Zvol tvůj preferovaný jazyk - tooltips: - open-category: Klikni pro otevření - recipes: - generator: Dostupné typy paliv - gold-pan: Materiály, které můžeš získat - machine: Recepty vytvářené tímto strojem - miner: Materiály, které můžeš získat tímto těžebním robotem - wiki: Zobrazit tento předmět na oficiální SlimeFun Wiki - versions-notice: To jsou velmi důležité při hlášení chyb! -inventory: - no-access: "&4Nemáš přístup k tomuto bloku" -languages: - af: Afrikánština - ar: Arabština - bg: Bulharština - cs: Čeština - da: Dánština - de: Němčina - el: Řečtina - en: Angličtina - es: Španělština - fa: Perština - fi: Finština - fr: Francouzština - he: Hebrejština - hu: Maďarština - id: Indonéština - it: Italština - ja: Japonština - ko: Korejština - lv: Lotyština - ms: Malajština - nl: Holandština - 'no': Norština - pl: Polština - pt: Portugalština (Portugalsko) - pt-BR: Portugalština (Brazílie) - ro: Rumunština - ru: Ruština - sk: Slovenština - sv: Švédština - th: Thajština - tr: Turečtina - uk: Ukrajinština - vi: Vietnamština - zh-CN: Čínština (Čína) - zh-TW: Čínština (Taiwan) - hr: Chorvatština - sr: Srbština - be: Běloruština - mk: Makedonština -machines: - ANCIENT_ALTAR: - not-enough-pedestals: "&4Altáři chybí podstavce &c(%pedestals% / 8)" - unknown-catalyst: "&4Neznámý katalyst. &cPoužij správný recept!" - unknown-recipe: "&4Neznámý recept! &cPoužij správný recept!" - CARGO_NODES: - must-be-placed: "&4Musí být umístěn na truhlu nebo stroj!" - ELEVATOR: - click-to-teleport: "&eKliknutím &7se teleportuješ na toto patro:" - current-floor: "&eAktuální patro:" - enter-name: "&7Prosím, zadejte název podlaží do chatu. &r(Barvy jsou podporovány!)" - named: "&2Podlaží úspěšně pojmenováno na: &r%floor%" - no-destinations: "&4Žádné destinace nebyly nalezeny" - pick-a-floor: "&3- Vyber si patro -" - full-inventory: "&eOmlouvám se, můj inventář je plný." - GPS_CONTROL_PANEL: - title: GPS - Kontrolní panel - transmitters: Přehled vysílačů - waypoints: Přehled waypointů - HOLOGRAM_PROJECTOR: - enter-text: "&7Napiš do chatu zprávu, kterou chceš, aby Hologram ukazoval. &r(Barvy - jsou podporovány!)" - inventory-title: Editor hologramu - in-use: "&cInventář tohoto bloku je právě otevřen jiným hráčem" - pattern-not-found: "&eOmlouvám se, ale nerozpoznal jsem tento recept. Dej do dispenseru - předměty tak, aby odpovídaly receptu." - TELEPORTER: - cancelled: "&4Teleportace zrušena!" - gui: - time: Předpokládaný čas - title: Vaše waypointy - tooltip: Klikněte pro teleportaci - invulnerability: "&b&lZískal jsi 30 sekund nezranitelnosti!" - teleported: "&3Teleportace dokončena!" - teleporting: "&3Teleportuji..." - unknown-material: "&eOmlouvám se, ale nepoznal jsem předmět v dispenseru. Dej tam - něco, co znám." - wrong-item: "&eOmlouvám se, ale nerozpoznal jsem předmět, se kterým jsi na mě kliknul. - Zkontroluj recept a koukni se, jaké předměty můžeš použít." - ignition-chamber-no-flint: "&cIgnition Chamberu chybí křesadlo." - ANCIENT_PEDESTAL: - obstructed: "&4Podstavce jsou zablokované! &cOdstraň cokoliv nad podstavcema!" - INDUSTRIAL_MINER: - no-fuel: "&cTvému průmyslovému horníku došlo palivo! Vložte palivo do bedny nad." - piston-facing: "&cTvůj průmyslový horník potřebuje píst směřující nahoru!" - piston-space: "&cDva písty potřebují prázdný blok nad nimi!" - destroyed: "&cZdá se, váš průmysloví horník byl rozbit." - already-running: "&cTento průmyslový horník již běží!" - full-chest: "&cBedna vašeho průmyslového horníka je plná!" - no-permission: "&4Zdá se, nemáte oprávnění používat průmyslového horníka zde!" - finished: "&eVáš průmysloví horník dokončil práci! Získal %ores% hornin!" + work-in-progress: Tato funkce ještě není zcela dokončena! messages: - cannot-place: "&cZde nemůžeš položit blok!" - diet-cookie: "&eZačínáš se cítit velice lehký..." + not-researched: "&4Ještě jsi nepostoupil tak daleko, abys pochopil tuhle věc" + not-enough-xp: "&4Nemáš dostatek XP levelů na to, abys vyzkoumal tuhle věc" + unlocked: '&bMáš vyzkoumáno &7"%research%"' + only-players: "&4Tenhle příkaz je jenom pro hráče" + unknown-player: "&4Neznámý hráč: &c%player%" + no-permission: "&4Na tohle nemáš dostatečné povolení" + usage: "&4Použití: &c%usage%" + not-online: "&4%player% &czrovna není připojen!" + not-valid-item: "&4%item% &cnení platný item!" + not-valid-amount: "&4%amount% &cnení platné číslo : musí být větší než 0!" + given-item: '&bDostal jsi &a%amount% &7"%item%&7"' + give-item: '&bDal jsi %player% &a%amount% &7"%item%&7"' + not-valid-research: "&4%research% &cnení platný výzkum!" + give-research: '&bUdělil jsi %player% výzkum &7"%research%&7"' + hungry: "&cJsi moc hladový na to, abys to zvládl!" disabled-in-world: "&4&lTahle věc není v tomhle světě povolená" disabled-item: |- &4&lTahle věc není povolená! Jak jsi ji vůbec dostal? + no-tome-yourself: "&cNemůžeš použít svůj &4Tome of Knowledge &c..." + multimeter: "&bEnergie: &3%stored% &b/ &3%capacity%" + talisman: + anvil: "&a&oTvůj talisman zachránil tvůj nástroj od rozbití" + miner: "&a&oTvůj talisman zdvojnásobil tvoje dropy" + hunter: "&a&oTvůj talisman zdvojnásobil tvoje dropy" + lava: "&a&oTvůj talisman tě zachránil před uhořením" + water: "&a&oTvůj talisman tě zachránil před utopením" + angel: "&a&oTvůj talisman tě zachránil před poškození pádem" + fire: "&a&oTvůj talisman tě zachránil před uhořením" + magician: "&a&oTvůj talisman ti dal přídavné enchanty" + traveller: "&a&oTvůj talisman ti dal rychlost" + warrior: "&a&oTvůj talisman ti dal efekt síly na nějakou tu chvíli" + knight: "&a&oTvůj talisman ti dal 5 vteřin regenerace" + whirlwind: "&a&oTvůj talisman odrazil projektil" + wizard: "&a&oTvůj talisman ti dal větší level Štěstí, ale možná snížil level jiných + enchantů" + soulbound-rune: + fail: "&cKe své duši můžeš přidat jen jeden předmět." + success: "&aÚspěšně jsi přidal tento item ke své duši. Pokud zemřeš, item ti zůstane." + research: + start: "&7Antičtí duchové šeptají magické slova do tvého ucha..." + progress: "&7Začal jsi přemýšlet nad &b%research% &e(%progress%)" fire-extinguish: "&7Uhasil ses" + cannot-place: "&cZde nemůžeš položit blok!" + no-pvp: "&cZde nemůžeš bojovat s hráči!" + radiation: "&4Byl jsi vystaven smrtelné radiaci! &cVyhoď radioaktivní předmět nebo + si obleč Hazmat oblek." + opening-guide: "&bOtevírání příručky, může to pár sekund trvat..." + opening-backpack: "&bOtevírání batohu, může to pár sekund trvat..." + no-iron-golem-heal: "&cTo není Iron Ingot! S tímto nemůžeš léčit Iron Golemy!" + link-prompt: "&eKlikni zde:" + diet-cookie: "&eZačínáš se cítit velice lehký..." fortune-cookie: - "&7POMOOC!! Jsem uvězněn v továrně na sušenky štěstí!" - "&7Zítra zemřeš... s láskou od pana Creepera" @@ -247,55 +156,183 @@ messages: - "&742. Odpověď je 42." - "&7Walshy udrží den problémy pryč." - "&7Nikdy nekopej pod sebe!" - give-item: '&bDal jsi %player% &a%amount% &7"%item%&7"' - given-item: '&bDostal jsi &a%amount% &7"%item%&7"' - give-research: '&bUdělil jsi %player% výzkum &7"%research%&7"' - hungry: "&cJsi moc hladový na to, abys to zvládl!" - link-prompt: "&eKlikni zde:" + - "&7To je jen rána masa!" + - "&7Vždy se podívejte na světlou stránku života!" + - "&7Tohle byl vlastně Biscuit a ne Cookie" + - "&7Neonové cedule jsou LIT!" + piglin-barter: "&4Nemůžete měnit s pigliny Slimefun předměty" + enchantment-rune: + fail: "&cNemůžeš enchantovat tento předmět" + no-enchantment: "&cPro tento předmět nelze najít žádný vhodný enchant." + success: "&aÚspěšně jsi na tento předmět daů náhodný enchant." + tape-measure: + no-anchor: "&cMusíš nastavit kotvu než začneš měřit! " + wrong-world: "&cTvoje kotva je pravděpodobně v jiném světa!" + distance: "&7Měření zahájeno. &eVzdálenost: %distance%" + anchor-set: "&aÚspěšně nastavena kotva:&e %anchor%" + multi-tool: + mode-change: "&b%device% mód změněn na: &9%mode%" + not-shears: "&cMulti Tool nemůže být použit jako nůžky!" mode-change: "&b%device% mód změněn na: &9%mode%" - multimeter: "&bEnergie: &3%stored% &b/ &3%capacity%" - no-iron-golem-heal: "&cTo není Iron Ingot! S tímto nemůžeš léčit Iron Golemy!" - no-permission: "&4Na tohle nemáš dostatečné povolení" - no-pvp: "&cZde nemůžeš bojovat s hráči!" - not-enough-xp: "&4Nemáš dostatek XP levelů na to, abys vyzkoumal tuhle věc" - no-tome-yourself: "&cNemůžeš použít svůj &4Tome of Knowledge &c..." - not-online: "&4%player% &czrovna není připojen!" - not-researched: "&4Ještě jsi nepostoupil tak daleko, abys pochopil tuhle věc" - not-valid-amount: "&4%amount% &cnení platné číslo : musí být větší než 0!" - not-valid-item: "&4%item% &cnení platný item!" - not-valid-research: "&4%research% &cnení platný výzkum!" - only-players: "&4Tenhle příkaz je jenom pro hráče" - opening-backpack: "&bOtevírání batohu, může to pár sekund trvat..." - opening-guide: "&bOtevírání příručky, může to pár sekund trvat..." - radiation: "&4Byl jsi vystaven smrtelné radiaci! &cVyhoď radioaktivní předmět nebo - si obleč Hazmat oblek." - research: - progress: "&7Začal jsi přemýšlet nad &b%research% &e(%progress%)" - start: "&7Antičtí duchové šeptají magické slova do tvého ucha..." - soulbound-rune: - fail: "&cKe své duši můžeš přidat jen jeden předmět." - success: "&aÚspěšně jsi přidal tento item ke své duši. Pokud zemřeš, item ti zůstane." - talisman: - angel: "&a&oTvůj talisman tě zachránil před poškození pádem" - anvil: "&a&oTvůj talisman zachránil tvůj nástroj od rozbití" - fire: "&a&oTvůj talisman tě zachránil před uhořením" - hunter: "&a&oTvůj talisman zdvojnásobil tvoje dropy" - knight: "&a&oTvůj talisman ti dal 5 vteřin regenerace" - lava: "&a&oTvůj talisman tě zachránil před uhořením" - magician: "&a&oTvůj talisman ti dal přídavné enchanty" - miner: "&a&oTvůj talisman zdvojnásobil tvoje dropy" - traveller: "&a&oTvůj talisman ti dal rychlost" - warrior: "&a&oTvůj talisman ti dal efekt síly na nějakou tu chvíli" - water: "&a&oTvůj talisman tě zachránil před utopením" - whirlwind: "&a&oTvůj talisman odrazil projektil" - wizard: "&a&oTvůj talisman ti dal větší level Štěstí, ale možná snížil level jiných - enchantů" - unknown-player: "&4Neznámý hráč: &c%player%" - unlocked: '&bMáš vyzkoumáno &7"%research%"' - usage: "&4Použití: &c%usage%" -miner: - no-ores: "&eOmlouvám se, nemohu najít rudy v okolí!" -workbench: - not-enhanced: "&4Nemůžeš použít itemy ze Slimefunu v normální výrobě" +machines: + pattern-not-found: "&eOmlouvám se, ale nerozpoznal jsem tento recept. Dej do dispenseru + předměty tak, aby odpovídaly receptu." + unknown-material: "&eOmlouvám se, ale nepoznal jsem předmět v dispenseru. Dej tam + něco, co znám." + wrong-item: "&eOmlouvám se, ale nerozpoznal jsem předmět, se kterým jsi na mě kliknul. + Zkontroluj recept a koukni se, jaké předměty můžeš použít." + full-inventory: "&eOmlouvám se, můj inventář je plný." + in-use: "&cInventář tohoto bloku je právě otevřen jiným hráčem" + ignition-chamber-no-flint: "&cIgnition Chamberu chybí křesadlo." + ANCIENT_ALTAR: + not-enough-pedestals: "&4Altáři chybí podstavce &c(%pedestals% / 8)" + unknown-catalyst: "&4Neznámý katalyst. &cPoužij správný recept!" + unknown-recipe: "&4Neznámý recept! &cPoužij správný recept!" + ANCIENT_PEDESTAL: + obstructed: "&4Podstavce jsou zablokované! &cOdstraň cokoliv nad podstavcema!" + HOLOGRAM_PROJECTOR: + enter-text: "&7Napiš do chatu zprávu, kterou chceš, aby Hologram ukazoval. &r(Barvy + jsou podporovány!)" + inventory-title: Editor hologramu + ELEVATOR: + no-destinations: "&4Žádné destinace nebyly nalezeny" + pick-a-floor: "&3- Vyber si patro -" + current-floor: "&eAktuální patro:" + click-to-teleport: "&eKliknutím &7se teleportuješ na toto patro:" + enter-name: "&7Prosím, zadejte název podlaží do chatu. &r(Barvy jsou podporovány!)" + named: "&2Podlaží úspěšně pojmenováno na: &r%floor%" + TELEPORTER: + teleporting: "&3Teleportuji..." + teleported: "&3Teleportace dokončena!" + cancelled: "&4Teleportace zrušena!" + invulnerability: "&b&lZískal jsi 30 sekund nezranitelnosti!" + gui: + title: Vaše waypointy + tooltip: Klikněte pro teleportaci + time: Předpokládaný čas + CARGO_NODES: + must-be-placed: "&4Musí být umístěn na truhlu nebo stroj!" + GPS_CONTROL_PANEL: + title: GPS - Kontrolní panel + transmitters: Přehled vysílačů + waypoints: Přehled waypointů + INDUSTRIAL_MINER: + no-fuel: "&cTvému průmyslovému horníku došlo palivo! Vložte palivo do bedny nad." + piston-facing: "&cTvůj průmyslový horník potřebuje píst směřující nahoru!" + piston-space: "&cDva písty potřebují prázdný blok nad nimi!" + destroyed: "&cZdá se, váš průmysloví horník byl rozbit." + already-running: "&cTento průmyslový horník již běží!" + full-chest: "&cBedna vašeho průmyslového horníka je plná!" + no-permission: "&4Zdá se, nemáte oprávnění používat průmyslového horníka zde!" + finished: "&eVáš průmysloví horník dokončil práci! Získal %ores% hornin!" anvil: not-working: "&4Předměty ze Slimefunu nelze použít v kovadlině!" +backpack: + already-open: "&cOmlouváme se, tento batoh je otevřený již někde jinde!" + no-stack: "&cNemůžeš stackovat batohy" +workbench: + not-enhanced: "&4Nemůžeš použít itemy ze Slimefunu v normální výrobě" +gps: + deathpoint: "&4Bod úmrtí &7%date%" + waypoint: + new: "&eProsím, zadejte název waypointu do chatu. &7(Barvy jsou podporovány!)" + added: "&aÚspěšně přidán nový waypoint" + max: "&4Dosáhl jsi maxima waypointů" + duplicate: "&4Již jsi vytvořil waypoint pojmenovaný: &f%waypoint%" + insufficient-complexity: + - "&4Nedostatečná komplexita GPS Networku: &c%complexity%" + - "&4a) Nemáš nastavený GPS Network" + - "&4b) TvůjGPS Network není dostatečně komplexní" + geo: + scan-required: "&4GEO-Scan je požadován! &cProzkoumejte tento chunk pomocí GEO-Scanneru!" +inventory: + no-access: "&4Nemáš přístup k tomuto bloku" +android: + started: "&7Tvůj Android právě začal používat jemu přidělený script" + stopped: "&7Tvůj Android pozastavil jemu přidělený script" + scripts: + already-uploaded: "&4Tento script byl již nahrán." + instructions: + START: "&2Začít Script" + REPEAT: "&9Opakovat Script" + WAIT: "&ePočkej 0.5s" + GO_FORWARD: "&7Posuň se vpřed" + GO_UP: "&7Posuň se nahoru" + GO_DOWN: "&7Posuň se dolů" + TURN_LEFT: "&7Otoč se doleva" + TURN_RIGHT: "&7Otoč se doprava" + DIG_UP: "&bKopej nahoru" + DIG_FORWARD: "&bKopej dopředu" + DIG_DOWN: "&bKopej dolů" + MOVE_AND_DIG_UP: "&bPosuň se a zároveň kopej nahoru" + MOVE_AND_DIG_FORWARD: "&bPosuň se a zároveň kopej dopředu" + MOVE_AND_DIG_DOWN: "&bPosuň se a zároveň kopej dolů" + ATTACK_MOBS_ANIMALS: "&4Útoč na &cnepřátelské moby a zvířata" + ATTACK_MOBS: "&4Útoč na &cnepřátelské moby" + ATTACK_ANIMALS: "&4Útoč na &czvířata" + ATTACK_ANIMALS_ADULT: "&4Útoč na &czvířata&7[Dospělá]" + CHOP_TREE: "&cPokácej a zasaď" + CATCH_FISH: "&bRybař" + FARM_FORWARD: "&bSkliď a zasaď" + FARM_DOWN: "&bSkliď a zasaď &7(Blok pod)" + FARM_EXOTIC_FORWARD: "&bSkliď a zasaď &7(Pokročilé)" + FARM_EXOTIC_DOWN: "&bSkliď a zasaď &7(Blok pod + Pokročilé)" + INTERFACE_ITEMS: "&9Přesuň obsah inventáře do rozhraní na přední straně" + INTERFACE_FUEL: "&cVyndej palivo z rozhraní přední strany" + enter-name: + - + - "&eProsíme, zadejte název vašeho scriptu" + uploaded: + - "&bNahrávání..." + - "&aTvůj script byl úspěšně nahrán!" + rating: + own: "&4Nemůžeš hodnotit vlastní script!" + already: "&4K tomuto scriptu jsi již zanechal hlasování!" + editor: Editor skriptu +languages: + default: Výchozí-serverový + en: Angličtina + de: Němčina + fr: Francouzština + it: Italština + es: Španělština + pl: Polština + sv: Švédština + nl: Holandština + cs: Čeština + hu: Maďarština + lv: Lotyština + ru: Ruština + sk: Slovenština + zh-TW: Čínština (Taiwan) + vi: Vietnamština + id: Indonéština + zh-CN: Čínština (Čína) + el: Řečtina + he: Hebrejština + pt: Portugalština (Portugalsko) + pt-BR: Portugalština (Brazílie) + ar: Arabština + af: Afrikánština + da: Dánština + fi: Finština + uk: Ukrajinština + ms: Malajština + 'no': Norština + ja: Japonština + fa: Perština + th: Thajština + ro: Rumunština + bg: Bulharština + ko: Korejština + tr: Turečtina + hr: Chorvatština + mk: Makedonština + sr: Srbština + be: Běloruština +brewing_stand: + not-working: "&4Nemůžeš používat Slimefun předměty ve varném stojanu!" +villagers: + no-trading: "&4Nemůžeš měnit Slimefun předměty s vesničany!" +miner: + no-ores: "&eOmlouvám se, nemohu najít rudy v okolí!" diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/commands/TestResearchCommand.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/commands/TestResearchCommand.java index db30d05b6..7afd2665d 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/commands/TestResearchCommand.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/commands/TestResearchCommand.java @@ -5,6 +5,7 @@ import org.bukkit.entity.Player; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import be.seeseemelk.mockbukkit.MockBukkit; @@ -14,7 +15,7 @@ import io.github.thebusybiscuit.slimefun4.core.researching.Research; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; -public class TestResearchCommand { +class TestResearchCommand { private static ServerMock server; @@ -39,7 +40,8 @@ public class TestResearchCommand { } @Test - public void testResearchAll() throws InterruptedException { + @DisplayName("Test /sf research all") + void testResearchAll() throws InterruptedException { SlimefunPlugin.getRegistry().setResearchingEnabled(true); Player player = server.addPlayer(); PlayerProfile profile = TestUtilities.awaitProfile(player); @@ -51,7 +53,8 @@ public class TestResearchCommand { } @Test - public void testResearchSpecific() throws InterruptedException { + @DisplayName("Test /sf research ") + void testResearchSpecific() throws InterruptedException { SlimefunPlugin.getRegistry().setResearchingEnabled(true); Player player = server.addPlayer(); PlayerProfile profile = TestUtilities.awaitProfile(player); @@ -63,7 +66,8 @@ public class TestResearchCommand { } @Test - public void testResearchReset() throws InterruptedException { + @DisplayName("Test /sf research reset") + void testResearchReset() throws InterruptedException { SlimefunPlugin.getRegistry().setResearchingEnabled(true); Player player = server.addPlayer(); PlayerProfile profile = TestUtilities.awaitProfile(player); diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/guide/TestGuideOpening.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/guide/TestGuideOpening.java index e23c39d06..ad56c6df6 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/guide/TestGuideOpening.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/guide/TestGuideOpening.java @@ -8,6 +8,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -22,7 +23,7 @@ import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -public class TestGuideOpening { +class TestGuideOpening { private static ServerMock server; private static SlimefunPlugin plugin; @@ -48,14 +49,16 @@ public class TestGuideOpening { } @Test - public void testOpenMainMenu() throws InterruptedException { + @DisplayName("Test if the Slimefun Guide Main Menu can be opened from the History") + void testOpenMainMenu() throws InterruptedException { SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class); PlayerProfile profile = prepare(guide, history -> {}); Mockito.verify(guide).openMainMenu(profile, 1); } @Test - public void testOpenCategory() throws InterruptedException { + @DisplayName("Test if a Category can be opened from the History") + void testOpenCategory() throws InterruptedException { Category category = new Category(new NamespacedKey(plugin, "history_category"), new CustomItem(Material.BLUE_TERRACOTTA, "&9Testy test")); SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class); @@ -64,7 +67,8 @@ public class TestGuideOpening { } @Test - public void testOpenSlimefunItem() throws InterruptedException { + @DisplayName("Test if a SlimefunItem can be viewed from the History") + void testOpenSlimefunItem() throws InterruptedException { SlimefunItem item = TestUtilities.mockSlimefunItem(plugin, "OPEN_SLIMEFUN_ITEM", new CustomItem(Material.PRISMARINE_SHARD, "&5Some Shard I guess")); SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class); @@ -73,7 +77,8 @@ public class TestGuideOpening { } @Test - public void testOpenItemStack() throws InterruptedException { + @DisplayName("Test if an ItemStack can be viewed from the History") + void testOpenItemStack() throws InterruptedException { ItemStack item = new ItemStack(Material.REDSTONE_BLOCK); SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class); @@ -82,7 +87,8 @@ public class TestGuideOpening { } @Test - public void testOpenSearch() throws InterruptedException { + @DisplayName("Test if the Slimefun Search can be opened from the History") + void testOpenSearch() throws InterruptedException { String query = "electric"; SlimefunGuideImplementation guide = Mockito.mock(SlimefunGuideImplementation.class); @@ -91,7 +97,8 @@ public class TestGuideOpening { } @Test - public void testGoBack() throws InterruptedException { + @DisplayName("Test if the Back button works") + void testGoBack() throws InterruptedException { Player player = server.addPlayer(); String query = "electric"; diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestItemSetup.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestItemSetup.java index bd4a15362..0f1f17e92 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestItemSetup.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/TestItemSetup.java @@ -10,6 +10,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; @@ -24,7 +25,7 @@ import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; import me.mrCookieSlime.Slimefun.Objects.Category; @TestMethodOrder(value = OrderAnnotation.class) -public class TestItemSetup { +class TestItemSetup { private static SlimefunPlugin plugin; @@ -42,7 +43,8 @@ public class TestItemSetup { @Test @Order(value = 1) - public void testForExceptions() { + @DisplayName("Test whether SlimefunItemSetup.setup() throws any Exceptions") + void testForExceptions() { // Not really ideal but still important to test. // Item amount is variable, so we can't test for that. // We are really only concerned about any runtime exceptions here. @@ -54,16 +56,18 @@ public class TestItemSetup { @Test @Order(value = 2) - public void testWikiSetup() { + @DisplayName("Test whether PostSetup.setupWiki() throws any Exceptions") + void testWikiSetup() { Assertions.assertDoesNotThrow(() -> PostSetup.setupWiki()); } @Test @Order(value = 3) - public void testCategoryTranslations() throws IOException { + @DisplayName("Test whether every Category is added to the translation files") + void testCategoryTranslations() throws IOException { try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/categories_en.yml"), StandardCharsets.UTF_8))) { FileConfiguration config = YamlConfiguration.loadConfiguration(reader); - + for (Category category : SlimefunPlugin.getRegistry().getCategories()) { String path = category.getKey().getNamespace() + '.' + category.getKey().getKey(); Assertions.assertTrue(config.contains(path)); diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestDeathpointListener.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestDeathpointListener.java index 625d9b0b6..f028fa366 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestDeathpointListener.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestDeathpointListener.java @@ -4,6 +4,7 @@ import org.bukkit.entity.Player; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import be.seeseemelk.mockbukkit.MockBukkit; @@ -14,7 +15,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.implementation.listeners.DeathpointListener; import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; -public class TestDeathpointListener { +class TestDeathpointListener { private static SlimefunPlugin plugin; private static ServerMock server; @@ -32,7 +33,8 @@ public class TestDeathpointListener { } @Test - public void testNoTransmitter() throws InterruptedException { + @DisplayName("Test Deathpoint not triggering when no Emergency Transmitter is found") + void testNoTransmitter() throws InterruptedException { Player player = server.addPlayer(); TestUtilities.awaitProfile(player); @@ -41,7 +43,8 @@ public class TestDeathpointListener { } @Test - public void testTransmitter() throws InterruptedException { + @DisplayName("Test Emergency Transmitter creating a new Waypoint") + void testTransmitter() throws InterruptedException { Player player = server.addPlayer(); TestUtilities.awaitProfile(player); player.getInventory().setItem(8, SlimefunItems.GPS_EMERGENCY_TRANSMITTER.clone()); diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestNetworkListener.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestNetworkListener.java index 0fbb6a86e..9506c80af 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestNetworkListener.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/listeners/TestNetworkListener.java @@ -10,6 +10,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -20,7 +21,7 @@ import io.github.thebusybiscuit.slimefun4.core.networks.NetworkManager; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.implementation.listeners.NetworkListener; -public class TestNetworkListener { +class TestNetworkListener { private static SlimefunPlugin plugin; private static NetworkListener listener; @@ -40,7 +41,8 @@ public class TestNetworkListener { } @Test - public void testBlockBreak() { + @DisplayName("Test Network updates on Block breaking") + void testBlockBreak() { World world = server.addSimpleWorld("Simple Network Listener World"); Location l = new Location(world, 3000, 120, -500); @@ -53,7 +55,8 @@ public class TestNetworkListener { } @Test - public void testBlockPlace() { + @DisplayName("Test Network updates on Block placing") + void testBlockPlace() { World world = server.addSimpleWorld("Simple Network Listener World"); Location l = new Location(world, 3000, 120, -500); Location l2 = new Location(world, 3000, 121, -500); diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestRecipeService.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestRecipeService.java index 1ec2cc558..56ff6c85a 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestRecipeService.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestRecipeService.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ShapelessRecipe; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import be.seeseemelk.mockbukkit.MockBukkit; @@ -23,7 +24,7 @@ import io.github.thebusybiscuit.cscorelib2.recipes.RecipeSnapshot; import io.github.thebusybiscuit.slimefun4.core.services.MinecraftRecipeService; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; -public class TestRecipeService { +class TestRecipeService { private static ServerMock server; private static SlimefunPlugin plugin; @@ -40,7 +41,8 @@ public class TestRecipeService { } @Test - public void testRecipe() { + @DisplayName("Test getting a Minecraft Recipe for an ItemStack result") + void testRecipe() { MinecraftRecipeService service = new MinecraftRecipeService(plugin); NamespacedKey key = new NamespacedKey(plugin, "furnace_recipe_test"); @@ -59,7 +61,8 @@ public class TestRecipeService { } @Test - public void testNoRecipes() { + @DisplayName("Test getting no Minecraft Recipes for uncraftable items or null") + void testNoRecipes() { MinecraftRecipeService service = new MinecraftRecipeService(plugin); service.refresh(); @@ -68,7 +71,8 @@ public class TestRecipeService { } @Test - public void testFurnaceOutput() { + @DisplayName("Test if furnace recipes are handled correctly") + void testFurnaceOutput() { MinecraftRecipeService service = new MinecraftRecipeService(plugin); NamespacedKey key = new NamespacedKey(plugin, "furnace_recipe_test2"); @@ -95,7 +99,8 @@ public class TestRecipeService { } @Test - public void testBigShapedRecipe() { + @DisplayName("Test Shaped Recipes on a 3x3 grid") + void testBigShapedRecipe() { MinecraftRecipeService service = new MinecraftRecipeService(plugin); NamespacedKey key = new NamespacedKey(plugin, "shaped_recipe_9"); @@ -112,7 +117,8 @@ public class TestRecipeService { } @Test - public void testSmallShapedRecipe() { + @DisplayName("Test Shaped Recipes on a 2x2 grid") + void testSmallShapedRecipe() { MinecraftRecipeService service = new MinecraftRecipeService(plugin); NamespacedKey key = new NamespacedKey(plugin, "shaped_recipe_4"); @@ -129,7 +135,8 @@ public class TestRecipeService { } @Test - public void testShapelessRecipeShape() { + @DisplayName("Test shapeless Recipes") + void testShapelessRecipeShape() { MinecraftRecipeService service = new MinecraftRecipeService(plugin); Assertions.assertThrows(IllegalArgumentException.class, () -> service.getRecipeShape(null)); @@ -146,7 +153,8 @@ public class TestRecipeService { } @Test - public void testSubscriptions() { + @DisplayName("Test the Recipe Subscription Service") + void testSubscriptions() { MinecraftRecipeService service = new MinecraftRecipeService(plugin); AtomicReference reference = new AtomicReference<>(); diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestUpdaterService.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestUpdaterService.java index 19f0eedb6..740d6e4c8 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestUpdaterService.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/services/TestUpdaterService.java @@ -5,6 +5,7 @@ import java.io.File; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import be.seeseemelk.mockbukkit.MockBukkit; @@ -12,7 +13,7 @@ import io.github.thebusybiscuit.slimefun4.api.SlimefunBranch; import io.github.thebusybiscuit.slimefun4.core.services.UpdaterService; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; -public class TestUpdaterService { +class TestUpdaterService { private static SlimefunPlugin plugin; @@ -30,7 +31,8 @@ public class TestUpdaterService { } @Test - public void testDevelopmentBuilds() { + @DisplayName("Test if the development branch is recognized correctly") + void testDevelopmentBuilds() { UpdaterService service = new UpdaterService(plugin, "DEV - 131 (git 123456)", file); Assertions.assertEquals(SlimefunBranch.DEVELOPMENT, service.getBranch()); Assertions.assertTrue(service.getBranch().isOfficial()); @@ -39,7 +41,8 @@ public class TestUpdaterService { } @Test - public void testStableBuilds() { + @DisplayName("Test if the stable branch is recognized correctly") + void testStableBuilds() { UpdaterService service = new UpdaterService(plugin, "RC - 6 (git 123456)", file); Assertions.assertEquals(SlimefunBranch.STABLE, service.getBranch()); Assertions.assertTrue(service.getBranch().isOfficial()); @@ -48,7 +51,8 @@ public class TestUpdaterService { } @Test - public void testUnofficialBuilds() { + @DisplayName("Test if an unofficial build is recognized correctly") + void testUnofficialBuilds() { UpdaterService service = new UpdaterService(plugin, "4.20 UNOFFICIAL", file); Assertions.assertEquals(SlimefunBranch.UNOFFICIAL, service.getBranch()); Assertions.assertFalse(service.getBranch().isOfficial()); @@ -56,7 +60,8 @@ public class TestUpdaterService { } @Test - public void testUnknownBuilds() { + @DisplayName("Test if unknown builds are caught") + void testUnknownBuilds() { UpdaterService service = new UpdaterService(plugin, "I am special", file); Assertions.assertEquals(SlimefunBranch.UNKNOWN, service.getBranch()); Assertions.assertFalse(service.getBranch().isOfficial());