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