Package com.mojang.minecraft.level.tile

Source Code of com.mojang.minecraft.level.tile.LiquidBlock

package com.mojang.minecraft.level.tile;

import com.mojang.minecraft.level.Level;
import com.mojang.minecraft.level.liquid.LiquidType;
import com.mojang.minecraft.phys.AABB;
import com.mojang.minecraft.render.ShapeRenderer;

import java.util.Random;

public class LiquidBlock extends Block {

   protected LiquidType type;
   protected int stillId;
   protected int movingId;


   protected LiquidBlock(int var1, LiquidType var2) {
      super(var1);
      this.type = var2;
      this.textureId = 14;
      if(var2 == LiquidType.LAVA) {
         this.textureId = 30;
      }

      Block.liquid[var1] = true;
      this.movingId = var1;
      this.stillId = var1 + 1;
      float var4 = 0.01F;
      float var3 = 0.1F;
      this.setBounds(var4 + 0.0F, 0.0F - var3 + var4, var4 + 0.0F, var4 + 1.0F, 1.0F - var3 + var4, var4 + 1.0F);
      this.setPhysics(true);
      if(var2 == LiquidType.LAVA) {
         this.setTickDelay(16);
      }

   }

   public final boolean isCube() {
      return false;
   }

   public final void onPlace(Level level, int x, int y, int z) {
      level.addToTickNextTick(x, y, z, this.movingId);
   }

   public void update(Level level, int x, int y, int z, Random rand) {
      boolean var7 = false;
      z = z;
      y = y;
      x = x;
      level = level;
      boolean var8 = false;

      boolean var6;
      do {
         --y;
         if(level.getTile(x, y, z) != 0 || !this.canFlow(level, x, y, z)) {
            break;
         }

         if(var6 = level.setTile(x, y, z, this.movingId)) {
            var8 = true;
         }
      } while(var6 && this.type != LiquidType.LAVA);

      ++y;
      if(this.type == LiquidType.WATER || !var8) {
         var8 = var8 | this.flow(level, x - 1, y, z) | this.flow(level, x + 1, y, z) | this.flow(level, x, y, z - 1) | this.flow(level, x, y, z + 1);
      }

      if(!var8) {
         level.setTileNoUpdate(x, y, z, this.stillId);
      } else {
         level.addToTickNextTick(x, y, z, this.movingId);
      }

   }

   private boolean canFlow(Level var1, int var2, int var3, int var4) {
      if(this.type == LiquidType.WATER) {
         for(int var7 = var2 - 2; var7 <= var2 + 2; ++var7) {
            for(int var5 = var3 - 2; var5 <= var3 + 2; ++var5) {
               for(int var6 = var4 - 2; var6 <= var4 + 2; ++var6) {
                  if(var1.getTile(var7, var5, var6) == Block.SPONGE.id) {
                     return false;
                  }
               }
            }
         }
      }

      return true;
   }

   private boolean flow(Level var1, int var2, int var3, int var4) {
      if(var1.getTile(var2, var3, var4) == 0) {
         if(!this.canFlow(var1, var2, var3, var4)) {
            return false;
         }

         if(var1.setTile(var2, var3, var4, this.movingId)) {
            var1.addToTickNextTick(var2, var3, var4, this.movingId);
         }
      }

      return false;
   }

   protected final float getBrightness(Level level, int x, int y, int z) {
      return this.type == LiquidType.LAVA?100.0F: level.getBrightness(x, y, z);
   }

   public final boolean canRenderSide(Level level, int x, int y, int z, int side) {
      int var6;
      return x >= 0 && y >= 0 && z >= 0 && x < level.width && z < level.height?((var6 = level.getTile(x, y, z)) != this.movingId && var6 != this.stillId?(side == 1 && (level.getTile(x - 1, y, z) == 0 || level.getTile(x + 1, y, z) == 0 || level.getTile(x, y, z - 1) == 0 || level.getTile(x, y, z + 1) == 0)?true:super.canRenderSide(level, x, y, z, side)):false):false;
   }

   public final void renderInside(ShapeRenderer shapeRenderer, int x, int y, int z, int side) {
      super.renderInside(shapeRenderer, x, y, z, side);
      super.renderSide(shapeRenderer, x, y, z, side);
   }

   public final boolean isOpaque() {
      return true;
   }

   public final boolean isSolid() {
      return false;
   }

   public final LiquidType getLiquidType() {
      return this.type;
   }

   public void onNeighborChange(Level var1, int var2, int var3, int var4, int var5) {
      if(var5 != 0) {
         LiquidType var6 = Block.blocks[var5].getLiquidType();
         if(this.type == LiquidType.WATER && var6 == LiquidType.LAVA || var6 == LiquidType.WATER && this.type == LiquidType.LAVA) {
            var1.setTile(var2, var3, var4, Block.STONE.id);
            return;
         }
      }

      var1.addToTickNextTick(var2, var3, var4, var5);
   }

   public final int getTickDelay() {
      return this.type == LiquidType.LAVA?5:0;
   }

   public final void dropItems(Level var1, int var2, int var3, int var4, float var5) {}

   public final void onBreak(Level var1, int var2, int var3, int var4) {}

   public final int getDropCount() {
      return 0;
   }

   public final int getRenderPass() {
      return this.type == LiquidType.WATER?1:0;
   }

  @Override
  public AABB getCollisionBox(int x, int y, int z)
  {
    return null;
  }
}
TOP

Related Classes of com.mojang.minecraft.level.tile.LiquidBlock

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.