Skip to content

Commit 62865ef

Browse files
committed
Some updates
1 parent cee374e commit 62865ef

8 files changed

Lines changed: 77 additions & 100 deletions

File tree

src/main/java/de/kcodeyt/headsdb/command/HeadDBCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import cn.nukkit.form.element.ElementSlider;
77
import cn.nukkit.form.window.FormWindowCustom;
88
import de.kcodeyt.headsdb.HeadsDB;
9-
import de.kcodeyt.headsdb.database.DBSkin;
9+
import de.kcodeyt.headsdb.database.HeadEntry;
1010
import de.kcodeyt.headsdb.util.FormAPI;
1111

1212
import java.util.List;
@@ -53,10 +53,10 @@ public boolean execute(CommandSender sender, String commandLabel, String[] args)
5353
amount = 1;
5454
}
5555

56-
final List<DBSkin> dbSkins = this.headsDB.getDatabase().getDbSkins();
56+
final List<HeadEntry> headEntries = this.headsDB.getDatabase().getHeadEntries();
5757
final Random random = ThreadLocalRandom.current();
5858
for(int i = 0; i < amount; i++)
59-
this.headsDB.getDatabase().giveItem((Player) sender, dbSkins.get(random.nextInt(dbSkins.size())));
59+
this.headsDB.getDatabase().giveItem((Player) sender, headEntries.get(random.nextInt(headEntries.size())));
6060
return true;
6161
}
6262
break;
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package de.kcodeyt.headsdb.database;
22

3-
import lombok.AllArgsConstructor;
43
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
import lombok.ToString;
56

67
import java.util.List;
78

89
@Getter
9-
@AllArgsConstructor
10+
@ToString
11+
@RequiredArgsConstructor
1012
class Category {
1113

12-
private final Categories categories;
14+
private final CategoryEnum categoryEnum;
1315
private final String displayName;
1416
private final String displaySkin;
15-
private final List<DBSkin> skins;
17+
private final List<HeadEntry> entries;
1618

1719
}

src/main/java/de/kcodeyt/headsdb/database/Categories.java renamed to src/main/java/de/kcodeyt/headsdb/database/CategoryEnum.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
@Getter
77
@AllArgsConstructor
8-
public enum Categories {
8+
public enum CategoryEnum {
99

1010
ALPHABET("Alphabet", "alphabet"),
1111
ANIMALS("Animals", "animals"),

src/main/java/de/kcodeyt/headsdb/database/DBSkin.java

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/main/java/de/kcodeyt/headsdb/database/Database.java

Lines changed: 40 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import cn.nukkit.Player;
44
import cn.nukkit.Server;
55
import cn.nukkit.form.element.ElementButton;
6-
import cn.nukkit.form.element.ElementButtonImageData;
76
import cn.nukkit.form.window.FormWindowSimple;
87
import cn.nukkit.item.Item;
98
import com.google.common.collect.Iterables;
@@ -16,11 +15,11 @@
1615

1716
import java.io.IOException;
1817
import java.io.InputStream;
18+
import java.io.InputStreamReader;
19+
import java.io.Reader;
1920
import java.net.HttpURLConnection;
2021
import java.net.URL;
21-
import java.nio.charset.StandardCharsets;
2222
import java.util.*;
23-
import java.util.stream.Collectors;
2423

2524
@Getter
2625
public 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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package de.kcodeyt.headsdb.database;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.ToString;
6+
7+
@Getter
8+
@ToString
9+
@NoArgsConstructor
10+
public class HeadEntry {
11+
12+
private final String name = null;
13+
private final String id = null;
14+
private final String texture = null;
15+
16+
}

src/main/java/de/kcodeyt/headsdb/util/FormAPI.java

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,22 @@
66
import cn.nukkit.event.player.PlayerFormRespondedEvent;
77
import cn.nukkit.event.player.PlayerQuitEvent;
88
import cn.nukkit.form.window.FormWindow;
9-
import cn.nukkit.plugin.Plugin;
10-
import cn.nukkit.plugin.PluginManager;
119
import cn.nukkit.scheduler.TaskHandler;
12-
import de.kcodeyt.headsdb.HeadsDB;
1310

1411
import java.lang.reflect.Field;
15-
import java.util.*;
12+
import java.util.HashMap;
13+
import java.util.Map;
1614

1715
public class FormAPI {
1816

1917
private static final Map<FormWindow, Handler> HANDLERS = new HashMap<>();
20-
private static final FormListener FORM_LISTENER = new FormListener();
2118

2219
public static void create(Player player, FormWindow formWindow, Runnable onResponse) {
2320
new Handler(player, formWindow, onResponse);
2421
}
2522

2623
public static class FormListener implements Listener {
2724

28-
private HeadsDB headsDB;
29-
3025
@EventHandler
3126
public void onForm(PlayerFormRespondedEvent event) {
3227
this.handle(event.getWindow(), false);
@@ -51,19 +46,6 @@ private void handle(FormWindow formWindow, boolean isQuit) {
5146
handler.handle(isQuit);
5247
}
5348

54-
private boolean register(Player player) {
55-
if(this.headsDB != null)
56-
return true;
57-
final PluginManager pluginManager = player.getServer().getPluginManager();
58-
for(final Plugin plugin : pluginManager.getPlugins().values()) {
59-
if(plugin instanceof HeadsDB) {
60-
pluginManager.registerEvents(this, this.headsDB = (HeadsDB) plugin);
61-
return true;
62-
}
63-
}
64-
return false;
65-
}
66-
6749
}
6850

6951
private static class Handler {
@@ -73,14 +55,9 @@ private static class Handler {
7355

7456
private Handler(Player player, FormWindow formWindow, Runnable runnable) {
7557
this.runnable = runnable;
76-
if(FORM_LISTENER.register(player)) {
77-
HANDLERS.put(formWindow, this);
78-
player.showFormWindow(formWindow);
79-
this.taskHandler = player.getServer().getScheduler().scheduleDelayedRepeatingTask(FORM_LISTENER.headsDB, player::sendExperience, 3, 3);
80-
return;
81-
}
82-
83-
this.taskHandler = null;
58+
player.showFormWindow(formWindow);
59+
this.taskHandler = player.getServer().getScheduler().scheduleDelayedRepeatingTask(null, player::sendExperience, 3, 3);
60+
HANDLERS.put(formWindow, this);
8461
}
8562

8663
private void handle(boolean isQuit) {
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.kcodeyt.headsdb.util;
22

3+
import cn.nukkit.form.element.ElementButtonImageData;
34
import de.kcodeyt.heads.util.api.Mojang;
45
import de.kcodeyt.heads.util.api.SkinAPI;
56

@@ -8,8 +9,12 @@ public class HeadRender {
89
private static final String URL = "https://mc-heads.net/head/";
910
private static final int SIZE = 256;
1011

11-
public static String createUrl(String texture) {
12+
private static String createUrl(String texture) {
1213
return URL + SkinAPI.fromBase64(texture).substring(Mojang.TEXTURES.length()) + "/" + SIZE;
1314
}
1415

16+
public static ElementButtonImageData createButtonImage(String texture) {
17+
return new ElementButtonImageData(ElementButtonImageData.IMAGE_DATA_TYPE_URL, HeadRender.createUrl(texture));
18+
}
19+
1520
}

0 commit comments

Comments
 (0)