I've spent some time designing a 3D printable joystick that looks and feels very good, and is surprisingly robust.  The joystick is designed for the AMIGA computer, but will work on other platforms, and with a few wiring changes much more.

The joystick wiring is very simple, as follows:

The rapid fire PCB can be ordered or built yourself, its a very basic 555 circuit.

You can order a board from PCBWay at https://www.pcbway.com/project/shareproject/Rapid_Fire_for_Retro_Joysticks_82418db4.html

The 3D models for the joystick can be obtained here:

Tinkercad: https://www.tinkercad.com/things/8ox5wj6ffxO
Thingiverse: https://www.thingiverse.com/thing:5226057

Assembly Video:

Full Parts list here (affiliate links)

Aluminium Rod: 8mm x 100mm (T6): https://amzn.to/3KVzZgY
C-Clips: 6.4mm (2) : https://amzn.to/3gcZbRT
RS232 Data Cable: DB9 RS232 Straight Through Cable (keep the other end for the next video, internal wire colours may vary): https://amzn.to/3Gs23Fv
Micro-Switches: V-15-1C25: https://amzn.to/3uemZgn
Slide Switches: 2 position, SPDT, body size 10 x 5 x 5mm: https://amzn.to/3AScHE7
Spring: 1.2mm wire diameter, 15mm outer diameter, 30mm: https://amzn.to/3GdBL9O
Cable Ties: 3.6mm x 100mm, https://amzn.to/32KJP49


USB Joystick Adapter

If you want to use this on a modern system, a simple Arduino Micro joystick adapter can be built. 

Source code is here: https://robsmithdev.co.uk/YouTube/JoystickAdapter.zip

And you can watch the build here: