52 lines
3.5 KiB
Java
52 lines
3.5 KiB
Java
|
package modchest.networking.packet;
|
||
|
|
||
|
import modchest.REServerMod;
|
||
|
import modchest.networking.modNetworkingServer;
|
||
|
import modchest.util.setAndGetMultiButtonsSpawn;
|
||
|
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
|
||
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||
|
import net.minecraft.network.PacketByteBuf;
|
||
|
import net.minecraft.server.MinecraftServer;
|
||
|
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
||
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||
|
import net.minecraft.text.Text;
|
||
|
import net.minecraft.util.math.BlockPos;
|
||
|
import net.minecraft.util.registry.RegistryKey;
|
||
|
import net.minecraft.world.World;
|
||
|
|
||
|
import java.util.Arrays;
|
||
|
|
||
|
public class deathScreenMultiButtonsC2SPacket {
|
||
|
public static void receive(MinecraftServer server, ServerPlayerEntity player, //Passiert auf dem Server!!!
|
||
|
ServerPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) {
|
||
|
setAndGetMultiButtonsSpawn setAndGet = new setAndGetMultiButtonsSpawn(); //um die nicht-statischen Methoden aufzurufen, erzeugen wir ein Objekt. Wir speichern aber keine Daten in der Klasse, daher ist das OK
|
||
|
int num; //num steht fuer Number, und sagt, welcher der 5 Knoepfe gedrueckt wurde, da das Spiel abstuertzt wenn man buf.readInt() mehr als einmal ausfuehrt
|
||
|
try {
|
||
|
num = buf.readInt(); //Um Spielabstuertze definitiv zu verhindern in einem try block, hat aber nie Probleme gemacht, also eine reine absicherung
|
||
|
} catch (Exception e) {
|
||
|
REServerMod.LOGGER.info("Following Error when trying to get the number of pressed Button: " + e + "continuing bwith Button 1");
|
||
|
num = 1;
|
||
|
}
|
||
|
BlockPos posAlt = player.getSpawnPointPosition(); //Spawnpunkt der Vanilla-respawn-funktion wird gespeichert
|
||
|
RegistryKey<World> dimAlt = player.getSpawnPointDimension();//Dimension "
|
||
|
float angleAlt = player.getSpawnAngle(); //Blickrichtung "
|
||
|
int[] posXYZ = setAndGet.getMultiSpawn(player, num); //neue Koordinaten werden vom Server geholt
|
||
|
|
||
|
if (posXYZ.length == 3 && posXYZ[0] < 77889900) { //Stellt sicher, dass die 3 spawnkoordinaten nicht null sind; Koordinaten 77889900 sind ausserhalb der Welt und werden daher von mir in setAndGetMultiSpawnButtonsSpawn als Errorcodes verwendet
|
||
|
try {
|
||
|
REServerMod.LOGGER.info("try Respawning from Multi-Sapwn");
|
||
|
player.setSpawnPoint(World.OVERWORLD, new BlockPos(posXYZ[0], posXYZ[1], posXYZ[2]), 0, true, true); //neuer Spawn wird gesetzt
|
||
|
ServerPlayNetworking.send(player, modNetworkingServer.request_respawn, PacketByteBufs.create()); //Anfrage an den Client zum respawnen wird gesendet
|
||
|
player.sendMessage(Text.of("Respawn bei #" + num + "! "));
|
||
|
REServerMod.LOGGER.info("Respawned Player: " + player.getDisplayName() + "at " + Arrays.toString(setAndGet.getMultiSpawn(player, num)));
|
||
|
} catch (Exception e) {
|
||
|
REServerMod.LOGGER.info("Sorry! Following error, trying to respawn player " + player.getDisplayName() + ": " + e);
|
||
|
}
|
||
|
} else {
|
||
|
player.sendMessage(Text.of("Oh! Scheint so als wäre der Spawnpunkt nicht gesetzt!"));
|
||
|
}
|
||
|
//player.setSpawnPoint(dimAlt, posAlt, angleAlt, true, false); //TODDO: wenn unkommentiert, setzt er schneller den neuen spawn, als der Spieler respawnt
|
||
|
}
|
||
|
}
|