Search in sources :

Example 6 with RespawnLocation

use of org.spongepowered.api.util.RespawnLocation in project LanternServer by LanternPowered.

the class UserStore method serializeValues.

@Override
public void serializeValues(T player, SimpleValueContainer valueContainer, DataView dataView) {
    valueContainer.remove(Keys.IS_SPRINTING);
    valueContainer.remove(Keys.IS_SNEAKING);
    valueContainer.remove(LanternKeys.ACTIVE_HAND);
    final DataView abilities = dataView.createView(ABILITIES);
    abilities.set(FLYING, (byte) (valueContainer.remove(Keys.IS_FLYING).orElse(false) ? 1 : 0));
    abilities.set(FLYING_SPEED, valueContainer.remove(Keys.FLYING_SPEED).orElse(0.1).floatValue());
    abilities.set(CAN_FLY, (byte) (valueContainer.remove(Keys.CAN_FLY).orElse(false) ? 1 : 0));
    final DataView spongeData = getOrCreateView(dataView, DataQueries.EXTENDED_SPONGE_DATA);
    spongeData.set(FIRST_DATE_PLAYED, valueContainer.remove(Keys.FIRST_DATE_PLAYED).orElse(Instant.now()).toEpochMilli());
    spongeData.set(LAST_DATE_PLAYED, valueContainer.remove(Keys.LAST_DATE_PLAYED).orElse(Instant.now()).toEpochMilli());
    spongeData.set(UNIQUE_ID, player.getUniqueId().toString());
    spongeData.set(Queries.CONTENT_VERSION, 1);
    final Map<UUID, RespawnLocation> respawnLocations = valueContainer.remove(Keys.RESPAWN_LOCATIONS).get();
    final List<DataView> respawnLocationViews = new ArrayList<>();
    for (RespawnLocation respawnLocation : respawnLocations.values()) {
        Lantern.getWorldManager().getWorldDimensionId(respawnLocation.getWorldUniqueId()).ifPresent(dimensionId -> {
            // Overworld respawn location is saved in the root container
            if (dimensionId == 0) {
                serializeRespawnLocationTo(dataView, respawnLocation);
            } else {
                respawnLocationViews.add(serializeRespawnLocationTo(DataContainer.createNew(DataView.SafetyMode.NO_DATA_CLONED), respawnLocation).set(RESPAWN_LOCATIONS_DIMENSION, dimensionId));
            }
        });
    }
    dataView.set(RESPAWN_LOCATIONS, respawnLocationViews);
    dataView.set(GAME_MODE, ((LanternGameMode) valueContainer.remove(Keys.GAME_MODE).orElse(GameModes.NOT_SET)).getInternalId());
    dataView.set(SELECTED_ITEM_SLOT, player.getInventory().getHotbar().getSelectedSlotIndex());
    dataView.set(SCORE, valueContainer.remove(LanternKeys.SCORE).get());
    // Serialize the player inventory
    dataView.set(INVENTORY, serializePlayerInventory(player.getInventory()));
    // Serialize the ender chest inventory
    dataView.set(ENDER_CHEST_INVENTORY, serializeEnderChest(player.getEnderChestInventory()));
    final DataView recipeBook = dataView.createView(RECIPE_BOOK);
    recipeBook.set(RECIPE_BOOK_FILTER_ACTIVE, (byte) (valueContainer.remove(LanternKeys.RECIPE_BOOK_FILTER_ACTIVE).orElse(false) ? 1 : 0));
    recipeBook.set(RECIPE_BOOK_GUI_OPEN, (byte) (valueContainer.remove(LanternKeys.RECIPE_BOOK_GUI_OPEN).orElse(false) ? 1 : 0));
    valueContainer.remove(LanternKeys.OPEN_ADVANCEMENT_TREE).ifPresent(o -> {
        if (o.isPresent()) {
            dataView.set(OPEN_ADVANCEMENT_TREE, o.get().getId());
        }
    });
    super.serializeValues(player, valueContainer, dataView);
}
Also used : DataView(org.spongepowered.api.data.DataView) RespawnLocation(org.spongepowered.api.util.RespawnLocation) ArrayList(java.util.ArrayList) UUID(java.util.UUID)

Aggregations

RespawnLocation (org.spongepowered.api.util.RespawnLocation)6 UUID (java.util.UUID)4 Vector3d (com.flowpowered.math.vector.Vector3d)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)2 NBTTagList (net.minecraft.nbt.NBTTagList)2 DataView (org.spongepowered.api.data.DataView)2 BuildWorldWrapper (com.skelril.skree.content.world.build.BuildWorldWrapper)1 MainWorldWrapper (com.skelril.skree.content.world.main.MainWorldWrapper)1 WorldService (com.skelril.skree.service.WorldService)1 Instant (java.time.Instant)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 Test (org.junit.jupiter.api.Test)1 DataHelper.getOrCreateView (org.lanternpowered.server.data.DataHelper.getOrCreateView)1 DataQueries (org.lanternpowered.server.data.DataQueries)1 ObjectSerializer (org.lanternpowered.server.data.io.store.ObjectSerializer)1 SimpleValueContainer (org.lanternpowered.server.data.io.store.SimpleValueContainer)1