Files
TinkersConstruct/src/main/java/tconstruct/armor/TinkerArmorEvents.java
T
covers1624 b38cfee5ff Fix for #1552
The Server was not syncing the players TPlayerStats to the client until
the Armor tab was opened.
Added Packet.
Send Packet on EntityJoinEvent.

Format Derp.

Changed to Debug and added Knapsack slot output.
2015-05-01 23:33:08 +09:30

144 lines
5.5 KiB
Java

package tconstruct.armor;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import net.minecraft.entity.boss.*;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.monster.IMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent;
import tconstruct.TConstruct;
import tconstruct.armor.items.TravelWings;
import tconstruct.armor.player.ArmorExtended;
import tconstruct.armor.player.TPlayerStats;
import tconstruct.library.modifier.IModifyable;
import tconstruct.util.network.ArmourGuiSyncPacket;
import tconstruct.world.entity.BlueSlime;
public class TinkerArmorEvents
{
@SubscribeEvent
public void onLivingDrop (LivingDropsEvent event)
{
if (event.entityLiving == null)
return;
if(!event.entityLiving.worldObj.getGameRules().getGameRuleBooleanValue("doMobLoot"))
return;
if (TConstruct.random.nextInt(200) == 0 && event.entityLiving instanceof IMob && event.source.damageType.equals("player"))
{
ItemStack dropStack = new ItemStack(TinkerArmor.heartCanister, 1, 1);
EntityItem entityitem = new EntityItem(event.entityLiving.worldObj, event.entityLiving.posX, event.entityLiving.posY, event.entityLiving.posZ, dropStack);
entityitem.delayBeforeCanPickup = 10;
event.drops.add(entityitem);
}
if (event.entityLiving instanceof IBossDisplayData)
{
String entityName = event.entityLiving.getClass().getSimpleName().toLowerCase();
if (entityName.contains("entitynpc") || entityName.contains("entitycustomnpc"))
return;
int count = event.entityLiving instanceof EntityDragon ? 5 : 1;
for (int i = 0; i < count; i++)
{
ItemStack dropStack = new ItemStack(TinkerArmor.heartCanister, 1, 3);
EntityItem entityitem = new EntityItem(event.entityLiving.worldObj, event.entityLiving.posX, event.entityLiving.posY, event.entityLiving.posZ, dropStack);
entityitem.delayBeforeCanPickup = 10;
event.drops.add(entityitem);
}
}
}
/* Abilities */
@SubscribeEvent
public void armorMineSpeed (net.minecraftforge.event.entity.player.PlayerEvent.BreakSpeed event)
{
if(event.entityPlayer == null)
return;
ItemStack glove = TPlayerStats.get(event.entityPlayer).armor.getStackInSlot(1);
if(event.entityPlayer.worldObj.isRemote) // todo: sync extended inventory with clients so this stuff and rendering is done properly...
glove = ArmorProxyClient.armorExtended.getStackInSlot(1);
if(glove == null || !glove.hasTagCompound())
return;
// ok, we got a glove. bonus mining speeeeed
NBTTagCompound tags = glove.getTagCompound().getCompoundTag(TinkerArmor.travelGlove.getBaseTagName());
float mineSpeed = tags.getInteger("MiningSpeed");
float modifier = 1f + mineSpeed / 1000f;
float base = mineSpeed / 250f;
event.newSpeed = (event.originalSpeed + base) * modifier;
}
@SubscribeEvent
public void jumpHeight (LivingJumpEvent event)
{
ItemStack stack = event.entityLiving.getEquipmentInSlot(2);
if (stack != null && stack.getItem() instanceof TravelWings)
{
event.entityLiving.motionY += 0.2;
}
}
@SubscribeEvent
public void slimefall (LivingFallEvent event)
{
ItemStack boots = event.entityLiving.getEquipmentInSlot(1);
if (boots != null && boots.getItem() instanceof IModifyable)
{
NBTTagCompound tag = boots.getTagCompound().getCompoundTag(((IModifyable) boots.getItem()).getBaseTagName());
int sole = tag.getInteger("Slimy Soles");
if (sole > 0)
{
event.distance /= (1 + sole);
event.entityLiving.fallDistance /= (1 + sole);
}
}
}
@SubscribeEvent
public void perfectDodge(LivingAttackEvent event)
{
if(!event.source.isProjectile())
return;
// perfect dodge?
if(!(event.entityLiving instanceof EntityPlayer))
return;
EntityPlayer player = (EntityPlayer) event.entityLiving;
ItemStack chest = player.getCurrentArmor(2);
if(chest == null || !(chest.getItem() instanceof IModifyable) || !chest.hasTagCompound())
return;
NBTTagCompound tags = chest.getTagCompound().getCompoundTag(((IModifyable) chest.getItem()).getBaseTagName());
int dodge = tags.getInteger("Perfect Dodge");
if(dodge > TConstruct.random.nextInt(10))
event.setCanceled(true);
}
@SubscribeEvent
public void joinWorld(EntityJoinWorldEvent event)
{
if (event.entity instanceof EntityPlayerMP)
{
EntityPlayerMP player = (EntityPlayerMP)event.entity;
TPlayerStats stats = TPlayerStats.get(player);
NBTTagCompound tag = new NBTTagCompound();
stats.saveNBTData(tag);
ArmourGuiSyncPacket syncPacket = new ArmourGuiSyncPacket(tag);
TConstruct.packetPipeline.sendTo(syncPacket, player);
}
}
}