Wenn der Server kein eigener Code ist, wo schon zur Compilezeit feststeht, das keine Aufrufe zu den Grafikfunktionen bestehen, dann muss natuerlich irgendwo zur Laufzeit entschieden werden, was passiert. Das wäre zum Beispiel durch ifs moeglich. Es geht natuerlich auch anders, z.b. virtuelle Methoden (auf dem Server bekommen ich beim Aufloesen der ID immer den gleichen Pointer auf eine Dummyinstanz, in der allen Methoden nops sind) oder ich kann mit meiner grafischen Instanz nur kommunizieren indem ich ein Lambda und eine ID uebergebe (auf dem Server wird der Inhalt des Lambdas einfach ignoriert).
Ich wuerde so ein System aber ueberhaupt erst zur Anwendung bringen, wenn tatsaechlich unterschiedliche Zusammensetzungen der Spielobjekte noetig sind (z.B. ein Turm kann schiessen und einer nicht) und dann muss man sich mit diesem Problem ehh auseinandersetzen. Wenn man nicht die Disziplin aufbringt sich bei jedem Zugriff auf eine andere Komponente des Objekts zu ueberlegen, was passiert wenn die Komponente nicht existiert, wird auch an vielen anderen Stellen Probleme bekommen, z.B. bei der Arbeit mit 3rd party libraries.