-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbedxray.js
96 lines (84 loc) · 3.57 KB
/
bedxray.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
var module = rise.registerModule("Bed Xray with Pathfinding", "Detects and highlights beds, tracks the closest bed, and shows blocks to break.");
module.registerSetting("number", "Range", 10, 8, 64);
module.registerSetting("color", "Bed Color", "#FF0000");
module.registerSetting("color", "Closest Bed Color", "#00FF00");
module.registerSetting("color", "Path Color", "#FFFF00");
function isBedBlock(block) {
return block.getId() === 26;
}
function calculateDistance(playerPos, targetPos) {
var dx = playerPos.x - targetPos.x;
var dy = playerPos.y - targetPos.y;
var dz = playerPos.z - targetPos.z;
return Math.sqrt(dx * dx + dy * dy + dz * dz);
}
function renderCube(blockPos, size, color) {
var position = blockPos.getPosition();
var vertices = [
{ x: position.x, y: position.y, z: position.z },
{ x: position.x + size, y: position.y, z: position.z },
{ x: position.x + size, y: position.y, z: position.z + size },
{ x: position.x, y: position.y, z: position.z + size },
{ x: position.x, y: position.y + size, z: position.z },
{ x: position.x + size, y: position.y + size, z: position.z },
{ x: position.x + size, y: position.y + size, z: position.z + size },
{ x: position.x, y: position.y + size, z: position.z + size }
];
var lines = [
[vertices[0], vertices[1]],
[vertices[1], vertices[2]],
[vertices[2], vertices[3]],
[vertices[3], vertices[0]],
[vertices[4], vertices[5]],
[vertices[5], vertices[6]],
[vertices[6], vertices[7]],
[vertices[7], vertices[4]],
[vertices[0], vertices[4]],
[vertices[1], vertices[5]],
[vertices[2], vertices[6]],
[vertices[3], vertices[7]]
];
lines.forEach(function(line) {
render.drawLine3D(rise.newVec3(line[0].x, line[0].y, line[0].z), rise.newVec3(line[1].x, line[1].y, line[1].z), color, 3);
});
}
function renderPathToBed(playerPos, bedPos, color) {
var pathPoints = [playerPos, bedPos];
for (var i = 0; i < pathPoints.length - 1; i++) {
render.drawLine3D(
rise.newVec3(pathPoints[i].x, pathPoints[i].y, pathPoints[i].z),
rise.newVec3(pathPoints[i + 1].x, pathPoints[i + 1].y, pathPoints[i + 1].z),
color,
2
);
}
}
module.handle("onRender3D", function () {
var range = module.getSetting("Range");
var bedColor = module.getSetting("Bed Color");
var closestBedColor = module.getSetting("Closest Bed Color");
var pathColor = module.getSetting("Path Color");
var playerPos = player.getPosition();
var closestBedPos = null;
var closestDistance = Number.MAX_VALUE;
for (var x = playerPos.x - range; x <= playerPos.x + range; x++) {
for (var y = playerPos.y - range; y <= playerPos.y + range; y++) {
for (var z = playerPos.z - range; z <= playerPos.z + range; z++) {
var blockPos = world.newBlockPos(x, y, z);
var block = blockPos.getBlock();
if (isBedBlock(block)) {
var distance = calculateDistance(playerPos, blockPos.getPosition());
if (distance < closestDistance) {
closestDistance = distance;
closestBedPos = blockPos;
}
renderCube(blockPos, 1, bedColor);
}
}
}
}
if (closestBedPos !== null) {
renderCube(closestBedPos, 1, closestBedColor);
renderPathToBed(playerPos, closestBedPos.getPosition(), pathColor);
}
});