From 292fbd05e13271ca3ad99ebe00ae4302e04848f3 Mon Sep 17 00:00:00 2001
From: Eryk Ruta <70776766+kingstefan26@users.noreply.github.com>
Date: Tue, 1 Nov 2022 15:51:30 +0100
Subject: 3rd time is the charm (#70)
* Updated some dependencies, used my crusty skytils forgegradle fork + removed the IRRELEVANT hytils fixes. generally made the thing build
* made the logs less annoying
* temp fix so it doesn't throw an exception
* FAT REFACTOR
General refactor on
Authenticator.java
DungeonsGuide.java
Main.java
removed unnecessary imports where not needed
to be removed DGInterface.java (no real reason to exist)
in DungeonsGuide.java made the retry stomp a singe-thread executor, so it doesn't leak when offline
added an "offline mode" so it doesn't just error when server down
TODO: move auth to DungeonsGuide.java and make it retry when network down on launch
* New auth implementation that should replace the old one:
does all the things the old one did
removed progressBar cuz it would make the impl 3x more complicated in the name of a splash screen
added a token changed event (so now it supports re-logging with a different account)
code is (should) be more readable / extensible
TODO: surgically replace Authenticator.java with new impl AND support re-logging
* Made the chat processor logger name less obnoxious
* implemented my implementation of an implementation of auth
can and is very buggy, essentially the loading of the remote classes but the mod works so idk
TODO: MAKE STOMP NOT DO STUFF TILL STOMPCONNECTED IS EMITTED
* fix for stomp client null bc forge events not going tru on pre-init
TODO: make work and test the web loadable classes, then make all the stuff that relies on stomp not throw exceptions when stomp is not connected
* move the create auth method into AuthProvider interface,
so we don't clutter AuthManager with implementation details
* Decouple AuthProviderUtil and DgAuth,
move some stuff around and make it more readable
* moved AuthUtil to make more sense
* de-clutter the tree a little bit
* Inline StompClientStatus.java / refactor
* inline the useless interface
* refactoringgg
* fix ahUtils exeption spam
* small StompClient refactor
* fix GLCursors exeption spam + logger
* make sure we are authenticated when downloading resources
* new .destination("value") instead of .header("destination", "value")
* StompMessageHandler -> StompMessageSubscription
* Introduced StompManager
* fix dungeon map not showing ppl heads
* ehhh
* wip (commit cuz im chekig out)
* fix player profile not never loading in chat
* remove this specific line
* fix player profile not never loading in chat
* cut out hychat like a cancer
* ApiFetchur now caches whole players not single profiles,
added a switch profile button in gui
* ugh git
* Revert "cut out hychat like a cancer"
This reverts commit 2ee11afa
* ugh git x2
* I tried, good luck maintaining this
* forgot to uncomment hychat fix
* make my new party ready work and look ok
* change the look and add some "somewhere" locations
* make stomp connection "null safe"
* i hate git
* introduce callbacks on parameter change for cleaner code
add one example
* impl new system,
half way done
* now shows which profile is now selected
put button on top
a lil refactor
* fix player profile sometimes not loading
* add players knowing who is using dg (try to)
* announcing that we are a dg user will get reworked in the future
* update deps
* make it not spam logs
* sanity check for premium features so it doesn't 403
* add YoMamaOutdated that checks if you are using outdated dg
* hychat?? anyone
* try catch in FeatureRegistry
* added Ether transmission ability
* chat shredder borken, disabled for now
* party deserves its own folder
* dungeon stuff in dungeon folder
* events folders moved
* fix score data collection hanging forever if stomp is not connected
* fix stomp never connecting
* re-add the removed
* fix wonky rendering
* server side implementation is not ready, canning this for a future release
* attempt to fix heads loading on main thread
* discord
* me when sonar lint
* new consumer based stomp subscriptions
* replace old with new subscriptions
* remove the remains of StompSubscription and replace CloseListener with a forge event
* StompSubscription is now a functional interface
* remove unnecessary event message chains,
feature logic should be in the feature
* fix events being set up wrongly
* Revert "fix events being set up wrongly"
This reverts commit e6ea7efa557a5f5c8a3ea33be998717bc024b8cb.
* Revert "remove unnecessary event message chains,"
This reverts commit 96f508bae85b33cdcef6be19226c00fc52a1439b.
* fix stomp client sending payload object instead of the actual payload
* fix null pointer on empty party
* fix players with cosmetics name being white in tab
* added message when not connected to dg
changed YoMamaOutdated to use CloudFlare workers
added client sided message queue
* the mod doesn't init when outdated
* mcmod.info
* dont busy wait in authmenager
* test pepole crusty tests
* chill out the authmanager
* name the thread pool in auth manager
* clear most compiler warnings
* make outdated check allow to play without the mod initialized
* make first startup VERY noticeable, move config creation to main
* major dungeon package refactor
* refactor checkpoint
* refactor checkpoint #1
* final refactor checkpoint #2
* remove the player if from version check, made the version check not nesssery for playing
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* remove trap room fix that didnt fix anything
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* make secret beacons optional
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* make the checkmarks on map align with the rest of everyone
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* removed debug function
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move the menus to make more sense + make destination text on secrets optional
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* improve dungeonMap performance by ~90%
temporarly disabled 9 slot map player location due to bugs
fix DungeonContext not getting player from ScoreBoard
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* add epic countdown on dungeon start (still wip)
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* added a option to cache blockstaes
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* added TabListUtil
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* fixed epic countdown
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* (i want to sleep) made all the dungeon room detection async
TODO: fix ol the bugs i created by doing that
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* stuff still broken but almost playable, unlike last commit
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* upload build jar to discord
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* cache the deps for the love of god
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* who needs linux and 32bit windows anyway
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* only upload to discord on beta branch
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* added "kick" when a member joins party
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move stuff that sends chat to player into a separate class
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* use our chat queue instead of calling `thePlayer.addChatMessage` to proxy ourselves from 1.8 code
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* Added and implemented MortDetector2000.java
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* extract duplicate + make more readable
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* added dummy support in FeatureDebugTrap
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* gradle now puts version in mcmod.info
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* remove side effects from DgAuth.java
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move debug commands into debug CommandDgDebug.java
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* fix key being wrong
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move epic countdown to dungeon huds, clean up
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* Revert "who needs linux and 32bit windows anyway"
This reverts commit 0f3c2d544a70fc799cd3215dad5e997c0c8b6c06.
* make FeatureRegistry not static initialise to get rid of "ClassNotDefined" errors
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* null check on Exception since it threw NullPointers
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* finish up progress bar in DungeonsGuide.java
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* warn about null features
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move stuff around in SkyblockStatus, move the stuff that updates status into SkyblockStatus from DungeonListener
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* rename DungeonGodObject.java to DungeonFacade.java
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* add cleanChat clause in FeatureEpicCountdown
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* implement getPreRequisites and isComplete in ActionBreakWithSuperBoom
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* clean up FeatureParameter
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* eliminate possible state inconsistency in DungeonListener
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move percentage from DungeonFacade to DungeonContext
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move `purge` and `partymax` back into CommandDungeonsGuide
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* stop repeating ReceiveChatQueue in ChatTransmitter
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* Clean up DungeonsGuide
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move `sendDebugChat` to `ChatTransmitter.java`
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* change CommandDgDebug into a `else if` from an `switch` because some bigot decided its better
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* duplicate code since it currently doesn't make sense, to be reworked
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* fix typo
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* remove the trycatch so we fail fast
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* fix null pointer when trying to get fontRenderer before minecraft is initialised
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* broken checkpoint 0
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* broken checkpoint 1
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* Revert "broken checkpoint 1"
This reverts commit 64985e6287c7b5650b509668e42b9803e25c419c.
* Revert "broken checkpoint 0"
This reverts commit 5f62e1345d9c8e7f66f1e5792004a05027913d92.
* Revert "fix null pointer when trying to get fontRenderer before minecraft is initialised"
This reverts commit 57d92a78d31c410f699b58c8995c94055d57e2a4.
* Revert "remove the trycatch so we fail fast"
This reverts commit 12772255ed575e411fb99edf37ec16d0e5f42924.
* Revert "fix typo"
This reverts commit aa96cc2436d3ead42d53ead78f3334fac5100713.
* Revert "duplicate code since it currently doesn't make sense, to be reworked"
This reverts commit 6d71b88e3102d23bcfd90d85e8996327776fd52f.
* Revert "change CommandDgDebug into a `else if` from an `switch` because some bigot decided its better"
This reverts commit ffea84d9b5fd4adbe034a88249bc920eafa7c53a.
* Revert "move `sendDebugChat` to `ChatTransmitter.java`"
This reverts commit 5b8b2e22fff33768134a01c15c7650100ebb9257.
* Revert "Clean up DungeonsGuide"
This reverts commit 2069ad3ebc4344eb1e778954dc1d8f6c9303de69.
* fix typo
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
(cherry picked from commit aa96cc2436d3ead42d53ead78f3334fac5100713)
* duplicate code since it currently doesn't make sense, to be reworked
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
(cherry picked from commit 6d71b88e3102d23bcfd90d85e8996327776fd52f)
* change CommandDgDebug into a `else if` from an `switch` because some bigot decided its better
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
(cherry picked from commit ffea84d9b5fd4adbe034a88249bc920eafa7c53a)
* move debug chat into ChatTransmitter
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* null pointer in SkyblockStatus bc context was not initialised yet
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move dungeon starting door detection up the tree since it was a duplicate in both children, inline MortDetector2000
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move dungeon name to DungeonContext
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* clean up Main
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* separate the "loader" and "mod"
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* separate DungeonsGuide and Main even more
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* change singleton implementation of DungeonsGuide
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move classes since their paths are hardcoded into roomdatas
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* create CatacombsDataProvider.java and implement it
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* remove unnecessary `DungeonsGuide.getDungeonsGuide();` (IntelliJ refactor bug)
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* move `help` text in commands
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* a certain someone hates switch statements
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* remove my version check, since we have to wait for out lord and savior to make his own
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* make `Main` and `DungeonsGuide` compatible with supported jar classloading
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* make the beta upload action run on push
since it didnt get the secret on pull request and failed anyway,
TODO: make the jar name not hardcoded
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
* upload all jar
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
Signed-off-by: kingstefan26 <70776766+kingstefan26@users.noreply.github.com>
Co-authored-by: syeyoung <42869671+cyoung06@users.noreply.github.com>
---
.../mod/features/AbstractFeature.java | 114 ++++
.../mod/features/FeatureParameter.java | 72 +++
.../mod/features/FeatureRegistry.java | 337 ++++++++++
.../dungeonsguide/mod/features/GuiFeature.java | 160 +++++
.../dungeonsguide/mod/features/SimpleFeature.java | 33 +
.../mod/features/impl/advanced/FeatureDebug.java | 31 +
.../features/impl/advanced/FeatureDebugTrap.java | 80 +++
.../impl/advanced/FeatureDebuggableMap.java | 88 +++
.../impl/advanced/FeatureRoomCoordDisplay.java | 94 +++
.../impl/advanced/FeatureRoomDebugInfo.java | 95 +++
.../features/impl/advanced/FeatureTestPepole.java | 460 ++++++++++++++
.../mod/features/impl/boss/FeatureAutoReparty.java | 34 +
.../mod/features/impl/boss/FeatureBossHealth.java | 104 +++
.../features/impl/boss/FeatureBoxRealLivid.java | 54 ++
.../mod/features/impl/boss/FeatureChestPrice.java | 174 +++++
.../features/impl/boss/FeatureCurrentPhase.java | 74 +++
.../mod/features/impl/boss/FeatureHideAnimals.java | 76 +++
.../features/impl/boss/FeatureTerracotaTimer.java | 77 +++
.../impl/boss/FeatureThornBearPercentage.java | 78 +++
.../impl/boss/FeatureThornSpiritBowTimer.java | 110 ++++
.../features/impl/boss/FeatureWarningOnPortal.java | 200 ++++++
.../terminal/CorrectThePaneSolutionProvider.java | 53 ++
.../impl/boss/terminal/FeatureSimonSaysSolver.java | 113 ++++
.../impl/boss/terminal/FeatureTerminalSolvers.java | 153 +++++
.../terminal/NavigateMazeSolutionProvider.java | 144 +++++
.../terminal/SelectAllColorSolutionProivider.java | 60 ++
.../terminal/SelectInOrderSolutionProvider.java | 72 +++
.../impl/boss/terminal/TerminalSolution.java | 30 +
.../boss/terminal/TerminalSolutionProvider.java | 29 +
.../terminal/WhatStartsWithSolutionProvider.java | 50 ++
.../impl/cosmetics/FeatureNicknameColor.java | 49 ++
.../impl/cosmetics/FeatureNicknamePrefix.java | 49 ++
.../features/impl/cosmetics/PrefixSelectorGUI.java | 188 ++++++
.../impl/discord/inviteViewer/ImageTexture.java | 118 ++++
.../discord/inviteViewer/PartyInviteViewer.java | 314 +++++++++
.../discord/inviteViewer/PartyJoinRequest.java | 59 ++
.../impl/discord/invteTooltip/MTooltipInvite.java | 127 ++++
.../invteTooltip/MTooltipInviteElement.java | 109 ++++
.../impl/discord/onlinealarm/PlayingDGAlarm.java | 170 +++++
.../mod/features/impl/dungeon/FeatureBoxBats.java | 68 ++
.../impl/dungeon/FeatureBoxSkelemaster.java | 68 ++
.../features/impl/dungeon/FeatureBoxStarMobs.java | 68 ++
.../features/impl/dungeon/FeatureCollectScore.java | 77 +++
.../dungeon/FeatureDungeonCurrentRoomSecrets.java | 108 ++++
.../impl/dungeon/FeatureDungeonDeaths.java | 168 +++++
.../features/impl/dungeon/FeatureDungeonMap.java | 508 +++++++++++++++
.../impl/dungeon/FeatureDungeonMilestone.java | 110 ++++
.../impl/dungeon/FeatureDungeonRealTime.java | 91 +++
.../impl/dungeon/FeatureDungeonRoomName.java | 95 +++
.../impl/dungeon/FeatureDungeonSBTime.java | 119 ++++
.../features/impl/dungeon/FeatureDungeonScore.java | 351 ++++++++++
.../impl/dungeon/FeatureDungeonSecrets.java | 145 +++++
.../features/impl/dungeon/FeatureDungeonTombs.java | 88 +++
.../features/impl/dungeon/FeatureHideNameTags.java | 53 ++
.../features/impl/dungeon/FeaturePlayerESP.java | 111 ++++
.../dungeon/FeaturePressAnyKeyToCloseChest.java | 89 +++
.../impl/dungeon/FeatureWarnLowHealth.java | 106 ++++
.../impl/dungeon/FeatureWatcherWarning.java | 87 +++
.../impl/etc/FeatureAutoAcceptReparty.java | 68 ++
.../features/impl/etc/FeatureCooldownCounter.java | 96 +++
.../mod/features/impl/etc/FeatureCopyMessages.java | 42 ++
.../impl/etc/FeatureDecreaseExplosionSound.java | 52 ++
.../features/impl/etc/FeatureDisableMessage.java | 77 +++
.../features/impl/etc/FeatureEpicCountdown.java | 156 +++++
.../mod/features/impl/etc/FeaturePenguins.java | 168 +++++
.../features/impl/etc/FeatureRepartyCommand.java | 29 +
.../impl/etc/FeatureTooltipDungeonStat.java | 52 ++
.../mod/features/impl/etc/FeatureTooltipPrice.java | 111 ++++
.../mod/features/impl/etc/FeatureUpdateAlarm.java | 56 ++
.../impl/etc/ability/FeatureAbilityCooldown.java | 402 ++++++++++++
.../features/impl/etc/ability/SkyblockAbility.java | 32 +
.../mod/features/impl/etc/ability/UsedAbility.java | 31 +
.../mod/features/impl/party/APIKey.java | 56 ++
.../features/impl/party/FeatureGoodParties.java | 121 ++++
.../mod/features/impl/party/FeaturePartyList.java | 97 +++
.../mod/features/impl/party/FeaturePartyReady.java | 180 ++++++
.../party/customgui/FeatureCustomPartyFinder.java | 110 ++++
.../impl/party/customgui/GuiCustomPartyFinder.java | 75 +++
.../impl/party/customgui/PanelPartyFinder.java | 341 ++++++++++
.../party/customgui/PanelPartyFinderSettings.java | 293 +++++++++
.../party/customgui/PanelPartyListElement.java | 236 +++++++
.../impl/party/playerpreview/FakePlayer.java | 101 +++
.../FeatureViewPlayerStatsOnJoin.java | 706 +++++++++++++++++++++
.../impl/party/playerpreview/api/ApiFetcher.java | 387 +++++++++++
.../impl/party/playerpreview/api/CachedData.java | 29 +
.../playerpreview/api/PlayerSkyblockData.java | 10 +
.../impl/party/playerpreview/api/SkinFetcher.java | 90 +++
.../api/playerprofile/PlayerProfile.java | 92 +++
.../api/playerprofile/PlayerProfileParser.java | 449 +++++++++++++
.../dataclasses/ClassSpecificData.java | 29 +
.../playerprofile/dataclasses/DungeonClass.java | 46 ++
.../dataclasses/DungeonSpecificData.java | 29 +
.../api/playerprofile/dataclasses/DungeonStat.java | 54 ++
.../api/playerprofile/dataclasses/DungeonType.java | 39 ++
.../dataclasses/FloorSpecificData.java | 29 +
.../api/playerprofile/dataclasses/Pet.java | 31 +
.../api/playerprofile/dataclasses/Skill.java | 31 +
.../datarenders/DataRendererEditor.java | 357 +++++++++++
.../datarenders/DataRendererRegistry.java | 64 ++
.../playerpreview/datarenders/IDataRenderer.java | 33 +
.../impl/DataRenderDungeonFloorStat.java | 105 +++
.../impl/DataRenderDungeonHighestFloorStat.java | 107 ++++
.../datarenders/impl/DataRendererClassLv.java | 88 +++
.../datarenders/impl/DataRendererDungeonLv.java | 82 +++
.../datarenders/impl/DataRendererFairySouls.java | 50 ++
.../datarenders/impl/DataRendererLilyWeight.java | 71 +++
.../datarenders/impl/DataRendererSecrets.java | 53 ++
.../impl/DataRendererSelectedClassLv.java | 77 +++
.../datarenders/impl/DataRendererSetUrOwn.java | 57 ++
.../datarenders/impl/DataRendererSkillLv.java | 80 +++
.../datarenders/impl/DataRendererTalismans.java | 123 ++++
.../mod/features/impl/secret/FeatureActions.java | 143 +++++
.../mod/features/impl/secret/FeatureBloodRush.java | 45 ++
.../impl/secret/FeatureCreateRefreshLine.java | 69 ++
.../impl/secret/FeatureFreezePathfind.java | 45 ++
.../impl/secret/FeaturePathfindStrategy.java | 106 ++++
.../features/impl/secret/FeaturePathfindToAll.java | 45 ++
.../impl/secret/FeatureSoulRoomWarning.java | 232 +++++++
.../impl/secret/FeatureTogglePathfind.java | 45 ++
.../impl/secret/PathfindLineProperties.java | 115 ++++
.../mechanicbrowser/FeatureMechanicBrowse.java | 164 +++++
.../mechanicbrowser/MGuiMechanicBrowser.java | 45 ++
.../mechanicbrowser/MechanicBrowserElement.java | 61 ++
.../mechanicbrowser/MechanicBrowserTooltip.java | 68 ++
.../mechanicbrowser/PanelMechanicBrowser.java | 343 ++++++++++
.../features/impl/solvers/FeatureSolverBlaze.java | 51 ++
.../impl/solvers/FeatureSolverBombdefuse.java | 30 +
.../features/impl/solvers/FeatureSolverBox.java | 57 ++
.../impl/solvers/FeatureSolverIcefill.java | 40 ++
.../features/impl/solvers/FeatureSolverKahoot.java | 35 +
.../features/impl/solvers/FeatureSolverRiddle.java | 35 +
.../impl/solvers/FeatureSolverSilverfish.java | 44 ++
.../impl/solvers/FeatureSolverTeleport.java | 39 ++
.../impl/solvers/FeatureSolverTictactoe.java | 39 ++
.../features/listener/BossroomEnterListener.java | 23 +
.../mod/features/listener/ChatListener.java | 25 +
.../mod/features/listener/ChatListenerGlobal.java | 25 +
.../listener/DiscordUserJoinRequestListener.java | 25 +
.../listener/DiscordUserUpdateListener.java | 25 +
.../DungeonContextInitializationListener.java | 23 +
.../mod/features/listener/DungeonEndListener.java | 23 +
.../mod/features/listener/DungeonQuitListener.java | 23 +
.../features/listener/DungeonStartListener.java | 23 +
.../listener/EntityLivingRenderListener.java | 26 +
.../listener/GuiBackgroundRenderListener.java | 25 +
.../mod/features/listener/GuiClickListener.java | 25 +
.../mod/features/listener/GuiOpenListener.java | 25 +
.../features/listener/GuiPostRenderListener.java | 25 +
.../features/listener/GuiPreRenderListener.java | 25 +
.../mod/features/listener/GuiUpdateListener.java | 25 +
.../mod/features/listener/InteractListener.java | 25 +
.../mod/features/listener/KeyInputListener.java | 25 +
.../features/listener/KeybindPressedListener.java | 25 +
.../features/listener/PlayerRenderListener.java | 26 +
.../features/listener/ScreenRenderListener.java | 23 +
.../features/listener/SkyblockJoinListener.java | 23 +
.../features/listener/SkyblockLeaveListener.java | 23 +
.../mod/features/listener/SoundListener.java | 25 +
.../features/listener/StompConnectedListener.java | 25 +
.../features/listener/TextureStichListener.java | 25 +
.../mod/features/listener/TickListener.java | 23 +
.../mod/features/listener/TitleListener.java | 25 +
.../mod/features/listener/TooltipListener.java | 25 +
.../mod/features/listener/WorldRenderListener.java | 23 +
.../features/text/PanelTextParameterConfig.java | 283 +++++++++
.../mod/features/text/StyledText.java | 29 +
.../mod/features/text/StyledTextProvider.java | 30 +
.../mod/features/text/StyledTextRenderer.java | 244 +++++++
.../mod/features/text/TextHUDFeature.java | 191 ++++++
.../dungeonsguide/mod/features/text/TextStyle.java | 34 +
170 files changed, 16761 insertions(+)
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureParameter.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/GuiFeature.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/SimpleFeature.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebug.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebugTrap.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureDebuggableMap.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomCoordDisplay.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureRoomDebugInfo.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureTestPepole.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureAutoReparty.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureBossHealth.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureBoxRealLivid.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureChestPrice.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureCurrentPhase.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureHideAnimals.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureTerracotaTimer.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornBearPercentage.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureThornSpiritBowTimer.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/FeatureWarningOnPortal.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/CorrectThePaneSolutionProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/FeatureSimonSaysSolver.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/FeatureTerminalSolvers.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/NavigateMazeSolutionProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/SelectAllColorSolutionProivider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/SelectInOrderSolutionProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/TerminalSolution.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/TerminalSolutionProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/boss/terminal/WhatStartsWithSolutionProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/cosmetics/FeatureNicknameColor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/cosmetics/FeatureNicknamePrefix.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/cosmetics/PrefixSelectorGUI.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/ImageTexture.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyInviteViewer.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/inviteViewer/PartyJoinRequest.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/invteTooltip/MTooltipInvite.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/invteTooltip/MTooltipInviteElement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/discord/onlinealarm/PlayingDGAlarm.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureBoxBats.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureBoxSkelemaster.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureBoxStarMobs.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureCollectScore.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonCurrentRoomSecrets.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMap.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRealTime.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonRoomName.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSBTime.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonTombs.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureHideNameTags.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeaturePlayerESP.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeaturePressAnyKeyToCloseChest.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWarnLowHealth.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWatcherWarning.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureAutoAcceptReparty.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCooldownCounter.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCopyMessages.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureDecreaseExplosionSound.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureDisableMessage.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureEpicCountdown.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeaturePenguins.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureRepartyCommand.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureTooltipDungeonStat.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureTooltipPrice.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureUpdateAlarm.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/FeatureAbilityCooldown.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/SkyblockAbility.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/ability/UsedAbility.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/APIKey.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeatureGoodParties.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyList.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeaturePartyReady.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/FeatureCustomPartyFinder.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/GuiCustomPartyFinder.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinder.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyFinderSettings.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/customgui/PanelPartyListElement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/FakePlayer.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/FeatureViewPlayerStatsOnJoin.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/ApiFetcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/CachedData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/PlayerSkyblockData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/SkinFetcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/PlayerProfile.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/PlayerProfileParser.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/ClassSpecificData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonClass.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonSpecificData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonStat.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/FloorSpecificData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/Pet.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/dataclasses/Skill.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/DataRendererEditor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/DataRendererRegistry.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/IDataRenderer.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRenderDungeonFloorStat.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRenderDungeonHighestFloorStat.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererClassLv.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererDungeonLv.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererFairySouls.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererLilyWeight.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererSecrets.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererSelectedClassLv.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererSetUrOwn.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererSkillLv.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/datarenders/impl/DataRendererTalismans.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureActions.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureBloodRush.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureCreateRefreshLine.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureFreezePathfind.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeaturePathfindStrategy.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeaturePathfindToAll.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureSoulRoomWarning.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/FeatureTogglePathfind.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/PathfindLineProperties.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MGuiMechanicBrowser.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserElement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/MechanicBrowserTooltip.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/secret/mechanicbrowser/PanelMechanicBrowser.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverBlaze.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverBombdefuse.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverBox.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverIcefill.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverKahoot.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverRiddle.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverSilverfish.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverTeleport.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/solvers/FeatureSolverTictactoe.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/BossroomEnterListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/ChatListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/ChatListenerGlobal.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/DiscordUserJoinRequestListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/DiscordUserUpdateListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/DungeonContextInitializationListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/DungeonEndListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/DungeonQuitListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/DungeonStartListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/EntityLivingRenderListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/GuiBackgroundRenderListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/GuiClickListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/GuiOpenListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/GuiPostRenderListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/GuiPreRenderListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/GuiUpdateListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/InteractListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/KeyInputListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/KeybindPressedListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/PlayerRenderListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/ScreenRenderListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/SkyblockJoinListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/SkyblockLeaveListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/SoundListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/StompConnectedListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/TextureStichListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/TickListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/TitleListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/TooltipListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/listener/WorldRenderListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/PanelTextParameterConfig.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledText.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextRenderer.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextHUDFeature.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/TextStyle.java
(limited to 'src/main/java/kr/syeyoung/dungeonsguide/mod/features')
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java
new file mode 100644
index 00000000..92d0bde3
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/mod/features/AbstractFeature.java
@@ -0,0 +1,114 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package kr.syeyoung.dungeonsguide.mod.features;
+
+import com.google.common.base.Supplier;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import kr.syeyoung.dungeonsguide.mod.config.guiconfig.ConfigPanelCreator;
+import kr.syeyoung.dungeonsguide.mod.config.guiconfig.MFeatureEdit;
+import kr.syeyoung.dungeonsguide.mod.config.guiconfig.MParameterEdit;
+import kr.syeyoung.dungeonsguide.mod.config.guiconfig.RootConfigPanel;
+import kr.syeyoung.dungeonsguide.mod.config.types.TypeConverter;
+import kr.syeyoung.dungeonsguide.mod.config.types.TypeConverterRegistry;
+import kr.syeyoung.dungeonsguide.mod.gui.MPanel;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.*;
+
+public abstract class AbstractFeature {
+ @Getter
+ private final String category;
+ @Getter
+ private final String name;
+
+ @Getter
+ private final String description;
+
+ @Getter
+ private final String key;
+
+ protected Map parameters = new HashMap();
+
+ protected void addParameter(String name, FeatureParameter f){
+ parameters.put(name, f);
+ }
+
+
+ protected AbstractFeature(String category, String name, String description, String key) {
+ this.category = category;
+ this.name = name;
+ this.description = description;
+ this.key = key;
+ }
+
+ @Getter
+ @Setter
+ private boolean enabled = true;
+
+ public List getParameters() { return new ArrayList(parameters.values()); }
+
+ public FeatureParameter getParameter(String key) {
+ return parameters.get(key);
+ }
+
+ public void loadConfig(JsonObject jsonObject) { // gets key, calls it
+ enabled = jsonObject.get("$enabled").getAsBoolean();
+
+ for (Map.Entry parameterEntry : parameters.entrySet()) {
+ parameterEntry.getValue().setToDefault();
+ JsonElement element = jsonObject.get(parameterEntry.getKey());
+ if (element == null) continue;
+ TypeConverter typeConverter = TypeConverterRegistry.getTypeConverter(parameterEntry.getValue().getValue_type());
+ parameterEntry.getValue().setValue(typeConverter.deserialize(element));
+ }
+ }
+
+ public JsonObject saveConfig() {
+ JsonObject object = new JsonObject();
+ for (Map.Entry parameterEntry : parameters.entrySet()) {
+ TypeConverter typeConverter = TypeConverterRegistry.getTypeConverter(parameterEntry.getValue().getValue_type());
+ JsonElement obj = typeConverter.serialize(parameterEntry.getValue().getValue());
+ object.add(parameterEntry.getKey(), obj);
+ }
+ object.addProperty("$enabled", isEnabled());
+ return object;
+ }
+
+ public String getEditRoute(RootConfigPanel rootConfigPanel) {
+ ConfigPanelCreator.map.put("base." + key , new Supplier() {
+ @Override
+ public MPanel get() {
+ MFeatureEdit featureEdit = new MFeatureEdit(AbstractFeature.this, rootConfigPanel);
+ for (FeatureParameter parameter: getParameters()) {
+ featureEdit.addParameterEdit(parameter.getKey(), new MParameterEdit(AbstractFeature.this, parameter, rootConfigPanel));
+ }
+ return featureEdit;
+ }
+ });
+ return "base." + key ;
+ }
+
+ public void onParameterReset() {}
+
+ public boolean isDisyllable() {
+ return true;
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureParameter.java b/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureParameter.java
new file mode 100644
index 00000000..30559d8a
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureParameter.java
@@ -0,0 +1,72 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package kr.syeyoung.dungeonsguide.mod.features;
+
+import kr.syeyoung.dungeonsguide.mod.config.types.TypeConverter;
+import kr.syeyoung.dungeonsguide.mod.config.types.TypeConverterRegistry;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.util.function.Consumer;
+
+@Data
+@AllArgsConstructor
+public class FeatureParameter {
+ private String key;
+ private String name;
+ private String description;
+ private T value;
+
+
+ private T default_value;
+ private String value_type;
+ private Consumer changedCallback;
+
+ public FeatureParameter(String key, String name, String description, T default_value, String value_type) {
+ this(key, name, description,default_value, value_type, null);
+ }
+
+ public FeatureParameter(String key, String name, String description, T default_value, String value_type, Consumer changedCallback) {
+ this.key = key;
+ this.name = name;
+ this.default_value = default_value;
+ this.description = description;
+ this.value_type = value_type;
+ if(changedCallback != null){
+ this.changedCallback = changedCallback;
+ changedCallback.accept(default_value);
+ }
+ }
+
+ public void setToDefault() {
+ TypeConverter typeConverter = TypeConverterRegistry.getTypeConverter(getValue_type());
+ value = (T) typeConverter.deserialize(typeConverter.serialize(default_value));
+ }
+
+ public T getValue() {
+ return value == null ? default_value : value;
+ }
+
+ public void setValue(T newValue){
+ value = newValue;
+ if(changedCallback != null){
+ changedCallback.accept(value);
+ }
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java
new file mode 100644
index 00000000..b8ff6bbc
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java
@@ -0,0 +1,337 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package kr.syeyoung.dungeonsguide.mod.features;
+
+import kr.syeyoung.dungeonsguide.mod.features.impl.advanced.*;
+import kr.syeyoung.dungeonsguide.mod.features.impl.boss.*;
+import kr.syeyoung.dungeonsguide.mod.features.impl.boss.terminal.FeatureSimonSaysSolver;
+import kr.syeyoung.dungeonsguide.mod.features.impl.boss.terminal.FeatureTerminalSolvers;
+import kr.syeyoung.dungeonsguide.mod.features.impl.cosmetics.FeatureNicknameColor;
+import kr.syeyoung.dungeonsguide.mod.features.impl.cosmetics.FeatureNicknamePrefix;
+import kr.syeyoung.dungeonsguide.mod.features.impl.discord.inviteViewer.PartyInviteViewer;
+import kr.syeyoung.dungeonsguide.mod.features.impl.discord.onlinealarm.PlayingDGAlarm;
+import kr.syeyoung.dungeonsguide.mod.features.impl.dungeon.*;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.*;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.ability.FeatureAbilityCooldown;
+import kr.syeyoung.dungeonsguide.mod.features.impl.party.APIKey;
+import kr.syeyoung.dungeonsguide.mod.features.impl.party.FeaturePartyList;
+import kr.syeyoung.dungeonsguide.mod.features.impl.party.FeaturePartyReady;
+import kr.syeyoung.dungeonsguide.mod.features.impl.party.customgui.FeatureCustomPartyFinder;
+import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.FeatureViewPlayerStatsOnJoin;
+import kr.syeyoung.dungeonsguide.mod.features.impl.secret.*;
+import kr.syeyoung.dungeonsguide.mod.features.impl.secret.mechanicbrowser.FeatureMechanicBrowse;
+import kr.syeyoung.dungeonsguide.mod.features.impl.solvers.*;
+import lombok.Getter;
+import org.lwjgl.input.Keyboard;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class FeatureRegistry {
+ @Getter
+ private static final List featureList = new ArrayList();
+ private static final Map featureByKey = new HashMap();
+ @Getter
+ private static final Map> featuresByCategory = new HashMap>();
+ @Getter
+ private static final Map categoryDescription = new HashMap<>();
+
+ public static AbstractFeature getFeatureByKey(String key) {
+ return featureByKey.get(key);
+ }
+
+ public static T register(T abstractFeature) {
+ if (featureByKey.containsKey(abstractFeature.getKey())) throw new IllegalArgumentException("DUPLICATE FEATURE DEFINITION");
+ featureList.add(abstractFeature);
+ featureByKey.put(abstractFeature.getKey(), abstractFeature);
+ List features = featuresByCategory.get(abstractFeature.getCategory());
+ if (features == null)
+ features = new ArrayList();
+ features.add(abstractFeature);
+ featuresByCategory.put(abstractFeature.getCategory(), features);
+
+ return abstractFeature;
+ }
+
+
+
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_GLOBAL;
+
+ public static FeatureMechanicBrowse SECRET_BROWSE;
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_SECRET_BROWSER;
+ public static FeatureActions SECRET_ACTIONS;
+
+ public static FeaturePathfindStrategy SECRET_PATHFIND_STRATEGY;
+ public static FeatureTogglePathfind SECRET_TOGGLE_KEY;
+ public static FeatureFreezePathfind SECRET_FREEZE_LINES;
+ public static FeatureCreateRefreshLine SECRET_CREATE_REFRESH_LINE;
+
+ public static SimpleFeature SECRET_AUTO_BROWSE_NEXT;
+ public static SimpleFeature SECRET_AUTO_START;
+ public static SimpleFeature SECRET_NEXT_KEY;
+
+ public static SimpleFeature SECRET_BLOOD_RUSH;
+ public static PathfindLineProperties SECRET_BLOOD_RUSH_LINE_PROPERTIES;
+
+
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_AUTOPATHFIND;
+
+ public static FeaturePathfindToAll SECRET_PATHFIND_ALL;
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_PATHFINDALL_PARENT;
+
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_PATHFINDALL_BAT;
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_PATHFINDALL_CHEST;
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_PATHFINDALL_ESSENCE;
+ public static PathfindLineProperties SECRET_LINE_PROPERTIES_PATHFINDALL_ITEM_DROP;
+
+ public static FeatureSolverRiddle SOLVER_RIDDLE;
+ public static FeatureSolverTictactoe SOLVER_TICTACTOE;
+ public static SimpleFeature SOLVER_WATERPUZZLE;
+ public static SimpleFeature SOLVER_CREEPER;
+ public static FeatureSolverTeleport SOLVER_TELEPORT;
+ public static FeatureSolverBlaze SOLVER_BLAZE;
+ public static FeatureSolverIcefill SOLVER_ICEPATH;
+ public static FeatureSolverSilverfish SOLVER_SILVERFISH;
+ public static FeatureSolverBox SOLVER_BOX;
+ public static FeatureSolverKahoot SOLVER_KAHOOT;
+ public static FeatureSolverBombdefuse SOLVER_BOMBDEFUSE;
+
+
+ public static FeatureDungeonMap DUNGEON_MAP;
+ public static FeatureTestPepole TEST_PEPOLE;
+ public static FeatureDungeonRoomName DUNGEON_ROOMNAME;
+ public static FeaturePressAnyKeyToCloseChest DUNGEON_CLOSECHEST;
+ public static FeatureBoxSkelemaster DUNGEON_BOXSKELEMASTER;
+ public static FeatureBoxBats DUNGEON_BOXBAT;
+ public static FeatureBoxStarMobs DUNGEON_BOXSTARMOBS;
+ public static FeatureWatcherWarning DUNGEON_WATCHERWARNING;
+ public static FeatureDungeonDeaths DUNGEON_DEATHS;
+ public static FeatureDungeonMilestone DUNGEON_MILESTONE;
+ public static FeatureDungeonRealTime DUNGEON_REALTIME;
+ public static FeatureDungeonSBTime DUNGEON_SBTIME;
+ public static FeatureDungeonSecrets DUNGEON_SECRETS;
+ public static FeatureDungeonCurrentRoomSecrets DUNGEON_SECRETS_ROOM;
+ public static FeatureDungeonTombs DUNGEON_TOMBS;
+ public static FeatureDungeonScore DUNGEON_SCORE;
+ public static FeatureWarnLowHealth DUNGEON_LOWHEALTH_WARN;
+ public static SimpleFeature DUNGEON_INTERMODCOMM;
+ public static FeaturePlayerESP DUNGEON_PLAYERESP;
+ public static FeatureHideNameTags DUNGEON_HIDENAMETAGS;
+ public static FeatureSoulRoomWarning DUNGEON_FAIRYSOUL;
+
+ public static FeatureWarningOnPortal BOSSFIGHT_WARNING_ON_PORTAL;
+ public static SimpleFeature BOSSFIGHT_CHESTPRICE;
+ public static FeatureAutoReparty BOSSFIGHT_AUTOREPARTY;
+ public static FeatureBossHealth BOSSFIGHT_HEALTH;
+ public static FeatureHideAnimals BOSSFIGHT_HIDE_ANIMALS;
+ public static FeatureThornBearPercentage BOSSFIGHT_BEAR_PERCENT;
+ public static FeatureThornSpiritBowTimer BOSSFIGHT_BOW_TIMER;
+ public static FeatureBoxRealLivid BOSSFIGHT_BOX_REALLIVID;
+ public static FeatureTerracotaTimer BOSSFIGHT_TERRACOTTA_TIMER;
+ public static FeatureCurrentPhase BOSSFIGHT_CURRENT_PHASE;
+ public static FeatureTerminalSolvers BOSSFIGHT_TERMINAL_SOLVERS;
+ public static FeatureSimonSaysSolver BOSSFIGHT_SIMONSAYS_SOLVER;
+
+ public static APIKey PARTYKICKER_APIKEY;
+ public static FeatureViewPlayerStatsOnJoin PARTYKICKER_VIEWPLAYER;
+ public static FeatureCustomPartyFinder PARTYKICKER_CUSTOM;
+ public static FeaturePartyList PARTY_LIST;
+ public static FeaturePartyReady PARTY_READY;
+
+ public static FeatureTooltipDungeonStat ETC_DUNGEONSTAT;
+ public static FeatureTooltipPrice ETC_PRICE;
+ public static FeatureAbilityCooldown ETC_ABILITY_COOLDOWN;
+ public static FeatureCooldownCounter ETC_COOLDOWN;
+ public static FeatureRepartyCommand ETC_REPARTY;
+ public static FeatureDecreaseExplosionSound ETC_EXPLOSION_SOUND;
+ public static FeatureAutoAcceptReparty ETC_AUTO_ACCEPT_REPARTY;
+ public static FeatureUpdateAlarm ETC_TEST;
+
+ public static SimpleFeature FIX_SPIRIT_BOOTS;
+ public static FeatureDisableMessage FIX_MESSAGES;
+
+ public static FeatureCopyMessages ETC_COPY_MSG;
+
+ public static FeatureEpicCountdown EPIC_COUNTDOWN;
+
+ public static FeaturePenguins ETC_PENGUIN;
+
+ public static FeatureCollectScore ETC_COLLECT_SCORE;
+
+
+
+
+
+ public static FeatureNicknamePrefix COSMETIC_PREFIX;
+ public static FeatureNicknameColor COSMETIC_NICKNAMECOLOR;
+
+
+
+ public static SimpleFeature DISCORD_RICHPRESENCE;
+ public static PartyInviteViewer DISCORD_ASKTOJOIN;
+ public static PlayingDGAlarm DISCORD_ONLINEALARM;
+ public static SimpleFeature DISCORD_DONOTUSE;
+
+
+ public static SimpleFeature DEBUG;
+ public static SimpleFeature ADVANCED_ROOMEDIT;
+
+ public static FeatureRoomDebugInfo ADVANCED_DEBUG_ROOM;
+
+ public static FeatureDebuggableMap ADVANCED_DEBUGGABLE_MAP;
+
+ public static FeatureRoomCoordDisplay ADVANCED_COORDS;
+
+ private static FeatureDebugTrap ADVANCED_BAT;
+
+ public static SimpleFeature RENDER_BREACONS;
+
+ public static SimpleFeature RENDER_DESTENATION_TEXT;
+
+ public static SimpleFeature DEBUG_BLOCK_CACHING;
+
+ public void init(){
+ try {
+ SECRET_LINE_PROPERTIES_GLOBAL = register(new PathfindLineProperties("Dungeon.Secrets.Preferences", "Global Line Settings", "Global Line Settings", "secret.lineproperties.global", true, null));
+ SECRET_CREATE_REFRESH_LINE = register(new FeatureCreateRefreshLine());
+ SECRET_FREEZE_LINES = register(new FeatureFreezePathfind());
+ SECRET_TOGGLE_KEY = register(new FeatureTogglePathfind());
+ SECRET_PATHFIND_STRATEGY = register(new Fea