From b6e8e2ba42bdb71019b87ac2a28acf82f56587c2 Mon Sep 17 00:00:00 2001 From: Jikoo Date: Fri, 13 May 2022 09:11:12 -0400 Subject: [PATCH] Extract some duplicate code from internal implementations --- .../openinv/internal/ISpecialInventory.java | 8 +++-- .../internal/ISpecialPlayerInventory.java | 31 ++++++++++++++++++- .../internal/v1_17_R1/SpecialEnderChest.java | 7 +---- .../v1_17_R1/SpecialPlayerInventory.java | 6 ---- .../internal/v1_18_R1/SpecialEnderChest.java | 7 +---- .../v1_18_R1/SpecialPlayerInventory.java | 6 ---- .../internal/v1_18_R2/SpecialEnderChest.java | 5 --- .../v1_18_R2/SpecialPlayerInventory.java | 6 ---- 8 files changed, 37 insertions(+), 39 deletions(-) diff --git a/api/src/main/java/com/lishid/openinv/internal/ISpecialInventory.java b/api/src/main/java/com/lishid/openinv/internal/ISpecialInventory.java index 86a2dc1..dc94ce4 100644 --- a/api/src/main/java/com/lishid/openinv/internal/ISpecialInventory.java +++ b/api/src/main/java/com/lishid/openinv/internal/ISpecialInventory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2021 lishid. All rights reserved. + * Copyright (C) 2011-2022 lishid. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,11 +43,13 @@ public interface ISpecialInventory { void setPlayerOffline(); /** - * Gets whether or not this ISpecialInventory is in use. + * Gets whether this ISpecialInventory is in use. * * @return true if the ISpecialInventory is in use */ - boolean isInUse(); + default boolean isInUse() { + return !getBukkitInventory().getViewers().isEmpty(); + } /** * Gets the Player associated with this ISpecialInventory. diff --git a/api/src/main/java/com/lishid/openinv/internal/ISpecialPlayerInventory.java b/api/src/main/java/com/lishid/openinv/internal/ISpecialPlayerInventory.java index f15bc1a..412656c 100644 --- a/api/src/main/java/com/lishid/openinv/internal/ISpecialPlayerInventory.java +++ b/api/src/main/java/com/lishid/openinv/internal/ISpecialPlayerInventory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2021 lishid. All rights reserved. + * Copyright (C) 2011-2022 lishid. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,6 +16,35 @@ package com.lishid.openinv.internal; +import java.util.List; +import org.bukkit.entity.HumanEntity; +import org.bukkit.inventory.Inventory; + +/** + * Interface defining behavior specific to a player inventory. + */ public interface ISpecialPlayerInventory extends ISpecialInventory { + /* + * Player inventory usage varies from all other inventories - as the inventory is technically open at all times, + * if the player is online or has been online while the inventory is open, they are in the viewer list. + */ + @Override + default boolean isInUse() { + Inventory inventory = getBukkitInventory(); + List viewers = inventory.getViewers(); + + if (viewers.size() != 1) { + return !viewers.isEmpty(); + } + + HumanEntity viewer = viewers.get(0); + + if (!viewer.getUniqueId().equals(getPlayer().getUniqueId())) { + return true; + } + + return viewer.getOpenInventory().getTopInventory().equals(inventory); + } + } diff --git a/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialEnderChest.java b/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialEnderChest.java index fed9b56..6d48d54 100644 --- a/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialEnderChest.java +++ b/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialEnderChest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2021 lishid. All rights reserved. + * Copyright (C) 2011-2022 lishid. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,11 +60,6 @@ public class SpecialEnderChest extends PlayerEnderChestContainer implements ISpe return inventory; } - @Override - public boolean isInUse() { - return !this.getViewers().isEmpty(); - } - @Override public void setPlayerOffline() { this.playerOnline = false; diff --git a/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialPlayerInventory.java b/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialPlayerInventory.java index 1a85469..af7d5cb 100644 --- a/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialPlayerInventory.java +++ b/internal/v1_17_R1/src/main/java/com/lishid/openinv/internal/v1_17_R1/SpecialPlayerInventory.java @@ -103,12 +103,6 @@ public class SpecialPlayerInventory extends Inventory implements ISpecialPlayerI this.playerOnline = false; } - @Override - public boolean isInUse() { - List viewers = this.getViewers(); - return viewers.size() > 1 || !viewers.isEmpty() && !viewers.get(0).getUniqueId().equals(this.player.getUUID()); - } - @Override public @NotNull HumanEntity getPlayer() { return this.player.getBukkitEntity(); diff --git a/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialEnderChest.java b/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialEnderChest.java index d10bfdd..ea67c5f 100644 --- a/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialEnderChest.java +++ b/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialEnderChest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2021 lishid. All rights reserved. + * Copyright (C) 2011-2022 lishid. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -60,11 +60,6 @@ public class SpecialEnderChest extends PlayerEnderChestContainer implements ISpe return inventory; } - @Override - public boolean isInUse() { - return !this.getViewers().isEmpty(); - } - @Override public void setPlayerOffline() { this.playerOnline = false; diff --git a/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialPlayerInventory.java b/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialPlayerInventory.java index 7133f80..6508f3d 100644 --- a/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialPlayerInventory.java +++ b/internal/v1_18_R1/src/main/java/com/lishid/openinv/internal/v1_18_R1/SpecialPlayerInventory.java @@ -103,12 +103,6 @@ public class SpecialPlayerInventory extends Inventory implements ISpecialPlayerI this.playerOnline = false; } - @Override - public boolean isInUse() { - List viewers = this.getViewers(); - return viewers.size() > 1 || !viewers.isEmpty() && !viewers.get(0).getUniqueId().equals(this.player.getUUID()); - } - @Override public @NotNull HumanEntity getPlayer() { return this.player.getBukkitEntity(); diff --git a/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialEnderChest.java b/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialEnderChest.java index d9518f5..f46ff61 100644 --- a/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialEnderChest.java +++ b/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialEnderChest.java @@ -60,11 +60,6 @@ public class SpecialEnderChest extends PlayerEnderChestContainer implements ISpe return inventory; } - @Override - public boolean isInUse() { - return !this.getViewers().isEmpty(); - } - @Override public void setPlayerOffline() { this.playerOnline = false; diff --git a/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialPlayerInventory.java b/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialPlayerInventory.java index 3b410e9..04c2c5f 100644 --- a/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialPlayerInventory.java +++ b/internal/v1_18_R2/src/main/java/com/lishid/openinv/internal/v1_18_R2/SpecialPlayerInventory.java @@ -103,12 +103,6 @@ public class SpecialPlayerInventory extends Inventory implements ISpecialPlayerI this.playerOnline = false; } - @Override - public boolean isInUse() { - List viewers = this.getViewers(); - return viewers.size() > 1 || !viewers.isEmpty() && !viewers.get(0).getUniqueId().equals(this.player.getUUID()); - } - @Override public @NotNull HumanEntity getPlayer() { return this.player.getBukkitEntity();