diff options
Diffstat (limited to 'java/darkknight/jewelrycraft/events/EntityEventHandler.java')
| -rw-r--r-- | java/darkknight/jewelrycraft/events/EntityEventHandler.java | 387 |
1 files changed, 280 insertions, 107 deletions
diff --git a/java/darkknight/jewelrycraft/events/EntityEventHandler.java b/java/darkknight/jewelrycraft/events/EntityEventHandler.java index 7229318..9231ada 100644 --- a/java/darkknight/jewelrycraft/events/EntityEventHandler.java +++ b/java/darkknight/jewelrycraft/events/EntityEventHandler.java @@ -5,27 +5,40 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; - +import java.util.Iterator; +import java.util.List; +import java.util.Random; 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.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.MathHelper; import net.minecraftforge.client.event.EntityViewRenderEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.item.ItemTossEvent; +import net.minecraftforge.event.entity.living.LivingAttackEvent; 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.world.WorldEvent; - import org.lwjgl.opengl.GL11; - import cpw.mods.fml.common.FMLCommonHandler; 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.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.ItemList; import darkknight.jewelrycraft.network.PacketClearColorCache; import darkknight.jewelrycraft.network.PacketRequestPlayerInfo; @@ -36,185 +49,342 @@ import darkknight.jewelrycraft.util.PlayerUtils; /** * Code taken from OpenBlocks */ - public class EntityEventHandler { - + /** + * @param event + */ @SubscribeEvent public void onEntityJoinWorld(EntityJoinWorldEvent event) { - if (event.entity instanceof EntityPlayerMP) JewelrycraftMod.netWrapper.sendTo(new PacketClearColorCache(), (EntityPlayerMP) event.entity); - + if (event.entity instanceof EntityPlayerMP) JewelrycraftMod.netWrapper.sendTo(new PacketClearColorCache(), (EntityPlayerMP)event.entity); + if (event.entity instanceof EntityPlayer && !(event.entity instanceof EntityPlayerMP)) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); final Entity entity = event.entity; - - if (!event.world.isRemote && entity instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) entity; + if (!event.world.isRemote && entity instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)entity; NBTTagCompound persistTag = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); - boolean shouldGiveManual = ItemList.guide != null && !persistTag.getBoolean("givenGuide"); - if (shouldGiveManual) - { + if (shouldGiveManual){ ItemStack manual = new ItemStack(ItemList.guide); if (!player.inventory.addItemStackToInventory(manual)) BlockUtils.dropItemStackInWorld(player.worldObj, player.posX, player.posY, player.posZ, manual); persistTag.setBoolean("givenGuide", true); } - boolean render = persistTag.getBoolean("fancyRender"); JewelrycraftMod.fancyRender = render; + for(Curse curse: Curse.getCurseList()) + if (!persistTag.hasKey(curse.getName())) persistTag.setInteger(curse.getName(), 0); } - JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } + /** + * @param event + */ @SubscribeEvent public void onEntityUpdate(LivingUpdateEvent event) { - final Entity entity = event.entity; - if (entity instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) entity; + Entity entity = event.entity; + if (entity instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)entity; NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); playerInfo.setBoolean("fancyRender", JewelrycraftMod.fancyRender); - if (!player.worldObj.isRemote) - { -// System.out.println(playerInfo.getInteger("curseTime") + " " + playerInfo.getBoolean("reselectCurses")); - if (playerInfo.hasKey("reselectCurses") && !playerInfo.getBoolean("reselectCurses")) - { - playerInfo.setInteger("curseTime", playerInfo.getInteger("curseTime") - 100); + if (!player.worldObj.isRemote){ + if (playerInfo.hasKey("reselectCurses") && !playerInfo.getBoolean("reselectCurses")){ + playerInfo.setInteger("curseTime", playerInfo.getInteger("curseTime") - 10000); if (playerInfo.getInteger("curseTime") <= 0) playerInfo.setBoolean("reselectCurses", true); } + 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()); + 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); + } + } + } + + /** + * @param event + */ + @SubscribeEvent + public void onEntityAttacked(LivingAttackEvent event) + { + Entity entity = event.entityLiving; + if (entity instanceof EntityPlayer && !(event.source.getEntity() 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()).onPlayerAttackedCacellable(item, player, event.source, event.ammount)){ + event.setCanceled(true); + break; + } + ((ItemBaseJewelry)item.getItem()).onPlayerAttacked(item, player, event.source, event.ammount); + } + if (!player.worldObj.isRemote && player.getHealth() != player.prevHealth){ + if (playerInfo.getFloat("WhiteHeart") > 0){ + playerInfo.setFloat("WhiteHeart", 0f); + JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + } + if (playerInfo.getFloat("BlueHeart") > 0){ + float damage = playerInfo.getFloat("BlueHeart") - event.ammount; + if (damage >= 0){ + playerInfo.setFloat("BlueHeart", damage); + JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + player.heal(event.ammount); + }else{ + playerInfo.setFloat("BlueHeart", 0f); + JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + player.heal(Math.abs(damage)); + } + }else if (playerInfo.getFloat("BlackHeart") > 0){ + AxisAlignedBB axisalignedbb = player.boundingBox.expand(2.0D, 0.0D, 2.0D); + List enemies = player.worldObj.getEntitiesWithinAABBExcludingEntity(player, axisalignedbb); + if (enemies != null && !enemies.isEmpty()){ + Iterator iterator = enemies.iterator(); + while (iterator.hasNext()){ + Entity enemy = (Entity)iterator.next(); + enemy.attackEntityFrom(DamageSourceList.blackHeart, 5f * event.ammount); + } + } + float damage = playerInfo.getFloat("BlackHeart") - event.ammount; + if (damage >= 0){ + playerInfo.setFloat("BlackHeart", damage); + JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + player.heal(event.ammount); + }else{ + playerInfo.setFloat("BlackHeart", 0f); + JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + player.heal(Math.abs(damage)); + } + } + JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } + }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++) + 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); + ((ItemBaseJewelry)item.getItem()).onEntityAttacked(item, player, entity, event.ammount); + } } } + /** + * @param event + */ @SubscribeEvent public void onPlayerRespawn(PlayerEvent.Clone event) { EntityPlayer player = event.entityPlayer; - if (!player.worldObj.isRemote) - { + if (!player.worldObj.isRemote){ NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); - if (playerInfo.hasKey("cursePoints") && playerInfo.getInteger("cursePoints") > 0) - { + if (playerInfo.hasKey("cursePoints") && playerInfo.getInteger("cursePoints") > 0){ int points = playerInfo.getInteger("cursePoints"); - addCurse(player, playerInfo, "curse1"); - if (points > 50) addCurse(player, playerInfo, "curse2"); - if(!playerInfo.hasKey("curseTime") || !playerInfo.hasKey("reselectCurses") || playerInfo.getBoolean("reselectCurses")) - { + for(int i = 0; i <= 5; i++) + if (points > i * 750) addCurse(player, playerInfo, ("curse" + i).toString()); + if (!playerInfo.hasKey("curseTime") || !playerInfo.hasKey("reselectCurses") || playerInfo.getBoolean("reselectCurses")){ playerInfo.setInteger("curseTime", 23000); playerInfo.setBoolean("reselectCurses", false); } } } - JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + 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) { - if ((!playerInfo.hasKey(curse) || playerInfo.getInteger(curse) == -1) && JewelrycraftUtil.availableCurseNames.size() > 0) - { - String name = JewelrycraftUtil.availableCurseNames.get(JewelrycraftUtil.rand.nextInt(JewelrycraftUtil.availableCurseNames.size())); - int grade = player.worldObj.rand.nextInt(2); - playerInfo.setByte(name, (byte) grade); - JewelrycraftUtil.availableCurseNames.remove(JewelrycraftUtil.curseValues.get(name)); + if ((!playerInfo.hasKey(curse) || playerInfo.getInteger(curse) == 0) && Curse.availableCurses.size() > 0){ + 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); + Curse.availableCurses.remove(cur); playerInfo.setInteger(curse, grade); } } + public static void addCurse(EntityPlayer player, NBTTagCompound playerInfo, String curseNo, int curseID) + { + 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); + playerInfo.setInteger(cur.getName(), grade); + Curse.availableCurses.remove(cur); + playerInfo.setInteger(curseNo, grade); + } + } + + @SubscribeEvent + public void itemToss(ItemTossEvent event) + { + NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(event.player, "Jewelrycraft"); + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0 && curse.itemToss()){ + EntityItem entityitem = new EntityItem(event.player.worldObj, event.player.posX + 0.5D, event.player.posY + 0.5D, event.player.posZ + 0.5D, event.entityItem.getEntityItem()); + entityitem.motionX = 0; + 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!")); + event.setCanceled(true); + } + } + + /** + * @param event + */ @SubscribeEvent public void playerFileSave(PlayerEvent.SaveToFile event) { - JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + if (event.entity instanceof EntityPlayer && !(event.entity instanceof EntityPlayerMP)) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } + /** + * @param event + */ @SubscribeEvent public void onEntityDead(LivingDeathEvent event) { final Entity entity = event.entity; - if (!entity.worldObj.isRemote && entity instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) entity; + Random rand = new Random(); + String[] types = {"Red", "Blue", "White", "Black"}; + if (!entity.worldObj.isRemote && !(entity instanceof EntityPlayer) && entity instanceof EntityLiving){ + EntityLiving live = (EntityLiving)entity; + String type = types[rand.nextInt(4)]; + if (rand.nextInt(6) == 0){ + if (type == "White"){ + EntityHeart h = new EntityHalfHeart(live.worldObj); + h.setType(type); + h.setLocationAndAngles(live.posX, live.posY, live.posZ, MathHelper.wrapAngleTo180_float(rand.nextFloat() * 360.0F), 0.0F); + live.worldObj.spawnEntityInWorld(h); + }else{ + for(int i = 1; i <= 1 + rand.nextInt(1 + (int)(live.getMaxHealth() / 20)); i++){ + EntityHeart[] hearts = {new EntityHeart(live.worldObj), new EntityHalfHeart(entity.worldObj)}; + EntityHeart h = hearts[rand.nextInt(2)]; + h.setType(type); + h.setLocationAndAngles(live.posX, live.posY, live.posZ, MathHelper.wrapAngleTo180_float(rand.nextFloat() * 360.0F), 0.0F); + live.worldObj.spawnEntityInWorld(h); + } + } + } + } + if (!entity.worldObj.isRemote && entity instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)entity; NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); - if (playerInfo.hasKey("reselectCurses") && playerInfo.getBoolean("reselectCurses")) - { - for (String l : JewelrycraftUtil.curseValues.keySet()) - if (playerInfo.getInteger(l) == 0 || playerInfo.getInteger("Deaths") == 2) playerInfo.setByte(l, (byte) -1); - for (int i = 1; i <= 2; i++) - if ((playerInfo.hasKey(("curse" + i).toString()) && playerInfo.getInteger(("curse" + i).toString()) == 0) || playerInfo.getInteger("Deaths") == 2) playerInfo.setInteger(("curse" + i).toString(), -1); - JewelrycraftUtil.availableCurseNames.putAll(JewelrycraftUtil.curseNames); + 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); + }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 (!playerInfo.hasKey("Deaths") || playerInfo.getInteger("Deaths") == 2) playerInfo.setInteger("Deaths", 0); - playerInfo.setInteger("Deaths", playerInfo.getInteger("Deaths") + 1); } - JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); + if (event.entity instanceof EntityPlayer && !(event.entity instanceof EntityPlayerMP)) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); } + /** + * @param event + */ @SubscribeEvent public void onWorldLoad(WorldEvent.Load event) { - if (!event.world.isRemote) - { + if (!event.world.isRemote){ new File(JewelrycraftMod.dir + File.separator + "Jewelrycraft").mkdirs(); JewelrycraftMod.liquidsConf = new File(JewelrycraftMod.dir + File.separator + "Jewelrycraft", "JLP" + event.world.getWorldInfo().getWorldName() + ".cfg"); - try - { + try{ if (!JewelrycraftMod.liquidsConf.exists()) JewelrycraftMod.liquidsConf.createNewFile(); } - catch (IOException e) - { + catch(IOException e){ e.printStackTrace(); } } - - if (FMLCommonHandler.instance().getEffectiveSide().isServer()) - { - try - { - if (JewelrycraftMod.liquidsConf.exists()) JewelrycraftMod.saveData = CompressedStreamTools.readCompressed(new FileInputStream(JewelrycraftMod.liquidsConf)); - } - catch (EOFException e) - { - e.printStackTrace(); - } - catch (IOException e) - { - e.printStackTrace(); - } + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) try{ + if (JewelrycraftMod.liquidsConf.exists()) JewelrycraftMod.saveData = CompressedStreamTools.readCompressed(new FileInputStream(JewelrycraftMod.liquidsConf)); + } + catch(EOFException e){ + e.printStackTrace(); + } + catch(IOException e){ + e.printStackTrace(); } - JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); - } + /** + * @param event + */ @SubscribeEvent public void onWorldSave(WorldEvent.Save event) { - if (FMLCommonHandler.instance().getEffectiveSide().isServer()) - { - try - { - if (JewelrycraftMod.liquidsConf.exists()) CompressedStreamTools.writeCompressed(JewelrycraftMod.saveData, new FileOutputStream(JewelrycraftMod.liquidsConf)); - } - catch (EOFException e) - { - e.printStackTrace(); - } - catch (IOException e) - { - e.printStackTrace(); - } + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) try{ + if (JewelrycraftMod.liquidsConf.exists()) CompressedStreamTools.writeCompressed(JewelrycraftMod.saveData, new FileOutputStream(JewelrycraftMod.liquidsConf)); + } + catch(EOFException e){ + e.printStackTrace(); + } + catch(IOException e){ + e.printStackTrace(); } } + /** + * @param event + */ @SubscribeEvent - @SideOnly(Side.CLIENT) + @SideOnly (Side.CLIENT) public void fogColors(EntityViewRenderEvent.FogColors event) { - if (event.entity instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) event.entity; + if (event.entity instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)event.entity; NBTTagCompound persistTag = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); - if (persistTag.getBoolean("nearStartedRitual")) - { + if (persistTag.getBoolean("nearStartedRitual")){ event.red = 0f; event.green = 0f; event.blue = 0f; @@ -223,22 +393,25 @@ public class EntityEventHandler if (event.isCancelable()) event.setCanceled(true); } + /** + * @param event + */ @SubscribeEvent - @SideOnly(Side.CLIENT) + @SideOnly (Side.CLIENT) public void fogDensity(EntityViewRenderEvent.FogDensity event) - { - } + {} + /** + * @param event + */ @SubscribeEvent - @SideOnly(Side.CLIENT) + @SideOnly (Side.CLIENT) public void renderFog(EntityViewRenderEvent.RenderFogEvent event) { - if (event.entity instanceof EntityPlayer) - { - EntityPlayer player = (EntityPlayer) event.entity; + if (event.entity instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)event.entity; NBTTagCompound persistTag = PlayerUtils.getModPlayerPersistTag(player, "Jewelrycraft"); - if (persistTag.getBoolean("nearStartedRitual")) - { + if (persistTag.getBoolean("nearStartedRitual")){ GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); GL11.glFogf(GL11.GL_FOG_DENSITY, 0.6F); } |
