From c538a68160de422b9704dfdfe92eba1d9750d212 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sat, 23 Oct 2021 14:43:11 +0200 Subject: [PATCH] Made opening the gui's async --- .../java/com/alttd/GUI/windows/BuyGUI.java | 10 +++++-- .../java/com/alttd/GUI/windows/OpenGUI.java | 28 +++++++++++++++++-- .../java/com/alttd/GUI/windows/SellGUI.java | 10 +++++-- .../com/alttd/events/VillagerInteract.java | 15 +++++++++- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/alttd/GUI/windows/BuyGUI.java b/src/main/java/com/alttd/GUI/windows/BuyGUI.java index 634ddd3..10aeddb 100644 --- a/src/main/java/com/alttd/GUI/windows/BuyGUI.java +++ b/src/main/java/com/alttd/GUI/windows/BuyGUI.java @@ -2,6 +2,7 @@ package com.alttd.GUI.windows; import com.alttd.GUI.GUIMerchant; import com.alttd.config.Config; +import com.alttd.objects.Price; import com.alttd.objects.VillagerType; import com.alttd.util.Utilities; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -19,11 +20,14 @@ public class BuyGUI extends GUIMerchant { Template.of("trader", villagerType.getDisplayName()), Template.of("percentage", "100")), villagerType); //TODO get percentage from player somehow for (ItemStack itemStack : villagerType.getBuying()) { - double price = Utilities.getWorth(itemStack); + Price price = Utilities.getPrice(itemStack); + if (price == null) + continue; + double money = price.getPrice(itemStack.getAmount()); addItem(itemStack, - getPriceItem(price), + getPriceItem(money), null, - player -> player.sendMessage(MiniMessage.get().parse("Hi! you bought: " + itemStack.getAmount() + " " + itemStack.getType().name() + " for " + price + ".")) + player -> player.sendMessage(MiniMessage.get().parse("Hi! you bought: " + itemStack.getAmount() + " " + itemStack.getType().name() + " for " + money + ".")) ); } } diff --git a/src/main/java/com/alttd/GUI/windows/OpenGUI.java b/src/main/java/com/alttd/GUI/windows/OpenGUI.java index d44e83a..0df373c 100644 --- a/src/main/java/com/alttd/GUI/windows/OpenGUI.java +++ b/src/main/java/com/alttd/GUI/windows/OpenGUI.java @@ -1,6 +1,7 @@ package com.alttd.GUI.windows; import com.alttd.GUI.GUIInventory; +import com.alttd.VillagerUI; import com.alttd.config.Config; import com.alttd.objects.VillagerType; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -9,6 +10,7 @@ import org.bukkit.Material; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; public class OpenGUI extends GUIInventory { @@ -34,7 +36,29 @@ public class OpenGUI extends GUIInventory { super(InventoryType.HOPPER, MiniMessage.get().parse(Config.INITIAL_VILLAGER_WINDOW, Template.of("trader", villagerType.getDisplayName()), Template.of("percentage", "100"))); //TODO get percentage from player somehow - setItem(1, BUY, player -> new BuyGUI(villagerType).open(player)); - setItem(3, SELL, player -> new SellGUI(villagerType).open(player)); + setItem(1, BUY, player -> new BukkitRunnable() { + @Override + public void run() { + BuyGUI buyGUI = new BuyGUI(villagerType); + new BukkitRunnable() { + @Override + public void run() { + buyGUI.open(player); + } + }.runTask(VillagerUI.getInstance()); + } + }.runTaskAsynchronously(VillagerUI.getInstance())); + setItem(3, SELL, player -> new BukkitRunnable() { + @Override + public void run() { + SellGUI sellGUI = new SellGUI(villagerType); + new BukkitRunnable() { + @Override + public void run() { + sellGUI.open(player); + } + }.runTask(VillagerUI.getInstance()); + } + }.runTaskAsynchronously(VillagerUI.getInstance())); } } diff --git a/src/main/java/com/alttd/GUI/windows/SellGUI.java b/src/main/java/com/alttd/GUI/windows/SellGUI.java index 2004a58..ec7aa11 100644 --- a/src/main/java/com/alttd/GUI/windows/SellGUI.java +++ b/src/main/java/com/alttd/GUI/windows/SellGUI.java @@ -2,6 +2,7 @@ package com.alttd.GUI.windows; import com.alttd.GUI.GUIMerchant; import com.alttd.config.Config; +import com.alttd.objects.Price; import com.alttd.objects.VillagerType; import com.alttd.util.Utilities; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -19,11 +20,14 @@ public class SellGUI extends GUIMerchant { Template.of("trader", villagerType.getDisplayName()), Template.of("percentage", "100")), villagerType); //TODO get percentage from player somehow for (ItemStack itemStack : villagerType.getSelling()) { - double price = Utilities.getWorth(itemStack); + Price price = Utilities.getPrice(itemStack); + if (price == null) + continue; + double money = price.getPrice(itemStack.getAmount());; addItem(itemStack, - getPriceItem(price), + getPriceItem(money), null, - player -> player.sendMessage(MiniMessage.get().parse("Hi! you sold: " + itemStack.getAmount() + " " + itemStack.getType().name() + " for " + price + ".")) + player -> player.sendMessage(MiniMessage.get().parse("Hi! you sold: " + itemStack.getAmount() + " " + itemStack.getType().name() + " for " + money + ".")) ); } } diff --git a/src/main/java/com/alttd/events/VillagerInteract.java b/src/main/java/com/alttd/events/VillagerInteract.java index 7511758..4d548f0 100644 --- a/src/main/java/com/alttd/events/VillagerInteract.java +++ b/src/main/java/com/alttd/events/VillagerInteract.java @@ -1,12 +1,14 @@ package com.alttd.events; import com.alttd.GUI.windows.OpenGUI; +import com.alttd.VillagerUI; import com.alttd.objects.LoadedVillagers; import com.alttd.objects.VillagerType; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.scheduler.BukkitRunnable; public class VillagerInteract implements Listener { @@ -19,6 +21,17 @@ public class VillagerInteract implements Listener { if (loadedVillager == null) return; - new OpenGUI(loadedVillager).open(event.getPlayer()); + new BukkitRunnable() { + @Override + public void run() { + OpenGUI openGUI = new OpenGUI(loadedVillager); + new BukkitRunnable() { + @Override + public void run() { + openGUI.open(event.getPlayer()); + } + }.runTask(VillagerUI.getInstance()); + } + }.runTaskAsynchronously(VillagerUI.getInstance()); } }