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.world.World; import java.awt.*; 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; } setAndGet.setMultiSpawnVanilla(player); 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.translatable("chat.modchest.multispawn.respawned", num))); REServerMod.LOGGER.info("Respawned Player " + player.getEntityName() + " at " + Arrays.toString(setAndGet.getMultiSpawn(player, num))); setAndGet.setMultiSpawn(player, 6); } catch (Exception e) { REServerMod.LOGGER.info("Sorry! Following error, trying to respawn player " + player.getDisplayName() + ": " + e); } } else { if (posXYZ[0] == 77889944) { //Dieser Errorcode bedeutet, dass das Bett zerstoert wurde player.sendMessage(Text.translatable("chat.modchest.multispawn.beddestroyed")); } else { player.sendMessage(Text.translatable("chat.modchest.multispawn.spawnnotset")); } } } }