Package com.bergerkiller.bukkit.tc.signactions

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

package com.bergerkiller.bukkit.tc.signactions;

import org.bukkit.util.Vector;

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

public class SignActionJumper extends SignAction {

  @Override
  public boolean match(SignActionEvent info) {
    return info.isType("jump") && info.getMode() != SignActionMode.NONE;
  }

  @Override
  public void execute(SignActionEvent info) {
    if (!info.isPowered() || !info.hasMember()) {
      return;
    }
    final boolean isCart = info.isCartSign() && info.isAction(SignActionType.MEMBER_ENTER);
    final boolean isTrain = info.isTrainSign() && info.isAction(SignActionType.GROUP_ENTER);
    if (!isCart && !isTrain) {
      return;
    }
    // Parse offset
    Vector offset = Util.parseVector(info.getLine(2), new Vector(0.0, 0.0, 0.0));
    if (offset.lengthSquared() == 0.0) {
      return;
    }
    // Rotate the offset so it becomes aligned with the sign
    float yaw = FaceUtil.faceToYaw(info.getFacing().getOppositeFace());
    offset = MathUtil.rotate(yaw, 0.0f, offset);
    // Jump
    if (isCart) {
      jump(info.getMember(), offset);
    } else {
      for (MinecartMember<?> member : info.getGroup()) {
        jump(member, offset.clone());
      }
    }
  }

  @Override
  public boolean build(SignChangeActionEvent info) {
    if (info.isCartSign()) {
      return handleBuild(info, Permission.BUILD_JUMPER, "cart jumper", "cause a minecart to jump towards a certain direction");
    } else if (info.isTrainSign()) {
      return handleBuild(info, Permission.BUILD_JUMPER, "train jumper", "cause an entire train to jump towards a certain direction");
    }
    return false;
  }

  public static void jump(MinecartMember<?> member, Vector offset) {
    //TODO: Proper jumping action for accurate (block location) jump
    member.getEntity().vel.set(offset);
  }
}
TOP

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

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.