summaryrefslogtreecommitdiff
path: root/YWD/src/main/java/fyresmodjam/blocks
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2018-05-24 15:53:20 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2018-05-24 15:53:20 -0400
commit3eb8c7a8fca3f22475d53e30f0b90a6737f313fa (patch)
tree1c0afbcb6712408fb791849969f9766dcdeb5868 /YWD/src/main/java/fyresmodjam/blocks
Initial commit
Diffstat (limited to 'YWD/src/main/java/fyresmodjam/blocks')
-rwxr-xr-xYWD/src/main/java/fyresmodjam/blocks/BlockCrystal.java82
-rwxr-xr-xYWD/src/main/java/fyresmodjam/blocks/BlockCrystalStand.java46
-rwxr-xr-xYWD/src/main/java/fyresmodjam/blocks/BlockMysteryMushroom.java182
-rwxr-xr-xYWD/src/main/java/fyresmodjam/blocks/BlockPillar.java355
-rwxr-xr-xYWD/src/main/java/fyresmodjam/blocks/BlockTrap.java466
5 files changed, 1131 insertions, 0 deletions
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<ItemStack> 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<ItemStack>();
+ }
+
+ @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);
+ }
+}