I've written a Lua dissector that I use for data that has no designated port, port is assigned arbitrarily to deconflict with other traffic. If I register it to a specific UDP port, then I can find the dissector in the Decode As... dialog in the Current column. But it won't appear in the list if I haven't paired it with a port. Since the data can be on any port I used this as a hack:
local udp_port = DissectorTable.get("udp.port")
udp_port:add(0, xft_protocol)
If I comment out those lines, it doesn't appear in the Current list. But I have to assume there's a legit way to make it show up in the list of dissectors besides associating it with a bogus port. A DissectorTable "any" of some kind, that if the packet has any data payload at all (not necessarily UDP, but practically speaking it is UDP) then it appears in the list so my dissector could be applied.
Try using
udp_port:add_for_decode_as(xft_protocol)