diff --git a/build.gradle b/build.gradle index a5c3b7d..73c8500 100644 --- a/build.gradle +++ b/build.gradle @@ -11,10 +11,6 @@ repositories { name = "papermc-repo" url = "https://repo.papermc.io/repository/maven-public/" } - maven { - name = "sonatype" - url = "https://oss.sonatype.org/content/groups/public/" - } } processResources { @@ -27,7 +23,7 @@ processResources { } dependencies { - compileOnly("io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:1.21.3-R0.1-SNAPSHOT") } jar { diff --git a/src/main/java/de/shiewk/smoderation/paper/command/InvseeCommand.java b/src/main/java/de/shiewk/smoderation/paper/command/InvseeCommand.java index 4a09fb7..7085d71 100644 --- a/src/main/java/de/shiewk/smoderation/paper/command/InvseeCommand.java +++ b/src/main/java/de/shiewk/smoderation/paper/command/InvseeCommand.java @@ -5,6 +5,7 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.tree.LiteralCommandNode; import de.shiewk.smoderation.paper.inventory.InvSeeEquipmentInventory; +import de.shiewk.smoderation.paper.inventory.InvSeeInventory; import de.shiewk.smoderation.paper.util.CommandUtil; import io.papermc.paper.command.brigadier.CommandSourceStack; import io.papermc.paper.command.brigadier.argument.ArgumentTypes; @@ -50,7 +51,7 @@ public final class InvseeCommand implements CommandProvider { .append(target.teamDisplayName().colorIfAbsent(SECONDARY_COLOR)) .append(text(".")) )); - sender.openInventory(target.getInventory()); + new InvSeeInventory(sender, target).open(); return Command.SINGLE_SUCCESS; } diff --git a/src/main/java/de/shiewk/smoderation/paper/inventory/InvSeeInventory.java b/src/main/java/de/shiewk/smoderation/paper/inventory/InvSeeInventory.java new file mode 100644 index 0000000..7556145 --- /dev/null +++ b/src/main/java/de/shiewk/smoderation/paper/inventory/InvSeeInventory.java @@ -0,0 +1,69 @@ +package de.shiewk.smoderation.paper.inventory; + +import de.shiewk.smoderation.paper.SModerationPaper; +import org.bukkit.Bukkit; +import org.bukkit.entity.HumanEntity; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import static net.kyori.adventure.text.Component.text; + +public class InvSeeInventory implements AutoUpdatingCustomInventory { + private final HumanEntity viewer; + private final HumanEntity subject; + private final Inventory subjectInventory; + private final Inventory inventory; + private boolean changing = false; + + public InvSeeInventory(HumanEntity viewer, HumanEntity subject) { + this.viewer = viewer; + this.subject = subject; + this.subjectInventory = subject.getInventory(); + this.inventory = Bukkit.createInventory(this, 36, text("Player inventory")); + } + + + @Override + public void refresh() { + if (!changing){ + loadContents(); + } + } + + private void loadContents() { + for (int i = 0; i < inventory.getSize(); i++) { + inventory.setItem(i, subjectInventory.getItem(i)); + } + } + + @Override + public void open() { + refresh(); + viewer.openInventory(getInventory()); + } + + @Override + public void click(ItemStack stack, InventoryClickEvent event) { + if (viewer.hasPermission("smod.invsee.modify") && !subject.hasPermission("smod.invsee.preventmodify")){ + event.setCancelled(false); + changing = true; + Bukkit.getScheduler().scheduleSyncDelayedTask(SModerationPaper.PLUGIN, () -> { + changing = false; + applyChanges(); + }); + } + } + + private void applyChanges() { + for (int i = 0; i < inventory.getSize(); i++) { + subjectInventory.setItem(i, inventory.getItem(i)); + } + } + + @Override + public @NotNull Inventory getInventory() { + return inventory; + } +} diff --git a/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java b/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java index 14c95de..0dcbc56 100644 --- a/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java +++ b/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java @@ -9,6 +9,7 @@ import de.shiewk.smoderation.paper.punishments.PunishmentType; import de.shiewk.smoderation.paper.storage.PunishmentContainer; import de.shiewk.smoderation.paper.util.PlayerUtil; import de.shiewk.smoderation.paper.util.TimeUtil; +import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; @@ -20,7 +21,6 @@ import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; @@ -257,7 +257,7 @@ public class SModMenu extends PageableCustomInventory { private ItemStack createSearchItem(){ final ItemStack stack = new ItemStack(Material.FLOWER_BANNER_PATTERN); stack.editMeta(meta -> { - meta.addItemFlags(ItemFlag.HIDE_ITEM_SPECIFICS); + stack.setData(DataComponentTypes.HIDE_ADDITIONAL_TOOLTIP); meta.displayName(applyFormatting(text("Search").color(PRIMARY_COLOR))); final ArrayList lore = new ArrayList<>(List.of( Component.empty(), diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 268ac8c..f60eeb0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: SModeration version: '${version}' main: de.shiewk.smoderation.paper.SModerationPaper -api-version: '1.21' +api-version: '1.21.3' load: STARTUP authors: - Shiewk