The default item menu can be found by locating 'Window_Item' in your list of scripts. Scroll down until you find 'def refresh'. The key part that you want to look at is this:
@data = []
# Add item
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items[i])
end
end
# Also add weapons and items if outside of battle
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
end
end
end
The game will first check for items (potions, antidotes, etc), then weapons, then armors. Because 'Window_Item' is used in battles as well, the line
unless $game_temp.in_battle
is needed. This way, it won't draw your weapons and armors when in battle--only your potions and key-items.
Accessories, shields, clothes, and helms are all considered as Armor. By using '$data_armors[index].kind', you can change the order of what is drawn first. So in your example, it would look like this:
@data = []
#Adds weapons to the list
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
end
end
end
# Adds items to the list
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items[i])
end
end
# Adds accessories to the list
unless $game_temp.in_battle
for i in 1...$data_armors.size
# 0 = shield, 1 = helm, 2 = body, 3 = accessories
if $game_party.armor_number(i) > 0 and $data_armors[i].kind == 3
@data.push($data_armors[i])
end
end
end
# Continue on with the list...