Added latest pack option and changed from tags to category.

This commit is contained in:
Brianna 2019-05-08 14:06:36 -04:00
parent 622dfc62a0
commit 41b4fc0eb2
10 changed files with 104 additions and 66 deletions

View File

@ -1,9 +1,9 @@
package com.songoda.epicheads; package com.songoda.epicheads;
import com.songoda.epicheads.command.CommandManager; import com.songoda.epicheads.command.CommandManager;
import com.songoda.epicheads.head.Category;
import com.songoda.epicheads.head.Head; import com.songoda.epicheads.head.Head;
import com.songoda.epicheads.head.HeadManager; import com.songoda.epicheads.head.HeadManager;
import com.songoda.epicheads.head.Tag;
import com.songoda.epicheads.listeners.ItemListeners; import com.songoda.epicheads.listeners.ItemListeners;
import com.songoda.epicheads.listeners.LoginListeners; import com.songoda.epicheads.listeners.LoginListeners;
import com.songoda.epicheads.players.EPlayer; import com.songoda.epicheads.players.EPlayer;
@ -159,6 +159,7 @@ public class EpicHeads extends JavaPlugin {
private boolean loadHeads() { private boolean loadHeads() {
try { try {
this.headManager.clear(); this.headManager.clear();
this.headManager.addCategory(new Category("Latest Pack", true));
JSONParser parser = new JSONParser(); JSONParser parser = new JSONParser();
JSONArray jsonArray = (JSONArray) parser.parse(new FileReader(getDataFolder() + "/heads.json")); JSONArray jsonArray = (JSONArray) parser.parse(new FileReader(getDataFolder() + "/heads.json"));
@ -166,22 +167,23 @@ public class EpicHeads extends JavaPlugin {
for (Object o : jsonArray) { for (Object o : jsonArray) {
JSONObject jsonObject = (JSONObject) o; JSONObject jsonObject = (JSONObject) o;
String tags = (String) jsonObject.get("tags"); String categoryStr = (String) jsonObject.get("tags");
Optional<Tag> tagOptional = headManager.getTags().stream().filter(t -> t.getName().equalsIgnoreCase(tags)).findFirst(); Optional<Category> tagOptional = headManager.getTags().stream().filter(t -> t.getName().equalsIgnoreCase(categoryStr)).findFirst();
Tag tag = tagOptional.orElseGet(() -> new Tag(tags)); Category category = tagOptional.orElseGet(() -> new Category(categoryStr));
Head head = new Head(Integer.parseInt((String) jsonObject.get("id")), Head head = new Head(Integer.parseInt((String) jsonObject.get("id")),
(String) jsonObject.get("name"), (String) jsonObject.get("name"),
(String) jsonObject.get("url"), (String) jsonObject.get("url"),
tag, category,
(String) jsonObject.get("pack"),
Byte.parseByte((String) jsonObject.get("staff_picked"))); Byte.parseByte((String) jsonObject.get("staff_picked")));
if (head.getName() == null || if (head.getName() == null || head.getName().equals("null")
head.getName().equals("null")) continue; || head.getPack() != null && head.getPack().equals("null")) continue;
if (!tagOptional.isPresent()) if (!tagOptional.isPresent())
headManager.addTag(tag); headManager.addCategory(category);
headManager.addHead(head); headManager.addHead(head);
} }
@ -189,19 +191,20 @@ public class EpicHeads extends JavaPlugin {
for (StorageRow row : storage.getRowsByGroup("local")) { for (StorageRow row : storage.getRowsByGroup("local")) {
String tagStr = row.get("category").asString(); String tagStr = row.get("category").asString();
Optional<Tag> tagOptional = headManager.getTags().stream() Optional<Category> tagOptional = headManager.getTags().stream()
.filter(t -> t.getName().equalsIgnoreCase(tagStr)).findFirst(); .filter(t -> t.getName().equalsIgnoreCase(tagStr)).findFirst();
Tag tag = tagOptional.orElseGet(() -> new Tag(tagStr)); Category category = tagOptional.orElseGet(() -> new Category(tagStr));
Head head = new Head(row.get("id").asInt(), Head head = new Head(row.get("id").asInt(),
row.get("name").asString(), row.get("name").asString(),
row.get("url").asString(), row.get("url").asString(),
tag, category,
null,
(byte) 0); (byte) 0);
if (!tagOptional.isPresent()) if (!tagOptional.isPresent())
headManager.addTag(tag); headManager.addCategory(category);
headManager.addLocalHead(head); headManager.addLocalHead(head);
} }
} }

View File

@ -2,7 +2,7 @@ package com.songoda.epicheads.gui;
import com.songoda.epicheads.EpicHeads; import com.songoda.epicheads.EpicHeads;
import com.songoda.epicheads.head.Head; import com.songoda.epicheads.head.Head;
import com.songoda.epicheads.head.Tag; import com.songoda.epicheads.head.Category;
import com.songoda.epicheads.players.EPlayer; import com.songoda.epicheads.players.EPlayer;
import com.songoda.epicheads.utils.AbstractChatConfirm; import com.songoda.epicheads.utils.AbstractChatConfirm;
import com.songoda.epicheads.utils.SettingsManager; import com.songoda.epicheads.utils.SettingsManager;
@ -52,10 +52,10 @@ public class GUIHeads extends AbstractGUI {
player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("general.search.nonefound")); player.sendMessage(plugin.getReferences().getPrefix() + plugin.getLocale().getMessage("general.search.nonefound"));
return; return;
} }
Tag tag = heads.get(0).getTag(); Category category = heads.get(0).getCategory();
this.maxPage = (int) Math.floor(numHeads / 45.0); this.maxPage = (int) Math.floor(numHeads / 45.0);
init((query != null ? plugin.getLocale().getMessage("general.word.query") + ": " + query : tag.getName()) init((query != null ? plugin.getLocale().getMessage("general.word.query") + ": " + query : category.getName())
+ " (" + numHeads + ") " + plugin.getLocale().getMessage("general.word.page") + " " + (page + 1) + "/" + (maxPage + 1), 54); + " (" + numHeads + ") " + plugin.getLocale().getMessage("general.word.page") + " " + (page + 1) + "/" + (maxPage + 1), 54);
constructGUI(); constructGUI();
} }

View File

@ -1,7 +1,8 @@
package com.songoda.epicheads.gui; package com.songoda.epicheads.gui;
import com.songoda.epicheads.EpicHeads; import com.songoda.epicheads.EpicHeads;
import com.songoda.epicheads.head.Tag; import com.songoda.epicheads.head.Category;
import com.songoda.epicheads.head.Head;
import com.songoda.epicheads.utils.Methods; import com.songoda.epicheads.utils.Methods;
import com.songoda.epicheads.utils.ServerVersion; import com.songoda.epicheads.utils.ServerVersion;
import com.songoda.epicheads.utils.SettingsManager; import com.songoda.epicheads.utils.SettingsManager;
@ -57,23 +58,27 @@ public class GUIOverview extends AbstractGUI {
inventory.setItem(38, Methods.getBackgroundGlass(false)); inventory.setItem(38, Methods.getBackgroundGlass(false));
inventory.setItem(42, Methods.getBackgroundGlass(false)); inventory.setItem(42, Methods.getBackgroundGlass(false));
List<Tag> tags = plugin.getHeadManager().getTags(); List<Category> tags = plugin.getHeadManager().getTags();
int add = 0; int add = 0;
for (int i = 0; i < tags.size(); i++) { for (int i = 0; i < tags.size(); i++) {
if (i + add == 7 || i + add == 16) add = add + 2; if (i + add == 7 || i + add == 16) add = add + 2;
Tag tag = plugin.getHeadManager().getTags().get(i); Category category = plugin.getHeadManager().getTags().get(i);
if (!player.hasPermission("epicheads.category." + tag.getName().replace(" ", "_"))) continue; List<Head> heads = category.isLatestPack() ? plugin.getHeadManager().getLatestPack() : plugin.getHeadManager().getHeadsByTag(category);
Head firstHead = heads.get(0);
if (!player.hasPermission("epicheads.category." + category.getName().replace(" ", "_"))) continue;
createButton(i + 10 + add, Methods.addTexture(new ItemStack(plugin.isServerVersionAtLeast(ServerVersion.V1_13) createButton(i + 10 + add, Methods.addTexture(new ItemStack(plugin.isServerVersionAtLeast(ServerVersion.V1_13)
? Material.PLAYER_HEAD : Material.valueOf("SKULL_ITEM"), 1, (byte) 3), ? Material.PLAYER_HEAD : Material.valueOf("SKULL_ITEM"), 1, (byte) 3),
plugin.getHeadManager().getHeadsByTag(tag).get(0).getURL()), firstHead.getURL()),
plugin.getLocale().getMessage("gui.overview.headname", Color.getRandomColor() + tag.getName()), plugin.getLocale().getMessage("gui.overview.headname", Color.getRandomColor() + category.getName()),
plugin.getLocale().getMessage("gui.overview.headlore", String.format("%,d", tag.getCount()))); category.isLatestPack() ? plugin.getLocale().getMessage("gui.overview.packlore", firstHead.getPack()) : plugin.getLocale().getMessage("gui.overview.headlore", String.format("%,d", category.getCount())));
registerClickable(i + 10 + add, ((player1, inventory1, cursor, slot, type) -> registerClickable(i + 10 + add, ((player1, inventory1, cursor, slot, type) ->
new GUIHeads(plugin, player, null, plugin.getHeadManager().getHeadsByTag(tag)))); new GUIHeads(plugin, player, category.isLatestPack() ? category.getName() : null, heads)));
} }
createButton(SettingsManager.Setting.DISCORD.getBoolean() ? 39 : 40, Material.COMPASS, plugin.getLocale().getMessage("gui.overview.search")); createButton(SettingsManager.Setting.DISCORD.getBoolean() ? 39 : 40, Material.COMPASS, plugin.getLocale().getMessage("gui.overview.search"));
@ -92,7 +97,6 @@ public class GUIOverview extends AbstractGUI {
plugin.getLocale().getMessage("gui.overview.discord"), plugin.getLocale().getMessage("gui.overview.discord"),
lore2); lore2);
} }
} }
@Override @Override

View File

@ -0,0 +1,31 @@
package com.songoda.epicheads.head;
import com.songoda.epicheads.EpicHeads;
public class Category {
private final String name;
private boolean latestPack = false;
public Category(String name) {
this.name = name;
}
public Category(String name, boolean latestPack) {
this.name = name;
this.latestPack = latestPack;
}
public String getName() {
return name;
}
public boolean isLatestPack() {
return latestPack;
}
public int getCount() {
return Math.toIntExact(EpicHeads.getInstance().getHeadManager()
.getHeads().stream().filter(head -> head.getCategory() == this).count());
}
}

View File

@ -11,21 +11,24 @@ import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
public class Head { public class Head {
private final int id; private final int id;
private final String name; private final String name;
private final String URL; private final String URL;
private final String pack;
private final byte staffPicked; private final byte staffPicked;
private final Tag tag; private final Category category;
public Head(int id, String name, String URL, Tag tag, byte staffPicked) { public Head(int id, String name, String URL, Category category, String pack, byte staffPicked) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.URL = URL; this.URL = URL;
this.tag = tag; this.category = category;
this.pack = pack;
this.staffPicked = staffPicked; this.staffPicked = staffPicked;
} }
@ -37,12 +40,14 @@ public class Head {
return name; return name;
} }
public String getPack() { return pack; }
public String getURL() { public String getURL() {
return URL; return URL;
} }
public Tag getTag() { public Category getCategory() {
return tag; return category;
} }
public byte getStaffPicked() { public byte getStaffPicked() {
@ -81,7 +86,8 @@ public class Head {
+ "Id:\"" + id + "\"," + "Id:\"" + id + "\","
+ "Name:\"" + name + "\"," + "Name:\"" + name + "\","
+ "URL:\"" + URL + "\"," + "URL:\"" + URL + "\","
+ "Tags:\"" + tag.getName() + "\"," + "Category:\"" + category.getName() + "\","
+ "Pack:\"" + pack + "\","
+ "StaffPicked:\"" + staffPicked + "\"" + "StaffPicked:\"" + staffPicked + "\""
+ "}"; + "}";
} }

View File

@ -8,7 +8,7 @@ public class HeadManager {
private static final Set<Head> registeredHeads = new HashSet<>(); private static final Set<Head> registeredHeads = new HashSet<>();
private static final List<Head> localRegisteredHeads = new ArrayList<>(); private static final List<Head> localRegisteredHeads = new ArrayList<>();
private static final List<Tag> registeredTags = new ArrayList<>(); private static final List<Category> registeredTags = new ArrayList<>();
public Head addHead(Head head) { public Head addHead(Head head) {
registeredHeads.add(head); registeredHeads.add(head);
@ -43,17 +43,17 @@ public class HeadManager {
List<Head> result = getHeads().stream().filter(head -> head.getName().contains(query)).collect(Collectors.toList()); List<Head> result = getHeads().stream().filter(head -> head.getName().contains(query)).collect(Collectors.toList());
if (result.isEmpty()) { if (result.isEmpty()) {
for (Tag tag : registeredTags) { for (Category tag : registeredTags) {
if (!tag.getName().equalsIgnoreCase(query)) continue; if (!tag.getName().equalsIgnoreCase(query)) continue;
return getHeads().stream().filter(head -> head.getTag() == tag).collect(Collectors.toList()); return getHeads().stream().filter(head -> head.getCategory() == tag).collect(Collectors.toList());
} }
} }
return result; return result;
} }
public List<Head> getHeadsByTag(Tag tag) { public List<Head> getHeadsByTag(Category tag) {
return getHeads().stream().filter(head -> head.getTag() == tag).collect(Collectors.toList()); return getHeads().stream().filter(head -> head.getCategory() == tag).collect(Collectors.toList());
} }
public List<Head> getHeads() { public List<Head> getHeads() {
@ -76,16 +76,30 @@ public class HeadManager {
return new ArrayList<>(registeredHeads); return new ArrayList<>(registeredHeads);
} }
public List<Head> getLatestPack() {
List<Head> heads = getHeads().stream().sorted(Comparator.comparingInt(Head::getId)).filter(head -> head.getPack() != null).collect(Collectors.toList());
Collections.reverse(heads);
if (heads.isEmpty()) return new ArrayList<>();
String latestPack = heads.get(0).getPack();
heads = heads.stream().filter(head -> head.getPack().equals(latestPack)).collect(Collectors.toList());
return heads;
}
public void removeLocalHead(Head head) { public void removeLocalHead(Head head) {
localRegisteredHeads.remove(head); localRegisteredHeads.remove(head);
} }
public Tag addTag(Tag tag) { public Category addCategory(Category category) {
registeredTags.add(tag); registeredTags.add(category);
return tag; return category;
} }
public List<Tag> getTags() { public List<Category> getTags() {
return Collections.unmodifiableList(registeredTags); return Collections.unmodifiableList(registeredTags);
} }

View File

@ -1,21 +0,0 @@
package com.songoda.epicheads.head;
import com.songoda.epicheads.EpicHeads;
public class Tag {
private final String name;
public Tag(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getCount() {
return Math.toIntExact(EpicHeads.getInstance().getHeadManager()
.getHeads().stream().filter(head -> head.getTag() == this).count());
}
}

View File

@ -3,7 +3,7 @@ package com.songoda.epicheads.listeners;
import com.songoda.epicheads.EpicHeads; import com.songoda.epicheads.EpicHeads;
import com.songoda.epicheads.head.Head; import com.songoda.epicheads.head.Head;
import com.songoda.epicheads.head.HeadManager; import com.songoda.epicheads.head.HeadManager;
import com.songoda.epicheads.head.Tag; import com.songoda.epicheads.head.Category;
import com.songoda.epicheads.utils.Methods; import com.songoda.epicheads.utils.Methods;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -32,13 +32,13 @@ public class LoginListeners implements Listener {
String tagStr = "Player Heads"; String tagStr = "Player Heads";
Optional<Tag> tagOptional = headManager.getTags() Optional<Category> tagOptional = headManager.getTags()
.stream().filter(t -> t.getName().equalsIgnoreCase(tagStr)).findFirst(); .stream().filter(t -> t.getName().equalsIgnoreCase(tagStr)).findFirst();
Tag tag = tagOptional.orElseGet(() -> new Tag(tagStr)); Category tag = tagOptional.orElseGet(() -> new Category(tagStr));
if (!tagOptional.isPresent()) if (!tagOptional.isPresent())
headManager.addTag(tag); headManager.addCategory(tag);
Optional<Head> optional = headManager.getLocalHeads().stream() Optional<Head> optional = headManager.getLocalHeads().stream()
.filter(h -> h.getName().equalsIgnoreCase(event.getPlayer().getName())).findFirst(); .filter(h -> h.getName().equalsIgnoreCase(event.getPlayer().getName())).findFirst();
@ -51,7 +51,7 @@ public class LoginListeners implements Listener {
headManager.removeLocalHead(head); headManager.removeLocalHead(head);
} }
headManager.addLocalHeads(new Head(id, player.getName(), url, tag, (byte) 0)); headManager.addLocalHeads(new Head(id, player.getName(), url, tag, null, (byte) 0));
} }

View File

@ -37,7 +37,7 @@ public abstract class Storage {
prepareSaveItem("local", new StorageItem("url", head.getURL()), prepareSaveItem("local", new StorageItem("url", head.getURL()),
new StorageItem("name", head.getName()), new StorageItem("name", head.getName()),
new StorageItem("id", head.getId()), new StorageItem("id", head.getId()),
new StorageItem("category", head.getTag().getName())); new StorageItem("category", head.getCategory().getName()));
} }
} }

View File

@ -21,6 +21,7 @@ gui.overview.title = "EpicHeads (%count% heads)"
gui.overview.search = "&a&lSearch" gui.overview.search = "&a&lSearch"
gui.overview.headname = "&c&l%name%" gui.overview.headname = "&c&l%name%"
gui.overview.headlore = "&e%count% heads" gui.overview.headlore = "&e%count% heads"
gui.overview.packlore = "&e%pack%"
gui.overview.viewfavorites = "&6&lView Favorites" gui.overview.viewfavorites = "&6&lView Favorites"
gui.overview.favoriteslore = "&8Shift click any head|&8to save as a favorite." gui.overview.favoriteslore = "&8Shift click any head|&8to save as a favorite."
gui.overview.discord = "&9&lDiscord" gui.overview.discord = "&9&lDiscord"