Add openInventory method to API
This commit is contained in:
parent
b513fd37cb
commit
0fcc45039d
@ -15,6 +15,8 @@ import fr.xephi.authme.util.PlayerUtils;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryView;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@ -24,6 +26,8 @@ import java.util.List;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static fr.xephi.authme.listener.PlayerListener.PENDING_INVENTORIES;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current API of AuthMe.
|
* The current API of AuthMe.
|
||||||
*
|
*
|
||||||
@ -32,6 +36,7 @@ import java.util.Optional;
|
|||||||
* AuthMeApi authmeApi = AuthMeApi.getInstance();
|
* AuthMeApi authmeApi = AuthMeApi.getInstance();
|
||||||
* </code>
|
* </code>
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public class AuthMeApi {
|
public class AuthMeApi {
|
||||||
|
|
||||||
private static AuthMeApi singleton;
|
private static AuthMeApi singleton;
|
||||||
@ -256,6 +261,18 @@ public class AuthMeApi {
|
|||||||
return dataSource.saveAuth(auth);
|
return dataSource.saveAuth(auth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open an inventory for the given player at any time.
|
||||||
|
*
|
||||||
|
* @param player The player to open the inventory for
|
||||||
|
* @param inventory The inventory to open
|
||||||
|
* @return The inventory view
|
||||||
|
*/
|
||||||
|
public InventoryView openInventory(Player player, Inventory inventory) {
|
||||||
|
PENDING_INVENTORIES.add(inventory);
|
||||||
|
return player.openInventory(inventory);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Force a player to login, i.e. the player is logged in without needing his password.
|
* Force a player to login, i.e. the player is logged in without needing his password.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -50,9 +50,12 @@ import org.bukkit.event.player.PlayerMoveEvent;
|
|||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.event.player.PlayerShearEntityEvent;
|
import org.bukkit.event.player.PlayerShearEntityEvent;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryView;
|
import org.bukkit.inventory.InventoryView;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -93,6 +96,7 @@ public class PlayerListener implements Listener {
|
|||||||
@Inject
|
@Inject
|
||||||
private QuickCommandsProtectionManager quickCommandsProtectionManager;
|
private QuickCommandsProtectionManager quickCommandsProtectionManager;
|
||||||
|
|
||||||
|
public static List<Inventory> PENDING_INVENTORIES = new ArrayList<>();
|
||||||
|
|
||||||
// Lowest priority to apply fast protection checks
|
// Lowest priority to apply fast protection checks
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
@ -489,6 +493,17 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isInventoryOpenedByApi(Inventory inventory) {
|
||||||
|
if (inventory == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (PENDING_INVENTORIES.contains(inventory)) {
|
||||||
|
PENDING_INVENTORIES.remove(inventory);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@SuppressWarnings("all")
|
@SuppressWarnings("all")
|
||||||
private boolean isInventoryWhitelisted(InventoryView inventory) {
|
private boolean isInventoryWhitelisted(InventoryView inventory) {
|
||||||
if (inventory == null) {
|
if (inventory == null) {
|
||||||
@ -515,7 +530,8 @@ public class PlayerListener implements Listener {
|
|||||||
public void onPlayerInventoryOpen(InventoryOpenEvent event) {
|
public void onPlayerInventoryOpen(InventoryOpenEvent event) {
|
||||||
final HumanEntity player = event.getPlayer();
|
final HumanEntity player = event.getPlayer();
|
||||||
if (listenerService.shouldCancelEvent(player)
|
if (listenerService.shouldCancelEvent(player)
|
||||||
&& !isInventoryWhitelisted(event.getView())) {
|
&& !isInventoryWhitelisted(event.getView())
|
||||||
|
&& !isInventoryOpenedByApi(event.getInventory())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -380,7 +380,11 @@ public class BukkitService implements SettingsDependent {
|
|||||||
* @param bytes the message
|
* @param bytes the message
|
||||||
*/
|
*/
|
||||||
public void sendVelocityMessage(Player player, byte[] bytes) {
|
public void sendVelocityMessage(Player player, byte[] bytes) {
|
||||||
player.sendPluginMessage(authMe, "authmevelocity:main", bytes);
|
if (player != null) {
|
||||||
|
player.sendPluginMessage(authMe, "authmevelocity:main", bytes);
|
||||||
|
} else {
|
||||||
|
Bukkit.getServer().sendPluginMessage(authMe, "authmevelocity:main", bytes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package fr.xephi.authme.util.message;
|
package fr.xephi.authme.util.message;
|
||||||
|
|
||||||
|
import fr.xephi.authme.util.Utils;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||||
@ -8,6 +9,15 @@ import net.md_5.bungee.api.chat.BaseComponent;
|
|||||||
|
|
||||||
public class MiniMessageUtils {
|
public class MiniMessageUtils {
|
||||||
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||||
|
private static final BungeeComponentSerializer bungeeSerializer;
|
||||||
|
|
||||||
|
static {
|
||||||
|
if (Utils.MAJOR_VERSION >= 16) {
|
||||||
|
bungeeSerializer = BungeeComponentSerializer.get();
|
||||||
|
} else {
|
||||||
|
bungeeSerializer = BungeeComponentSerializer.legacy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a MiniMessage string into a legacy string.
|
* Parse a MiniMessage string into a legacy string.
|
||||||
@ -28,7 +38,7 @@ public class MiniMessageUtils {
|
|||||||
*/
|
*/
|
||||||
public static BaseComponent[] parseMiniMessageToBaseComponent(String message) {
|
public static BaseComponent[] parseMiniMessageToBaseComponent(String message) {
|
||||||
Component component = miniMessage.deserialize(message);
|
Component component = miniMessage.deserialize(message);
|
||||||
return BungeeComponentSerializer.legacy().serialize(component);
|
return bungeeSerializer.serialize(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MiniMessageUtils() {
|
private MiniMessageUtils() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user