progress?

This commit is contained in:
LunarAkai 2024-03-20 16:52:25 +01:00
commit ce060a26bf
13 changed files with 758 additions and 57 deletions

View file

@ -2,6 +2,7 @@ package de.lunarakai.minecleaner;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.UUID;
import java.util.logging.Level;
@ -17,15 +18,18 @@ public class ArenaList {
private final MinecleanerPlugin plugin;
private File arenaFile;
private final HashMap<String, MinecleanerArena> arenas;
private final HashMap<UUID, MinecleanerArena> playersInArena;
private final HashMap<Location, MinecleanerArena> arenaBlocks;
private final HashMap<UUID, MinecleanerArena> arenaBlockDisplays;
public ArenaList(MinecleanerPlugin plugin) {
this.plugin = plugin;
this.arenas = new HashMap<>();
this.arenaFile = new File(plugin.getDataFolder(), ARENAS_FILENAME);
this.arenaBlocks = new HashMap<>();
this.playersInArena = new HashMap<>();
this.arenaBlockDisplays = new HashMap<>();
this.arenaFile = new File(plugin.getDataFolder(), ARENAS_FILENAME);
}
public void load() {
@ -47,7 +51,7 @@ public class ArenaList {
if(arenaSection != null) {
MinecleanerArena arena = new MinecleanerArena(plugin, arenaSection);
this.arenas.put(arena.getName(), arena);
setArenaBlocks(arena);
}
}
}
@ -68,11 +72,39 @@ public class ArenaList {
}
}
/*private void setArenaBlocks(MinecleanerArena arena) {
for(Location location : arena.getBlocks()) {
arenaBlocks
private void setArenaBlocks(MinecleanerArena arena) {
for(Location loc : arena.getBlocks()) {
arenaBlocks.put(loc.clone(), arena);
}
}*/
for(UUID id : arena.getBlockDisplays()) {
if(id != null) {
arenaBlockDisplays.put(id, arena);
}
}
}
public MinecleanerArena getArena(String name) {
return arenas.get(name);
}
public Collection<MinecleanerArena> getArenas() {
return arenas.values();
}
public void addArena(MinecleanerArena arena) {
this.arenas.put(arena.getName(), arena);
setArenaBlocks(arena);
save();
}
public boolean collidesWithArena(MinecleanerArena newArena) {
for(Location location : newArena.getBlocks()) {
if(arenaBlocks.get(location) != null) {
return true;
}
}
return false;
}
public void setArenaForPlayer(Player player, MinecleanerArena arena) {
if(arena != null) {
@ -89,6 +121,23 @@ public class ArenaList {
public MinecleanerArena getArenaAtBlock(Block block) {
return arenaBlocks.get(block.getLocation());
}
public void removeArena(MinecleanerArena arena) {
if(arena.hasPlayer()) {
plugin.getManager().leaveArena(arena.getCurrentPlayer(), true);
}
for(UUID id : arena.getBlockDisplays()) { // TODO
if(id != null) {
arenaBlockDisplays.remove(id);
}
}
for(Location block : arena.getBlocks()) { // TODO
arenaBlocks.remove(block);
}
arena.removeBlockDisplays(); // TODO
arenas.remove(arena.getName());
save();
}
}