package choonster.testmod3.client.event;
import choonster.testmod3.TestMod3;
import choonster.testmod3.item.ItemModBow;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.scoreboard.ScorePlayerTeam;
import net.minecraft.scoreboard.Scoreboard;
import net.minecraft.scoreboard.Team;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.FOVUpdateEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.relauncher.Side;
@Mod.EventBusSubscriber(Side.CLIENT)
public class ClientEventHandler {
private static final Minecraft MINECRAFT = Minecraft.getMinecraft();
@SubscribeEvent
public static void onFOVUpdate(FOVUpdateEvent event) {
if (event.getEntity().isHandActive() && event.getEntity().getActiveItemStack().getItem() instanceof ItemModBow) {
float fovModifier = event.getEntity().getItemInUseMaxCount() / 20.0f;
if (fovModifier > 1.0f) {
fovModifier = 1.0f;
} else {
fovModifier *= fovModifier;
}
event.setNewfov(event.getFov() * (1.0f - fovModifier * 0.15f));
}
}
/**
* Rotate the player every tick while they're standing on a Block of Iron.
* <p>
* Test for this thread:
* http://www.minecraftforge.net/forum/index.php/topic,36093.0.html
*
* @param event The event
*/
@SubscribeEvent
public static void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END && MINECRAFT.player != null) {
final EntityPlayer player = MINECRAFT.player;
if (MINECRAFT.world.getBlockState(new BlockPos(player).down()).getBlock() == Blocks.IRON_BLOCK) {
player.turn(5, 0);
}
}
}
/**
* When an {@link EntityMinecart} is spawned on the client side, add it to a {@link Team} and make it glow.
* <p>
* Test for this thread:
* http://www.minecraftforge.net/forum/topic/50836-adding-an-entity-other-than-a-player-to-a-team/
*
* @param event The event
*/
@SubscribeEvent
public static void entityJoinWorld(EntityJoinWorldEvent event) {
final World world = event.getWorld();
final Entity entity = event.getEntity();
if (world.isRemote && entity instanceof EntityMinecart) {
final Scoreboard scoreboard = world.getScoreboard();
if (scoreboard.getTeam(TestMod3.MODID) == null) {
final ScorePlayerTeam team = scoreboard.createTeam(TestMod3.MODID);
team.setPrefix(TextFormatting.DARK_AQUA.toString());
team.setColor(TextFormatting.DARK_AQUA);
}
scoreboard.addPlayerToTeam(entity.getCachedUniqueIdString(), TestMod3.MODID);
entity.setGlowing(true);
}
}
}