diff --git a/src/main/java/com/alttd/fishingevent/config/Config.java b/src/main/java/com/alttd/fishingevent/config/Config.java index 31f2d32..4a1310a 100644 --- a/src/main/java/com/alttd/fishingevent/config/Config.java +++ b/src/main/java/com/alttd/fishingevent/config/Config.java @@ -232,7 +232,9 @@ public class Config extends AbstractConfig { itemStack.setItemMeta(itemMeta); prizes.add( - new Prize(itemStack, + new Prize( + itemStack, + config.getString(prefix, "command", "example command for "), config.getString(prefix, "permission", "example.permission"), config.getString(prefix, "prize-name", "Prize Name"), config.getInt(prefix, "prize-price", 1)) diff --git a/src/main/java/com/alttd/fishingevent/config/Messages.java b/src/main/java/com/alttd/fishingevent/config/Messages.java index 172aa45..37deebb 100644 --- a/src/main/java/com/alttd/fishingevent/config/Messages.java +++ b/src/main/java/com/alttd/fishingevent/config/Messages.java @@ -55,6 +55,9 @@ public class Messages extends AbstractConfig { public static String SELL_GUI_NAME = "Sell GUI";; public static String NOT_INITIALIZED = "There was an error initializing this GUI, please contact staff"; public static String EARNED_POINTS = "You earned points from this sale, you are now at points!"; + public static String NOT_ENOUGH_POINTS = "You do not have enough points to purchase this, it costs and you only have points"; + public static String PURCHASED = "You purchased the prize. You have points remaining."; + public static String ALREADY_PURCHASED = "You already purchased the prize."; @SuppressWarnings("unused") private static void load() { @@ -64,6 +67,9 @@ public class Messages extends AbstractConfig { SELL_GUI_NAME = config.getString(prefix, "sell-gui-name", SELL_GUI_NAME); NOT_INITIALIZED = config.getString(prefix, "not-initialized", NOT_INITIALIZED); EARNED_POINTS = config.getString(prefix, "earned-points", EARNED_POINTS); + NOT_ENOUGH_POINTS = config.getString(prefix, "not-enough-points", NOT_ENOUGH_POINTS); + PURCHASED = config.getString(prefix, "purchased", PURCHASED); + ALREADY_PURCHASED = config.getString(prefix, "already-purchased", ALREADY_PURCHASED); } } diff --git a/src/main/java/com/alttd/fishingevent/gui/windows/PrizesWindow.java b/src/main/java/com/alttd/fishingevent/gui/windows/PrizesWindow.java index 877031c..c6e01cb 100644 --- a/src/main/java/com/alttd/fishingevent/gui/windows/PrizesWindow.java +++ b/src/main/java/com/alttd/fishingevent/gui/windows/PrizesWindow.java @@ -3,30 +3,64 @@ package com.alttd.fishingevent.gui.windows; import com.alttd.fishingevent.config.Messages; import com.alttd.fishingevent.gui.GUI; import com.alttd.fishingevent.objects.Prize; +import com.alttd.fishingevent.points.PointsManagement; import com.alttd.fishingevent.util.Logger; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; import java.util.List; +import java.util.UUID; public class PrizesWindow extends GUI { private final Logger logger; + private final ItemStack alreadyPurchasedItem = new ItemStack(Material.BARRIER, 1); public PrizesWindow(Player player, Logger logger, List prizes) { super(InventoryType.CHEST, MiniMessage.miniMessage().deserialize(Messages.GUI.PRIZES_GUI_NAME)); this.logger = logger; int i = 0; for (Prize prize : prizes) { - setItem(i, prize.itemStack().clone(), clickingPlayer -> buy(clickingPlayer, prize)); + if (player.hasPermission(prize.permission())) + setItem(i, alreadyPurchasedItem.clone(), clickingPlayer -> alreadyPurchased(clickingPlayer, prize)); + else + setItem(i, prize.itemStack().clone(), clickingPlayer -> buy(clickingPlayer, prize)); i++; } } + private void alreadyPurchased(Player clickingPlayer, Prize prize) { + clickingPlayer.sendMiniMessage(Messages.GUI.ALREADY_PURCHASED, Placeholder.parsed("prize", prize.name())); + } + private void buy(Player player, Prize prize) { player.sendMiniMessage("Buying is not implemented yet", null); - //TODO implement selling + UUID uuid = player.getUniqueId(); + PointsManagement pointsManagement = PointsManagement.getInstance(); + int playerPoints = pointsManagement.getPoints(uuid); + if (prize.price() < playerPoints) { + player.sendMiniMessage(Messages.GUI.NOT_ENOUGH_POINTS, TagResolver.resolver( + Placeholder.parsed("price", String.valueOf(prize.price())), + Placeholder.parsed("points", String.valueOf(playerPoints)) + )); + return; + } + int remainingPoints; + try { + remainingPoints = pointsManagement.removePoints(uuid, prize.price()); + } catch (IllegalArgumentException e) { + return; + } + player.sendMiniMessage(Messages.GUI.PURCHASED, TagResolver.resolver( + Placeholder.parsed("remaining_points", String.valueOf(remainingPoints)), + Placeholder.parsed("prize", prize.name()) + )); + player.getServer().dispatchCommand(player.getServer().getConsoleSender(), prize.command().replace("", player.getName())); } @Override diff --git a/src/main/java/com/alttd/fishingevent/objects/Prize.java b/src/main/java/com/alttd/fishingevent/objects/Prize.java index 3ad3657..d0bd729 100644 --- a/src/main/java/com/alttd/fishingevent/objects/Prize.java +++ b/src/main/java/com/alttd/fishingevent/objects/Prize.java @@ -2,5 +2,5 @@ package com.alttd.fishingevent.objects; import org.bukkit.inventory.ItemStack; -public record Prize(ItemStack itemStack, String permission, String name, int price) { +public record Prize(ItemStack itemStack, String command, String permission, String name, int price) { } diff --git a/src/main/java/com/alttd/fishingevent/points/LoadTask.java b/src/main/java/com/alttd/fishingevent/points/LoadTask.java index 146b8cd..bd9466d 100644 --- a/src/main/java/com/alttd/fishingevent/points/LoadTask.java +++ b/src/main/java/com/alttd/fishingevent/points/LoadTask.java @@ -1,12 +1,6 @@ package com.alttd.fishingevent.points; import com.alttd.fishingevent.FishingEvent; -import it.unimi.dsi.fastutil.io.BinIO; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; - -import java.io.File; -import java.io.IOException; -import java.util.UUID; public class LoadTask implements Runnable { @@ -20,15 +14,15 @@ public class LoadTask implements Runnable { @Override public void run() { - File file = new File(fishingEvent.getDataFolder(), "map.bin"); - Object2IntOpenHashMap loadedMap; - try { - //noinspection unchecked - loadedMap = (Object2IntOpenHashMap) BinIO.loadObject(file); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - return; - } - pointsManagement.setMap(loadedMap); +// File file = new File(fishingEvent.getDataFolder(), "map.bin"); +// Object2IntOpenHashMap loadedMap; +// try { +// //noinspection unchecked +// loadedMap = (Object2IntOpenHashMap) BinIO.loadObject(file); +// } catch (IOException | ClassNotFoundException e) { +// e.printStackTrace(); +// return; +// } +// pointsManagement.setMap(loadedMap); } }