freeze + staff mod + sql h2 reports + reports

This commit is contained in:
nessar committed 2022-05-03 06:07:39 +02:00
1 parent 5729901500
commit 801caac5de
15 files changed
+946 -239

No files matched your search

+22 -2
View File
@@ -1,4 +1,4 @@
## Staff plugin
# Staff plugin
* tempMute / mute
* Freeze
@@ -29,6 +29,7 @@
* duration => edit paper in anvil gui
* message => edit paper in anvil gui
* save as template from here
* tickets and report same interface but not same command / accessible from the same interface as admin
* [tickets](https://youtu.be/12jlZPFWp9U?t=105)
* suggestion
* help
@@ -48,7 +49,26 @@
* arichve report / delete report (need perm) / process report => true (=> punishment with templates or nothing) / not sure / false
* abusive report
* comments on report => private / public (send to the reporter) delete comments (need perm)
* [templates](https://youtu.be/12jlZPFWp9U?t=320)
* [templates](https://youtu.be/12jlZPFWp9U?t=320) for punishments
* staff chat
* clear chat => don't clear if you have specific perm (or force it)
* global mute chat
DB:
```sql
CREATE TABLE reports(ID INT AUTO_INCREMENT PRIMARY KEY, report BOOLEAN, reportStatus TINYINT, reportTime BIGINT, reportReason VARCHAR(256), reported JAVA_OBJECT, reporter JAVA_OBJECT);
CREATE TABLE chatHistory(messageId INT AUTO_INCREMENT PRIMARY KEY, messageDate BIGINT, messageAuthor UUID, message VARCHAR(256));
CREATE TABLE templates(id INT AUTO_INCREMENT PRIMARY KEY, templateName VARCHAR(32), message VARCHAR(256), duration BIGINT, type TINYINT);
CREATE TABLE punishments(id INT AUTO_INCREMENT PRIMARY KEY, punishedUUID UUID, message VARCHAR(256), punishmentType TINYINT, endtime BIGINT);
```
reportStatus =
* 000 => wating
* 001 => in progress
* 010 => important
* 100 => processed : abusive report / ticket
* 101 => processed : false / unsolvable
* 110 => processed : not sure / not solved
* 111 => processed : true / solved
View File
Whitespace-only changes.
+61
View File
@@ -0,0 +1,61 @@
package fr.nessar;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class CommandFreezeExecutor implements CommandExecutor {
private static final String PREFIX_PERMISSION = "staff.";
private Staff plugin;
public CommandFreezeExecutor(Staff plugin) {
this.plugin = plugin;
}
public String permissionErrMessage() {
return "You don't have the permission to do this command !";
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if ((commandLabel.equalsIgnoreCase("freeze") || commandLabel.equalsIgnoreCase("block")) && args.length == 1) {
Player target = Bukkit.getServer().getPlayer(args[0]);
if (target == null) {
sender.sendMessage(Staff.getSTAFF_PREFIX() + ChatColor.RED + "Joueur " + args[0] + " introuvable.");
return true;
}
if (plugin.isFrozen(target) != -1) {
sender.sendMessage(
Staff.getSTAFF_PREFIX() + "Le joueur " + target.getDisplayName() + " est deja freeze !");
return true;
}
sender.sendMessage(
Staff.getSTAFF_PREFIX() + "Le joueur " + target.getDisplayName() + " a bien été freeze !");
plugin.toggleFreeze(target);
return true;
}
if ((commandLabel.equalsIgnoreCase("unfreeze") || commandLabel.equalsIgnoreCase("unblock")
|| commandLabel.equalsIgnoreCase("free")) && args.length == 1) {
Player target = Bukkit.getServer().getPlayer(args[0]);
if (target == null) {
sender.sendMessage(Staff.getSTAFF_PREFIX() + ChatColor.RED + "Joueur " + args[0] + " introuvable.");
return true;
}
if (plugin.isFrozen(target) == -1) {
sender.sendMessage(
Staff.getSTAFF_PREFIX() + "Le joueur " + target.getDisplayName() + " n'est pas freeze !");
return true;
}
sender.sendMessage(
Staff.getSTAFF_PREFIX() + "Le joueur " + target.getDisplayName() + " a bien été libéré !");
plugin.toggleFreeze(target);
return true;
}
sender.sendMessage(Staff.getSTAFF_PREFIX() + ChatColor.RED + "Mauvais usage de la commande.");
return false;
}
}
+5 -2
View File
@@ -22,13 +22,16 @@ public class CommandStaffExecutor implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage(Staff.getPREFIX() + ChatColor.RED + "Seul les joueurs peuvent utiliser ces commandes.");
sender.sendMessage(
Staff.getSTAFF_PREFIX() + ChatColor.RED + "Seul les joueurs peuvent utiliser ces commandes.");
return true;
}
Player p = (Player) sender;
if (commandLabel.equalsIgnoreCase("staff") && args.length == 0) {
plugin.toggleStaffMod(p);
return true;
}
p.sendMessage(Staff.getPREFIX() + ChatColor.RED + "Mauvais usage de la commande.");
p.sendMessage(Staff.getSTAFF_PREFIX() + ChatColor.RED + "Mauvais usage de la commande.");
return false;
}
}
-78
View File
@@ -1,78 +0,0 @@
package fr.nessar;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.nio.file.Files;
import com.google.gson.Gson;
import org.bukkit.Bukkit;
import net.md_5.bungee.api.ChatColor;
public class DataManager {
private Staff plugin = Staff.getPlugin(Staff.class);
// Files & File Configs Here
public File reportFile;
public DataManager() {
if (!plugin.getDataFolder().exists()) {
plugin.getDataFolder().mkdir();
}
this.reportFile = new File(plugin.getDataFolder(), "data.json");
if (!this.reportFile.exists()) {
try {
this.reportFile.createNewFile();
Bukkit.getServer().getConsoleSender()
.sendMessage(Staff.getPREFIX() + ChatColor.GREEN + "The data.json file has been created");
} catch (IOException e) {
Bukkit.getServer().getConsoleSender()
.sendMessage(Staff.getPREFIX() + ChatColor.RED + "Could not create the data.json file");
}
} else {
Bukkit.getServer().getConsoleSender().sendMessage(Staff.getPREFIX() + ChatColor.GREEN + "data.json found");
}
}
public void saveReports(List<Report> Reports) {
Gson gson = new Gson();
try {
Files.write(this.reportFile.toPath(), gson.toJson(Reports).getBytes());
} catch (IOException e) {
Bukkit.getServer().getConsoleSender()
.sendMessage(Staff.getPREFIX() + ChatColor.RED + "Couldn't save in the data.json file");
}
}
public List<Report> loadReports() {
Gson gson = new Gson();
List<Report> ret = null;
Report[] Reports = null;
if (reportFile.exists()) {
Reader reader;
try {
reader = new FileReader(reportFile);
} catch (FileNotFoundException e) {
Bukkit.getServer().getConsoleSender()
.sendMessage(Staff.getPREFIX() + ChatColor.RED + "Couldn't found data.json");
return new ArrayList<Report>();
}
Reports = gson.fromJson(reader, Report[].class);
if (Reports != null) {
ret = new ArrayList<Report>(Arrays.asList(Reports));
} else {
ret = new ArrayList<Report>();
}
}
return ret;
}
}
+83
View File
@@ -0,0 +1,83 @@
package fr.nessar;
import java.sql.Connection;
import java.sql.DriverManager;
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 org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class Database {
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
System.out.println("must have h2 driver");
return null;
}
try {
conn = DriverManager.getConnection(Staff.getUrlDB());
} catch (SQLException ex) {
System.out.println("There was a problem connecting database.");
}
return conn;
}
public static void initializeDatabase() {
try {
Connection connection = Database.getConnection();
Statement statement = connection.createStatement();
statement.execute(
"CREATE TABLE IF NOT EXISTS reports(ID INT AUTO_INCREMENT PRIMARY KEY, report BOOLEAN, reportStatus TINYINT, reportTime BIGINT, reportReason VARCHAR(256), reported JAVA_OBJECT, reporter JAVA_OBJECT);");
statement.execute(
"CREATE TABLE IF NOT EXISTS chatHistory(messageId INT AUTO_INCREMENT PRIMARY KEY, messageDate BIGINT, messageAuthor UUID, message VARCHAR(256));");
statement.execute(
"CREATE TABLE IF NOT EXISTS templates(id INT AUTO_INCREMENT PRIMARY KEY, templateName VARCHAR(32), message VARCHAR(256), duration BIGINT, type TINYINT);");
statement.execute(
"CREATE TABLE IF NOT EXISTS punishments(id INT AUTO_INCREMENT PRIMARY KEY, punishedUUID UUID, message VARCHAR(256), punishmentType TINYINT, endtime BIGINT);");
connection.close();
Bukkit.getConsoleSender().sendMessage(Staff.getSTAFF_PREFIX() + "Database loaded");
} catch (Exception e) {
Bukkit.getConsoleSender().sendMessage(Staff.getSTAFF_PREFIX() + "Couldn't load database :( " + e);
}
}
public static List<Report> loadReportsFromDB() throws Exception {
Connection connection = Database.getConnection();
PreparedStatement statement;
try {
statement = connection.prepareStatement("SELECT * FROM reports");
} catch (SQLException e) {
throw new Exception("Cannot get * from reports " + e);
}
ResultSet rows = statement.executeQuery();
List<Report> ret = new ArrayList<Report>();
while (rows.next()) {
ret.add(new Report(rows.getObject("reporter", Player.class), rows.getObject("reported", Player.class),
rows.getString("reportReason"), rows.getLong("reportTime"), rows.getBoolean("report")));
}
connection.close();
return ret;
}
public static void addReportToDB(Report r) throws SQLException {
Connection conn = Database.getConnection();
PreparedStatement statement;
statement = conn.prepareStatement(
"INSERT INTO reports(report,reportStatus,reportTime,reportReason,reported, reporter) VALUES (?,?,?,?,?)");
statement.setBoolean(0, r.isReport());
statement.setInt(1, r.getStatus().getStatusCode());
statement.setLong(2, r.getReportTime());
statement.setString(3, r.getReportReason());
statement.setObject(4, r.getReported());
statement.setObject(4, r.getReporter());
statement.execute();
conn.close();
}
}
-30
View File
@@ -1,30 +0,0 @@
package fr.nessar;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class Inventory {
private Player owner;
private List<ItemStack> inventory;
private List<ItemStack> armor;
public Inventory(Player p, List<ItemStack> inventory, List<ItemStack> armor) {
this.owner = p;
this.armor = armor;
this.inventory = inventory;
}
public Player getOwner() {
return this.owner;
}
public List<ItemStack> getInventory() {
return this.inventory;
}
public List<ItemStack> getArmor() {
return this.armor;
}
}
+37
View File
@@ -0,0 +1,37 @@
package fr.nessar;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import net.md_5.bungee.api.ChatColor;
public class Menu {
public static Inventory getFreeze() {
Inventory gui = Bukkit.createInventory(null, 27,
ChatColor.BOLD + ChatColor.RED.toString() + "VOUS ETES FREEZE");
List<ItemStack> listItem = new ArrayList<>();
ItemStack redPane = StaffMod.setNameItem(" ", new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14));
for (int i = 0; i < 27; i++) {
listItem.add(redPane);
}
ItemStack packedIce = StaffMod.setNameItem(ChatColor.GOLD + "Vous avez été " + ChatColor.BLUE + "FREEZE",
new ItemStack(Material.PACKED_ICE));
listItem.set(11, packedIce);
ItemStack tnt = StaffMod.setNameItem(ChatColor.RED + ChatColor.BOLD.toString() + "DECONNEXION = BAN",
new ItemStack(Material.TNT));
listItem.set(13, tnt);
ItemStack netherStar = StaffMod.setNameItem(
ChatColor.GOLD + "Allez sur ts.nessar.fr pour parler avec l'equipe de modération !",
new ItemStack(Material.NETHER_STAR));
listItem.set(15, netherStar);
ItemStack[] ret = {};
gui.setContents(listItem.toArray(ret));
return gui;
}
}
+29 -56
View File
@@ -2,126 +2,99 @@ package fr.nessar;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class Report {
private String reporterUUID;
private String reportedUUID;
private transient Player reporter;
private transient Player reported;
private boolean report;
private Player reporter;
private Player reported;
private String reportReason;
private String reportMessage;
private transient Date reportTime;
private long reportTimeMs;
private long reportTime;
private ReportStatus status;
public Report(Player reporter, Player reported, String reportReason, String reportMessage, Date reportTime) {
this.reporterUUID = reporter.getUniqueId().toString();
this.reportedUUID = reported.getUniqueId().toString();
public Report(Player reporter, Player reported, String reportReason, long reportTime, boolean report,
ReportStatus status) {
this.reporter = reporter;
this.reported = reported;
this.reportReason = reportReason;
this.reportMessage = reportMessage;
this.reportTime = reportTime;
this.reportTimeMs = this.reportTime.getTime();
this.report = report;
this.status = status;
}
public Report(Player reporter, Player reported, String reportReason, String reportMessage) {
new Report(reporter, reported, reportReason, reportMessage, new Date());
public Report(Player reporter, Player reported, String reportReason, boolean report) {
new Report(reporter, reported, reportReason, new Date().getTime(), report, ReportStatus.WAITING);
}
public Report(Player reporter, Player reported, String reportReason, String reportMessage, long reportTimeMs) {
new Report(reporter, reported, reportReason, reportMessage, new Date(reportTimeMs));
public Report(Player reporter, Player reported, String reportReason, long reportTime, boolean report) {
new Report(reporter, reported, reportReason, new Date().getTime(), report, ReportStatus.WAITING);
}
public Report(String reporterUUID, String reportedUUID, String reportReason, String reportMessage, Date reportTime)
throws Exception {
Player reporter = Bukkit.getServer().getPlayer(UUID.fromString(reporterUUID));
Player reported = Bukkit.getServer().getPlayer(UUID.fromString(reportedUUID));
if (this.reporter == null || this.reported == null) {
throw new Exception("Unable to find Player.");
}
new Report(reporter, reported, reportReason, reportMessage, reportTime);
public void changeStatus(ReportStatus newStatus) {
this.status = newStatus;
}
public Report(String reporterUUID, String reportedUUID, String reportReason, String reportMessage)
throws Exception {
new Report(reporterUUID, reportedUUID, reportReason, reportMessage, new Date());
public ReportStatus getStatus() {
return this.status;
}
public Report(String reporterUUID, String reportedUUID, String reportReason, String reportMessage,
long reportTimeMs)
throws Exception {
new Report(reporterUUID, reportedUUID, reportReason, reportMessage, new Date(reportTimeMs));
public boolean isReport() {
return this.report;
}
public long getReportTimeMs() {
return this.reportTimeMs;
public boolean isTicket() {
return !this.report;
}
public String getReporterUUID() {
return this.reporterUUID;
public long getReportTime() {
return this.reportTime;
}
public Player getReporter() {
return this.reporter;
}
public String getReportedUUID() {
return this.reportedUUID;
}
public Player getReported() {
return this.reported;
}
public String getReportMessage() {
return this.reportMessage;
}
public String getReportReason() {
return this.reportReason;
}
public Date getReportTime() {
return this.reportTime;
}
public int getReportTimeSecond() {
Calendar c = Calendar.getInstance();
c.setTime(this.reportTime);
c.setTime(new Date(this.reportTime));
return c.get(Calendar.SECOND);
}
public int getReportTimeMinute() {
Calendar c = Calendar.getInstance();
c.setTime(this.reportTime);
c.setTime(new Date(this.reportTime));
return c.get(Calendar.MINUTE);
}
public int getReportTimeHour() {
Calendar c = Calendar.getInstance();
c.setTime(this.reportTime);
c.setTime(new Date(this.reportTime));
return c.get(Calendar.HOUR_OF_DAY);
}
public int getReportTimeDay() {
Calendar c = Calendar.getInstance();
c.setTime(this.reportTime);
c.setTime(new Date(this.reportTime));
return c.get(Calendar.DAY_OF_MONTH);
}
public int getReportTimeMonth() {
Calendar c = Calendar.getInstance();
c.setTime(this.reportTime);
c.setTime(new Date(this.reportTime));
return c.get(Calendar.MONTH);
}
public int getReportTimeYear() {
Calendar c = Calendar.getInstance();
c.setTime(this.reportTime);
c.setTime(new Date(this.reportTime));
return c.get(Calendar.YEAR);
}
}
+37
View File
@@ -0,0 +1,37 @@
package fr.nessar;
public enum ReportStatus {
WAITING(0),
INPROGRESS(1),
IMPORTANT(2),
CLASSED_ABUSIVE(4),
CLASSED_FALSE(5),
CLASSED_NOTSURE(6),
CLASSED_TRUE(7);
private final int statusCode;
private ReportStatus(int code) {
this.statusCode = code;
}
public int getStatusCode() {
return this.statusCode;
}
public boolean isGreaterThan(ReportStatus r) {
return this.statusCode > r.getStatusCode();
}
public boolean isGreaterOrEqualThan(ReportStatus r) {
return this.statusCode >= r.getStatusCode();
}
public boolean equals(ReportStatus r) {
return this.statusCode == r.getStatusCode();
}
public boolean isClassed() {
return this.statusCode > 2;
}
}
+67
View File
@@ -0,0 +1,67 @@
package fr.nessar;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class SaveInventory {
private Player owner;
private List<ItemStack> inventory;
private List<ItemStack> armor;
public SaveInventory(Player p, List<ItemStack> inventory, List<ItemStack> armor) {
this.owner = p;
this.armor = armor;
this.inventory = inventory;
}
public SaveInventory(Player p) {
this.owner = p;
this.armor = saveArmor(p);
this.inventory = saveInv(p);
}
public List<ItemStack> saveInv(Player p) {
final List<ItemStack> invCont = new ArrayList<>();
for (ItemStack stack : p.getInventory().getContents()) {
if (stack != null)
invCont.add(stack);
}
return invCont;
}
public List<ItemStack> saveArmor(Player p) {
final List<ItemStack> armorCont = new ArrayList<>();
for (ItemStack stack : p.getInventory().getArmorContents()) {
if (stack != null)
armorCont.add(stack);
}
return armorCont;
}
public void loadInventory() {
SaveInventory.clear(this.owner);
for (int i = 0; i < this.inventory.size(); i++) {
this.owner.getInventory().setItem(i, this.inventory.get(i));
}
}
public Player getOwner() {
return this.owner;
}
public List<ItemStack> getInventory() {
return this.inventory;
}
public List<ItemStack> getArmor() {
return this.armor;
}
public static void clear(Player p) {
p.getInventory().clear();
p.getInventory().setArmorContents(new ItemStack[4]);
}
}
+368 -59
View File
@@ -1,113 +1,422 @@
package fr.nessar;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.Dye;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryCreativeEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryInteractEvent;
import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class Staff extends JavaPlugin implements Listener {
private static final String PREFIX = ChatColor.GRAY + "[" + ChatColor.GOLD + "Staff" + ChatColor.GRAY + "] "
private static String urlDB;
private static String STAFF_PREFIX = ChatColor.GRAY + "[" + ChatColor.GOLD + "Staff" + ChatColor.GRAY + "] "
+ ChatColor.RESET;
private static String REPORT_PREFIX = ChatColor.GRAY + "[" + ChatColor.GOLD + "Report" + ChatColor.GRAY + "] "
+ ChatColor.RESET;
private List<Report> reports;
private DataManager dManager;
private List<Player> inStaffMod;
private List<Inventory> inventories;
private List<StaffMod> inStaffMod;
private List<Player> frozen;
private static Inventory freezeInv = Menu.getFreeze();
@Override
public void onEnable() {
this.getConfig().options().copyDefaults();
this.saveDefaultConfig();
this.dManager = new DataManager();
this.reports = this.dManager.loadReports();
if (this.reports == null) {
this.inStaffMod = new ArrayList<StaffMod>();
this.frozen = new ArrayList<Player>();
Staff.urlDB = "jdbc:h2:" + getDataFolder().getAbsolutePath() + "/data/database";
Database.initializeDatabase();
try {
this.reports = Database.loadReportsFromDB();
} catch (Exception e) {
Bukkit.getServer().getConsoleSender()
.sendMessage(Staff.PREFIX + ChatColor.RED + "ERROR CANNOT LOAD DATA, CREATING EMPTY ONE");
this.reports = new ArrayList<>();
.sendMessage(Staff.STAFF_PREFIX + ChatColor.RED + "ERROR CANNOT LOAD DATA, DISABLING" + e);
Bukkit.getPluginManager().disablePlugin(this);
return;
}
this.inStaffMod = new ArrayList<Player>();
this.inventories = new ArrayList<Inventory>();
getCommand("staff").setExecutor(new CommandStaffExecutor(this));
getCommand("staff").setTabCompleter(new StaffTabCompletion(this));
getCommand("freeze").setExecutor(new CommandFreezeExecutor(this));
getCommand("unfreeze").setExecutor(new CommandFreezeExecutor(this));
// getCommand("staff").setTabCompleter(new StaffTabCompletion(this));
Bukkit.getServer().getConsoleSender().sendMessage(Staff.STAFF_PREFIX + ChatColor.GREEN + "Loaded.");
getServer().getPluginManager().registerEvents(this, this);
Bukkit.getServer().getConsoleSender().sendMessage(Staff.PREFIX + ChatColor.GREEN + "Loaded.");
}
@Override
public void onDisable() {
this.dManager.saveReports(this.reports);
Bukkit.getConsoleSender().sendMessage(Staff.PREFIX + ChatColor.RED + "Reports saved.");
Bukkit.getConsoleSender().sendMessage(Staff.PREFIX + ChatColor.RED + "Unloaded.");
}
public List<ItemStack> saveArmor(Player p) {
final List<ItemStack> armorCont = new ArrayList<>();
for (ItemStack stack : p.getInventory().getArmorContents()) {
if (stack != null)
armorCont.add(stack);
for (StaffMod sm : this.inStaffMod) {
toggleStaffMod(sm.getPlayer());
}
return armorCont;
Bukkit.getConsoleSender().sendMessage(Staff.STAFF_PREFIX + ChatColor.RED + "Reports saved.");
Bukkit.getConsoleSender().sendMessage(Staff.STAFF_PREFIX + ChatColor.RED + "Unloaded.");
}
public List<ItemStack> saveInv(Player p) {
final List<ItemStack> invCont = new ArrayList<>();
for (ItemStack stack : p.getInventory().getContents()) {
if (stack != null)
invCont.add(stack);
public void newReport(Player reporter, Player reported, String reportReason) {
Report freshReport = new Report(reporter, reported, reportReason, true);
try {
Database.addReportToDB(freshReport);
} catch (SQLException e) {
reporter.sendMessage(REPORT_PREFIX + "Votre report n'a pas pu être pris en compte désolé.");
Bukkit.getConsoleSender().sendMessage(
REPORT_PREFIX + ChatColor.RED + "Ajout a la DB impossible, report non pris en compte.");
return;
}
return invCont;
this.reports.add(freshReport);
}
public void saveAllInv(Player p) {
this.inventories.add(new Inventory(p, saveInv(p), saveArmor(p)));
public void newTicket(Player reporter, Player reported, String reportReason) {
Report freshTicket = new Report(reporter, reported, reportReason, false);
try {
Database.addReportToDB(freshTicket);
} catch (SQLException e) {
reporter.sendMessage(REPORT_PREFIX + "Votre ticket n'a pas pu être pris en compte désolé.");
Bukkit.getConsoleSender().sendMessage(
REPORT_PREFIX + ChatColor.RED + "Ajout a la DB impossible, ticket non pris en compte.");
return;
}
this.reports.add(freshTicket);
}
public void deleteSavedInv(Player p) {
for (int i = 0; i < this.inventories.size(); i++) {
if (this.inventories.get(i).getOwner().getUniqueId().equals(p.getUniqueId())) {
this.inventories.remove(i);
public static String getUrlDB() {
return Staff.urlDB;
}
public int getNbReport() {
return this.reports.size();
}
public int getNbReport(ReportStatus status, int classed, int report) {
int ret = 0;
boolean want_only_ticket = report == 0;
boolean want_only_report = report == 1;
boolean want_all_type = report == 2;
boolean want_classed = classed == 1;
boolean want_only_classed = classed == 2;
for (Report r : this.reports) {
if (r.getStatus().isGreaterOrEqualThan(status)
&& (want_all_type || want_only_ticket == r.isTicket() || want_only_report == r.isReport())
&& (want_classed || want_only_classed == r.getStatus().isClassed())) {
ret++;
}
}
return ret;
}
public void toggleStaffMod(Player p) {
int indexStaffMod = isInStaffMod(p);
if (indexStaffMod != -1) {
this.inStaffMod.get(indexStaffMod).disableStaffMod();
this.inStaffMod.remove(indexStaffMod);
} else {
this.inStaffMod.add(new StaffMod(this, p));
}
}
public int isInStaffMod(Player p) {
for (int i = 0; i < this.inStaffMod.size(); i++) {
if (inStaffMod.get(i).isHim(p)) {
return i;
}
}
return -1;
}
public int isFrozen(Player p) {
for (int i = 0; i < this.frozen.size(); i++) {
if (frozen.get(i).getUniqueId().equals(p.getUniqueId())) {
return i;
}
}
return -1;
}
public void toggleFreeze(Player p) {
int indexFroze = isFrozen(p);
if (indexFroze != -1) {
this.frozen.remove(indexFroze);
p.removePotionEffect(PotionEffectType.SLOW);
p.closeInventory();
} else {
this.frozen.add(p);
p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 99999, 255, true, true));
p.openInventory(Staff.freezeInv);
}
}
@EventHandler
public void onPlayerDrop(PlayerDropItemEvent event) {
Player p = event.getPlayer();
int indexStaffMod = isInStaffMod(p);
if (indexStaffMod != -1) {
if (inStaffMod.get(indexStaffMod).isStaffInv())
event.setCancelled(true);
else {
if (!p.getInventory().getItem(8).getType().equals(Material.STICK))
event.setCancelled(true);
}
}
}
public void clear(Player p) {
p.getInventory().clear();
p.getInventory().setArmorContents(new ItemStack[4]);
}
public void setStaffItem(Player p) {
// p.getInventory().setContents();
}
public void setStaffMod(Player p) {
}
public boolean isInStaffMod(Player p) {
for (Player p2 : this.inStaffMod) {
if (p2.getUniqueId().equals(p.getUniqueId())) {
return true;
@EventHandler
public void onPlayerInventoryDragEvent(InventoryDragEvent event) {
Player p = (Player) event.getWhoClicked();
int indexStaffMod = isInStaffMod(p);
if (indexStaffMod != -1) {
if (inStaffMod.get(indexStaffMod).isStaffInv())
event.setCancelled(true);
else {
if (!p.getInventory().getItem(8).getType().equals(Material.STICK))
event.setCancelled(true);
}
}
return false;
}
public void changeStaffMod(Player p) {
@EventHandler
public void onPlayerInventoryCreativeEvent(InventoryCreativeEvent event) {
Player p = (Player) event.getWhoClicked();
int indexStaffMod = isInStaffMod(p);
if (indexStaffMod != -1) {
if (inStaffMod.get(indexStaffMod).isStaffInv())
event.setCancelled(true);
else {
if (!p.getInventory().getItem(8).getType().equals(Material.STICK))
event.setCancelled(true);
}
}
}
@EventHandler
public void onPlayerPlayerInteractEvent(PlayerInteractEvent event) {
Player p = event.getPlayer();
int indexStaffMod = isInStaffMod(p);
if (indexStaffMod != -1) {
if (event.getMaterial().equals(Material.STICK) || inStaffMod.get(indexStaffMod).isStaffInv()) {
event.setCancelled(true);
inStaffMod.get(indexStaffMod).toggleOrUseSlot(event.getMaterial());
}
}
}
@EventHandler
public void onPlayerPlayerInteractEntityEvent(PlayerInteractEntityEvent event) {
Player p = event.getPlayer();
int indexStaffMod = isInStaffMod(p);
if (indexStaffMod != -1) {
event.setCancelled(true);
if (event.getRightClicked() instanceof Player) {
Player target = (Player) event.getRightClicked();
this.frozen.add(target);
}
}
}
public void sendFrozeMessage(Player p) {
p.sendMessage(
"" + ChatColor.GOLD + "████████████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD
+ "████████████████");
p.sendMessage("" + ChatColor.GOLD + "███████████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█"
+ ChatColor.DARK_RED + "█" + ChatColor.GOLD + "███████████████");
p.sendMessage("" + ChatColor.GOLD + "██████████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "███"
+ ChatColor.DARK_RED + "█" + ChatColor.GOLD + "██████████████");
p.sendMessage("" + ChatColor.GOLD + "█████████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████"
+ ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████████████");
p.sendMessage("" + ChatColor.GOLD + "████████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "███████"
+ ChatColor.DARK_RED + "█" + ChatColor.GOLD + "████████████");
p.sendMessage("" + ChatColor.GOLD + "███████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "████"
+ ChatColor.DARK_RED + "██" + ChatColor.GOLD + "███" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "███████████");
p.sendMessage("" + ChatColor.GOLD + "██████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "████"
+ ChatColor.DARK_RED
+ "████" + ChatColor.GOLD + "███" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "██████████");
p.sendMessage("" + ChatColor.GOLD + "█████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████"
+ ChatColor.DARK_RED
+ "████" + ChatColor.GOLD + "████" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "█████████");
p.sendMessage("" + ChatColor.GOLD + "████████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "██████"
+ ChatColor.DARK_RED
+ "████" + ChatColor.GOLD + "█████" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "████████");
p.sendMessage("" + ChatColor.GOLD + "███████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "███████"
+ ChatColor.DARK_RED
+ "████" + ChatColor.GOLD + "██████" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "███████");
p.sendMessage("" + ChatColor.GOLD + "██████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████████"
+ ChatColor.DARK_RED + "██" + ChatColor.GOLD + "████████" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "██████");
p.sendMessage(
"" + ChatColor.GOLD + "█████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████████████████████"
+ ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████");
p.sendMessage("" + ChatColor.GOLD + "████" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "███████████"
+ ChatColor.DARK_RED + "██" + ChatColor.GOLD + "██████████" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "████");
p.sendMessage("" + ChatColor.GOLD + "███" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "███████████"
+ ChatColor.DARK_RED
+ "████" + ChatColor.GOLD + "██████████" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "███");
p.sendMessage("" + ChatColor.GOLD + "██" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████████████"
+ ChatColor.DARK_RED + "██" + ChatColor.GOLD + "████████████" + ChatColor.DARK_RED
+ "█" + ChatColor.GOLD + "██");
p.sendMessage(
"" + ChatColor.GOLD + "█" + ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█████████████████████████████"
+ ChatColor.DARK_RED + "█" + ChatColor.GOLD + "█");
p.sendMessage("" + ChatColor.DARK_RED + "█████████████████████████████████");
}
public void cancelAndMessageFrozenPlayer(InventoryClickEvent event) {
if (!event.isCancelled()) {
Player p = (Player) event.getWhoClicked();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
}
public void cancelAndMessageFrozenPlayer(InventoryCloseEvent event) {
Player p = (Player) event.getPlayer();
if (isFrozen(p) != -1) {
Bukkit.getServer().getScheduler().runTask(this, new Runnable() {
@Override
public void run() {
p.openInventory(Staff.freezeInv);
}
});
sendFrozeMessage(p);
}
}
@EventHandler
public void frozePlayerEvent(PlayerArmorStandManipulateEvent event) {
cancelAndMessageFrozenPlayer(event);
}
@EventHandler
public void frozePlayerEvent(PlayerMoveEvent event) {
cancelAndMessageFrozenPlayer(event);
}
private void cancelAndMessageFrozenPlayer(PlayerMoveEvent event) {
Player p = event.getPlayer();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
private void cancelAndMessageFrozenPlayer(PlayerArmorStandManipulateEvent event) {
Player p = event.getPlayer();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
@EventHandler
public void frozePlayerEvent(PlayerDropItemEvent event) {
cancelAndMessageFrozenPlayer(event);
}
private void cancelAndMessageFrozenPlayer(PlayerDropItemEvent event) {
Player p = event.getPlayer();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
@EventHandler
public void frozePlayerEvent(PlayerPickupItemEvent event) {
cancelAndMessageFrozenPlayer(event);
}
private void cancelAndMessageFrozenPlayer(PlayerPickupItemEvent event) {
Player p = event.getPlayer();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
@EventHandler
public void frozePlayerEvent(PlayerPortalEvent event) {
cancelAndMessageFrozenPlayer(event);
}
private void cancelAndMessageFrozenPlayer(PlayerPortalEvent event) {
Player p = event.getPlayer();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
@EventHandler
public void frozePlayerEvent(InventoryDragEvent event) {
cancelAndMessageFrozenPlayer(event);
}
private void cancelAndMessageFrozenPlayer(InventoryDragEvent event) {
Player p = (Player) event.getWhoClicked();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
@EventHandler
public void frozePlayerEvent(InventoryCloseEvent event) {
cancelAndMessageFrozenPlayer(event);
}
@EventHandler
public void frozePlayerEvent(InventoryClickEvent event) {
cancelAndMessageFrozenPlayer(event);
}
@EventHandler
public void frozePlayerEvent(InventoryInteractEvent event) {
cancelAndMessageFrozenPlayer(event);
}
private void cancelAndMessageFrozenPlayer(InventoryInteractEvent event) {
Player p = (Player) event.getWhoClicked();
if (isFrozen(p) != -1) {
event.setCancelled(true);
sendFrozeMessage(p);
}
}
public List<Report> getReports() {
return this.reports;
}
public static String getPREFIX() {
return Staff.PREFIX;
public static String getSTAFF_PREFIX() {
return Staff.STAFF_PREFIX;
}
public static String getREPORT_PREFIX() {
return Staff.REPORT_PREFIX;
}
}
-11
View File
@@ -1,11 +0,0 @@
package fr.nessar;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.Dye;
public class StaffInv {
private static final ItemStack[] def = { new ItemStack(Material.COMPASS), new ItemStack(Material.BLAZE_ROD),
new ItemStack(Material.REDSTONE), new Dye(DyeColor.LIME).toItemStack() };
}
+226
View File
@@ -0,0 +1,226 @@
package fr.nessar;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.material.Dye;
public class StaffMod {
private Player who;
private Staff plugin;
private SaveInventory savedInv;
private ItemStack vanish;
private ItemStack freeze;
private ItemStack reportsOrStaff;
private ItemStack only_important_item;
private ItemStack statusListening;
private ItemStack freeInv;
private boolean vanished = false;
private boolean isSneaking = false;
private boolean only_important = false;
private boolean only_ticket = false;
private boolean only_report = false;
private boolean staffInv = true;
public StaffMod(Staff plugin, Player p) {
this.plugin = plugin;
this.who = p;
this.savedInv = new SaveInventory(p);
this.setItem();
p.sendMessage(Staff.getSTAFF_PREFIX() + "Vous êtes desormais en staff mod !");
}
public void toggleStatusListenting() {
if (!this.only_ticket && !this.only_report)
this.only_ticket = true;
else if (!this.only_report) {
this.only_report = true;
this.only_ticket = false;
} else {
this.only_report = false;
}
this.setItem();
}
public void toggleVanish() {
if (this.vanished) {
this.who.performCommand("v off");
this.vanished = false;
} else {
this.who.performCommand("v on");
this.vanished = true;
}
this.setItem();
}
public void toggleImportant() {
this.only_important = !this.only_important;
this.setItem();
}
public void toggleStaffInv() {
this.staffInv = !this.staffInv;
this.setItem();
}
public void toggleOrUseSlot(int slot) {
if (slot == 0) {
toggleVanish();
} else if (slot == 4) {
if (isSneaking) {
// Menu.open() TODO
} else {
// Menu.open() TODO
}
} else if (slot == 6) {
this.toggleImportant();
} else if (slot == 7) {
this.toggleStatusListenting();
} else if (slot == 8) {
this.toggleStaffInv();
}
}
public void toggleOrUseSlot(Material m) {
if (m.equals(Material.INK_SACK))
toggleVanish();
else if (m.equals(Material.PAPER)) {
// Menu.open() // TODO
} else if (m.equals(Material.SKULL)) {
// Menu.open() // TODO
} else if (m.equals(Material.REDSTONE) || m.equals(Material.SULPHUR))
toggleImportant();
else if (m.equals(Material.TORCH) || m.equals(Material.LEVER) || m.equals(Material.REDSTONE_TORCH_ON))
toggleStatusListenting();
else if (m.equals(Material.BLAZE_ROD) || m.equals(Material.STICK))
toggleStaffInv();
}
public boolean isLookingAtFrozePlayer() {
return false; // TODO
}
public static ItemStack setNameItem(String name, ItemStack item) {
ItemMeta itemM = item.getItemMeta();
itemM.setDisplayName(name);
item.setItemMeta(itemM);
return item;
}
public void updateItems() {
if (this.staffInv) {
if (this.vanished) {
this.vanish = StaffMod.setNameItem(
ChatColor.GOLD + "Vanish" + ChatColor.GRAY + ": " + ChatColor.GREEN + "On",
new Dye(DyeColor.LIME).toItemStack(1));
} else {
this.vanish = StaffMod.setNameItem(
ChatColor.GOLD + "Vanish" + ChatColor.GRAY + ": " + ChatColor.RED + "Off",
new Dye(DyeColor.GRAY).toItemStack(1));
}
if (this.isLookingAtFrozePlayer()) {
this.freeze = StaffMod.setNameItem(ChatColor.BLUE + "Freeze", new ItemStack(Material.ICE));
} else {
this.freeze = StaffMod.setNameItem(ChatColor.BLUE + "UnFreeze", new ItemStack(Material.PACKED_ICE));
}
if (isSneaking) {
this.reportsOrStaff = setNameItem(ChatColor.GOLD + "Staff list",
SetHerobrineHead(new ItemStack(Material.SKULL_ITEM, 1, (byte) 3)));
} else {
ReportStatus minimalStatus = ReportStatus.WAITING;
if (this.only_important) {
minimalStatus = ReportStatus.IMPORTANT;
}
int nbReport = this.plugin.getNbReport(minimalStatus, 0, this.getNbReportReportArg());
this.reportsOrStaff = StaffMod.setNameItem(this.getItemNamePaper(minimalStatus),
new ItemStack(Material.PAPER, nbReport));
}
if (this.only_important) {
this.only_important_item = setNameItem(ChatColor.GOLD + "Only Important",
new ItemStack(Material.REDSTONE));
} else {
this.only_important_item = setNameItem(ChatColor.GOLD + "Not Only Important",
new ItemStack(Material.SULPHUR));
}
if (!only_ticket && !only_report) {
this.statusListening = setNameItem(ChatColor.GOLD + "All waiting", new ItemStack(Material.TORCH));
} else if (only_ticket) {
this.statusListening = setNameItem(ChatColor.GOLD + "Only Ticket", new ItemStack(Material.LEVER));
} else {
this.statusListening = setNameItem(ChatColor.GOLD + "Only report",
new ItemStack(Material.REDSTONE_TORCH_ON));
}
this.freeInv = setNameItem(ChatColor.GOLD + "Staff Inv" + ChatColor.GRAY + ": " + ChatColor.GREEN + "On",
new ItemStack(Material.BLAZE_ROD));
} else {
this.freeInv = setNameItem(ChatColor.GOLD + "Staff Inv" + ChatColor.GRAY + ": " + ChatColor.RED + "Off",
new ItemStack(Material.STICK));
this.vanish = null;
this.freeze = null;
this.reportsOrStaff = null;
this.only_important_item = null;
this.statusListening = null;
}
}
public ItemStack SetHerobrineHead(ItemStack skull) {
SkullMeta itemM = (SkullMeta) Bukkit.getItemFactory().getItemMeta(Material.SKULL_ITEM);
itemM.setOwner("d0b15454-36fa-43e4-a247-f882bb9fe288");
skull.setItemMeta(itemM);
return skull;
}
public String getItemNamePaper(ReportStatus minimalStatus) {
String ret = ChatColor.GOLD + "" + ChatColor.BOLD;
if (this.only_report) {
ret += "Report list ";
} else if (this.only_ticket) {
ret += "Ticket list ";
} else {
ret += "Report & Ticket list ";
}
return ret += "(" + ChatColor.GRAY
+ String.valueOf(this.plugin.getNbReport(minimalStatus, 0, this.getNbReportReportArg())) + ")";
}
public void setItem() {
SaveInventory.clear(this.who);
this.updateItems();
ItemStack[] listItem = { this.vanish, this.freeze, null, null, this.reportsOrStaff, null,
this.only_important_item, this.statusListening, this.freeInv };
for (int i = 0; i < listItem.length; i++) {
if (listItem[i] != null) {
this.who.getInventory().setItem(i, listItem[i]);
} else if (this.staffInv) {
this.who.getInventory().setItem(i, new ItemStack(Material.AIR));
}
}
this.who.updateInventory();
}
public boolean isHim(Player p) {
return this.who.getUniqueId().equals(p.getUniqueId());
}
public Player getPlayer() {
return this.who;
}
public boolean isStaffInv() {
return this.staffInv;
}
public int getNbReportReportArg() {
return this.only_ticket ? 0 : this.only_report ? 1 : 2;
}
public void disableStaffMod() {
this.savedInv.loadInventory();
this.who.sendMessage(Staff.getSTAFF_PREFIX() + "Vous n'êtes plus en staff mod !");
}
}
+11 -1
View File
@@ -4,10 +4,20 @@ description: Staff plugin.
version: 1
api-version: 1.8.8
commands:
koth:
staff:
description: enable staff mod
permission: staff
usage: "Usage: /<command>"
freeze:
aliases: [block]
description: freeze the target
permission: staff.freeze
usage: "Usage: /<command> <target>"
unfreeze:
aliases: [defreeze, unblock, free]
description: freeze the target
permission: staff.unfreeze
usage: "Usage: /<command> <target>"
permissions:
staff: