Skip to content

Commit 0f92d02

Browse files
committed
Add method getFaviconImage(); for getting decoded image from Base64 code of favicon
1 parent 34c9d03 commit 0f92d02

3 files changed

Lines changed: 45 additions & 6 deletions

File tree

BasicInfoAPI/src/main/api/IServerInfo.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package main.api;
22

3+
import java.awt.image.BufferedImage;
4+
35
/**
46
* Defines interfaces to get the basic info of a Minecraft server.
57
* @author Rock Chin
@@ -22,5 +24,6 @@ class ExtraDescr{
2224
String getDefaultDescriptionText();
2325
String getDefaultDescriptionColor();
2426
ExtraDescr[] getExtraDescription();
25-
String getFavicon();
27+
String getFaviconBase64();
28+
BufferedImage getFaviconImage();
2629
}

BasicInfoAPI/src/main/conn/MinecraftServer.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33

44
import com.google.gson.Gson;
55
import main.api.IServerInfo;
6+
import sun.misc.BASE64Decoder;
67

7-
import java.io.DataInputStream;
8-
import java.io.DataOutputStream;
9-
import java.io.EOFException;
8+
import javax.imageio.ImageIO;
9+
import java.awt.image.BufferedImage;
10+
import java.io.*;
1011
import java.net.Socket;
1112
import java.nio.charset.StandardCharsets;
1213
import java.util.ArrayList;
@@ -270,12 +271,27 @@ public ExtraDescr[] getExtraDescription(){
270271
}
271272
}
272273
@Override
273-
public String getFavicon() {
274+
public String getFaviconBase64() {
274275
if (response!=null) {
275276
return response.favicon;
276277
}else {
277278
return null;
278279
}
279280
}
281+
@Override
282+
public BufferedImage getFaviconImage(){
283+
try{
284+
return base64ToBufferedImage(getFaviconBase64().split(",")[1]);
285+
}catch (Exception e){
286+
e.printStackTrace();
287+
}
288+
return null;
289+
}
290+
private static BufferedImage base64ToBufferedImage(String base64)throws IOException {
291+
BASE64Decoder decoder = new sun.misc.BASE64Decoder();
292+
byte[] bytes1 = decoder.decodeBuffer(base64);
293+
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
294+
return ImageIO.read(bais);
295+
}
280296

281297
}

BasicInfoAPI/src/test/conn/MinecraftServerTest.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
import main.api.IServerInfo;
44
import main.conn.MinecraftServer;
55

6+
import javax.swing.*;
7+
import java.awt.*;
8+
import java.awt.image.BufferedImage;
9+
610
public class MinecraftServerTest {
711
public static void main(String[] args)throws Exception {
812
MinecraftServer minecraftServer=new MinecraftServer("play.ee-fans.com",25565);
@@ -18,6 +22,22 @@ public static void main(String[] args)throws Exception {
1822
for (IServerInfo.Player p:players){
1923
System.out.println("player:name:"+p.name+" id:"+p.id);
2024
}
21-
System.out.println("favicon:"+minecraftServer.getFavicon());
25+
System.out.println("favicon:"+minecraftServer.getFaviconBase64());
26+
27+
FaviconDisplay display=new FaviconDisplay(minecraftServer.getFaviconImage());
28+
display.setBounds(200,200,200,200);
29+
display.setVisible(true);
30+
display.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
31+
32+
}
33+
static class FaviconDisplay extends JFrame{
34+
BufferedImage bufferedImage;
35+
@Override
36+
public void paint(Graphics graphics){
37+
graphics.drawImage(this.bufferedImage,15,40,this);
38+
}
39+
public FaviconDisplay(BufferedImage img){
40+
this.bufferedImage=img;
41+
}
2242
}
2343
}

0 commit comments

Comments
 (0)