mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-08 09:17:36 +01:00
Added callback line of sight methods. Thanks xZise!
By: EvilSeph <evilseph@gmail.com>
This commit is contained in:
parent
297f375b44
commit
8ce68d156e
@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.util.Callback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a living entity, such as a monster or player
|
* Represents a living entity, such as a monster or player
|
||||||
@ -47,6 +48,34 @@ public interface LivingEntity extends Entity {
|
|||||||
*/
|
*/
|
||||||
public Location getEyeLocation();
|
public Location getEyeLocation();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all blocks along the player's line of sight
|
||||||
|
* List iterates from player's position to target inclusive
|
||||||
|
*
|
||||||
|
* @param callback Through every iteration it will call {@link Callback#call(Object)}. If set to/returns <code>null</code> only air is considered transparent.
|
||||||
|
* @param maxDistance This is the maximum distance to scan. This may be further limited by the server, but never to less than 100 blocks.
|
||||||
|
* @return List containing all blocks along the player's line of sight
|
||||||
|
*/
|
||||||
|
public List<Block> getLineOfSight(Callback<Boolean, Block> callback, int maxDistance);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the block that the player has targeted
|
||||||
|
*
|
||||||
|
* @param callback Through every iteration it will call {@link Callback#call(Object)}. If set to/returns <code>null</code> only air is considered transparent.
|
||||||
|
* @param maxDistance This is the maximum distance to scan. This may be further limited by the server, but never to less than 100 blocks.
|
||||||
|
* @return Block that the player has targeted
|
||||||
|
*/
|
||||||
|
public Block getTargetBlock(Callback<Boolean, Block> callback, int maxDistance);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the block that the player has targeted
|
||||||
|
*
|
||||||
|
* @param callback Through every iteration it will call {@link Callback#call(Object)}. If set to/returns <code>null</code> only air is considered transparent.
|
||||||
|
* @param maxDistance This is the maximum distance to scan. This may be further limited by the server, but never to less than 100 blocks.
|
||||||
|
* @return Block that the player has targeted
|
||||||
|
*/
|
||||||
|
public List<Block> getLastTwoTargetBlocks(Callback<Boolean, Block> callback, int maxDistance);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets all blocks along the player's line of sight
|
* Gets all blocks along the player's line of sight
|
||||||
* List iterates from player's position to target inclusive
|
* List iterates from player's position to target inclusive
|
||||||
|
19
paper-api/src/main/java/org/bukkit/util/Callback.java
Normal file
19
paper-api/src/main/java/org/bukkit/util/Callback.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package org.bukkit.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primitive callback class, to allow specific callback handling. For example to determine if a block in sight is invisible.
|
||||||
|
*
|
||||||
|
* @param <Result> This is the type it will return.
|
||||||
|
* @param <Parameter> This is the type it has as parameter.
|
||||||
|
*/
|
||||||
|
public interface Callback<Result, Parameter> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will be called on each step.
|
||||||
|
*
|
||||||
|
* @param parameter The parameter of this step.
|
||||||
|
* @return The result of the step.
|
||||||
|
*/
|
||||||
|
public Result call(Parameter parameter);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package org.bukkit.util;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default transparent call back. This class as callback acts like the normal
|
||||||
|
* line of sight methods.
|
||||||
|
*
|
||||||
|
* To implement own handler override {@link TransparentCallback#call(Block)} and
|
||||||
|
* call it via super.
|
||||||
|
*/
|
||||||
|
public class TransparentCallback implements Callback<Boolean, Block> {
|
||||||
|
|
||||||
|
private final Set<Byte> transparent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new callback class which returns by default for every block in
|
||||||
|
* the transparent list true. Otherwise false. Could be expanded by override
|
||||||
|
* the {@link Callback#call(Block)} method.
|
||||||
|
*
|
||||||
|
* @param transparent
|
||||||
|
* The list of transparent blocks.
|
||||||
|
*/
|
||||||
|
public TransparentCallback(Set<Byte> transparent) {
|
||||||
|
this.transparent = transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean call(Block parameter) {
|
||||||
|
return this.transparent.contains((byte) parameter.getTypeId());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user