sandstone-raycast
v1.1.4
Published
A library created with Sandstone
Readme
Raycast Library for Sandstone
This library is built for Sandstone. :computer:
Note: This library is works with >=Release 1.0 of sandstone. For earlier versions refer Here.
This library provides a simple raycast function for quickly creating raycasts that can detect blocks and/or entities.
Installation
To use the raycast function:
Install the NPM package: :arrow_down:
bun i sandstone-raycastImport
raycastinto your project: :arrow_heading_down:import { raycast, passable } from "sandstone-raycast";Call the
raycastfunction to generate the required MCFunctions.Enjoy! :star:
Syntax
raycast(fileName, blockToIgnore, entityToHit, runOnEveryStep, runOnHit, step, maxIter);Parameters
fileName
Name of the main raycast .mcfunction file.
blockToIgnore
Block(s) name ignore, if the current block is not the specified block then the raycast will stop. Can be a block tag. Can be null.
entityToHit
Entity to look for, it accepts selectors with distance property. Can be null.
runOnEveryStep
Function to run on every step. Can be anonymous. Can be null.
runOnHit
MCFunction to run on hitting the target. Can be anonymous. Can be null.
step
Step size of the raycast. Defaults to 1. (Optional)
maxIter
Maximum iteration of the raycast. Defaults to 20. (Optional)
Example
raycast(
"raycast_main",
passable.name,
Selector("@e", { type: "husk", dx: 0 }),
MCFunction("raycast_update", () => {
particle("electric_spark", rel(0, 0, 0), [0, 0, 0], 0, 1);
}),
MCFunction("raycast_hit", () => {
tellraw("@s", { text: "Hit!" });
})
);Passable BLock Library
Raycast includes a passable block tag containing blocks that the raycast can pass through.
If you want a simple raycast without manually specifying which blocks it can pass through, you can use this tag.
Import passable from the Raycast package and use passable.name as the blockToIgnore parameter:
Example Pack
import { passable, raycast } from "sandstone-raycast";
import { effect, execute, loc, MCFunction, Objective, particle, rel, Selector } from "sandstone";
const rightClick = Objective.create("rcObj", "minecraft.used:minecraft.carrot_on_a_stick")("@s");
MCFunction(
"test",
() => {
execute
.as(Selector("@a", { scores: { [rightClick.objective.name]: [1, null] } }))
.at("@s")
.anchored("eyes")
.positioned(loc(0, 0, 1))
.run(() => {
rightClick.set(0);
raycast(
"raycast/cast",
passable.name,
Selector("@e", { type: "minecraft:husk", dx: 0 }),
MCFunction("raycast/update", () => {
particle("minecraft:crit", rel(0, 0, 0), [0, 0, 0], 0, 1);
}),
MCFunction("raycast/hit", () => {
effect.give(Selector("@e", { type: "minecraft:husk", dx: 0 }), "minecraft:instant_health");
}),
1,
50
);
});
},
{ runEveryTick: true }
);Note: This library does not handle score setup or right-click detection.
