  import net.minecraft.block.Block;
  import net.minecraft.block.state.IBlockState;
  import net.minecraft.client.Minecraft;
-@@ -72,9 +76,13 @@ public class BlockModelRenderer
+@@ -31,6 +35,11 @@ public class BlockModelRenderer
+ 
+     public boolean renderModel(IBlockAccess blockAccessIn, IBakedModel modelIn, IBlockState blockStateIn, BlockPos blockPosIn, VertexBuffer buffer, boolean checkSides)
+     {
++		// TODO: Client
++		if(WurstClient.INSTANCE.mods.xRayMod.isActive()
++			&& !XRayUtils.isXRayBlock(blockStateIn.getBlock()))
++			return false;
++		
+         return this.renderModel(blockAccessIn, modelIn, blockStateIn, blockPosIn, buffer, checkSides, MathHelper.getPositionRandom(blockPosIn));
+     }
+ 
+@@ -72,9 +81,13 @@ public class BlockModelRenderer
  
          List<BakedQuad> list1 = modelIn.getQuads(stateIn, (EnumFacing)null, rand);
  

 import net.minecraft.block.material.EnumPushReaction;
 import net.minecraft.block.material.MapColor;
 import net.minecraft.block.material.Material;
@@ -370,7 +375,10 @@ public class Block
     @Deprecated
     public boolean isFullCube(IBlockState state)
     {
-        return true;
+		// TODO: Client
+		return !WurstClient.INSTANCE.mods.xRayMod.isActive()
+			&& !WurstClient.INSTANCE.mods.freecamMod.isActive()
+			&& !WurstClient.INSTANCE.mods.noClipMod.isActive();
     }
 
     public boolean isPassable(IBlockAccess worldIn, BlockPos pos)
@@ -472,6 +480,10 @@ public class Block
     @Deprecated
     public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side)
     {
+		// TODO: Client
+		if(WurstClient.INSTANCE.mods.xRayMod.isEnabled())
+			return XRayUtils.isXRayBlock(this);
+		
         AxisAlignedBB axisalignedbb = blockState.getBoundingBox(blockAccess, pos);
 
         switch (side)
@@ -578,6 +590,10 @@ public class Block
 
     public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid)
     {

                             {
                                 public String call() throws Exception
                                 {
diff --git a/net/minecraft/client/renderer/BlockFluidRenderer.java b/net/minecraft/client/renderer/BlockFluidRenderer.java
index 896e3d6..3b3294b 100644
--- a/net/minecraft/client/renderer/BlockFluidRenderer.java
+++ b/net/minecraft/client/renderer/BlockFluidRenderer.java
@@ -13,6 +13,8 @@ import net.minecraft.util.EnumFacing;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.MathHelper;
 import net.minecraft.world.IBlockAccess;
+import tk.wurst_client.WurstClient;
+import tk.wurst_client.utils.XRayUtils;
 
 public class BlockFluidRenderer
 {
@@ -40,6 +42,12 @@ public class BlockFluidRenderer
     public boolean renderFluid(IBlockAccess blockAccess, IBlockState blockStateIn, BlockPos blockPosIn, VertexBuffer worldRendererIn)
     {
         BlockLiquid blockliquid = (BlockLiquid)blockStateIn.getBlock();
+
+		// TODO: Client
+		if(WurstClient.INSTANCE.mods.xRayMod.isActive()
+			&& !XRayUtils.isXRayBlock(blockliquid))
+			return false;
+		
         boolean flag = blockStateIn.getMaterial() == Material.LAVA;
         TextureAtlasSprite[] atextureatlassprite = flag ? this.atlasSpritesLava : this.atlasSpritesWater;
         int i = this.blockColors.colorMultiplier(blockStateIn, blockAccess, blockPosIn, 0);
diff --git a/net/minecraft/client/renderer/BlockModelRenderer.java b/net/minecraft/client/renderer/BlockModelRenderer.java
index 30f9818..50c52ac 100644
--- a/net/minecraft/client/renderer/BlockModelRenderer.java
+++ b/net/minecraft/client/renderer/BlockModelRenderer.java
@@ -2,7 +2,11 @@ package net.minecraft.client.renderer;
