forked from hannibal002/SkyHanni
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: Starred Mob Highlight + Fels Highlight/Line (hannibal002#1558)
Co-authored-by: Cal <cwolfson58@gmail.com> Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
- Loading branch information
1 parent
5f67252
commit 2dac2c1
Showing
5 changed files
with
242 additions
and
6 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 72 additions & 0 deletions
72
src/main/java/at/hannibal2/skyhanni/config/features/dungeon/ObjectHighlighterConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package at.hannibal2.skyhanni.config.features.dungeon; | ||
|
||
import at.hannibal2.skyhanni.config.FeatureToggle; | ||
import com.google.gson.annotations.Expose; | ||
import io.github.notenoughupdates.moulconfig.annotations.Accordion; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorColour; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorInfoText; | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; | ||
import io.github.notenoughupdates.moulconfig.observer.Property; | ||
|
||
public class ObjectHighlighterConfig { | ||
|
||
// TODO move some stuff from DungeonConfig into this | ||
|
||
@Expose | ||
@ConfigOption(name = "Stared", desc = "") | ||
@Accordion | ||
public StarredConfig starred = new StarredConfig(); | ||
|
||
public static class StarredConfig { | ||
@Expose | ||
@ConfigOption(name = "Highlight Starred", desc = "Highlights all starred mobs in one colour.") | ||
@ConfigEditorBoolean | ||
@FeatureToggle | ||
public Property<Boolean> highlight = Property.of(true); | ||
|
||
/* | ||
TODO for someone who has time | ||
@Expose | ||
@ConfigOption(name = "Show Outline", desc = "Shows only a outline instead of a full highlight.") | ||
@ConfigEditorBoolean | ||
public Property<Boolean> showOutline = Property.of(true); */ | ||
|
||
@ConfigOption( | ||
name = "No Chroma", | ||
desc = "§cThe chroma setting for the color is currently not working!" | ||
) | ||
@ConfigEditorInfoText | ||
public String info; | ||
|
||
@Expose | ||
@ConfigOption(name = "Colour", desc = "Color in which the stared mobs are highlighted.") | ||
@ConfigEditorColour | ||
public Property<String> colour = Property.of("0:60:255:255:0"); | ||
} | ||
|
||
@Expose | ||
@ConfigOption(name = "Fels Skull", desc = "") | ||
@Accordion | ||
public FelConfig fel = new FelConfig(); | ||
|
||
public static class FelConfig { | ||
|
||
@Expose | ||
@ConfigOption(name = "Highlight Fels Skull", desc = "Highlights fels that are not yet active.") | ||
@ConfigEditorBoolean | ||
@FeatureToggle | ||
public Property<Boolean> highlight = Property.of(true); | ||
|
||
@Expose | ||
@ConfigOption(name = "Draw Line", desc = "Draws a line to fels skulls. Works only if the highlight is enabled.") | ||
@ConfigEditorBoolean | ||
public Boolean line = false; | ||
|
||
@Expose | ||
@ConfigOption(name = "Colour", desc = "Color for the fel skull and line.") | ||
@ConfigEditorColour | ||
public Property<String> colour = Property.of("0:200:255:0:255"); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
149 changes: 149 additions & 0 deletions
149
src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMobManager.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
package at.hannibal2.skyhanni.features.dungeon | ||
|
||
import at.hannibal2.skyhanni.SkyHanniMod | ||
import at.hannibal2.skyhanni.data.IslandType | ||
import at.hannibal2.skyhanni.data.mob.Mob | ||
import at.hannibal2.skyhanni.data.mob.MobData | ||
import at.hannibal2.skyhanni.events.ConfigLoadEvent | ||
import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent | ||
import at.hannibal2.skyhanni.events.LorenzTickEvent | ||
import at.hannibal2.skyhanni.events.MobEvent | ||
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule | ||
import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor | ||
import at.hannibal2.skyhanni.utils.ConditionalUtils.onToggle | ||
import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland | ||
import at.hannibal2.skyhanni.utils.RenderUtils.draw3DLine | ||
import at.hannibal2.skyhanni.utils.RenderUtils.drawWaypointFilled | ||
import at.hannibal2.skyhanni.utils.RenderUtils.exactPlayerEyeLocation | ||
import at.hannibal2.skyhanni.utils.getLorenzVec | ||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent | ||
import java.awt.Color | ||
|
||
@SkyHanniModule | ||
object DungeonMobManager { | ||
|
||
private val config get() = SkyHanniMod.feature.dungeon.objectHighlighter | ||
private val starredConfig get() = config.starred | ||
private val fel get() = config.fel | ||
|
||
private val staredInvisible = mutableSetOf<Mob>() | ||
private val felOnTheGround = mutableSetOf<Mob>() | ||
|
||
@SubscribeEvent | ||
fun onConfigLoad(event: ConfigLoadEvent) { | ||
onToggle( | ||
starredConfig.highlight, | ||
starredConfig.colour, | ||
) { | ||
val color = if (starredConfig.highlight.get()) getStarColor() else null | ||
MobData.skyblockMobs.filter { it.hasStar }.forEach { | ||
handleStar0(it, color) | ||
} | ||
if (!starredConfig.highlight.get()) { | ||
staredInvisible.clear() | ||
} | ||
} | ||
onToggle( | ||
fel.highlight, | ||
fel.colour, | ||
) { | ||
if (fel.highlight.get()) { | ||
if (felOnTheGround.isEmpty()) { | ||
MobData.skyblockMobs.forEach(::handleFel) | ||
} | ||
} else { | ||
felOnTheGround.clear() | ||
} | ||
} | ||
} | ||
|
||
@SubscribeEvent | ||
fun onMobSpawn(event: MobEvent.Spawn.SkyblockMob) { | ||
if (event.mob.mobType != Mob.Type.DUNGEON) return | ||
handleStar(event.mob) | ||
handleFel(event.mob) | ||
} | ||
|
||
@SubscribeEvent | ||
fun onMobDeSpawn(event: MobEvent.DeSpawn.SkyblockMob) { | ||
if (event.mob.mobType != Mob.Type.DUNGEON) return | ||
if (starredConfig.highlight.get()) { | ||
staredInvisible.remove(event.mob) | ||
} | ||
handleFelDespawn(event.mob) | ||
} | ||
|
||
@SubscribeEvent | ||
fun onLorenzTick(event: LorenzTickEvent) { | ||
if (!IslandType.CATACOMBS.isInIsland()) return | ||
handleInvisibleStar() | ||
} | ||
|
||
@SubscribeEvent | ||
fun onRenderWorld(event: LorenzRenderWorldEvent) { | ||
if (!fel.highlight.get()) return | ||
if (fel.line) { | ||
felOnTheGround.filter { it.canBeSeen() }.forEach { | ||
event.draw3DLine( | ||
it.baseEntity.getLorenzVec().add(y = 0.15), | ||
event.exactPlayerEyeLocation(), | ||
fel.colour.get().toChromaColor(), | ||
3, | ||
true, | ||
) | ||
} | ||
} | ||
|
||
felOnTheGround.removeIf { mob -> | ||
event.drawWaypointFilled( | ||
mob.baseEntity.getLorenzVec().add(-0.5, -0.23, -0.5), | ||
fel.colour.get().toChromaColor(), | ||
seeThroughBlocks = false, | ||
beacon = false, | ||
extraSize = -0.2, | ||
minimumAlpha = 0.8f, | ||
inverseAlphaScale = true, | ||
) | ||
!mob.isInvisible() | ||
} | ||
} | ||
|
||
private fun handleStar(mob: Mob) { | ||
if (!starredConfig.highlight.get()) return | ||
if (!mob.hasStar) return | ||
handleStar0(mob, getStarColor()) | ||
} | ||
|
||
private fun handleInvisibleStar() { | ||
if (!starredConfig.highlight.get()) return | ||
staredInvisible.removeIf { | ||
val visible = !it.isInvisible() | ||
if (visible) { | ||
it.highlight(getStarColor()) | ||
} | ||
visible | ||
} | ||
} | ||
|
||
private fun getStarColor(): Color = starredConfig.colour.get().toChromaColor() | ||
|
||
private fun handleStar0(mob: Mob, colour: Color?) { | ||
if (mob.isInvisible()) { | ||
staredInvisible.add(mob) | ||
return | ||
} | ||
mob.highlight(colour) | ||
} | ||
|
||
private fun handleFel(mob: Mob) { | ||
if (!fel.highlight.get()) return | ||
if (mob.name != "Fels") return | ||
if (!mob.isInvisible()) return | ||
felOnTheGround.add(mob) | ||
} | ||
|
||
private fun handleFelDespawn(mob: Mob) { | ||
if (!fel.highlight.get()) return | ||
felOnTheGround.remove(mob) | ||
} | ||
} |