for ( Handler handler : plugin.getLogger().getHandlers() )
public Logger getLogger() { return plugin.getLogger(); }
public void reportError(Throwable th) { plugin.getLogger().log(Level.SEVERE, ChatColor.RED + "An internal error occurred! Please send the " + "following StackTrace to the developer in order to help" + " resolving the problem", th); }
/** * Adds a custom chart. * * @param chart The chart to add. */ public void addCustomChart(CustomChart chart) { if (chart == null) { plugin.getLogger().log(Level.WARNING, "Chart cannot be null"); } charts.add(chart); }
private void sanitizeFakePlayerNames() { for (Iterator<?> iterator = offline.iterator(); iterator.hasNext(); ) { Object name = iterator.next(); if (name == null || !(name instanceof String)) { plugin.getLogger().warning("Invalid name used for fake player, removing. (" + Objects.toString(name) + ")"); iterator.remove(); } } }
@Override public void log(LogLevel level, String message, Throwable throwable) { Logger logger = this.plugin.getLogger(); Level logLevel = level == LogLevel.INFO ? Level.INFO : Level.SEVERE; logger.log(logLevel, LogLevel.LOG_PREFIX + message); if (throwable != null) { for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) { logger.log(logLevel, LogLevel.LOG_PREFIX + line); } } }
private Icon fetchSkin(String uuid) { try { uuid = uuid.replace("-", ""); HttpURLConnection connection = (HttpURLConnection) new URL( "https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false"). openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), Charsets.UTF_8)); SkinProfile skin = gson.fromJson(reader, SkinProfile.class); if (skin != null && skin.properties != null && !skin.properties.isEmpty()) { return new Icon(UUID.fromString(uuid.substring(0, 8) + "-" + uuid.substring(8, 12) + "-" + uuid.substring(12, 16) + "-" + uuid.substring(16, 20) + "-" + uuid.substring(20, 32)), new String[][]{{"textures", skin.properties.get(0).value, skin.properties. get(0).signature}}); } } catch (Throwable e) { if (e instanceof IOException && e.getMessage().contains("429")) { // mojang rate limit; try again later plugin.getLogger().info("Hit mojang rate limits while fetching skin for " + uuid + ". Will retry in 1 minute. (This is not an error)"); } else { // generic connection error plugin.getLogger().log(Level.WARNING, "An error occurred while connecting to mojang servers. Couldn't fetch skin for " + uuid + ". Will retry in 1 minute.", e); } } return null; }
public SkinManagerImpl(Plugin plugin, File headsFolder) { this.plugin = plugin; this.headsFolder = headsFolder; // load head cache File file = new File(headsFolder, "cache.txt"); if (file.exists()) { try { new BufferedReader(new FileReader(file)).lines() .filter(line -> !line.isEmpty()) .map(line -> line.split(" ")) .forEach(entry -> headCache.put( Head.of(Base64.getDecoder().decode(entry[0])), new Icon(null, new String[][]{{"textures", entry[1], entry[2]}}) )); } catch (Throwable th) { plugin.getLogger().log(Level.WARNING, "Failed to load heads/cache.txt", th); } } }
/** * Collects the data and sends it afterwards. */ private void submitData() { final JsonObject data = getServerData(); final JsonArray pluginData = new JsonArray(); // Search for all other bStats Metrics classes to get their plugin data for (Object metrics : knownMetricsInstances) { try { Object plugin = metrics.getClass().getMethod("getPluginData").invoke(metrics); if (plugin instanceof JsonObject) { pluginData.add((JsonObject) plugin); } } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { } } data.add("plugins", pluginData); try { // Send the data sendData(plugin, data); } catch (Exception e) { // Something went wrong! :( if (logFailedRequests) { plugin.getLogger().log(Level.WARNING, "Could not submit plugin stats!", e); } } }
/** * Collects the data and sends it afterwards. */ private void submitData() { final JsonObject data = getServerData(); final JsonArray pluginData = new JsonArray(); // Search for all other bStats Metrics classes to get their plugin data for (Object metrics : knownMetricsInstances) { try { Object plugin = metrics.getClass().getMethod("getPluginData").invoke(metrics); if (plugin instanceof JsonObject) { pluginData.add((JsonObject) plugin); } } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { } } data.add("plugins", pluginData); try { // Send the data sendData(plugin, data); } catch (Exception e) { // Something went wrong! :( if (logFailedRequests) { plugin.getLogger().log(Level.WARNING, "Could not submit plugin stats!", e); } } }
/** * Gets the first bStat Metrics class. * * @return The first bStats metrics class. */ private Class<?> getFirstBStatsClass() { Path configPath = plugin.getDataFolder().toPath().getParent().resolve("bStats"); configPath.toFile().mkdirs(); File tempFile = new File(configPath.toFile(), "temp.txt"); try { String className = readFile(tempFile); if (className != null) { try { // Let's check if a class with the given name exists. return Class.forName(className); } catch (ClassNotFoundException ignored) { } } writeFile(tempFile, getClass().getName()); return getClass(); } catch (IOException e) { if (logFailedRequests) { plugin.getLogger().log(Level.WARNING, "Failed to get first bStats class!", e); } return null; } }
/** * Gets the first bStat Metrics class. * * @return The first bStats metrics class. */ private Class<?> getFirstBStatsClass() { Path configPath = plugin.getDataFolder().toPath().getParent().resolve("bStats"); configPath.toFile().mkdirs(); File tempFile = new File(configPath.toFile(), "temp.txt"); try { String className = readFile(tempFile); if (className != null) { try { // Let's check if a class with the given name exists. return Class.forName(className); } catch (ClassNotFoundException ignored) { } } writeFile(tempFile, getClass().getName()); return getClass(); } catch (IOException e) { if (logFailedRequests) { plugin.getLogger().log(Level.WARNING, "Failed to get first bStats class!", e); } return null; } }
} catch (IOException e) { plugin.getLogger().log(Level.WARNING, "Failed to load bStats config!", e); return; } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { if (logFailedRequests) { plugin.getLogger().log(Level.WARNING, "Failed to link to first metrics class " + usedMetricsClass.getName() + "!", e);
} catch (IOException e) { plugin.getLogger().log(Level.WARNING, "Failed to load bStats config!", e); return; } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { if (logFailedRequests) { plugin.getLogger().log(Level.WARNING, "Failed to link to first metrics class " + usedMetricsClass.getName() + "!", e);
/** * Gets the plugin specific data. * This method is called using Reflection. * * @return The plugin specific data. */ public JsonObject getPluginData() { JsonObject data = new JsonObject(); String pluginName = plugin.getDescription().getName(); String pluginVersion = plugin.getDescription().getVersion(); data.addProperty("pluginName", pluginName); data.addProperty("pluginVersion", pluginVersion); JsonArray customCharts = new JsonArray(); for (CustomChart customChart : charts) { // Add the data of the custom charts JsonObject chart = customChart.getRequestJsonObject(plugin.getLogger(), logFailedRequests); if (chart == null) { // If the chart is null, we skip it continue; } customCharts.add(chart); } data.add("customCharts", customCharts); return data; }
if (e instanceof IOException && e.getMessage().contains("429")) { plugin.getLogger().warning("Hit mojang rate limits while fetching uuid for " + player + "."); String headerField = connection.getHeaderField("Retry-After"); plugin.getProxy().getScheduler().schedule(plugin, new Runnable() { } else { plugin.getLogger().warning("An error occurred while connecting to mojang servers: " + e.getMessage() + ". Will retry in 1 minute"); plugin.getProxy().getScheduler().schedule(plugin, new Runnable() { @Override
private void triggerRandomEvent() { try { if (Math.random() <= 0.5 && online.size() > 0) { // do a server switch FakePlayer player = online.get((int) (Math.random() * online.size())); if (player.isRandomServerSwitchEnabled()) { player.changeServer(new ArrayList<>(plugin.getProxy().getServers().values()).get((int) (Math.random() * plugin.getProxy().getServers().values().size()))); } } else if (randomJoinLeaveEventsEnabled) { if (Math.random() < 0.7 && offline.size() > 0) { // add player String name = offline.get((int) (Math.random() * offline.size())); FakePlayer player = new FakePlayer(name, new ArrayList<>(plugin.getProxy().getServers().values()).get((int) (Math.random() * plugin.getProxy().getServers().values().size())), true); offline.remove(name); online.add(player); } else if (online.size() > 0) { // remove player FakePlayer fakePlayer = online.get((int) (online.size() * Math.random())); if (BungeeTabListPlus.getInstance().getConfig().fakePlayers.contains(fakePlayer.getName())) { removeFakePlayer(fakePlayer); } } } } catch (Throwable th) { plugin.getLogger().log(Level.SEVERE, "An error occurred while processing random fake player events", th); } }
@Override public void run() { String uuid; if (PATTERN_VALID_USERNAME.matcher(nameOrUUID).matches()) { uuid = fetchUUID(nameOrUUID); } else if (PATTERN_VALID_UUID.matcher(nameOrUUID).matches()) { uuid = nameOrUUID; } else { plugin.getLogger().warning("Invalid skin requested: " + nameOrUUID); return; } if (uuid != null) { Icon skin = fetchSkin(uuid); if (skin != null) { cache.put(nameOrUUID, skin); fetchingSkins.remove(nameOrUUID); // we received a new skin -> update tab to all players BungeeTabListPlus.getInstance().resendTabLists(); } else { plugin.getProxy().getScheduler().schedule(plugin, new Runnable() { @Override public void run() { fetchingSkins.remove(nameOrUUID); } }, 1, TimeUnit.MINUTES); } } } }
@EventHandler public void onServerConnected(ServerSwitchEvent event) { try { ProxiedPlayer player = event.getPlayer(); ConnectedPlayer connectedPlayer = BungeeTabListPlus.getInstance().getConnectedPlayerManager().getPlayerIfPresent(player); if (connectedPlayer != null) { ServerConnection server = (ServerConnection) event.getPlayer().getServer(); ChannelWrapper wrapper = server.getCh(); int version = player.getPendingConnection().getVersion(); PacketHandler packetHandler = connectedPlayer.getPacketHandler(); PacketListener packetListener = new PacketListener(server, packetHandler, version); wrapper.getHandle().pipeline().addBefore(PipelineUtils.BOSS_HANDLER, "btlp-packet-listener", packetListener); packetHandler.onServerSwitch(); } } catch (Exception ex) { plugin.getLogger().log(Level.SEVERE, "Failed to inject packet listener", ex); } } }