Package com.bergerkiller.bukkit.common.controller

Source Code of com.bergerkiller.bukkit.common.controller.PlayerDataController

package com.bergerkiller.bukkit.common.controller;

import org.bukkit.entity.HumanEntity;

import com.bergerkiller.bukkit.common.conversion.Conversion;
import com.bergerkiller.bukkit.common.internal.CommonNMS;
import com.bergerkiller.bukkit.common.nbt.CommonTag;
import com.bergerkiller.bukkit.common.nbt.CommonTagCompound;

import net.minecraft.server.DedicatedPlayerList;
import net.minecraft.server.EntityHuman;
import net.minecraft.server.IPlayerFileData;
import net.minecraft.server.NBTTagCompound;

/**
* A controller for dealing with player data loading and saving.
* To hook it up to the server, call {@link #assign()}.
*/
public class PlayerDataController {
  private IPlayerFileData base;

  public String[] getSeenPlayers() {
    return base.getSeenPlayers();
  }

  /**
   * Called when the entity data for a human entity has to be loaded
   * By default, this method redirects to the underlying implementation.
   *
   * @param humanEntity to load
   * @return the loaded data
   */
  public CommonTagCompound onLoad(HumanEntity humanEntity) {
    return (CommonTagCompound) CommonTag.create(base.load(CommonNMS.getNative(humanEntity)));
  }

  /**
   * Called when the entity data of a human entity has to be saved.
   * By default, this method redirects to the underlying implementation.
   *
   * @param humanEntity to save
   */
  public void onSave(HumanEntity humanEntity) {
    base.save(CommonNMS.getNative(humanEntity));
  }

  /**
   * Assigns this PlayerDataController to the server
   */
  public void assign() {
    if (this.base != null) {
      // Already assigned - ignore
      return;
    }
    DedicatedPlayerList playerList = CommonNMS.getPlayerList();
    this.base = playerList.playerFileData;
    playerList.playerFileData = new Translator(this);
  }

  /**
   * Obtains the Player Data Controller currently assigned to the server
   *
   * @return the currently assigned Player Data Controller
   */
  public static PlayerDataController get() {
    final IPlayerFileData base = CommonNMS.getPlayerList().playerFileData;
    final PlayerDataController controller;
    if (base instanceof Translator) {
      controller = ((Translator) base).controller;
    } else {
      controller = new PlayerDataController();
      controller.base = base;
    }
    return controller;
  }

  private static final class Translator implements IPlayerFileData {
    private final PlayerDataController controller;

    public Translator(PlayerDataController controller) {
      this.controller = controller;
    }

    @Override
    public String[] getSeenPlayers() {
      return this.controller.getSeenPlayers();
    }

    @Override
    public NBTTagCompound load(EntityHuman arg0) {
      return (NBTTagCompound) this.controller.onLoad((HumanEntity) Conversion.toEntity.convert(arg0)).getHandle();
    }

    @Override
    public void save(EntityHuman arg0) {
      this.controller.onSave((HumanEntity) Conversion.toEntity.convert(arg0));
    }
  }
}
TOP

Related Classes of com.bergerkiller.bukkit.common.controller.PlayerDataController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.