Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
}

group = 'xyz.oribuin'
version = '1.0.1'
version = '1.0.2'

java {
toolchain {
Expand Down Expand Up @@ -55,10 +55,6 @@ shadowJar {

relocate("dev.rosewood.rosegarden", "${project.group}.vouchers.libs.rosegarden")
relocate("dev.triumphteam.gui", "${project.group}.vouchers.libs.triumphgui")

// Remove comments if you're not using SQL/SQLite
exclude 'dev/rosewood/rosegarden/lib/hikaricp/**/*.class'
exclude 'dev/rosewood/rosegarden/lib/slf4j/**/*.class'
}

// Include version replacement
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/xyz/oribuin/vouchers/VoucherPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import xyz.oribuin.vouchers.listener.VoucherListener;
import xyz.oribuin.vouchers.manager.CommandManager;
import xyz.oribuin.vouchers.manager.ConfigurationManager;
import xyz.oribuin.vouchers.manager.DataManager;
import xyz.oribuin.vouchers.manager.LocaleManager;
import xyz.oribuin.vouchers.manager.VoucherManager;

Expand All @@ -18,7 +19,7 @@ public class VoucherPlugin extends RosePlugin {
public VoucherPlugin() {
super(114633, 20798,
ConfigurationManager.class,
null,
DataManager.class,
LocaleManager.class,
CommandManager.class
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import net.kyori.adventure.text.Component;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import xyz.oribuin.vouchers.manager.VoucherManager;
import xyz.oribuin.vouchers.model.Voucher;
Expand Down Expand Up @@ -49,10 +50,10 @@ public void execute(CommandContext context, @Optional Integer page) {
vouchers.forEach(voucher -> {
ItemStack item = voucher.getDisplay();

GuiItem guiItem = ItemBuilder.from(item).asGuiItem(event -> event
.getWhoClicked()
.getInventory()
.addItem(voucher.getDisplay())
GuiItem guiItem = ItemBuilder.from(item).asGuiItem(event -> voucher.give(
(Player) event.getWhoClicked(),
event.getWhoClicked().isSneaking() ? item.getMaxStackSize() : 1
)
);

gui.addItem(guiItem);
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/xyz/oribuin/vouchers/listener/VoucherListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,18 @@
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import xyz.oribuin.vouchers.VoucherPlugin;
import xyz.oribuin.vouchers.manager.ConfigurationManager.Setting;
import xyz.oribuin.vouchers.manager.VoucherManager;
import xyz.oribuin.vouchers.model.Voucher;

public class VoucherListener implements Listener {

private final VoucherPlugin plugin;
private final VoucherManager manager;

public VoucherListener(VoucherPlugin plugin) {
this.plugin = plugin;
this.manager = plugin.getManager(VoucherManager.class);
}

@EventHandler(priority = EventPriority.HIGHEST)
Expand All @@ -24,14 +25,15 @@ public void onInteract(PlayerInteractEvent event) {
if (event.getItem() == null) return;
if (event.getClickedBlock() != null && event.getClickedBlock().getType().isInteractable()) return;

Voucher voucher = this.plugin.getManager(VoucherManager.class).getVoucher(event.getItem());
Voucher voucher = this.manager.getVoucher(event.getItem());
if (voucher == null) return;
event.setCancelled(true);

if (!Setting.REDEEM_WHILE_CROUCHING.getBoolean() && event.getPlayer().isSneaking()) return;

if (voucher.redeem(event.getPlayer())) {
event.getItem().setAmount(event.getItem().getAmount() - 1);
ItemStack item = event.getItem();
if (voucher.redeem(event.getPlayer(), manager.getUniqueId(item))) {
item.setAmount(item.getAmount() - 1);
}
}

Expand Down
87 changes: 87 additions & 0 deletions src/main/java/xyz/oribuin/vouchers/manager/DataManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package xyz.oribuin.vouchers.manager;

import dev.rosewood.rosegarden.RosePlugin;
import dev.rosewood.rosegarden.database.DataMigration;
import dev.rosewood.rosegarden.manager.AbstractDataManager;
import xyz.oribuin.vouchers.migration._1_CreateInitialTables;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public class DataManager extends AbstractDataManager {

private final Map<UUID, Integer> cachedUses = new HashMap<>();

public DataManager(RosePlugin rosePlugin) {
super(rosePlugin);
}

@Override
public void reload() {
super.reload();

// Load all the uses from the database
// (This is better than loading straight from the database when needed)
this.cachedUses.clear();
this.async(() -> this.databaseConnector.connect(connection -> {
String select = "SELECT * FROM " + this.getTablePrefix() + "uses";
try (PreparedStatement statement = connection.prepareStatement(select)) {
ResultSet rs = statement.executeQuery();
while (rs.next()) {
UUID voucher = UUID.fromString(rs.getString("voucher_id"));
int uses = rs.getInt("uses");

this.cachedUses.put(voucher, uses);
}
}
}));
}

/**
* Add a use to the voucher with the specified UUID for the specified amount of uses
*
* @param voucher The voucher to add the use to
* @param uses The amount of uses to add
*/
public void addUse(UUID voucher, int uses) {
this.cachedUses.put(voucher, uses);

this.async(() -> this.databaseConnector.connect(connection -> {
String insert = "REPLACE INTO " + this.getTablePrefix() + "uses (`voucher_id`, `uses`) VALUES (?, ?)";
try (PreparedStatement statement = connection.prepareStatement(insert)) {
statement.setString(1, voucher.toString());
statement.setInt(2, uses);
statement.executeUpdate();
}
}));
}

/**
* Get all the uses for a voucher
*
* @param voucher The voucher
* @return The amount of uses
*/
public int getUses(UUID voucher) {
return this.cachedUses.getOrDefault(voucher, 1);
}

/**
* Run a task asynchronously
*
* @param runnable The task to run
*/
public void async(Runnable runnable) {
this.rosePlugin.getServer().getScheduler().runTaskAsynchronously(this.rosePlugin, runnable);
}

@Override
public List<Class<? extends DataMigration>> getDataMigrations() {
return List.of(_1_CreateInitialTables.class);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public LocaleManager(RosePlugin rosePlugin) {
super(rosePlugin);
}


/**
* Send a message to a CommandSender
*
Expand Down
23 changes: 20 additions & 3 deletions src/main/java/xyz/oribuin/vouchers/manager/VoucherManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import dev.rosewood.rosegarden.config.CommentedConfigurationSection;
import dev.rosewood.rosegarden.config.CommentedFileConfiguration;
import dev.rosewood.rosegarden.manager.Manager;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
Expand Down Expand Up @@ -107,15 +106,16 @@ public void load(File file) {
});

voucher.setRequirements(requirements);
voucher.setDenyCommands(section.getStringList(key + ".deny-commands"));
}

// Load all the basic easy values from the config
voucher.setDenyCommands(section.getStringList(key + ".deny-commands"));
voucher.setRequirementMin(section.getInt(key + ".requirement-min", requirements.size()));
voucher.setCommands(section.getStringList(key + ".commands"));
voucher.setCooldown(VoucherUtils.getTime(section.getString(key + ".cooldown")).toMillis());
voucher.setCooldownActions(section.getStringList(key + ".on-cooldown"));

voucher.setUnique(section.getBoolean(key + ".unique", false));
voucher.setUniqueCommands(section.getStringList(key + ".unique-commands"));
this.vouchers.put(key.toLowerCase(), voucher);
});

Expand Down Expand Up @@ -186,6 +186,23 @@ public long getCooldown(UUID uuid, Voucher voucher) {
return voucher.getCooldown() - (System.currentTimeMillis() - lastUse);
}

/**
* Get the unique id of a voucher.
*
* @param itemStack The item to get the unique id from.
* @return The unique id of the voucher.
*/
public UUID getUniqueId(ItemStack itemStack) {
ItemMeta meta = itemStack.getItemMeta();
if (meta == null) return null;

PersistentDataContainer container = meta.getPersistentDataContainer();
String id = container.get(Voucher.UNIQUE_KEY, PersistentDataType.STRING);
if (id == null) return null;

return UUID.fromString(id);
}

public Map<String, Voucher> getVouchers() {
return vouchers;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package xyz.oribuin.vouchers.migration;

import dev.rosewood.rosegarden.database.DataMigration;
import dev.rosewood.rosegarden.database.DatabaseConnector;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class _1_CreateInitialTables extends DataMigration {

public _1_CreateInitialTables() {
super(1);
}

@Override
public void migrate(DatabaseConnector connector, Connection connection, String tablePrefix) throws SQLException {
String createTable = "CREATE TABLE IF NOT EXISTS " + tablePrefix + "uses (" +
"`voucher_id` VARCHAR(36) NOT NULL, " +
"`uses` INT NOT NULL, " +
"primary key (`voucher_id`))";

try (PreparedStatement statement = connection.prepareStatement(createTable)) {
statement.executeUpdate();
}
}

}
Loading