diff options
Diffstat (limited to 'java/darkknight/jewelrycraft/events/EntityEventHandler.java')
| -rw-r--r-- | java/darkknight/jewelrycraft/events/EntityEventHandler.java | 150 |
1 files changed, 97 insertions, 53 deletions
diff --git a/java/darkknight/jewelrycraft/events/EntityEventHandler.java b/java/darkknight/jewelrycraft/events/EntityEventHandler.java index 4e32376..f9cbd19 100644 --- a/java/darkknight/jewelrycraft/events/EntityEventHandler.java +++ b/java/darkknight/jewelrycraft/events/EntityEventHandler.java @@ -1,5 +1,6 @@ package darkknight.jewelrycraft.events; +import ibxm.Player; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; @@ -8,18 +9,22 @@ import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Random; +import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChatComponentText; import net.minecraft.util.MathHelper; import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; @@ -27,6 +32,7 @@ import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; import net.minecraftforge.event.world.WorldEvent; import org.lwjgl.opengl.GL11; import cpw.mods.fml.common.FMLCommonHandler; @@ -34,15 +40,21 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import darkknight.jewelrycraft.JewelrycraftMod; +import darkknight.jewelrycraft.config.ConfigHandler; import darkknight.jewelrycraft.curses.Curse; import darkknight.jewelrycraft.damage.DamageSourceList; import darkknight.jewelrycraft.entities.EntityHalfHeart; import darkknight.jewelrycraft.entities.EntityHeart; import darkknight.jewelrycraft.item.ItemBaseJewelry; +import darkknight.jewelrycraft.item.ItemBracelet; import darkknight.jewelrycraft.item.ItemList; +import darkknight.jewelrycraft.lib.Reference; import darkknight.jewelrycraft.network.PacketClearColorCache; import darkknight.jewelrycraft.network.PacketRequestPlayerInfo; +import darkknight.jewelrycraft.network.PacketSendCurseStats; +import darkknight.jewelrycraft.network.PacketSendPlayerInfo; import darkknight.jewelrycraft.util.BlockUtils; +import darkknight.jewelrycraft.util.JewelryNBT; import darkknight.jewelrycraft.util.JewelrycraftUtil; import darkknight.jewelrycraft.util.PlayerUtils; @@ -73,6 +85,7 @@ public class EntityEventHandler JewelrycraftMod.fancyRender = render; for(Curse curse: Curse.getCurseList()) if (!persistTag.hasKey(curse.getName())) persistTag.setInteger(curse.getName(), 0); + persistTag.setBoolean("sendInfo", true); } } @@ -83,10 +96,36 @@ public class EntityEventHandler public void onEntityUpdate(LivingUpdateEvent event) { Entity entity = event.entity; + if (entity.getEntityData().getBoolean("stunned") && entity.getEntityData().getInteger("stunTime") > 0){ + entity.motionX *= 0D; + entity.motionZ *= 0D; + entity.motionY *= 0D; + entity.rotationPitch = entity.prevRotationPitch; + entity.rotationYaw = entity.prevRotationYaw; + entity.getEntityData().setInteger("stunTime", entity.getEntityData().getInteger("stunTime") - 1); + if (entity.getEntityData().getInteger("stunTime") == 0) entity.getEntityData().setBoolean("stunned", false); + entity.worldObj.spawnParticle("spell", entity.posX, entity.posY + entity.height, entity.posZ, 0.0D, 0.3D, 0.0D); + } if (entity instanceof EntityPlayer){ EntityPlayer player = (EntityPlayer)entity; NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); playerInfo.setBoolean("fancyRender", JewelrycraftMod.fancyRender); + if (playerInfo.getBoolean("stunned") && playerInfo.getInteger("stunTime") > 0){ + player.motionX *= 0D; + player.motionZ *= 0D; + player.motionY *= 0D; + player.rotationPitch = entity.prevRotationPitch; + player.rotationYaw = entity.prevRotationYaw; + playerInfo.setInteger("stunTime", playerInfo.getInteger("stunTime") - 1); + if (playerInfo.getInteger("stunTime") == 0) playerInfo.setBoolean("stunned", false); + player.worldObj.spawnParticle("spell", entity.posX, entity.posY + 0.5F, entity.posZ, 0.0D, 0.3D, 0.0D); + } + for(int i = 0; i < 18; i++) + if (playerInfo.hasKey("ext" + i)){ + NBTTagCompound nbt = (NBTTagCompound)playerInfo.getTag("ext" + i); + ItemStack item = ItemStack.loadItemStackFromNBT(nbt); + ((ItemBaseJewelry)item.getItem()).action(item, player); + } if (!player.worldObj.isRemote){ if (playerInfo.hasKey("reselectCurses") && !playerInfo.getBoolean("reselectCurses")){ playerInfo.setInteger("curseTime", playerInfo.getInteger("curseTime") - 10000); @@ -94,27 +133,24 @@ public class EntityEventHandler } if (playerInfo.hasKey("playerCursePointsChanged") && playerInfo.getBoolean("playerCursePointsChanged")){ int points = playerInfo.getInteger("cursePoints"); - for(int i = 0; i <= 5; i++) - if (points > i * 750) addCurse(player, playerInfo, ("curse" + i).toString()); + for(int i = 1; i <= JewelrycraftMod.MAX_CURSES; i++) + if (points > (i - 1) * 1750) addCurse(player, playerInfo, i); if (!playerInfo.hasKey("curseTime") || !playerInfo.hasKey("reselectCurses") || playerInfo.getBoolean("reselectCurses")){ playerInfo.setInteger("curseTime", 23000); playerInfo.setBoolean("reselectCurses", false); } JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } - for(int i = 0; i < 18; i++) - if (playerInfo.hasKey("ext" + i)){ - NBTTagCompound nbt = (NBTTagCompound)playerInfo.getTag("ext" + i); - ItemStack item = ItemStack.loadItemStackFromNBT(nbt); - ((ItemBaseJewelry)item.getItem()).action(item, player); - } if (playerInfo.getBoolean("playerCursePointsChanged")) playerInfo.setBoolean("playerCursePointsChanged", false); -// for(Curse curse: Curse.getCurseList()) -// if (playerInfo.getInteger(curse.getName()) > 0) curse.action(player.worldObj, player); + if (playerInfo.getBoolean("sendInfo")){ + JewelrycraftMod.netWrapper.sendToAll(new PacketSendCurseStats()); + playerInfo.setBoolean("sendInfo", false); + } + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0) curse.action(player.worldObj, player); } } } - /** * @param event @@ -126,6 +162,7 @@ public class EntityEventHandler if (entity instanceof EntityPlayer && !(event.source.getEntity() instanceof EntityPlayer)){ EntityPlayer player = (EntityPlayer)entity; NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); + if (event.source.getEntity() != null && event.source.getEntity().getEntityData().getBoolean("stunned")) event.setCanceled(true); if (!player.worldObj.isRemote) for(int i = 0; i < 18; i++) if (playerInfo.hasKey("ext" + i)){ NBTTagCompound nbt = (NBTTagCompound)playerInfo.getTag("ext" + i); @@ -134,9 +171,14 @@ public class EntityEventHandler event.setCanceled(true); break; } + if (playerInfo.getBoolean("negateDamage")){ + playerInfo.setBoolean("negateDamage", false); + event.setCanceled(true); + break; + } ((ItemBaseJewelry)item.getItem()).onPlayerAttacked(item, player, event.source, event.ammount); } - if (!player.worldObj.isRemote && player.getHealth() != player.prevHealth){ + if (player.getHealth() != player.prevHealth){ if (playerInfo.getFloat("WhiteHeart") > 0){ playerInfo.setFloat("WhiteHeart", 0f); JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); @@ -174,16 +216,28 @@ public class EntityEventHandler } } } + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0) curse.attackedAction(player.worldObj, player); }else if (event.source.getEntity() instanceof EntityPlayer){ EntityPlayer player = (EntityPlayer)event.source.getEntity(); NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); - if (!player.worldObj.isRemote) for(int i = 0; i < 18; i++) + for(int i = 0; i < 18; i++) if (playerInfo.hasKey("ext" + i)){ NBTTagCompound nbt = (NBTTagCompound)playerInfo.getTag("ext" + i); ItemStack item = ItemStack.loadItemStackFromNBT(nbt); - ((ItemBaseJewelry)item.getItem()).onEntityAttackedCacellable(item, player, entity, event.ammount); + if (((ItemBaseJewelry)item.getItem()).onEntityAttackedCacellable(item, player, entity, event.ammount)){ + event.setCanceled(true); + break; + } + if (playerInfo.getBoolean("weakDamage")){ + playerInfo.setBoolean("weakDamage", false); + event.setCanceled(true); + break; + } ((ItemBaseJewelry)item.getItem()).onEntityAttacked(item, player, entity, event.ammount); } + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0) curse.attackedByPlayerAction(entity.worldObj, player, entity); } } @@ -198,61 +252,46 @@ public class EntityEventHandler NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); if (playerInfo.hasKey("cursePoints") && playerInfo.getInteger("cursePoints") > 0){ int points = playerInfo.getInteger("cursePoints"); - for(int i = 0; i <= 5; i++) - if (points > i * 750) addCurse(player, playerInfo, ("curse" + i).toString()); + for(int i = 1; i <= JewelrycraftMod.MAX_CURSES; i++) + if (points > (i - 1) * 1750) addCurse(player, playerInfo, i); if (!playerInfo.hasKey("curseTime") || !playerInfo.hasKey("reselectCurses") || playerInfo.getBoolean("reselectCurses")){ playerInfo.setInteger("curseTime", 23000); playerInfo.setBoolean("reselectCurses", false); } } + playerInfo.setBoolean("sendInfo", true); + playerInfo.setFloat("BlueHeart", 0f); + playerInfo.setFloat("BlackHeart", 0f); + playerInfo.setFloat("WhiteHeart", 0f); + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0) curse.respawnAction(player.worldObj, player); } if (event.entity instanceof EntityPlayer && !(event.entity instanceof EntityPlayerMP)) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } - @SubscribeEvent - public void onPlayerFall(LivingFallEvent event) - { - Entity entity = event.entity; - if (entity instanceof EntityPlayer){ - EntityPlayer player = (EntityPlayer)entity; - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); - if (!player.worldObj.isRemote) for(int i = 0; i < 18; i++) - if (playerInfo.hasKey("ext" + i)){ - NBTTagCompound nbt = (NBTTagCompound)playerInfo.getTag("ext" + i); - ItemStack item = ItemStack.loadItemStackFromNBT(nbt); - if (((ItemBaseJewelry)item.getItem()).onPlayerFall(item, player)){ - event.setCanceled(true); - break; - } - } - } - } - /** * @param player * @param playerInfo * @param curse */ - public void addCurse(EntityPlayer player, NBTTagCompound playerInfo, String curse) + public void addCurse(EntityPlayer player, NBTTagCompound playerInfo, int curseNo) { - if ((!playerInfo.hasKey(curse) || playerInfo.getInteger(curse) == 0) && Curse.availableCurses.size() > 0){ + if (Curse.availableCurses.size() > 0 && curseNo > Curse.getCurseList().size() - Curse.availableCurses.size()){ int no = JewelrycraftUtil.rand.nextInt(Curse.availableCurses.size()); Curse cur = Curse.availableCurses.get(no); - int grade = 1 + player.worldObj.rand.nextInt(2); - playerInfo.setInteger(cur.getName(), grade); + playerInfo.setInteger(cur.getName(), 1); Curse.availableCurses.remove(cur); - playerInfo.setInteger(curse, grade); + playerInfo.setBoolean("sendInfo", true); } } - public static void addCurse(EntityPlayer player, NBTTagCompound playerInfo, String curseNo, int curseID) + public static void addCurse(EntityPlayer player, NBTTagCompound playerInfo, int curseID, int grade) { - if ((!playerInfo.hasKey(curseNo) || playerInfo.getInteger(curseNo) <= 0) && Curse.availableCurses.size() > 0){ - Curse cur = Curse.availableCurses.get(curseID); - int grade = 1 + player.worldObj.rand.nextInt(2); + Curse cur = Curse.getCurseList().get(curseID); + if (Curse.availableCurses.size() > 0 && Curse.availableCurses.contains(cur)){ playerInfo.setInteger(cur.getName(), grade); Curse.availableCurses.remove(cur); - playerInfo.setInteger(curseNo, grade); + playerInfo.setBoolean("sendInfo", true); } } @@ -267,7 +306,10 @@ public class EntityEventHandler entityitem.motionZ = 0; entityitem.motionY = 0.11000000298023224D; event.player.worldObj.spawnEntityInWorld(entityitem); - event.player.addChatComponentMessage(new ChatComponentText("<" + event.player.getDisplayName() + "> This is MY item! MINE! I will NEVER give it to you! Mine! Mine! MINE!")); + List players = MinecraftServer.getServer().getConfigurationManager().playerEntityList; + Iterator plrs = players.iterator(); + while (plrs.hasNext()) + ((EntityPlayerMP)plrs.next()).addChatComponentMessage(new ChatComponentText("<" + event.player.getDisplayName() + "> This is MY item! MINE! I will NEVER give it to you! Mine! Mine! MINE!")); event.setCanceled(true); } } @@ -310,22 +352,24 @@ public class EntityEventHandler } } } - if (!entity.worldObj.isRemote && entity instanceof EntityPlayer){ + if (entity instanceof EntityPlayer){ EntityPlayer player = (EntityPlayer)entity; NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); + playerInfo.setFloat("BlueHeart", 0f); + playerInfo.setFloat("BlackHeart", 0f); + playerInfo.setFloat("WhiteHeart", 0f); if (playerInfo.hasKey("reselectCurses") && playerInfo.getBoolean("reselectCurses")){ for(Curse l: Curse.getCurseList()){ if (playerInfo.getInteger(l.getName()) == 1){ playerInfo.setInteger(l.getName(), 0); - if(!Curse.availableCurses.contains(l)) Curse.availableCurses.add(l); + if (!Curse.availableCurses.contains(l)) Curse.availableCurses.add(l); }else if (playerInfo.getInteger(l.getName()) >= 2) playerInfo.setInteger(l.getName(), 1); } - for(int i = 0; i <= 5; i++) - if (playerInfo.hasKey(("curse" + i).toString())) - playerInfo.setInteger(("curse" + i).toString(), playerInfo.getInteger(("curse" + i).toString()) == 1 ? 0:1); - - JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + if (entity.worldObj.isRemote) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } + playerInfo.setBoolean("sendInfo", true); + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0) curse.deathAction(player.worldObj, player); } if (event.entity instanceof EntityPlayer && !(event.entity instanceof EntityPlayerMP)) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } |
