From 01c8701b68986ccfa83e902515716838d6829311 Mon Sep 17 00:00:00 2001 From: Onyx Date: Tue, 1 Dec 2015 20:55:30 +0000 Subject: - Fixed all of the bugs mentioned on github - Added new config options - Rabbits paw now increases the chance of spawning hearts, rather than itself spawning some - Hearts now have a much lower chance to spawn by default - You can no longer increase your health past 20 hearts (aka double the default health) - The guide now also shows the total number of pages on each tab - A new luck stat has been added to the Curse API - Cleaned up the code a bit (removed unused methods, imports etc) - The displayer's info now has a purple solid color background; the text also has a much closer shadow and now shrinks in height as well as in width when too big - I have modified the potion list to use Mithion's code, credits have been given --- .../jewelrycraft/events/BlockEventHandler.java | 119 ++-- .../jewelrycraft/events/BucketHandler.java | 1 - .../jewelrycraft/events/EntityEventHandler.java | 671 +++++++++++---------- .../jewelrycraft/events/EventCommonHandler.java | 49 +- .../darkknight/jewelrycraft/events/EventList.java | 103 ++-- .../jewelrycraft/events/KeyBindings.java | 2 +- .../jewelrycraft/events/PlayerRenderHandler.java | 26 +- .../jewelrycraft/events/ScreenHandler.java | 10 +- 8 files changed, 485 insertions(+), 496 deletions(-) (limited to 'src/main/java/darkknight/jewelrycraft/events') diff --git a/src/main/java/darkknight/jewelrycraft/events/BlockEventHandler.java b/src/main/java/darkknight/jewelrycraft/events/BlockEventHandler.java index a5ae240..82af0de 100644 --- a/src/main/java/darkknight/jewelrycraft/events/BlockEventHandler.java +++ b/src/main/java/darkknight/jewelrycraft/events/BlockEventHandler.java @@ -1,60 +1,59 @@ -/** - * - */ -package darkknight.jewelrycraft.events; - -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.ItemPickaxe; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import darkknight.jewelrycraft.api.Curse; -import darkknight.jewelrycraft.block.BlockMidasTouch; -import darkknight.jewelrycraft.tileentity.TileEntityMidasTouch; -import darkknight.jewelrycraft.util.PlayerUtils; -import darkknight.jewelrycraft.util.Variables; - -/** - * @author Sorin - */ -public class BlockEventHandler -{ - @SubscribeEvent - public void onBlockDestroyed(BlockEvent.BreakEvent event) - { - if (event.getPlayer() != null){ - ItemStack item = event.getPlayer().inventory.getCurrentItem(); - if (event.block instanceof BlockMidasTouch && item != null && item.getItem().getHarvestLevel(item, "pickaxe") >= event.block.getHarvestLevel(event.blockMetadata)){ - TileEntityMidasTouch te = (TileEntityMidasTouch)event.world.getTileEntity(event.x, event.y, event.z); - if (te.target != null) dropItem(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord, new ItemStack(Items.gold_nugget, (int)(te.target.width * te.target.height * 100), 0)); - } - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(event.getPlayer(), Variables.MODID); - for(Curse curse: Curse.getCurseList()) - if (playerInfo.getInteger(curse.getName()) > 0) curse.onBlockDestroyed(event.getPlayer(), event); - } - } - - @SubscribeEvent - public void onBlockItemsDrop(BlockEvent.HarvestDropsEvent event) - { - EntityPlayer player = event.harvester; - if (player != null){ - NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); - for(Curse curse: Curse.getCurseList()) - if (playerInfo.getInteger(curse.getName()) > 0) curse.onBlockItemsDrop(player, event); - } - } - - public void dropItem(World world, double x, double y, double z, ItemStack stack) - { - EntityItem entityitem = new EntityItem(world, x + 0.5D, y + 0.5D, z + 0.5D, stack); - entityitem.motionX = 0; - entityitem.motionZ = 0; - entityitem.motionY = 0.11000000298023224D; - world.spawnEntityInWorld(entityitem); - } -} +/** + * + */ +package darkknight.jewelrycraft.events; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import darkknight.jewelrycraft.api.Curse; +import darkknight.jewelrycraft.block.BlockMidasTouch; +import darkknight.jewelrycraft.tileentity.TileEntityMidasTouch; +import darkknight.jewelrycraft.util.PlayerUtils; +import darkknight.jewelrycraft.util.Variables; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +/** + * @author Sorin + */ +public class BlockEventHandler +{ + @SubscribeEvent + public void onBlockDestroyed(BlockEvent.BreakEvent event) + { + if (event.getPlayer() != null){ + ItemStack item = event.getPlayer().inventory.getCurrentItem(); + if (event.block instanceof BlockMidasTouch && item != null && item.getItem().getHarvestLevel(item, "pickaxe") >= event.block.getHarvestLevel(event.blockMetadata)){ + TileEntityMidasTouch te = (TileEntityMidasTouch)event.world.getTileEntity(event.x, event.y, event.z); + if (te.target != null) dropItem(te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord, new ItemStack(Items.gold_nugget, (int)(te.target.width * te.target.height * 100), 0)); + } + NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(event.getPlayer(), Variables.MODID); + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0) curse.onBlockDestroyed(event.getPlayer(), event); + } + } + + @SubscribeEvent + public void onBlockItemsDrop(BlockEvent.HarvestDropsEvent event) + { + EntityPlayer player = event.harvester; + if (player != null){ + NBTTagCompound playerInfo = PlayerUtils.getModPlayerPersistTag(player, Variables.MODID); + for(Curse curse: Curse.getCurseList()) + if (playerInfo.getInteger(curse.getName()) > 0) curse.onBlockItemsDrop(player, event); + } + } + + public void dropItem(World world, double x, double y, double z, ItemStack stack) + { + EntityItem entityitem = new EntityItem(world, x + 0.5D, y + 0.5D, z + 0.5D, stack); + entityitem.motionX = 0; + entityitem.motionZ = 0; + entityitem.motionY = 0.11000000298023224D; + world.spawnEntityInWorld(entityitem); + } +} diff --git a/src/main/java/darkknight/jewelrycraft/events/BucketHandler.java b/src/main/java/darkknight/jewelrycraft/events/BucketHandler.java index 38e60a5..9aae0d7 100644 --- a/src/main/java/darkknight/jewelrycraft/events/BucketHandler.java +++ b/src/main/java/darkknight/jewelrycraft/events/BucketHandler.java @@ -12,7 +12,6 @@ import java.util.Map; import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import darkknight.jewelrycraft.block.BlockMoltenMetal; -import darkknight.jewelrycraft.tileentity.TileEntityMoltenMetal; import darkknight.jewelrycraft.util.JewelryNBT; import net.minecraft.block.Block; import net.minecraft.init.Blocks; diff --git a/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java b/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java index c3b35a9..9d9a3bd 100644 --- a/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java +++ b/src/main/java/darkknight/jewelrycraft/events/EntityEventHandler.java @@ -1,11 +1,11 @@ package darkknight.jewelrycraft.events; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; + 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.api.Curse; import darkknight.jewelrycraft.api.IJewelryItem; @@ -22,6 +22,7 @@ import darkknight.jewelrycraft.potions.PotionBase; import darkknight.jewelrycraft.potions.PotionList; import darkknight.jewelrycraft.random.WeightedRandomCurse; import darkknight.jewelrycraft.util.BlockUtils; +import darkknight.jewelrycraft.util.EntitySelector; import darkknight.jewelrycraft.util.JewelrycraftUtil; import darkknight.jewelrycraft.util.PlayerUtils; import darkknight.jewelrycraft.util.Variables; @@ -39,7 +40,6 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.util.WeightedRandom; -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; @@ -48,330 +48,343 @@ import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.player.PlayerEvent; -public class EntityEventHandler { - int updateTime = 0, totalUnavailableCurses = 0; - boolean addedCurses = false; - Random rand = new Random(); - - @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); - } - } - - /** - * @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); - } - - 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(3.0D, 0.0D, 3.0D); - List enemies = player.worldObj.getEntitiesWithinAABBExcludingEntity(player, axisalignedbb); - 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, 0.5f * event.ammount); - } - } - 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()); - } - - @SubscribeEvent - public void onEntityDead(LivingDeathEvent event) { - final Entity entity = event.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 (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); - } - } - } - 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.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); + } + 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()); + } } diff --git a/src/main/java/darkknight/jewelrycraft/events/EventCommonHandler.java b/src/main/java/darkknight/jewelrycraft/events/EventCommonHandler.java index dea04f9..4430f5f 100644 --- a/src/main/java/darkknight/jewelrycraft/events/EventCommonHandler.java +++ b/src/main/java/darkknight/jewelrycraft/events/EventCommonHandler.java @@ -1,27 +1,22 @@ -package darkknight.jewelrycraft.events; - -import net.minecraft.nbt.NBTTagCompound; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.PlayerEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.common.gameevent.TickEvent.Phase; -import cpw.mods.fml.relauncher.Side; -import darkknight.jewelrycraft.util.PlayerUtils; -import darkknight.jewelrycraft.util.Variables; - -/** - * @author Sorin - * - */ -public class EventCommonHandler -{ - @SubscribeEvent - public void onItemCrafted(PlayerEvent.ItemCraftedEvent event) - { - } - - @SubscribeEvent - public void onPlayerTick(TickEvent.PlayerTickEvent event) - { - } -} +package darkknight.jewelrycraft.events; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent; +import cpw.mods.fml.common.gameevent.TickEvent; + +/** + * @author Sorin + * + */ +public class EventCommonHandler +{ + @SubscribeEvent + public void onItemCrafted(PlayerEvent.ItemCraftedEvent event) + { + } + + @SubscribeEvent + public void onPlayerTick(TickEvent.PlayerTickEvent event) + { + } +} diff --git a/src/main/java/darkknight/jewelrycraft/events/EventList.java b/src/main/java/darkknight/jewelrycraft/events/EventList.java index 5520b87..4955cbb 100644 --- a/src/main/java/darkknight/jewelrycraft/events/EventList.java +++ b/src/main/java/darkknight/jewelrycraft/events/EventList.java @@ -1,52 +1,51 @@ -/** - * - */ -package darkknight.jewelrycraft.events; - -import net.minecraftforge.common.MinecraftForge; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import darkknight.jewelrycraft.JewelrycraftMod; -import darkknight.jewelrycraft.block.BlockList; -import darkknight.jewelrycraft.client.gui.GuiHandler; -import darkknight.jewelrycraft.config.ConfigHandler; -import darkknight.jewelrycraft.damage.DamageSourceList; -import darkknight.jewelrycraft.effects.EffectsList; -import darkknight.jewelrycraft.item.ItemList; -import darkknight.jewelrycraft.util.JewelrycraftUtil; -import darkknight.jewelrycraft.worldGen.Generation; - -public class EventList -{ - public static void preInit(FMLPreInitializationEvent e) - { - MinecraftForge.EVENT_BUS.register(new EntityEventHandler()); - MinecraftForge.EVENT_BUS.register(new BlockEventHandler()); - MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); - FMLCommonHandler.instance().bus().register(new EventCommonHandler()); - BucketHandler.INSTANCE.buckets.put(BlockList.moltenMetal, ItemList.bucket); - JewelrycraftMod.proxy.preInit(); - } - - public static void init(FMLInitializationEvent e) - { - GameRegistry.registerWorldGenerator(new Generation(), 0); - JewelrycraftMod.proxy.init(); - new GuiHandler(); - FMLCommonHandler.instance().bus().register(ConfigHandler.INSTANCE); - } - - public static void postInit(FMLPostInitializationEvent e) - { - JewelrycraftUtil.addMetals(); - JewelrycraftUtil.jamcrafters(); - EffectsList.postInit(e); - DamageSourceList.postInit(e); - JewelrycraftMod.proxy.postInit(); - JewelrycraftUtil.addStuff(); - } -} +/** + * + */ +package darkknight.jewelrycraft.events; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import darkknight.jewelrycraft.JewelrycraftMod; +import darkknight.jewelrycraft.block.BlockList; +import darkknight.jewelrycraft.client.gui.GuiHandler; +import darkknight.jewelrycraft.config.ConfigHandler; +import darkknight.jewelrycraft.damage.DamageSourceList; +import darkknight.jewelrycraft.effects.EffectsList; +import darkknight.jewelrycraft.item.ItemList; +import darkknight.jewelrycraft.util.JewelrycraftUtil; +import darkknight.jewelrycraft.worldGen.Generation; +import net.minecraftforge.common.MinecraftForge; + +public class EventList +{ + public static void preInit(FMLPreInitializationEvent e) + { + MinecraftForge.EVENT_BUS.register(new EntityEventHandler()); + MinecraftForge.EVENT_BUS.register(new BlockEventHandler()); + MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); + FMLCommonHandler.instance().bus().register(new EventCommonHandler()); + BucketHandler.INSTANCE.buckets.put(BlockList.moltenMetal, ItemList.bucket); + JewelrycraftMod.proxy.preInit(); + } + + public static void init(FMLInitializationEvent e) + { + GameRegistry.registerWorldGenerator(new Generation(), 0); + JewelrycraftMod.proxy.init(); + new GuiHandler(); + FMLCommonHandler.instance().bus().register(ConfigHandler.INSTANCE); + } + + public static void postInit(FMLPostInitializationEvent e) + { + JewelrycraftUtil.addMetals(); + JewelrycraftUtil.jamcrafters(); + EffectsList.postInit(e); + DamageSourceList.postInit(e); + JewelrycraftMod.proxy.postInit(); + JewelrycraftUtil.addStuff(); + } +} diff --git a/src/main/java/darkknight/jewelrycraft/events/KeyBindings.java b/src/main/java/darkknight/jewelrycraft/events/KeyBindings.java index 5104426..3e4a2c3 100644 --- a/src/main/java/darkknight/jewelrycraft/events/KeyBindings.java +++ b/src/main/java/darkknight/jewelrycraft/events/KeyBindings.java @@ -1,6 +1,5 @@ package darkknight.jewelrycraft.events; -import net.minecraft.client.settings.KeyBinding; import org.lwjgl.input.Keyboard; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -8,6 +7,7 @@ import cpw.mods.fml.common.gameevent.InputEvent; import darkknight.jewelrycraft.JewelrycraftMod; import darkknight.jewelrycraft.network.PacketKeyPressEvent; import darkknight.jewelrycraft.util.Variables; +import net.minecraft.client.settings.KeyBinding; public class KeyBindings { diff --git a/src/main/java/darkknight/jewelrycraft/events/PlayerRenderHandler.java b/src/main/java/darkknight/jewelrycraft/events/PlayerRenderHandler.java index 3ed98c9..f0fd1c2 100644 --- a/src/main/java/darkknight/jewelrycraft/events/PlayerRenderHandler.java +++ b/src/main/java/darkknight/jewelrycraft/events/PlayerRenderHandler.java @@ -1,27 +1,9 @@ package darkknight.jewelrycraft.events; -import java.nio.FloatBuffer; import java.util.Iterator; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockAir; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.Vec3; -import net.minecraftforge.client.event.RenderHandEvent; -import net.minecraftforge.client.event.RenderPlayerEvent; - -import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; - import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import darkknight.jewelrycraft.JewelrycraftMod; import darkknight.jewelrycraft.api.Curse; import darkknight.jewelrycraft.config.ConfigHandler; import darkknight.jewelrycraft.item.render.BraceletRender; @@ -30,6 +12,13 @@ import darkknight.jewelrycraft.item.render.NecklaceRender; import darkknight.jewelrycraft.item.render.RingRender; import darkknight.jewelrycraft.util.JewelryNBT; import darkknight.jewelrycraft.util.JewelrycraftUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.client.event.RenderHandEvent; +import net.minecraftforge.client.event.RenderPlayerEvent; public class PlayerRenderHandler { EarringsRender earrings = new EarringsRender(); @@ -42,7 +31,6 @@ public class PlayerRenderHandler { @SubscribeEvent public void renderScreen(RenderPlayerEvent.Specials.Post event) { GL11.glPushMatrix(); - ModelBiped main = event.renderer.modelBipedMain; ModelRenderer rightArm = event.renderer.modelBipedMain.bipedRightArm; ModelRenderer leftArm = event.renderer.modelBipedMain.bipedLeftArm; ModelRenderer head = event.renderer.modelBipedMain.bipedHead; diff --git a/src/main/java/darkknight/jewelrycraft/events/ScreenHandler.java b/src/main/java/darkknight/jewelrycraft/events/ScreenHandler.java index ca475d5..4b7553e 100644 --- a/src/main/java/darkknight/jewelrycraft/events/ScreenHandler.java +++ b/src/main/java/darkknight/jewelrycraft/events/ScreenHandler.java @@ -1,19 +1,15 @@ package darkknight.jewelrycraft.events; +import org.lwjgl.opengl.GL11; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import darkknight.jewelrycraft.util.Variables; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; -import net.minecraft.client.gui.GuiChat; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; -import org.lwjgl.opengl.GL11; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import darkknight.jewelrycraft.api.Curse; -import darkknight.jewelrycraft.config.ConfigHandler; -import darkknight.jewelrycraft.util.Variables; public class ScreenHandler extends Gui { private Minecraft mc; -- cgit v1.2.3