blob: da6e022616047abd16d46d514eb97e6d84e9affd (
plain)
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
|
package de.hysky.skyblocker.skyblock.entity;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.dungeon.LividColor;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.FrustumUtils;
import de.hysky.skyblocker.utils.render.RenderHelper;
import de.hysky.skyblocker.utils.render.Renderable;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.entity.Entity;
import net.minecraft.entity.decoration.ArmorStandEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.Box;
public class MobBoundingBoxes {
/**
* These boxes will be rendered before the debug render phase which happens after entities are rendered;
*/
private static final ObjectOpenHashSet<RenderableBox> BOXES_2_RENDER = new ObjectOpenHashSet<>();
public static void init() {
WorldRenderEvents.BEFORE_DEBUG_RENDER.register(MobBoundingBoxes::render);
}
public static boolean shouldDrawMobBoundingBox(Entity entity) {
Box box = entity.getBoundingBox();
if (Utils.isInDungeons() && FrustumUtils.isVisible(box) && !entity.isInvisible()) {
String name = entity.getName().getString();
return switch (entity) {
case PlayerEntity _p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes;
case PlayerEntity p when LividColor.LIVID_NAMES.contains(name) -> LividColor.shouldDrawBoundingBox(name);
case ArmorStandEntity _armorStand -> false;
// Regular Mobs
default -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes && MobGlow.isStarred(entity);
};
}
return false;
}
public static float[] getBoxColor(Entity entity) {
int color = MobGlow.getGlowColor(entity);
return new float[] { ((color >> 16) & 0xFF) / 255f, ((color >> 8) & 0xFF) / 255f, (color & 0xFF) / 255f };
}
public static void submitBox2BeRendered(Box box, float[] colorComponents) {
BOXES_2_RENDER.add(new RenderableBox(box, colorComponents));
}
private static void render(WorldRenderContext context) {
for (RenderableBox box : BOXES_2_RENDER) {
box.render(context);
}
BOXES_2_RENDER.clear();
}
private record RenderableBox(Box box, float[] colorComponents) implements Renderable {
@Override
public void render(WorldRenderContext context) {
RenderHelper.renderOutline(context, box, colorComponents, 6, false);
}
}
}
|