Package com.flansmod.common

Source Code of com.flansmod.common.PlayerHandler

package com.flansmod.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedOutEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
import cpw.mods.fml.relauncher.Side;

import com.flansmod.common.driveables.EntityDriveable;
import com.flansmod.common.driveables.EntitySeat;
import com.flansmod.common.teams.TeamsManager;

public class PlayerHandler
{
  public static Map<String, PlayerData> serverSideData = new HashMap<String, PlayerData>();
  public static Map<String, PlayerData> clientSideData = new HashMap<String, PlayerData>();
  public static ArrayList<String> clientsToRemoveAfterThisRound = new ArrayList<String>();
 
  public PlayerHandler()
  {
    MinecraftForge.EVENT_BUS.register(this);
    FMLCommonHandler.instance().bus().register(this);
  }

  @SubscribeEvent
  public void onEntityHurt(LivingHurtEvent event)
  {
    EntityLivingBase entity = event.entityLiving;
    if(event instanceof LivingHurtEvent && (entity.ridingEntity instanceof EntityDriveable || entity.ridingEntity instanceof EntitySeat))
    {
      event.ammount = 0;
    }
  }
 
  @SubscribeEvent
  public void onEntityKilled(LivingDeathEvent event)
  {
    EntityLivingBase entity = event.entityLiving;
    if(entity instanceof EntityPlayer)
    {
      getPlayerData((EntityPlayer)entity).playerKilled();
    }
  }
   
  public void serverTick()
  {
    for(WorldServer world : MinecraftServer.getServer().worldServers)
    {
      for(Object player : world.playerEntities)
      {
        getPlayerData((EntityPlayer)player).tick((EntityPlayer)player);
      }
    }
  }
 
  public void clientTick()
  {
    if(Minecraft.getMinecraft().theWorld != null)
    {
      for(Object player : Minecraft.getMinecraft().theWorld.playerEntities)
      {
        getPlayerData((EntityPlayer)player).tick((EntityPlayer)player);
     
    }
  }
 
  public static PlayerData getPlayerData(EntityPlayer player)
  {
    if(player == null)
      return null;
    return getPlayerData(player.getCommandSenderName(), player.worldObj.isRemote ? Side.CLIENT : Side.SERVER);
  }
 
  public static PlayerData getPlayerData(String username)
  {
    return getPlayerData(username, Side.SERVER);
  }

  public static PlayerData getPlayerData(EntityPlayer player, Side side)
  {
    if(player == null)
      return null;
    return getPlayerData(player.getCommandSenderName(), side);
  }
 
  public static PlayerData getPlayerData(String username, Side side)
  {
    if(side.isClient())
    {
      if(!clientSideData.containsKey(username))
        clientSideData.put(username, new PlayerData(username));
    }
    else
    {
      if(!serverSideData.containsKey(username))
        serverSideData.put(username, new PlayerData(username));
    }
    return side.isClient() ? clientSideData.get(username) : serverSideData.get(username);
  }

  @SubscribeEvent
  public void onPlayerEvent(PlayerEvent event)
  {
    if(event instanceof PlayerLoggedInEvent)
    {
      EntityPlayer player = event.player;
      String username = player.getCommandSenderName();
      if(!serverSideData.containsKey(username))
        serverSideData.put(username, new PlayerData(username));
      if(clientsToRemoveAfterThisRound.contains(username))
        clientsToRemoveAfterThisRound.remove(username);
    }
    else if(event instanceof PlayerLoggedOutEvent)
    {
      EntityPlayer player = event.player;
      String username = player.getCommandSenderName();
      if(TeamsManager.getInstance().currentRound == null)
        serverSideData.remove(username);
      else clientsToRemoveAfterThisRound.add(username);
    }
    else if(event instanceof PlayerRespawnEvent)
    {
      EntityPlayer player = event.player;
      String username = player.getCommandSenderName();
      if(!serverSideData.containsKey(username))
        serverSideData.put(username, new PlayerData(username));
    }
  }
 
  /** Called by teams manager to remove lingering player data */
  public static void roundEnded()
  {
    for(String username : clientsToRemoveAfterThisRound)
    {
      serverSideData.remove(username);
    }
  }
}
TOP

Related Classes of com.flansmod.common.PlayerHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.