blob: 542b71f71f9edb88e5b6190b91d4789d65bb37ad [file] [log] [blame] [raw]
package com.legacy.aether.common.player;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandClearInventory;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.stats.Achievement;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.CommandEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.player.AchievementEvent;
import net.minecraftforge.event.entity.player.PlayerEvent.BreakSpeed;
import net.minecraftforge.event.entity.player.PlayerEvent.Clone;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerChangedDimensionEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
import com.legacy.aether.common.Aether;
import com.legacy.aether.common.items.ItemsAether;
import com.legacy.aether.common.networking.AetherNetworkingManager;
import com.legacy.aether.common.networking.packets.PacketAchievement;
import com.legacy.aether.common.networking.packets.PacketPerkChanged;
import com.legacy.aether.common.player.capability.PlayerAetherProvider;
import com.legacy.aether.common.player.perks.AetherPerks;
import com.legacy.aether.common.player.perks.util.EnumAetherPerkType;
import com.legacy.aether.common.registry.achievements.AchievementsAether;
import com.legacy.aether.common.registry.objects.AetherAchievement;
public class PlayerAetherEvents
{
private static final ResourceLocation PLAYER_LOCATION = new ResourceLocation(Aether.modid, "aether_players");
@SubscribeEvent
@SuppressWarnings("deprecation")
public void PlayerConstructingEvent(AttachCapabilitiesEvent.Entity event)
{
if ((event.getEntity() instanceof EntityPlayer))
{
EntityPlayer player = (EntityPlayer) event.getEntity();
PlayerAetherProvider provider = new PlayerAetherProvider(new PlayerAether(player));
if (PlayerAether.get(player) == null)
{
event.addCapability(PLAYER_LOCATION, provider);
}
}
}
@SubscribeEvent
public void onPlayerCloned(Clone event)
{
PlayerAether original = PlayerAether.get(event.getOriginal());
PlayerAether newPlayer = PlayerAether.get(event.getEntityPlayer());
NBTTagCompound data = new NBTTagCompound();
if (original != null)
{
original.saveNBTData(data);
if (newPlayer != null)
{
newPlayer.timeInPortal = original.timeInPortal;
newPlayer.portalCooldown = original.portalCooldown;
newPlayer.loadNBTData(data);
}
}
}
@SubscribeEvent
public void onPlayerDeath(LivingDeathEvent event)
{
if ((event.getEntity() instanceof EntityPlayer))
{
PlayerAether playerAether = PlayerAether.get((EntityPlayer) event.getEntity());
if (playerAether != null)
{
playerAether.onPlayerDeath();
}
}
}
@SubscribeEvent
public void onPlayerRespawn(PlayerRespawnEvent event)
{
PlayerAether playerAether = PlayerAether.get(event.player);
if (playerAether != null)
{
playerAether.onPlayerRespawn();
}
}
@SubscribeEvent
public void onPlayerUpdate(LivingUpdateEvent event)
{
if ((event.getEntityLiving() instanceof EntityPlayer))
{
PlayerAether playerAether = PlayerAether.get((EntityPlayer) event.getEntityLiving());
if (playerAether != null)
{
playerAether.onUpdate();
}
}
}
@SubscribeEvent
public void onLivingAttack(LivingAttackEvent event)
{
if (event.getEntityLiving() instanceof EntityPlayer)
{
PlayerAether playerAether = PlayerAether.get((EntityPlayer) event.getEntityLiving());
if (playerAether != null)
{
event.setCanceled(playerAether.onPlayerAttacked(event.getSource()));
}
}
}
@SubscribeEvent
public void onChangedDimension(PlayerChangedDimensionEvent event)
{
PlayerAether playerAether = PlayerAether.get(event.player);
if (playerAether != null)
{
playerAether.onChangedDimension(event.toDim, event.fromDim);
}
}
@SubscribeEvent
public void onPlayerLogin(PlayerLoggedInEvent event)
{
EntityPlayer player = event.player;
PlayerAether playerAether = PlayerAether.get(player);
if (playerAether != null)
{
playerAether.accessories.markDirty();
boolean isDonator = AetherPerks.isDonator(player.getUniqueID());
playerAether.setDonator(isDonator);
AetherNetworkingManager.sendTo(new PacketPerkChanged(player.getEntityId(), EnumAetherPerkType.Information, isDonator), (EntityPlayerMP) player);
}
}
@SubscribeEvent
public void onLivingHurt(LivingHurtEvent event)
{
if (event.getEntityLiving() instanceof EntityPlayer)
{
PlayerAether playerAether = PlayerAether.get((EntityPlayer) event.getEntityLiving());
if (playerAether != null && playerAether.isWearingObsidianSet())
{
float original = event.getAmount();
event.setAmount(original / 2);
}
}
}
@SubscribeEvent
public void onPlayerStrVsBlock(BreakSpeed event)
{
PlayerAether playerAether = PlayerAether.get(event.getEntityPlayer());
if (playerAether != null)
{
event.setNewSpeed(playerAether.getCurrentPlayerStrVsBlock(event.getOriginalSpeed()));
}
}
@SubscribeEvent
public void onCommandSentEvent(CommandEvent event)
{
if (event.getCommand() instanceof CommandClearInventory)
{
if (event.getParameters().length <= 1)
{
EntityPlayerMP entityplayermp = null;
try
{
entityplayermp = event.getParameters().length == 0 ? CommandBase.getCommandSenderAsPlayer(event.getSender()) : CommandBase.getPlayer(FMLCommonHandler.instance().getMinecraftServerInstance(), event.getSender(), event.getParameters()[0]);
}
catch (Throwable var9)
{
return;
}
PlayerAether playerAether = PlayerAether.get(entityplayermp);
if (playerAether != null)
{
if (playerAether.accessories.getFieldCount() != 0)
{
playerAether.accessories.clear();
CommandBase.notifyCommandListener(entityplayermp, event.getCommand(), "Cleared the accessories of " + entityplayermp.getName(), new Object[] {});
}
}
}
}
}
@SubscribeEvent
public void onAchievementGet(AchievementEvent event)
{
Achievement achievement = event.getAchievement();
EntityPlayer player = event.getEntityPlayer();
if (!(achievement instanceof AetherAchievement))
{
return;
}
int achievementType = achievement == AchievementsAether.defeat_bronze ? 1 : achievement == AchievementsAether.defeat_silver ? 2 : 0;
if (!player.worldObj.isRemote && ((EntityPlayerMP)player).getStatFile().canUnlockAchievement(achievement) && !player.hasAchievement(achievement))
{
if (event.getAchievement() == AchievementsAether.enter_aether)
{
if (!player.inventory.addItemStackToInventory(new ItemStack(ItemsAether.lore_book)))
{
player.worldObj.spawnEntityInWorld(new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, new ItemStack(ItemsAether.lore_book)));
}
if (!player.inventory.addItemStackToInventory(new ItemStack(ItemsAether.golden_parachute)))
{
player.worldObj.spawnEntityInWorld(new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, new ItemStack(ItemsAether.golden_parachute)));
}
}
AetherNetworkingManager.sendTo(new PacketAchievement(achievementType), (EntityPlayerMP) player);
}
}
}