mirror of
https://github.com/TotalFreedomMC/TF-Marriage.git
synced 2024-05-30 16:41:23 +00:00
Add marriage list command
This commit is contained in:
parent
8ba4d385b1
commit
bfed27fd81
|
@ -8,6 +8,7 @@ import org.bukkit.plugin.Plugin;
|
|||
|
||||
import com.lenis0012.bukkit.marriage2.commands.Command;
|
||||
import com.lenis0012.bukkit.marriage2.misc.BConfig;
|
||||
import com.lenis0012.bukkit.marriage2.misc.ListQuery;
|
||||
|
||||
public interface Marriage {
|
||||
/**
|
||||
|
@ -26,6 +27,16 @@ public interface Marriage {
|
|||
*/
|
||||
MPlayer getMPlayer(UUID uuid);
|
||||
|
||||
/**
|
||||
* Get a list of all married players.
|
||||
* Note: This is IO, so please put it on an async task.
|
||||
*
|
||||
* @param scale Amount of results per page.
|
||||
* @param page The page you want to fetch
|
||||
* @return Fetched page of marriages list
|
||||
*/
|
||||
ListQuery getMarriageList(int scale, int page);
|
||||
|
||||
/**
|
||||
* Marry 2 players to eachother.
|
||||
*
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
package com.lenis0012.bukkit.marriage2.commands;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import com.lenis0012.bukkit.marriage2.Marriage;
|
||||
import com.lenis0012.bukkit.marriage2.config.Message;
|
||||
import com.lenis0012.bukkit.marriage2.misc.ListQuery;
|
||||
|
||||
public class CommandList extends Command {
|
||||
|
||||
public CommandList(Marriage marriage, String[] aliases) {
|
||||
super(marriage, aliases);
|
||||
setDescription("View a list of all married players");
|
||||
setUsage("[page]");
|
||||
|
||||
setAllowConsole(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
reply(Message.FETCHING_LIST);
|
||||
final int page = getArgLength() > 0 ? getArgAsInt(0) : 1;
|
||||
if(page < 1) {
|
||||
reply(Message.NEGATIVE_NUMBER);
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().runTaskAsynchronously(marriage.getPlugin(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final ListQuery list = marriage.getMarriageList(10, page - 1);
|
||||
list.send(sender);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -17,7 +17,10 @@ public enum Message {
|
|||
ITEM_GIFTED("&aYou have given %s of %s to your partner!"),
|
||||
GIFT_RECEIVED("&aYou have received %s of %s as a gift from your partner!"),
|
||||
PARTNER_NOT_ONLINE("&cYour partner is currently not online!"),
|
||||
HOME_SET("&aYou have set a home for your marriage!");
|
||||
FETCHING_LIST("&eFetching player marriage list..."),
|
||||
HOME_SET("&aYou have set a home for your marriage!"),
|
||||
INVALID_FORMAT("&cThe argument could not be parsed to an integer!"),
|
||||
NEGATIVE_NUMBER("&cYou must enter a positive number!");
|
||||
|
||||
private final String defaultMessage;
|
||||
private String message;
|
||||
|
|
|
@ -17,6 +17,7 @@ import com.lenis0012.bukkit.marriage2.internal.data.DataManager;
|
|||
import com.lenis0012.bukkit.marriage2.internal.data.MarriageData;
|
||||
import com.lenis0012.bukkit.marriage2.internal.data.MarriagePlayer;
|
||||
import com.lenis0012.bukkit.marriage2.listeners.DatabaseListener;
|
||||
import com.lenis0012.bukkit.marriage2.misc.ListQuery;
|
||||
|
||||
public class MarriageCore extends MarriageBase {
|
||||
private final Map<UUID, MarriagePlayer> players = Collections.synchronizedMap(new HashMap<UUID, MarriagePlayer>());
|
||||
|
@ -69,4 +70,9 @@ public class MarriageCore extends MarriageBase {
|
|||
((MarriagePlayer) player1).addMarriage(mdata);
|
||||
((MarriagePlayer) player2).addMarriage(mdata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListQuery getMarriageList(int scale, int page) {
|
||||
return dataManager.listMarriages(page, page);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,12 +7,16 @@ import java.sql.PreparedStatement;
|
|||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
|
||||
import com.lenis0012.bukkit.marriage2.MData;
|
||||
import com.lenis0012.bukkit.marriage2.internal.MarriageCore;
|
||||
import com.lenis0012.bukkit.marriage2.misc.ListQuery;
|
||||
|
||||
public class DataManager {
|
||||
private final MarriageCore core;
|
||||
|
@ -100,7 +104,7 @@ public class DataManager {
|
|||
|
||||
private void loadMarriages(Connection connection, MarriagePlayer player, boolean alt) throws SQLException {
|
||||
PreparedStatement ps = connection.prepareStatement(String.format(
|
||||
"SELECT * FROM %sdata WHERE %s=?;", alt ? "player2" : "player1", prefix));
|
||||
"SELECT * FROM %sdata WHERE %s=?;", prefix, alt ? "player2" : "player1", prefix));
|
||||
ResultSet result = ps.executeQuery();
|
||||
while(result.next()) {
|
||||
player.addMarriage(new MarriageData(result));
|
||||
|
@ -111,6 +115,39 @@ public class DataManager {
|
|||
}
|
||||
}
|
||||
|
||||
public ListQuery listMarriages(int scale, int page) {
|
||||
Connection connection = newConnection();
|
||||
try {
|
||||
// Count rows to get amount of pages
|
||||
PreparedStatement ps = connection.prepareStatement("SELECT COUNT(*) FROM " + prefix + "data;");
|
||||
ResultSet result = ps.executeQuery();
|
||||
int pages = (int) Math.ceil(result.getInt("COUNT") / (double) scale);
|
||||
|
||||
// Fetch te right page
|
||||
ps = connection.prepareStatement(String.format(
|
||||
"SELECT * FROM %sdata ORDER BY id DESC LIMIT %s OFFSET %s;", prefix, scale, scale * page));
|
||||
result = ps.executeQuery();
|
||||
|
||||
List<MData> list = new ArrayList<MData>();
|
||||
while(result.next()) {
|
||||
list.add(new MarriageData(result));
|
||||
}
|
||||
|
||||
return new ListQuery(pages, page, list);
|
||||
} catch (SQLException e) {
|
||||
core.getLogger().log(Level.WARNING, "Failed to load marriage list", e);
|
||||
return new ListQuery(0, 0, new ArrayList<MData>());
|
||||
} finally {
|
||||
if(connection != null) {
|
||||
try {
|
||||
connection.close();
|
||||
} catch (SQLException e) {
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Connection newConnection() {
|
||||
try {
|
||||
return DriverManager.getConnection(url);
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
package com.lenis0012.bukkit.marriage2.misc;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import com.lenis0012.bukkit.marriage2.MData;
|
||||
import com.lenis0012.bukkit.marriage2.internal.MarriagePlugin;
|
||||
|
||||
public class ListQuery {
|
||||
private final int pages;
|
||||
private final int page;
|
||||
private final List<MData> marriages;
|
||||
|
||||
public ListQuery(int pages, int page, List<MData> marriages) {
|
||||
this.pages = pages;
|
||||
this.page = page;
|
||||
this.marriages = marriages;
|
||||
}
|
||||
|
||||
public void send(final CommandSender to) {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
to.sendMessage(ChatColor.GOLD + ChatColor.BOLD.toString() + "Married players:");
|
||||
to.sendMessage(ChatColor.GOLD + "Page " + page + "/" + pages);
|
||||
for(MData data : marriages) {
|
||||
OfflinePlayer player1 = Bukkit.getOfflinePlayer(data.getPlayer1Id());
|
||||
OfflinePlayer player2 = Bukkit.getOfflinePlayer(data.getPllayer2Id());
|
||||
to.sendMessage(ChatColor.GREEN + player1.getName() + " + " + player2.getName());
|
||||
}
|
||||
}
|
||||
}.runTask(MarriagePlugin.getInstance().getPlugin());
|
||||
}
|
||||
|
||||
public int getPages() {
|
||||
return pages;
|
||||
}
|
||||
|
||||
public int getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public List<MData> getMarriages() {
|
||||
return marriages;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue