Search in sources :

Example 1 with EntityControllable

use of io.xol.chunkstories.api.entity.interfaces.EntityControllable in project chunkstories-core by Hugobros3.

the class EntityHumanoid method tick.

@Override
public void tick() {
    eyePosition = stance.get() == EntityHumanoidStance.CROUCHING ? 1.15 : 1.65;
    // Only  if we are allowed to
    boolean tick = false;
    if (this instanceof EntityControllable) {
        Controller controller = ((EntityControllable) this).getControllerComponent().getController();
        if (controller == null)
            tick = (getWorld() instanceof WorldMaster);
        else if (getWorld() instanceof WorldClient && ((WorldClient) getWorld()).getClient().getPlayer().equals(controller))
            tick = true;
    } else
        tick = (getWorld() instanceof WorldMaster);
    if (tick) {
        // The actual moment the jump takes effect
        // voxelIn != null && voxelIn.getType().isLiquid();
        boolean inWater = isInWater();
        if (jumpForce > 0.0 && (!justJumped || inWater)) {
            // Set the velocity
            getVelocityComponent().setVelocityY(jumpForce);
            justJumped = true;
            metersWalked = 0.0;
            jumpForce = 0.0;
        }
        // Set acceleration vector to wanted speed - actual speed
        if (isDead())
            targetVelocity = new Vector3d(0.0);
        acceleration = new Vector3d(targetVelocity.x() - getVelocityComponent().getVelocity().x(), 0, targetVelocity.z() - getVelocityComponent().getVelocity().z());
        // Limit maximal acceleration depending if we're on the groud or not, we accelerate 2x faster on ground
        double maxAcceleration = isOnGround() ? 0.010 : 0.005;
        if (inWater)
            maxAcceleration = 0.005;
        if (acceleration.length() > maxAcceleration) {
            acceleration.normalize();
            acceleration.mul(maxAcceleration);
        }
    }
    // Plays the walking sounds
    handleWalkingEtcSounds();
    // Tick : will move the entity, solve velocity/acceleration and so on
    super.tick();
}
Also used : Vector3d(org.joml.Vector3d) Controller(io.xol.chunkstories.api.entity.Controller) EntityControllable(io.xol.chunkstories.api.entity.interfaces.EntityControllable) WorldClient(io.xol.chunkstories.api.world.WorldClient) WorldMaster(io.xol.chunkstories.api.world.WorldMaster)

Example 2 with EntityControllable

use of io.xol.chunkstories.api.entity.interfaces.EntityControllable in project chunkstories-core by Hugobros3.

the class EntityPlayer method handleInteraction.

public boolean handleInteraction(Entity entity, Input input) {
    if (isDead() && input.getName().equals("mouse.right") && entity instanceof EntityControllable) {
        EntityControllable ctrla = (EntityControllable) entity;
        Controller ctrlr = ctrla.getController();
        if (ctrlr != null && ctrlr instanceof Player) {
            Player p = (Player) ctrlr;
            p.openInventory(this.getInventory());
            // p.sendMessage("HELLO THIS MY CADAVERER, PLZ FUCK OFF");
            return true;
        }
    }
    return false;
}
Also used : Player(io.xol.chunkstories.api.player.Player) LocalPlayer(io.xol.chunkstories.api.client.LocalPlayer) Controller(io.xol.chunkstories.api.entity.Controller) EntityComponentController(io.xol.chunkstories.api.entity.components.EntityComponentController) EntityControllable(io.xol.chunkstories.api.entity.interfaces.EntityControllable)

Example 3 with EntityControllable

use of io.xol.chunkstories.api.entity.interfaces.EntityControllable in project chunkstories-core by Hugobros3.

the class EntityComponentHealth method handleDeath.

private void handleDeath() {
    EntityDeathEvent entityDeathEvent = new EntityDeathEvent(entityLiving);
    entity.getWorld().getGameLogic().getPluginsManager().fireEvent(entityDeathEvent);
    // Handles cases of controlled player death
    if (entity instanceof EntityControllable) {
        Controller controller = ((EntityControllable) entity).getControllerComponent().getController();
        if (controller != null) {
            controller.setControlledEntity(null);
            // Serverside stuff
            if (controller instanceof Player && entity.getWorld() instanceof WorldMaster) {
                Player player = (Player) controller;
                PlayerDeathEvent event = new PlayerDeathEvent(player);
                entity.getWorld().getGameLogic().getPluginsManager().fireEvent(event);
                // When a player dies, delete his save as well
                File playerSavefile = new File(((WorldMaster) entity.getWorld()).getFolderPath() + "/players/" + player.getName().toLowerCase() + ".csf");
                if (playerSavefile.exists()) {
                    // Player save file is deleted upon death
                    playerSavefile.delete();
                }
                if (event.getDeathMessage() != null) {
                    GameContext gc = player.getContext();
                    if (gc instanceof ServerInterface)
                        ((ServerInterface) gc).broadcastMessage(event.getDeathMessage());
                }
            } else {
            // Weird, undefined cases ( controller wasn't a player, maybe some weird mod logic here
            }
        }
    }
}
Also used : Player(io.xol.chunkstories.api.player.Player) ServerInterface(io.xol.chunkstories.api.server.ServerInterface) EntityDeathEvent(io.xol.chunkstories.api.events.entity.EntityDeathEvent) GameContext(io.xol.chunkstories.api.GameContext) PlayerDeathEvent(io.xol.chunkstories.api.events.player.PlayerDeathEvent) Controller(io.xol.chunkstories.api.entity.Controller) EntityControllable(io.xol.chunkstories.api.entity.interfaces.EntityControllable) File(java.io.File) WorldMaster(io.xol.chunkstories.api.world.WorldMaster)

Example 4 with EntityControllable

use of io.xol.chunkstories.api.entity.interfaces.EntityControllable in project chunkstories-core by Hugobros3.

the class EntityComponentSelectedItem method push.

@Override
protected void push(StreamTarget destinator, DataOutputStream dos) throws IOException {
    dos.writeInt(selectedSlot);
    ItemPile pile = inventory.getItemPileAt(selectedSlot, 0);
    // don't bother writing the item pile if we're not master or if we'd be telling the controller about it
    if (pile == null || !(entity.getWorld() instanceof WorldMaster) || (destinator instanceof EntityControllable && destinator.equals(((EntityControllable) entity).getControllerComponent())))
        dos.writeBoolean(false);
    else {
        dos.writeBoolean(true);
        pile.saveIntoStream(entity.getWorld().getContentTranslator(), dos);
    }
}
Also used : ItemPile(io.xol.chunkstories.api.item.inventory.ItemPile) EntityControllable(io.xol.chunkstories.api.entity.interfaces.EntityControllable) WorldMaster(io.xol.chunkstories.api.world.WorldMaster)

Example 5 with EntityControllable

use of io.xol.chunkstories.api.entity.interfaces.EntityControllable in project chunkstories-core by Hugobros3.

the class ItemFirearm method tickInHand.

/**
 * Should be called when the owner has this item selected
 *
 * @param owner
 */
@Override
public void tickInHand(Entity owner, ItemPile itemPile) {
    if (owner instanceof EntityControllable && ((EntityControllable) owner).getController() != null) {
        EntityControllable owner2 = ((EntityControllable) owner);
        Controller controller = owner2.getController();
        // For now only client-side players can trigger shooting actions
        if (controller instanceof LocalPlayer) {
            if (!((LocalPlayer) controller).hasFocus())
                return;
            LocalPlayer LocalPlayer = (LocalPlayer) controller;
            if (LocalPlayer.getInputsManager().getInputByName("mouse.left").isPressed()) {
                // Check for bullet presence (or creative mode)
                boolean bulletPresence = (owner instanceof EntityCreative && ((EntityCreative) owner).isCreativeMode()) || checkBullet(itemPile);
                if (!bulletPresence && !wasTriggerPressedLastTick) {
                    // Play sounds
                    if (LocalPlayer != null)
                        LocalPlayer.getSoundManager().playSoundEffect("sounds/dogez/weapon/default/dry.ogg", Mode.NORMAL, owner.getLocation(), 1.0f, 1.0f, 1f, (float) soundRange);
                // Dry.ogg
                // return;
                } else if ((automatic || !wasTriggerPressedLastTick) && (System.currentTimeMillis() - lastShot) / 1000.0d > 1.0 / (rpm / 60.0)) {
                    // Fire virtual input
                    // ClientInputPressedEvent event = new ClientInputPressedEvent(controller.getInputsManager().getInputByName("shootGun"));
                    // Client.getInstance().getPluginManager().fireEvent(event);
                    LocalPlayer.getInputsManager().onInputPressed(controller.getInputsManager().getInputByName("shootGun"));
                    lastShot = System.currentTimeMillis();
                }
            }
            isScoped = this.isScopedWeapon() && controller.getInputsManager().getInputByName("mouse.right").isPressed();
            wasTriggerPressedLastTick = controller.getInputsManager().getInputByName("mouse.left").isPressed();
        }
    }
}
Also used : LocalPlayer(io.xol.chunkstories.api.client.LocalPlayer) EntityCreative(io.xol.chunkstories.api.entity.interfaces.EntityCreative) Controller(io.xol.chunkstories.api.entity.Controller) EntityControllable(io.xol.chunkstories.api.entity.interfaces.EntityControllable)

Aggregations

EntityControllable (io.xol.chunkstories.api.entity.interfaces.EntityControllable)27 Controller (io.xol.chunkstories.api.entity.Controller)10 Location (io.xol.chunkstories.api.Location)9 WorldMaster (io.xol.chunkstories.api.world.WorldMaster)9 Player (io.xol.chunkstories.api.player.Player)7 Vector3d (org.joml.Vector3d)6 LocalPlayer (io.xol.chunkstories.api.client.LocalPlayer)5 Entity (io.xol.chunkstories.api.entity.Entity)5 EntityCreative (io.xol.chunkstories.api.entity.interfaces.EntityCreative)4 EntityLiving (io.xol.chunkstories.api.entity.EntityLiving)3 World (io.xol.chunkstories.api.world.World)3 WorldClientRemote (io.xol.chunkstories.world.WorldClientRemote)3 ClientInterface (io.xol.chunkstories.api.client.ClientInterface)2 EntityWorldModifier (io.xol.chunkstories.api.entity.interfaces.EntityWorldModifier)2 PlayerInputPressedEvent (io.xol.chunkstories.api.events.player.PlayerInputPressedEvent)2 PlayerInputReleasedEvent (io.xol.chunkstories.api.events.player.PlayerInputReleasedEvent)2 PlayerVoxelModificationEvent (io.xol.chunkstories.api.events.player.voxel.PlayerVoxelModificationEvent)2 WorldException (io.xol.chunkstories.api.exceptions.world.WorldException)2 ItemPile (io.xol.chunkstories.api.item.inventory.ItemPile)2 ClientPluginManager (io.xol.chunkstories.api.plugin.ClientPluginManager)2