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

View File

@ -2,7 +2,7 @@ package com.songoda.epicheads.gui;
import com.songoda.epicheads.EpicHeads;
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.utils.AbstractChatConfirm;
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"));
return;
}
Tag tag = heads.get(0).getTag();
Category category = heads.get(0).getCategory();
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);
constructGUI();
}

View File

@ -1,7 +1,8 @@
package com.songoda.epicheads.gui;
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.ServerVersion;
import com.songoda.epicheads.utils.SettingsManager;
@ -57,23 +58,27 @@ public class GUIOverview extends AbstractGUI {
inventory.setItem(38, Methods.getBackgroundGlass(false));
inventory.setItem(42, Methods.getBackgroundGlass(false));
List<Tag> tags = plugin.getHeadManager().getTags();
List<Category> tags = plugin.getHeadManager().getTags();
int add = 0;
for (int i = 0; i < tags.size(); i++) {
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)
? Material.PLAYER_HEAD : Material.valueOf("SKULL_ITEM"), 1, (byte) 3),
plugin.getHeadManager().getHeadsByTag(tag).get(0).getURL()),
plugin.getLocale().getMessage("gui.overview.headname", Color.getRandomColor() + tag.getName()),
plugin.getLocale().getMessage("gui.overview.headlore", String.format("%,d", tag.getCount())));
firstHead.getURL()),
plugin.getLocale().getMessage("gui.overview.headname", Color.getRandomColor() + category.getName()),
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) ->
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"));
@ -92,7 +97,6 @@ public class GUIOverview extends AbstractGUI {
plugin.getLocale().getMessage("gui.overview.discord"),
lore2);
}
}
@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.List;
import java.util.Optional;
public class Head {
private final int id;
private final String name;
private final String URL;
private final String pack;
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.name = name;
this.URL = URL;
this.tag = tag;
this.category = category;
this.pack = pack;
this.staffPicked = staffPicked;
}
@ -37,12 +40,14 @@ public class Head {
return name;
}
public String getPack() { return pack; }
public String getURL() {
return URL;
}
public Tag getTag() {
return tag;
public Category getCategory() {
return category;
}
public byte getStaffPicked() {
@ -81,7 +86,8 @@ public class Head {
+ "Id:\"" + id + "\","
+ "Name:\"" + name + "\","
+ "URL:\"" + URL + "\","
+ "Tags:\"" + tag.getName() + "\","
+ "Category:\"" + category.getName() + "\","
+ "Pack:\"" + pack + "\","
+ "StaffPicked:\"" + staffPicked + "\""
+ "}";
}

View File

@ -8,7 +8,7 @@ public class HeadManager {
private static final Set<Head> registeredHeads = new HashSet<>();
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) {
registeredHeads.add(head);
@ -43,17 +43,17 @@ public class HeadManager {
List<Head> result = getHeads().stream().filter(head -> head.getName().contains(query)).collect(Collectors.toList());
if (result.isEmpty()) {
for (Tag tag : registeredTags) {
for (Category tag : registeredTags) {
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;
}
public List<Head> getHeadsByTag(Tag tag) {
return getHeads().stream().filter(head -> head.getTag() == tag).collect(Collectors.toList());
public List<Head> getHeadsByTag(Category tag) {
return getHeads().stream().filter(head -> head.getCategory() == tag).collect(Collectors.toList());
}
public List<Head> getHeads() {
@ -76,16 +76,30 @@ public class HeadManager {
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) {
localRegisteredHeads.remove(head);
}
public Tag addTag(Tag tag) {
registeredTags.add(tag);
return tag;
public Category addCategory(Category category) {
registeredTags.add(category);
return category;
}
public List<Tag> getTags() {
public List<Category> getTags() {
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.head.Head;
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 org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -32,13 +32,13 @@ public class LoginListeners implements Listener {
String tagStr = "Player Heads";
Optional<Tag> tagOptional = headManager.getTags()
Optional<Category> tagOptional = headManager.getTags()
.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())
headManager.addTag(tag);
headManager.addCategory(tag);
Optional<Head> optional = headManager.getLocalHeads().stream()
.filter(h -> h.getName().equalsIgnoreCase(event.getPlayer().getName())).findFirst();
@ -51,7 +51,7 @@ public class LoginListeners implements Listener {
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()),
new StorageItem("name", head.getName()),
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.headname = "&c&l%name%"
gui.overview.headlore = "&e%count% heads"
gui.overview.packlore = "&e%pack%"
gui.overview.viewfavorites = "&6&lView Favorites"
gui.overview.favoriteslore = "&8Shift click any head|&8to save as a favorite."
gui.overview.discord = "&9&lDiscord"