package mods.eln.server;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent;
import mods.eln.misc.Utils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import java.util.Hashtable;
import java.util.Map;
import java.util.Map.Entry;
public class PlayerManager {
private Map<EntityPlayerMP, PlayerMetadata> metadataHash = new Hashtable<EntityPlayerMP, PlayerMetadata>();
public PlayerManager() {
FMLCommonHandler.instance().bus().register(this);
}
public class PlayerMetadata {
private int timeout;
public boolean interactEnable = false;
public boolean interactRise = false, interactRiseBuffer = false;
EntityPlayer player;
public PlayerMetadata(EntityPlayer p) {
timeoutReset();
this.player = p;
}
public boolean needDelete() {
return timeout == 0;
}
public void timeoutReset() {
timeout = 20 * 120;
}
public void timeoutDec() {
timeout--;
if (timeout < 0)
timeout = 0;
}
public void setInteractEnable(boolean interactEnable) {
if (!this.interactEnable && interactEnable) {
interactRiseBuffer = true;
Utils.println("interactRiseBuffer");
}
this.interactEnable = interactEnable;
timeoutReset();
Utils.println("interactEnable : " + interactEnable);
}
public boolean getInteractEnable() {
timeoutReset();
return interactEnable;
//return player.isSneaking();
}
/*public boolean getInteractRise() {
timeoutReset();
return interactRise;
}*/
}
public void clear() {
metadataHash.clear();
}
@SubscribeEvent
public void tick(ServerTickEvent event) {
if (event.phase != Phase.START) return;
for (Entry<EntityPlayerMP, PlayerMetadata> entry : metadataHash.entrySet()) {
PlayerMetadata p = entry.getValue();
p.interactRise = p.interactRiseBuffer;
p.interactRiseBuffer = false;
if (p.needDelete()) {
metadataHash.remove(entry.getKey());
}
}
}
public PlayerMetadata get(EntityPlayerMP player) {
PlayerMetadata metadata = metadataHash.get(player);
if (metadata != null)
return metadata;
metadataHash.put(player, new PlayerMetadata(player));
return metadataHash.get(player);
}
public PlayerMetadata get(EntityPlayer player) {
return get((EntityPlayerMP) player);
}
}