From 4f7ad220df0438b6f3382110577b53f29da46453 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Thu, 24 May 2018 15:50:07 -0400 Subject: Update of all changes --- .../jewelrycraft/events/EntityEventHandler.java | 1058 +++++++++++++------- 1 file changed, 718 insertions(+), 340 deletions(-) mode change 100644 => 100755 src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java (limited to 'src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java') diff --git a/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java b/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java old mode 100644 new mode 100755 index 9d9a3bd..6806f65 --- a/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java +++ b/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java @@ -46,345 +46,723 @@ import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import net.minecraftforge.event.entity.living.LivingHealEvent; import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; -public class EntityEventHandler{ - - int updateTime = 0, totalUnavailableCurses = 0, luck = 0; - boolean addedCurses = false; - public static Random rand = new Random(); - public static ArrayList types = new ArrayList(); - - @SubscribeEvent - public void onEntityJoinWorld(EntityJoinWorldEvent event) { - 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; - NBTTagCompound persistTag = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - boolean shouldGiveManual = ItemList.guide != null && !persistTag.getBoolean("givenGuide"); - 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; - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(event.world) && !persistTag.hasKey(curse.getName())) persistTag.setInteger(curse.getName(), 0); - for(Curse curse: Curse.getCurseList()) - if (!curse.canCurseBeActivated(event.world)) { - Curse.availableCurses.remove(curse); - persistTag.setInteger(curse.getName(), 0); - totalUnavailableCurses++; - }else if (!Curse.availableCurses.contains(curse)) Curse.availableCurses.add(curse); - persistTag.setBoolean("sendInfo", true); - luck = calculateLuck((EntityPlayer)entity); - } - if (ConfigHandler.CAN_RED_HEARTS_SPAWN) types.add("Red"); - if (ConfigHandler.CAN_BLUE_HEARTS_SPAWN) types.add("Blue"); - if (ConfigHandler.CAN_HOLY_HEARTS_SPAWN) types.add("White"); - if (ConfigHandler.CAN_BLACK_HEARTS_SPAWN) types.add("Black"); - } - - /** - * @param event - */ - @SubscribeEvent - public void onEntityUpdate(LivingUpdateEvent event) { - Entity entity = event.entity; - EntityLivingBase entityLiving = event.entityLiving; - for(PotionBase potion: PotionBase.getPotionList()) - if (entityLiving.isPotionActive(potion)) potion.action(entityLiving); - if (entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer)entity; - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - playerInfo.setBoolean("fancyRender", JewelrycraftMod.fancyRender); - if (updateTime > 0) updateTime--; - for(int i = 0; i < 18; i++) - if (getJewelryItems(playerInfo, i) != null) { - if (getJewelryItems(playerInfo, i).getItem() instanceof ItemBaseJewelry) ((ItemBaseJewelry)getJewelryItems(playerInfo, i).getItem()).action(getJewelryItems(playerInfo, i), player); - if (getJewelryItems(playerInfo, i).getItem() instanceof IJewelryItem) ((IJewelryItem)getJewelryItems(playerInfo, i).getItem()).onWearAction(getJewelryItems(playerInfo, i), player); - } - if (!player.worldObj.isRemote) { - timeUntilYouCanResetCurses(playerInfo); - updateCurses(playerInfo, player); - if (updateTime == 0) { - JewelrycraftMod.netWrapper.sendToAll(new PacketSendServerPlayersInfo()); - updateTime = 200; - } - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) curse.action(player.worldObj, player); - } - } - } - - public void updateCurses(NBTTagCompound playerInfo, EntityPlayer player) { - if (playerInfo.hasKey("playerCursePointsChanged") && playerInfo.getBoolean("playerCursePointsChanged")) { - int points = playerInfo.getInteger("cursePoints"); - int maxCurses = playerInfo.getInteger("cursePoints") / Variables.CURSE_POINTS_PER_LEVEL + 1; - if (points > 0 && playerInfo.getInteger("activeCurses") < maxCurses) while (playerInfo.getInteger("activeCurses") < maxCurses && Curse.availableCurses.size() > 0 && playerInfo.getInteger("activeCurses") < Curse.getCurseList().size()) - addCurse(player, playerInfo); - if (!playerInfo.hasKey("curseTime") || !playerInfo.hasKey("reselectCurses") || playerInfo.getBoolean("reselectCurses")) { - playerInfo.setInteger("curseTime", 23000); - playerInfo.setBoolean("reselectCurses", false); - } - JewelrycraftMod.netWrapper.sendTo(new PacketSendClientPlayerInfo(playerInfo), (EntityPlayerMP)player); - if (addedCurses) { - JewelrycraftMod.netWrapper.sendToAll(new PacketSendServerPlayersInfo()); - player.addChatMessage(new ChatComponentText(StatCollector.translateToLocal("curse." + Variables.MODID + ".activated"))); - addedCurses = false; - } - } - if (playerInfo.getBoolean("playerCursePointsChanged")) playerInfo.setBoolean("playerCursePointsChanged", false); - luck = calculateLuck(player); - } - - public void timeUntilYouCanResetCurses(NBTTagCompound playerInfo) { - if (playerInfo.hasKey("reselectCurses") && !playerInfo.getBoolean("reselectCurses")) { - playerInfo.setInteger("curseTime", playerInfo.getInteger("curseTime") - 10000); - if (playerInfo.getInteger("curseTime") <= 0) playerInfo.setBoolean("reselectCurses", true); - } - } - - public ItemStack getJewelryItems(NBTTagCompound playerInfo, int i) { - if (playerInfo.hasKey("ext" + i)) { - NBTTagCompound nbt = (NBTTagCompound)playerInfo.getTag("ext" + i); - ItemStack item = ItemStack.loadItemStackFromNBT(nbt); - if (item != null) return item; - } - return null; - } - - @SubscribeEvent - public void onEntityLivingDropItems(LivingDropsEvent event) { - if (event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer)event.source.getEntity(); - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) curse.entityDropItems(player, event.entityLiving, event.drops); - } - } - - @SubscribeEvent - public void onEntityAttacked(LivingAttackEvent event) { - EntityLivingBase entity = event.entityLiving; - if (event.source.getEntity() != null && event.source.getEntity() instanceof EntityLivingBase && ((EntityLivingBase)event.source.getEntity()).isPotionActive(PotionList.stun)) event.setCanceled(true); - if (entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer)entity; - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - if (!(event.source.getEntity() instanceof EntityPlayer) && !player.capabilities.isCreativeMode) { - if (!player.worldObj.isRemote) for(int i = 0; i < 18; i++) - if (getJewelryItems(playerInfo, i) != null) { - if (getJewelryItems(playerInfo, i).getItem() instanceof ItemBaseJewelry) { - ((ItemBaseJewelry)getJewelryItems(playerInfo, i).getItem()).onPlayerAttacked(getJewelryItems(playerInfo, i), player, event.source, event.ammount); - if (((ItemBaseJewelry)getJewelryItems(playerInfo, i).getItem()).onPlayerAttackedCacellable(getJewelryItems(playerInfo, i), player, event.source, event.ammount)) event.setCanceled(true); - } - if (getJewelryItems(playerInfo, i).getItem() instanceof IJewelryItem) ((IJewelryItem)getJewelryItems(playerInfo, i).getItem()).onPlayerAttackedAction(getJewelryItems(playerInfo, i), player, event.source, event.ammount); - } - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) curse.attackedAction(player.worldObj, player); - } - removeHearts(event, player, playerInfo); - JewelrycraftMod.netWrapper.sendToAll(new PacketSendServerPlayersInfo()); - JewelrycraftMod.netWrapper.sendTo(new PacketSendClientPlayerInfo(playerInfo), (EntityPlayerMP)player); - } - if (event.source.getEntity() instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer)event.source.getEntity(); - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - for(int i = 0; i < 18; i++) - if (getJewelryItems(playerInfo, i) != null) { - if (getJewelryItems(playerInfo, i).getItem() instanceof ItemBaseJewelry) { - ((ItemBaseJewelry)getJewelryItems(playerInfo, i).getItem()).onEntityAttacked(getJewelryItems(playerInfo, i), player, entity, event.ammount); - if (((ItemBaseJewelry)getJewelryItems(playerInfo, i).getItem()).onEntityAttackedCacellable(getJewelryItems(playerInfo, i), player, entity, event.ammount)) event.setCanceled(true); - } - if (getJewelryItems(playerInfo, i).getItem() instanceof IJewelryItem) ((IJewelryItem)getJewelryItems(playerInfo, i).getItem()).onEntityAttackedByPlayer(getJewelryItems(playerInfo, i), player, entity, event.ammount); - } - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) { - curse.attackedByPlayerAction(event, entity.worldObj, player, entity); - if (curse.attackedByPlayerActionCancelable(event, player.worldObj, player, entity)) event.setCanceled(true); - } - if (entity instanceof EntityHeart && entity.getAge() < 30) event.setCanceled(true); - if (event.source.getEntity() instanceof EntityPlayerMP) { - JewelrycraftMod.netWrapper.sendToAll(new PacketSendServerPlayersInfo()); - JewelrycraftMod.netWrapper.sendTo(new PacketSendClientPlayerInfo(playerInfo), (EntityPlayerMP)player); - } - } - } - - public void removeHearts(LivingAttackEvent event, EntityPlayer player, NBTTagCompound playerInfo) { - if (!player.worldObj.isRemote && !player.capabilities.isCreativeMode && (float)player.hurtResistantTime <= (float)player.maxHurtResistantTime / 2.0F) { - if (playerInfo.getFloat("WhiteHeart") > 0) { - playerInfo.setFloat("WhiteHeart", 0f); - } - if (playerInfo.getFloat("BlueHeart") > 0) { - float damage = playerInfo.getFloat("BlueHeart") - event.ammount; - if (damage >= 0) playerInfo.setFloat("BlueHeart", damage); - else playerInfo.setFloat("BlueHeart", 0f); - if (damage < 0) { - System.out.println(damage); - player.attackEntityFrom(event.source, Math.abs(damage)); - } - player.hurtResistantTime = player.maxHurtResistantTime; - player.hurtTime = player.maxHurtTime = 10; - player.worldObj.playSoundAtEntity(player, "game.player.hurt", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); - event.setCanceled(true); - }else if (playerInfo.getFloat("BlackHeart") > 0) { - AxisAlignedBB axisalignedbb = player.boundingBox.expand(6.0D, 6.0D, 6.0D); - List enemies = player.worldObj.getEntitiesWithinAABBExcludingEntity(player, axisalignedbb, EntitySelector.selectMonsters); - if (enemies != null && !enemies.isEmpty() && event.source != DamageSourceList.blackHeart) { - Iterator iterator = enemies.iterator(); - while (iterator.hasNext()){ - Entity enemy = (Entity)iterator.next(); - enemy.attackEntityFrom(DamageSourceList.blackHeart, 6f); - } - } - float damage = playerInfo.getFloat("BlackHeart") - event.ammount; - if (damage >= 0) playerInfo.setFloat("BlackHeart", damage); - else playerInfo.setFloat("BlackHeart", 0f); - if (damage < 0) player.attackEntityFrom(event.source, Math.abs(damage)); - player.hurtResistantTime = player.maxHurtResistantTime; - player.hurtTime = player.maxHurtTime = 10; - player.worldObj.playSoundAtEntity(player, "game.player.hurt", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); - event.setCanceled(true); - } - } - } - - @SubscribeEvent - public void onPlayerRespawn(PlayerEvent.Clone event) { - EntityPlayer player = event.entityPlayer; - if (!player.worldObj.isRemote) { - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - if (playerInfo.hasKey("cursePoints")) { - int points = playerInfo.getInteger("cursePoints"); - int maxCurses = playerInfo.getInteger("cursePoints") / Variables.CURSE_POINTS_PER_LEVEL + 1; - if (points > 0 && playerInfo.getInteger("activeCurses") < maxCurses) while (playerInfo.getInteger("activeCurses") < maxCurses && Curse.availableCurses.size() > 0 && playerInfo.getInteger("activeCurses") < Curse.getCurseList().size()) - addCurse(player, playerInfo); - if (!playerInfo.hasKey("curseTime") || !playerInfo.hasKey("reselectCurses") || playerInfo.getBoolean("reselectCurses")) { - playerInfo.setInteger("curseTime", 23000); - playerInfo.setBoolean("reselectCurses", false); - } - } - playerInfo.setFloat("BlueHeart", 0f); - playerInfo.setFloat("BlackHeart", 0f); - playerInfo.setFloat("WhiteHeart", 0f); - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) curse.respawnAction(player.worldObj, player); - for(int i = 0; i < 18; i++) - if (getJewelryItems(playerInfo, i) != null) { - if (getJewelryItems(playerInfo, i).getItem() instanceof ItemBaseJewelry) ((ItemBaseJewelry)getJewelryItems(playerInfo, i).getItem()).onPlayerRespawn(getJewelryItems(playerInfo, i), event); - if (getJewelryItems(playerInfo, i).getItem() instanceof IJewelryItem) ((IJewelryItem)getJewelryItems(playerInfo, i).getItem()).onPlayerRespawnAction(getJewelryItems(playerInfo, i), event); - } - JewelrycraftMod.netWrapper.sendTo(new PacketSendClientPlayerInfo(playerInfo), (EntityPlayerMP)player); - if (addedCurses) { - JewelrycraftMod.netWrapper.sendToAll(new PacketSendServerPlayersInfo()); - addedCurses = false; - } - } - } - - public void addCurse(EntityPlayer player, NBTTagCompound playerInfo) { - if (ConfigHandler.CURSES_ENABLED && Curse.availableCurses.size() > 0) { - Curse cur = ((WeightedRandomCurse)WeightedRandom.getRandomItem(rand, JewelrycraftUtil.getCurses(player.worldObj, player, rand))).getCurse(rand); - playerInfo.setInteger(cur.getName(), 1); - Curse.availableCurses.remove(cur); - addedCurses = true; - if (playerInfo.getInteger("activeCurses") == 0) playerInfo.setInteger("activeCurses", 1); - else playerInfo.setInteger("activeCurses", playerInfo.getInteger("activeCurses") + 1); - JewelrycraftMod.netWrapper.sendToAll(new PacketSendServerPlayersInfo()); - JewelrycraftMod.netWrapper.sendTo(new PacketSendClientPlayerInfo(playerInfo), (EntityPlayerMP)player); - } - } - - @SubscribeEvent - public void itemToss(ItemTossEvent event) { - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(event.player, Variables.MODID); - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (event.player != null && curse.canCurseBeActivated(event.player.worldObj) && 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()); - if (entityitem != null) { - entityitem.motionX = 0; - entityitem.motionZ = 0; - entityitem.motionY = 0.11000000298023224D; - event.player.worldObj.spawnEntityInWorld(entityitem); - MinecraftServer.getServer().getConfigurationManager().sendChatMsg(new ChatComponentText("<" + event.player.getDisplayName() + "> I shouldn't drop this. I might need it later.")); - event.setCanceled(true); - } - } - } - - @SubscribeEvent - public void playerFileSave(PlayerEvent.SaveToFile event) { - if (event.entity instanceof EntityPlayer && !(event.entity instanceof EntityPlayerMP)) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); - } - - public int calculateLuck(EntityPlayer player) { - int luck = 0; - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) luck += curse.luck(); - return luck; - } - - public static void spawnHearts(Entity entity, int chance) { - EntityLiving live = (EntityLiving)entity; - String type = types.get(rand.nextInt(types.size())); - if (rand.nextInt(chance) == 0 && live.getCreatureAttribute() != JewelrycraftUtil.HEART) { - 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() / 2)); 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); - } - } - } - } - - @SubscribeEvent - public void onEntityDead(LivingDeathEvent event) { - final Entity entity = event.entity; - if (!entity.worldObj.isRemote && !(entity instanceof EntityPlayer) && entity instanceof EntityLiving && event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer) { - System.out.println(luck); - spawnHearts(entity, Math.max(2, 20 - luck)); - EntityPlayer player = (EntityPlayer)event.source.getEntity(); - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) curse.entityDeathAction(player.worldObj, event.entityLiving, player); - } - if (entity instanceof EntityPlayer) { - EntityPlayer player = (EntityPlayer)entity; - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - playerInfo.setFloat("BlueHeart", 0f); - playerInfo.setFloat("BlackHeart", 0f); - playerInfo.setFloat("WhiteHeart", 0f); - if (playerInfo.hasKey("reselectCurses") && playerInfo.getBoolean("reselectCurses")) { - playerInfo.setInteger("activeCurses", 0); - if (ConfigHandler.CURSES_ENABLED) for(Curse l: Curse.getCurseList()){ - if (l.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(l.getName()) == 1) { - playerInfo.setInteger(l.getName(), 0); - l.setTicksActive(0); - if (!Curse.availableCurses.contains(l)) Curse.availableCurses.add(l); - }else if (l.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(l.getName()) >= 2) playerInfo.setInteger(l.getName(), 1); - } - if (entity.worldObj.isRemote) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); - } - if (ConfigHandler.CURSES_ENABLED) for(Curse curse: Curse.getCurseList()) - if (curse.canCurseBeActivated(player.worldObj) && playerInfo.getInteger(curse.getName()) > 0) curse.playerDeathAction(player.worldObj, player); - for(int i = 0; i < 18; i++) - if (getJewelryItems(playerInfo, i) != null) { - if (getJewelryItems(playerInfo, i).getItem() instanceof ItemBaseJewelry) ((ItemBaseJewelry)getJewelryItems(playerInfo, i).getItem()).onPlayerDead(getJewelryItems(playerInfo, i), player, event.source); - if (getJewelryItems(playerInfo, i).getItem() instanceof IJewelryItem) ((IJewelryItem)getJewelryItems(playerInfo, i).getItem()).onPlayerDeadAction(getJewelryItems(playerInfo, i), player, event.source); - } - } - if (event.entity instanceof EntityPlayer && !(event.entity instanceof EntityPlayerMP)) JewelrycraftMod.netWrapper.sendToServer(new PacketRequestPlayerInfo()); - } -} +public class EntityEventHandler { + int updateTime = 0, + totalUnavailableCurses = 0, luck = 0; + + boolean addedCurses = false; + + public static Random rand = new Random(); + + public static ArrayList types = new ArrayList(); + + @SubscribeEvent + public void onEntityJoinWorld(EntityJoinWorldEvent event) { + 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; + + NBTTagCompound persistTag = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + + boolean shouldGiveManual = ItemList.guide != null + && !persistTag.getBoolean("givenGuide"); + + 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; + + if (ConfigHandler.CURSES_ENABLED) { + for (Curse curse : Curse.getCurseList()) { + if (curse.canCurseBeActivated(event.world) + && !persistTag.hasKey(curse.getName())) { + persistTag.setInteger(curse.getName(), 0); + } + } + } + + for (Curse curse : Curse.getCurseList()) { + if (!curse.canCurseBeActivated(event.world)) { + Curse.availableCurses.remove(curse); + persistTag.setInteger(curse.getName(), 0); + totalUnavailableCurses++; + } else if (!Curse.availableCurses.contains(curse)) + Curse.availableCurses.add(curse); + } + + persistTag.setBoolean("sendInfo", true); + luck = calculateLuck((EntityPlayer) entity); + } + + if (ConfigHandler.CAN_RED_HEARTS_SPAWN) { + types.add("Red"); + } + + if (ConfigHandler.CAN_BLUE_HEARTS_SPAWN) { + types.add("Blue"); + } + + if (ConfigHandler.CAN_HOLY_HEARTS_SPAWN) { + types.add("White"); + } + + if (ConfigHandler.CAN_BLACK_HEARTS_SPAWN) { + types.add("Black"); + } + } + + /** + * @param event + */ + @SubscribeEvent + public void onEntityUpdate(LivingUpdateEvent event) { + Entity entity = event.entity; + EntityLivingBase entityLiving = event.entityLiving; + + for (PotionBase potion : PotionBase.getPotionList()) { + if (entityLiving.isPotionActive(potion)) { + potion.action(entityLiving); + } + } + + if (entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entity; + + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + + playerInfo.setBoolean("fancyRender", + JewelrycraftMod.fancyRender); + + if (updateTime > 0) { + updateTime--; + } + + for (int i = 0; i < 18; i++) { + if (getJewelryItems(playerInfo, i) != null) { + if (getJewelryItems(playerInfo, i) + .getItem() instanceof ItemBaseJewelry) { + ((ItemBaseJewelry) getJewelryItems(playerInfo, i) + .getItem()).action( + getJewelryItems(playerInfo, i), + player); + } + + if (getJewelryItems(playerInfo, i) + .getItem() instanceof IJewelryItem) { + ((IJewelryItem) getJewelryItems(playerInfo, i) + .getItem()).onWearAction( + getJewelryItems(playerInfo, i), + player); + } + } + } + + if (!player.worldObj.isRemote) { + timeUntilYouCanResetCurses(playerInfo); + updateCurses(playerInfo, player); + + if (updateTime == 0) { + JewelrycraftMod.netWrapper + .sendToAll(new PacketSendServerPlayersInfo()); + updateTime = 200; + } + + if (ConfigHandler.CURSES_ENABLED) { + for (Curse curse : Curse.getCurseList()) { + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo + .getInteger(curse.getName()) > 0) { + curse.action(player.worldObj, player); + } + } + } + } + } + } + + public void updateCurses(NBTTagCompound playerInfo, + EntityPlayer player) { + if (playerInfo.hasKey("playerCursePointsChanged") + && playerInfo.getBoolean("playerCursePointsChanged")) { + int points = playerInfo.getInteger("cursePoints"); + int maxCurses = playerInfo.getInteger("cursePoints") + / Variables.CURSE_POINTS_PER_LEVEL + 1; + + if (points > 0 + && playerInfo.getInteger("activeCurses") < maxCurses) { + while (playerInfo.getInteger("activeCurses") < maxCurses + && Curse.availableCurses.size() > 0 + && playerInfo.getInteger("activeCurses") < Curse + .getCurseList().size()) { + addCurse(player, playerInfo); + } + } + + if (!playerInfo.hasKey("curseTime") + || !playerInfo.hasKey("reselectCurses") + || playerInfo.getBoolean("reselectCurses")) { + playerInfo.setInteger("curseTime", 23000); + playerInfo.setBoolean("reselectCurses", false); + } + + JewelrycraftMod.netWrapper.sendTo( + new PacketSendClientPlayerInfo(playerInfo), + (EntityPlayerMP) player); + + if (addedCurses) { + JewelrycraftMod.netWrapper + .sendToAll(new PacketSendServerPlayersInfo()); + player.addChatMessage(new ChatComponentText( + StatCollector.translateToLocal("curse." + + Variables.MODID + ".activated"))); + addedCurses = false; + } + } + + if (playerInfo.getBoolean("playerCursePointsChanged")) { + playerInfo.setBoolean("playerCursePointsChanged", false); + } + + luck = calculateLuck(player); + } + + public void timeUntilYouCanResetCurses(NBTTagCompound playerInfo) { + if (playerInfo.hasKey("reselectCurses") + && !playerInfo.getBoolean("reselectCurses")) { + playerInfo.setInteger("curseTime", + playerInfo.getInteger("curseTime") - 10000); + + if (playerInfo.getInteger("curseTime") <= 0) + playerInfo.setBoolean("reselectCurses", true); + } + } + + public ItemStack getJewelryItems(NBTTagCompound playerInfo, int i) { + if (playerInfo.hasKey("ext" + i)) { + NBTTagCompound nbt = (NBTTagCompound) playerInfo + .getTag("ext" + i); + + ItemStack item = ItemStack.loadItemStackFromNBT(nbt); + + if (item != null) { + return item; + } + } + + return null; + } + + @SubscribeEvent + public void onEntityLivingDropItems(LivingDropsEvent event) { + if (event.source.getEntity() != null + && event.source.getEntity() instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) event.source.getEntity(); + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + if (ConfigHandler.CURSES_ENABLED) + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(curse.getName()) > 0) + curse.entityDropItems(player, event.entityLiving, + event.drops); + } + } + + @SubscribeEvent + public void onEntityAttacked(LivingAttackEvent event) { + EntityLivingBase entity = event.entityLiving; + + if (event.source.getEntity() != null + && event.source.getEntity() instanceof EntityLivingBase + && ((EntityLivingBase) event.source.getEntity()) + .isPotionActive(PotionList.stun)) + event.setCanceled(true); + if (entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entity; + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + + if (!(event.source.getEntity() instanceof EntityPlayer) + && !player.capabilities.isCreativeMode) { + if (!player.worldObj.isRemote) + for (int i = 0; i < 18; i++) + if (getJewelryItems(playerInfo, i) != null) { + if (getJewelryItems(playerInfo, i) + .getItem() instanceof ItemBaseJewelry) { + ((ItemBaseJewelry) getJewelryItems( + playerInfo, i).getItem()) + .onPlayerAttacked( + getJewelryItems( + playerInfo, + i), + player, + event.source, + event.ammount); + + if (((ItemBaseJewelry) getJewelryItems( + playerInfo, i).getItem()) + .onPlayerAttackedCacellable( + getJewelryItems( + playerInfo, + i), + player, + event.source, + event.ammount)) { + event.setCanceled(true); + } + } + + if (getJewelryItems(playerInfo, i) + .getItem() instanceof IJewelryItem) { + ((IJewelryItem) getJewelryItems(playerInfo, + i).getItem()) + .onPlayerAttackedAction( + getJewelryItems( + playerInfo, + i), + player, + event.source, + event.ammount); + } + } + + if (ConfigHandler.CURSES_ENABLED) { + for (Curse curse : Curse.getCurseList()) { + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo + .getInteger(curse.getName()) > 0) { + curse.attackedAction(player.worldObj, player, + event, event.source.getEntity()); + } + } + } + } + + removeHearts(event, player, playerInfo); + JewelrycraftMod.netWrapper + .sendToAll(new PacketSendServerPlayersInfo()); + JewelrycraftMod.netWrapper.sendTo( + new PacketSendClientPlayerInfo(playerInfo), + (EntityPlayerMP) player); + } + + if (event.source.getEntity() instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) event.source.getEntity(); + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + for (int i = 0; i < 18; i++) + if (getJewelryItems(playerInfo, i) != null) { + if (getJewelryItems(playerInfo, i) + .getItem() instanceof ItemBaseJewelry) { + ((ItemBaseJewelry) getJewelryItems(playerInfo, i) + .getItem()).onEntityAttacked( + getJewelryItems(playerInfo, i), + player, entity, event.ammount); + if (((ItemBaseJewelry) getJewelryItems(playerInfo, + i).getItem()).onEntityAttackedCacellable( + getJewelryItems(playerInfo, i), + player, entity, event.ammount)) + event.setCanceled(true); + } + if (getJewelryItems(playerInfo, i) + .getItem() instanceof IJewelryItem) + ((IJewelryItem) getJewelryItems(playerInfo, i) + .getItem()).onEntityAttackedByPlayer( + getJewelryItems(playerInfo, i), + player, entity, event.ammount); + } + if (ConfigHandler.CURSES_ENABLED) + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo + .getInteger(curse.getName()) > 0) { + curse.attackedByPlayerAction(event, + entity.worldObj, player, entity); + if (curse.attackedByPlayerActionCancelable(event, + player.worldObj, player, entity)) + event.setCanceled(true); + } + if (entity instanceof EntityHeart && entity.getAge() < 30) + event.setCanceled(true); + if (event.source.getEntity() instanceof EntityPlayerMP) { + JewelrycraftMod.netWrapper + .sendToAll(new PacketSendServerPlayersInfo()); + JewelrycraftMod.netWrapper.sendTo( + new PacketSendClientPlayerInfo(playerInfo), + (EntityPlayerMP) player); + } + } + } + + public void removeHearts(LivingAttackEvent event, EntityPlayer player, + NBTTagCompound playerInfo) { + if (!player.worldObj.isRemote + && !player.capabilities.isCreativeMode + && (float) player.hurtResistantTime <= (float) player.maxHurtResistantTime + / 2.0F) { + if (playerInfo.getFloat("WhiteHeart") > 0) { + playerInfo.setFloat("WhiteHeart", 0f); + } + + if (playerInfo.getFloat("BlueHeart") > 0) { + float damage = playerInfo.getFloat("BlueHeart") + - event.ammount; + if (damage >= 0) { + playerInfo.setFloat("BlueHeart", damage); + } else { + playerInfo.setFloat("BlueHeart", 0f); + } + + if (damage < 0) { + System.out.println(damage); + player.attackEntityFrom(event.source, + Math.abs(damage)); + } + + player.hurtResistantTime = player.maxHurtResistantTime; + player.hurtTime = player.maxHurtTime = 10; + player.worldObj.playSoundAtEntity(player, + "game.player.hurt", 1.0F, + (EntityEventHandler.rand.nextFloat() + - EntityEventHandler.rand.nextFloat()) + * 0.2F + 1.0F); + event.setCanceled(true); + } else if (playerInfo.getFloat("BlackHeart") > 0) { + AxisAlignedBB axisalignedbb = player.boundingBox + .expand(6.0D, 6.0D, 6.0D); + List enemies = player.worldObj + .getEntitiesWithinAABBExcludingEntity(player, + axisalignedbb, + EntitySelector.selectMonsters); + if (enemies != null && !enemies.isEmpty() + && event.source != DamageSourceList.blackHeart) { + Iterator iterator = enemies.iterator(); + while (iterator.hasNext()) { + Entity enemy = (Entity) iterator.next(); + enemy.attackEntityFrom(DamageSourceList.blackHeart, + 6f); + } + } + float damage = playerInfo.getFloat("BlackHeart") + - event.ammount; + if (damage >= 0) + playerInfo.setFloat("BlackHeart", damage); + else + playerInfo.setFloat("BlackHeart", 0f); + if (damage < 0) + player.attackEntityFrom(event.source, + Math.abs(damage)); + player.hurtResistantTime = player.maxHurtResistantTime; + player.hurtTime = player.maxHurtTime = 10; + player.worldObj.playSoundAtEntity(player, + "game.player.hurt", 1.0F, + (EntityEventHandler.rand.nextFloat() + - EntityEventHandler.rand.nextFloat()) + * 0.2F + 1.0F); + event.setCanceled(true); + } + } + } + + @SubscribeEvent + public void onPlayerRespawn(PlayerEvent.Clone event) { + EntityPlayer player = event.entityPlayer; + if (!player.worldObj.isRemote) { + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + if (playerInfo.hasKey("cursePoints")) { + int points = playerInfo.getInteger("cursePoints"); + int maxCurses = playerInfo.getInteger("cursePoints") + / Variables.CURSE_POINTS_PER_LEVEL + 1; + if (points > 0 && playerInfo + .getInteger("activeCurses") < maxCurses) + while (playerInfo + .getInteger("activeCurses") < maxCurses + && Curse.availableCurses.size() > 0 + && playerInfo + .getInteger("activeCurses") < Curse + .getCurseList().size()) + addCurse(player, playerInfo); + if (!playerInfo.hasKey("curseTime") + || !playerInfo.hasKey("reselectCurses") + || playerInfo.getBoolean("reselectCurses")) { + playerInfo.setInteger("curseTime", 23000); + playerInfo.setBoolean("reselectCurses", false); + } + } + playerInfo.setFloat("BlueHeart", 0f); + playerInfo.setFloat("BlackHeart", 0f); + playerInfo.setFloat("WhiteHeart", 0f); + if (ConfigHandler.CURSES_ENABLED) + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(curse.getName()) > 0) + curse.respawnAction(player.worldObj, player); + for (int i = 0; i < 18; i++) + if (getJewelryItems(playerInfo, i) != null) { + if (getJewelryItems(playerInfo, i) + .getItem() instanceof ItemBaseJewelry) + ((ItemBaseJewelry) getJewelryItems(playerInfo, i) + .getItem()).onPlayerRespawn( + getJewelryItems(playerInfo, i), + event); + if (getJewelryItems(playerInfo, i) + .getItem() instanceof IJewelryItem) + ((IJewelryItem) getJewelryItems(playerInfo, i) + .getItem()).onPlayerRespawnAction( + getJewelryItems(playerInfo, i), + event); + } + JewelrycraftMod.netWrapper.sendTo( + new PacketSendClientPlayerInfo(playerInfo), + (EntityPlayerMP) player); + if (addedCurses) { + JewelrycraftMod.netWrapper + .sendToAll(new PacketSendServerPlayersInfo()); + addedCurses = false; + } + } + } + + public void addCurse(EntityPlayer player, NBTTagCompound playerInfo) { + if (ConfigHandler.CURSES_ENABLED + && Curse.availableCurses.size() > 0) { + Curse cur = ((WeightedRandomCurse) WeightedRandom + .getRandomItem(rand, JewelrycraftUtil + .getCurses(player.worldObj, player, rand))) + .getCurse(rand); + playerInfo.setInteger(cur.getName(), 1); + Curse.availableCurses.remove(cur); + addedCurses = true; + if (playerInfo.getInteger("activeCurses") == 0) + playerInfo.setInteger("activeCurses", 1); + else + playerInfo.setInteger("activeCurses", + playerInfo.getInteger("activeCurses") + 1); + JewelrycraftMod.netWrapper + .sendToAll(new PacketSendServerPlayersInfo()); + JewelrycraftMod.netWrapper.sendTo( + new PacketSendClientPlayerInfo(playerInfo), + (EntityPlayerMP) player); + } + } + + @SubscribeEvent + public void itemToss(ItemTossEvent event) { + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(event.player, Variables.MODID); + if (ConfigHandler.CURSES_ENABLED) + for (Curse curse : Curse.getCurseList()) + if (event.player != null + && curse.canCurseBeActivated(event.player.worldObj) + && 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()); + if (entityitem != null) { + entityitem.motionX = 0; + entityitem.motionZ = 0; + entityitem.motionY = 0.11000000298023224D; + event.player.worldObj + .spawnEntityInWorld(entityitem); + MinecraftServer.getServer() + .getConfigurationManager() + .sendChatMsg(new ChatComponentText("<" + + event.player.getDisplayName() + + "> I shouldn't drop this. I might need it later.")); + event.setCanceled(true); + } + } + } + + @SubscribeEvent + public void playerFileSave(PlayerEvent.SaveToFile event) { + if (event.entity instanceof EntityPlayer + && !(event.entity instanceof EntityPlayerMP)) + JewelrycraftMod.netWrapper + .sendToServer(new PacketRequestPlayerInfo()); + } + + public int calculateLuck(EntityPlayer player) { + int luck = 0; + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + if (ConfigHandler.CURSES_ENABLED) + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(curse.getName()) > 0) + luck += curse.luck(); + return luck; + } + + public static void spawnHearts(Entity entity, int chance) { + EntityLiving live = (EntityLiving) entity; + String type = types.get(rand.nextInt(types.size())); + if (rand.nextInt(chance) == 0 && live + .getCreatureAttribute() != JewelrycraftUtil.HEARTS) { + 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() / 2)); + 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); + } + } + } + } + + @SubscribeEvent + public void onEntityDead(LivingDeathEvent event) { + final Entity entity = event.entity; + if (!entity.worldObj.isRemote && !(entity instanceof EntityPlayer) + && entity instanceof EntityLiving + && event.source.getEntity() != null + && event.source.getEntity() instanceof EntityPlayer) { + System.out.println(luck); + spawnHearts(entity, Math.max(2, 20 - luck)); + EntityPlayer player = (EntityPlayer) event.source.getEntity(); + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + if (ConfigHandler.CURSES_ENABLED) + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(curse.getName()) > 0) + curse.entityDeathAction(player.worldObj, + event.entityLiving, player); + } + if (entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entity; + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + playerInfo.setFloat("BlueHeart", 0f); + playerInfo.setFloat("BlackHeart", 0f); + playerInfo.setFloat("WhiteHeart", 0f); + if (playerInfo.hasKey("reselectCurses") + && playerInfo.getBoolean("reselectCurses")) { + playerInfo.setInteger("activeCurses", 0); + if (ConfigHandler.CURSES_ENABLED) + for (Curse l : Curse.getCurseList()) { + if (l.canCurseBeActivated(player.worldObj) + && playerInfo + .getInteger(l.getName()) == 1) { + playerInfo.setInteger(l.getName(), 0); + l.setTicksActive(0); + if (!Curse.availableCurses.contains(l)) + Curse.availableCurses.add(l); + } else if (l.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(l.getName()) >= 2) + playerInfo.setInteger(l.getName(), 1); + } + if (entity.worldObj.isRemote) + JewelrycraftMod.netWrapper + .sendToServer(new PacketRequestPlayerInfo()); + } + + if (ConfigHandler.CURSES_ENABLED) { + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(curse.getName()) > 0) + curse.playerDeathAction(player.worldObj, player, + event); + } + + for (int i = 0; i < 18; i++) + if (getJewelryItems(playerInfo, i) != null) { + if (getJewelryItems(playerInfo, i) + .getItem() instanceof ItemBaseJewelry) + ((ItemBaseJewelry) getJewelryItems(playerInfo, i) + .getItem()).onPlayerDead( + getJewelryItems(playerInfo, i), + player, event.source); + if (getJewelryItems(playerInfo, i) + .getItem() instanceof IJewelryItem) + ((IJewelryItem) getJewelryItems(playerInfo, i) + .getItem()).onPlayerDeadAction( + getJewelryItems(playerInfo, i), + player, event.source); + } + } + if (event.entity instanceof EntityPlayer + && !(event.entity instanceof EntityPlayerMP)) + JewelrycraftMod.netWrapper + .sendToServer(new PacketRequestPlayerInfo()); + } + + @SubscribeEvent + public void onEntityHeal(LivingHealEvent event) { + if (event.entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) event.entity; + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + + if (ConfigHandler.CURSES_ENABLED) { + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(curse.getName()) > 0) + curse.playerHealAction(player.worldObj, player, + event); + } + } + } + + @SubscribeEvent + public void onPlayerSleep(PlayerSleepInBedEvent event) { + if (event.entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) event.entity; + NBTTagCompound playerInfo = PlayerUtils + .getModPlayerPersistTag(player, Variables.MODID); + + if (ConfigHandler.CURSES_ENABLED) { + for (Curse curse : Curse.getCurseList()) + if (curse.canCurseBeActivated(player.worldObj) + && playerInfo.getInteger(curse.getName()) > 0) + curse.playerSleepAction(player.worldObj, player, + event); + } + } + } +} \ No newline at end of file -- cgit v1.2.3