尝试添加purge功能

This commit is contained in:
ZhangYuheng 2024-10-08 17:26:56 +08:00
parent 710d2679a6
commit e5e2d065a4
6 changed files with 111 additions and 1 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId>
<artifactId>ColorfulMap</artifactId>
<version>2.5</version>
<version>2.6</version>
<packaging>jar</packaging>
<name>ColorfulMap</name>

View File

@ -1,5 +1,6 @@
package cn.lunadeer.colorfulmap;
import cn.lunadeer.colorfulmap.commands.Purge;
import cn.lunadeer.colorfulmap.commands.Reload;
import cn.lunadeer.colorfulmap.commands.ToMap;
import cn.lunadeer.colorfulmap.utils.*;
@ -22,6 +23,7 @@ public final class ColorfulMap extends JavaPlugin {
Objects.requireNonNull(Bukkit.getPluginCommand("tomap")).setExecutor(new ToMap());
Objects.requireNonNull(Bukkit.getPluginCommand("reloadColorfulMap")).setExecutor(new Reload());
Objects.requireNonNull(Bukkit.getPluginCommand("purgeColorfulMap")).setExecutor(new Purge());
Bukkit.getPluginManager().registerEvents(new Events(), this);

View File

@ -122,6 +122,27 @@ public class MapManager implements Listener {
return savedImages.get(world_name.getName()).get(id);
}
public List<Integer> getMapIds(World world) {
if (!savedImages.containsKey(world.getName())) {
return new ArrayList<>();
}
return new ArrayList<>(savedImages.get(world.getName()).keySet());
}
public void removeMap(World world, Integer id) {
if (!savedImages.containsKey(world.getName())) {
return;
}
FileConfiguration config = dataFile.getConfig();
String path = config.getString(world.getName() + "." + id);
if (path == null) {
return;
}
new File(path).delete();
config.set(world.getName() + "." + id, null);
dataFile.saveConfig();
savedImages.get(world.getName()).remove(id);
}
static class MapsFile {

View File

@ -110,4 +110,35 @@ public class StorageMaps {
return null;
}
}
public static void purgeStorageFolder() {
File[] map_folders = new File(data_folder, "maps").listFiles();
if (map_folders == null) {
return;
}
for (File map_folder : map_folders) {
if (!map_folder.isDirectory()) {
continue;
}
File[] files = map_folder.listFiles();
if (files == null) {
return;
}
if (files.length == 0) {
map_folder.delete();
continue;
}
if (files.length == 3) {
for (File file : files) {
if (!file.getName().equals("meta.txt") && !file.getName().equals("raw.png") && !file.getName().equals("thumb.png")) {
return;
}
}
for (File file : files) {
file.delete();
}
map_folder.delete();
}
}
}
}

View File

@ -0,0 +1,49 @@
package cn.lunadeer.colorfulmap.commands;
import cn.lunadeer.colorfulmap.ColorfulMap;
import cn.lunadeer.colorfulmap.MapManager;
import cn.lunadeer.colorfulmap.StorageMaps;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Item;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
import org.bukkit.map.MapView;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class Purge implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
ColorfulMap.instance.getServer().getWorlds().forEach(world -> {
List<Integer> worldMapIds = new ArrayList<>();
world.getEntities().forEach(entity -> {
if (!(entity instanceof org.bukkit.entity.ItemFrame)) {
return;
}
ItemFrame itemFrame = (ItemFrame) entity;
if (!itemFrame.getItem().getType().equals(org.bukkit.Material.FILLED_MAP)) {
return;
}
ItemStack item = itemFrame.getItem();
MapView mapView = ((org.bukkit.inventory.meta.MapMeta) item.getItemMeta()).getMapView();
if (mapView == null) {
return;
}
worldMapIds.add(mapView.getId());
});
List<Integer> currentIds = MapManager.instance.getMapIds(world);
for (Integer id : currentIds) {
if (!worldMapIds.contains(id)) {
MapManager.instance.removeMap(world, id);
}
}
});
StorageMaps.purgeStorageFolder();
MapManager.instance.reloadImages();
return true;
}
}

View File

@ -13,6 +13,10 @@ commands:
description: 重载ColorfulMap配置
usage: /reloadColorfulMap
permission: colorfulmap.reload
purgeColorfulMap:
description: 清除无效的地图画
usage: /purgeColorfulMap
permission: colorfulmap.purge
permissions:
colorfulmap.tomap:
description: 允许使用/tomap命令
@ -20,3 +24,6 @@ permissions:
colorfulmap.reload:
description: 允许使用/reloadColorfulMap命令
default: op
colorfulmap.purge:
description: 允许使用/purgeColorfulMap命令
default: op