Skip to content
This repository was archived by the owner on Oct 2, 2024. It is now read-only.

Commit fce9c51

Browse files
KamicjuszvLuckyyy
andauthored
GH-40 crispi feedback (#40)
* fix item name/lore formating copy backup system from vLucky add perms to plugin.yml for LuckPerms add online status of friends add message to player which invitation was denied some messages changes * fix permissions fix ignored players loading fix invites loading from database some small fixes * Delete run/plugins directory --------- Co-authored-by: Martin Sulikowski <[email protected]>
1 parent 2de3925 commit fce9c51

20 files changed

+270
-57
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
.gradle/
77
out/
88
build/
9+
run/
910

1011
.DS_Store
1112
[Dd]esktop.ini

build.gradle.kts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
2+
import net.minecrell.pluginyml.bukkit.BukkitPluginDescription.Permission.Default;
23

34
plugins {
45
id("java")
@@ -63,6 +64,28 @@ bukkit {
6364
version = "${project.version}"
6465
depend = listOf("ProtocolLib")
6566
description = "EternalFriends is a plugin that allows you to manage your friends list."
67+
permissions {
68+
register("eternalfriends.access.all") {
69+
children = listOf(
70+
"eternalfriends.access.gui",
71+
"eternalfriends.access.accept",
72+
"eternalfriends.access.deny",
73+
"eternalfriends.access.help",
74+
"eternalfriends.access.ignore",
75+
"eternalfriends.access.invite",
76+
"eternalfriends.access.kick",
77+
"eternalfriends.access.list"
78+
)
79+
default = Default.OP
80+
}
81+
register("eternalfriends.admin.all") {
82+
children = listOf(
83+
"eternalfriends.admin.list",
84+
"eternalfriends.admin.reload"
85+
)
86+
default = Default.OP
87+
}
88+
}
6689
}
6790

6891
java {
-2.03 MB
Binary file not shown.

run/plugins/ProtocolLib (1).jar

-4.65 MB
Binary file not shown.

src/main/java/com/eternalcode/friends/EternalFriends.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.eternalcode.friends.command.implementation.FriendKickCommand;
1515
import com.eternalcode.friends.command.implementation.FriendListCommand;
1616
import com.eternalcode.friends.command.implementation.FriendReloadCommand;
17+
import com.eternalcode.friends.config.ConfigBackupService;
1718
import com.eternalcode.friends.config.ConfigManager;
1819
import com.eternalcode.friends.config.implementation.GuiConfig;
1920
import com.eternalcode.friends.config.implementation.MessagesConfig;
@@ -44,6 +45,7 @@
4445
import org.bukkit.command.CommandSender;
4546
import org.bukkit.entity.Player;
4647
import org.bukkit.plugin.java.JavaPlugin;
48+
import panda.std.stream.PandaStream;
4749

4850
import java.util.stream.Stream;
4951

@@ -65,6 +67,7 @@ public class EternalFriends extends JavaPlugin {
6567
private FriendDatabaseService friendDatabaseService;
6668
private IgnoredPlayerDatabaseService ignoredPlayerDatabaseService;
6769
private InviteDatabaseService inviteDatabaseService;
70+
private ConfigBackupService configBackupService;
6871

6972
private HikariDataSource databaseDataSource;
7073

@@ -73,8 +76,6 @@ public void onLoad() {
7376
this.protocolManager = ProtocolLibrary.getProtocolManager();
7477
}
7578

76-
//TODO sprawdzac czy gracze juz sa znajomymi
77-
//akceptowanie zaproszenia z gui nie usuwa glowki
7879
@Override
7980
public void onEnable() {
8081
Server server = this.getServer();
@@ -84,12 +85,16 @@ public void onEnable() {
8485

8586
this.announcer = new NotificationAnnouncer(this.audienceProvider, this.miniMessage);
8687

87-
this.configManager = new ConfigManager(this.getDataFolder());
88+
this.configBackupService = new ConfigBackupService(this.getDataFolder());
89+
90+
this.configManager = new ConfigManager(this.getDataFolder(), this.configBackupService);
8891

8992
this.config = new PluginConfig();
9093
this.messages = new MessagesConfig();
9194
this.guiConfig = new GuiConfig();
9295

96+
this.configBackupService.createBackup();
97+
9398
this.configManager.load(this.config);
9499
this.configManager.load(this.messages);
95100
this.configManager.load(this.guiConfig);
@@ -144,6 +149,8 @@ public void onEnable() {
144149

145150
@Override
146151
public void onDisable() {
147-
this.liteCommands.getPlatform().unregisterAll();
152+
if (this.liteCommands != null) {
153+
this.liteCommands.getPlatform().unregisterAll();
154+
}
148155
}
149156
}

src/main/java/com/eternalcode/friends/command/implementation/FriendCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public FriendCommand(MainGui mainGui) {
1616
}
1717

1818
@Execute(required = 0)
19-
@Permission("eternalfriends.access")
19+
@Permission("eternalfriends.access.gui")
2020
void main(Player player) {
2121
this.mainGui.openMainGui(player);
2222
}

src/main/java/com/eternalcode/friends/command/implementation/FriendDenyCommand.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ public void deny(Player sender, @Arg @Name("player") Player target) {
4141

4242
if (inviteManager.hasReceivedInvite(targetUuid, senderUuid)) {
4343
this.inviteManager.removeInvite(targetUuid, senderUuid);
44+
4445
this.announcer.announceMessage(senderUuid, friendsConfig.inviteDenied.replace("{player}", target.getName()));
46+
this.announcer.announceMessage(targetUuid, friendsConfig.yourInvitationHasBeenDenied.replace("{player}", sender.getName()));
4547

4648
return;
4749
}

src/main/java/com/eternalcode/friends/command/implementation/FriendInviteCommand.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public void invite(Player sender, @Arg @Name("player") Player target) {
4343
}
4444

4545
if (this.friendManager.isIgnoredByPlayer(senderUuid, targetUuid)) {
46+
this.announcer.announceMessage(senderUuid, friendsConfig.youreIgnored);
47+
4648
return;
4749
}
4850

src/main/java/com/eternalcode/friends/command/implementation/FriendListCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ private String listOfFriends(UUID uuid, boolean adminMode) {
6565
}
6666

6767
if (adminMode) {
68-
builder.append(friendsConfig.friendListHeaderAdmin);
68+
builder.append(friendsConfig.friendListHeaderAdmin.replace("{player}", server.getOfflinePlayer(uuid).getName()));
6969
}
7070
else {
7171
builder.append(friendsConfig.friendListHeader);
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package com.eternalcode.friends.config;
2+
3+
import panda.utilities.FileUtils;
4+
5+
import java.io.File;
6+
import java.io.IOException;
7+
import java.nio.file.Files;
8+
import java.nio.file.StandardCopyOption;
9+
import java.time.LocalDate;
10+
import java.time.LocalDateTime;
11+
import java.time.LocalTime;
12+
import java.time.format.DateTimeFormatter;
13+
import java.time.format.DateTimeParseException;
14+
import java.time.temporal.ChronoUnit;
15+
16+
public class ConfigBackupService {
17+
18+
private static final String BACKUP_FOLDER_NAME = "backup";
19+
private static final String BACKUP_FILE_EXTENSION = ".bak";
20+
private final File dataFolder;
21+
22+
public ConfigBackupService(File dataFolder) {
23+
this.dataFolder = dataFolder;
24+
}
25+
26+
public void createBackup() {
27+
File backupFolder = new File(this.dataFolder, BACKUP_FOLDER_NAME);
28+
29+
if (!backupFolder.exists()) {
30+
backupFolder.mkdirs();
31+
}
32+
33+
LocalDateTime currentDateTime = LocalDateTime.now();
34+
String backupFolderName = BACKUP_FOLDER_NAME + "_" + currentDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm"));
35+
File currentBackupFolder = new File(backupFolder, backupFolderName);
36+
if (!currentBackupFolder.exists()) {
37+
currentBackupFolder.mkdirs();
38+
}
39+
40+
this.copyFolderContents(this.dataFolder, currentBackupFolder);
41+
this.deleteIfOlderDirectory(backupFolder);
42+
}
43+
44+
private void copyFolderContents(File sourceFolder, File targetFolder) {
45+
if (!sourceFolder.exists() || !sourceFolder.isDirectory()) {
46+
return;
47+
}
48+
49+
if (!targetFolder.exists()) {
50+
boolean targetFolderCreated = targetFolder.mkdirs();
51+
52+
if (!targetFolderCreated) {
53+
return;
54+
}
55+
56+
}
57+
58+
File[] filesToBackup = sourceFolder.listFiles();
59+
if (filesToBackup == null) {
60+
return;
61+
}
62+
63+
for (File file : filesToBackup) {
64+
if (file.isDirectory() && !file.getName().equals(BACKUP_FOLDER_NAME)) {
65+
File subFolder = new File(targetFolder, file.getName());
66+
this.copyFolderContents(file, subFolder);
67+
68+
continue;
69+
}
70+
71+
if (file.isFile() && !file.getName().endsWith(BACKUP_FILE_EXTENSION)) {
72+
File backupFile = new File(targetFolder, file.getName() + BACKUP_FILE_EXTENSION);
73+
74+
this.copyToBackupFile(file, backupFile);
75+
}
76+
}
77+
}
78+
79+
private void copyToBackupFile(File targetFolder, File path) {
80+
try {
81+
Files.copy(targetFolder.toPath(), path.toPath(), StandardCopyOption.REPLACE_EXISTING);
82+
}
83+
catch (IOException exception) {
84+
exception.printStackTrace();
85+
}
86+
}
87+
88+
// delete backup folders older than 72h
89+
private void deleteIfOlderDirectory(File backupFolder) {
90+
File[] backupFolders = backupFolder.listFiles(File::isDirectory);
91+
92+
if (backupFolders == null) {
93+
return;
94+
}
95+
96+
for (File folder : backupFolders) {
97+
String folderName = folder.getName();
98+
if (!folderName.startsWith(BACKUP_FOLDER_NAME)) {
99+
continue;
100+
}
101+
102+
try {
103+
LocalDate folderDate = LocalDate.parse(folderName.substring(BACKUP_FOLDER_NAME.length() + 1, folderName.lastIndexOf("_")));
104+
LocalTime folderTime = LocalTime.parse(folderName.substring(folderName.lastIndexOf("_") + 1).replace("-", ":"));
105+
LocalDateTime folderDateTime = LocalDateTime.of(folderDate, folderTime);
106+
LocalDateTime currentDateTime = LocalDateTime.now();
107+
108+
long hours = ChronoUnit.HOURS.between(folderDateTime, currentDateTime);
109+
110+
if (hours > 72) {
111+
FileUtils.delete(folder);
112+
}
113+
}
114+
catch (DateTimeParseException exception) {
115+
exception.printStackTrace();
116+
}
117+
}
118+
}
119+
}

0 commit comments

Comments
 (0)