33import cn .nukkit .Player ;
44import cn .nukkit .Server ;
55import cn .nukkit .form .element .ElementButton ;
6- import cn .nukkit .form .element .ElementButtonImageData ;
76import cn .nukkit .form .window .FormWindowSimple ;
87import cn .nukkit .item .Item ;
98import com .google .common .collect .Iterables ;
1615
1716import java .io .IOException ;
1817import java .io .InputStream ;
18+ import java .io .InputStreamReader ;
19+ import java .io .Reader ;
1920import java .net .HttpURLConnection ;
2021import java .net .URL ;
21- import java .nio .charset .StandardCharsets ;
2222import java .util .*;
23- import java .util .stream .Collectors ;
2423
2524@ Getter
2625public class Database {
@@ -30,27 +29,37 @@ public class Database {
3029
3130 private final Map <String , Integer > pageCount ;
3231 private final List <Category > categories ;
33- private final List <DBSkin > dbSkins ;
32+ private final List <HeadEntry > headEntries ;
3433
3534 public Database () {
3635 this .pageCount = new HashMap <>();
3736 this .categories = new ArrayList <>();
38- this .dbSkins = new ArrayList <>();
37+ this .headEntries = new ArrayList <>();
3938 }
4039
4140 public boolean reload () {
4241 this .categories .clear ();
43- this .dbSkins .clear ();
42+ this .headEntries .clear ();
4443 return this .load ();
4544 }
4645
4746 public boolean load () {
4847 try {
49- for (final Categories value : Categories .values ()) {
50- final List <Map <String , String >> values = GSON .<List <Map <String , String >>>fromJson (this .httpRequest (API_URL + "?cat=" + value .getIdentifier ()), List .class );
51- final List <DBSkin > dbSkins = values .stream ().map (map -> new DBSkin (map .get ("name" ), map .get ("uuid" ), map .get ("value" ))).collect (Collectors .toList ());
52- this .dbSkins .addAll (dbSkins );
53- this .categories .add (new Category (value , value .getDisplayName (), Iterables .getLast (dbSkins ).getTexture (), Collections .unmodifiableList (dbSkins )));
48+ for (final CategoryEnum category : CategoryEnum .values ()) {
49+ final HttpURLConnection connection = (HttpURLConnection ) new URL (API_URL + "?cat=" + category .getIdentifier ()).openConnection ();
50+ connection .setRequestProperty ("User-Agent" , "Chrome" );
51+ connection .connect ();
52+
53+ if (connection .getResponseCode () == 200 ) {
54+ try (final InputStream inputStream = connection .getInputStream ();
55+ final Reader reader = new InputStreamReader (inputStream )) {
56+ final List <HeadEntry > headEntries = GSON .<List <HeadEntry >>fromJson (reader , List .class );
57+ this .headEntries .addAll (headEntries );
58+ this .categories .add (new Category (category , category .getDisplayName (), Iterables .getLast (headEntries ).getTexture (), Collections .unmodifiableList (headEntries )));
59+ }
60+ }
61+
62+ connection .disconnect ();
5463 }
5564
5665 return true ;
@@ -61,92 +70,74 @@ public boolean load() {
6170 }
6271 }
6372
64- private String httpRequest (String urlSpec ) throws IOException {
65- final HttpURLConnection connection = (HttpURLConnection ) new URL (urlSpec ).openConnection ();
66- connection .setRequestProperty ("User-Agent" , "Chrome" );
67-
68- String content = "{}" ;
69- if (connection .getResponseCode () == 200 ) {
70- try (final InputStream inputStream = connection .getInputStream ()) {
71- final StringBuilder builder = new StringBuilder ();
72- final byte [] bytes = new byte [1024 * 1024 ];
73- for (int read ; (read = inputStream .read (bytes )) > 0 ; )
74- builder .append (new String (Arrays .copyOf (bytes , read ), StandardCharsets .UTF_8 ));
75- content = builder .toString ();
76- }
77- }
78-
79- connection .disconnect ();
80- return content ;
81- }
82-
83- private List <List <DBSkin >> toPages (Category category , int count ) {
84- final List <DBSkin > dbSkins = category .getSkins ();
85- final int dbSize = dbSkins .size ();
73+ private List <List <HeadEntry >> toPages (Category category , int count ) {
74+ final List <HeadEntry > headEntries = category .getEntries ();
75+ final int dbSize = headEntries .size ();
8676 if (dbSize <= 0 )
8777 return Collections .emptyList ();
88- final List <List <DBSkin >> pages = new ArrayList <>();
78+ final List <List <HeadEntry >> pages = new ArrayList <>();
8979 final int chunks = (dbSize - 1 ) / count ;
9080 for (int i = 0 ; i <= chunks ; i ++)
91- pages .add (dbSkins .subList (i * count , i == chunks ? dbSize : (i + 1 ) * count ));
81+ pages .add (headEntries .subList (i * count , i == chunks ? dbSize : (i + 1 ) * count ));
9282 return Collections .unmodifiableList (pages );
9383 }
9484
9585 public void showForm (Player player ) {
9686 final FormWindowSimple categoriesForm = new FormWindowSimple ("Select a category" , "" );
9787 final List <Category > categories = Collections .unmodifiableList (new ArrayList <>(this .categories ));
9888 for (final Category category : categories )
99- categoriesForm .addButton (new ElementButton (category .getDisplayName (), new ElementButtonImageData ( ElementButtonImageData . IMAGE_DATA_TYPE_URL , HeadRender .createUrl (category .getDisplaySkin () ))));
89+ categoriesForm .addButton (new ElementButton (category .getDisplayName (), HeadRender .createButtonImage (category .getDisplaySkin ())));
10090 FormAPI .create (player , categoriesForm , () -> {
10191 if (categoriesForm .wasClosed ())
10292 return ;
10393 final Category category = categories .get (categoriesForm .getResponse ().getClickedButtonId ());
10494 if (category == null )
10595 return ;
10696 final FormWindowSimple pagesForm = new FormWindowSimple ("Select a page" , "" );
107- final List <List <DBSkin >> pages = this .toPages (category , this .pageCount .getOrDefault (player .getName (), 40 ));
97+ final List <List <HeadEntry >> pages = this .toPages (category , this .pageCount .getOrDefault (player .getName (), 40 ));
10898 for (int i = 0 ; i < pages .size (); i ++)
109- pagesForm .addButton (new ElementButton ("Page " + (i + 1 ), new ElementButtonImageData ( ElementButtonImageData . IMAGE_DATA_TYPE_URL , HeadRender .createUrl (Iterables .getLast (pages .get (i )).getTexture () ))));
99+ pagesForm .addButton (new ElementButton ("Page " + (i + 1 ), HeadRender .createButtonImage (Iterables .getLast (pages .get (i )).getTexture ())));
110100 FormAPI .create (player , pagesForm , () -> {
111101 if (pagesForm .wasClosed ()) {
112102 this .showForm (player );
113103 return ;
114104 }
115105
116- final List <DBSkin > dbSkins = pages .get (pagesForm .getResponse ().getClickedButtonId ());
117- if (dbSkins == null )
106+ final List <HeadEntry > headEntries = pages .get (pagesForm .getResponse ().getClickedButtonId ());
107+ if (headEntries == null )
118108 return ;
119109 final FormWindowSimple subForm = new FormWindowSimple (category .getDisplayName (), "" );
120- for (final DBSkin dbSkin : dbSkins )
121- subForm .addButton (new ElementButton (dbSkin .getName (), new ElementButtonImageData ( ElementButtonImageData . IMAGE_DATA_TYPE_URL , HeadRender .createUrl ( dbSkin .getTexture () ))));
110+ for (final HeadEntry headEntry : headEntries )
111+ subForm .addButton (new ElementButton (headEntry .getName (), HeadRender .createButtonImage ( headEntry .getTexture ())));
122112 FormAPI .create (player , subForm , () -> {
123113 if (subForm .wasClosed ())
124114 return ;
125- final DBSkin dbSkin = dbSkins .get (subForm .getResponse ().getClickedButtonId ());
126- if (dbSkin == null )
115+ final HeadEntry headEntry = headEntries .get (subForm .getResponse ().getClickedButtonId ());
116+ if (headEntry == null )
127117 return ;
128- this .giveItem (player , dbSkin );
118+ this .giveItem (player , headEntry );
129119 });
130120 });
131121 });
132122 }
133123
134- public void giveItem (Player player , DBSkin dbSkin ) {
135- Heads .createItem (HeadInput .ofTexture (dbSkin .getTexture (), dbSkin .getId ())).whenComplete ((result , throwable ) -> {
124+ public void giveItem (Player player , HeadEntry headEntry ) {
125+ Heads .createItem (HeadInput .ofTexture (headEntry .getTexture (), headEntry .getId ())).whenComplete ((result , throwable ) -> {
136126 if (throwable != null ) {
137127 player .sendMessage ("§cCould not create the requested skull item!" );
128+ throwable .printStackTrace ();
138129 return ;
139130 }
140131
141132 final Item item = result .getItem ();
142- item .setCustomName ("§r§7" + dbSkin .getName ());
133+ item .setCustomName ("§r§7" + headEntry .getName ());
143134 final Item [] drops = player .getInventory ().addItem (item );
144135 if (drops .length > 0 ) {
145136 for (final Item drop : drops )
146137 player .getLevel ().dropItem (player , drop );
147138 }
148139
149- player .sendMessage ("§aGave you the head " + dbSkin .getName () + "§r§a!" );
140+ player .sendMessage ("§aGave you the head " + headEntry .getName () + "§r§a!" );
150141 });
151142 }
152143
0 commit comments