Package org.spout.api.entity

Examples of org.spout.api.entity.Player


      if (human.getAttachedCount() <= 1) {
        // If we haven't logged in before, we want to set all abilities to the default gamemode
        human.setGamemode(gamemode, false);
      }
    } else if (message.getStatus() == PlayerStatusMessage.RESPAWN) {
      Player player = session.getPlayer();
      Point point = player.getWorld().getSpawnPoint().getPosition();
      if (PlayerRespawnEvent.getHandlerList().getRegisteredListeners().length > 0) {
        PlayerRespawnEvent event = server.getEventManager().callEvent(new PlayerRespawnEvent(player, point));

        if (event.isCancelled()) {
          return;
        }
        point = event.getPoint();
      }
      //Set position for the server
      player.getPhysics().setPosition(point);
      player.getNetwork().forceRespawn();
      Human human = player.add(Human.class);
      human.getHealth().setHealth(human.getHealth().getMaxHealth(), HealthChangeCause.SPAWN);

      final Transform spawn = new Transform(player.getPhysics().getTransform());
      spawn.setPosition(point);
    }
  }
View Full Code Here


    }
    final int newSlot = message.getSlot();
    if (newSlot < 0 || newSlot > 8) {
      return;
    }
    Player player = session.getPlayer();
    QuickbarInventory quickbar = PlayerUtil.getQuickbar(session.getPlayer());
    if (quickbar == null) {
      return;
    }
    PlayerHeldItemChangeEvent event = new PlayerHeldItemChangeEvent(player, quickbar.getSelectedSlot().getIndex(), newSlot);
    if (player.getEngine().getEventManager().callEvent(event).isCancelled()) {
      // Reset
      player.getNetwork().callProtocolEvent(new PlayerSelectedSlotChangeEvent(session.getPlayer(), event.getPreviousSlot()), player);
    } else {
      quickbar.setSelectedSlot(event.getNewSlot());
      quickbar.updateHeldItem(player);
      // Changed slot by event handler
      if (newSlot != event.getNewSlot()) {
        player.getNetwork().callProtocolEvent(new PlayerSelectedSlotChangeEvent(session.getPlayer(), event.getNewSlot()), player);
      }
    }
  }
View Full Code Here

import org.spout.vanilla.protocol.msg.player.PlayerGroundMessage;

public class PlayerGroundHandler extends MessageHandler<PlayerGroundMessage> {
  @Override
  public void handleServer(ServerSession session, PlayerGroundMessage message) {
    Player player = session.getPlayer();
    Human human = player.get(Human.class);
    if (human != null) {
      human.setOnGround(message.isOnGround());
    }
    //TODO check and apply fall damage!
  }
View Full Code Here

import org.spout.vanilla.util.PlayerUtil;

public final class PlayerDiggingHandler extends MessageHandler<PlayerDiggingMessage> {
  @Override
  public void handleServer(ServerSession session, PlayerDiggingMessage message) {
    Player player = session.getPlayer();
    RepositionManager rm = player.getNetwork().getRepositionManager();
    RepositionManager rmInverse = rm.getInverse();

    int x = rmInverse.convertX(message.getX());
    int y = rmInverse.convertY(message.getY());
    int z = rmInverse.convertZ(message.getZ());
    int state = message.getState();

    World w = player.getWorld();
    Point point = new Point(w, x, y, z);
    Block block = w.getBlock(point);
    BlockMaterial blockMaterial = block.getMaterial();

    short minecraftID = VanillaMaterials.getMinecraftId(blockMaterial);
    BlockFace clickedFace = message.getFace();
    Human human = player.get(Human.class);
    if (human == null) {
      return;
    }
    Slot currentSlot = PlayerUtil.getHeldSlot(player);
    if (currentSlot == null) {
      return;
    }
    ItemStack heldItem = currentSlot.get();

    // Don't block protections if dropping an item, silly Notch...
    if (state != PlayerDiggingMessage.STATE_DROP_ITEM && state != PlayerDiggingMessage.STATE_SHOOT_ARROW_EAT_FOOD) {
      Collection<Protection> protections = player.getEngine().getServiceManager().getRegistration(ProtectionService.class).getProvider().getAllProtections(point);
      for (Protection p : protections) {
        if (p.contains(point) && !human.isOp()) {
          player.getNetwork().getSession().send(new BlockChangeMessage(x, y, z, minecraftID, block.getBlockData() & 0xF, rm));
          player.sendMessage(ChatStyle.DARK_RED + "This area is a protected spawn point!");
          return;
        }
      }
    }

    if (state == PlayerDiggingMessage.STATE_DROP_ITEM && x == 0 && y == 0 && z == 0) {
      human.dropItem();
      return;
    }

    boolean isInteractable = true;
    if (blockMaterial == VanillaMaterials.AIR) {
      isInteractable = false;
    }
    // TODO VanillaPlayerInteractBlockEvent and add in Results to it (to
    // more indepthly take away durability).
    switch (state) {
      case PlayerDiggingMessage.STATE_START_DIGGING:
        if (!isProtected(player, rm, x, y, z, block, minecraftID)) {
          final PlayerInteractBlockEvent event = new PlayerInteractBlockEvent(player, block, point, clickedFace, Action.LEFT_CLICK);
          if (player.getEngine().getEventManager().callEvent(event).isCancelled()) {
            if (human.isCreative() || blockMaterial.getHardness() == 0.0f) {
              session.send(new BlockChangeMessage(block, player.getNetwork().getRepositionManager()));
              Sign sign = block.get(Sign.class);
              if (sign != null) {
                session.send(new SignMessage(block.getX(), block.getY(), block.getZ(), sign.getText(), player.getNetwork().getRepositionManager()));
              }
            }
          } else {
            // Perform interactions
            if (heldItem == null) {
              // interacting using fist
            } else if (!isInteractable) {
              // interacting with nothing using item
              heldItem.getMaterial().onInteract(player, Action.LEFT_CLICK);
            } else {
              // interacting with block using item
              heldItem.getMaterial().onInteract(player, block, Action.LEFT_CLICK, clickedFace);
            }

            if (isInteractable) {
              Block neigh = block.translate(clickedFace);
              boolean fire = neigh.getMaterial().equals(VanillaMaterials.FIRE);
              if (fire) {
                // put out fire
                if (VanillaMaterials.FIRE.onDestroy(neigh, new PlayerBreakCause(player, neigh))) {
                  GeneralEffects.RANDOM_FIZZ.playGlobal(block.getPosition());
                }
              } else if (human.isSurvival() && blockMaterial.getHardness() != 0.0f) {
                ItemStack currentItem = PlayerUtil.getHeldSlot(player).get();
                if (currentItem != null) {
                  player.get(Digging.class).startDigging(new Point(w, x, y, z), currentItem.getMaterial());
                } else {
                  player.get(Digging.class).startDigging(new Point(w, x, y, z), VanillaMaterials.AIR);
                }
              } else {
                // insta-break
                if (breakBlock(blockMaterial, block, human, session)) {
                  GeneralEffects.BREAKBLOCK.playGlobal(block.getPosition(), blockMaterial, player);
                }
              }
            }
          }
        }
        break;
      case PlayerDiggingMessage.STATE_CANCEL_DIGGING:
        if (!isProtected(player, rm, x, y, z, block, minecraftID)) {
          player.get(Digging.class).stopDigging(new Point(w, x, y, z), false);
        }
        break;
      case PlayerDiggingMessage.STATE_DONE_DIGGING:
        if (!isProtected(player, rm, x, y, z, block, minecraftID)) {
          Digging diggingComponent = player.get(Digging.class);

          if (!diggingComponent.stopDigging(new Point(w, x, y, z), true) || !isInteractable) {
            if (!diggingComponent.isDigging()) {
              session.send(new BlockChangeMessage(block, player.getNetwork().getRepositionManager()));
              Sign sign = block.get(Sign.class);
              if (sign != null) {
                session.send(new SignMessage(block.getX(), block.getY(), block.getZ(), sign.getText(), player.getNetwork().getRepositionManager()));
              }
            }
            return;
          }

          if (player.getData().get(VanillaData.GAMEMODE).equals(GameMode.SURVIVAL)) {
            long diggingTicks = diggingComponent.getDiggingTicks();
            int damageDone;
            int totalDamage;

            if (heldItem == null) {
              damageDone = ((int) diggingTicks);
            } else {
              damageDone = ((int) diggingTicks * ((VanillaMaterial) heldItem.getMaterial()).getDamage());
            }
            // TODO: Take into account EFFICIENCY enchantment
            // TODO: Digging is slower while under water, on ladders,
            // etc. AQUA_AFFINITY enchantment speeds up underwater
            // digging

            totalDamage = ((int) blockMaterial.getHardness() - damageDone);
            if (totalDamage <= 40) { // Yes, this is a very high
              // allowance - this is because
              // this is only over a single
              // block, and this will spike
              // due to varying latency.
              if (breakBlock(blockMaterial, block, human, session)) {
                GeneralEffects.BREAKBLOCK.playGlobal(block.getPosition(), blockMaterial, player);

                if (heldItem != null && heldItem.getMaterial() instanceof Tool) {
                  Tool tool = (Tool) heldItem.getMaterial();
                  short damage = tool.getDurabilityPenalty(heldItem);
                  if (currentSlot.get().getData() + damage >= tool.getMaxDurability()) {
                    currentSlot.set(null);
                  } else {
                    currentSlot.addData(damage);
                  }
                }
              }
            }
          }
        }
        break;
      case PlayerDiggingMessage.STATE_DROP_ITEM:
        human.dropItem();
        break;
      case PlayerDiggingMessage.STATE_SHOOT_ARROW_EAT_FOOD:
        if (heldItem.getMaterial() instanceof Food || heldItem.getMaterial() instanceof PotionItem) {
          player.add(Hunger.class).setEating(false, currentSlot);
        } else if (heldItem.getMaterial() instanceof Sword) {
          human.setEatingBlocking(false);
        }
        break;
      case PlayerDiggingMessage.STATE_UPDATE_BLOCK:
View Full Code Here

    }
  };

  @Override
  public void handleClient(ClientSession session, PlayerPositionMessage message) {
    Player player = session.getPlayer();

    World world = session.getEngine().getDefaultWorld();
    player.getPhysics().setPosition(new Point(world, (float) message.getX(), (float) message.getY(), (float) message.getZ()));
    // TODO: player position isnt updated
    System.out.println(message.toString());
  }
View Full Code Here

    System.out.println(message.toString());
  }

  @Override
  public void handleServer(ServerSession session, PlayerPositionMessage message) {
    final Player holder = session.getPlayer();
    final RepositionManager rmInverse = holder.getNetwork().getRepositionManager().getInverse();

    Ping ping = holder.get(Ping.class);
    if (ping != null) {
      ping.refresh();
    }

    final Point rawPosition = new Point(message.getPosition(), holder.getWorld());
    final Point newPosition = rmInverse.convert(rawPosition);
    final Point position = holder.getPhysics().getPosition();

    if (!(holder.getNetwork() instanceof VanillaPlayerNetworkComponent)) {
      throw new IllegalStateException("Using Vanilla Protocol without using VanillaNetworkSynchronizer");
    }
    if (!position.equals(newPosition)) {
      final Human human = holder.get(Human.class);
      // TODO: live?
      holder.getPhysics().setTransform(new Transform(newPosition, holder.getPhysics().getRotation(), holder.getPhysics().getScale()), false);

      //Don't use client onGround value, calculate ourselves
      //MC Client is on ground if y value is whole number, or half step (e.g 55.0, or 65.5)
      float yDiff = Math.abs(newPosition.getBlockY() - newPosition.getY());
      if (yDiff > 0.4) {
        yDiff -= 0.5F; //half blocks
      }
      final BlockMaterial ground = newPosition.getBlock().translate(BlockFace.BOTTOM).getMaterial();
      final boolean onGround = yDiff < 0.01 && (ground instanceof VanillaBlockMaterial && ground.getShape() != null);
      final boolean wasOnGround = human.isOnGround();
      human.setOnGround(onGround);

      //Update falling state
      final boolean wasFalling = human.isFalling();
      if (!onGround && newPosition.getY() < position.getY()) {
        human.setFalling(true);
      } else {
        human.setFalling(false);
      }

      //Hover tracking
      if (wasOnGround && !onGround) {
        human.getData().put("position_on_ground", position);
        human.getData().put("time_in_air", holder.getWorld().getAge());
      } else if (!wasOnGround && !onGround) {
        //Changed directions
        if (wasFalling && !human.isFalling() || human.isInWater()) {
          human.getData().remove("time_in_air");
        }
        float time = human.getData().get("time_in_air", holder.getWorld().getAge());
        //hovering or still rising
        if (time + 2000 < holder.getWorld().getAge() && newPosition.getY() - position.getY() >= 0) {
          if (!human.canFly()) {
            holder.sendMessage("Hover cheating?");
          }
        }
      } else if (!wasOnGround && onGround) {
        human.getData().remove("position_on_ground");
        human.getData().remove("time_in_air");
View Full Code Here

import org.spout.vanilla.protocol.msg.player.pos.PlayerRespawnMessage;

public final class PlayerRespawnHandler extends MessageHandler<PlayerRespawnMessage> {
  @Override
  public void handleClient(ClientSession session, PlayerRespawnMessage message) {
    Player player = session.getPlayer();

    //TODO : Take Dimension ? : message.getDimension()
    //TODO : Take World height ? : message.getWorldHeight()
    //TODO : Take Level tpye ? : message.getWorldType()

    World world = player.getWorld();
    world.getData().put(VanillaData.DIFFICULTY, Difficulty.get(message.getDifficulty()));

    Human human = player.add(Human.class);
    human.setGamemode(GameMode.get(message.getGameMode()));
  }
View Full Code Here

import org.spout.vanilla.protocol.msg.player.PlayerLocaleViewDistanceMessage;

public class PlayerLocaleViewDistanceHandler extends MessageHandler<PlayerLocaleViewDistanceMessage> {
  @Override
  public void handleServer(ServerSession session, PlayerLocaleViewDistanceMessage message) {
    Player player = session.getPlayer();
    Human human = player.get(Human.class);
    if (human != null) {
      ViewDistance distance = ViewDistance.byId(message.getViewDistance());
      human.setViewDistance(distance);
    }
  }
View Full Code Here

  public void handleServer(ServerSession session, PlayerLookMessage message) {
    //First look packet is to login/receive terrain, is not a valid rotation
    if (session.getDataMap().get("first_login", 0) == 0) {
      session.getDataMap().put("first_login", 1);
      Transform transform = session.getPlayer().getPhysics().getTransform();
      Player player = session.getPlayer();
      player.getNetwork().callProtocolEvent(new EntityUpdateEvent(player, transform, EntityUpdateEvent.UpdateAction.TRANSFORM, player.getNetwork().getRepositionManager()), player);
      return;
    }

    Player holder = session.getPlayer();

    holder.getPhysics().setTransform(new Transform(holder.getPhysics().getPosition(), Quaternionf.fromAxesAnglesDeg(message.getPitch(), message.getYaw(), 0), holder.getPhysics().getScale()), false);
    Human human = holder.get(Human.class);
    if (human != null) {
      human.setOnGround(message.isOnGround());
      human.getHead().setOrientation(message.getRotation());
    }
  }
View Full Code Here

import org.spout.vanilla.protocol.msg.player.PlayerBedMessage;

public final class PlayerBedHandler extends MessageHandler<PlayerBedMessage> {
  @Override
  public void handleClient(ClientSession session, PlayerBedMessage message) {
    Player player = session.getPlayer();

    World world = player.getWorld();

    Entity entity = world.getEntity(message.getEntityId());

    Block block = world.getBlock(message.getX(), message.getY(), message.getZ());
View Full Code Here

TOP

Related Classes of org.spout.api.entity.Player

Copyright © 2018 www.massapicom. 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.