Updated MiniMessage

This commit is contained in:
Teriuihi 2021-12-31 18:44:32 +01:00
parent de11502f37
commit d59c58f066
16 changed files with 100 additions and 60 deletions

View File

@ -48,5 +48,4 @@ dependencies {
compileOnly("com.github.milkbowl:VaultAPI:1.7") {
exclude("org.bukkit","bukkit")
}
shadow("org.apache.commons:commons-math3:3.2")
}

View File

@ -54,9 +54,11 @@ public class GUIListener implements Listener {
if (currentItem == null)
return;
if (event.getClick().isShiftClick())
event.getWhoClicked().sendMessage(MiniMessage.get().parse(currentItem.getType().name() + ": " + event.getCurrentItem().getType().getMaxStackSize()));
event.getWhoClicked().sendMiniMessage(currentItem.getType().name() + ": " +
event.getCurrentItem().getType().getMaxStackSize(), null);
else
event.getWhoClicked().sendMessage(MiniMessage.get().parse(currentItem.getType().name() + ": " + event.getCurrentItem().getAmount()));
event.getWhoClicked().sendMiniMessage(currentItem.getType().name() + ": " +
event.getCurrentItem().getAmount(), null);
}
@EventHandler

View File

@ -11,6 +11,7 @@ import com.alttd.objects.VillagerType;
import com.alttd.util.Utilities;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.template.TemplateResolver;
import net.milkbowl.vault.economy.Economy;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
@ -19,16 +20,20 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.List;
import java.util.Objects;
public class BuyGUI extends GUIMerchant {
private static final MiniMessage miniMessage = MiniMessage.get();
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
public BuyGUI(VillagerType villagerType, EconUser econUser) {
super(MiniMessage.get().parse(Config.BUY_WINDOW,
Template.of("trader", villagerType.getDisplayName()),
Template.of("points", String.valueOf(Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0)))), villagerType);
super(miniMessage.deserialize(Config.BUY_WINDOW, TemplateResolver.resolving(
Template.template("trader", villagerType.getDisplayName()),
Template.template("points", String.valueOf(Objects.requireNonNullElse(
econUser.getPointsMap().get(villagerType.getName()),
0)))
)), villagerType);
for (ItemStack itemStack : villagerType.getBuying()) {
Price price = Utilities.getPrice(itemStack);
if (price == null)
@ -44,26 +49,27 @@ public class BuyGUI extends GUIMerchant {
private void buy(VillagerType villagerType, Player player, Material material, int amount, Price price) {
Economy econ = VillagerUI.getInstance().getEconomy();
double balance = econ.getBalance(player);
int trans_pts = (int) (Math.floor(price.getPrice(amount)/ WorthConfig.POINT_MOD) * amount);
int itemPts = (int) (Math.floor(price.getPrice(amount) / WorthConfig.POINT_MOD) + 1);
int transPts = itemPts * amount;
EconUser econUser = EconUser.getUser(player.getUniqueId());
int oldPoints = Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0);
double cost = price.calculatePriceThing(oldPoints, trans_pts, true);
double cost = price.calculatePriceThing(oldPoints, transPts, true, itemPts);
if (balance < cost) {
player.sendMessage(MiniMessage.get().parse(Config.NOT_ENOUGH_MONEY,
Template.of("money", String.valueOf(Utilities.round(balance, 2))),
Template.of("price", String.valueOf(price))));
player.sendMiniMessage(Config.NOT_ENOUGH_MONEY, List.of(
Template.template("money", String.valueOf(Utilities.round(balance, 2))),
Template.template("price", String.valueOf(cost))));
return;
}
econ.withdrawPlayer(player, cost);
econUser.addPoints(villagerType.getName(), trans_pts);
econUser.addPoints(villagerType.getName(), transPts);
player.getInventory().addItem(new ItemStack(material, amount));
player.sendMessage(MiniMessage.get().parse(Config.PURCHASED_ITEM,
Template.of("amount", String.valueOf(amount)),
Template.of("item", StringUtils.capitalize(material.name()
player.sendMiniMessage(Config.PURCHASED_ITEM, List.of(
Template.template("amount", String.valueOf(amount)),
Template.template("item", StringUtils.capitalize(material.name()
.toLowerCase().replaceAll("_", " "))),
Template.of("price", String.valueOf(cost))));
Template.template("price", String.valueOf(cost))));
Bukkit.getServer().getPluginManager()
.callEvent(new SpawnShopEvent(player, amount, cost, material,
@ -80,7 +86,7 @@ public class BuyGUI extends GUIMerchant {
private ItemStack nameItem(ItemStack itemStack, double price) {
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.displayName(miniMessage.parse("<green>" + price + "</green>")); //TODO configurable
itemMeta.displayName(miniMessage.deserialize("<green>" + price + "</green>")); //TODO configurable
itemStack.setItemMeta(itemMeta);
return itemStack;
}

View File

@ -7,38 +7,43 @@ import com.alttd.objects.EconUser;
import com.alttd.objects.VillagerType;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.template.TemplateResolver;
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;
import java.util.List;
import java.util.Objects;
public class OpenGUI extends GUIInventory {
private static final ItemStack BUY = new ItemStack(Material.GOLD_INGOT);
private static final ItemStack SELL = new ItemStack(Material.BUCKET);
private static final MiniMessage miniMessage;
static {
MiniMessage miniMessage = MiniMessage.get();
miniMessage = MiniMessage.miniMessage();
ItemMeta itemMeta;
{
itemMeta = BUY.getItemMeta();
itemMeta.displayName(miniMessage.parse("<green>Buy</green>"));
itemMeta.displayName(miniMessage.deserialize("<green>Buy</green>"));
BUY.setItemMeta(itemMeta);
}
{
itemMeta = SELL.getItemMeta();
itemMeta.displayName(miniMessage.parse("<green>Sell</green>"));
itemMeta.displayName(miniMessage.deserialize("<green>Sell</green>"));
SELL.setItemMeta(itemMeta);
}
}
public OpenGUI(VillagerType villagerType, EconUser econUser) {
super(InventoryType.HOPPER, MiniMessage.get().parse(Config.INITIAL_VILLAGER_WINDOW,
Template.of("trader", villagerType.getDisplayName()),
Template.of("points", String.valueOf(Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0)))));
super(InventoryType.HOPPER, miniMessage.deserialize(Config.INITIAL_VILLAGER_WINDOW,
TemplateResolver.resolving(Template.template("trader", villagerType.getDisplayName()),
Template.template("points", String.valueOf(Objects.requireNonNullElse(
econUser.getPointsMap().get(villagerType.getName()),
0)))))
);
setItem(1, BUY, player -> new BukkitRunnable() {
@Override
public void run() {

View File

@ -11,6 +11,7 @@ import com.alttd.objects.VillagerType;
import com.alttd.util.Utilities;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.template.TemplateResolver;
import net.milkbowl.vault.economy.Economy;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
@ -22,16 +23,19 @@ import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class SellGUI extends GUIMerchant {
private static final MiniMessage miniMessage = MiniMessage.get();
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
public SellGUI(VillagerType villagerType, EconUser econUser) {
super(MiniMessage.get().parse(Config.SELL_WINDOW,
Template.of("trader", villagerType.getDisplayName()),
Template.of("points", String.valueOf(Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0)))), villagerType);
super(MiniMessage.miniMessage().deserialize(Config.SELL_WINDOW, TemplateResolver.resolving(
Template.template("trader", villagerType.getDisplayName()),
Template.template("points", String.valueOf(Objects
.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName())
, 0))))), villagerType);
for (ItemStack itemStack : villagerType.getSelling()) {
Price price = Utilities.getPrice(itemStack);
if (price == null)
@ -48,28 +52,29 @@ public class SellGUI extends GUIMerchant {
PlayerInventory inventory = player.getInventory();
if (!inventory.containsAtLeast(new ItemStack(material), amount)) {
player.sendMessage(miniMessage.parse(Config.NOT_ENOUGH_ITEMS,
Template.of("type", material.name()),
Template.of("amount", String.valueOf(amount))));
player.sendMiniMessage(Config.NOT_ENOUGH_ITEMS, List.of(
Template.template("type", material.name()),
Template.template("amount", String.valueOf(amount))));
return;
}
Economy econ = VillagerUI.getInstance().getEconomy();
EconUser econUser = EconUser.getUser(player.getUniqueId());
int oldPoints = Objects.requireNonNullElse(econUser.getPointsMap().get(villagerType.getName()), 0);
int trans_pts = (int) ((Math.floor(price.getPrice(amount) / WorthConfig.POINT_MOD) + 1) * amount);
double cost = price.calculatePriceThing(oldPoints, trans_pts, false);
int itemPts = (int) (Math.floor(price.getPrice(amount) / WorthConfig.POINT_MOD) + 1);
int transPts = itemPts * amount;
double cost = price.calculatePriceThing(oldPoints, transPts, false, itemPts);
econ.depositPlayer(player, cost);
econUser.addPoints(villagerType.getName(), -price.getPoints());
removeItems(inventory, material, amount);
player.sendMessage(MiniMessage.get().parse(Config.SOLD_ITEM,
Template.of("amount", String.valueOf(amount)),
Template.of("item", StringUtils.capitalize(material.name()
player.sendMiniMessage(Config.SOLD_ITEM, List.of(
Template.template("amount", String.valueOf(amount)),
Template.template("item", StringUtils.capitalize(material.name()
.toLowerCase().replaceAll("_", " "))),
Template.of("price", String.valueOf(cost))));
Template.template("price", String.valueOf(cost))));
Bukkit.getServer().getPluginManager()
.callEvent(new SpawnShopEvent(player, amount, cost, material,
@ -107,7 +112,7 @@ public class SellGUI extends GUIMerchant {
private ItemStack nameItem(ItemStack itemStack, double price) {
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.displayName(miniMessage.parse("<red>" + price * -1 + "</red>")); //TODO configurable
itemMeta.displayName(miniMessage.deserialize("<red>" + price * -1 + "</red>")); //TODO configurable
itemStack.setItemMeta(itemMeta);
return itemStack;
}

View File

@ -6,6 +6,7 @@ import com.alttd.database.Database;
import com.alttd.config.Config;
import com.alttd.config.VillagerConfig;
import com.alttd.config.WorthConfig;
import com.alttd.database.Queries;
import com.alttd.events.LoginEvent;
import com.alttd.events.LogoutEvent;
import com.alttd.events.VillagerEvents;
@ -47,6 +48,15 @@ public class VillagerUI extends JavaPlugin {
Logger.info("--------------------------------------------------");
}
@Override
public void onDisable() {
EconUser.getEconUsers().forEach(econUser -> {
if (Config.DEBUG)
Logger.info("Syncing %", econUser.getUuid().toString());
Queries.updateUserPoints(econUser.getUuid(), econUser.getPointsMap());
});
}
private void scheduleTasks() {
new BukkitRunnable() {
@Override
@ -54,6 +64,8 @@ public class VillagerUI extends JavaPlugin {
if (Config.DEBUG)
Logger.info("Syncing users.");
EconUser.getEconUsers().forEach(econUser -> {
if (econUser == null)
return;
if (Config.DEBUG)
Logger.info("Syncing %", econUser.getUuid().toString());
econUser.removePoints();

View File

@ -40,23 +40,25 @@ public class CommandManager implements CommandExecutor, TabExecutor {
new CommandCreateVillager(),
new CommandReload(),
new CommandRemoveVillager());
miniMessage = MiniMessage.get();
miniMessage = MiniMessage.miniMessage();
}
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String cmd, @NotNull String[] args) {
if (args.length == 0) {
commandSender.sendMessage(miniMessage.parse(Config.HELP_MESSAGE_WRAPPER, Template.of("commands", subCommands.stream()
commandSender.sendMiniMessage(Config.HELP_MESSAGE_WRAPPER, List.of(
Template.template("commands", subCommands.stream()
.filter(subCommand -> commandSender.hasPermission(subCommand.getPermission()))
.map(SubCommand::getHelpMessage)
.collect(Collectors.joining("\n")))));
.collect(Collectors.joining("\n")))
));
return true;
}
SubCommand subCommand = getSubCommand(args[0]);
if (!commandSender.hasPermission(subCommand.getPermission())) {
commandSender.sendMessage(miniMessage.parse(Config.NO_PERMISSION));
commandSender.sendMiniMessage(Config.NO_PERMISSION, null);
return true;
}

View File

@ -10,7 +10,7 @@ public abstract class SubCommand {
private final MiniMessage miniMessage;
public SubCommand() {
miniMessage = MiniMessage.get();
miniMessage = MiniMessage.miniMessage();
}
public abstract boolean onCommand(CommandSender commandSender, String[] args);

View File

@ -8,6 +8,7 @@ import com.alttd.objects.LoadedVillagers;
import com.alttd.objects.VillagerType;
import com.alttd.util.Utilities;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.template.TemplateResolver;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@ -26,26 +27,26 @@ public class CommandCreateVillager extends SubCommand {
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
if (args.length != 9) {
commandSender.sendMessage(getMiniMessage().parse(getHelpMessage()));
commandSender.sendMiniMessage(getHelpMessage(), null);
return true;
}
Optional<VillagerType> first = VillagerType.getVillagerTypes().stream().filter(villagerType -> villagerType.getName().equalsIgnoreCase(args[1])).findFirst();
if (first.isEmpty()) {
commandSender.sendMessage(getMiniMessage().parse(getHelpMessage()));
commandSender.sendMiniMessage(getHelpMessage(), null);
return true;
}
VillagerType villagerType = first.get();
Villager.Type type = Villager.Type.valueOf(args[2].toUpperCase());
if (type == null) { //TODO test if this might need a try catch?
commandSender.sendMessage(getMiniMessage().parse(getHelpMessage()));
commandSender.sendMiniMessage(getHelpMessage(), null);
return true;
}
World world = Bukkit.getServer().getWorld(args[8]);
if (world == null) {
commandSender.sendMessage(getMiniMessage().parse(getHelpMessage()));
commandSender.sendMiniMessage(getHelpMessage(), null);
return true;
}
Location location = new Location(world, Double.parseDouble(args[3]),Double.parseDouble(args[4]),Double.parseDouble(args[5]), Float.parseFloat(args[6]), Float.parseFloat(args[7]));
@ -55,7 +56,9 @@ public class CommandCreateVillager extends SubCommand {
villager.setVillagerType(type);
villager.setProfession(villagerType.getProfession());
villager.setRemoveWhenFarAway(false);
villager.customName(getMiniMessage().parse(Config.VILLAGER_NAME, Template.of("name", villagerType.getDisplayName())));
villager.customName(getMiniMessage().deserialize(Config.VILLAGER_NAME, TemplateResolver.resolving(
Template.template("name", villagerType.getDisplayName())))
);
villager.setCustomNameVisible(true);
villager.setAI(false);

View File

@ -4,6 +4,7 @@ import com.alttd.commands.CommandManager;
import com.alttd.commands.SubCommand;
import com.alttd.config.Config;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.template.TemplateResolver;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
@ -21,10 +22,12 @@ public class CommandHelp extends SubCommand {
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
commandSender.sendMessage(getMiniMessage().parse(Config.HELP_MESSAGE_WRAPPER, Template.of("commands", commandManager.getSubCommands().stream()
.filter(subCommand -> commandSender.hasPermission(subCommand.getPermission()))
.map(SubCommand::getHelpMessage)
.collect(Collectors.joining("\n")))));
commandSender.sendMiniMessage(Config.HELP_MESSAGE_WRAPPER,
List.of(Template.template("commands", commandManager
.getSubCommands().stream()
.filter(subCommand -> commandSender.hasPermission(subCommand.getPermission()))
.map(SubCommand::getHelpMessage)
.collect(Collectors.joining("\n")))));
return true;
}

View File

@ -16,7 +16,7 @@ public class CommandReload extends SubCommand {
Config.reload();
VillagerConfig.reload();
WorthConfig.reload();
commandSender.sendMessage(getMiniMessage().parse("<green>Reloaded VillagerShopUI config.</green>"));
commandSender.sendMiniMessage("<green>Reloaded VillagerShopUI config.</green>", null);
return true;
}

View File

@ -19,7 +19,7 @@ public class CommandRemoveVillager extends SubCommand {
@Override
public boolean onCommand(CommandSender commandSender, String[] args) {
if (!(commandSender instanceof Player player)) {
commandSender.sendMessage(getMiniMessage().parse(Config.NO_CONSOLE));
commandSender.sendMiniMessage(Config.NO_CONSOLE, null);
return true;
}
@ -32,7 +32,8 @@ public class CommandRemoveVillager extends SubCommand {
LoadedVillagers.removeLoadedVillager(uuid);
VillagerConfig.removeVillager(uuid);
entity.remove();
player.sendMessage(getMiniMessage().parse(Config.REMOVED_VILLAGER, Template.of("uuid", uuid.toString())));
player.sendMiniMessage(Config.REMOVED_VILLAGER, List.of(
Template.template("uuid", uuid.toString())));
}
return true;
}

View File

@ -41,7 +41,7 @@ public class Queries {
" for villager type %", String.valueOf(points), uuid.toString(), villagerType);
}
});
preparedStatement.execute();
preparedStatement.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
return;

View File

@ -1,7 +1,9 @@
package com.alttd.events;
import com.alttd.GUI.GUI;
import com.alttd.config.Config;
import com.alttd.objects.EconUser;
import com.alttd.util.Logger;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
@ -13,6 +15,8 @@ public class LogoutEvent implements Listener {
public void onPlayerQuit(PlayerQuitEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
if (Config.DEBUG)
Logger.info("Syncing %", event.getPlayer().getName());
EconUser.getUser(uuid).syncPoints();
EconUser.removeUser(uuid);
GUI.GUIByUUID.remove(uuid);

View File

@ -31,7 +31,7 @@ public class VillagerEvents implements Listener {
event.setCancelled(true);
if (!event.getPlayer().hasPermission(loadedVillager.getPermission())) {
event.getPlayer().sendMessage(MiniMessage.get().parse(Config.NO_PERMISSION)); //TODO more specific message?
event.getPlayer().sendMiniMessage(Config.NO_PERMISSION, null); //TODO more specific message?
return;
}
new BukkitRunnable() {

View File

@ -5,13 +5,11 @@ import com.alttd.config.Config;
import com.alttd.database.Queries;
import com.alttd.util.Logger;
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
import org.apache.commons.math3.analysis.function.Log;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.Unmodifiable;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
public class EconUser {