diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/BookSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/BookSlimefunGuide.java index 0623e3c3c..a967d3e2d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/BookSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/BookSlimefunGuide.java @@ -11,11 +11,11 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.PlayerRunnable; import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage; import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.HoverAction; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.CustomBookOverlay; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.Category; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java index 8d5f51e3a..83ccce0e0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java @@ -24,6 +24,7 @@ import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; import io.github.thebusybiscuit.cscorelib2.skull.SkullItem; +import io.github.thebusybiscuit.slimefun4.core.utils.ChatUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; @@ -429,9 +430,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { menu.addItem(8, new CustomItem(Material.KNOWLEDGE_BOOK, "&rView this Item on our Wiki &7(Slimefun Wiki)", "", "&7\u21E8 Click to open")); menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> { pl.closeInventory(); - pl.sendMessage(""); - pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + item.getWiki())); - pl.sendMessage(""); + ChatUtils.sendURL(pl, item.getWiki()); return false; }); } catch (Exception x) { @@ -444,9 +443,7 @@ public class ChestSlimefunGuide implements ISlimefunGuide { menu.addItem(7, new CustomItem(SkullItem.fromBase64("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzNTNmZDBmODYzMTQzNTM4NzY1ODYwNzViOWJkZjBjNDg0YWFiMDMzMWI4NzJkZjExYmQ1NjRmY2IwMjllZCJ9fX0="), "&rDemonstration Video &7(Youtube)", "", "&7\u21E8 Click to watch")); menu.addMenuClickHandler(7, (pl, slot, itemstack, action) -> { pl.closeInventory(); - pl.sendMessage(""); - pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + Slimefun.getItemConfig().getString(item.getID() + ".youtube"))); - pl.sendMessage(""); + ChatUtils.sendURL(pl, Slimefun.getItemConfig().getString(item.getID() + ".youtube")); return false; }); } catch (Exception x) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java index c7f19ffb4..be94d96ce 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java @@ -15,13 +15,13 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; +import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.skull.SkullItem; import io.github.thebusybiscuit.slimefun4.core.services.github.Contributor; import io.github.thebusybiscuit.slimefun4.core.utils.ChatUtils; import io.github.thebusybiscuit.slimefun4.core.utils.NumberUtils; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java index 1b2af8543..66a1ca814 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/ContributionsConnector.java @@ -16,9 +16,8 @@ public class ContributionsConnector extends GitHubConnector { private static final List blacklist = Arrays.asList( "invalid-email-address", "renovate-bot", - "ImgBotApp", "TheBusyBot", - "imgbot" + "imgbot[bot]" ); // Matches a GitHub name with a Minecraft name. diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java index 52fc2c2a4..f43d6ec61 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubService.java @@ -78,6 +78,7 @@ public class GitHubService { for (JsonElement elem : array) { JsonObject obj = elem.getAsJsonObject(); + if (obj.has("pull_request")) prCount++; else issueCount++; } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubTask.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubTask.java new file mode 100644 index 000000000..4aa57e209 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/github/GitHubTask.java @@ -0,0 +1,61 @@ +package io.github.thebusybiscuit.slimefun4.core.services.github; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import io.github.thebusybiscuit.cscorelib2.players.MinecraftAccount; +import io.github.thebusybiscuit.cscorelib2.players.MinecraftAccount.TooManyRequestsException; + +public class GitHubTask implements Runnable { + + private final GitHubService gitHubService; + + public GitHubTask(GitHubService github) { + gitHubService = github; + } + + @Override + public void run() { + gitHubService.getConnectors().forEach(GitHubConnector::pullFile); + + // Store all queried usernames to prevent 429 responses for pinging the + // same URL twice in one run. + Map skins = new HashMap<>(); + + for (Contributor contributor : gitHubService.getContributors().values()) { + if (!contributor.hasTexture()) { + try { + if (skins.containsKey(contributor.getMinecraftName())) { + contributor.setTexture(Optional.of(skins.get(contributor.getMinecraftName()))); + } + else { + contributor.setTexture(grabTexture(skins, contributor.getMinecraftName())); + } + } + catch(IllegalArgumentException x) { + // There cannot be a texture found because it is not a valid MC username + contributor.setTexture(Optional.empty()); + } + catch(TooManyRequestsException x) { + break; + } + } + } + } + + private Optional grabTexture(Map skins, String username) throws TooManyRequestsException { + Optional uuid = MinecraftAccount.getUUID(username); + + if (uuid.isPresent()) { + Optional skin = MinecraftAccount.getSkin(uuid.get()); + skins.put(username, skin.orElse("")); + return skin; + } + else { + return Optional.empty(); + } + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/NetherIceResource.java similarity index 89% rename from src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/NetherIceResource.java index 514db45e1..018bfe6c7 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/NetherIceResource.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.GEO.resources; +package io.github.thebusybiscuit.slimefun4.implementation.geo.resources; import org.bukkit.block.Biome; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/OilResource.java similarity index 82% rename from src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/OilResource.java index 6945f7a2d..ed98083a4 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/OilResource.java @@ -1,6 +1,7 @@ -package me.mrCookieSlime.Slimefun.GEO.resources; +package io.github.thebusybiscuit.slimefun4.implementation.geo.resources; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.block.Biome; import org.bukkit.inventory.ItemStack; @@ -10,10 +11,10 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; public class OilResource implements OreGenResource { - private final Random random = new Random(); - @Override public int getDefaultSupply(Biome biome) { + Random random = ThreadLocalRandom.current(); + switch (biome) { case SNOWY_BEACH: case STONE_SHORE: @@ -55,6 +56,13 @@ public class OilResource implements OreGenResource { case DEEP_OCEAN: case OCEAN: + case COLD_OCEAN: + case DEEP_COLD_OCEAN: + case DEEP_FROZEN_OCEAN: + case DEEP_LUKEWARM_OCEAN: + case DEEP_WARM_OCEAN: + case LUKEWARM_OCEAN: + case WARM_OCEAN: return random.nextInt(62) + 24; case SWAMP: diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/SaltResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/SaltResource.java new file mode 100644 index 000000000..63e72d64c --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/SaltResource.java @@ -0,0 +1,73 @@ +package io.github.thebusybiscuit.slimefun4.implementation.geo.resources; + +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +import org.bukkit.block.Biome; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.GEO.OreGenResource; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; + +public class SaltResource implements OreGenResource { + + @Override + public int getDefaultSupply(Biome biome) { + Random random = ThreadLocalRandom.current(); + + switch (biome) { + case SNOWY_BEACH: + case STONE_SHORE: + case BEACH: + case DESERT_LAKES: + case RIVER: + case ICE_SPIKES: + case FROZEN_RIVER: + return random.nextInt(40) + 3; + + case DEEP_OCEAN: + case OCEAN: + case COLD_OCEAN: + case DEEP_COLD_OCEAN: + case DEEP_FROZEN_OCEAN: + case DEEP_LUKEWARM_OCEAN: + case DEEP_WARM_OCEAN: + case FROZEN_OCEAN: + case LUKEWARM_OCEAN: + case WARM_OCEAN: + return random.nextInt(60) + 24; + + case SWAMP: + case SWAMP_HILLS: + return random.nextInt(20) + 4; + + case THE_END: + case NETHER: + return 0; + + default: + return random.nextInt(6) + 4; + } + } + + @Override + public String getName() { + return "Salt"; + } + + @Override + public ItemStack getIcon() { + return SlimefunItems.SALT.clone(); + } + + @Override + public String getMeasurementUnit() { + return "Crystal(s)"; + } + + @Override + public boolean isLiquid() { + return false; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/UraniumResource.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/UraniumResource.java similarity index 82% rename from src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/UraniumResource.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/UraniumResource.java index d60be82ee..8f3ff850d 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/GEO/resources/UraniumResource.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/geo/resources/UraniumResource.java @@ -1,6 +1,7 @@ -package me.mrCookieSlime.Slimefun.GEO.resources; +package io.github.thebusybiscuit.slimefun4.implementation.geo.resources; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.bukkit.block.Biome; import org.bukkit.inventory.ItemStack; @@ -10,10 +11,10 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; public class UraniumResource implements OreGenResource { - private final Random random = new Random(); - @Override public int getDefaultSupply(Biome biome) { + Random random = ThreadLocalRandom.current(); + switch (biome) { case THE_END: case END_BARRENS: diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index 8b5f18f23..2ea2285a6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -1,8 +1,6 @@ package me.mrCookieSlime.Slimefun; import java.io.File; -import java.util.Optional; -import java.util.UUID; import java.util.logging.Level; import org.bukkit.Bukkit; @@ -11,8 +9,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; -import io.github.thebusybiscuit.cscorelib2.players.MinecraftAccount; -import io.github.thebusybiscuit.cscorelib2.players.MinecraftAccount.TooManyRequestsException; import io.github.thebusybiscuit.cscorelib2.protection.ProtectionManager; import io.github.thebusybiscuit.cscorelib2.recipes.RecipeSnapshot; import io.github.thebusybiscuit.cscorelib2.reflection.ReflectionUtils; @@ -23,16 +19,16 @@ import io.github.thebusybiscuit.slimefun4.core.services.BlockDataService; import io.github.thebusybiscuit.slimefun4.core.services.CustomItemDataService; import io.github.thebusybiscuit.slimefun4.core.services.CustomTextureService; import io.github.thebusybiscuit.slimefun4.core.services.MetricsService; -import io.github.thebusybiscuit.slimefun4.core.services.github.Contributor; -import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubConnector; import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubService; +import io.github.thebusybiscuit.slimefun4.core.services.github.GitHubTask; +import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.NetherIceResource; +import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.OilResource; +import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.SaltResource; +import io.github.thebusybiscuit.slimefun4.implementation.geo.resources.UraniumResource; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; -import me.mrCookieSlime.Slimefun.GEO.resources.NetherIceResource; -import me.mrCookieSlime.Slimefun.GEO.resources.OilResource; -import me.mrCookieSlime.Slimefun.GEO.resources.UraniumResource; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; @@ -232,10 +228,11 @@ public final class SlimefunPlugin extends JavaPlugin { getLogger().log(Level.INFO, "Loading World Generators..."); - // Generating Oil as an OreGenResource (its a cool API) + // Generating Oil as an OreGenResource (it iss a cool API) OreGenSystem.registerResource(new OilResource()); OreGenSystem.registerResource(new NetherIceResource()); OreGenSystem.registerResource(new UraniumResource()); + OreGenSystem.registerResource(new SaltResource()); // Setting up GitHub Connectors... gitHubService.connect(config.getBoolean("options.print-out-github-data-retrieving")); @@ -308,32 +305,7 @@ public final class SlimefunPlugin extends JavaPlugin { } }, 100L, config.getInt("URID.custom-ticker-delay")); - getServer().getScheduler().runTaskTimerAsynchronously(this, () -> { - gitHubService.getConnectors().forEach(GitHubConnector::pullFile); - - for (Contributor contributor : gitHubService.getContributors().values()) { - if (!contributor.hasTexture()) { - try { - Optional uuid = MinecraftAccount.getUUID(contributor.getMinecraftName()); - - if (uuid.isPresent()) { - Optional skin = MinecraftAccount.getSkin(uuid.get()); - contributor.setTexture(skin); - } - else { - contributor.setTexture(Optional.empty()); - } - } - catch(IllegalArgumentException x) { - // There cannot be a texture found because it is not a valid MC username - contributor.setTexture(Optional.empty()); - } - catch(TooManyRequestsException x) { - break; - } - } - } - }, 80L, 60 * 60 * 20L); + getServer().getScheduler().runTaskTimerAsynchronously(this, new GitHubTask(gitHubService), 80L, 60 * 60 * 20L); // Hooray! getLogger().log(Level.INFO, "Finished!");