List of usage examples for com.google.gson.internal LinkedHashTreeMap get
@Override
public V get(Object key)
From source file:codecrafter47.bungeetablistplus.managers.SkinManagerImpl.java
License:Open Source License
private void fetchHeadSkin(File file, byte[] headArray) { try {//from w w w. j av a2s. c o m HttpURLConnection connection = (HttpURLConnection) new URL( "http://skinservice.codecrafter47.dyndns.eu/api/customhead").openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setUseCaches(false); connection.setDoInput(true); connection.setDoOutput(true); try (DataOutputStream out = new DataOutputStream(connection.getOutputStream())) { out.write((Base64.getEncoder().encodeToString(headArray)).getBytes(Charsets.UTF_8)); out.flush(); } BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream(), Charsets.UTF_8)); LinkedHashTreeMap map = gson.fromJson(reader, LinkedHashTreeMap.class); if (map.get("state").equals("ERROR")) { plugin.getLogger().warning("An server side error occurred while preparing head " + file.getName()); fileSkinCache.put(file, missingSkinTexture); } else if (map.get("state").equals("QUEUED")) { plugin.getLogger().info("Preparing head " + file.getName() + " approx. " + map.get("timeLeft") + " minutes remaining."); ProxyServer.getInstance().getScheduler().schedule(plugin, () -> fetchHeadSkin(file, headArray), 30, TimeUnit.SECONDS); } else if (map.get("state").equals("SUCCESS")) { PlayerSkin skin = new PlayerSkin(null, new String[][] { { "textures", (String) map.get("skin"), (String) map.get("signature") } }); fileSkinCache.put(file, skin); headCache.put(Head.of(headArray), skin); plugin.getLogger().info("Head " + file.getName() + " is now ready for use."); // we received a new skin -> update tab to all players BungeeTabListPlus.getInstance().resendTabLists(); // save to cache File cacheFile = new File(headsFolder, "cache.txt"); if (!cacheFile.exists()) { cacheFile.createNewFile(); } BufferedWriter writer = new BufferedWriter(new FileWriter(cacheFile, true)); writer.write(Base64.getEncoder().encodeToString(headArray)); writer.write(' '); writer.write(skin.toProperty()[0][1]); writer.write(' '); writer.write(skin.toProperty()[0][2]); writer.newLine(); writer.close(); } else { plugin.getLogger().severe("Unexpected response from server: " + map.get("state")); fileSkinCache.put(file, missingSkinTexture); } } catch (IOException ex) { plugin.getLogger().log(Level.WARNING, "An error occurred while trying to contact skinservice.codecrafter47.dyndns.eu", ex); plugin.getLogger().warning("Unable to prepare head " + file.getName()); fileSkinCache.put(file, missingSkinTexture); ProxyServer.getInstance().getScheduler().schedule(plugin, () -> fileSkinCache.remove(file, missingSkinTexture), 30, TimeUnit.SECONDS); } }
From source file:codecrafter47.bungeetablistplus.managers.SkinManagerImpl.java
License:Open Source License
@Override public void createIcon(BufferedImage image, Consumer<Icon> callback) { if (image.getWidth() != 8 || image.getHeight() != 8) { throw new IllegalArgumentException("Image must be 8x8 px."); }/*from w w w . j a va 2 s.c om*/ int[] rgb = image.getRGB(0, 0, 8, 8, null, 0, 8); ByteBuffer byteBuffer = ByteBuffer.allocate(rgb.length * 4); byteBuffer.asIntBuffer().put(rgb); byte[] headArray = byteBuffer.array(); if (headCache.containsKey(Head.of(headArray))) { Skin skin1 = headCache.get(Head.of(headArray)); callback.accept(new Icon(skin1.getOwner(), skin1.toProperty())); return; } try { HttpURLConnection connection = (HttpURLConnection) new URL( "http://skinservice.codecrafter47.dyndns.eu/api/customhead").openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setUseCaches(false); connection.setDoInput(true); connection.setDoOutput(true); try (DataOutputStream out = new DataOutputStream(connection.getOutputStream())) { out.write((Base64.getEncoder().encodeToString(headArray)).getBytes(Charsets.UTF_8)); out.flush(); } BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream(), Charsets.UTF_8)); LinkedHashTreeMap map = gson.fromJson(reader, LinkedHashTreeMap.class); if (map.get("state").equals("SUCCESS")) { PlayerSkin skin = new PlayerSkin(null, new String[][] { { "textures", (String) map.get("skin"), (String) map.get("signature") } }); headCache.put(Head.of(headArray), skin); // save to cache File cacheFile = new File(headsFolder, "cache.txt"); if (!cacheFile.exists()) { cacheFile.createNewFile(); } BufferedWriter writer = new BufferedWriter(new FileWriter(cacheFile, true)); writer.write(Base64.getEncoder().encodeToString(headArray)); writer.write(' '); writer.write(skin.toProperty()[0][1]); writer.write(' '); writer.write(skin.toProperty()[0][2]); writer.newLine(); writer.close(); callback.accept(new Icon(skin.getOwner(), skin.toProperty())); } else { ProxyServer.getInstance().getScheduler().schedule(plugin, () -> createIcon(image, callback), 5, TimeUnit.SECONDS); } } catch (IOException ex) { plugin.getLogger().log(Level.WARNING, "An error occurred while trying to contact skinservice.codecrafter47.dyndns.eu", ex); ProxyServer.getInstance().getScheduler().schedule(plugin, () -> createIcon(image, callback), 1, TimeUnit.MINUTES); } }