Package com.bergerkiller.bukkit.tc.signactions

Source Code of com.bergerkiller.bukkit.tc.signactions.SignActionEject

package com.bergerkiller.bukkit.tc.signactions;

import org.bukkit.entity.Player;
import org.bukkit.util.Vector;

import com.bergerkiller.bukkit.common.utils.FaceUtil;
import com.bergerkiller.bukkit.common.utils.MathUtil;
import com.bergerkiller.bukkit.common.utils.ParseUtil;
import com.bergerkiller.bukkit.tc.Permission;
import com.bergerkiller.bukkit.tc.Util;
import com.bergerkiller.bukkit.tc.controller.MinecartMember;
import com.bergerkiller.bukkit.tc.controller.MinecartMemberStore;
import com.bergerkiller.bukkit.tc.events.SignActionEvent;
import com.bergerkiller.bukkit.tc.events.SignChangeActionEvent;

public class SignActionEject extends SignAction {

  @Override
  public boolean match(SignActionEvent info) {
    return info.isType("eject");
  }

  @Override
  public boolean click(SignActionEvent info, Player player) {
    MinecartMember<?> member = MinecartMemberStore.get(player.getVehicle());
    if (member == null) {
      return false;
    }
    info.setMember(member);
    eject(info);
    return true;
  }

  public void eject(SignActionEvent info) {
    final boolean hasSettings = !info.getLine(2).isEmpty() || !info.getLine(3).isEmpty();
    Vector offset = new Vector();
    float yaw = 0F;
    float pitch = 0F;
    if (hasSettings) {
      // Read the offset
      offset = Util.parseVector(info.getLine(2), offset);

      // Read the rotation
      String[] angletext = Util.splitBySeparator(info.getLine(3));
      if (angletext.length == 2) {
        yaw = ParseUtil.parseFloat(angletext[0], 0.0f);
        pitch = ParseUtil.parseFloat(angletext[1], 0.0f);
      } else if (angletext.length == 1) {
        yaw = ParseUtil.parseFloat(angletext[0], 0.0f);
      }

      // Convert to sign-relative-space
      float signyawoffset = (float) FaceUtil.faceToYaw(info.getFacing().getOppositeFace());
      offset = MathUtil.rotate(signyawoffset, 0F, offset);
      yaw += signyawoffset + 90F;
    }

    // Actually eject
    for (MinecartMember<?> mm : info.getMembers()) {
      if (hasSettings) {
        mm.eject(offset, yaw, pitch);
      } else {
        mm.ejectWithOffset();
      }
    }
  }

  @Override
  public void execute(SignActionEvent info) {
    boolean isRemote = false;
    if (info.isCartSign() && info.isAction(SignActionType.MEMBER_ENTER, SignActionType.REDSTONE_ON)) {
    } else if (info.isTrainSign() && info.isAction(SignActionType.GROUP_ENTER, SignActionType.REDSTONE_ON)) {
    } else if (info.isRCSign() && info.isAction(SignActionType.REDSTONE_ON)) {
      isRemote = true;
    } else {
      return;
    }
    if (isRemote || (info.hasMember() && info.isPowered())) {
      eject(info);
    }
  }

  @Override
  public boolean build(SignChangeActionEvent event) {
    if (event.getMode() != SignActionMode.NONE) {
      if (event.isRCSign()) {
        return handleBuild(event, Permission.BUILD_EJECTOR, "cart ejector", "eject the passengers of a remote train");
      } else {
        return handleBuild(event, Permission.BUILD_EJECTOR, "cart ejector", "eject the passengers of a train");
      }
    }
    return false;
  }

  @Override
  public boolean canSupportRC() {
    return true;
  }
}
TOP

Related Classes of com.bergerkiller.bukkit.tc.signactions.SignActionEject

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.