package joshie.progression.player;
import com.google.common.collect.Maps;
import joshie.progression.Progression;
import joshie.progression.helpers.PlayerHelper;
import joshie.progression.player.PlayerSavedData.TeamAction;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.event.world.BlockEvent.PlaceEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.HashMap;
import java.util.HashSet;
import java.util.UUID;
public class PlayerTracker {
private static final HashMap<TileEntity, UUID> owners = Maps.newHashMap();
private static final HashSet<TileEntity> loaded = new HashSet();
@SideOnly(Side.CLIENT)
public static PlayerDataClient getClientPlayer() {
return PlayerDataClient.getInstance();
}
public static PlayerDataServer getServerPlayer(EntityPlayer player) {
return getServerPlayer(PlayerHelper.getUUIDForPlayer(player));
}
public static boolean reset(String username) {
return Progression.data.reset(username);
}
public static PlayerDataServer getServerPlayer(UUID uuid) {
return Progression.data.getServerPlayer(uuid);
}
public static void joinTeam(EntityPlayer player, TeamAction action, UUID team, String name) {
Progression.data.joinTeam(player, action, team, name);
}
public static PlayerDataCommon getPlayerData(UUID uuid, boolean isClient) {
return isClient ? getClientPlayer() : getServerPlayer(uuid);
}
public static PlayerDataCommon getPlayerData(EntityPlayer player) {
return getPlayerData(PlayerHelper.getUUIDForPlayer(player), player.worldObj.isRemote);
}
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onBlockPlaced(PlaceEvent event) {
TileEntity tile = event.getWorld().getTileEntity(event.getPos());
if (event.getPlayer() != null && tile != null) {
setTileOwner(tile, PlayerHelper.getUUIDForPlayer(event.getPlayer()));
}
}
public static UUID getTileOwner(TileEntity tile) {
UUID uuid = owners.get(tile);
if (uuid == null && !loaded.contains(tile)) {
//Attempt to load it from the tile
if (tile.getTileData().hasKey("Progression")) {
String id = tile.getTileData().getCompoundTag("Progression").getString("Owner");
uuid = UUID.fromString(id);
if (uuid != null) {
owners.put(tile, uuid);
}
}
loaded.add(tile);
}
return uuid;
}
public static void setTileOwner(TileEntity tile, UUID owner) {
owners.put(tile, owner);
NBTTagCompound tag = new NBTTagCompound();
tag.setString("Owner", owner.toString());
tile.getTileData().setTag("Progression", tag);
tile.markDirty();
}
}