Started using data lock
This commit is contained in:
parent
bd8c6f414c
commit
e28d6c4e34
|
|
@ -64,6 +64,10 @@ public class BuyGUI extends GUIMerchant {
|
|||
int itemPts = price.getPoints();
|
||||
int transPts = itemPts * amount;
|
||||
EconUser econUser = EconUser.getUser(player.getUniqueId());
|
||||
if (econUser == null) {
|
||||
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||
return;
|
||||
}
|
||||
int oldPoints = econUser.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
||||
double cost = price.calculatePriceThing(oldPoints, transPts, true, itemPts);
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ public class SellGUI extends GUIMerchant {
|
|||
private void sell(VillagerType villagerType, Player player, Material material, int amount, Price price, boolean bulk) {
|
||||
EconUser econUser = EconUser.getUser(player.getUniqueId());
|
||||
if (econUser == null) {
|
||||
Utilities.econSyncingMessage(player);
|
||||
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,8 +44,13 @@ public class VillagerUI extends JavaPlugin {
|
|||
return;
|
||||
Database.getDatabase().init();
|
||||
scheduleTasks();
|
||||
getServer().getMessenger().registerOutgoingPluginChannel(this, "VillagerUI:player-data");
|
||||
getServer().getMessenger().registerIncomingPluginChannel(this, "VillagerUI:player-data", new PluginMessageListener());
|
||||
getServer().getMessenger().registerOutgoingPluginChannel(this, "villagerui:player-data");
|
||||
getServer().getMessenger().registerIncomingPluginChannel(this, "villagerui:player-data", new PluginMessageListener());
|
||||
if (Config.DEBUG) {
|
||||
Logger.info("Incoming: %\nOutgoing: %",
|
||||
getServer().getMessenger().getIncomingChannels().toString(),
|
||||
getServer().getMessenger().getOutgoingChannels().toString());
|
||||
}
|
||||
Logger.info("--------------------------------------------------");
|
||||
Logger.info("Villager UI started");
|
||||
Logger.info("--------------------------------------------------");
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ public class CommandBuy extends SubCommand {
|
|||
player.sendMiniMessage(getHelpMessage(), null);
|
||||
return true;
|
||||
}
|
||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||
if (user == null) {
|
||||
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||
return true;
|
||||
}
|
||||
Material item = Material.valueOf(args[1].toUpperCase());
|
||||
Optional<VillagerType> optionalVillagerType = VillagerType.getVillagerTypes().stream()
|
||||
.filter(villagerType -> villagerType.getBuying().stream()
|
||||
|
|
@ -53,7 +58,6 @@ public class CommandBuy extends SubCommand {
|
|||
Logger.warning("Price was null despite being impossible to be null");
|
||||
return true;
|
||||
}
|
||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||
Integer curPoints = user.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
||||
double cost = price.calculatePriceThing(curPoints, price.getPoints(), true, price.getPoints());
|
||||
player.sendMiniMessage(Config.BUY_ITEM_MESSAGE, TagResolver.resolver(
|
||||
|
|
|
|||
|
|
@ -29,9 +29,13 @@ public class CommandPoints extends SubCommand {
|
|||
return true;
|
||||
}
|
||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||
if (user == null) {
|
||||
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||
return true;
|
||||
}
|
||||
var ref = new Object() {
|
||||
Component message = miniMessage.deserialize(Config.POINTS_HEADER, TemplateResolver.resolving(
|
||||
Template.template("player", player.getName())));
|
||||
Component message = miniMessage.deserialize(Config.POINTS_HEADER, TagResolver.resolver(
|
||||
Placeholder.unparsed("player", player.getName())));
|
||||
};
|
||||
if (args.length == 1) {
|
||||
Object2ObjectArrayMap<String, Integer> pointsMap = user.getPointsMap();
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ public class CommandSell extends SubCommand {
|
|||
player.sendMiniMessage(getHelpMessage(), null);
|
||||
return true;
|
||||
}
|
||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||
if (user == null) {
|
||||
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||
return true;
|
||||
}
|
||||
Material item = Material.valueOf(args[1].toUpperCase());
|
||||
Optional<VillagerType> optionalVillagerType = VillagerType.getVillagerTypes().stream()
|
||||
.filter(villagerType -> villagerType.getSelling().stream()
|
||||
|
|
@ -53,7 +58,6 @@ public class CommandSell extends SubCommand {
|
|||
Logger.warning("Price was null despite being impossible to be null");
|
||||
return true;
|
||||
}
|
||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||
Integer curPoints = user.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
||||
double cost = price.calculatePriceThing(curPoints, price.getPoints(), false, price.getPoints());
|
||||
player.sendMiniMessage(Config.SELL_ITEM_MESSAGE, TagResolver.resolver(
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ public final class Config extends AbstractConfig {
|
|||
"at your current amount of points (<current_points>).</green>";
|
||||
public static String NO_SELL_AT_SPAWN = "<red><material> can not be sold to spawn, try a player shop!</red>";
|
||||
public static String NOT_A_VILLAGER = "<red><villager_type> is not a valid villager type.</red>";
|
||||
public static String LOADING_ECON_DATA = "<red>Loading your economy data, please wait...</red>";
|
||||
|
||||
private static void loadMessages() {
|
||||
NOT_ENOUGH_MONEY = config.getString("messages.not-enough-money", NOT_ENOUGH_MONEY);
|
||||
|
|
@ -132,6 +133,7 @@ public final class Config extends AbstractConfig {
|
|||
SELL_ITEM_MESSAGE = config.getString("messages.sell-item-message", SELL_ITEM_MESSAGE);
|
||||
NO_SELL_AT_SPAWN = config.getString("messages.no-sell-at-spawn", NO_SELL_AT_SPAWN);
|
||||
NOT_A_VILLAGER = config.getString("messages.not-a-villager", NOT_A_VILLAGER);
|
||||
LOADING_ECON_DATA = config.getString("messages.loading-econ-data", LOADING_ECON_DATA);
|
||||
}
|
||||
|
||||
public static boolean DEBUG = false;
|
||||
|
|
|
|||
|
|
@ -1,35 +1,13 @@
|
|||
package com.alttd.events;
|
||||
|
||||
import com.alttd.VillagerUI;
|
||||
import com.alttd.config.Config;
|
||||
import com.alttd.database.Queries;
|
||||
import com.alttd.objects.EconUser;
|
||||
import com.alttd.util.Logger;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class LoginEvent implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
//TODO lock user
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
UUID uuid = player.getUniqueId();
|
||||
EconUser user = EconUser.getUser(uuid);
|
||||
int minutes = Queries.getMinutesSinceUpdated(uuid);
|
||||
|
||||
user.removePoints(minutes * 2);
|
||||
if (Config.DEBUG)
|
||||
Logger.info("Loaded EconUser for % and removed % points",
|
||||
player.getName(), String.valueOf(minutes * 2));
|
||||
}
|
||||
}.runTask(VillagerUI.getInstance());
|
||||
EconUser.tryLoadUser(event.getPlayer().getUniqueId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,17 @@
|
|||
package com.alttd.events;
|
||||
|
||||
import com.alttd.GUI.GUI;
|
||||
import com.alttd.VillagerUI;
|
||||
import com.alttd.config.Config;
|
||||
import com.alttd.objects.EconUser;
|
||||
import com.alttd.util.Logger;
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -17,8 +22,17 @@ public class LogoutEvent implements Listener {
|
|||
|
||||
if (Config.DEBUG)
|
||||
Logger.info("Syncing %", event.getPlayer().getName());
|
||||
EconUser.getUser(uuid).syncPoints();
|
||||
EconUser.removeUser(uuid);
|
||||
GUI.GUIByUUID.remove(uuid);
|
||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||
out.writeUTF("try-unlock");
|
||||
out.writeUTF(uuid.toString());
|
||||
Bukkit.getServer().sendPluginMessage(VillagerUI.getInstance(),
|
||||
"villagerui:player-data",
|
||||
out.toByteArray());
|
||||
EconUser user = EconUser.getUser(uuid);
|
||||
if (user == null)
|
||||
return;
|
||||
user.syncPoints();
|
||||
EconUser.removeUser(uuid);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,22 +1,73 @@
|
|||
package com.alttd.events;
|
||||
|
||||
import com.alttd.VillagerUI;
|
||||
import com.alttd.config.Config;
|
||||
import com.alttd.database.Queries;
|
||||
import com.alttd.objects.EconUser;
|
||||
import com.alttd.util.Logger;
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class PluginMessageListener implements org.bukkit.plugin.messaging.PluginMessageListener {
|
||||
|
||||
@Override
|
||||
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] bytes) {
|
||||
if (!channel.equals("VillagerUI:player-data")) {
|
||||
if (!channel.equals("villagerui:player-data")) {
|
||||
Logger.warning("Received plugin message on invalid channel");
|
||||
return;
|
||||
}
|
||||
ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
|
||||
switch (in.readUTF()) {
|
||||
case "try-lock-result" -> {
|
||||
if (!in.readBoolean()) {
|
||||
Logger.warning("Unable to lock row");
|
||||
return; //TODO handle
|
||||
}
|
||||
UUID uuid = UUID.fromString(in.readUTF());
|
||||
loadUser(uuid);
|
||||
}
|
||||
case "queue-lock-failed" -> Logger.warning("Encountered uuid that was locked and had a lock queued: %, lock is from %", in.readUTF(), in.readUTF());
|
||||
case "try-unlock-result" -> {
|
||||
if (in.readBoolean()) {
|
||||
// ignore?
|
||||
return;
|
||||
}
|
||||
Logger.severe("Unable to unlock %.", in.readUTF());
|
||||
}
|
||||
case "locked-queue-lock" -> {
|
||||
if (!in.readBoolean()) {
|
||||
Logger.warning("Got false back from locked queue lock");
|
||||
return; //TODO handle
|
||||
}
|
||||
UUID uuid = UUID.fromString(in.readUTF());
|
||||
loadUser(uuid);
|
||||
}
|
||||
case "check-lock-result" -> {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void loadUser(UUID uuid) {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
EconUser user = Queries.getEconUser(uuid);
|
||||
|
||||
int minutes = Queries.getMinutesSinceUpdated(uuid);
|
||||
user.removePoints(minutes * 2);
|
||||
if (Config.DEBUG)
|
||||
Logger.info("Loaded EconUser for % and removed % points",
|
||||
uuid.toString(), String.valueOf(minutes * 2));
|
||||
|
||||
EconUser.addUser(uuid, user);
|
||||
EconUser.removeQueriedUser(uuid);
|
||||
}
|
||||
}.runTaskAsynchronously(VillagerUI.getInstance());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public class VillagerEvents implements Listener {
|
|||
}
|
||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||
if (user == null) {
|
||||
Utilities.econSyncingMessage(player);
|
||||
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||
return;
|
||||
}
|
||||
new BukkitRunnable() {
|
||||
|
|
|
|||
|
|
@ -30,6 +30,14 @@ public class EconUser {
|
|||
Logger.info("Created EconUser for: %", uuid.toString());
|
||||
}
|
||||
|
||||
public static void addUser(UUID uuid, EconUser user) {
|
||||
users.put(uuid, user);
|
||||
}
|
||||
|
||||
public static void removeQueriedUser(UUID uuid) {
|
||||
queriedUsers.remove(uuid);
|
||||
}
|
||||
|
||||
public UUID getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
|
@ -116,31 +124,12 @@ public class EconUser {
|
|||
out.writeUTF("try-lock");
|
||||
out.writeUTF(uuid.toString());
|
||||
Bukkit.getServer().sendPluginMessage(VillagerUI.getInstance(),
|
||||
"VillagerUI:player-data",
|
||||
"villagerui:player-data",
|
||||
out.toByteArray());
|
||||
}
|
||||
}.runTaskAsynchronously(VillagerUI.getInstance());
|
||||
}
|
||||
|
||||
//Might need to be locked down better?
|
||||
public static void loadUser(UUID uuid) {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
EconUser user = Queries.getEconUser(uuid);
|
||||
|
||||
int minutes = Queries.getMinutesSinceUpdated(uuid);
|
||||
user.removePoints(minutes * 2);
|
||||
if (Config.DEBUG)
|
||||
Logger.info("Loaded EconUser for % and removed % points",
|
||||
uuid.toString(), String.valueOf(minutes * 2));
|
||||
|
||||
EconUser.users.put(uuid, user);
|
||||
queriedUsers.remove(uuid);
|
||||
}
|
||||
}.runTaskAsynchronously(VillagerUI.getInstance());
|
||||
}
|
||||
|
||||
public static void removeUser(UUID uuid) {
|
||||
users.remove(uuid);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -138,9 +138,4 @@ public class Utilities {
|
|||
}
|
||||
return (price);
|
||||
}
|
||||
|
||||
public static void econSyncingMessage(Player player)
|
||||
{
|
||||
player.sendMiniMessage("<red>Syncing econ data...</red>", null);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user