minecraft-mod/remappedSrc/modchest/event/playerAfterRespawnEvent.java

37 lines
2.0 KiB
Java

package modchest.event;
import modchest.REServerMod;
import modchest.util.setAndGetMultiButtonsSpawn;
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class playerAfterRespawnEvent implements ServerPlayerEvents.AfterRespawn { //Wenn die Multi-Spawn mod verwendet wurde, muss der Vanillaspawn wieder gesetzt werden
@Override
public void afterRespawn(ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer, boolean alive) {
setAndGetMultiButtonsSpawn setAndGet = new setAndGetMultiButtonsSpawn(); //Damit die Methoden benutzt werden koennen, muss ein Objekt erstellt werden; ist aber egal, weil eh keine Daten in dieser Klasse gespeichert werden
NbtCompound nbt = setAndGet.getMultiSpawnVanilla(newPlayer); //holt sich den nbt-tag
if (nbt != null) {
try {
int[] location = nbt.getIntArray("location"); //holt sich den gespeicherten Ort
BlockPos blockPos = new BlockPos(location[0], location[1], location[2]);
String[] parts = nbt.getString("dimension").split(":"); //holt sich die gespeicherte Dimension; trennt den String entspreichend; damit sollte es auch funktionieren, sollte eine Mod weitere Dimensionen hinzufuegen
parts = parts[2].split("]");
RegistryKey<World> dim = RegistryKey.of(Registry.WORLD_KEY, new Identifier(parts[0]));
float angle = nbt.getFloat("angle"); //Und den blickwinkel
newPlayer.setSpawnPoint(dim, blockPos, angle, true, false);
} catch (Exception e) {
REServerMod.LOGGER.info("Following error when trying set " + newPlayer.getDisplayName() + "'s Vanilla Spawn: " + e);
}
}
}
}