/******************************************************************************* * AbyssalCraft * Copyright (c) 2012 - 2017 Shinoow. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0.txt * * Contributors: * Shinoow - implementation ******************************************************************************/ package com.shinoow.abyssalcraft.common.network.server; import java.io.IOException; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumHand; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.relauncher.Side; import com.shinoow.abyssalcraft.api.AbyssalCraftAPI; import com.shinoow.abyssalcraft.api.entity.IAntiEntity; import com.shinoow.abyssalcraft.api.entity.ICoraliumEntity; import com.shinoow.abyssalcraft.api.entity.IDreadEntity; import com.shinoow.abyssalcraft.common.network.AbstractMessage.AbstractServerMessage; import com.shinoow.abyssalcraft.lib.ACLib; import com.shinoow.abyssalcraft.lib.util.items.IStaffOfRending; public class StaffOfRendingMessage extends AbstractServerMessage<StaffOfRendingMessage> { int id; EnumHand hand; public StaffOfRendingMessage(){} public StaffOfRendingMessage(int id, EnumHand hand){ this.id = id; this.hand = hand; } @Override protected void read(PacketBuffer buffer) throws IOException { id = ByteBufUtils.readVarInt(buffer, 4); hand = ByteBufUtils.readVarInt(buffer, 4) == 0 ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND; } @Override protected void write(PacketBuffer buffer) throws IOException { ByteBufUtils.writeVarInt(buffer, id, 4); ByteBufUtils.writeVarInt(buffer, hand == EnumHand.MAIN_HAND ? 0 : 1, 4); } @Override public void process(EntityPlayer player, Side side) { if(player.getHeldItem(hand) == null) return; ItemStack stack = player.getHeldItem(hand); Entity e = player.world.getEntityByID(id); if(e == null) return; if(stack.getItem() instanceof IStaffOfRending) if(e instanceof EntityLiving){ IStaffOfRending staff = (IStaffOfRending)stack.getItem(); EntityLiving target = (EntityLiving)e; if(target.getCreatureAttribute() == AbyssalCraftAPI.SHADOW && target.isNonBoss()){ if(!target.isDead) if(target.attackEntityFrom(DamageSource.causePlayerDamage(player), staff.getDrainAmount(stack))) staff.increaseEnergy(stack, "Shadow"); } else if(player.world.provider.getDimension() == ACLib.abyssal_wasteland_id && target instanceof ICoraliumEntity && target.isNonBoss()){ if(!target.isDead) if(target.attackEntityFrom(DamageSource.causePlayerDamage(player), staff.getDrainAmount(stack))) staff.increaseEnergy(stack, "Abyssal"); } else if(player.world.provider.getDimension() == ACLib.dreadlands_id && target instanceof IDreadEntity && target.isNonBoss()){ if(!target.isDead) if(target.attackEntityFrom(DamageSource.causePlayerDamage(player), staff.getDrainAmount(stack))) staff.increaseEnergy(stack, "Dread"); } else if(player.world.provider.getDimension() == ACLib.omothol_id && target instanceof ICoraliumEntity && target instanceof IDreadEntity && target instanceof IAntiEntity && target.getCreatureAttribute() != AbyssalCraftAPI.SHADOW && target.isNonBoss()) if(!target.isDead) if(target.attackEntityFrom(DamageSource.causePlayerDamage(player), staff.getDrainAmount(stack))) staff.increaseEnergy(stack, "Omothol"); } } }