After running setup.js and createblankslice.js, you are ready to create a phoenix filter. Follow these steps to create one.

1. Open sliceproperties.java in a text editor (NOT the one in the resources folder, that's the one that createblankslice.js copies).

2. Fill in the eight "things". I have pre-filled a copy in resources/phoenix.java. I will give a description of what the eight things do.

Thing 1: This is the class name for the slice you are creating. I use Slice2 in this example. Class names need to be uppercase.

Thing 2: This is a differential array, describing the "shape" of the filter. JLS has a Variable class as well as a Cell class. To quote Kasuha:

   Okay, first a disclaimer: I may be wrong sometimes, it's a long time and it's posible I'm making a few things up instead of remembering them.

   With that said, "cell" refers to whole set of cell states throughout list of generations. I think I call them "stacks" too. "variable" is one such cell state that can change, i.e. can be unset, or set on, or off.

I also believe that each Cell only has Variables that share the same (x,y)-position. Now, back to the filter "shape". Each entry in this array represents an offset (dx,dy,dg). In my example, I use [[0,0,0],[0,0,1]]. That means that for all positions (x,y,g) possible, a Slice2 is applied to Variables at (x+0,y+0,g+0) and (x+0,y+0,g+1). If you don't want this (like if you only want to apply the filter to some positions, or need to put multiple shapes in the same filter for some reason), you can override it manually by editing JLS/jls/SearchCellArray.java. This is probably the least clear explanation of any one "thing".

Thing 3: This is the name of the filter. This probably needs to be lowercase, since it's a variable name. This is different from the class name, since multiple filters might use the same slice.

Thing 4: This is the filter label. This is the text that will appear on the checkbox in the search settings. 

Thing 5: This is the number of cells in the filter.

Thing 6: This method should return "true" if the state is unconditionally invalid, and "false" otherwise. The state is a ternary representation of the states of the Variables in the filter, where an off Variable is represented with a 0 trit, an on Variable is represented with a 2 trit, and an unset Variable is represented with a 1 trit.

Thing 7: This method is like the last one, but it returns "true" if the state is unconditionally valid, and "false" otherwise.

Thing 8: This method sets forced choices. In the phoenix filter example, our Slice2 has a pair of cells, and they can't be on at the same time. So, if we have states 5 or 7 (12 or 21 in ternary), then we have one on Variable and one unset Variable. We know that the unset Variable must be off to satisfy the constraint, so we can set that Variable to be off.