Ah ok, I did not notice the edit, sorry. You are using array.indexof(0) to find the empty right? Also a valid way to do it, never thought of it. Anyway I have some suggestions as to the solution. I will give you two solutions actually, the first one is applicable in your case since you store type at index y=0. The second is more general if you need to check things at other y indexes.
Specific for type stored at y=0:
Remember that snazzy indexof you are using? Use array.indexof(block.type). It will return an index of 0 or greater if the block of that type is already in the array. It will return -1 if the block type has not yet been added to the inventory at all. And if the block type is in the array, you can use the same expression to tell the function at which index to add the new block amount.
General:
What I do is the following. Create a local variable "IsInInventory" or something similar in the event. Default value 0. Create another for the type of item you add if needed.
Event conditions
Loop for every X element of the inventory.
Inventory value at (Self.CurX,0) = type
Event Actions
set value "IsInInventory" to 1
Next you just make an event with condition IsInInventory=1 and do whatever you need to do.
BTW I like your project, pretty cool.