mirror of
https://gitlab.com/phoenix-dvpmt/mmocore.git
synced 2024-12-27 05:28:25 +01:00
fixed an npe with friend list
This commit is contained in:
parent
8b85248918
commit
8c95245ffb
7
pom.xml
7
pom.xml
@ -102,12 +102,6 @@
|
||||
<url>https://papermc.io/repo/repository/maven-public/</url>
|
||||
</repository>
|
||||
|
||||
<!-- holographic displays -->
|
||||
<repository>
|
||||
<id>codemc-repo</id>
|
||||
<url>https://repo.codemc.io/repository/maven-public/</url>
|
||||
</repository>
|
||||
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
@ -176,7 +170,6 @@
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Local repo -->
|
||||
<dependency>
|
||||
<groupId>com.bekvon.bukkit.residence</groupId>
|
||||
<artifactId>Residence</artifactId>
|
||||
|
@ -27,284 +27,222 @@ import org.bukkit.inventory.meta.SkullMeta;
|
||||
import java.util.UUID;
|
||||
|
||||
public class EditableFriendList extends EditableInventory {
|
||||
public EditableFriendList() {
|
||||
super("friend-list");
|
||||
}
|
||||
public EditableFriendList() {
|
||||
super("friend-list");
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryItem load(String function, ConfigurationSection config) {
|
||||
@Override
|
||||
public InventoryItem load(String function, ConfigurationSection config) {
|
||||
|
||||
if (function.equals("friend"))
|
||||
return new FriendItem(config);
|
||||
if (function.equals("friend"))
|
||||
return new FriendItem(config);
|
||||
|
||||
if (function.equals("previous"))
|
||||
return new SimplePlaceholderItem<FriendListInventory>(config) {
|
||||
if (function.equals("previous"))
|
||||
return new SimplePlaceholderItem<FriendListInventory>(config) {
|
||||
|
||||
@Override
|
||||
public boolean canDisplay(FriendListInventory inv) {
|
||||
return inv.page > 0;
|
||||
}
|
||||
};
|
||||
@Override
|
||||
public boolean canDisplay(FriendListInventory inv) {
|
||||
return inv.page > 0;
|
||||
}
|
||||
};
|
||||
|
||||
if (function.equals("next"))
|
||||
return new SimplePlaceholderItem<FriendListInventory>(config) {
|
||||
if (function.equals("next"))
|
||||
return new SimplePlaceholderItem<FriendListInventory>(config) {
|
||||
|
||||
@Override
|
||||
public boolean canDisplay(FriendListInventory inv) {
|
||||
return inv.getEditable().getByFunction("friend").getSlots().size() * inv.page < inv.getPlayerData().getFriends().size();
|
||||
}
|
||||
};
|
||||
@Override
|
||||
public boolean canDisplay(FriendListInventory inv) {
|
||||
return inv.getEditable().getByFunction("friend").getSlots().size() * inv.page < inv.getPlayerData().getFriends().size();
|
||||
}
|
||||
};
|
||||
|
||||
return new SimplePlaceholderItem(config);
|
||||
}
|
||||
return new SimplePlaceholderItem(config);
|
||||
}
|
||||
|
||||
public GeneratedInventory newInventory(PlayerData data) {
|
||||
return new FriendListInventory(data, this);
|
||||
}
|
||||
public GeneratedInventory newInventory(PlayerData data) {
|
||||
return new FriendListInventory(data, this);
|
||||
}
|
||||
|
||||
public static class OfflineFriendItem extends InventoryItem {
|
||||
public OfflineFriendItem(ConfigurationSection config) {
|
||||
super(config);
|
||||
}
|
||||
public static class OfflineFriendItem extends InventoryItem {
|
||||
public OfflineFriendItem(ConfigurationSection config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDifferentDisplay() {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean hasDifferentDisplay() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(inv.getPlayerData().getFriends().get(n));
|
||||
@Override
|
||||
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(inv.getPlayerData().getFriends().get(n));
|
||||
|
||||
Placeholders holders = new Placeholders();
|
||||
holders.register("name", friend.getName());
|
||||
holders.register("last_seen", new DelayFormat(2).format(System.currentTimeMillis() - friend.getLastPlayed()));
|
||||
return holders;
|
||||
}
|
||||
Placeholders holders = new Placeholders();
|
||||
holders.register("name", friend.getName());
|
||||
holders.register("last_seen", new DelayFormat(2).format(System.currentTimeMillis() - friend.getLastPlayed()));
|
||||
return holders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack display(GeneratedInventory inv, int n) {
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(inv.getPlayerData().getFriends().get(n));
|
||||
@Override
|
||||
public ItemStack display(GeneratedInventory inv, int n) {
|
||||
OfflinePlayer friend = Bukkit.getOfflinePlayer(inv.getPlayerData().getFriends().get(n));
|
||||
|
||||
ItemStack disp = super.display(inv, n);
|
||||
ItemMeta meta = disp.getItemMeta();
|
||||
ItemStack disp = super.display(inv, n);
|
||||
ItemMeta meta = disp.getItemMeta();
|
||||
|
||||
if (meta instanceof SkullMeta)
|
||||
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {
|
||||
((SkullMeta) meta).setOwningPlayer(friend);
|
||||
disp.setItemMeta(meta);
|
||||
});
|
||||
if (meta instanceof SkullMeta)
|
||||
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {
|
||||
((SkullMeta) meta).setOwningPlayer(friend);
|
||||
disp.setItemMeta(meta);
|
||||
});
|
||||
|
||||
return NBTItem.get(disp).addTag(new ItemTag("uuid", friend.getUniqueId().toString())).toItem();
|
||||
}
|
||||
}
|
||||
return NBTItem.get(disp).addTag(new ItemTag("uuid", friend.getUniqueId().toString())).toItem();
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnlineFriendItem extends SimplePlaceholderItem {
|
||||
public OnlineFriendItem(ConfigurationSection config) {
|
||||
super(config);
|
||||
}
|
||||
public static class OnlineFriendItem extends SimplePlaceholderItem {
|
||||
public OnlineFriendItem(ConfigurationSection config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDifferentDisplay() {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean hasDifferentDisplay() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
|
||||
Player friend = Bukkit.getPlayer(inv.getPlayerData().getFriends().get(n));
|
||||
PlayerData data = PlayerData.get(friend);
|
||||
@Override
|
||||
public Placeholders getPlaceholders(GeneratedInventory inv, int n) {
|
||||
Player friend = Bukkit.getPlayer(inv.getPlayerData().getFriends().get(n));
|
||||
PlayerData data = PlayerData.get(friend);
|
||||
|
||||
Placeholders holders = new Placeholders();
|
||||
if (data.isOnline())
|
||||
holders.register("name", data.getPlayer().getName());
|
||||
holders.register("class", data.getProfess().getName());
|
||||
holders.register("level", data.getLevel());
|
||||
holders.register("online_since", new DelayFormat(2).format(System.currentTimeMillis() - data.getLastLogin()));
|
||||
return holders;
|
||||
}
|
||||
Placeholders holders = new Placeholders();
|
||||
if (data.isOnline())
|
||||
holders.register("name", data.getPlayer().getName());
|
||||
holders.register("class", data.getProfess().getName());
|
||||
holders.register("level", data.getLevel());
|
||||
holders.register("online_since", new DelayFormat(2).format(System.currentTimeMillis() - data.getLastLogin()));
|
||||
return holders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack display(GeneratedInventory inv, int n) {
|
||||
Player friend = Bukkit.getPlayer(inv.getPlayerData().getFriends().get(n));
|
||||
@Override
|
||||
public ItemStack display(GeneratedInventory inv, int n) {
|
||||
Player friend = Bukkit.getPlayer(inv.getPlayerData().getFriends().get(n));
|
||||
|
||||
ItemStack disp = super.display(inv, n);
|
||||
ItemMeta meta = disp.getItemMeta();
|
||||
ItemStack disp = super.display(inv, n);
|
||||
ItemMeta meta = disp.getItemMeta();
|
||||
|
||||
if (meta instanceof SkullMeta)
|
||||
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {
|
||||
((SkullMeta) meta).setOwningPlayer(friend);
|
||||
disp.setItemMeta(meta);
|
||||
});
|
||||
if (meta instanceof SkullMeta)
|
||||
Bukkit.getScheduler().runTaskAsynchronously(MMOCore.plugin, () -> {
|
||||
((SkullMeta) meta).setOwningPlayer(friend);
|
||||
disp.setItemMeta(meta);
|
||||
});
|
||||
|
||||
return NBTItem.get(disp).addTag(new ItemTag("uuid", friend.getUniqueId().toString())).toItem();
|
||||
}
|
||||
}
|
||||
return NBTItem.get(disp).addTag(new ItemTag("uuid", friend.getUniqueId().toString())).toItem();
|
||||
}
|
||||
}
|
||||
|
||||
public static class FriendItem extends SimplePlaceholderItem {
|
||||
private final OnlineFriendItem online;
|
||||
private final OfflineFriendItem offline;
|
||||
public static class FriendItem extends SimplePlaceholderItem {
|
||||
private final OnlineFriendItem online;
|
||||
private final OfflineFriendItem offline;
|
||||
|
||||
public FriendItem(ConfigurationSection config) {
|
||||
super(config);
|
||||
public FriendItem(ConfigurationSection config) {
|
||||
super(config);
|
||||
|
||||
Validate.notNull(config.contains("online"), "Could not load online config");
|
||||
Validate.notNull(config.contains("offline"), "Could not load offline config");
|
||||
Validate.notNull(config.contains("online"), "Could not load online config");
|
||||
Validate.notNull(config.contains("offline"), "Could not load offline config");
|
||||
|
||||
online = new OnlineFriendItem(config.getConfigurationSection("online"));
|
||||
offline = new OfflineFriendItem(config.getConfigurationSection("offline"));
|
||||
}
|
||||
online = new OnlineFriendItem(config.getConfigurationSection("online"));
|
||||
offline = new OfflineFriendItem(config.getConfigurationSection("offline"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack display(GeneratedInventory inv, int n) {
|
||||
return inv.getPlayerData().getFriends().size() <= n ? super.display(inv, n)
|
||||
: Bukkit.getOfflinePlayer(inv.getPlayerData().getFriends().get(n)).isOnline() ? online.display(inv, n) : offline.display(inv, n);
|
||||
}
|
||||
@Override
|
||||
public ItemStack display(GeneratedInventory inv, int n) {
|
||||
return inv.getPlayerData().getFriends().size() <= n ? super.display(inv, n)
|
||||
: Bukkit.getOfflinePlayer(inv.getPlayerData().getFriends().get(n)).isOnline() ? online.display(inv, n) : offline.display(inv, n);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDifferentDisplay() {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean hasDifferentDisplay() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDisplay(GeneratedInventory inv) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public boolean canDisplay(GeneratedInventory inv) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public class FriendListInventory extends GeneratedInventory {
|
||||
private int page;
|
||||
public class FriendListInventory extends GeneratedInventory {
|
||||
private int page;
|
||||
|
||||
public FriendListInventory(PlayerData playerData, EditableInventory editable) {
|
||||
super(playerData, editable);
|
||||
}
|
||||
public FriendListInventory(PlayerData playerData, EditableInventory editable) {
|
||||
super(playerData, editable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String calculateName() {
|
||||
return getName();
|
||||
}
|
||||
@Override
|
||||
public String calculateName() {
|
||||
return getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void whenClicked(InventoryClickEvent event, InventoryItem item) {
|
||||
if (item.getFunction().equals("previous")) {
|
||||
page--;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
@Override
|
||||
public void whenClicked(InventoryClickEvent event, InventoryItem item) {
|
||||
if (item.getFunction().equals("previous")) {
|
||||
page--;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.getFunction().equals("next")) {
|
||||
page++;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
if (item.getFunction().equals("next")) {
|
||||
page++;
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.getFunction().equals("request")) {
|
||||
if (item.getFunction().equals("request")) {
|
||||
|
||||
long remaining = playerData.getLastFriendRequest() + 60 * 2 * 1000 - System.currentTimeMillis();
|
||||
if (remaining > 0) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("friend-request-cooldown", "cooldown", new DelayFormat().format(remaining))
|
||||
.send(player);
|
||||
return;
|
||||
}
|
||||
long remaining = playerData.getLastFriendRequest() + 60 * 2 * 1000 - System.currentTimeMillis();
|
||||
if (remaining > 0) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("friend-request-cooldown", "cooldown", new DelayFormat().format(remaining))
|
||||
.send(player);
|
||||
return;
|
||||
}
|
||||
|
||||
MMOCore.plugin.configManager.newPlayerInput(player, InputType.FRIEND_REQUEST, (input) -> {
|
||||
Player target = Bukkit.getPlayer(input);
|
||||
if (target == null) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("not-online-player", "player", input).send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
open();
|
||||
return;
|
||||
}
|
||||
MMOCore.plugin.configManager.newPlayerInput(player, InputType.FRIEND_REQUEST, (input) -> {
|
||||
Player target = Bukkit.getPlayer(input);
|
||||
if (target == null) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("not-online-player", "player", input).send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerData.hasFriend(target.getUniqueId())) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("already-friends", "player", target.getName()).send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
open();
|
||||
return;
|
||||
}
|
||||
if (playerData.hasFriend(target.getUniqueId())) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("already-friends", "player", target.getName()).send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
if (playerData.getUniqueId().equals(target.getUniqueId())) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("cant-request-to-yourself").send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
open();
|
||||
return;
|
||||
}
|
||||
if (playerData.getUniqueId().equals(target.getUniqueId())) {
|
||||
MMOCore.plugin.configManager.getSimpleMessage("cant-request-to-yourself").send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1);
|
||||
open();
|
||||
return;
|
||||
}
|
||||
|
||||
playerData.sendFriendRequest(PlayerData.get(target));
|
||||
MMOCore.plugin.configManager.getSimpleMessage("sent-friend-request", "player", target.getName()).send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
|
||||
open();
|
||||
});
|
||||
}
|
||||
playerData.sendFriendRequest(PlayerData.get(target));
|
||||
MMOCore.plugin.configManager.getSimpleMessage("sent-friend-request", "player", target.getName()).send(player);
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
|
||||
open();
|
||||
});
|
||||
}
|
||||
|
||||
if (item.getFunction().equals("friend") && event.getAction() == InventoryAction.PICKUP_HALF)
|
||||
InventoryManager.FRIEND_REMOVAL.newInventory(playerData,
|
||||
Bukkit.getOfflinePlayer(UUID.fromString(NBTItem.get(event.getCurrentItem()).getString("uuid"))), this).open();
|
||||
}
|
||||
}
|
||||
if (item.getFunction().equals("friend") && event.getAction() == InventoryAction.PICKUP_HALF) {
|
||||
String tag = NBTItem.get(event.getCurrentItem()).getString("uuid");
|
||||
if (tag == null || tag.isEmpty())
|
||||
return;
|
||||
|
||||
// private int page;
|
||||
// private ItemStack next, prev, newreq;
|
||||
//
|
||||
// private int[] slots = { 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23,
|
||||
// 24, 25, 28, 29, 30, 31, 32, 33, 34 };
|
||||
//
|
||||
// public EditableFriendList(Player player) {
|
||||
// this(player, 1);
|
||||
// }
|
||||
//
|
||||
// public EditableFriendList(Player player, int page) {
|
||||
// super(player);
|
||||
// this.page = page;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Inventory getInventory() {
|
||||
// Inventory inv = Bukkit.createInventory(this, 54, "Friends");
|
||||
//
|
||||
// int n = 0;
|
||||
// for (int j = 21 * (page - 1); j < Math.min(21 * page,
|
||||
// playerData.getFriends().size()); j++) {
|
||||
//
|
||||
// /*
|
||||
// * if the player is not found, delete it from the friend list.
|
||||
// */
|
||||
// UUID uuid = playerData.getFriends().get(j);
|
||||
// OfflinePlayer offline = Bukkit.getOfflinePlayer(uuid);
|
||||
// if (offline == null || offline.getName() == null) {
|
||||
// playerData.removeFriend(uuid);
|
||||
// continue;
|
||||
// }
|
||||
//
|
||||
// PlayerDataManager data;
|
||||
// ItemStack item = offline.isOnline() ? new
|
||||
// ConfigItem("ONLINE_FRIEND").addPlaceholders("name", offline.getName(),
|
||||
// "online_since", "" + new DelayFormat(2).format(System.currentTimeMillis()
|
||||
// - (data = PlayerDataManager.get(offline)).getLastLogin()), "class",
|
||||
// data.getProfess().getName(), "level", "" + data.getLevel()).build() : new
|
||||
// ConfigItem("OFFLINE_FRIEND").addPlaceholders("name", offline.getName(),
|
||||
// "last_seen", new DelayFormat(2).format(System.currentTimeMillis() -
|
||||
// offline.getLastPlayed())).build();
|
||||
//
|
||||
// SkullMeta meta = (SkullMeta) item.getItemMeta();
|
||||
// meta.setOwningPlayer(offline);
|
||||
// item.setItemMeta(meta);
|
||||
//
|
||||
// inv.setItem(slots[n++], NBTItem.get(item).add(new ItemTag("uuid",
|
||||
// offline.getUniqueId().toString())).toItem());
|
||||
// }
|
||||
//
|
||||
// if (page > 1)
|
||||
// inv.setItem(18, prev = new ConfigItem("PREVIOUS_PAGE").build());
|
||||
//
|
||||
// if (playerData.getFriends().size() > 21 * page)
|
||||
// inv.setItem(26, next = new ConfigItem("NEXT_PAGE").build());
|
||||
//
|
||||
// ItemStack fill = new ConfigItem("NO_FRIEND").build();
|
||||
// while (n < 21 * page)
|
||||
// inv.setItem(slots[n++], fill);
|
||||
//
|
||||
// inv.setItem(49, newreq = new ConfigItem("NEW_FRIEND_REQUEST").build());
|
||||
//
|
||||
// return inv;
|
||||
// }
|
||||
InventoryManager.FRIEND_REMOVAL.newInventory(playerData, Bukkit.getOfflinePlayer(UUID.fromString(tag)), this).open();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user