- Joined
- Jul 11, 2020
- Messages
- 0
- Reaction score
- 26
- Points
- 0
Jo Leute,
um das ein für alle mal klarzustellen, da es viele "Mhyten" um das Thema Vanilla-Server-Reach gibt und die Meinungen dabei sehr weit auseinander gehen, von 6 bis teilweise 10 Blöcken Hit-Reach, möchte ich euch hier mal versuchen das Thema auf Codeebene etwas näher zu bringen.
Fangen wir an...
Als erstes decompilen wir die Vanilla Server-Source (ich verwende 1.8.8, auf anderen Versionen gibt es evtl. kleinere Unterschiede (1.9, 1.10, etc.)).
Dafür verwenden wir das ModCoderPack(http://www.modcoderpack.com/).
Falls ihr nicht wisst wie es genau funktioniert googlet einfach
Nun zum Code:
Wenn der Client ein anderes Entity attacken will, sendet er dem Server ein C02PacketUseEntity-Packet.
Wenn man ein bisschen in der Server-Source sucht, findet man die Methode processUseEntity() in der Klasse net.minecraft.network.NetHandlerPlayServer, der man C02PacketUseEntity(-Packet) übergeben muss:
View attachment 228
Wie man hier sehen kann, wird die Variable d0 auf 36 gesetzt. Dann wird mit der Methode "getDistanceSqToEntity" geprüft, ob das Entity im "Radius" des Spielers ist.
(Die Methode "canEntityBeSeen" ist hier irrelevant, da diese nur überprüft, ob Blöcke zwischen den Entities sind.)
Weiter mit der Methode "getDistanceSqToEntity":
"Returns the squared distance to the entity [...]" heißt, dass die Methode die Distanz quadriert("hoch 2") zurückgibt.
Warum hoch 2? https://de.wikipedia.org/wiki/Satz_des_Pythagoras
View attachment 229
Quadriert heißt für uns jetzt: Wurzel ziehen
Und die Wurzel von 36 ist 6.
Und 6^2 = 36.
;-D
Ich hoffe, jeder konnte es nachvollziehen. Falls noch Fragen existieren: Schreibt es unter diesen Thread
um das ein für alle mal klarzustellen, da es viele "Mhyten" um das Thema Vanilla-Server-Reach gibt und die Meinungen dabei sehr weit auseinander gehen, von 6 bis teilweise 10 Blöcken Hit-Reach, möchte ich euch hier mal versuchen das Thema auf Codeebene etwas näher zu bringen.
Fangen wir an...
Als erstes decompilen wir die Vanilla Server-Source (ich verwende 1.8.8, auf anderen Versionen gibt es evtl. kleinere Unterschiede (1.9, 1.10, etc.)).
Dafür verwenden wir das ModCoderPack(http://www.modcoderpack.com/).
Falls ihr nicht wisst wie es genau funktioniert googlet einfach
Nun zum Code:
Wenn der Client ein anderes Entity attacken will, sendet er dem Server ein C02PacketUseEntity-Packet.
Wenn man ein bisschen in der Server-Source sucht, findet man die Methode processUseEntity() in der Klasse net.minecraft.network.NetHandlerPlayServer, der man C02PacketUseEntity(-Packet) übergeben muss:
View attachment 228
Wie man hier sehen kann, wird die Variable d0 auf 36 gesetzt. Dann wird mit der Methode "getDistanceSqToEntity" geprüft, ob das Entity im "Radius" des Spielers ist.
(Die Methode "canEntityBeSeen" ist hier irrelevant, da diese nur überprüft, ob Blöcke zwischen den Entities sind.)
Weiter mit der Methode "getDistanceSqToEntity":
"Returns the squared distance to the entity [...]" heißt, dass die Methode die Distanz quadriert("hoch 2") zurückgibt.
Warum hoch 2? https://de.wikipedia.org/wiki/Satz_des_Pythagoras
View attachment 229
Quadriert heißt für uns jetzt: Wurzel ziehen
Und die Wurzel von 36 ist 6.
Und 6^2 = 36.
;-D
Ich hoffe, jeder konnte es nachvollziehen. Falls noch Fragen existieren: Schreibt es unter diesen Thread
Last edited by a moderator: