Guest User

Untitled

a guest
Aug 15th, 2015
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.80 KB | None | 0 0
  1. package com.halestormxv.dimension;
  2.  
  3. import cpw.mods.fml.relauncher.Side;
  4. import cpw.mods.fml.relauncher.SideOnly;
  5.  
  6. import java.util.Random;
  7.  
  8. import com.halestormxv.blocks.CelestialCraft_blocks;
  9. import com.halestormxv.creativetabs.CelestialCraft_creativeTabs;
  10. import com.halestormxv.lib.RefStrings;
  11. import com.halestormxv.utilities.LightDimensionTeleporter;
  12. import com.halestormxv.worldALT.DimensionIDs;
  13.  
  14. import net.minecraft.block.Block;
  15. import net.minecraft.block.BlockBreakable;
  16. import net.minecraft.block.material.Material;
  17. import net.minecraft.creativetab.CreativeTabs;
  18. import net.minecraft.entity.Entity;
  19. import net.minecraft.entity.player.EntityPlayerMP;
  20. import net.minecraft.init.Blocks;
  21. import net.minecraft.item.Item;
  22. import net.minecraft.item.ItemMonsterPlacer;
  23. import net.minecraft.util.AxisAlignedBB;
  24. import net.minecraft.util.ChunkCoordinates;
  25. import net.minecraft.util.Direction;
  26. import net.minecraft.world.IBlockAccess;
  27. import net.minecraft.world.World;
  28.  
  29. public class BlockModPortal extends BlockBreakable
  30. {
  31.     public static final int[][] field_150001_a = new int[][] {new int[0], {3, 1}, {2, 0}};
  32.     @SuppressWarnings("unused")
  33.     private static final String __OBFID = "CL_00000284";
  34.  
  35.     public BlockModPortal(String name)
  36.     {
  37.         super("celestialcraft:" + name, Material.portal, false);
  38.         this.setTickRandomly(true);
  39.         this.setBlockName(name);
  40.         this.setBlockTextureName(RefStrings.MODID + ":blockModPortal");
  41.         this.setCreativeTab(CelestialCraft_creativeTabs.tabBlock);
  42.         this.setLightLevel(4.2F);
  43.     }
  44.  
  45.     /**
  46.      * Ticks the block if it's been scheduled
  47.      */
  48.     public void updateTick(World world, int x, int y, int z, Random random) {
  49.         super.updateTick(world, x, y, z, random);
  50.         if (world.provider.isSurfaceWorld() && world.getGameRules().getGameRuleBooleanValue("doMobSpawning") && random.nextInt(2000) < world.difficultySetting.getDifficultyId()) {
  51.             int l;
  52.             for (l = y; !World.doesBlockHaveSolidTopSurface(world, x, l, z) && l > 0; --l) {
  53.                 ;
  54.             }
  55.             if (l > 0 && !world.getBlock(x, l + 1, z).isNormalCube()) {
  56.                 Entity entity = ItemMonsterPlacer.spawnCreature(world, 57, (double)x + 0.5D, (double)l + 1.1D, (double)z + 0.5D);
  57.                 if (entity != null) {
  58.                     entity.timeUntilPortal = entity.getPortalCooldown();
  59.                 }
  60.             }
  61.         }
  62.     }
  63.  
  64.     /**
  65.      * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
  66.      * cleared to be reused)
  67.      */
  68.     public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
  69.         return null;
  70.     }
  71.  
  72.     /**
  73.      * Updates the blocks bounds based on its current state. Args: world, x, y, z
  74.      */
  75.     public void setBlockBoundsBasedOnState(IBlockAccess blockaccess, int x, int y, int z) {
  76.         int l = func_149999_b(blockaccess.getBlockMetadata(x, y, z));
  77.         if (l == 0) {
  78.             if (blockaccess.getBlock(x - 1, y, z) != this && blockaccess.getBlock(x + 1, y, z) != this) {
  79.                 l = 2;
  80.             } else {
  81.                 l = 1;
  82.             }
  83.             if (blockaccess instanceof World && !((World)blockaccess).isRemote) {
  84.                 ((World)blockaccess).setBlockMetadataWithNotify(x, y, z, l, 2);
  85.             }
  86.         }
  87.         float f = 0.125F;
  88.         float f1 = 0.125F;
  89.         if (l == 1) {
  90.             f = 0.5F;
  91.         }
  92.         if (l == 2) {
  93.             f1 = 0.5F;
  94.         }
  95.         this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, 1.0F, 0.5F + f1);
  96.     }
  97.  
  98.     /**
  99.      * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
  100.      */
  101.     public boolean renderAsNormalBlock(){
  102.         return false;
  103.     }
  104.  
  105.     public boolean getPortalSize(World world, int x, int y, int z) {
  106.         BlockModPortal.Size size = new BlockModPortal.Size(world, x, y, z, 1);
  107.         BlockModPortal.Size size1 = new BlockModPortal.Size(world, x, y, z, 2);
  108.         if (size.func_150860_b() && size.field_150864_e == 0) {
  109.             size.func_150859_c();
  110.             return true;
  111.         }
  112.         else if (size1.func_150860_b() && size1.field_150864_e == 0) {
  113.             size1.func_150859_c();
  114.             return true;
  115.         } else {
  116.             return false;
  117.         }
  118.     }
  119.  
  120.     /**
  121.      * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
  122.      * their own) Args: x, y, z, neighbor Block
  123.      */
  124.     public void onNeighborBlockChange(World world, int x, int y, int z, Block block){
  125.         int l = func_149999_b(world.getBlockMetadata(x, y, z));
  126.         BlockModPortal.Size size = new BlockModPortal.Size(world, x, y, z, 1);
  127.         BlockModPortal.Size size1 = new BlockModPortal.Size(world, x, y, z, 2);
  128.         if (l == 1 && (!size.func_150860_b() || size.field_150864_e < size.field_150868_h * size.field_150862_g))
  129.         {
  130.             world.setBlock(x, y, z, Blocks.air);
  131.         }
  132.         else if (l == 2 && (!size1.func_150860_b() || size1.field_150864_e < size1.field_150868_h * size1.field_150862_g))
  133.         {
  134.             world.setBlock(x, y, z, Blocks.air);
  135.         }
  136.         else if (l == 0 && !size.func_150860_b() && !size1.func_150860_b())
  137.         {
  138.             world.setBlock(x, y, z, Blocks.air);
  139.         }
  140.     }
  141.  
  142.     /**
  143.      * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
  144.      * coordinates.  Args: blockAccess, x, y, z, side
  145.      */
  146.     @SideOnly(Side.CLIENT)
  147.     public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_)
  148.     {
  149.         int i1 = 0;
  150.  
  151.         if (p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_) == this)
  152.         {
  153.             i1 = func_149999_b(p_149646_1_.getBlockMetadata(p_149646_2_, p_149646_3_, p_149646_4_));
  154.  
  155.             if (i1 == 0)
  156.             {
  157.                 return false;
  158.             }
  159.  
  160.             if (i1 == 2 && p_149646_5_ != 5 && p_149646_5_ != 4)
  161.             {
  162.                 return false;
  163.             }
  164.  
  165.             if (i1 == 1 && p_149646_5_ != 3 && p_149646_5_ != 2)
  166.             {
  167.                 return false;
  168.             }
  169.         }
  170.  
  171.         boolean flag = p_149646_1_.getBlock(p_149646_2_ - 1, p_149646_3_, p_149646_4_) == this && p_149646_1_.getBlock(p_149646_2_ - 2, p_149646_3_, p_149646_4_) != this;
  172.         boolean flag1 = p_149646_1_.getBlock(p_149646_2_ + 1, p_149646_3_, p_149646_4_) == this && p_149646_1_.getBlock(p_149646_2_ + 2, p_149646_3_, p_149646_4_) != this;
  173.         boolean flag2 = p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_ - 1) == this && p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_ - 2) != this;
  174.         boolean flag3 = p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_ + 1) == this && p_149646_1_.getBlock(p_149646_2_, p_149646_3_, p_149646_4_ + 2) != this;
  175.         boolean flag4 = flag || flag1 || i1 == 1;
  176.         boolean flag5 = flag2 || flag3 || i1 == 2;
  177.         return flag4 && p_149646_5_ == 4 ? true : (flag4 && p_149646_5_ == 5 ? true : (flag5 && p_149646_5_ == 2 ? true : flag5 && p_149646_5_ == 3));
  178.     }
  179.  
  180.     /**
  181.      * Returns the quantity of items to drop on block destruction.
  182.      */
  183.     public int quantityDropped(Random p_149745_1_)
  184.     {
  185.         return 0;
  186.     }
  187.  
  188.     /**
  189.      * Triggered whenever an entity collides with this block (enters into the block). Args: world, x, y, z, entity
  190.      */
  191.     public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
  192.         if ((entity.ridingEntity == null) && (entity.riddenByEntity == null) && ((entity instanceof EntityPlayerMP))) {
  193.             EntityPlayerMP thePlayer = (EntityPlayerMP)entity;
  194.             if (thePlayer.timeUntilPortal > 0) {
  195.                 thePlayer.timeUntilPortal = 10;
  196.             } else if (thePlayer.dimension != DimensionIDs.LIGHTFORESTDIMENSION) {
  197.                 thePlayer.timeUntilPortal = 10;
  198.                 thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, DimensionIDs.LIGHTFORESTDIMENSION, new LightDimensionTeleporter(thePlayer.mcServer.worldServerForDimension(DimensionIDs.LIGHTFORESTDIMENSION)));
  199.             } else {
  200.                 thePlayer.timeUntilPortal = 10;
  201.                 thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, 0, new LightDimensionTeleporter(thePlayer.mcServer.worldServerForDimension(0)));
  202.             }
  203.         }
  204.     }
  205.  
  206.     /**
  207.      * Returns which pass should this block be rendered on. 0 for solids and 1 for alpha
  208.      */
  209.     @SideOnly(Side.CLIENT)
  210.     public int getRenderBlockPass() {
  211.         return 1;
  212.     }
  213.  
  214.     /**
  215.      * A randomly called display update to be able to add particles or other items for display
  216.      */
  217.     @SideOnly(Side.CLIENT)
  218.     public void randomDisplayTick(World world, int x, int y, int z, Random random){
  219.         if (random.nextInt(100) == 0) {
  220.             world.playSound((double)x + 0.5D, (double)y + 0.5D, (double)z + 0.5D, "mob.endermen.stare", 0.5F, random.nextFloat() * 0.4F + 0.8F, false);
  221.         }
  222.         for (int l = 0; l < 4; ++l) {
  223.             double d0 = (double)((float)x + random.nextFloat());
  224.             double d1 = (double)((float)y + random.nextFloat());
  225.             double d2 = (double)((float)z + random.nextFloat());
  226.             double d3 = 0.0D;
  227.             double d4 = 0.0D;
  228.             double d5 = 0.0D;
  229.             int i1 = random.nextInt(2) * 2 - 1;
  230.             d3 = ((double)random.nextFloat() - 0.5D) * 0.5D;
  231.             d4 = ((double)random.nextFloat() - 0.5D) * 0.5D;
  232.             d5 = ((double)random.nextFloat() - 0.5D) * 0.5D;
  233.             if (world.getBlock(x - 1, y, z) != this && world.getBlock(x + 1, y, z) != this) {
  234.                 d0 = (double)x + 0.5D + 0.25D * (double)i1;
  235.                 d3 = (double)(random.nextFloat() * 2.0F * (float)i1);
  236.             } else {
  237.                 d2 = (double)z + 0.5D + 0.25D * (double)i1;
  238.                 d5 = (double)(random.nextFloat() * 2.0F * (float)i1);
  239.             }
  240.             world.spawnParticle("enchantmenttable", d0, d1, d2, d3, d4, d5);
  241.         }
  242.     }
  243.  
  244.     public static int func_149999_b(int p_149999_0_)
  245.     {
  246.         return p_149999_0_ & 3;
  247.     }
  248.  
  249.     /**
  250.      * Gets an item for the block being called on. Args: world, x, y, z
  251.      */
  252.     @SideOnly(Side.CLIENT)
  253.     public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_) {
  254.         return Item.getItemById(0);
  255.     }
  256.  
  257.     public static class Size
  258.     {
  259.         private final World worldObj;
  260.         private final int field_150865_b;
  261.         private final int field_150866_c;
  262.         private final int field_150863_d;
  263.         private int field_150864_e = 0;
  264.         private ChunkCoordinates field_150861_f;
  265.         private int field_150862_g;
  266.         private int field_150868_h;
  267.         @SuppressWarnings("unused")
  268.         private static final String __OBFID = "CL_00000285";
  269.  
  270.         public Size(World p_i45415_1_, int p_i45415_2_, int p_i45415_3_, int p_i45415_4_, int p_i45415_5_)
  271.         {
  272.             this.worldObj = p_i45415_1_;
  273.             this.field_150865_b = p_i45415_5_;
  274.             this.field_150863_d = BlockModPortal.field_150001_a[p_i45415_5_][0];
  275.             this.field_150866_c = BlockModPortal.field_150001_a[p_i45415_5_][1];
  276.  
  277.             for (int i1 = p_i45415_3_; p_i45415_3_ > i1 - 21 && p_i45415_3_ > 0 && this.getBlockMaterial(p_i45415_1_.getBlock(p_i45415_2_, p_i45415_3_ - 1, p_i45415_4_)); --p_i45415_3_)
  278.             {
  279.                 ;
  280.             }
  281.  
  282.             int j1 = this.func_150853_a(p_i45415_2_, p_i45415_3_, p_i45415_4_, this.field_150863_d) - 1;
  283.  
  284.             if (j1 >= 0)
  285.             {
  286.                 this.field_150861_f = new ChunkCoordinates(p_i45415_2_ + j1 * Direction.offsetX[this.field_150863_d], p_i45415_3_, p_i45415_4_ + j1 * Direction.offsetZ[this.field_150863_d]);
  287.                 this.field_150868_h = this.func_150853_a(this.field_150861_f.posX, this.field_150861_f.posY, this.field_150861_f.posZ, this.field_150866_c);
  288.  
  289.                 if (this.field_150868_h < 2 || this.field_150868_h > 21)
  290.                 {
  291.                     this.field_150861_f = null;
  292.                     this.field_150868_h = 0;
  293.                 }
  294.             }
  295.  
  296.             if (this.field_150861_f != null)
  297.             {
  298.                 this.field_150862_g = this.func_150858_a();
  299.             }
  300.         }
  301.  
  302.         protected int func_150853_a(int x, int y, int z, int p_150853_4_)
  303.         {
  304.             int j1 = Direction.offsetX[p_150853_4_];
  305.             int k1 = Direction.offsetZ[p_150853_4_];
  306.             int i1;
  307.             Block block;
  308.  
  309.             for (i1 = 0; i1 < 22; ++i1)
  310.             {
  311.                 block = this.worldObj.getBlock(x + j1 * i1, y, z + k1 * i1);
  312.  
  313.                 if (!this.getBlockMaterial(block))
  314.                 {
  315.                     break;
  316.                 }
  317.  
  318.                 Block block1 = this.worldObj.getBlock(x + j1 * i1, y - 1, z + k1 * i1);
  319.  
  320.                 if (block1 != CelestialCraft_blocks.CelStone)
  321.                 {
  322.                     break;
  323.                 }
  324.             }
  325.  
  326.             block = this.worldObj.getBlock(x + j1 * i1, y, z + k1 * i1);
  327.             return block == CelestialCraft_blocks.CelStone ? i1 : 0;
  328.         }
  329.  
  330.         protected int func_150858_a()
  331.         {
  332.             int i;
  333.             int j;
  334.             int k;
  335.             int l;
  336.             label56:
  337.  
  338.                 for (this.field_150862_g = 0; this.field_150862_g < 21; ++this.field_150862_g)
  339.                 {
  340.                     i = this.field_150861_f.posY + this.field_150862_g;
  341.  
  342.                     for (j = 0; j < this.field_150868_h; ++j)
  343.                     {
  344.                         k = this.field_150861_f.posX + j * Direction.offsetX[BlockModPortal.field_150001_a[this.field_150865_b][1]];
  345.                         l = this.field_150861_f.posZ + j * Direction.offsetZ[BlockModPortal.field_150001_a[this.field_150865_b][1]];
  346.                         Block block = this.worldObj.getBlock(k, i, l);
  347.  
  348.                         if (!this.getBlockMaterial(block))
  349.                         {
  350.                             break label56;
  351.                         }
  352.  
  353.                         if (block == CelestialCraft_blocks.lightPortal)
  354.                         {
  355.                             ++this.field_150864_e;
  356.                         }
  357.  
  358.                         if (j == 0)
  359.                         {
  360.                             block = this.worldObj.getBlock(k + Direction.offsetX[BlockModPortal.field_150001_a[this.field_150865_b][0]], i, l + Direction.offsetZ[BlockModPortal.field_150001_a[this.field_150865_b][0]]);
  361.  
  362.                             if (block != CelestialCraft_blocks.CelStone)
  363.                             {
  364.                                 break label56;
  365.                             }
  366.                         }
  367.                         else if (j == this.field_150868_h - 1)
  368.                         {
  369.                             block = this.worldObj.getBlock(k + Direction.offsetX[BlockModPortal.field_150001_a[this.field_150865_b][1]], i, l + Direction.offsetZ[BlockModPortal.field_150001_a[this.field_150865_b][1]]);
  370.  
  371.                             if (block != CelestialCraft_blocks.CelStone)
  372.                             {
  373.                                 break label56;
  374.                             }
  375.                         }
  376.                     }
  377.                 }
  378.  
  379.             for (i = 0; i < this.field_150868_h; ++i)
  380.             {
  381.                 j = this.field_150861_f.posX + i * Direction.offsetX[BlockModPortal.field_150001_a[this.field_150865_b][1]];
  382.                 k = this.field_150861_f.posY + this.field_150862_g;
  383.                 l = this.field_150861_f.posZ + i * Direction.offsetZ[BlockModPortal.field_150001_a[this.field_150865_b][1]];
  384.  
  385.                 if (this.worldObj.getBlock(j, k, l) != CelestialCraft_blocks.CelStone)
  386.                 {
  387.                     this.field_150862_g = 0;
  388.                     break;
  389.                 }
  390.             }
  391.  
  392.             if (this.field_150862_g <= 21 && this.field_150862_g >= 3)
  393.             {
  394.                 return this.field_150862_g;
  395.             }
  396.             else
  397.             {
  398.                 this.field_150861_f = null;
  399.                 this.field_150868_h = 0;
  400.                 this.field_150862_g = 0;
  401.                 return 0;
  402.             }
  403.         }
  404.        
  405.         protected boolean getBlockMaterial(Block block){
  406.             return block.getMaterial() == Material.air || block == CelestialCraft_blocks.lightFire || block == CelestialCraft_blocks.lightPortal;
  407.         }
  408.  
  409.         public boolean func_150860_b()
  410.         {
  411.             return this.field_150861_f != null && this.field_150868_h >= 2 && this.field_150868_h <= 21 && this.field_150862_g >= 3 && this.field_150862_g <= 21;
  412.         }
  413.  
  414.         public void func_150859_c()
  415.         {
  416.             for (int i = 0; i < this.field_150868_h; ++i)
  417.             {
  418.                 int j = this.field_150861_f.posX + Direction.offsetX[this.field_150866_c] * i;
  419.                 int k = this.field_150861_f.posZ + Direction.offsetZ[this.field_150866_c] * i;
  420.  
  421.                 for (int l = 0; l < this.field_150862_g; ++l)
  422.                 {
  423.                     int i1 = this.field_150861_f.posY + l;
  424.                     this.worldObj.setBlock(j, i1, k, CelestialCraft_blocks.lightPortal, this.field_150865_b, 2);
  425.                 }
  426.             }
  427.         }
  428.     }
  429.    
  430.     @Override
  431.     public boolean isOpaqueCube(){
  432.         return false;
  433.     }
  434.    
  435. }
Advertisement
Add Comment
Please, Sign In to add comment