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 itemPts = price.getPoints();
|
||||||
int transPts = itemPts * amount;
|
int transPts = itemPts * amount;
|
||||||
EconUser econUser = EconUser.getUser(player.getUniqueId());
|
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);
|
int oldPoints = econUser.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
||||||
double cost = price.calculatePriceThing(oldPoints, transPts, true, itemPts);
|
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) {
|
private void sell(VillagerType villagerType, Player player, Material material, int amount, Price price, boolean bulk) {
|
||||||
EconUser econUser = EconUser.getUser(player.getUniqueId());
|
EconUser econUser = EconUser.getUser(player.getUniqueId());
|
||||||
if (econUser == null) {
|
if (econUser == null) {
|
||||||
Utilities.econSyncingMessage(player);
|
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,13 @@ public class VillagerUI extends JavaPlugin {
|
||||||
return;
|
return;
|
||||||
Database.getDatabase().init();
|
Database.getDatabase().init();
|
||||||
scheduleTasks();
|
scheduleTasks();
|
||||||
getServer().getMessenger().registerOutgoingPluginChannel(this, "VillagerUI:player-data");
|
getServer().getMessenger().registerOutgoingPluginChannel(this, "villagerui:player-data");
|
||||||
getServer().getMessenger().registerIncomingPluginChannel(this, "VillagerUI:player-data", new PluginMessageListener());
|
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("--------------------------------------------------");
|
||||||
Logger.info("Villager UI started");
|
Logger.info("Villager UI started");
|
||||||
Logger.info("--------------------------------------------------");
|
Logger.info("--------------------------------------------------");
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,11 @@ public class CommandBuy extends SubCommand {
|
||||||
player.sendMiniMessage(getHelpMessage(), null);
|
player.sendMiniMessage(getHelpMessage(), null);
|
||||||
return true;
|
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());
|
Material item = Material.valueOf(args[1].toUpperCase());
|
||||||
Optional<VillagerType> optionalVillagerType = VillagerType.getVillagerTypes().stream()
|
Optional<VillagerType> optionalVillagerType = VillagerType.getVillagerTypes().stream()
|
||||||
.filter(villagerType -> villagerType.getBuying().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");
|
Logger.warning("Price was null despite being impossible to be null");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
|
||||||
Integer curPoints = user.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
Integer curPoints = user.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
||||||
double cost = price.calculatePriceThing(curPoints, price.getPoints(), true, price.getPoints());
|
double cost = price.calculatePriceThing(curPoints, price.getPoints(), true, price.getPoints());
|
||||||
player.sendMiniMessage(Config.BUY_ITEM_MESSAGE, TagResolver.resolver(
|
player.sendMiniMessage(Config.BUY_ITEM_MESSAGE, TagResolver.resolver(
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,13 @@ public class CommandPoints extends SubCommand {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||||
|
if (user == null) {
|
||||||
|
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
var ref = new Object() {
|
var ref = new Object() {
|
||||||
Component message = miniMessage.deserialize(Config.POINTS_HEADER, TemplateResolver.resolving(
|
Component message = miniMessage.deserialize(Config.POINTS_HEADER, TagResolver.resolver(
|
||||||
Template.template("player", player.getName())));
|
Placeholder.unparsed("player", player.getName())));
|
||||||
};
|
};
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
Object2ObjectArrayMap<String, Integer> pointsMap = user.getPointsMap();
|
Object2ObjectArrayMap<String, Integer> pointsMap = user.getPointsMap();
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,11 @@ public class CommandSell extends SubCommand {
|
||||||
player.sendMiniMessage(getHelpMessage(), null);
|
player.sendMiniMessage(getHelpMessage(), null);
|
||||||
return true;
|
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());
|
Material item = Material.valueOf(args[1].toUpperCase());
|
||||||
Optional<VillagerType> optionalVillagerType = VillagerType.getVillagerTypes().stream()
|
Optional<VillagerType> optionalVillagerType = VillagerType.getVillagerTypes().stream()
|
||||||
.filter(villagerType -> villagerType.getSelling().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");
|
Logger.warning("Price was null despite being impossible to be null");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
EconUser user = EconUser.getUser(player.getUniqueId());
|
|
||||||
Integer curPoints = user.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
Integer curPoints = user.getPointsMap().getOrDefault(villagerType.getName(), 0);
|
||||||
double cost = price.calculatePriceThing(curPoints, price.getPoints(), false, price.getPoints());
|
double cost = price.calculatePriceThing(curPoints, price.getPoints(), false, price.getPoints());
|
||||||
player.sendMiniMessage(Config.SELL_ITEM_MESSAGE, TagResolver.resolver(
|
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>";
|
"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 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 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() {
|
private static void loadMessages() {
|
||||||
NOT_ENOUGH_MONEY = config.getString("messages.not-enough-money", NOT_ENOUGH_MONEY);
|
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);
|
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);
|
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);
|
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;
|
public static boolean DEBUG = false;
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,13 @@
|
||||||
package com.alttd.events;
|
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.objects.EconUser;
|
||||||
import com.alttd.util.Logger;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class LoginEvent implements Listener {
|
public class LoginEvent implements Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
final Player player = event.getPlayer();
|
EconUser.tryLoadUser(event.getPlayer().getUniqueId());
|
||||||
//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());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
package com.alttd.events;
|
package com.alttd.events;
|
||||||
|
|
||||||
import com.alttd.GUI.GUI;
|
import com.alttd.GUI.GUI;
|
||||||
|
import com.alttd.VillagerUI;
|
||||||
import com.alttd.config.Config;
|
import com.alttd.config.Config;
|
||||||
import com.alttd.objects.EconUser;
|
import com.alttd.objects.EconUser;
|
||||||
import com.alttd.util.Logger;
|
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.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -17,8 +22,17 @@ public class LogoutEvent implements Listener {
|
||||||
|
|
||||||
if (Config.DEBUG)
|
if (Config.DEBUG)
|
||||||
Logger.info("Syncing %", event.getPlayer().getName());
|
Logger.info("Syncing %", event.getPlayer().getName());
|
||||||
EconUser.getUser(uuid).syncPoints();
|
|
||||||
EconUser.removeUser(uuid);
|
|
||||||
GUI.GUIByUUID.remove(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;
|
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.alttd.util.Logger;
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public class PluginMessageListener implements org.bukkit.plugin.messaging.PluginMessageListener {
|
public class PluginMessageListener implements org.bukkit.plugin.messaging.PluginMessageListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] bytes) {
|
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");
|
Logger.warning("Received plugin message on invalid channel");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
|
ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
|
||||||
switch (in.readUTF()) {
|
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());
|
EconUser user = EconUser.getUser(player.getUniqueId());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
Utilities.econSyncingMessage(player);
|
player.sendMiniMessage(Config.LOADING_ECON_DATA, null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,14 @@ public class EconUser {
|
||||||
Logger.info("Created EconUser for: %", uuid.toString());
|
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() {
|
public UUID getUuid() {
|
||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
|
@ -116,31 +124,12 @@ public class EconUser {
|
||||||
out.writeUTF("try-lock");
|
out.writeUTF("try-lock");
|
||||||
out.writeUTF(uuid.toString());
|
out.writeUTF(uuid.toString());
|
||||||
Bukkit.getServer().sendPluginMessage(VillagerUI.getInstance(),
|
Bukkit.getServer().sendPluginMessage(VillagerUI.getInstance(),
|
||||||
"VillagerUI:player-data",
|
"villagerui:player-data",
|
||||||
out.toByteArray());
|
out.toByteArray());
|
||||||
}
|
}
|
||||||
}.runTaskAsynchronously(VillagerUI.getInstance());
|
}.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) {
|
public static void removeUser(UUID uuid) {
|
||||||
users.remove(uuid);
|
users.remove(uuid);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -138,9 +138,4 @@ public class Utilities {
|
||||||
}
|
}
|
||||||
return (price);
|
return (price);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void econSyncingMessage(Player player)
|
|
||||||
{
|
|
||||||
player.sendMiniMessage("<red>Syncing econ data...</red>", null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user