diff --git a/src/main/java/org/ultramine/mods/basicprotect/PlayerAbilitiesEventHandler.java b/src/main/java/org/ultramine/mods/basicprotect/PlayerAbilitiesEventHandler.java new file mode 100644 index 0000000..c2c6209 --- /dev/null +++ b/src/main/java/org/ultramine/mods/basicprotect/PlayerAbilitiesEventHandler.java @@ -0,0 +1,101 @@ +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))); + } + } + } +} diff --git a/src/main/java/org/ultramine/mods/basicprotect/UMBasicProtect.java b/src/main/java/org/ultramine/mods/basicprotect/UMBasicProtect.java new file mode 100644 index 0000000..7dfbaf7 --- /dev/null +++ b/src/main/java/org/ultramine/mods/basicprotect/UMBasicProtect.java @@ -0,0 +1,15 @@ +package org.ultramine.mods.basicprotect; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.common.MinecraftForge; + +@Mod(modid = "UM-BasicProtect", name = "UM-BasicProtect", version = "@version@", acceptableRemoteVersions = "*") +public class UMBasicProtect +{ + @Mod.EventHandler + public void init(FMLInitializationEvent e) + { + MinecraftForge.EVENT_BUS.register(new PlayerAbilitiesEventHandler()); + } +} diff --git a/src/main/resources/assets/um-basicprotect/lang/en_US.lang b/src/main/resources/assets/um-basicprotect/lang/en_US.lang new file mode 100644 index 0000000..2e0f3dc --- /dev/null +++ b/src/main/resources/assets/um-basicprotect/lang/en_US.lang @@ -0,0 +1,6 @@ +ultramine.ability.blockbreak=You don't have permissions to break blocks +ultramine.ability.blockplace=You don't have permissions to place blocks +ultramine.ability.useitem=You don't have permissions to use items +ultramine.ability.useblock=You don't have permissions to use blocks +ultramine.ability.attack=You don't have permissions to damage entities +ultramine.ability.chat=You don't have permissions to chat diff --git a/src/main/resources/assets/um-basicprotect/lang/ru_RU.lang b/src/main/resources/assets/um-basicprotect/lang/ru_RU.lang new file mode 100644 index 0000000..9e24c55 --- /dev/null +++ b/src/main/resources/assets/um-basicprotect/lang/ru_RU.lang @@ -0,0 +1,6 @@ +ultramine.ability.blockbreak=У вас нет прав на разрушение блоков +ultramine.ability.blockplace=У вас нет прав на установку блоков +ultramine.ability.useitem=У вас нет прав на использование предметов +ultramine.ability.useblock=У вас нет прав на использование блоков +ultramine.ability.attack=У вас нет права наносить урон +ultramine.ability.chat=У вас нет прав писать в чате