package tv.mineinthebox.essentials.managers;
import java.io.File;
import java.util.HashMap;
import java.util.UUID;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.enums.LogType;
import tv.mineinthebox.essentials.instances.Gate;
public class GateManager {
private final HashMap<String, Gate> gates = new HashMap<String, Gate>();
private final xEssentials pl;
public GateManager(xEssentials pl) {
this.pl = pl;
}
public boolean contains(Gate gate) {
return gates.containsValue(gate);
}
public boolean isGateSign(Block block) {
return gates.containsKey(getSerialized(block));
}
public Gate getGateBySign(Block block) {
return gates.get(getSerialized(block));
}
public Gate[] getGates() {
Gate[] args = new Gate[gates.size()];
int i = 0;
for(Gate gate : gates.values()) {
args[i] = gate;
i++;
}
return args;
}
public void addGate(Gate gate) {
gates.put(gate.getId(), gate);
}
public void removeGate(Gate gate) {
gates.remove(gate.getId());
}
public boolean isGateFrameBlock(Block block) {
for(Gate gate : getGates()) {
for(Block blocka : gate.getFrameBlocks()) {
if(blocka.equals(block)) {
return true;
}
}
}
return false;
}
public boolean isGateFenceBlock(Block block) {
for(Gate gate : getGates()) {
for(Block blocka : gate.getInnerBlocks()) {
if(blocka.equals(block)) {
return true;
}
}
}
return false;
}
public Gate getGateFromFrameBlock(Block block) {
for(Gate gate : getGates()) {
for(Block blocka : gate.getFrameBlocks()) {
if(blocka.equals(block)) {
return gate;
}
}
}
return null;
}
private String getSerialized(Block block) {
UUID id = UUID.nameUUIDFromBytes((block.getWorld().getName()+":"+block.getX()+":"+block.getY()+":"+block.getZ()).getBytes());
return id.toString();
}
public void reloadGates() {
gates.clear();
File dir = new File(pl.getDataFolder() + File.separator + "misc" + File.separator + "gates");
if(dir.isDirectory()) {
File[] files = dir.listFiles();
for(File f : files) {
FileConfiguration con = YamlConfiguration.loadConfiguration(f);
Gate gate = new Gate(f, con, pl);
if(gate.getWorld() instanceof World) {
if(pl.getConfiguration().getDebugConfig().isEnabled()) {
xEssentials.log("gate " + gate.getId() + " has been registered at: (" + gate.getSignBlock().getWorld().getName() + " x:" + gate.getSignBlock().getX()+" y:" + gate.getSignBlock().getY() + " z:" + gate.getSignBlock().getZ()+")", LogType.DEBUG);
}
addGate(gate);
} else {
if(pl.getConfiguration().getDebugConfig().isEnabled()) {
xEssentials.log("unregistering gate " + gate.getId() + " world is not active.", LogType.DEBUG);
}
gate.remove();
}
}
}
}
}