Package com.flansmod.common.teams

Source Code of com.flansmod.common.teams.GametypeTDM

package com.flansmod.common.teams;

import java.util.ArrayList;
import java.util.List;

import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Vec3;

import com.flansmod.common.PlayerData;

public class GametypeTDM extends Gametype
{
  public boolean friendlyFire = false;
  public boolean autoBalance = true;
  public int scoreLimit = 25;
  public int newRoundTimer = 0;
  public int time;
  public int autoBalanceInterval = 1200;

  public GametypeTDM()
  {
    super("Team Deathmatch", "TDM", 2);
  }

  @Override
  public void roundStart()
  {
   
  }

  @Override
  public void roundEnd()
  {
   
  }

  @Override
  public void roundCleanup()
  {
   
  }
   
  @Override
  public void tick()
  {
    /*
    if(autoBalance && time % autoBalanceInterval == autoBalanceInterval - 200 && needAutobalance())
    {
      TeamsManager.messageAll("\u00a7fAutobalancing teams...");
    }
    if(autoBalance && time % autoBalanceInterval == 0 && needAutobalance())
    {
      autobalance();
    }
    */
  }
 
  public boolean needAutobalance()
  {
    /*
    if(teamsManager.currentRound == null || teamsManager.currentRound.teams[0] == null || teamsManager.currentRound.teams[1] == null)
      return false;
    int membersTeamA = teamsManager.currentRound.teams[0].members.size();
    int membersTeamB = teamsManager.currentRound.teams[1].members.size();
    if(Math.abs(membersTeamA - membersTeamB) > 1)
      return true;
      */
    return false;
  }
 
  public void autobalance()
  {
    /*
    if(teamsManager.currentRound.teams == null || teamsManager.currentRound.teams[0] == null || teamsManager.currentRound.teams[1] == null)
      return;
    int membersTeamA = teamsManager.currentRound.teams[0].members.size();
    int membersTeamB = teamsManager.currentRound.teams[1].members.size();
    if(membersTeamA - membersTeamB > 1)
    {
      for(int i = 0; i < (membersTeamA - membersTeamB) / 2; i++)
      {
        //My goodness this is convoluted...
        EntityPlayerMP player = getPlayer(teamsManager.currentRound.teams[1].addPlayer(teamsManager.currentRound.teams[0].removeWorstPlayer()));
        if(!player.isDead)
        {
          teamsManager.messagePlayer(player, "You have been moved to " + teamsManager.currentRound.teams[1].name);
          teamsManager.sendClassMenuToPlayer(player);
        }
      }
    }
    if(membersTeamB - membersTeamA > 1)
    {
      for(int i = 0; i < (membersTeamB - membersTeamA) / 2; i++)
      {
        EntityPlayerMP player = getPlayer(teamsManager.currentRound.teams[0].addPlayer(teamsManager.currentRound.teams[1].removeWorstPlayer()));
        if(!player.isDead)
        {
          teamsManager.messagePlayer(player, "You have been moved to " + teamsManager.currentRound.teams[0].name);
          teamsManager.sendClassMenuToPlayer(player);
        }
      }
    }
    */
  }

  @Override
  public void playerJoined(EntityPlayerMP player)
  {
  }
 
  @Override
  public void playerQuit(EntityPlayerMP player)
  {
  }

  @Override
  public boolean playerAttacked(EntityPlayerMP player, DamageSource source)
  {
    if(getPlayerData(player) == null || getPlayerData(player).team == null)
      return false;
    EntityPlayerMP attacker = getPlayerFromDamageSource(source);
    if(attacker != null)
    {
      if(getPlayerData(attacker) == null || getPlayerData(attacker).team == null)
        return false;
      //Check for friendly fire
      if(getPlayerData(player).team == getPlayerData(attacker).team)
        return friendlyFire;
    }
    //Players may not attack spectators
    if(getPlayerData(player).team == Team.spectators)
      return false;
    return true;
  }

  @Override
  public boolean playerCanAttack(EntityPlayerMP attacker, Team attackerTeam, EntityPlayerMP victim, Team victimTeam)
  {
    if(attackerTeam == victimTeam)
      return friendlyFire;
    return true;
  }
 
  @Override
  public void playerKilled(EntityPlayerMP player, DamageSource source)
  {
    EntityPlayerMP attacker = getPlayerFromDamageSource(source);
    if(attacker != null)
    {
      //They killed themself. -1 point.
      if(attacker == player)
        getPlayerData(player).score--;
      //They teamkilled. -1 point.
      else if(getPlayerData(attacker).team == getPlayerData(player).team)
      {
        getPlayerData(attacker).score--;
      }
      //They killed an enemy. +1 point to them and their team
      else
     
        givePoints(attacker, 1);
        getPlayerData(attacker).kills++;
      }
    }
    else
    {
      getPlayerData(player).score--;
    }
    getPlayerData(player).deaths++;
  }

  @Override
  public void baseAttacked(ITeamBase base, DamageSource source)
  {

  }

  @Override
  public void objectAttacked(ITeamObject object, DamageSource source)
  {

  }

  @Override
  public void baseClickedByPlayer(ITeamBase base, EntityPlayerMP player)
  {

  }

  @Override
  public void objectClickedByPlayer(ITeamObject object, EntityPlayerMP player)
  {

  }

  @Override
  public Vec3 getSpawnPoint(EntityPlayerMP player)
  {
    if(teamsManager.currentRound == null)
      return null;
    PlayerData data = getPlayerData(player);
    List<ITeamObject> validSpawnPoints = new ArrayList<ITeamObject>();
    if(data.newTeam == null)
      return null;
   
    ArrayList<ITeamBase> bases = teamsManager.currentRound.map.getBasesPerTeam(teamsManager.currentRound.getTeamID(data.newTeam));
    for(int j = 0; j < bases.size(); j++)
    {
      ITeamBase base = bases.get(j);
      if(base.getMap() != teamsManager.currentRound.map)
        continue;
      for(int i = 0; i < base.getObjects().size(); i++)
      {
        if(base.getObjects().get(i).isSpawnPoint())
          validSpawnPoints.add(base.getObjects().get(i));
      }
    }
   
    if(validSpawnPoints.size() > 0)
    {
      ITeamObject spawnPoint = validSpawnPoints.get(rand.nextInt(validSpawnPoints.size()));
      return Vec3.createVectorHelper(spawnPoint.getPosX(), spawnPoint.getPosY(), spawnPoint.getPosZ());
    }
   
    return null;
  }

  @Override
  public void playerRespawned(EntityPlayerMP player)
  {
   
  }

  @Override
  public boolean setVariable(String variable, String value)
  {
    if(variable.toLowerCase().equals("scorelimit"))
    {
      scoreLimit = Integer.parseInt(value);
      return true;
    }
    if(variable.toLowerCase().equals("friendlyfire"))
    {
      friendlyFire = Boolean.parseBoolean(value);
      return true;
    }
    if(variable.toLowerCase().equals("autobalance"))
    {
      autoBalance = Boolean.parseBoolean(value);
      return true;
    }
    return false;
  }

  @Override
  public void readFromNBT(NBTTagCompound tags)
  {
    scoreLimit = tags.getInteger("TDMScoreLimit");
    friendlyFire = tags.getBoolean("TDMFriendlyFire");
    autoBalance = tags.getBoolean("TDMAutoBalance");
  }

  @Override
  public void saveToNBT(NBTTagCompound tags)
  {
    tags.setInteger("TDMScoreLimit", scoreLimit);
    tags.setBoolean("TDMFriendlyFire", friendlyFire);
    tags.setBoolean("TDMAutoBalance", autoBalance);
  }
 
  @Override
  public boolean sortScoreboardByTeam()
  {
    return true;
  }

  @Override
  public boolean teamHasWon(Team team)
  {
    return teamsManager.currentRound != null && team.score == teamsManager.currentRound.scoreLimit;
  }
}
TOP

Related Classes of com.flansmod.common.teams.GametypeTDM

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.