fix item not returning on kick, adjust key tracking logic

Took 18 minutes
This commit is contained in:
Kiran Hart 2024-05-03 11:19:13 -04:00
parent 12d23279eb
commit e5a91a4875
No known key found for this signature in database
GPG Key ID: 5F36C7BC79D3EBC3
5 changed files with 102 additions and 18 deletions

View File

@ -27,10 +27,12 @@ import ca.tweetzy.auctionhouse.helpers.MaterialCategorizer;
import ca.tweetzy.auctionhouse.settings.Settings;
import ca.tweetzy.core.utils.TextUtils;
import ca.tweetzy.flight.comp.enums.ServerVersion;
import ca.tweetzy.flight.nbtapi.NBT;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import org.bukkit.Bukkit;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@ -309,6 +311,15 @@ public class AuctionedItem {
return itemStack;
}
public ItemStack getCleanItem() {
ItemStack cleaned = this.item.clone();
NBT.modify(cleaned, nbt -> {
nbt.removeKey("AuctionDupeTracking");
});
return cleaned;
}
public boolean containsValidBid() {
return isBidItem() && !this.highestBidder.equals(this.owner);
}

View File

@ -30,10 +30,7 @@ import ca.tweetzy.auctionhouse.guis.GUIBundleCreation;
import ca.tweetzy.auctionhouse.guis.confirmation.GUIListingConfirm;
import ca.tweetzy.auctionhouse.guis.sell.GUISellListingType;
import ca.tweetzy.auctionhouse.guis.sell.GUISellPlaceItem;
import ca.tweetzy.auctionhouse.helpers.AuctionCreator;
import ca.tweetzy.auctionhouse.helpers.BundleUtil;
import ca.tweetzy.auctionhouse.helpers.MaterialCategorizer;
import ca.tweetzy.auctionhouse.helpers.PlayerHelper;
import ca.tweetzy.auctionhouse.helpers.*;
import ca.tweetzy.auctionhouse.settings.Settings;
import ca.tweetzy.core.commands.AbstractCommand;
import ca.tweetzy.core.compatibility.XMaterial;
@ -128,6 +125,12 @@ public final class CommandSell extends AbstractCommand {
return ReturnType.FAILURE;
}
// check if item has dt key
if(Validate.hasDTKey(originalItem)) {
Bukkit.broadcastMessage("has dupe item");
return ReturnType.FAILURE;
}
// Check for block items
if (!AuctionAPI.getInstance().meetsListingRequirements(player, itemToSell)) return ReturnType.FAILURE;
@ -324,7 +327,7 @@ public final class CommandSell extends AbstractCommand {
// SCUFFED SHIT
if (!auctionedItem.isRequest())
NBT.modify(itemToSell, nbt -> {
nbt.setBoolean("AuctionDupeTracking", true);
nbt.setUUID("AuctionDupeTracking", auctionedItem.getId());
});
auctionedItem.setItem(itemToSell);
@ -364,7 +367,7 @@ public final class CommandSell extends AbstractCommand {
AuctionHouse.getInstance().getAuctionPlayerManager().processSell(player);
player.closeInventory();
PlayerUtils.giveItem(player, auctionedItem.getItem());
PlayerUtils.giveItem(player, auctionedItem.getCleanItem());
auctionPlayer.setItemBeingListed(null);
return;
}
@ -382,7 +385,7 @@ public final class CommandSell extends AbstractCommand {
AuctionHouse.getInstance().getAuctionPlayerManager().processSell(player);
if (listingResult != ListingResult.SUCCESS) {
PlayerUtils.giveItem(player, auction.getItem());
PlayerUtils.giveItem(player, auction.getCleanItem());
auctionPlayer.setItemBeingListed(null);
return;
}
@ -402,7 +405,6 @@ public final class CommandSell extends AbstractCommand {
*/
}));
} else {
// Bukkit.getScheduler().runTaskLaterAsynchronously(AuctionHouse.getInstance(), () -> {
if (auctionPlayer.getPlayer() == null || !auctionPlayer.getPlayer().isOnline()) {
return ReturnType.FAILURE;
}
@ -425,8 +427,6 @@ public final class CommandSell extends AbstractCommand {
AuctionHouse.newChain().sync(player::closeInventory).execute();
});
// }, Settings.INTERNAL_CREATE_DELAY.getInt());
}
return ReturnType.SUCCESS;

View File

@ -32,6 +32,7 @@ import ca.tweetzy.core.compatibility.XMaterial;
import ca.tweetzy.core.utils.PlayerUtils;
import ca.tweetzy.core.utils.TextUtils;
import ca.tweetzy.flight.utils.QuickItem;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
@ -67,15 +68,16 @@ public final class GUIListingConfirm extends AuctionBaseGUI {
setOnClose(close -> {
final AuctionPlayer auctionPlayer = AuctionHouse.getInstance().getAuctionPlayerManager().getPlayer(close.player.getUniqueId());
if (!this.resulted.contains(close.player.getUniqueId()))
if (!this.resulted.contains(close.player.getUniqueId())) {
if (auctionPlayer.getItemBeingListed() != null) {
if (BundleUtil.isBundledItem(auctionedItem.getItem())) PlayerUtils.giveItem(close.player, BundleUtil.extractBundleItems(auctionedItem.getItem()));
if (BundleUtil.isBundledItem(auctionedItem.getItem())) PlayerUtils.giveItem(close.player, BundleUtil.extractBundleItems(auctionedItem.getCleanItem()));
else {
PlayerUtils.giveItem(close.player, auctionedItem.getItem());
PlayerUtils.giveItem(close.player, auctionedItem.getCleanItem());
}
auctionPlayer.setItemBeingListed(null);
}
}
close.player.removeMetadata("AuctionHouseConfirmListing", AuctionHouse.getInstance());
AuctionHouse.getInstance().getAuctionPlayerManager().processSell(close.player);

View File

@ -18,9 +18,24 @@
package ca.tweetzy.auctionhouse.helpers;
import ca.tweetzy.auctionhouse.AuctionHouse;
import ca.tweetzy.core.compatibility.XMaterial;
import ca.tweetzy.flight.nbtapi.NBT;
import lombok.NonNull;
import lombok.experimental.UtilityClass;
import org.bukkit.inventory.ItemStack;
import java.util.UUID;
@UtilityClass
public final class Validate {
public boolean hasDTKey(ItemStack stack) {
if (stack == null || stack.getType() == XMaterial.AIR.parseMaterial() || stack.getAmount() == 0) return false;
final UUID uuid = NBT.get(stack, nbt -> (UUID) nbt.getUUID("AuctionDupeTracking"));
return AuctionHouse.getInstance().getAuctionItemManager().getItem(uuid) != null;
}
}

View File

@ -24,6 +24,7 @@ import ca.tweetzy.auctionhouse.guis.GUIAuctionHouse;
import ca.tweetzy.auctionhouse.helpers.BundleUtil;
import ca.tweetzy.auctionhouse.helpers.PlayerHelper;
import ca.tweetzy.auctionhouse.helpers.UpdateChecker;
import ca.tweetzy.auctionhouse.helpers.Validate;
import ca.tweetzy.auctionhouse.settings.Settings;
import ca.tweetzy.core.compatibility.XMaterial;
import ca.tweetzy.core.utils.PlayerUtils;
@ -32,27 +33,30 @@ import ca.tweetzy.flight.comp.Titles;
import ca.tweetzy.flight.comp.enums.ServerVersion;
import ca.tweetzy.flight.nbtapi.NBT;
import ca.tweetzy.flight.utils.Common;
import ca.tweetzy.flight.utils.PlayerUtil;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.*;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;
import java.util.List;
import java.util.UUID;
/**
* The current file has been created by Kiran Hart
@ -97,9 +101,9 @@ public class PlayerListeners implements Listener {
for (ItemStack item : player.getInventory().getStorageContents()) {
if (item == null || item.getType() == XMaterial.AIR.parseMaterial() || item.getAmount() == 0) continue;
final boolean inventoryContainsListedItem = NBT.get(item, nbt -> (boolean) nbt.getBoolean("AuctionDupeTracking"));
final UUID auctionItemId = NBT.get(item, nbt -> (UUID) nbt.getUUID("AuctionDupeTracking"));
if (inventoryContainsListedItem) {
if (AuctionHouse.getInstance().getAuctionItemManager().getItem(auctionItemId) != null) {
player.getInventory().remove(item);
Bukkit.getServer().getConsoleSender().sendMessage(Common.colorize("&8[&eAuctionHouse&8] &CRemoving duped item from " + player.getName() + "'s inventory!"));
}
@ -214,4 +218,56 @@ public class PlayerListeners implements Listener {
event.setResult(stack);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onInteract(PlayerInteractEvent event) {
final Player player = event.getPlayer();
final ItemStack item = PlayerUtil.getHand(player);
if (Validate.hasDTKey(item)) {
event.setCancelled(true);
clearHand(player);
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onAuctionItemDrop(PlayerDropItemEvent event) {
final Item item = event.getItemDrop();
final ItemStack itemStack = item.getItemStack();
if (Validate.hasDTKey(itemStack))
item.remove();
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onAuctionItemPlace(BlockPlaceEvent event) {
final Player player = event.getPlayer();
final ItemStack item = event.getItemInHand();
if (Validate.hasDTKey(item)) {
event.setCancelled(true);
clearHand(player);
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onAuctionItemPickup(PlayerPickupItemEvent event) {
final Player player = event.getPlayer();
final Item item = event.getItem();
final ItemStack itemStack = item.getItemStack();
if (Validate.hasDTKey(itemStack)) {
event.setCancelled(true);
clearHand(player);
}
}
private void clearHand(Player player) {
if (ServerVersion.isServerVersionAbove(ServerVersion.V1_8)) {
player.getInventory().setItemInMainHand(XMaterial.AIR.parseItem());
} else {
player.getInventory().setItemInHand(XMaterial.AIR.parseItem());
}
}
}