55 lines
3.4 KiB
Java
55 lines
3.4 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.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.getNameForScoreboard() + " 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"));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|