Skip to content

Commit 180b998

Browse files
committed
blood helper
1 parent 204c3b5 commit 180b998

File tree

5 files changed

+215
-24
lines changed

5 files changed

+215
-24
lines changed

config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ class Settings {
394394

395395
@SwitchProperty({
396396
name: "Blood Helper",
397-
description: "WIP, does not work",
397+
description: "Highlights where the mobs will spawn in the blood room",
398398
category: "SkyBlock",
399399
subcategory: "Blood Helper"
400400
})

events/dungeonRoom.js

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/// <reference types="../../CTAutocomplete" />
2+
3+
import Dungeon from "../../BloomCore/dungeons/Dungeon";
4+
5+
global.soshimee ??= {};
6+
global.soshimee.events ??= {};
7+
global.soshimee.events.dungeonRoom ??= {};
8+
9+
const listeners = global.soshimee.events.dungeonRoom.listeners ??= [];
10+
11+
let roomX = -1;
12+
let roomZ = -1;
13+
let notified = false;
14+
15+
const trigger = global.soshimee.events.dungeonRoom.trigger ??= register("tick", () => {
16+
if (!Dungeon.inDungeon) {
17+
if (!notified) {
18+
for (let listener of listeners) {
19+
listener(0);
20+
}
21+
roomX = -1;
22+
roomZ = -1;
23+
notified = true;
24+
}
25+
return;
26+
}
27+
28+
const prevRoomX = roomX;
29+
const prevRoomZ = roomZ;
30+
const x = Player.getX();
31+
const z = Player.getZ();
32+
if (x < -200 || z < -200 || x > 0 || z > 0) {
33+
if (!notified) {
34+
for (let listener of listeners) {
35+
listener(0);
36+
}
37+
roomX = -1;
38+
roomZ = -1;
39+
notified = true;
40+
}
41+
return;
42+
}
43+
roomX = Math.floor((x + 200) / 32);
44+
roomZ = Math.floor((z + 200) / 32);
45+
46+
if (prevRoomX != roomX || prevRoomZ != roomZ) {
47+
const cx = -185 + roomX * 32;
48+
const cz = -185 + roomZ * 32;
49+
50+
const roofHeight = getHighestBlock(cx, cz);
51+
52+
for (let listener of listeners) {
53+
listener(getCore(cx, cz), getRotation(cx, roofHeight, cz));
54+
}
55+
56+
notified = false;
57+
}
58+
}).unregister();
59+
60+
const offsets = [[-15, -15], [15, -15], [15, 15], [-15, 15]];
61+
const blacklisted = [5, 54];
62+
function hashCode(s) {
63+
return s.split("").reduce((a, b) => {
64+
a = ((a << 5) - a) + b.charCodeAt(0);
65+
return a & a;
66+
}, 0);
67+
}
68+
function getCore(x, z) {
69+
let blockIds = ""
70+
for (let y = 140; y >= 12; --y) {
71+
let block = World.getBlockAt(x, y, z);
72+
if (blacklisted.includes(block.type.getID())) continue;
73+
blockIds += block.type.getID();
74+
}
75+
return hashCode(blockIds);
76+
};
77+
function getHighestBlock(x, z) {
78+
for (let y = 255; y > 0; --y) {
79+
let id = World.getBlockAt(x, y, z)?.type?.getID();
80+
if (id == 0 || id == 41) continue;
81+
return y;
82+
}
83+
return null;
84+
}
85+
function getRotation(x, y, z) {
86+
if (!y) return;
87+
88+
for (let i = 0; i < offsets.length; ++i) {
89+
let [dx, dz] = offsets[i];
90+
let [nx, nz] = [x + dx, z + dz];
91+
let block = World.getBlockAt(nx, y, nz);
92+
if (block.type.getID() !== 159 || block.getMetadata() !== 11) continue;
93+
return i;
94+
}
95+
}
96+
97+
export function addListener(listener) {
98+
if (listeners.length === 0) trigger.register();
99+
listeners.push(listener);
100+
}
101+
102+
export function removeListener(listener) {
103+
const index = listeners.indexOf(listener);
104+
if (index === -1) return false;
105+
listeners.splice(index, 1);
106+
if (listeners.length === 0) trigger.unregister();
107+
return true;
108+
}
109+
110+
export default { addListener, removeListener };

features/bloodHelper/index.js

Lines changed: 96 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

features/itemHighlight/index.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ import Dungeon from "../../../BloomCore/dungeons/Dungeon";
55
const EntityItem = Java.type("net.minecraft.entity.item.EntityItem");
66

77
const items = ["Health Potion VIII Splash Potion", "Healing 8 Splash Potion", "Healing VIII Splash Potion", "Decoy", "Inflatable Jerry", "Spirit Leap", "Trap", "Training Weights", "Defuse Kit", "Dungeon Chest Key", "Treasure Talisman", "Revive Stone", "Architect's First Draft"];
8-
let renderTriggerRegistered = false;
8+
let inDungeon = false;
99

1010
const helperTrigger = register("step", () => { // make sure to register render trigger only when needed
1111
if (Dungeon.inDungeon) {
12-
if (renderTriggerRegistered) return;
12+
if (inDungeon) return;
1313
renderTrigger.register();
14-
renderTriggerRegistered = true;
14+
inDungeon = true;
1515
} else {
16-
if (!renderTriggerRegistered) return;
16+
if (!inDungeon) return;
1717
renderTrigger.unregister();
18-
renderTriggerRegistered = false;
18+
inDungeon = false;
1919
}
2020
}).setFps(1).unregister();
2121

@@ -50,9 +50,9 @@ export function enable() {
5050

5151
export function disable() {
5252
helperTrigger.unregister();
53-
if (renderTriggerRegistered) {
53+
if (inDungeon) {
5454
renderTrigger.unregister();
55-
renderTriggerRegistered = false;
55+
inDungeon = false;
5656
}
5757
}
5858

metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "soshimeeaddons",
33
"description": "F7 on top",
44
"creator": "soshimee",
5-
"version": "2.6.1",
5+
"version": "2.7.0",
66
"entry": "index.js",
77
"requires": ["PromiseV2", "BloomCore", "fparser", "requestV2", "Vigilance", "PogData", "RenderLib"]
88
}

0 commit comments

Comments
 (0)