diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000..b5f887ab6 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,41 @@ +# Slimefun Community Guidelines + +Slimefun is a community project, everyone is welcome to open Issues, make Pull Requests or make Pull Requests for an opened Issue. +Without your help, this project is going to die. + +## General Guidelines + +Rules for all types of posts: + +1. Follow our Templates for Issues and Pull Request, they are designed to tell you what exact Information we need and how you should present it to us. +2. Be nice and give constructive critism. Insulting, Harassment, Racism, Sexism or any form of bullying or discrimination is not tolerated. +3. Try to engage in conversations by pointing out scenarios to replicate Issues, providing fix approaches or other kind of help. +4. Advertisement is inappropriate and will be removed, especially advertisement for Minecraft Servers is completely unaccepted. + +## GitHub Issues + +Rules for posting an Issue on GitHub: + +1. This Issue Section is ONLY for Slimefun-related Issues, Issues about other Plugins or Slimefun Addons should not be posted here. +2. Check other Issues before posting to make sure you are not posting a duplicate. +3. Do not put any Tags inside your title like [IMPORTANT], [URGENT] or [SUGGESTION]. Try to be professional by making your title as short as possible, we will assign it the required labels if necessary. +4. Do not post your Issue more than once, this is considered spam and does not benefit our community in any way. Do not repost your Issue if it was closed either. +5. Give us all available information right away, it may be a bit of time-wasting for us to keep asking for more Info. And this includes any Information to reproduce your Issue step-by-step. +6. Check whether there are newer versions available than the ones you are using, it might be that your Issue has been fixed already. +7. All text logs must be posted via a link to http://pastebin.com or similiar websites. +8. Please read the [FAQ Section](#frequently-asked-questions) before posting. + +Your Issue will be CLOSED WITHOUT WARNING if we think you violated these Rules. + +## Pull Requests + +Guidelines for making a Pull Request on GitHub: + +1. Try to be reasonable with your additions. No, a Bacon flavoured unicorn that flies on a rainbow while dancing Gangnam Style is NOT a reasonable addition to this Project. +2. Try to make your values configurable in the config.yml / Items.yml or any additional file. This may not be necessary at every instance but it does give the end-users a way to customize their experience. +3. If your Pull Request is made in response to an Issue opened on GitHub, comment on that Issue and reference your Pull Request to show that you are proposing a fix for it. + +## Frequently Asked Questions + +### Slimefun does not work!? +> Install CS-CoreLib... diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..059836237 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,16 @@ +## Description +Describe your Issue AS DETAILED AS POSSIBLE. + +## Server Log +Upload your FULL SERVER LOG (/logs/latest.log) to http://pastebin.com/ and paste your link in here. +Without this File, we may not be able to help you at all. + +## Evidence / Proof +Attach as many Screenshots or Videos if possible. +Anything that helps us understand the Issue better, is gonna get your Issue fixed even faster. + +## Environment +We need the EXACT VERSIONS of the Software you are using. +This includes your Minecraft Version, your CS-CoreLib version and your Slimefun Version. +If you cannot figure out what versions you are running, then please run /sf versions and +show us the output of that command. diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..95063ed91 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/bin/ +.classpath +.project +/.settings/ \ No newline at end of file diff --git a/EXTERNAL_LIBRARIES.md b/EXTERNAL_LIBRARIES.md index cb1df8e4f..24a9e60db 100644 --- a/EXTERNAL_LIBRARIES.md +++ b/EXTERNAL_LIBRARIES.md @@ -6,4 +6,5 @@ This Project was built using the following external Libraries: * CraftBukkit 1.10 * WorldEdit v6.1.1 * CS-CoreLib v1.5.2 -* EmeraldEnchants v2.0 \ No newline at end of file +* EmeraldEnchants v2.0 +* CoreProtect v2.14.2 \ No newline at end of file diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md deleted file mode 100644 index 8bbdf0d4f..000000000 --- a/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,21 +0,0 @@ -!!! BEFORE POSTING !!! - -1. Do not adress Issues that don't regard Slimefun, even Issues about Slimefun Addons are not allowed to be posted here. -2. Make sure to check other Issues before posting yours, we do not want any duplicates! -3. Please don't put Tags like [IMPORTANT] or [BUG], [QUESTION] or anything similiar in your title. -4. Your Issue will be CLOSED WITHOUT WARNING if you do not match the above mentioned criteria. - -## Description -Describe your Issue AS DETAILED AS POSSIBLE. - -## Server Log -Please upload your FULL SERVER LOG (/logs/latest.log) to http://pastebin.com/ and paste your link in here. -Without this File, we may not be able to help you at all. - -## Evidence / Proof -Attach as many Screenshots or Videos if possible. -Anything that helps us understand the Issue better, is gonna get your Issue fixed even faster. - -## Environment -Please state what Version of Minecraft, CS-CoreLib and Slimefun you're using -"latest" is not enough, we need the EXACT VERSIONS. diff --git a/README.md b/README.md index 031406ed5..a59414e05 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,7 @@ Check the license for more Info on redistributing and modifying Slimefun 4. ### Contributors -Here is a list of all people who contributed to Slimefun 4 by submitting Code. -I will keep this list updated myself, please don't edit it yourself. - -* TheBusyBiscuit -* John000708 -* st392 -* DeathlyPanda -* BlackBeltPanda -* Poslovitch -* alekso56 -* NathanAdhitya +[Here is a list of all people who contributed to Slimefun 4 by submitting Code.](https://github.com/TheBusyBiscuit/Slimefun4/graphs/contributors) ## Wiki diff --git a/src/me/mrCookieSlime/CSCoreLibSetup/CSCoreLibLoader.java b/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java similarity index 73% rename from src/me/mrCookieSlime/CSCoreLibSetup/CSCoreLibLoader.java rename to src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java index 765db59cf..62053b2f8 100644 --- a/src/me/mrCookieSlime/CSCoreLibSetup/CSCoreLibLoader.java +++ b/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java @@ -1,149 +1,152 @@ -package me.mrCookieSlime.CSCoreLibSetup; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; - -import org.bukkit.plugin.Plugin; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.JSONValue; - -public class CSCoreLibLoader { - - Plugin plugin; - URL url; - URL download; - File file; - - public CSCoreLibLoader(Plugin plugin) { - this.plugin = plugin; - try { - this.url = new URL("https://api.curseforge.com/servermods/files?projectIds=88802"); - } catch (MalformedURLException e) { - } - } - - public boolean load() { - if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) return true; - else { - System.err.println(" "); - System.err.println("#################### - FATAL ERROR - ####################"); - System.err.println(" "); - System.err.println(plugin.getName() + " could not be properly installed!"); - System.err.println("It appears that you have not installed CS-CoreLib"); - System.err.println("And because of that, CS-CoreLib is now going to be"); - System.err.println("downloaded and installed."); - System.err.println("But for the time being " + plugin.getName() + " will remain disabled"); - System.err.println("After the installation process has finished,"); - System.out.println("you will be asked to restart your Server."); - System.err.println("- mrCookieSlime"); - System.err.println(" "); - System.err.println("#################### - FATAL ERROR - ####################"); - System.err.println(" "); - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - - @Override - public void run() { - if (connect()) install(); - } - }, 10L); - return false; - } - } - - private boolean connect() { - try { - final URLConnection connection = this.url.openConnection(); - connection.setConnectTimeout(5000); - connection.addRequestProperty("User-Agent", "CS-CoreLib Loader (by mrCookieSlime)"); - connection.setDoOutput(true); - - final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - final JSONArray array = (JSONArray) JSONValue.parse(reader.readLine()); - download = traceURL(((String) ((JSONObject) array.get(array.size() - 1)).get("downloadUrl")).replace("https:", "http:")); - file = new File("plugins/" + (String) ((JSONObject) array.get(array.size() - 1)).get("name") + ".jar"); - - return true; - } catch (IOException e) { - System.err.println(" "); - System.err.println("#################### - FATAL ERROR - ####################"); - System.err.println(" "); - System.err.println("Could not connect to BukkitDev, is it down?"); - System.err.println(" "); - System.err.println("#################### - FATAL ERROR - ####################"); - System.err.println(" "); - return false; - } - } - - private URL traceURL(String location) throws IOException { - HttpURLConnection connection = null; - - while (true) { - URL url = new URL(location); - connection = (HttpURLConnection) url.openConnection(); - - connection.setInstanceFollowRedirects(false); - connection.setConnectTimeout(5000); - connection.addRequestProperty("User-Agent", "Auto Updater (by mrCookieSlime)"); - - switch (connection.getResponseCode()) { - case HttpURLConnection.HTTP_MOVED_PERM: - case HttpURLConnection.HTTP_MOVED_TEMP: - String loc = connection.getHeaderField("Location"); - location = new URL(new URL(location), loc).toExternalForm(); - continue; - } - break; - } - - return connection.getURL(); - } - - private void install() { - BufferedInputStream input = null; - FileOutputStream output = null; - try { - input = new BufferedInputStream(download.openStream()); - output = new FileOutputStream(file); - - final byte[] data = new byte[1024]; - int read; - while ((read = input.read(data, 0, 1024)) != -1) { - output.write(data, 0, read); - } - } catch (Exception ex) { - System.err.println(" "); - System.err.println("#################### - FATAL ERROR - ####################"); - System.err.println(" "); - System.err.println("Could not download CS-CoreLib"); - System.err.println(" "); - System.err.println("#################### - FATAL ERROR - ####################"); - System.err.println(" "); - } finally { - try { - if (input != null) input.close(); - if (output != null) output.close(); - System.err.println(" "); - System.err.println("#################### - WARNING - ####################"); - System.err.println(" "); - System.err.println("Please restart your Server to finish the Installation"); - System.err.println("of " + plugin.getName() + " and CS-CoreLib"); - System.err.println(" "); - System.err.println("#################### - WARNING - ####################"); - System.err.println(" "); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - -} +package me.mrCookieSlime.Slimefun.CSCoreLibSetup; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; + +import org.bukkit.plugin.Plugin; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +public class CSCoreLibLoader { + + Plugin plugin; + URL url; + URL download; + File file; + + public CSCoreLibLoader(Plugin plugin) { + this.plugin = plugin; + try { + this.url = new URL("https://api.curseforge.com/servermods/files?projectIds=88802"); + } catch (MalformedURLException e) { + } + } + + public boolean load() { + if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) return true; + else { + System.err.println(" "); + System.err.println("#################### - INFO - ####################"); + System.err.println(" "); + System.err.println(plugin.getName() + " could not be loaded."); + System.err.println("It appears that you have not installed CS-CoreLib"); + System.err.println("Your Server will now try to download and install"); + System.err.println("CS-CoreLib for you."); + System.err.println("You will be asked to restart your Server when it's finished."); + System.err.println("If this somehow fails, please download and install CS-CoreLib manually:"); + System.err.println("https://dev.bukkit.org/projects/cs-corelib"); + System.err.println(" "); + System.err.println("#################### - INFO - ####################"); + System.err.println(" "); + plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + + @Override + public void run() { + if (connect()) install(); + } + }, 10L); + return false; + } + } + + private boolean connect() { + try { + final URLConnection connection = this.url.openConnection(); + connection.setConnectTimeout(5000); + connection.addRequestProperty("User-Agent", "CS-CoreLib Loader (by mrCookieSlime)"); + connection.setDoOutput(true); + + final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + final JSONArray array = (JSONArray) JSONValue.parse(reader.readLine()); + download = traceURL(((String) ((JSONObject) array.get(array.size() - 1)).get("downloadUrl")).replace("https:", "http:")); + file = new File("plugins/" + (String) ((JSONObject) array.get(array.size() - 1)).get("name") + ".jar"); + + return true; + } catch (IOException e) { + System.err.println(" "); + System.err.println("#################### - WARNING - ####################"); + System.err.println(" "); + System.err.println("Could not connect to BukkitDev."); + System.err.println("Please download & install CS-CoreLib manually:"); + System.err.println("https://dev.bukkit.org/projects/cs-corelib"); + System.err.println(" "); + System.err.println("#################### - WARNING - ####################"); + System.err.println(" "); + return false; + } + } + + private URL traceURL(String location) throws IOException { + HttpURLConnection connection = null; + + while (true) { + URL url = new URL(location); + connection = (HttpURLConnection) url.openConnection(); + + connection.setInstanceFollowRedirects(false); + connection.setConnectTimeout(5000); + connection.addRequestProperty("User-Agent", "Auto Updater (by mrCookieSlime)"); + + switch (connection.getResponseCode()) { + case HttpURLConnection.HTTP_MOVED_PERM: + case HttpURLConnection.HTTP_MOVED_TEMP: + String loc = connection.getHeaderField("Location"); + location = new URL(new URL(location), loc).toExternalForm(); + continue; + } + break; + } + + return new URL(connection.getURL().toString().replaceAll(" ", "%20")); + } + + private void install() { + BufferedInputStream input = null; + FileOutputStream output = null; + try { + input = new BufferedInputStream(download.openStream()); + output = new FileOutputStream(file); + + final byte[] data = new byte[1024]; + int read; + while ((read = input.read(data, 0, 1024)) != -1) { + output.write(data, 0, read); + } + } catch (Exception ex) { + System.err.println(" "); + System.err.println("#################### - WARNING - ####################"); + System.err.println(" "); + System.err.println("Failed to download CS-CoreLib"); + System.err.println("Please download & install CS-CoreLib manually:"); + System.err.println("https://dev.bukkit.org/projects/cs-corelib"); + System.err.println(" "); + System.err.println("#################### - WARNING - ####################"); + System.err.println(" "); + } finally { + try { + if (input != null) input.close(); + if (output != null) output.close(); + System.err.println(" "); + System.err.println("#################### - INFO - ####################"); + System.err.println(" "); + System.err.println("Please restart your Server to finish the Installation"); + System.err.println("of " + plugin.getName() + " and CS-CoreLib"); + System.err.println(" "); + System.err.println("#################### - INFO - ####################"); + System.err.println(" "); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java b/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java index d21f715f2..4b75cb48d 100644 --- a/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java +++ b/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java @@ -18,9 +18,11 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.plugin.Plugin; +import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable; import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.CommandHelp; import me.mrCookieSlime.CSCoreLibPlugin.general.Player.Players; +import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder; import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType; import me.mrCookieSlime.Slimefun.SlimefunGuide; @@ -152,21 +154,34 @@ public class SlimefunCommand implements CommandExecutor, Listener { } else if (args[0].equalsIgnoreCase("versions")) { if (sender.hasPermission("slimefun.command.versions")|| sender instanceof ConsoleCommandSender) { + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a" + Bukkit.getName() + " &2" + ReflectionUtils.getVersion())); + sender.sendMessage(""); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aCS-CoreLib &2v" + CSCoreLib.getLib().getDescription().getVersion())); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aSlimefun &2v" + plugin.getDescription().getVersion())); sender.sendMessage(""); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&oInstalled Addons:")); + + List addons = new ArrayList(); + for (Plugin plugin: Bukkit.getPluginManager().getPlugins()) { if (plugin.getDescription().getDepend().contains("Slimefun") || plugin.getDescription().getSoftDepend().contains("Slimefun")) { if (Bukkit.getPluginManager().isPluginEnabled(plugin)) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', " &a" + plugin.getName() + " &2v" + plugin.getDescription().getVersion())); + addons.add(ChatColor.translateAlternateColorCodes('&', " &a" + plugin.getName() + " &2v" + plugin.getDescription().getVersion())); } else { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', " &c" + plugin.getName() + " &4v" + plugin.getDescription().getVersion())); + addons.add(ChatColor.translateAlternateColorCodes('&', " &c" + plugin.getName() + " &4v" + plugin.getDescription().getVersion())); } } } + + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Installed Addons &8(" + addons.size() + ")")); + + for (String addon: addons) { + sender.sendMessage(addon); + } + } + else { + Messages.local.sendTranslation(sender, "messages.no-permission", true); } - else Messages.local.sendTranslation(sender, "messages.no-permission", true); } else if (args[0].equalsIgnoreCase("give")) { if (args.length == 3) { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java new file mode 100644 index 000000000..7d074ddff --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java @@ -0,0 +1,18 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; + +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; + +public class SlimefunBackpack extends SlimefunItem { + + public int size; + + public SlimefunBackpack(int size, Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, name, recipeType, recipe); + + this.size = size; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index bf2b692f5..0aa812b1f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -59,6 +59,7 @@ public class SlimefunItem { Set itemhandlers; URID urid; boolean ticking = false; + boolean addon = false; BlockTicker ticker; EnergyTicker energy; @@ -173,6 +174,7 @@ public class SlimefunItem { } public void register(boolean slimefun) { + addon = !slimefun; try { if (recipe.length < 9) recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null}; all.add(this); @@ -251,6 +253,7 @@ public class SlimefunItem { if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; + else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi; } return null; @@ -469,4 +472,8 @@ public class SlimefunItem { public void addWikipage(String page) { Slimefun.addWikiPage(this.getName(), "https://github.com/mrCookieSlime/Slimefun4/wiki/" + page); } + + public boolean isAddonItem() { + return this.addon; + } } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundBackpack.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundBackpack.java new file mode 100644 index 000000000..2f01346bb --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundBackpack.java @@ -0,0 +1,17 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; + +import org.bukkit.inventory.ItemStack; + +public class SoulboundBackpack extends SlimefunBackpack { + + public SoulboundBackpack(int size, Category category, ItemStack item, String name, ItemStack[] recipe) { + super(size, category, item, name, RecipeType.MAGIC_WORKBENCH, recipe); + } + public SoulboundBackpack(int size, Category category, ItemStack item, String name, RecipeType type, ItemStack[] recipe) { + super(size, category, item, name, type, recipe); + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/VanillaItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/VanillaItem.java new file mode 100644 index 000000000..3355dba1c --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/VanillaItem.java @@ -0,0 +1,13 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; + +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; + +public class VanillaItem extends SlimefunItem { + + public VanillaItem(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, name, recipeType, recipe); + } +} diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index 6a5b408e8..72ff5a1b0 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -6,17 +6,18 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; + import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; - -import org.bukkit.Material; -import org.bukkit.entity.EntityType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; public class SlimefunManager { @@ -38,7 +39,7 @@ public class SlimefunManager { } } - public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, boolean slimefun) { + public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, boolean slimefun, boolean vanilla) { String[] components = new String[] {"_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS"}; Category cat = Categories.ARMOR; List recipes = new ArrayList(); @@ -47,7 +48,11 @@ public class SlimefunManager { recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); recipes.add(new ItemStack[] {null, null, null, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); for (int i = 0; i < 4; i++) { - new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + if (vanilla) { + new VanillaItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + } else { + new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + } } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 1567fa5d2..766364fef 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1,19 +1,23 @@ package me.mrCookieSlime.Slimefun.Setup; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.UUID; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.*; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.*; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Chest; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.Dispenser; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Arrow; @@ -81,14 +85,17 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SolarHelmet; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; @@ -101,7 +108,38 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BowShootHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemInteractionHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.MultiBlockInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AdvancedCargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AnimalGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoAnvil; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoBreeder; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoDisenchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutomatedCraftingChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CarbonPress; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoInputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ChargingBench; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CropGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricDustWasher; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricFurnace; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricGoldPan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricIngotFactory; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricSmeltery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectrifiedCrucible; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FluidPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodComposter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodFabricator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Freezer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HeatedPressureChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.NetherDrill; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OilPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Refinery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.WitherAssembler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; +import me.mrCookieSlime.Slimefun.api.Backpacks; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; @@ -167,18 +205,84 @@ public class SlimefunSetup { boolean craft = true; for (int j = 0; j < inv.getContents().length; j++) { if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - craft = false; - break; + if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + craft = false; + break; + } + } + else { + craft = false; + break; + } } } + if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)).clone(); if (Slimefun.hasUnlocked(p, adding, true)) { Inventory inv2 = Bukkit.createInventory(null, 9, "test"); for (int j = 0; j < inv.getContents().length; j++) { inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); } if (InvUtils.fits(inv2, adding)) { + SlimefunItem sfItem = SlimefunItem.getByItem(adding); + + if (sfItem instanceof SlimefunBackpack) { + ItemStack backpack = null; + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { + backpack = inv.getContents()[j]; + break; + } + } + } + } + String id = ""; + int size = ((SlimefunBackpack) sfItem).size; + + if (backpack != null) { + for (String line: backpack.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); + cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); + cfg.save(); + break; + } + } + } + + if (id.equals("")) { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + else { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", id)); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + } + + for (int j = 0; j < 9; j++) { if (inv.getContents()[j] != null) { if (inv.getContents()[j].getType() != Material.AIR) { @@ -189,6 +293,7 @@ public class SlimefunSetup { } } p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + inv.addItem(adding); } else Messages.local.sendTranslation(p, "machines.full-inventory", true); @@ -735,11 +840,11 @@ public class SlimefunSetup { SlimefunManager.registerArmorSet(new ItemStack(Material.GLOWSTONE), new ItemStack[] {SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS}, "GLOWSTONE", new PotionEffect[][] {new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}}, true, true); - SlimefunManager.registerArmorSet(SlimefunItems.DAMASCUS_STEEL_INGOT, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}, "DAMASCUS_STEEL", true); + SlimefunManager.registerArmorSet(SlimefunItems.DAMASCUS_STEEL_INGOT, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}, "DAMASCUS_STEEL", true, false); - SlimefunManager.registerArmorSet(SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS}, "REINFORCED_ALLOY", true); + SlimefunManager.registerArmorSet(SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS}, "REINFORCED_ALLOY", true, false); - SlimefunManager.registerArmorSet(new ItemStack(Material.CACTUS), new ItemStack[] {SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_LEGGINGS, SlimefunItems.CACTUS_BOOTS}, "CACTUS", true); + SlimefunManager.registerArmorSet(new ItemStack(Material.CACTUS), new ItemStack[] {SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_LEGGINGS, SlimefunItems.CACTUS_BOOTS}, "CACTUS", true, false); new Alloy(SlimefunItems.REINFORCED_ALLOY_INGOT, "REINFORCED_ALLOY_INGOT", new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.GOLD_24K, null, null, null}) @@ -1411,7 +1516,7 @@ public class SlimefunSetup { new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.THIN_GLASS), null, null, null, null, null}) .register(true); - SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true); + SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true, true); new Talisman(SlimefunItems.TALISMAN_WHIRLWIND, "WHIRLWIND_TALISMAN", new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_TRAVELLER, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3} @@ -1467,7 +1572,7 @@ public class SlimefunSetup { new ItemStack[] {SlimefunItems.HEAVY_CREAM, SlimefunItems.SALT, null, null, null, null, null, null, null}) .register(true); - SlimefunManager.registerArmorSet(SlimefunItems.GILDED_IRON, new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}, "GILDED_IRON", true); + SlimefunManager.registerArmorSet(SlimefunItems.GILDED_IRON, new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}, "GILDED_IRON", true, false); new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.SCUBA_HELMET, "SCUBA_HELMET", RecipeType.ARMOR_FORGE, new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new ItemStack(Material.THIN_GLASS), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, null, null}, @@ -1515,7 +1620,7 @@ public class SlimefunSetup { new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.FERROSILICON, SlimefunItems.HARDENED_METAL_INGOT, null, null, null, null, null}) .register(true); - SlimefunManager.registerArmorSet(SlimefunItems.GOLD_12K, new ItemStack[] {SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS}, "GOLD_12K", true); + SlimefunManager.registerArmorSet(SlimefunItems.GOLD_12K, new ItemStack[] {SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS}, "GOLD_12K", true, false); new SlimefunItem(Categories.MISC, SlimefunItems.CLOTH, "CLOTH", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.WOOL), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CLOTH, 8)) @@ -2161,19 +2266,19 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(9, Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_6K, new ItemStack(Material.CHEST), SlimefunItems.GOLD_6K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(18, Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_10K, SlimefunItems.BACKPACK_SMALL, SlimefunItems.GOLD_10K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_14K, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.GOLD_14K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(36, Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CLOTH, null, SlimefunItems.CLOTH, SlimefunItems.GOLD_16K, SlimefunItems.BACKPACK_LARGE, SlimefunItems.GOLD_16K, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) .register(true); @@ -2336,7 +2441,7 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunBackpack(45, Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K, new ItemStack(Material.LEATHER), SlimefunItems.WOVEN_BACKPACK, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K}) .register(true); @@ -2360,7 +2465,7 @@ public class SlimefunSetup { new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_EARTH, SlimefunItems.NECROTIC_SKULL, SlimefunItems.RUNE_FIRE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_WATER, SlimefunItems.ENDER_LUMP_3}) .register(true); - new SoulboundItem(Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK", + new SoulboundBackpack(36, Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK", new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.GILDED_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2}) .register(true); @@ -2375,12 +2480,12 @@ public class SlimefunSetup { .register(true); new JetBoots(SlimefunItems.BILLON_JETBOOTS, "BILLON_JETBOOTS", - new ItemStack[] {null, null, SlimefunItems.BILLON_INGOT, null, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + new ItemStack[] {null, null, null, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, 0.45) .register(true); new JetBoots(SlimefunItems.STEEL_JETBOOTS, "STEEL_JETBOOTS", - new ItemStack[] {null, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + new ItemStack[] {null, null, null, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, 0.5) .register(true); @@ -2477,7 +2582,7 @@ public class SlimefunSetup { Block b = block.getBlock(); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); for (ItemStack drop: b.getDrops()) { - b.getWorld().dropItemNaturally(b.getLocation(), b.getType().toString().endsWith("_ORE") ? new CustomItem(drop, fortune): drop); + b.getWorld().dropItemNaturally(b.getLocation(), (!drop.getType().isBlock()) ? new CustomItem(drop, fortune): drop); } b.setType(Material.AIR); } @@ -4242,7 +4347,7 @@ public class SlimefunSetup { new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, new ItemStack(Material.FEATHER), SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3}) .register(true); - new SlimefunItem(Categories.MAGIC, SlimefunItems.ELYTRA, "ELYTRA", RecipeType.ANCIENT_ALTAR, + new VanillaItem(Categories.MAGIC, SlimefunItems.ELYTRA, "ELYTRA", RecipeType.ANCIENT_ALTAR, new ItemStack[] {SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, new ItemStack(Material.LEATHER_CHESTPLATE), SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE}) .register(true); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java index b6ca0d87a..7d57c116a 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/WikiSetup.java @@ -218,6 +218,15 @@ public class WikiSetup { Slimefun.addOfficialWikiPage("SOLAR_GENERATOR_4", "Solar-Generator"); Slimefun.addOfficialWikiPage("AUTO_ENCHANTER", "Auto-Enchanter"); Slimefun.addOfficialWikiPage("AUTO_DISENCHANTER", "Auto-Disenchanter"); + + //Cargo Management + Slimefun.addOfficialWikiPage("CARGO_MOTOR", "Cargo-Motor"); + Slimefun.addOfficialWikiPage("CARGO_MANAGER", "Cargo-Manager"); + Slimefun.addOfficialWikiPage("CARGO_NODE", "Cargo-Nodes"); + Slimefun.addOfficialWikiPage("CARGO_INPUT", "Cargo-Nodes"); + Slimefun.addOfficialWikiPage("CARGO_OUTPUT", "Cargo-Nodes"); + Slimefun.addOfficialWikiPage("CARGO_OUTPUT_ADVANCED", "Cargo-Nodes"); + Slimefun.addOfficialWikiPage("TRASH_CAN", "Trash-Can"); } } diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index f1f3bc6ea..70a56cf92 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -861,7 +861,7 @@ public class SlimefunGuide { if (survival && !Slimefun.hasUnlocked(p, sfitem.getItem(), false) && sfitem.getResearch() != null) { if (Slimefun.hasPermission(p, sfitem, false)) { final int cost = SlimefunStartup.getResearchCfg().getInt(sfitem.getResearch().getID() + ".cost"); - menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), 0, new String[] {"&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + cost + " Level"})); + menu.addItem(index, new CustomItem(Material.BARRIER, "&r" + StringUtils.formatItemName(sfitem.getItem(), false), 0, new String[] {"&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + cost + " Level"})); menu.addMenuClickHandler(index, new MenuClickHandler() { @Override diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java index 4184e62b6..9dafc6126 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java @@ -1,26 +1,9 @@ package me.mrCookieSlime.Slimefun; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; -import net.coreprotect.CoreProtect; -import net.coreprotect.CoreProtectAPI; import org.bukkit.Bukkit; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -37,10 +20,9 @@ import org.bukkit.scheduler.BukkitRunnable; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; -import me.mrCookieSlime.CSCoreLibPlugin.general.Clock; import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils; -import me.mrCookieSlime.CSCoreLibSetup.CSCoreLibLoader; import me.mrCookieSlime.Slimefun.AncientAltar.Pedestals; +import me.mrCookieSlime.Slimefun.CSCoreLibSetup.CSCoreLibLoader; import me.mrCookieSlime.Slimefun.Commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.Commands.SlimefunTabCompleter; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; @@ -55,6 +37,7 @@ import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; import me.mrCookieSlime.Slimefun.Setup.Files; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.MiscSetup; @@ -66,6 +49,7 @@ import me.mrCookieSlime.Slimefun.URID.URID; import me.mrCookieSlime.Slimefun.WorldEdit.WESlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunBackup; import me.mrCookieSlime.Slimefun.api.TickerTask; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.EnergyNet; @@ -89,6 +73,8 @@ import me.mrCookieSlime.Slimefun.listeners.ItemListener; import me.mrCookieSlime.Slimefun.listeners.TalismanListener; import me.mrCookieSlime.Slimefun.listeners.TeleporterListener; import me.mrCookieSlime.Slimefun.listeners.ToolListener; +import net.coreprotect.CoreProtect; +import net.coreprotect.CoreProtectAPI; public class SlimefunStartup extends JavaPlugin { @@ -170,6 +156,7 @@ public class SlimefunStartup extends JavaPlugin { if (!new File("data-storage/Slimefun/blocks").exists()) new File("data-storage/Slimefun/blocks").mkdirs(); if (!new File("data-storage/Slimefun/stored-blocks").exists()) new File("data-storage/Slimefun/stored-blocks").mkdirs(); if (!new File("data-storage/Slimefun/stored-inventories").exists()) new File("data-storage/Slimefun/stored-inventories").mkdirs(); + if (!new File("data-storage/Slimefun/stored-chunks").exists()) new File("data-storage/Slimefun/stored-chunks").mkdirs(); if (!new File("data-storage/Slimefun/universal-inventories").exists()) new File("data-storage/Slimefun/universal-inventories").mkdirs(); if (!new File("data-storage/Slimefun/waypoints").exists()) new File("data-storage/Slimefun/waypoints").mkdirs(); if (!new File("data-storage/Slimefun/block-backups").exists()) new File("data-storage/Slimefun/block-backups").mkdirs(); @@ -374,7 +361,7 @@ public class SlimefunStartup extends JavaPlugin { connector.pullFile(); } } - }, 60L, 20 * 60 * 20L); + }, 80L, 60 * 60 * 20L); // Hooray! System.out.println("[Slimefun] Finished!"); @@ -407,110 +394,23 @@ public class SlimefunStartup extends JavaPlugin { @Override public void onDisable() { Bukkit.getScheduler().cancelTasks(this); - + + // Finishes all started movements/removals of block data + ticker.HALTED = true; + ticker.run(); + try { - for (Map.Entry entry: ticker.move.entrySet()) { - BlockStorage._integrated_moveBlockInfo(entry.getKey(), entry.getValue()); - } - ticker.move.clear(); - for (World world: Bukkit.getWorlds()) { BlockStorage storage = BlockStorage.getStorage(world); - if (storage != null) storage.save(true); - else System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\""); - } - - File folder = new File("data-storage/Slimefun/block-backups"); - List backups = Arrays.asList(folder.listFiles()); - if (backups.size() > 20) { - Collections.sort(backups, new Comparator() { - - @Override - public int compare(File f1, File f2) { - try { - return (int) (new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f1.getName().replace(".zip", "")).getTime() - new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f2.getName().replace(".zip", "")).getTime()); - } catch (ParseException e) { - return 0; - } - } - }); - - for (int i = backups.size() - 20; i > 0; i--) { - backups.get(i).delete(); + if (storage != null) { + storage.save(true); + } + else { + System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\""); } } - File file = new File("data-storage/Slimefun/block-backups/" + Clock.format(new Date()) + ".zip"); - byte[] buffer = new byte[1024]; - - if (file.exists()) file.delete(); - - try { - file.createNewFile(); - - ZipOutputStream output = new ZipOutputStream(new FileOutputStream(file)); - - for (File f1: new File("data-storage/Slimefun/stored-blocks/").listFiles()) { - for (File f: f1.listFiles()) { - ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + "/" + f.getName()); - output.putNextEntry(entry); - FileInputStream input = new FileInputStream(f); - - int length; - while ((length = input.read(buffer)) > 0) { - output.write(buffer, 0, length); - } - - input.close(); - output.closeEntry(); - } - } - - for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) { - ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName()); - output.putNextEntry(entry); - FileInputStream input = new FileInputStream(f); - - int length; - while ((length = input.read(buffer)) > 0) { - output.write(buffer, 0, length); - } - - input.close(); - output.closeEntry(); - } - - for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) { - ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName()); - output.putNextEntry(entry); - FileInputStream input = new FileInputStream(f); - - int length; - while ((length = input.read(buffer)) > 0) { - output.write(buffer, 0, length); - } - - input.close(); - output.closeEntry(); - } - - ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc"); - output.putNextEntry(entry); - FileInputStream input = new FileInputStream(new File("data-storage/Slimefun/stored-chunks/chunks.sfc")); - - int length; - while ((length = input.read(buffer)) > 0) { - output.write(buffer, 0, length); - } - - input.close(); - output.closeEntry(); - - output.close(); - System.out.println("[Slimfun] Backed up Blocks to " + file.getName()); - } catch(IOException e) { - e.printStackTrace(); - } + SlimefunBackup.start(); } catch(Exception x) { } diff --git a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java index 020f9c256..1b2027e79 100644 --- a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -303,15 +303,6 @@ public class BlockStorage { e.printStackTrace(); } } - - if (json != null && json.length() > 2) { - String[] entries = json.substring(2, json.length() - 2).split("\",\""); - - for (String entry: entries) { - String[] components = entry.split("\":\""); - map.put(components[0], components[1]); - } - } return map; } diff --git a/src/me/mrCookieSlime/Slimefun/api/Slimefun.java b/src/me/mrCookieSlime/Slimefun/api/Slimefun.java index f6210c2a2..60b232c5f 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Slimefun.java +++ b/src/me/mrCookieSlime/Slimefun/api/Slimefun.java @@ -6,17 +6,18 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; import me.mrCookieSlime.Slimefun.Setup.Messages; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - public class Slimefun { public static Map> guide_handlers = new HashMap>(); @@ -61,7 +62,7 @@ public class Slimefun { SlimefunItem sfItem = SlimefunItem.getByItem(item); if (sfItem == null) { if (SlimefunItem.isDisabled(item)) { - if (message) Messages.local.sendTranslation(p, "messages.disabled-item", true); + if (message && !(sfItem instanceof VanillaItem)) Messages.local.sendTranslation(p, "messages.disabled-item", true); return false; } else return true; @@ -70,7 +71,7 @@ public class Slimefun { if (sfItem.getResearch() == null) return true; else if (sfItem.getResearch().hasUnlocked(p)) return true; else { - if (message) Messages.local.sendTranslation(p, "messages.not-researched", true); + if (message && !(sfItem instanceof VanillaItem)) Messages.local.sendTranslation(p, "messages.not-researched", true); return false; } } @@ -82,7 +83,7 @@ public class Slimefun { if (sfItem.getResearch() == null) return true; else if (sfItem.getResearch().hasUnlocked(p)) return true; else { - if (message) Messages.local.sendTranslation(p, "messages.not-researched", true); + if (message && !(sfItem instanceof VanillaItem)) Messages.local.sendTranslation(p, "messages.not-researched", true); return false; } } diff --git a/src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java b/src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java new file mode 100644 index 000000000..76c3fbcb5 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java @@ -0,0 +1,119 @@ +package me.mrCookieSlime.Slimefun.api; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import me.mrCookieSlime.CSCoreLibPlugin.general.Clock; + +public class SlimefunBackup { + + public static void start() { + File folder = new File("data-storage/Slimefun/block-backups"); + List backups = Arrays.asList(folder.listFiles()); + if (backups.size() > 20) { + Collections.sort(backups, new Comparator() { + + @Override + public int compare(File f1, File f2) { + try { + return (int) (new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f1.getName().replace(".zip", "")).getTime() - new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f2.getName().replace(".zip", "")).getTime()); + } catch (ParseException e) { + return 0; + } + } + }); + + for (int i = backups.size() - 20; i > 0; i--) { + backups.get(i).delete(); + } + } + + File file = new File("data-storage/Slimefun/block-backups/" + Clock.format(new Date()) + ".zip"); + byte[] buffer = new byte[1024]; + + if (file.exists()) { + file.delete(); + } + + try { + file.createNewFile(); + + ZipOutputStream output = new ZipOutputStream(new FileOutputStream(file)); + + for (File f1: new File("data-storage/Slimefun/stored-blocks/").listFiles()) { + for (File f: f1.listFiles()) { + ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + "/" + f.getName()); + output.putNextEntry(entry); + FileInputStream input = new FileInputStream(f); + + int length; + while ((length = input.read(buffer)) > 0) { + output.write(buffer, 0, length); + } + + input.close(); + output.closeEntry(); + } + } + + for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) { + ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName()); + output.putNextEntry(entry); + FileInputStream input = new FileInputStream(f); + + int length; + while ((length = input.read(buffer)) > 0) { + output.write(buffer, 0, length); + } + + input.close(); + output.closeEntry(); + } + + for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) { + ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName()); + output.putNextEntry(entry); + FileInputStream input = new FileInputStream(f); + + int length; + while ((length = input.read(buffer)) > 0) { + output.write(buffer, 0, length); + } + + input.close(); + output.closeEntry(); + } + + if (new File("data-storage/Slimefun/stored-chunks/chunks.sfc").exists()) { + ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc"); + output.putNextEntry(entry); + FileInputStream input = new FileInputStream(new File("data-storage/Slimefun/stored-chunks/chunks.sfc")); + + int length; + while ((length = input.read(buffer)) > 0) { + output.write(buffer, 0, length); + } + + input.close(); + output.closeEntry(); + } + + output.close(); + System.out.println("[Slimfun] Backed up Blocks to " + file.getName()); + } catch(IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java index d9677a317..23eb982ca 100644 --- a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -23,6 +23,8 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker; public class TickerTask implements Runnable { + public boolean HALTED = false; + public Map move = new HashMap(); public Map delete = new HashMap(); @@ -42,6 +44,7 @@ public class TickerTask implements Runnable { @Override public void run() { + long timestamp = System.currentTimeMillis(); skipped = 0; @@ -65,57 +68,59 @@ public class TickerTask implements Runnable { delete.remove(entry.getKey()); } - for (final String c: BlockStorage.getTickingChunks()) { - long timestamp2 = System.currentTimeMillis(); - chunks++; - - blocks: - for (final Block b: BlockStorage.getTickingBlocks(c)) { - if (b.getChunk().isLoaded()) { - final Location l = b.getLocation(); - final SlimefunItem item = BlockStorage.check(l); - if (item != null) { - machines++; - try { - item.getTicker().update(); - if (item.getTicker().isSynchronized()) { - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - - @Override - public void run() { - try { - long timestamp3 = System.currentTimeMillis(); - item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l)); - - map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3)); - map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1); - map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1); - block_timings.put(l, System.currentTimeMillis() - timestamp3); - } catch(Exception x) { - int errors = 0; - if (bugged.containsKey(l)) errors = bugged.get(l); - errors++; - - if (errors == 1) { - File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err"); + if (!HALTED) { + for (final String c: BlockStorage.getTickingChunks()) { + long timestamp2 = System.currentTimeMillis(); + chunks++; + + blocks: + for (final Block b: BlockStorage.getTickingBlocks(c)) { + if (b.getChunk().isLoaded()) { + final Location l = b.getLocation(); + final SlimefunItem item = BlockStorage.check(l); + if (item != null) { + machines++; + try { + item.getTicker().update(); + if (item.getTicker().isSynchronized()) { + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { + + @Override + public void run() { + try { + long timestamp3 = System.currentTimeMillis(); + item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l)); + + map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3)); + map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1); + map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1); + block_timings.put(l, System.currentTimeMillis() - timestamp3); + } catch(Exception x) { + int errors = 0; + if (bugged.containsKey(l)) errors = bugged.get(l); + errors++; + + if (errors == 1) { + File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err"); + if (file.exists()) { + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err"); + } } } } @@ -124,113 +129,113 @@ public class TickerTask implements Runnable { } } } - } - try { - PrintStream stream = new PrintStream(file); - stream.println(); - stream.println("Server Software: " + Bukkit.getName()); - stream.println(" Build: " + Bukkit.getVersion()); - stream.println(" Minecraft: " + Bukkit.getBukkitVersion()); - stream.println(); - stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")"); - for (Plugin p: Bukkit.getPluginManager().getPlugins()) { - if (Bukkit.getPluginManager().isPluginEnabled(p)) { - stream.println(" + " + p.getName() + " " + p.getDescription().getVersion()); - } - else { - stream.println(" - " + p.getName() + " " + p.getDescription().getVersion()); + try { + PrintStream stream = new PrintStream(file); + stream.println(); + stream.println("Server Software: " + Bukkit.getName()); + stream.println(" Build: " + Bukkit.getVersion()); + stream.println(" Minecraft: " + Bukkit.getBukkitVersion()); + stream.println(); + stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")"); + for (Plugin p: Bukkit.getPluginManager().getPlugins()) { + if (Bukkit.getPluginManager().isPluginEnabled(p)) { + stream.println(" + " + p.getName() + " " + p.getDescription().getVersion()); + } + else { + stream.println(" - " + p.getName() + " " + p.getDescription().getVersion()); + } } + stream.println(); + stream.println("Ticked Block:"); + stream.println(" World: " + l.getWorld().getName()); + stream.println(" X: " + l.getBlockX()); + stream.println(" Y: " + l.getBlockY()); + stream.println(" Z: " + l.getBlockZ()); + stream.println(); + stream.println("Slimefun Data:"); + stream.println(" ID: " + item.getName()); + stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l)); + stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l)); + stream.println(); + stream.println("Stacktrace:"); + stream.println(); + x.printStackTrace(stream); + + stream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); } - stream.println(); - stream.println("Ticked Block:"); - stream.println(" World: " + l.getWorld().getName()); - stream.println(" X: " + l.getBlockX()); - stream.println(" Y: " + l.getBlockY()); - stream.println(" Z: " + l.getBlockZ()); - stream.println(); - stream.println("Slimefun Data:"); - stream.println(" ID: " + item.getName()); - stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l)); - stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l)); - stream.println(); - stream.println("Stacktrace:"); - stream.println(); - x.printStackTrace(stream); - stream.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); + System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName()); + System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ()); + System.err.println("[Slimefun] Saved as: "); + System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName()); + System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though."); + System.err.println("[Slimefun] "); + + bugged_blocks.put(l, errors); } - - System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName()); - System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ()); - System.err.println("[Slimefun] Saved as: "); - System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName()); - System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though."); - System.err.println("[Slimefun] "); - - bugged_blocks.put(l, errors); - } - else if (errors == 4) { - System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")"); - System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated."); - System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details."); - System.err.println("[Slimefun] "); - - BlockStorage._integrated_removeBlockInfo(l, true); - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { + else if (errors == 4) { + System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")"); + System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated."); + System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details."); + System.err.println("[Slimefun] "); + + BlockStorage._integrated_removeBlockInfo(l, true); + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - @Override - public void run() { - l.getBlock().setType(Material.AIR); - } - - }); - } - else { - bugged_blocks.put(l, errors); + @Override + public void run() { + l.getBlock().setType(Material.AIR); + } + + }); + } + else { + bugged_blocks.put(l, errors); + } } } - } - }); - } - else { - long timestamp3 = System.currentTimeMillis(); - item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l)); + }); + } + else { + long timestamp3 = System.currentTimeMillis(); + item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l)); + + map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3)); + map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1); + map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1); + block_timings.put(l, System.currentTimeMillis() - timestamp3); + } + tickers.add(item.getTicker()); + } catch(Exception x) { - map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3)); - map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1); - map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1); - block_timings.put(l, System.currentTimeMillis() - timestamp3); - } - tickers.add(item.getTicker()); - } catch(Exception x) { - - int errors = 0; - if (bugged.containsKey(l)) errors = bugged.get(l); - errors++; - - if (errors == 1) { - File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err"); + int errors = 0; + if (bugged.containsKey(l)) errors = bugged.get(l); + errors++; + + if (errors == 1) { + File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err"); if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err"); + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err"); + if (file.exists()) { + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err"); + } } } } @@ -239,86 +244,86 @@ public class TickerTask implements Runnable { } } } - } - try { - PrintStream stream = new PrintStream(file); - stream.println(); - stream.println("Server Software: " + Bukkit.getName()); - stream.println(" Build: " + Bukkit.getVersion()); - stream.println(" Minecraft: " + Bukkit.getBukkitVersion()); - stream.println(); - stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")"); - for (Plugin p: Bukkit.getPluginManager().getPlugins()) { - if (Bukkit.getPluginManager().isPluginEnabled(p)) { - stream.println(" + " + p.getName() + " " + p.getDescription().getVersion()); - } - else { - stream.println(" - " + p.getName() + " " + p.getDescription().getVersion()); + try { + PrintStream stream = new PrintStream(file); + stream.println(); + stream.println("Server Software: " + Bukkit.getName()); + stream.println(" Build: " + Bukkit.getVersion()); + stream.println(" Minecraft: " + Bukkit.getBukkitVersion()); + stream.println(); + stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")"); + for (Plugin p: Bukkit.getPluginManager().getPlugins()) { + if (Bukkit.getPluginManager().isPluginEnabled(p)) { + stream.println(" + " + p.getName() + " " + p.getDescription().getVersion()); + } + else { + stream.println(" - " + p.getName() + " " + p.getDescription().getVersion()); + } } + stream.println(); + stream.println("Ticked Block:"); + stream.println(" World: " + l.getWorld().getName()); + stream.println(" X: " + l.getBlockX()); + stream.println(" Y: " + l.getBlockY()); + stream.println(" Z: " + l.getBlockZ()); + stream.println(); + stream.println("Slimefun Data:"); + stream.println(" ID: " + item.getName()); + stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l)); + stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l)); + stream.println(); + stream.println("Stacktrace:"); + stream.println(); + x.printStackTrace(stream); + + stream.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); } - stream.println(); - stream.println("Ticked Block:"); - stream.println(" World: " + l.getWorld().getName()); - stream.println(" X: " + l.getBlockX()); - stream.println(" Y: " + l.getBlockY()); - stream.println(" Z: " + l.getBlockZ()); - stream.println(); - stream.println("Slimefun Data:"); - stream.println(" ID: " + item.getName()); - stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l)); - stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l)); - stream.println(); - stream.println("Stacktrace:"); - stream.println(); - x.printStackTrace(stream); - stream.close(); - } catch (FileNotFoundException e) { - e.printStackTrace(); + System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName()); + System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ()); + System.err.println("[Slimefun] Saved as: "); + System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName()); + System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though."); + System.err.println("[Slimefun] "); + + bugged_blocks.put(l, errors); } - - System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName()); - System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ()); - System.err.println("[Slimefun] Saved as: "); - System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName()); - System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though."); - System.err.println("[Slimefun] "); - - bugged_blocks.put(l, errors); - } - else if (errors == 4) { - System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")"); - System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated."); - System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details."); - System.err.println("[Slimefun] "); - - BlockStorage._integrated_removeBlockInfo(l, true); - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { + else if (errors == 4) { + System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")"); + System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated."); + System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details."); + System.err.println("[Slimefun] "); + + BlockStorage._integrated_removeBlockInfo(l, true); + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - @Override - public void run() { - l.getBlock().setType(Material.AIR); - } - - }); - } - else { - bugged_blocks.put(l, errors); + @Override + public void run() { + l.getBlock().setType(Material.AIR); + } + + }); + } + else { + bugged_blocks.put(l, errors); + } } } + else skipped++; + } + else { + skipped += BlockStorage.getTickingBlocks(c).size(); + skipped_chunks.add(c); + chunks--; + break blocks; } - else skipped++; - } - else { - skipped += BlockStorage.getTickingBlocks(c).size(); - skipped_chunks.add(c); - chunks--; - break blocks; } + + map_chunktime.put(c, System.currentTimeMillis() - timestamp2); } - - map_chunktime.put(c, System.currentTimeMillis() - timestamp2); } for (Map.Entry entry: move.entrySet()) { @@ -336,6 +341,8 @@ public class TickerTask implements Runnable { public void info(CommandSender sender) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2== &aSlimefun Diagnostic Tool &2==")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Halted: &e&l" + String.valueOf(HALTED).toUpperCase())); + sender.sendMessage(""); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Impact: &e" + time + "ms / 50-750ms")); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Chunks: &e" + chunks)); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Machines: &e" + machines)); diff --git a/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java b/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java index 3b906f4f5..24209730b 100644 --- a/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java +++ b/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java @@ -3,15 +3,15 @@ package me.mrCookieSlime.Slimefun.api.inventory; import java.io.File; import java.util.Iterator; -import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; - import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; + public class BlockMenu extends ChestMenu { BlockMenuPreset preset; @@ -59,7 +59,10 @@ public class BlockMenu extends ChestMenu { } public void save(Location l) { - if (changes == 0) return; + if (changes == 0) { + return; + } + // To force CS-CoreLib to build the Inventory this.getContents(); @@ -117,6 +120,16 @@ public class BlockMenu extends ChestMenu { changes++; } + @Override + public ChestMenu addMenuOpeningHandler(MenuOpeningHandler handler) { + if (handler instanceof SaveHandler) { + return super.addMenuOpeningHandler(new SaveHandler(this, ((SaveHandler) handler).handler)); + } + else { + return super.addMenuOpeningHandler(new SaveHandler(this, handler)); + } + } + public void close() { Iterator iterator = toInventory().getViewers().iterator(); while (iterator.hasNext()) { @@ -125,4 +138,21 @@ public class BlockMenu extends ChestMenu { } } + public class SaveHandler implements MenuOpeningHandler { + + BlockMenu menu; + MenuOpeningHandler handler; + + public SaveHandler(BlockMenu menu, MenuOpeningHandler handler) { + this.handler = handler; + this.menu = menu; + } + + @Override + public void onOpen(Player p) { + handler.onOpen(p); + menu.changes++; + } + + } } diff --git a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java index 48bb2f193..44034c434 100644 --- a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java +++ b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java @@ -260,7 +260,7 @@ public class CargoNet { } int c_index = round_robin.get(entry.getKey()); - + if (c_index < outputlist.size()) { for (int i = 0; i < c_index; i++) { final Location temp = outputlist.get(0); @@ -269,7 +269,7 @@ public class CargoNet { } c_index++; } - else c_index = 0; + else c_index = 1; round_robin.put(entry.getKey(), c_index); } @@ -513,15 +513,15 @@ public class CargoNet { if (!blocks.contains(l)) { String id = BlockStorage.checkID(l); if (id == null) return true; - if (id.equals("CARGO_MANAGER")) return false; - if (id.equals("CARGO_NODE")) { + else if (id.equals("CARGO_MANAGER")) return false; + else if (id.equals("CARGO_NODE")) { blocks.add(l); l1.add(source); l2.add(l); scan(l, blocks, l1, l2, axis, input, output, terminals, providers, destinations, imports, exports); if (blocks.isEmpty()) return false; } - if (id.equals("CARGO_NODE_INPUT")) { + else if (id.equals("CARGO_NODE_INPUT")) { blocks.add(l); l1.add(source); l2.add(l); @@ -529,25 +529,25 @@ public class CargoNet { if (freq == 16) providers.add(l); else input.put(l, freq); } - if (id.equals("CHEST_TERMINAL")) { + else if (id.equals("CHEST_TERMINAL")) { blocks.add(l); l1.add(source); l2.add(l); terminals.add(l); } - if (id.equals("CT_IMPORT_BUS")) { + else if (id.equals("CT_IMPORT_BUS")) { blocks.add(l); l1.add(source); l2.add(l); imports.add(l); } - if (id.equals("CT_EXPORT_BUS")) { + else if (id.equals("CT_EXPORT_BUS")) { blocks.add(l); l1.add(source); l2.add(l); exports.add(l); } - if (id.equals("CARGO_NODE_OUTPUT")) { + else if (id.equals("CARGO_NODE_OUTPUT")) { blocks.add(l); l1.add(source); l2.add(l); @@ -560,7 +560,7 @@ public class CargoNet { output.put(freq, list); } } - if (id.equals("CARGO_NODE_OUTPUT_ADVANCED")) { + else if (id.equals("CARGO_NODE_OUTPUT_ADVANCED")) { blocks.add(l); l1.add(source); l2.add(l); @@ -645,8 +645,8 @@ public class CargoNet { if (!sources.contains(l)) { String id = BlockStorage.checkID(l); if (id == null) return false; - if (id.equals("CARGO_MANAGER")) return true; - if (id.equals("CARGO_NODE")) return passiveScan(l, axis, sources); + else if (id.equals("CARGO_MANAGER")) return true; + else if (id.equals("CARGO_NODE")) return passiveScan(l, axis, sources); } return false; } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java b/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java index 4eb86937d..b6fe9892c 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java @@ -70,7 +70,9 @@ public class TalismanListener implements Listener { @EventHandler public void onItemBreak(PlayerItemBreakEvent e) { - if (Talisman.checkFor(e, SlimefunItem.getByName("ANVIL_TALISMAN"))) e.getBrokenItem().setAmount(1); + if (Talisman.checkFor(e, SlimefunItem.getByName("ANVIL_TALISMAN"))) + e.getBrokenItem().setDurability((short)0); + e.getPlayer().getInventory().addItem(e.getBrokenItem()); } @EventHandler diff --git a/src/plugin.yml b/src/plugin.yml index c24fc8aa0..6f896e688 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,5 +1,5 @@ name: Slimefun -version: 4.1.3 +version: 4.1.6 authors: [mrCookieSlime, John000708, st392, DeathlyPanda, BlackBeltPanda] description: Slimefun basically turns your entire Server into a FTB modpack without installing a single mod website: http://TheBusyBiscuit.github.io/