Newer
Older
ultramine_BasicProtect / src / main / java / org / ultramine / mods / basicprotect / PlayerAbilitiesEventHandler.java
package org.ultramine.mods.basicprotect;

import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.BlockEvent;
import org.ultramine.core.permissions.Permissions;
import org.ultramine.core.service.InjectService;

public class PlayerAbilitiesEventHandler
{
	@InjectService private static Permissions perms;

	@SubscribeEvent(priority = EventPriority.HIGH)
	public void checkChatPermission(ServerChatEvent e)
	{
		if(e.player.playerNetServerHandler == null || e.player.getData() == null)
			return;
		if(!perms.has(e.player, "ability.player.chat"))
		{
			e.setCanceled(true);
			e.player.addChatMessage(new ChatComponentTranslation("ultramine.ability.chat").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
		}
	}

	@SideOnly(Side.SERVER)
	@SubscribeEvent(priority = EventPriority.HIGHEST)
	public void onBreakEvent(BlockEvent.BreakEvent e)
	{
		if(!e.getPlayer().isEntityPlayerMP() || ((EntityPlayerMP)e.getPlayer()).playerNetServerHandler == null)
			return;
		if(!perms.has(e.getPlayer(), "ability.player.blockbreak"))
		{
			e.setCanceled(true);
			e.getPlayer().addChatMessage(new ChatComponentTranslation("ultramine.ability.blockbreak").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
		}
	}

	@SideOnly(Side.SERVER)
	@SubscribeEvent(priority = EventPriority.HIGHEST)
	public void onPlaceEvent(BlockEvent.PlaceEvent e)
	{
		if(!e.player.isEntityPlayerMP() || ((EntityPlayerMP)e.player).playerNetServerHandler == null)
			return;
		if(!perms.has(e.player, "ability.player.blockplace"))
		{
			e.setCanceled(true);
			e.player.addChatMessage(new ChatComponentTranslation("ultramine.ability.blockplace").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
		}
	}

	@SideOnly(Side.SERVER)
	@SubscribeEvent(priority = EventPriority.HIGHEST)
	public void onPlayerInteractEvent(PlayerInteractEvent e)
	{
		if(!e.entityPlayer.isEntityPlayerMP() || ((EntityPlayerMP)e.entityPlayer).playerNetServerHandler == null)
			return;
		if(!perms.has(e.entityPlayer, "ability.player.useitem"))
		{
			e.useItem = Event.Result.DENY;
			if(e.entityPlayer.inventory.getCurrentItem() != null)
				e.entityPlayer.addChatMessage(new ChatComponentTranslation("ultramine.ability.useitem").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
		}
		if(!perms.has(e.entityPlayer, "ability.player.useblock"))
		{
			e.useBlock = Event.Result.DENY;
			e.entityPlayer.addChatMessage(new ChatComponentTranslation("ultramine.ability.useblock").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
		}

		if(e.useItem == Event.Result.DENY && e.useBlock == Event.Result.DENY)
			e.setCanceled(true);
	}

	@SideOnly(Side.SERVER)
	@SubscribeEvent(priority = EventPriority.HIGHEST)
	public void onLivingAttackEvent(LivingAttackEvent e)
	{
		Entity attacker = e.source.getEntity();
		if(attacker != null && attacker.isEntityPlayerMP())
		{
			EntityPlayerMP player = (EntityPlayerMP)attacker;
			if(player.playerNetServerHandler == null)
				return;
			if(!perms.has(player, "ability.player.attack"))
			{
				e.setCanceled(true);
				player.addChatMessage(new ChatComponentTranslation("ultramine.ability.attack").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
			}
		}
	}
}