org.spongepowered.api.event.block.CollideBlockEvent Maven / Gradle / Ivy
Show all versions of spongeapi Show documentation
/*
* This file is part of SpongeAPI, licensed under the MIT License (MIT).
*
* Copyright (c) SpongePowered
* Copyright (c) contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.spongepowered.api.event.block;
import org.spongepowered.api.block.BlockSnapshot;
import org.spongepowered.api.block.BlockState;
import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.event.action.CollideEvent;
import org.spongepowered.api.util.Direction;
import org.spongepowered.api.world.server.ServerLocation;
/**
* Fired when an {@link Entity} collides with a {@link BlockSnapshot}.
* Note that this event is fired very often. You might want to listen to one of its sub-events instead.
*/
public interface CollideBlockEvent extends CollideEvent {
/**
* Gets the target {@link ServerLocation} being interacted with.
*
* @return The location
*/
ServerLocation targetLocation();
/**
* Gets the target {@link BlockState} being interacted with.
*
* @return The block state
*/
BlockState targetBlock();
/**
* Gets the target "side" of the {@link BlockState} being interacted with
* or {@link Direction#NONE} if not known.
*
* @return An optional containing the side being interacted with or
* {@link Direction#NONE}
*/
Direction targetSide();
/**
* Fires when an {@link Entity} moves into a block and collides with it.
* Cancelling this event will allow the original movement to happen.
* e.g. an {@link Entity} falling will continue to fall through solid ground when this event is cancelled
*/
interface Move extends CollideBlockEvent {}
/**
* Fires when an {@link Entity} falls on a block.
* Cancelling this event will prevent the fall-logic to run.
* e.g. fall-damage or trampling {@link BlockTypes#FARMLAND}
*
*/
interface Fall extends CollideBlockEvent {}
/**
* Fires when an {@link Entity} steps on a block.
* Cancelling this event will prevent the step-on-logic to run.
* e.g. breaking {@link BlockTypes#TURTLE_EGG}s or damage by {@link BlockTypes#MAGMA_BLOCK}s
*
*/
interface StepOn extends CollideBlockEvent {}
/**
* Fires when an {@link Entity} is inside a block.
* Cancelling this event will prevent the inside-block-logic to run.
* e.g. {@link BlockTypes#END_PORTAL } teleporting or {@link BlockTypes#COBWEB} slowing movement.
*
*/
interface Inside extends CollideBlockEvent {}
/**
* Fired when an {@link Entity} impacts another {@link BlockSnapshot}.
*
* Note: this should only fire once after the first impact.
*/
interface Impact extends CollideBlockEvent, CollideEvent.Impact {}
}