From aed81b4a1317075e0adcbf87c5e92811caa425b2 Mon Sep 17 00:00:00 2001 From: HeroBrineGoat <76707404+MasterOfTheFish@users.noreply.github.com> Date: Sun, 23 Jan 2022 16:37:47 -0500 Subject: [PATCH] Added cool down of setting items --- .../hmccosmetics/gui/CosmeticGui.java | 25 ++++++++++++++++--- .../hmccosmetics/gui/CosmeticsMenu.java | 13 ++++++++-- .../hmccosmetics/gui/DyeSelectorGui.java | 13 ++++++++++ .../hmccosmetics/user/UserManager.java | 8 +++--- 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticGui.java b/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticGui.java index 7337fc10..262c67df 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticGui.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticGui.java @@ -33,6 +33,10 @@ public class CosmeticGui { protected final Map guiItemMap; protected Gui gui; + private long lastClicked; + + private static final float COOL_DOWN = 0.5f; + public CosmeticGui( final HMCCosmetics plugin, final String title, @@ -72,6 +76,10 @@ public class CosmeticGui { final InventoryClickEvent event, final GuiAction actionIfSet) { + final long current = System.currentTimeMillis(); + if ((current - this.lastClicked) / 1000. < COOL_DOWN) return; + this.lastClicked = current; + if (!(human instanceof final Player player)) { return; } @@ -129,10 +137,6 @@ public class CosmeticGui { if (itemStack == null) return null; - guiItem.setItemStack( - ItemBuilder.from(itemStack.clone()).papiPlaceholders(player).build() - ); - if (guiItem instanceof final ArmorItem armorItem) { final String permission = armorItem.getPermission() == null ? "" : armorItem.getPermission(); @@ -159,6 +163,10 @@ public class CosmeticGui { ); } + guiItem.setItemStack( + ItemBuilder.from(itemStack.clone()).papiPlaceholders(player).build() + ); + return guiItem; } @@ -196,4 +204,13 @@ public class CosmeticGui { papiPlaceholders(player). build(); } + + public CosmeticGui copy() { + return new CosmeticGui( + this.plugin, + this.title, + this.rows, + new HashMap<>(this.guiItemMap) + ); + } } \ No newline at end of file diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java b/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java index d44668fb..d90f7645 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/gui/CosmeticsMenu.java @@ -9,6 +9,7 @@ import io.github.fisher2911.hmccosmetics.cosmetic.CosmeticManager; import io.github.fisher2911.hmccosmetics.user.User; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; import org.spongepowered.configurate.ConfigurateException; import org.spongepowered.configurate.ConfigurationNode; import org.spongepowered.configurate.yaml.YamlConfigurationLoader; @@ -17,6 +18,7 @@ import java.io.File; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; +import java.util.function.Supplier; public class CosmeticsMenu { @@ -34,7 +36,7 @@ public class CosmeticsMenu { } public void openMenu(final String id, final HumanEntity humanEntity) { - final CosmeticGui cosmeticGui = this.guiMap.get(id); + final CosmeticGui cosmeticGui = this.getGui(id); if (cosmeticGui != null) { cosmeticGui.open(humanEntity); @@ -59,13 +61,20 @@ public class CosmeticsMenu { return; } - final CosmeticGui gui = this.guiMap.get(DYE_MENU); + final CosmeticGui gui = this.getGui(DYE_MENU); if (gui instanceof final DyeSelectorGui dyeSelectorGui) { dyeSelectorGui.getGui(user, type).open(player); } } + @Nullable + private CosmeticGui getGui(final String id) { + final CosmeticGui gui = this.guiMap.get(id); + if (gui == null) return null; + return gui.copy(); + } + public void load() { this.guiMap.clear(); final File file = Path.of(this.plugin.getDataFolder().getPath(), diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/gui/DyeSelectorGui.java b/src/main/java/io/github/fisher2911/hmccosmetics/gui/DyeSelectorGui.java index c11b5f81..fba62f37 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/gui/DyeSelectorGui.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/gui/DyeSelectorGui.java @@ -1,6 +1,7 @@ package io.github.fisher2911.hmccosmetics.gui; import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import dev.triumphteam.gui.guis.Gui; import dev.triumphteam.gui.guis.GuiItem; import io.github.fisher2911.hmccosmetics.HMCCosmetics; @@ -16,6 +17,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -180,4 +182,15 @@ public class DyeSelectorGui extends CosmeticGui { protected Object clone() throws CloneNotSupportedException { return super.clone(); } + + public DyeSelectorGui copy() { + return new DyeSelectorGui( + this.plugin, + super.title, + super.rows, + new HashMap<>(super.guiItemMap), + HashBiMap.create(this.cosmeticsSlots), + this.selectedCosmetic + ); + } } diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java index 3bf03b30..2bcd83b7 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java @@ -226,9 +226,11 @@ public class UserManager { public void setItem(final User user, final ArmorItem armorItem) { user.setItem(armorItem); - switch (armorItem.getType()) { - case HAT, OFF_HAND -> this.updateCosmetics(user); - } + Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { + switch (armorItem.getType()) { + case HAT, OFF_HAND -> this.updateCosmetics(user); + } + }); } public void removeItem(final User user, final ArmorItem.Type type) {