Made opening the gui's async

This commit is contained in:
Teriuihi 2021-10-23 14:43:11 +02:00
parent 4bb26035d6
commit c538a68160
4 changed files with 54 additions and 9 deletions

View File

@ -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 + "."))
);
}
}

View File

@ -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()));
}
}

View File

@ -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 + "."))
);
}
}

View File

@ -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());
}
}