From 3eb8c7a8fca3f22475d53e30f0b90a6737f313fa Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Thu, 24 May 2018 15:53:20 -0400 Subject: Initial commit --- .../main/java/fyresmodjam/blocks/BlockCrystal.java | 82 ++++ .../java/fyresmodjam/blocks/BlockCrystalStand.java | 46 ++ .../fyresmodjam/blocks/BlockMysteryMushroom.java | 182 ++++++++ .../main/java/fyresmodjam/blocks/BlockPillar.java | 355 ++++++++++++++++ .../main/java/fyresmodjam/blocks/BlockTrap.java | 466 +++++++++++++++++++++ 5 files changed, 1131 insertions(+) create mode 100755 YWD/src/main/java/fyresmodjam/blocks/BlockCrystal.java create mode 100755 YWD/src/main/java/fyresmodjam/blocks/BlockCrystalStand.java create mode 100755 YWD/src/main/java/fyresmodjam/blocks/BlockMysteryMushroom.java create mode 100755 YWD/src/main/java/fyresmodjam/blocks/BlockPillar.java create mode 100755 YWD/src/main/java/fyresmodjam/blocks/BlockTrap.java (limited to 'YWD/src/main/java/fyresmodjam/blocks') diff --git a/YWD/src/main/java/fyresmodjam/blocks/BlockCrystal.java b/YWD/src/main/java/fyresmodjam/blocks/BlockCrystal.java new file mode 100755 index 0000000..24d76d2 --- /dev/null +++ b/YWD/src/main/java/fyresmodjam/blocks/BlockCrystal.java @@ -0,0 +1,82 @@ +package fyresmodjam.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fyresmodjam.ModjamMod; +import fyresmodjam.items.ItemCrystal; +import fyresmodjam.tileentities.TileEntityCrystal; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockCrystal extends BlockContainer { + + public BlockCrystal() { + super(Material.glass); + setBlockBounds(0.25F, 0.1F, 0.25F, 0.75F, 0.9F, 0.75F); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + blockIcon = ((ItemCrystal) ModjamMod.crystalItem).texture; + } + + @Override + public boolean canHarvestBlock(EntityPlayer player, int i) { + return false; + } + + @Override + public TileEntity createNewTileEntity(World world, int i) { + return new TileEntityCrystal(); + } + + @Override + public boolean hasTileEntity(int meta) { + return true; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess blockAccess, + int i, int i2, int i3, int i4) { + return false; + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition object, + World par1World, int par2, int par3, int par4) { + return new ItemStack(ModjamMod.crystalItem); + } + + @Override + public int getDamageValue(World world, int i, int i2, int i3) { + return world.getBlockMetadata(i, i2, i3); + } + + @Override + public void onBlockPlacedBy(World par1World, int par2, int par3, + int par4, EntityLivingBase par5EntityLivingBase, + ItemStack par6ItemStack) { + par1World.setBlockMetadataWithNotify(par2, par3, par4, + par6ItemStack.getItemDamage(), 0); + } + + @Override + public int getLightValue(IBlockAccess world, int x, int y, int z) { + return 10; + } +} diff --git a/YWD/src/main/java/fyresmodjam/blocks/BlockCrystalStand.java b/YWD/src/main/java/fyresmodjam/blocks/BlockCrystalStand.java new file mode 100755 index 0000000..9855dd4 --- /dev/null +++ b/YWD/src/main/java/fyresmodjam/blocks/BlockCrystalStand.java @@ -0,0 +1,46 @@ +package fyresmodjam.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fyresmodjam.tileentities.TileEntityCrystalStand; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockCrystalStand extends BlockContainer { + + public BlockCrystalStand() { + super(Material.rock); + setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + @Override + public boolean canHarvestBlock(EntityPlayer player, int i) { + return false; + } + + @Override + public TileEntity createNewTileEntity(World world, int i) { + return new TileEntityCrystalStand(); + } + + @Override + public boolean hasTileEntity(int meta) { + return true; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess blockAccess, + int i, int i2, int i3, int i4) { + return false; + } +} diff --git a/YWD/src/main/java/fyresmodjam/blocks/BlockMysteryMushroom.java b/YWD/src/main/java/fyresmodjam/blocks/BlockMysteryMushroom.java new file mode 100755 index 0000000..e738c94 --- /dev/null +++ b/YWD/src/main/java/fyresmodjam/blocks/BlockMysteryMushroom.java @@ -0,0 +1,182 @@ +package fyresmodjam.blocks; + +import java.util.List; +import java.util.Random; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fyresmodjam.ModjamMod; +import fyresmodjam.handlers.NewPacketHandler; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFlower; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockMysteryMushroom extends BlockFlower { + + public IIcon icon; + public IIcon overlay; + + public BlockMysteryMushroom() { + super(0); + float f = 0.2F; + setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, + f * 2.0F, 0.5F + f); + setTickRandomly(true); + setCreativeTab(null); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + icon = par1IconRegister + .registerIcon("fyresmodjam:mushroomBlock"); + overlay = par1IconRegister.registerIcon( + "fyresmodjam:mushroomBlock_overlay"); + blockIcon = icon; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int par1, int par2) { + return renderPass == 0 ? icon : overlay; + } + + @Override + public void updateTick(World par1World, int par2, int par3, + int par4, Random par5Random) { + if (par5Random.nextInt(25) == 0) { + byte b0 = 4; + int l = 5; + int i1; + int j1; + int k1; + + for (i1 = par2 - b0; i1 <= par2 + b0; ++i1) { + for (j1 = par4 - b0; j1 <= par4 + + b0; ++j1) { + for (k1 = par3 - 1; k1 <= par3 + + 1; ++k1) { + if (par1World.getBlock(i1, + k1, + j1) == this) { + --l; + + if (l <= 0) { + return; + } + } + } + } + } + + i1 = par2 + par5Random.nextInt(3) - 1; + j1 = par3 + par5Random.nextInt(2) + - par5Random.nextInt(2); + k1 = par4 + par5Random.nextInt(3) - 1; + + for (int l1 = 0; l1 < 4; ++l1) { + if (par1World.isAirBlock(i1, j1, k1) + && canBlockStay(par1World, + i1, j1, + k1)) { + par2 = i1; + par3 = j1; + par4 = k1; + } + + i1 = par2 + par5Random.nextInt(3) - 1; + j1 = par3 + par5Random.nextInt(2) + - par5Random.nextInt(2); + k1 = par4 + par5Random.nextInt(3) - 1; + } + + if (par1World.isAirBlock(i1, j1, k1) + && canBlockStay(par1World, i1, j1, + k1)) { + par1World.setBlock(i1, j1, k1, this, + par1World.getBlockMetadata( + par2, par3, + par4), + 2); + } + } + } + + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, + int par4) { + return super.canPlaceBlockAt(par1World, par2, par3, par4) + && canBlockStay(par1World, par2, par3, + par4); + } + + @Override + public boolean canBlockStay(World par1World, int par2, int par3, + int par4) { + if (par3 >= 0 && par3 < 256) { + Block soil = par1World.getBlock(par2, par3 - 1, + par4); + return (soil != null && soil.canSustainPlant( + par1World, par2, par3 - 1, par4, + ForgeDirection.UP, this)); + } else { + return false; + } + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, + List par3List) { + for (int i = 0; i < 13; i++) { + par3List.add(new ItemStack(par1, 1, i)); + } + } + + @Override + public int damageDropped(int par1) { + return par1 % 13; + } + + @Override + @SideOnly(Side.CLIENT) + public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, + int par3, int par4) { + return NewPacketHandler.mushroomColors[par1IBlockAccess + .getBlockMetadata(par2, par3, + par4)][renderPass]; + } + + public static int renderPass; + + @Override + public boolean canRenderInPass(int pass) { + renderPass = pass; + return true; + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition object, + World par1World, int par2, int par3, int par4) { + return new ItemStack(ModjamMod.mysteryMushroom); + } + + @Override + public Item getItemDropped(int p_149650_1_, Random p_149650_2_, + int p_149650_3_) { + return ModjamMod.mysteryMushroom; + } + + @Override + public int getRenderBlockPass() { + return 1; + } +} diff --git a/YWD/src/main/java/fyresmodjam/blocks/BlockPillar.java b/YWD/src/main/java/fyresmodjam/blocks/BlockPillar.java new file mode 100755 index 0000000..a80d099 --- /dev/null +++ b/YWD/src/main/java/fyresmodjam/blocks/BlockPillar.java @@ -0,0 +1,355 @@ +package fyresmodjam.blocks; + +import java.util.Random; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fyresmodjam.ModjamMod; +import fyresmodjam.blessings.BlessingUtils; +import fyresmodjam.handlers.NewPacketHandler; +import fyresmodjam.misc.ConfigData; +import fyresmodjam.misc.EntityStatHelper; +import fyresmodjam.tileentities.TileEntityPillar; +import fyresmodjam.worldgen.WorldGenTrapsTowersAndMore; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockPillar extends BlockContainer { + + public BlockPillar() { + super(Material.rock); + setLightOpacity(0); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + blockIcon = par1IconRegister + .registerIcon("fyresmodjam:pillar"); + } + + public int idDropped(int par1, Random par2Random, int par3) { + return 0; + } + + @Override + public int getDamageValue(World par1World, int par2, int par3, + int par4) { + int damage = 0; + + if (ConfigData.showAllPillarsInCreative) { + int meta = par1World.getBlockMetadata(par2, par3, + par4); + TileEntity te = par1World.getTileEntity(par2, + par3 - (meta == 1 ? 1 : 0), par4); + + if (te != null && te instanceof TileEntityPillar) { + TileEntityPillar pte = (TileEntityPillar) te; + + int i = 0; + for (String blessingName : BlessingUtils.playerBlessings + .keySet()) { + if (pte.blessing.equals( + blessingName)) { + damage = i + 1; + break; + } + + i += 1; + } + } + } + + return damage; + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition object, + World par1World, int par2, int par3, int par4) { + return new ItemStack(ModjamMod.itemPillar); + } + + @Override + public boolean canHarvestBlock(EntityPlayer par1EntityPlayer, + int par2) { + return false; + } + + @Override + public boolean onBlockActivated(World par1World, int par2, + int par3, int par4, EntityPlayer par5EntityPlayer, + int par6, float par7, float par8, float par9) { + if (par1World.getBlockMetadata(par2, par3, par4) + % 2 == 1) { + par3--; + } + + TileEntity te = par1World.getTileEntity(par2, par3, par4); + + if (par5EntityPlayer.getHeldItem() == null + || par5EntityPlayer.getHeldItem() + .getItem() == null + || par5EntityPlayer.getHeldItem() + .getItemDamage() != 1 + || par5EntityPlayer.getHeldItem() + .getItem() != ModjamMod.sceptre) { + if (te != null && te instanceof TileEntityPillar + && (!BlessingUtils.hasBlessing( + par5EntityPlayer) + || !BlessingUtils + .hasBlessing(par5EntityPlayer, + ((TileEntityPillar) te).blessing))) { + + boolean skip = false; + + for (int i = 0; i < par1World.loadedEntityList + .size(); i++) { + Entity e = (Entity) par1World.loadedEntityList + .get(i); + + if (e instanceof EntityMob) { + double xDiff = par2 + - e.posX; + double yDiff = par3 + - e.posY; + double zDiff = par4 + - e.posZ; + + if (Math.abs(yDiff) > 4) { + continue; + } + + double dist = Math.sqrt( + xDiff * xDiff + yDiff + * yDiff + + zDiff * zDiff); + + if (dist <= 14) { + skip = true; + } + } + } + + if (!skip) { + if (((TileEntityPillar) te).blessing != null) { + EntityStatHelper.giveStat( + par5EntityPlayer, + "Blessing", + ((TileEntityPillar) te).blessing); + EntityStatHelper.giveStat( + par5EntityPlayer, + "BlessingActive", + false); + EntityStatHelper.giveStat( + par5EntityPlayer, + "BlessingCounter", + 0); + EntityStatHelper.giveStat( + par5EntityPlayer, + "BlessingCooldown", + 0); + + if (!par1World.isRemote) { + par1World.playSoundAtEntity( + par5EntityPlayer, + "fyresmodjam:pillarActivated", + 1.0F, + 1.0F); + NewPacketHandler.SEND_MESSAGE + .sendToPlayer(par5EntityPlayer, + "Activated " + + BlessingUtils.getBlessingInstance( + ((TileEntityPillar) te).blessing) + .customName() + + "."); + } + } + } else if (!par1World.isRemote) { + NewPacketHandler.SEND_MESSAGE + .sendToPlayer(par5EntityPlayer, + "\u00A7cCannot activate pillar with monsters nearby!"); + } + } + } else if (!par1World.isRemote) { + int damage = 0; + + if (te != null && te instanceof TileEntityPillar) { + TileEntityPillar pte = (TileEntityPillar) te; + + int i = 0; + for (String blessingName : BlessingUtils.playerBlessings + .keySet()) { + if (pte.blessing.equals( + blessingName)) { + damage = i + 1; + break; + } + + i += 1; + } + } + + if (!par5EntityPlayer.capabilities.isCreativeMode) { + par5EntityPlayer.getHeldItem().stackSize--; + } + par1World.spawnEntityInWorld(new EntityItem( + par1World, par2 + 0.5F, + par3 + 0.5F, par4 + 0.5F, + new ItemStack(ModjamMod.itemPillar, + 1, damage))); + par1World.setBlockToAir(par2, par3, par4); + + NewPacketHandler.SEND_MESSAGE.sendToPlayer( + par5EntityPlayer, + "\u00A7e\u00A7oThe pillar deconstructs before you."); + } + + return true; + } + + @Override + public void onNeighborBlockChange(World par1World, int par2, + int par3, int par4, Block par5) { + super.onNeighborBlockChange(par1World, par2, par3, par4, + par5); + + if (!par1World.isRemote + && !WorldGenTrapsTowersAndMore.genning) { + int i1 = par1World.getBlockMetadata(par2, par3, + par4); + + if (i1 % 2 == 0) { + if (par1World.isAirBlock(par2, par3 + 1, + par4) + || par1World.getBlock(par2, + par3 + 1, + par4) != par1World + .getBlock(par2, par3, + par4)) { + par1World.setBlockToAir(par2, par3, + par4); + } + } else if (par1World.isAirBlock(par2, par3 - 1, + par4) + || par1World.getBlock(par2, + par3 - 1, + par4) != par1World + .getBlock(par2, par3, + par4)) { + par1World.setBlockToAir(par2, par3, par4); + } + } + } + + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, + int par4) { + return par3 >= 255 ? false + : (super.canPlaceBlockAt(par1World, par2, + par3, par4) + && super.canPlaceBlockAt( + par1World, + par2, + par3 + 1, + par4)); + } + + @Override + public void setBlockBoundsBasedOnState( + IBlockAccess par1IBlockAccess, int par2, int par3, + int par4) { + int l = par1IBlockAccess.getBlockMetadata(par2, par3, + par4); + + if (l % 2 == 0) { + setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F); + } else { + setBlockBounds(0.0F, -1.0F, 0.0F, 1.0F, 1.0F, + 1.0F); + } + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, + int par2, int par3, int par4, int par5) { + return false; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return metadata % 2 == 0; + } + + @Override + public TileEntity createNewTileEntity(World world, int i) { + return new TileEntityPillar(); + } + + @Override + public int getMobilityFlag() { + return 2; + } + + @Override + public void onBlockHarvested(World par1World, int par2, int par3, + int par4, int par5, + EntityPlayer par6EntityPlayer) { + if (par6EntityPlayer.capabilities.isCreativeMode + && par5 >= 2 && par1World.getBlock(par2, + par3 - 1, par4) == this) { + par1World.setBlockToAir(par2, par3 - 1, par4); + } else { + super.onBlockHarvested(par1World, par2, par3, par4, + par5, par6EntityPlayer); + } + } + + @Override + @SideOnly(Side.CLIENT) + public int getLightValue(IBlockAccess world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + TileEntity te = world.getTileEntity(x, y, z); + + if (block != null && block != this) { + return block.getLightValue(world, x, y, z); + } + + if (ConfigData.pillarGlow && net.minecraft.client.Minecraft + .getMinecraft().theWorld != null + && net.minecraft.client.Minecraft + .getMinecraft().theWorld.isRemote) { + EntityPlayer player = net.minecraft.client.Minecraft + .getMinecraft().thePlayer; + + boolean blessingMatches = te instanceof TileEntityPillar + && ((TileEntityPillar) te).blessing != null + && BlessingUtils.hasBlessing( + player, + ((TileEntityPillar) te).blessing); + + if (player != null && te != null + && blessingMatches) { + return 4; + } + } + + return 0; + } +} diff --git a/YWD/src/main/java/fyresmodjam/blocks/BlockTrap.java b/YWD/src/main/java/fyresmodjam/blocks/BlockTrap.java new file mode 100755 index 0000000..1de921a --- /dev/null +++ b/YWD/src/main/java/fyresmodjam/blocks/BlockTrap.java @@ -0,0 +1,466 @@ +package fyresmodjam.blocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fyresmodjam.ModjamMod; +import fyresmodjam.blessings.BlessingUtils; +import fyresmodjam.handlers.CommonTickHandler; +import fyresmodjam.handlers.NewPacketHandler; +import fyresmodjam.items.ItemTrap; +import fyresmodjam.misc.ConfigData; +import fyresmodjam.tileentities.TileEntityTrap; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockTrap extends BlockContainer implements IShearable { + + public static int trapTypes = 3; + + public BlockTrap() { + super(Material.circuits); + setLightOpacity(0); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + blockIcon = par1IconRegister + .registerIcon("fyresmodjam:spikes2"); + } + + public int idDropped(int par1, Random par2Random, int par3) { + return 0; + } + + @Override + public ItemStack getPickBlock(MovingObjectPosition object, + World par1World, int par2, int par3, int par4) { + return new ItemStack(ModjamMod.blockTrap); + } + + @Override + public boolean canHarvestBlock(EntityPlayer par1EntityPlayer, + int par2) { + return false; + } + + @Override + public boolean onBlockActivated(World par1World, int par2, + int par3, int par4, EntityPlayer par5EntityPlayer, + int par6, float par7, float par8, float par9) { + if (par5EntityPlayer.getHeldItem() == null) { + TileEntity te = par1World.getTileEntity(par2, par3, + par4); + + if (!par5EntityPlayer.isSneaking() && te != null + && te instanceof TileEntityTrap + && ((TileEntityTrap) te).placedBy != null + && ((TileEntityTrap) te).placedBy + .equals(par5EntityPlayer + .getCommandSenderName())) { + if (!par1World.isRemote) { + ((TileEntityTrap) te).setting++; + if (((TileEntityTrap) te).setting >= TileEntityTrap.settings.length) { + ((TileEntityTrap) te).setting = 0; + } + + te.markDirty(); + + NewPacketHandler.SEND_MESSAGE + .sendToPlayer(par5EntityPlayer, + "\u00A7e\u00A7oSet to: " + + TileEntityTrap.settings[((TileEntityTrap) te).setting] + + "."); + } + } else if (par1World.isRemote) { + NewPacketHandler.DISARM_TRAP.sendToServer( + par2, par3, par4, + BlessingUtils.hasBlessing( + par5EntityPlayer, + "BlessingMechanic")); + } + } + + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, + int par2, int par3, int par4, int par5) { + return false; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int i) { + return new TileEntityTrap(); + } + + @Override + public int getMobilityFlag() { + return 2; + } + + @Override + public void addCollisionBoxesToList(World par1World, int par2, + int par3, int par4, + AxisAlignedBB par5AxisAlignedBB, List par6List, + Entity par7Entity) { + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool( + World par1World, int par2, int par3, int par4) { + return super.getCollisionBoundingBoxFromPool(par1World, + par2, par3, par4); + } + + @Override + @SideOnly(Side.CLIENT) + public MovingObjectPosition collisionRayTrace(World par1World, + int par2, int par3, int par4, Vec3 par5Vec3, + Vec3 par6Vec3) { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + TileEntity te = par1World.getTileEntity(par2, par3, par4); + return (player != null && te instanceof TileEntityTrap + && (((TileEntityTrap) te).placedBy != null + || !NewPacketHandler.trapsDisabled) + && (player.getCommandSenderName().equals( + ((TileEntityTrap) te).placedBy) + || player.isSneaking() + || (BlessingUtils + .hasBlessing(player, + "MarkScouting")))) ? super.collisionRayTrace( + par1World, + par2, + par3, + par4, + par5Vec3, + par6Vec3) + : null; + } + + @Override + public void onEntityCollidedWithBlock(World par1World, int par2, + int par3, int par4, Entity par5Entity) { + TileEntity te = par1World.getTileEntity(par2, par3, par4); + + boolean b1 = (((TileEntityTrap) te).placedBy == null + || !par5Entity.getCommandSenderName() + .equals(((TileEntityTrap) te).placedBy)); + boolean b2 = ((TileEntityTrap) te).setting != 3 + && (!(par5Entity instanceof EntityPlayer) + || ((TileEntityTrap) te).setting < 2); + boolean b3 = (ConfigData.spawnTraps + || ((TileEntityTrap) te).placedBy != null); + boolean b4 = ((par5Entity instanceof EntityPlayer + && !((EntityPlayer) par5Entity).capabilities.isCreativeMode) + || par5Entity instanceof EntityMob); + + if (!par1World.isRemote && par5Entity.ridingEntity == null + && te != null + && te instanceof TileEntityTrap && b1 && b2 + && b3 && b4) { + + int type = par1World.getBlockMetadata(par2, par3, + par4); + + boolean scout = BlessingUtils.hasBlessing(par5Entity, "MarkScouting"); + + if (par5Entity instanceof EntityPlayer) { + if (type % trapTypes == 0) { + par5Entity.attackEntityFrom( + DamageSource.cactus, + 8.0F + (scout ? 2.0F + : 0.0F)); + if (ModjamMod.r.nextInt(8 - (scout + ? 2 + : 0)) == 0) { + ((EntityLivingBase) par5Entity) + .addPotionEffect( + new PotionEffect( + Potion.poison.id, + 100 + (scout ? 25 + : 0), + 1)); + } + } else if (type % trapTypes == 1) { + if (!par5Entity.isBurning()) { + par5Entity.setFire(10 + + (scout ? 2 + : 0)); + } + } else if (type % trapTypes == 2) { + ((EntityLivingBase) par5Entity) + .addPotionEffect( + new PotionEffect( + Potion.blindness.id, + 200 + (scout ? 50 + : 0), + 1)); + ((EntityLivingBase) par5Entity) + .addPotionEffect( + new PotionEffect( + Potion.moveSlowdown.id, + 200 + (scout ? 50 + : 0), + 1)); + } + + if (CommonTickHandler.worldData + .getDisadvantage() + .equals("Explosive Traps")) { + par5Entity.worldObj.setBlockToAir( + par2, par3, par4); + par5Entity.worldObj + .createExplosion( + null, + par2 + 0.5F, + par3 + 0.5F, + par4 + 0.5F, + 1.33F, + true); + } + + par1World.setBlockToAir(par2, par3, par4); + + NewPacketHandler.SEND_MESSAGE.sendToPlayer( + (EntityPlayer) par5Entity, + "\u00A7c\u00A7oYou triggered a " + + ItemTrap.names[type + % trapTypes].toLowerCase() + + "!"); + } else { + if (type % trapTypes == 0) { + par5Entity.attackEntityFrom( + DamageSource.cactus, + 2.0F); + if (ModjamMod.r.nextInt(32) == 0) { + ((EntityLivingBase) par5Entity) + .addPotionEffect( + new PotionEffect( + Potion.poison.id, + 100, + 1)); + } + } else if (type % trapTypes == 1) { + if (!par5Entity.isBurning()) { + par5Entity.setFire(5); + } + } else if (type % trapTypes == 2) { + ((EntityLivingBase) par5Entity) + .addPotionEffect( + new PotionEffect( + Potion.blindness.id, + 100, + 1)); + ((EntityLivingBase) par5Entity) + .addPotionEffect( + new PotionEffect( + Potion.moveSlowdown.id, + 100, + 1)); + } + } + + } + } + + @Override + public void onNeighborBlockChange(World par1World, int par2, + int par3, int par4, Block par5) { + super.onNeighborBlockChange(par1World, par2, par3, par4, + par5); + + if (!par1World.isRemote && !par1World.isSideSolid(par2, + par3 - 1, par4, ForgeDirection.SOUTH, + true)) { + par1World.setBlockToAir(par2, par3, par4); + TileEntity te = par1World.getTileEntity(par2, par3, + par4); + if ((ConfigData.spawnTraps || (te != null + && te instanceof TileEntityTrap + && ((TileEntityTrap) te).placedBy != null)) + && CommonTickHandler.worldData != null + && CommonTickHandler.worldData + .getDisadvantage() + .equals("Explosive Traps")) { + par1World.createExplosion(null, + par2 + 0.5F, par3 + 0.5F, + par4 + 0.5F, 1.33F, true); + } + } + } + + @Override + public boolean isReplaceable(IBlockAccess world, int x, int y, + int z) { + TileEntity te = world.getTileEntity(x, y, z); + return super.isReplaceable(world, x, y, z) + || (((world instanceof World + && ((World) world).isRemote) + ? NewPacketHandler.trapsDisabled + : !ConfigData.spawnTraps) + && (te == null || !(te instanceof TileEntityTrap) + || ((TileEntityTrap) te).placedBy == null)); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isCollidable() { + return super.isCollidable(); + } + + @Override + public boolean canPlaceBlockAt(World world, int x, int y, int z) { + return super.canPlaceBlockAt(world, x, y, z) + && (y == 0 || world.getBlock(x, y - 1, + z) != ModjamMod.blockTrap); + } + + @Override + public int damageDropped(int par1) { + return par1 % trapTypes; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, + List par3List) { + for (int i = 0; i < trapTypes; i++) { + par3List.add(new ItemStack(par1, 1, i)); + } + } + + @Override + public void onBlockPlacedBy(World par1World, int par2, int par3, + int par4, EntityLivingBase par5EntityLivingBase, + ItemStack par6ItemStack) { + super.onBlockPlacedBy(par1World, par2, par3, par4, + par5EntityLivingBase, par6ItemStack); + + par1World.setBlockMetadataWithNotify(par2, par3, par4, + par6ItemStack.getItemDamage(), 0); + + if (par5EntityLivingBase != null + && par5EntityLivingBase instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) par5EntityLivingBase; + + if (!player.capabilities.isCreativeMode + || NewPacketHandler.trapsDisabled) { + TileEntity te = par1World.getTileEntity( + par2, par3, par4); + if (te != null && te instanceof TileEntityTrap) { + ((TileEntityTrap) te).placedBy = player + .getCommandSenderName(); + } + } + } + } + + @Override + public boolean isShearable(ItemStack item, + IBlockAccess blockAccess, int x, int y, int z) { + return true; + } + + @Override + public ArrayList onSheared(ItemStack item, + IBlockAccess blockAccess, int x, int y, int z, + int fortune) { + if (blockAccess instanceof World) { + World world = (World) blockAccess; + + world.setBlockToAir(x, y, z); + + if (!world.isRemote) { + MinecraftServer server = FMLCommonHandler + .instance() + .getMinecraftServerInstance(); + + for (int i = 0; i < server.worldServers.length; i++) { + WorldServer s = FMLCommonHandler + .instance() + .getMinecraftServerInstance().worldServers[i]; + + if (s == null) { + continue; + } + + for (Object o : s.playerEntities) { + if (o == null || !(o instanceof EntityPlayer)) { + continue; + } + + EntityPlayer player = (EntityPlayer) o; + + if (item.equals(player + .getHeldItem())) { + NewPacketHandler.SEND_MESSAGE + .sendToPlayer(player, + "\u00A7e\u00A7oYou disarmed the trap."); + } + } + } + } + + item.attemptDamageItem(119, ModjamMod.r); + } + + return new ArrayList(); + } + + @Override + public float getPlayerRelativeBlockHardness( + EntityPlayer par1EntityPlayer, World par2World, + int par3, int par4, int par5) { + return (par1EntityPlayer.getHeldItem() != null + && par1EntityPlayer.getHeldItem() + .getItem() == Items.shears) + ? 1.0F + : getBlockHardness( + par2World, + par3, + par4, + par5); + } +} -- cgit v1.2.3