package minestrapteam.mods.minestrappolation.handlers; import minestrapteam.mods.minestrappolation.Config; import minestrapteam.mods.minestrappolation.Minestrappolation; import minestrapteam.mods.minestrappolation.block.BlockSoul; import minestrapteam.mods.minestrappolation.block.machines.BlockFrostGenerator; import minestrapteam.mods.minestrappolation.lib.MAchievements; import minestrapteam.mods.minestrappolation.lib.MBlocks; import minestrapteam.mods.minestrappolation.lib.MItems; import minestrapteam.mods.minestrappolation.lib.MReference; import minestrapteam.mods.minestrappolation.util.ChunkHelper; import minestrapteam.mods.minestrappolation.util.NBTHelper; import minestrapteam.mods.minestrappolation.util.PlayerHelper; import minestrapteam.mods.minestrappolation.util.VersionChecker; import minestrapteam.mods.minestrappolation.world.MBiomeManager; import net.minecraft.block.BlockDoublePlant; import net.minecraft.block.BlockNetherWart; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.stats.AchievementList; import net.minecraft.util.BlockPos; import net.minecraft.world.World; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.FillBucketEvent; import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.eventhandler.Event.Result; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.Random; public class MEventHandler { @SubscribeEvent public void onPlayerJoin(EntityJoinWorldEvent event) { VersionChecker check = new VersionChecker(MReference.VERSION, "https://raw.githubusercontent.com/MinestrapTeam/Minestrappolation-4/master/version.txt", MReference.NAME); if (event.entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.entity; NBTTagCompound nbt = NBTHelper.getPersistedPlayerTag(player); if (!event.world.isRemote) { if (event.world.isRemote == false && Config.checkForUpdates) { if (Minestrappolation.hasCheckedVersion == false) { check.run(); event.entity.addChatMessage(VersionChecker.uptoDate); event.entity.addChatMessage(VersionChecker.motd); Minestrappolation.hasCheckedVersion = true; } } player.addStat(MAchievements.minestrapp, 1); } player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(Config.healthStarting); if (nbt.hasKey("health")) { player.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(nbt.getDouble("health")); } } } @SubscribeEvent public void onBlockBreak(BlockEvent.BreakEvent event) { Random rand = new Random(); if (event.state.getBlock() instanceof BlockNetherWart) { BlockNetherWart wart = (BlockNetherWart) event.state.getBlock(); IBlockState ground = event.world.getBlockState(event.pos.add(0, -1, 0)); ItemStack item = new ItemStack(MItems.soul_gem); EntityItem eitem = new EntityItem(event.world, event.pos.getX(), event.pos.getY(), event.pos.getZ(), item); if (rand.nextInt(100) < Config.soulGemDropChance && event.state.getValue(BlockNetherWart.AGE) == 3 && ground.getBlock() == MBlocks.soul_ore) { event.world.spawnEntityInWorld(eitem); } } if (event.state.getBlock() instanceof BlockSoul) { ItemStack stack = event.getPlayer().getHeldItem(); if (stack.canHarvestBlock(event.state.getBlock())) { stack.damageItem(Config.soulBlockDamage, event.getPlayer()); } } if (event.state == Blocks.red_flower.getStateFromMeta(2)) { ItemStack item = new ItemStack(MBlocks.onion); EntityItem eitem = new EntityItem(event.world, event.pos.getX(), event.pos.getY(), event.pos.getZ(), item); if (rand.nextInt(100) < Config.onionSeedChance) { event.world.spawnEntityInWorld(eitem); } } if (event.state == Blocks.tallgrass.getStateFromMeta(2)) { ItemStack item = new ItemStack(MBlocks.tomato_seed); EntityItem eitem = new EntityItem(event.world, event.pos.getX(), event.pos.getY(), event.pos.getZ(), item); if (rand.nextInt(100) < Config.tomatoSeedChance) { event.world.spawnEntityInWorld(eitem); } } if (event.state.getBlock() == Blocks.double_plant) { if (event.state.getValue(BlockDoublePlant.VARIANT) == BlockDoublePlant.EnumPlantType.GRASS) { ItemStack item = new ItemStack(MBlocks.corn); EntityItem eitem = new EntityItem(event.world, event.pos.getX(), event.pos.getY(), event.pos.getZ(), item); if (rand.nextInt(100) < Config.cornSeedChance) { event.world.spawnEntityInWorld(eitem); } } } if (event.state.getBlock() == Blocks.bedrock) { ItemStack stack = event.getPlayer().getHeldItem(); if (stack.canHarvestBlock(event.state.getBlock())) { stack.damageItem(Config.bedrockBlockDamage, event.getPlayer()); } EntityPlayer player = event.getPlayer(); player.addStat(MAchievements.bedrock, 1); } } @SubscribeEvent public void onBlockHarvest(BlockEvent.HarvestDropsEvent event) { EntityPlayer player = event.harvester; if (player != null) { if (player.getHeldItem() != null && (player.getHeldItem().getItem() == MItems.fire_pickaxe || player.getHeldItem().getItem() == MItems.fire_axe || player.getHeldItem().getItem() == MItems.fire_shovel)) { if (FurnaceRecipes.instance().getSmeltingResult(new ItemStack(event.state.getBlock())) != null && FurnaceRecipes.instance().getSmeltingResult(new ItemStack(event.state.getBlock())).getItem() != event.drops.get(0).getItem()) { if ((event.state.getBlock().getHarvestTool(event.state) == "pickaxe" && player.getHeldItem().getItem() == MItems.fire_pickaxe) || (event.state.getBlock().getHarvestTool( event.state) == "axe" && player.getHeldItem() .getItem() == MItems.fire_axe) || (event.state.getBlock().getHarvestTool(event.state) == "shovel" && player.getHeldItem().getItem() == MItems.fire_shovel)) { ItemStack stack = FurnaceRecipes.instance() .getSmeltingResult(new ItemStack(event.state.getBlock())); event.drops.clear(); event.drops.add(stack.copy()); } } } } } @SubscribeEvent public void playerUpdate(LivingUpdateEvent event) { if (event.entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.entity; World worldIn = player.worldObj; BlockPos pos = player.getPosition().down(); if (PlayerHelper.hasArmorSet(player, MItems.meurodite_helmet, MItems.meurodite_chestplate, MItems.meurodite_leggings, MItems.meurodite_boots)) { player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 2, 0, true, false)); if (player.isInLava() || player.isBurning()) { if (player.worldObj.rand.nextInt(100) == 1 && !player.capabilities.isCreativeMode) player.inventory.damageArmor(1); } } else if (PlayerHelper .hasArmorSet(player, MItems.torite_helmet, MItems.torite_chestplate, MItems.torite_leggings, MItems.torite_boots)) { player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 2, 0, true, false)); } else if (PlayerHelper.hasArmorSet(player, MItems.titanium_helmet, MItems.titanium_chestplate, MItems.titanium_leggings, MItems.titanium_boots)) { player.addPotionEffect(new PotionEffect(Potion.resistance.id, 2, 1, true, false)); } else if (PlayerHelper.hasArmorSet(player, MItems.ice_helmet, MItems.ice_chestplate, MItems.ice_leggings, MItems.ice_boots)) { if (BlockFrostGenerator.canFreeze.containsKey(worldIn.getBlockState(pos))) worldIn.setBlockState(pos, BlockFrostGenerator.canFreeze.get(worldIn.getBlockState(pos))); if (BlockFrostGenerator.canFreeze.containsKey(worldIn.getBlockState(pos.north()))) worldIn.setBlockState(pos.north(), BlockFrostGenerator.canFreeze.get(worldIn.getBlockState(pos.north()))); if (BlockFrostGenerator.canFreeze.containsKey(worldIn.getBlockState(pos.east()))) worldIn.setBlockState(pos.east(), BlockFrostGenerator.canFreeze.get(worldIn.getBlockState(pos.east()))); if (BlockFrostGenerator.canFreeze.containsKey(worldIn.getBlockState(pos.south()))) worldIn.setBlockState(pos.south(), BlockFrostGenerator.canFreeze.get(worldIn.getBlockState(pos.south()))); if (BlockFrostGenerator.canFreeze.containsKey(worldIn.getBlockState(pos.west()))) worldIn.setBlockState(pos.west(), BlockFrostGenerator.canFreeze.get(worldIn.getBlockState(pos.west()))); } if (ChunkHelper.getChunkBiomeForEntity(player).equals(MBiomeManager.frost.biomeName) && Config.frostSpeedEffect && !player.capabilities.isCreativeMode) { player.addStat(MAchievements.frost, 1); ItemStack helmet = player.getCurrentArmor(3); ItemStack chest = player.getCurrentArmor(2); ItemStack pants = player.getCurrentArmor(1); ItemStack boots = player.getCurrentArmor(0); if (helmet == null || chest == null || pants == null || boots == null) { player.motionX *= .75; player.motionZ *= .75; } } if (player.inventory.hasItem(MItems.diamond_dust)) { player.addStat(MAchievements.diamond_dust, 1); } if (player.inventory.hasItem(Items.bread)) { player.addStat(AchievementList.makeBread, 1); } } else { if (ChunkHelper.getChunkBiomeForEntity(event.entity).equals(MBiomeManager.frost) && Config.frostSpeedEffect) { event.entity.motionX *= .75; event.entity.motionZ *= .75; } } } @SubscribeEvent public void onDamage(LivingHurtEvent event) { if (event.entityLiving instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.entityLiving; if ("fall".equals(event.source.damageType)) { if (player.inventory.hasItem(MItems.amuletPullum)) { event.setCanceled(true); int slot = this.getItemsSlot(player, MItems.amuletPullum); ItemStack stack = player.inventory.getStackInSlot(slot); if (stack.getItemDamage() >= stack.getMaxDamage() || stack.getItemDamage() + (int) event.ammount > stack.getMaxDamage()) { player.inventory.setInventorySlotContents(slot, null); } stack.damageItem((int) event.ammount, player); } } else { if (("mob".equals(event.source.damageType) || "player".equals(event.source.damageType)) && PlayerHelper .hasArmorSet( player, MItems.blazium_helmet, MItems.blazium_chestplate, MItems.blazium_leggings, MItems.blazium_boots)) { player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 2, 0, true, false)); Entity living = event.source.getEntity(); living.setFire(5); } if (player.inventory.hasItem(MItems.amuletOves)) { int slot = this.getItemsSlot(player, MItems.amuletOves); ItemStack stack = player.inventory.getStackInSlot(slot); if (stack.getItemDamage() >= stack.getMaxDamage() || stack.getItemDamage() + (int) event.ammount > stack.getMaxDamage()) { player.inventory.setInventorySlotContents(slot, null); } if (player.getRNG().nextInt(8) == 0) { event.setCanceled(true); stack.damageItem((int) event.ammount, player); } } } } } @SubscribeEvent public void onBucketFill(FillBucketEvent event) { IBlockState block = event.world.getBlockState(event.target.getBlockPos()); if (block.getBlock() == MBlocks.magma) { event.result = new ItemStack(MBlocks.magmaBucket); event.world.setBlockToAir(event.target.getBlockPos()); event.setResult(Result.ALLOW); } } private int getItemsSlot(EntityPlayer player, Item item) { for (int i = 0; i < player.inventory.mainInventory.length; ++i) { if (player.inventory.mainInventory[i] != null && player.inventory.mainInventory[i].getItem() == item) { return i; } } return -1; } }