diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/NetherIceResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/NetherIceResource.java index 018bfe6c7..5a8d44761 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/NetherIceResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/NetherIceResource.java @@ -25,7 +25,7 @@ public class NetherIceResource implements OreGenResource { @Override public String getMeasurementUnit() { - return "Blocks"; + return "Block(s)"; } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/OilResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/OilResource.java index ed98083a4..35b0ac04e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/OilResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/OilResource.java @@ -86,7 +86,7 @@ public class OilResource implements OreGenResource { @Override public String getMeasurementUnit() { - return "Buckets"; + return "Bucket(s)"; } @Override diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/UraniumResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/UraniumResource.java index 8f3ff850d..f80dcbe6c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/UraniumResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/UraniumResource.java @@ -39,7 +39,7 @@ public class UraniumResource implements OreGenResource { @Override public String getMeasurementUnit() { - return "Pieces"; + return "Piece(s)"; } @Override diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java b/src/main/java/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java index ad32208cb..3f32159d9 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java @@ -39,13 +39,15 @@ public final class GEOScanner { } int index = 10; - for (OreGenResource resource: OreGenSystem.listResources()) { + for (OreGenResource resource : OreGenSystem.listResources()) { int supply = OreGenSystem.getSupplies(resource, chunk, true); ItemStack item = new CustomItem(resource.getItem(), "&r" + resource.getName(), "&8\u21E8 &e" + supply + ' ' + resource.getMeasurementUnit()); + if (supply > 1) { item.setAmount(supply > item.getMaxStackSize() ? item.getMaxStackSize(): supply); } + menu.addItem(index, item, (pl, slot, stack, action) -> false); index++; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java index b383b8655..becdae2e4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Category.java @@ -132,22 +132,6 @@ public class Category { return this.items; } - /** - * Attempts to get the category with the given display item. - * - * @param item the display item of the category to get - * @return Category if found, or null - * - * @since 4.0 - */ - @Deprecated - public static Category getByItem(ItemStack item) { - for (Category c: list()) { - if (c.getItem().isSimilar(item)) return c; - } - return null; - } - /** * Returns the tier of this category. * diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java index 505618460..8bd57d720 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java @@ -86,7 +86,8 @@ public class LockedCategory extends Category { * @see #removeParent(Category) */ public void addParent(Category category) { - if (category == this) throw new IllegalArgumentException("Category '" + this.getItem().getItemMeta().getDisplayName() + "' cannot be a parent of itself."); + if (category == this || category == null) throw new IllegalArgumentException("Category '" + this.getItem().getItemMeta().getDisplayName() + "' cannot be a parent of itself or have a 'null' parent."); + this.parents.add(category); } @@ -116,8 +117,8 @@ public class LockedCategory extends Category { } public boolean hasUnlocked(Player p, PlayerProfile profile) { - for (Category category: parents) { - for (SlimefunItem item: category.getItems()) { + for (Category category : parents) { + for (SlimefunItem item : category.getItems()) { if (Slimefun.isEnabled(p, item, false) && Slimefun.hasPermission(p, item, false) && item.getResearch() != null @@ -126,6 +127,7 @@ public class LockedCategory extends Category { return false; } } + return true; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java index 8f80ff3f5..194e4a42f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/Research.java @@ -34,7 +34,7 @@ import me.mrCookieSlime.Slimefun.api.Slimefun; */ public class Research { - private static final int[] research_progress = {23, 44, 57, 92}; + private static final int[] RESEARCH_PROGRESS = {23, 44, 57, 92}; private int id; private String name; @@ -94,32 +94,6 @@ public class Research { return name; } - /** - * Gets the cost in XP levels to unlock the research. - * - * @return The cost in XP levels of the research - * - * @since 4.0 - * @deprecated Moved to {@link #getCost()} - */ - @Deprecated - public int getLevel() { - return getCost(); - } - - /** - * Sets the cost in XP levels to unlock the research. - * - * @param level Cost in XP levels - * - * @since 4.0 - * @deprecated Moved to {@link #setCost(int)} - */ - @Deprecated - public void setLevel(int level) { - setCost(level); - } - /** * Gets the cost in XP levels to unlock the research. * @@ -258,19 +232,19 @@ public class Research { SlimefunPlugin.getUtilities().researching.add(p.getUniqueId()); SlimefunPlugin.getLocal().sendMessage(p, "messages.research.start", true, msg -> msg.replace("%research%", getName())); - for (int i = 1; i < research_progress.length + 1; i++) { + for (int i = 1; i < RESEARCH_PROGRESS.length + 1; i++) { int j = i; Slimefun.runSync(() -> { p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F); - SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName()).replace("%progress%", research_progress[j - 1] + "%")); + SlimefunPlugin.getLocal().sendMessage(p, "messages.research.progress", true, msg -> msg.replace("%research%", getName()).replace("%progress%", RESEARCH_PROGRESS[j - 1] + "%")); }, i * 20L); } Slimefun.runSync(() -> { runnable.run(); SlimefunPlugin.getUtilities().researching.remove(p.getUniqueId()); - }, (research_progress.length + 1) * 20L); + }, (RESEARCH_PROGRESS.length + 1) * 20L); } } }); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SeasonalCategory.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SeasonalCategory.java index 75d5dbcf2..b3b7b6e82 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SeasonalCategory.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SeasonalCategory.java @@ -18,7 +18,7 @@ import org.bukkit.inventory.ItemStack; */ public class SeasonalCategory extends Category { - private int month = -1; + private final int month; /** * The constructor for a SeasonCategory. @@ -34,6 +34,11 @@ public class SeasonalCategory extends Category { */ public SeasonalCategory(int month, int tier, ItemStack item) { super(item, tier); + + if (month < 1 || month > 12) { + throw new IllegalArgumentException("There is no month no. " + month); + } + this.month = month - 1; } @@ -58,7 +63,6 @@ public class SeasonalCategory extends Category { * @see #getMonth() */ public boolean isUnlocked() { - if (month == -1) return true; Calendar calendar = Calendar.getInstance(); return month == calendar.get(Calendar.MONTH); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/CSCoreLibLoader.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/CSCoreLibLoader.java deleted file mode 100644 index 1ff6d7349..000000000 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/CSCoreLibLoader.java +++ /dev/null @@ -1,161 +0,0 @@ -package me.mrCookieSlime.Slimefun.Setup; - -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 java.util.logging.Level; - -import org.bukkit.plugin.Plugin; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -@Deprecated -public class CSCoreLibLoader { - - private Plugin plugin; - private URL url; - private URL download; - private 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) { - plugin.getLogger().log(Level.SEVERE, "The Auto-Updater URL is malformed!", e); - } - } - - public boolean load() { - if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) { - return true; - } - else { - plugin.getLogger().log(Level.INFO, " "); - plugin.getLogger().log(Level.INFO, "#################### - INFO - ####################"); - plugin.getLogger().log(Level.INFO, " "); - plugin.getLogger().log(Level.INFO, plugin.getName() + " could not be loaded (yet)."); - plugin.getLogger().log(Level.INFO, "It appears that you have not installed CS-CoreLib."); - plugin.getLogger().log(Level.INFO, "Your Server will now try to download and install"); - plugin.getLogger().log(Level.INFO, "CS-CoreLib for you."); - plugin.getLogger().log(Level.INFO, "You will be asked to restart your Server when it's finished."); - plugin.getLogger().log(Level.INFO, "If this somehow fails, please download and install CS-CoreLib manually:"); - plugin.getLogger().log(Level.INFO, "https://dev.bukkit.org/projects/cs-corelib"); - plugin.getLogger().log(Level.INFO, " "); - plugin.getLogger().log(Level.INFO, "#################### - INFO - ####################"); - plugin.getLogger().log(Level.INFO, " "); - - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - 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 = new JsonParser().parse(reader).getAsJsonArray(); - final JsonObject json = array.get(array.size() - 1).getAsJsonObject(); - - download = traceURL(json.get("downloadUrl").getAsString().replace("https:", "http:")); - file = new File("plugins/" + json.get("name").getAsString() + ".jar"); - - return true; - } catch (IOException e) { - plugin.getLogger().log(Level.WARNING, " "); - plugin.getLogger().log(Level.WARNING, "#################### - WARNING - ####################"); - plugin.getLogger().log(Level.WARNING, " "); - plugin.getLogger().log(Level.WARNING, "Could not connect to BukkitDev."); - plugin.getLogger().log(Level.WARNING, "Please download & install CS-CoreLib manually:"); - plugin.getLogger().log(Level.WARNING, "https://dev.bukkit.org/projects/cs-corelib"); - plugin.getLogger().log(Level.WARNING, " "); - plugin.getLogger().log(Level.WARNING, "#################### - WARNING - ####################"); - plugin.getLogger().log(Level.WARNING, " "); - 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)"); - - int response = connection.getResponseCode(); - - if (response == HttpURLConnection.HTTP_MOVED_PERM || response == HttpURLConnection.HTTP_MOVED_TEMP) { - String loc = connection.getHeaderField("Location"); - location = new URL(new URL(location), loc).toExternalForm(); - } - else { - break; - } - } - - return new URL(connection.getURL().toString().replace(" ", "%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) { - plugin.getLogger().log(Level.WARNING, " "); - plugin.getLogger().log(Level.WARNING, "#################### - WARNING - ####################"); - plugin.getLogger().log(Level.WARNING, " "); - plugin.getLogger().log(Level.WARNING, "Failed to download CS-CoreLib"); - plugin.getLogger().log(Level.WARNING, "Please download & install CS-CoreLib manually:"); - plugin.getLogger().log(Level.WARNING, "https://dev.bukkit.org/projects/cs-corelib"); - plugin.getLogger().log(Level.WARNING, " "); - plugin.getLogger().log(Level.WARNING, "#################### - WARNING - ####################"); - plugin.getLogger().log(Level.WARNING, " "); - } finally { - try { - if (input != null) input.close(); - if (output != null) output.close(); - plugin.getLogger().log(Level.INFO, " "); - plugin.getLogger().log(Level.INFO, "#################### - INFO - ####################"); - plugin.getLogger().log(Level.INFO, " "); - plugin.getLogger().log(Level.INFO, "Please restart your Server to finish the Installation"); - plugin.getLogger().log(Level.INFO, "of " + plugin.getName() + " and CS-CoreLib"); - plugin.getLogger().log(Level.INFO, " "); - plugin.getLogger().log(Level.INFO, "#################### - INFO - ####################"); - plugin.getLogger().log(Level.INFO, " "); - } catch (IOException x) { - plugin.getLogger().log(Level.SEVERE, "An Error occured while closing the Download Stream for CS-CoreLib", x); - } - } - } - -} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 2ea2285a6..f7576efa7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -36,7 +36,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; import me.mrCookieSlime.Slimefun.Objects.tasks.ArmorTask; -import me.mrCookieSlime.Slimefun.Setup.CSCoreLibLoader; import me.mrCookieSlime.Slimefun.Setup.Files; import me.mrCookieSlime.Slimefun.Setup.MiscSetup; import me.mrCookieSlime.Slimefun.Setup.ResearchSetup; @@ -106,7 +105,7 @@ public final class SlimefunPlugin extends JavaPlugin { @Override public void onEnable() { - if (new CSCoreLibLoader(this).load()) { + if (getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) { String currentVersion = ReflectionUtils.getVersion(); @@ -317,9 +316,16 @@ public final class SlimefunPlugin extends JavaPlugin { CSCoreLib.getLib().filterLog("([A-Za-z0-9_]{3,16}) issued server command: /sf elevator (.{0,})"); } else { + getLogger().log(Level.INFO, "#################### - INFO - ####################"); + getLogger().log(Level.INFO, " "); + getLogger().log(Level.INFO, "Slimefun could not be loaded (yet)."); + getLogger().log(Level.INFO, "It appears that you have not installed CS-CoreLib."); + getLogger().log(Level.INFO, "Please download and install CS-CoreLib manually:"); + getLogger().log(Level.INFO, "https://thebusybiscuit.github.io/builds/TheBusyBiscuit/CS-CoreLib/master/"); + getCommand("slimefun").setExecutor((sender, cmd, label, args) -> { sender.sendMessage("You have forgotten to install CS-CoreLib! Slimefun is disabled."); - sender.sendMessage("https://dev.bukkit.org/projects/cs-corelib"); + sender.sendMessage("https://thebusybiscuit.github.io/builds/TheBusyBiscuit/CS-CoreLib/master/"); return true; }); } @@ -342,7 +348,7 @@ public final class SlimefunPlugin extends JavaPlugin { if (profile.isDirty()) profile.save(); }); - for (World world: Bukkit.getWorlds()) { + for (World world : Bukkit.getWorlds()) { try { BlockStorage storage = BlockStorage.getStorage(world); @@ -357,7 +363,7 @@ public final class SlimefunPlugin extends JavaPlugin { } } - for (UniversalBlockMenu menu: utilities.universalInventories.values()) { + for (UniversalBlockMenu menu : utilities.universalInventories.values()) { menu.save(); } @@ -375,7 +381,7 @@ public final class SlimefunPlugin extends JavaPlugin { instance = null; - for (Player p: Bukkit.getOnlinePlayers()) { + for (Player p : Bukkit.getOnlinePlayers()) { p.closeInventory(); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AltarRecipe.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AltarRecipe.java index 70f827194..75728b669 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AltarRecipe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AltarRecipe.java @@ -9,9 +9,9 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; public class AltarRecipe { - private ItemStack catalyst; - private List input; - private ItemStack output; + private final ItemStack catalyst; + private final List input; + private final ItemStack output; public AltarRecipe(List input, ItemStack output) { this.catalyst = input.get(4); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java index 6574d838b..fd4d3dc90 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/AncientAltarListener.java @@ -102,7 +102,7 @@ public class AncientAltarListener implements Listener { if (catalyst.getType() != Material.AIR) { List input = new ArrayList<>(); - for (Block pedestal: pedestals) { + for (Block pedestal : pedestals) { Item stack = findItem(pedestal); if (stack != null) input.add(fixItemStack(stack.getItemStack(), stack.getCustomName())); } @@ -177,7 +177,7 @@ public class AncientAltarListener implements Listener { } public static Item findItem(Block b) { - for (Entity n: b.getChunk().getEntities()) { + for (Entity n : b.getChunk().getEntities()) { if (n instanceof Item && b.getLocation().add(0.5, 1.2, 0.5).distanceSquared(n.getLocation()) < 0.5D && n.getCustomName() != null) return (Item) n; } return null; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/Pedestals.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/Pedestals.java index 130b13b3a..fa2acd1aa 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/Pedestals.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/Pedestals.java @@ -54,7 +54,8 @@ public final class Pedestals { if (SlimefunManager.isItemSimilar(catalyst, SlimefunItems.BROKEN_SPAWNER, false)) { if (checkRecipe(SlimefunItems.BROKEN_SPAWNER, input) == null) return null; - final ItemStack spawner = SlimefunItems.REPAIRED_SPAWNER.clone(); + + ItemStack spawner = SlimefunItems.REPAIRED_SPAWNER.clone(); ItemMeta im = spawner.getItemMeta(); im.setLore(Arrays.asList(catalyst.getItemMeta().getLore().get(0))); spawner.setItemMeta(im); @@ -65,7 +66,7 @@ public final class Pedestals { } private static ItemStack checkRecipe(ItemStack catalyst, List items) { - for (AltarRecipe recipe: SlimefunPlugin.getUtilities().altarRecipes) { + for (AltarRecipe recipe : SlimefunPlugin.getUtilities().altarRecipes) { if (SlimefunManager.isItemSimilar(catalyst, recipe.getCatalyst(), true)) { for (int i = 0; i < 8; i++) { if (SlimefunManager.isItemSimilar(items.get(i), recipe.getInput().get(0), true)) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java index 54f640524..f5f7f0e01 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/ancient_altar/RitualAnimation.java @@ -49,7 +49,7 @@ public class RitualAnimation implements Runnable { this.running = true; this.stage = 0; - for (Block pedestal: this.pedestals) { + for (Block pedestal : this.pedestals) { Item item = AncientAltarListener.findItem(pedestal); this.itemLock.put(item, item.getLocation().clone()); } @@ -78,7 +78,7 @@ public class RitualAnimation implements Runnable { } private boolean checkLockedItems() { - for (Map.Entry entry: itemLock.entrySet()) { + for (Map.Entry entry : itemLock.entrySet()) { if (entry.getKey().getLocation().distance(entry.getValue()) > 0.3) { return false; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/autosave/BlockAutoSaver.java b/src/main/java/me/mrCookieSlime/Slimefun/autosave/BlockAutoSaver.java index 24feb444e..ec11f219b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/autosave/BlockAutoSaver.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/autosave/BlockAutoSaver.java @@ -31,7 +31,7 @@ public class BlockAutoSaver implements Runnable { if (!worlds.isEmpty()) { Slimefun.getLogger().log(Level.INFO, "Auto-Saving Block Data... (Next Auto-Save: " + SlimefunPlugin.getCfg().getInt("options.auto-save-delay-in-minutes") + "m)"); - for (BlockStorage storage: worlds) { + for (BlockStorage storage : worlds) { storage.save(false); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java index 2beeb7cd5..536390225 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunCommand.java @@ -92,7 +92,7 @@ public class SlimefunCommand implements CommandExecutor, Listener { return true; } else { - for (SubCommand command: commands) { + for (SubCommand command : commands) { if (args[0].equalsIgnoreCase(command.getName())) { command.onExecute(sender, args); return true; @@ -110,7 +110,8 @@ public class SlimefunCommand implements CommandExecutor, Listener { sender.sendMessage(""); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aSlimefun &2v" + Slimefun.getVersion())); sender.sendMessage(""); - for (SubCommand cmd: commands) { + + for (SubCommand cmd : commands) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&3/sf " + cmd.getName() + " &b") + cmd.getDescription()); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java b/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java index 4c128d4fe..48eff833f 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/commands/SlimefunTabCompleter.java @@ -29,9 +29,11 @@ public class SlimefunTabCompleter implements TabCompleter { } else if (args[0].equalsIgnoreCase("research")) { List researches = new ArrayList<>(); + for (Research res : Research.list()) { researches.add(res.getName().toUpperCase().replace(' ', '_')); } + researches.add("all"); researches.add("reset"); return createReturnList(researches, args[2]); @@ -55,11 +57,13 @@ public class SlimefunTabCompleter implements TabCompleter { if (string.equals("")) return list; List returnList = new ArrayList<>(); + for (String item : list) { if (item.toLowerCase().startsWith(string.toLowerCase())) { returnList.add(item); } } + return returnList; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/hooks/WorldEditHook.java b/src/main/java/me/mrCookieSlime/Slimefun/hooks/WorldEditHook.java index 7d82d6b8a..aa3ca4834 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/hooks/WorldEditHook.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/hooks/WorldEditHook.java @@ -23,10 +23,12 @@ public class WorldEditHook { @Subscribe public void wrapForLogging(final EditSessionEvent event) { event.setExtent(new AbstractDelegateExtent(event.getExtent()) { + @Override public > boolean setBlock(BlockVector3 pos, T block) throws WorldEditException { if (block.getBlockType().getMaterial().isAir()) { World world = Bukkit.getWorld(event.getWorld().getName()); + if (world != null) { Location l = new Location(world, pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); if (BlockStorage.hasBlockInfo(l)) BlockStorage.clearBlockInfo(l); @@ -34,6 +36,7 @@ public class WorldEditHook { } return getExtent().setBlock(pos, block); } + }); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AndroidKillingListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/AndroidKillingListener.java index a9e219368..9ff093834 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AndroidKillingListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/AndroidKillingListener.java @@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.listeners; import java.util.ArrayList; import java.util.List; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -21,8 +22,6 @@ import me.mrCookieSlime.Slimefun.androids.AndroidEntity; public class AndroidKillingListener implements Listener { - private final Random random = new Random(); - public AndroidKillingListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } @@ -42,6 +41,8 @@ public class AndroidKillingListener implements Listener { } } + Random random = ThreadLocalRandom.current(); + switch (e.getEntityType()) { case BLAZE: items.add(new ItemStack(Material.BLAZE_ROD, 1 + random.nextInt(2))); @@ -58,7 +59,7 @@ public class AndroidKillingListener implements Listener { break; } - obj.getAndroid().addItems(obj.getBlock(), items.toArray(new ItemStack[items.size()])); + obj.getAndroid().addItems(obj.getBlock(), items.toArray(new ItemStack[0])); ExperienceOrb exp = (ExperienceOrb) e.getEntity().getWorld().spawnEntity(e.getEntity().getLocation(), EntityType.EXPERIENCE_ORB); exp.setExperience(1 + random.nextInt(6)); }, 1L); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AutonomousToolsListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/AutonomousToolsListener.java index 41ccc545a..449a2aae1 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/AutonomousToolsListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/AutonomousToolsListener.java @@ -34,7 +34,7 @@ public class AutonomousToolsListener implements Listener { SlimefunItem machine = BlockStorage.check(dispenser); if (machine != null) { - for (ItemHandler handler: SlimefunItem.getHandlers("AutonomousMachineHandler")) { + for (ItemHandler handler : SlimefunItem.getHandlers("AutonomousMachineHandler")) { if (((AutonomousMachineHandler) handler).onBlockDispense(e, dispenser, d, block, chest, machine)) break; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java index 9c1f2bea9..7947ff414 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java @@ -49,6 +49,7 @@ public class BackpackListener implements Listener { if (SlimefunPlugin.getUtilities().backpack.containsKey(e.getPlayer().getUniqueId())){ ItemStack item = e.getItemDrop().getItemStack(); SlimefunItem sfItem = SlimefunItem.getByItem(item); + if (sfItem instanceof SlimefunBackpack) e.setCancelled(true); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java index f7c9abc61..eff0d4762 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BlockListener.java @@ -57,7 +57,7 @@ public class BlockListener implements Listener { @EventHandler public void onPistonRetract(BlockPistonRetractEvent e) { if (e.isSticky()) { - for (Block b: e.getBlocks()) { + for (Block b : e.getBlocks()) { if (BlockStorage.hasBlockInfo(b) || b.getRelative(e.getDirection()).getType() == Material.AIR && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { e.setCancelled(true); return; @@ -75,7 +75,7 @@ public class BlockListener implements Listener { Block b = e.getClickedBlock(); LinkedList multiblocks = new LinkedList<>(); - for (MultiBlock mb: MultiBlock.list()) { + for (MultiBlock mb : MultiBlock.list()) { Block center = b.getRelative(mb.getTriggerBlock()); if (compareMaterials(center, mb.getBuild(), mb.isSymmetric())) { @@ -87,7 +87,7 @@ public class BlockListener implements Listener { e.setCancelled(true); MultiBlock multiblock = multiblocks.getLast(); - for (ItemHandler handler: SlimefunItem.getHandlers("MultiBlockInteractionHandler")) { + for (ItemHandler handler : SlimefunItem.getHandlers("MultiBlockInteractionHandler")) { if (((MultiBlockInteractionHandler) handler).onInteract(p, multiblock, b)) break; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java index 5a5192f19..7aa47968e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/BowListener.java @@ -1,6 +1,5 @@ package me.mrCookieSlime.Slimefun.listeners; -import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.entity.Arrow; @@ -19,6 +18,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; +import me.mrCookieSlime.Slimefun.api.Slimefun; public class BowListener implements Listener { @@ -35,10 +35,14 @@ public class BowListener implements Listener { @EventHandler public void onArrowHit(final ProjectileHitEvent e) { - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { - if (!e.getEntity().isValid()) return; - SlimefunPlugin.getUtilities().arrows.remove(e.getEntity().getUniqueId()); - if (e.getEntity() instanceof Arrow) handleGrapplingHook((Arrow) e.getEntity()); + Slimefun.runSync(() -> { + if (e.getEntity().isValid()) { + SlimefunPlugin.getUtilities().arrows.remove(e.getEntity().getUniqueId()); + + if (e.getEntity() instanceof Arrow) { + handleGrapplingHook((Arrow) e.getEntity()); + } + } }, 4L); } @@ -58,11 +62,11 @@ public class BowListener implements Listener { p.setVelocity(arrow.getLocation().toVector().subtract(p.getLocation().toVector())); } - for (Entity n: SlimefunPlugin.getUtilities().remove.get(p.getUniqueId())) { + for (Entity n : SlimefunPlugin.getUtilities().remove.get(p.getUniqueId())) { if (n.isValid()) n.remove(); } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + Slimefun.runSync(() -> { SlimefunPlugin.getUtilities().jumpState.remove(p.getUniqueId()); SlimefunPlugin.getUtilities().remove.remove(p.getUniqueId()); }, 20L); @@ -87,11 +91,11 @@ public class BowListener implements Listener { p.setVelocity(v); - for (Entity n: SlimefunPlugin.getUtilities().remove.get(p.getUniqueId())) { + for (Entity n : SlimefunPlugin.getUtilities().remove.get(p.getUniqueId())) { if (n.isValid()) n.remove(); } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + Slimefun.runSync(() -> { SlimefunPlugin.getUtilities().jumpState.remove(p.getUniqueId()); SlimefunPlugin.getUtilities().remove.remove(p.getUniqueId()); }, 20L); @@ -103,8 +107,10 @@ public class BowListener implements Listener { public void onArrowSuccessfulHit(EntityDamageByEntityEvent e) { if (e.getDamager() instanceof Arrow) { if (SlimefunPlugin.getUtilities().arrows.containsKey(e.getDamager().getUniqueId()) && e.getEntity() instanceof LivingEntity) { - for (ItemHandler handler: SlimefunItem.getHandlers("BowShootHandler")) { - if (((BowShootHandler) handler).onHit(e, (LivingEntity) e.getEntity())) break; + for (ItemHandler handler : SlimefunItem.getHandlers("BowShootHandler")) { + if (((BowShootHandler) handler).onHit(e, (LivingEntity) e.getEntity())) { + break; + } } SlimefunPlugin.getUtilities().arrows.remove(e.getDamager().getUniqueId()); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java index dab228807..847cacaa6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java @@ -27,7 +27,7 @@ public class CoolerListener implements Listener { public void onStarve(FoodLevelChangeEvent e) { if (e.getFoodLevel() < ((Player) e.getEntity()).getFoodLevel()) { Player p = (Player) e.getEntity(); - for (ItemStack item: p.getInventory().getContents()) { + for (ItemStack item : p.getInventory().getContents()) { if (SlimefunManager.isItemSimilar(item, SlimefunItems.COOLER, false)) { BackpackInventory backpack = PlayerProfile.getBackpack(item); if (backpack != null) { @@ -45,7 +45,7 @@ public class CoolerListener implements Listener { if (slot >= 0) { PotionMeta im = (PotionMeta) inv.getItem(slot).getItemMeta(); - for (PotionEffect effect: im.getCustomEffects()) { + for (PotionEffect effect : im.getCustomEffects()) { p.addPotionEffect(effect); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 2f55f9f11..649ea0d88 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -359,7 +359,7 @@ public class ItemListener implements Listener { // Remove the glass bottle once drunk final int m = mode; - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { + Slimefun.runSync(() -> { if (m == 0) p.getEquipment().getItemInMainHand().setAmount(0); else if (m == 1) p.getEquipment().getItemInOffHand().setAmount(0); else if (m == 2) p.getInventory().removeItem(new ItemStack(Material.GLASS_BOTTLE, 1)); @@ -449,7 +449,7 @@ public class ItemListener implements Listener { @EventHandler public void onItemDrop(PlayerDropItemEvent e) { - for (ItemHandler handler: SlimefunItem.getHandlers("ItemDropHandler")) { + for (ItemHandler handler : SlimefunItem.getHandlers("ItemDropHandler")) { if (((ItemDropHandler) handler).onItemDrop(e, e.getPlayer(), e.getItemDrop())) return; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java index 9b2671a9a..e1567e669 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/TalismanListener.java @@ -40,7 +40,7 @@ import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class TalismanListener implements Listener { - private Random random = new Random(); + private final Random random = new Random(); public TalismanListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); @@ -81,7 +81,7 @@ public class TalismanListener implements Listener { // Did the tool in our hand broke or was it an Armorpiece? if (!inv.getItem(inv.getHeldItemSlot()).equals(e.getBrokenItem())) { - for (int s: armorSlots) { + for (int s : armorSlots) { if (inv.getItem(s).equals(e.getBrokenItem())) { slot = s; break; @@ -89,7 +89,7 @@ public class TalismanListener implements Listener { } } - final ItemStack item = e.getBrokenItem().clone(); + ItemStack item = e.getBrokenItem().clone(); ItemMeta meta = item.getItemMeta(); if (meta instanceof Damageable) { @@ -98,14 +98,16 @@ public class TalismanListener implements Listener { item.setItemMeta(meta); - final int itemSlot = slot; - SlimefunPlugin.instance.getServer().getScheduler().runTaskLater(SlimefunPlugin.instance, () -> inv.setItem(itemSlot, item), 1L); + int itemSlot = slot; + Slimefun.runSync(() -> inv.setItem(itemSlot, item), 1L); } } @EventHandler public void onSprint(PlayerToggleSprintEvent e) { - if (e.isSprinting()) Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_TRAVELLER); + if (e.isSprinting()) { + Talisman.checkFor(e, (SlimefunItemStack) SlimefunItems.TALISMAN_TRAVELLER); + } } @EventHandler diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java index 8791d446b..a248d9220 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java @@ -35,7 +35,7 @@ public class TeleporterListener implements Listener { SlimefunItem teleporter = BlockStorage.check(e.getClickedBlock().getRelative(BlockFace.DOWN)); if (teleporter instanceof Teleporter) { - for (BlockFace face: faces) { + for (BlockFace face : faces) { if (!BlockStorage.check(e.getClickedBlock().getRelative(BlockFace.DOWN).getRelative(face), "GPS_TELEPORTER_PYLON")) return; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ToolListener.java b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ToolListener.java index 3393a13a7..14e799bb2 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/listeners/ToolListener.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/listeners/ToolListener.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Optional; import java.util.Random; import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.GameMode; import org.bukkit.Material; @@ -47,7 +48,6 @@ public class ToolListener implements Listener { // Materials that require a Block under it, e.g. Pressure Plates private final Set sensitiveMaterials = new HashSet<>(); - private final Random random = new Random(); private final Utilities utilities; public ToolListener(SlimefunPlugin plugin) { @@ -164,7 +164,7 @@ public class ToolListener implements Listener { gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4)); gifts.add(new ItemStack(Material.EMERALD)); - e.getBlockPlaced().getWorld().dropItemNaturally(e.getBlockPlaced().getLocation(), gifts.get(random.nextInt(gifts.size()))); + e.getBlockPlaced().getWorld().dropItemNaturally(e.getBlockPlaced().getLocation(), gifts.get(ThreadLocalRandom.current().nextInt(gifts.size()))); } else if (SlimefunManager.isItemSimilar(item, SlimefunItems.CARGO_INPUT, false)) { if (e.getBlock().getY() != e.getBlockAgainst().getY()) { @@ -266,6 +266,8 @@ public class ToolListener implements Listener { } else if (item != null) { if (item.getEnchantments().containsKey(Enchantment.LOOT_BONUS_BLOCKS) && !item.getEnchantments().containsKey(Enchantment.SILK_TOUCH)) { + Random random = ThreadLocalRandom.current(); + fortune = random.nextInt(item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS) + 2) - 1; if (fortune <= 0) fortune = 1; fortune = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + random.nextInt(5) : 1) * (fortune + 1);