Gives players an item to open the arena menu

This commit is contained in:
2023-05-11 17:52:49 +02:00
parent 4513fc2de7
commit 9c91e11780
8 changed files with 183 additions and 11 deletions

View File

@ -2,14 +2,21 @@ package net.knarcraft.minigames.arena;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.minigames.container.SerializableUUID;
import net.knarcraft.minigames.property.PersistentDataKey;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
@ -86,6 +93,7 @@ public abstract class AbstractPlayerEntryState implements PlayerEntryState {
player.setAllowFlight(this.originalAllowFlight);
player.setInvulnerable(this.originalInvulnerable);
player.setSwimming(this.originalIsSwimming);
removeMenuItem(player);
}
@Override
@ -121,4 +129,30 @@ public abstract class AbstractPlayerEntryState implements PlayerEntryState {
return data;
}
/**
* Removes the menu item from the given player's inventory
*
* @param player <p>The player to remove the menu item from</p>
*/
private void removeMenuItem(Player player) {
Set<ItemStack> itemsToRemove = new HashSet<>();
player.getInventory().forEach((item) -> {
if (item == null) {
return;
}
ItemMeta meta = item.getItemMeta();
if (meta == null) {
return;
}
Integer persistentData = meta.getPersistentDataContainer().get(new NamespacedKey(MiniGames.getInstance(),
PersistentDataKey.MENU_ITEM.getKeyName()), PersistentDataType.INTEGER);
if (persistentData != null && persistentData == PersistentDataKey.MENU_ITEM.getDataValue()) {
itemsToRemove.add(item);
}
});
for (ItemStack toRemove : itemsToRemove) {
player.getInventory().remove(toRemove);
}
}
}