From dd7a4209752715db544b2fef804da9762c532cdc Mon Sep 17 00:00:00 2001
From: kokoniara <70776766+kingstefan26@users.noreply.github.com>
Date: Fri, 7 Oct 2022 14:50:22 +0200
Subject: fix player profile not never loading in chat (#63)
* 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
* now shows which profile is now selected
put button on top
a lil refactor
* fix player profile sometimes not loading
Co-authored-by: syeyoung <42869671+cyoung06@users.noreply.github.com>
---
build.gradle | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
mode change 100755 => 100644 build.gradle
(limited to 'build.gradle')
diff --git a/build.gradle b/build.gradle
old mode 100755
new mode 100644
index f108ac58..24bc189f
--- a/build.gradle
+++ b/build.gradle
@@ -1,4 +1,22 @@
+/*
+ * 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 .
+ */
+
plugins {
id "idea"
id "java"
--
cgit
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>
---
.github/workflows/beta.yml | 33 +
.github/workflows/main.yml | 7 +-
build.gradle | 36 +-
.../kr/syeyoung/dungeonsguide/Authenticator.java | 302 -----
.../kr/syeyoung/dungeonsguide/DGInterface.java | 28 -
.../kr/syeyoung/dungeonsguide/DungeonsGuide.java | 272 ----
.../kr/syeyoung/dungeonsguide/GuiLoadingError.java | 21 +-
.../kr/syeyoung/dungeonsguide/IDungeonGuide.java | 10 +
.../java/kr/syeyoung/dungeonsguide/Keybinds.java | 53 -
src/main/java/kr/syeyoung/dungeonsguide/Main.java | 185 +--
.../kr/syeyoung/dungeonsguide/SkyblockStatus.java | 123 --
.../kr/syeyoung/dungeonsguide/YoMamaOutdated.java | 110 ++
.../syeyoung/dungeonsguide/auth/AuthManager.java | 150 +++
.../kr/syeyoung/dungeonsguide/auth/AuthUtil.java | 70 +
.../InvalidDungeonsGuideCredentialsException.java | 8 +
.../dungeonsguide/auth/ResourceManager.java | 164 +++
.../auth/authprovider/AuthProvider.java | 16 +
.../auth/authprovider/DgAuth/DgAuth.java | 46 +
.../auth/authprovider/DgAuth/DgAuthUtil.java | 88 ++
.../dungeonsguide/auth/authprovider/NullAuth.java | 62 +
.../dungeonsguide/chat/ChatProcessResult.java | 31 -
.../syeyoung/dungeonsguide/chat/ChatProcessor.java | 115 --
.../dungeonsguide/chat/ChatSubscriber.java | 26 -
.../syeyoung/dungeonsguide/chat/PartyContext.java | 89 --
.../syeyoung/dungeonsguide/chat/PartyManager.java | 605 ---------
.../commands/CommandDungeonsGuide.java | 602 ---------
.../dungeonsguide/commands/CommandReparty.java | 110 --
.../kr/syeyoung/dungeonsguide/config/Config.java | 65 -
.../config/guiconfig/ConfigPanelCreator.java | 40 -
.../config/guiconfig/GuiConfigV2.java | 59 -
.../dungeonsguide/config/guiconfig/MCategory.java | 103 --
.../config/guiconfig/MCategoryElement.java | 82 --
.../dungeonsguide/config/guiconfig/MFeature.java | 154 ---
.../config/guiconfig/MFeatureEdit.java | 113 --
.../dungeonsguide/config/guiconfig/MNotFound.java | 40 -
.../config/guiconfig/MPanelCategory.java | 83 --
.../config/guiconfig/MParameterEdit.java | 220 ----
.../config/guiconfig/NestedCategory.java | 55 -
.../config/guiconfig/RootConfigPanel.java | 305 -----
.../guiconfig/location/GuiGuiLocationConfig.java | 166 ---
.../config/guiconfig/location/Marker.java | 45 -
.../config/guiconfig/location/PanelDelegate.java | 406 ------
.../dungeonsguide/config/types/AColor.java | 63 -
.../dungeonsguide/config/types/GUIRectangle.java | 82 --
.../dungeonsguide/config/types/TCAColor.java | 53 -
.../dungeonsguide/config/types/TCBoolean.java | 39 -
.../dungeonsguide/config/types/TCColor.java | 42 -
.../dungeonsguide/config/types/TCFloat.java | 39 -
.../dungeonsguide/config/types/TCGUIRectangle.java | 52 -
.../dungeonsguide/config/types/TCInteger.java | 39 -
.../dungeonsguide/config/types/TCKeybind.java | 39 -
.../dungeonsguide/config/types/TCRectangle.java | 53 -
.../dungeonsguide/config/types/TCString.java | 39 -
.../dungeonsguide/config/types/TCStringList.java | 52 -
.../dungeonsguide/config/types/TCTextStyle.java | 55 -
.../config/types/TCTextStyleList.java | 55 -
.../dungeonsguide/config/types/TypeConverter.java | 29 -
.../config/types/TypeConverterRegistry.java | 54 -
.../dungeonsguide/cosmetics/ActiveCosmetic.java | 12 -
.../dungeonsguide/cosmetics/CosmeticData.java | 14 -
.../dungeonsguide/cosmetics/CosmeticsManager.java | 300 -----
.../cosmetics/CustomNetworkPlayerInfo.java | 103 --
.../cosmetics/CustomPacketPlayerListItem.java | 39 -
.../dungeonsguide/cosmetics/IChatReplacer.java | 26 -
.../chatreplacers/ChatReplacerChatByMe.java | 106 --
.../cosmetics/chatreplacers/ChatReplacerCoop.java | 121 --
.../chatreplacers/ChatReplacerMessage.java | 107 --
.../cosmetics/chatreplacers/ChatReplacerPV.java | 119 --
.../chatreplacers/ChatReplacerSocialOptions.java | 121 --
.../chatreplacers/ChatReplacerViewProfile.java | 128 --
.../dungeon/DungeonActionManager.java | 38 -
.../dungeonsguide/dungeon/DungeonContext.java | 206 ---
.../dungeonsguide/dungeon/MapProcessor.java | 504 -------
.../dungeon/actions/AbstractAction.java | 57 -
.../dungeonsguide/dungeon/actions/Action.java | 40 -
.../dungeon/actions/ActionBreakWithSuperBoom.java | 101 --
.../dungeon/actions/ActionChangeState.java | 72 -
.../dungeonsguide/dungeon/actions/ActionClick.java | 78 --
.../dungeon/actions/ActionClickSet.java | 91 --
.../dungeon/actions/ActionComplete.java | 41 -
.../dungeon/actions/ActionDropItem.java | 71 -
.../dungeon/actions/ActionInteract.java | 81 --
.../dungeonsguide/dungeon/actions/ActionKill.java | 89 --
.../dungeonsguide/dungeon/actions/ActionMove.java | 114 --
.../dungeon/actions/ActionMoveNearestAir.java | 113 --
.../dungeonsguide/dungeon/actions/ActionRoot.java | 48 -
.../dungeon/actions/tree/ActionRoute.java | 124 --
.../dungeon/actions/tree/ActionTree.java | 83 --
.../dungeon/actions/tree/ActionTreeUtil.java | 83 --
.../dungeon/data/DungeonRoomInfo.java | 6 +-
.../dungeonsguide/dungeon/data/OffsetPoint.java | 21 +-
.../dungeonsguide/dungeon/data/OffsetPointSet.java | 2 +-
.../dungeon/doorfinder/CatacombDataProvider.java | 171 ---
.../doorfinder/CatacombMasterDataProvider.java | 125 --
.../dungeon/doorfinder/DungeonDoor.java | 81 --
.../doorfinder/DungeonSpecificDataProvider.java | 39 -
.../DungeonSpecificDataProviderRegistry.java | 39 -
.../dungeon/doorfinder/EDungeonDoorType.java | 33 -
.../dungeon/events/DungeonCryptBrokenEvent.java | 37 -
.../dungeon/events/DungeonDeathEvent.java | 38 -
.../dungeonsguide/dungeon/events/DungeonEvent.java | 41 -
.../dungeon/events/DungeonEventData.java | 25 -
.../dungeon/events/DungeonEventHolder.java | 32 -
.../dungeon/events/DungeonMapUpdateEvent.java | 33 -
.../dungeon/events/DungeonNodataEvent.java | 28 -
.../dungeon/events/DungeonPuzzleFailureEvent.java | 33 -
.../dungeon/events/DungeonRoomDiscoverEvent.java | 45 -
.../events/DungeonSecretCountChangeEvent.java | 39 -
.../dungeon/events/DungeonStateChangeEvent.java | 41 -
.../dungeon/events/SerializableBlockPos.java | 36 -
.../dungeon/mechanics/DungeonBreakableWall.java | 18 +-
.../dungeon/mechanics/DungeonDoor.java | 16 +-
.../dungeon/mechanics/DungeonDummy.java | 13 +-
.../dungeon/mechanics/DungeonFairySoul.java | 56 +-
.../dungeon/mechanics/DungeonJournal.java | 17 +-
.../dungeon/mechanics/DungeonLever.java | 17 +-
.../dungeon/mechanics/DungeonMechanic.java | 40 -
.../dungeon/mechanics/DungeonNPC.java | 67 +-
.../dungeon/mechanics/DungeonOnewayDoor.java | 22 +-
.../dungeon/mechanics/DungeonOnewayLever.java | 17 +-
.../dungeon/mechanics/DungeonPressurePlate.java | 52 +-
.../dungeon/mechanics/DungeonRoomDoor.java | 50 +-
.../dungeon/mechanics/DungeonSecret.java | 106 +-
.../dungeon/mechanics/DungeonTomb.java | 64 +-
.../dungeon/mechanics/RouteBlocker.java | 25 -
.../mechanics/dunegonmechanic/DungeonMechanic.java | 40 +
.../mechanics/dunegonmechanic/RouteBlocker.java | 25 +
.../mechanics/predicates/PredicateArmorStand.java | 1 -
.../dungeon/roomfinder/DungeonRoom.java | 381 ------
.../roomfinder/DungeonRoomInfoRegistry.java | 143 --
.../dungeon/roomfinder/RoomMatcher.java | 155 ---
.../eventlistener/DungeonListener.java | 585 ---------
.../eventlistener/FeatureListener.java | 512 --------
.../eventlistener/PacketListener.java | 177 ---
.../dungeonsguide/events/BlockUpdateEvent.java | 38 -
.../dungeonsguide/events/BossroomEnterEvent.java | 24 -
.../events/DiscordUserJoinRequestEvent.java | 30 -
.../events/DiscordUserUpdateEvent.java | 30 -
.../events/DungeonContextInitializationEvent.java | 24 -
.../dungeonsguide/events/DungeonEndedEvent.java | 24 -
.../dungeonsguide/events/DungeonLeftEvent.java | 24 -
.../dungeonsguide/events/DungeonStartedEvent.java | 24 -
.../dungeonsguide/events/HypixelJoinedEvent.java | 24 -
.../dungeonsguide/events/KeyBindPressedEvent.java | 28 -
.../events/PlayerInteractEntityEvent.java | 39 -
.../events/PlayerListItemPacketEvent.java | 30 -
.../dungeonsguide/events/SkyblockJoinedEvent.java | 24 -
.../dungeonsguide/events/SkyblockLeftEvent.java | 24 -
.../dungeonsguide/events/StompConnectedEvent.java | 30 -
.../syeyoung/dungeonsguide/events/TitleEvent.java | 30 -
.../dungeonsguide/events/WindowUpdateEvent.java | 33 -
.../dungeonsguide/features/AbstractFeature.java | 109 --
.../dungeonsguide/features/FeatureParameter.java | 51 -
.../dungeonsguide/features/FeatureRegistry.java | 217 ---
.../dungeonsguide/features/GuiFeature.java | 160 ---
.../dungeonsguide/features/SimpleFeature.java | 33 -
.../features/impl/advanced/FeatureDebug.java | 65 -
.../impl/advanced/FeatureDebuggableMap.java | 92 --
.../impl/advanced/FeatureRoomCoordDisplay.java | 93 --
.../impl/advanced/FeatureRoomDebugInfo.java | 94 --
.../features/impl/boss/FeatureAutoReparty.java | 34 -
.../features/impl/boss/FeatureBossHealth.java | 103 --
.../features/impl/boss/FeatureBoxRealLivid.java | 54 -
.../features/impl/boss/FeatureChestPrice.java | 174 ---
.../features/impl/boss/FeatureCurrentPhase.java | 74 --
.../features/impl/boss/FeatureHideAnimals.java | 69 -
.../features/impl/boss/FeatureTerracotaTimer.java | 77 --
.../impl/boss/FeatureThornBearPercentage.java | 78 --
.../impl/boss/FeatureThornSpiritBowTimer.java | 111 --
.../features/impl/boss/FeatureWarningOnPortal.java | 200 ---
.../terminal/CorrectThePaneSolutionProvider.java | 53 -
.../impl/boss/terminal/FeatureSimonSaysSolver.java | 115 --
.../impl/boss/terminal/FeatureTerminalSolvers.java | 155 ---
.../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 | 51 -
.../impl/cosmetics/FeatureNicknameColor.java | 49 -
.../impl/cosmetics/FeatureNicknamePrefix.java | 49 -
.../features/impl/cosmetics/PrefixSelectorGUI.java | 188 ---
.../impl/discord/inviteViewer/ImageTexture.java | 120 --
.../discord/inviteViewer/PartyInviteViewer.java | 320 -----
.../discord/inviteViewer/PartyJoinRequest.java | 59 -
.../impl/discord/invteTooltip/MTooltipInvite.java | 128 --
.../invteTooltip/MTooltipInviteElement.java | 109 --
.../impl/discord/onlinealarm/PlayingDGAlarm.java | 171 ---
.../features/impl/dungeon/FeatureBoxBats.java | 68 -
.../impl/dungeon/FeatureBoxSkelemaster.java | 68 -
.../features/impl/dungeon/FeatureBoxStarMobs.java | 68 -
.../features/impl/dungeon/FeatureCollectScore.java | 28 -
.../dungeon/FeatureDungeonCurrentRoomSecrets.java | 108 --
.../impl/dungeon/FeatureDungeonDeaths.java | 167 ---
.../features/impl/dungeon/FeatureDungeonMap.java | 454 -------
.../impl/dungeon/FeatureDungeonMilestone.java | 109 --
.../impl/dungeon/FeatureDungeonRealTime.java | 92 --
.../impl/dungeon/FeatureDungeonRoomName.java | 98 --
.../impl/dungeon/FeatureDungeonSBTime.java | 119 --
.../features/impl/dungeon/FeatureDungeonScore.java | 361 -----
.../impl/dungeon/FeatureDungeonSecrets.java | 144 --
.../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 | 106 --
.../features/impl/etc/FeatureCopyMessages.java | 42 -
.../impl/etc/FeatureDecreaseExplosionSound.java | 55 -
.../features/impl/etc/FeatureDisableMessage.java | 79 --
.../features/impl/etc/FeaturePenguins.java | 182 ---
.../features/impl/etc/FeatureRepartyCommand.java | 29 -
.../impl/etc/FeatureTooltipDungeonStat.java | 52 -
.../features/impl/etc/FeatureTooltipPrice.java | 111 --
.../features/impl/etc/FeatureUpdateAlarm.java | 63 -
.../impl/etc/ability/FeatureAbilityCooldown.java | 403 ------
.../features/impl/etc/ability/SkyblockAbility.java | 32 -
.../features/impl/etc/ability/UsedAbility.java | 31 -
.../dungeonsguide/features/impl/party/APIKey.java | 58 -
.../features/impl/party/FeatureGoodParties.java | 121 --
.../features/impl/party/FeaturePartyList.java | 97 --
.../features/impl/party/FeaturePartyReady.java | 181 ---
.../party/customgui/FeatureCustomPartyFinder.java | 114 --
.../impl/party/customgui/GuiCustomPartyFinder.java | 78 --
.../impl/party/customgui/PanelPartyFinder.java | 341 -----
.../party/customgui/PanelPartyFinderSettings.java | 294 -----
.../party/customgui/PanelPartyListElement.java | 237 ----
.../impl/party/playerpreview/FakePlayer.java | 101 --
.../FeatureViewPlayerStatsOnJoin.java | 703 ----------
.../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 --
.../features/impl/secret/FeatureActions.java | 144 --
.../features/impl/secret/FeatureBloodRush.java | 45 -
.../impl/secret/FeatureCreateRefreshLine.java | 72 -
.../impl/secret/FeatureFreezePathfind.java | 57 -
.../impl/secret/FeaturePathfindStrategy.java | 110 --
.../features/impl/secret/FeaturePathfindToAll.java | 45 -
.../impl/secret/FeatureSoulRoomWarning.java | 231 ----
.../impl/secret/FeatureTogglePathfind.java | 55 -
.../impl/secret/PathfindLineProperties.java | 117 --
.../mechanicbrowser/FeatureMechanicBrowse.java | 179 ---
.../mechanicbrowser/MGuiMechanicBrowser.java | 45 -
.../mechanicbrowser/MechanicBrowserElement.java | 65 -
.../mechanicbrowser/MechanicBrowserTooltip.java | 68 -
.../mechanicbrowser/PanelMechanicBrowser.java | 327 -----
.../features/impl/solvers/FeatureSolverBlaze.java | 46 -
.../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 | 40 -
.../impl/solvers/FeatureSolverTeleport.java | 39 -
.../impl/solvers/FeatureSolverTictactoe.java | 39 -
.../features/listener/BossroomEnterListener.java | 23 -
.../features/listener/ChatListener.java | 25 -
.../features/listener/ChatListenerGlobal.java | 25 -
.../listener/DiscordUserJoinRequestListener.java | 26 -
.../listener/DiscordUserUpdateListener.java | 25 -
.../DungeonContextInitializationListener.java | 23 -
.../features/listener/DungeonEndListener.java | 23 -
.../features/listener/DungeonQuitListener.java | 23 -
.../features/listener/DungeonStartListener.java | 23 -
.../listener/EntityLivingRenderListener.java | 27 -
.../listener/GuiBackgroundRenderListener.java | 25 -
.../features/listener/GuiClickListener.java | 25 -
.../features/listener/GuiOpenListener.java | 25 -
.../features/listener/GuiPostRenderListener.java | 26 -
.../features/listener/GuiPreRenderListener.java | 25 -
.../features/listener/GuiUpdateListener.java | 26 -
.../features/listener/InteractListener.java | 26 -
.../features/listener/KeyInputListener.java | 26 -
.../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 -
.../features/listener/SoundListener.java | 25 -
.../features/listener/StompConnectedListener.java | 25 -
.../features/listener/TextureStichListener.java | 26 -
.../features/listener/TickListener.java | 23 -
.../features/listener/TitleListener.java | 25 -
.../features/listener/TooltipListener.java | 25 -
.../features/listener/WorldRenderListener.java | 23 -
.../features/text/PanelTextParameterConfig.java | 284 ----
.../dungeonsguide/features/text/StyledText.java | 29 -
.../features/text/StyledTextProvider.java | 30 -
.../features/text/StyledTextRenderer.java | 245 ----
.../features/text/TextHUDFeature.java | 191 ---
.../dungeonsguide/features/text/TextStyle.java | 36 -
.../kr/syeyoung/dungeonsguide/gamesdk/GameSDK.java | 95 --
.../gamesdk/jna/GameSDKTypeMapper.java | 46 -
.../dungeonsguide/gamesdk/jna/NativeGameSDK.java | 50 -
.../gamesdk/jna/datastruct/DiscordActivity.java | 51 -
.../jna/datastruct/DiscordActivityAssets.java | 42 -
.../jna/datastruct/DiscordActivityParty.java | 40 -
.../jna/datastruct/DiscordActivitySecrets.java | 41 -
.../jna/datastruct/DiscordActivityTimestamps.java | 40 -
.../jna/datastruct/DiscordCreateParams.java | 72 -
.../gamesdk/jna/datastruct/DiscordEntitlement.java | 42 -
.../gamesdk/jna/datastruct/DiscordFileStat.java | 42 -
.../jna/datastruct/DiscordImageDimensions.java | 40 -
.../gamesdk/jna/datastruct/DiscordImageHandle.java | 43 -
.../gamesdk/jna/datastruct/DiscordInputMode.java | 41 -
.../gamesdk/jna/datastruct/DiscordLobby.java | 47 -
.../gamesdk/jna/datastruct/DiscordOAuth2Token.java | 42 -
.../gamesdk/jna/datastruct/DiscordPartySize.java | 40 -
.../gamesdk/jna/datastruct/DiscordPresence.java | 40 -
.../jna/datastruct/DiscordRelationship.java | 41 -
.../gamesdk/jna/datastruct/DiscordSku.java | 44 -
.../gamesdk/jna/datastruct/DiscordSkuPrice.java | 41 -
.../gamesdk/jna/datastruct/DiscordStruct.java | 36 -
.../gamesdk/jna/datastruct/DiscordUser.java | 46 -
.../jna/datastruct/DiscordUserAchievement.java | 44 -
.../enumuration/EDiscordActivityActionType.java | 67 -
.../EDiscordActivityJoinRequestReply.java | 68 -
.../jna/enumuration/EDiscordActivityType.java | 69 -
.../jna/enumuration/EDiscordCreateFlags.java | 67 -
.../jna/enumuration/EDiscordEntitlementType.java | 72 -
.../gamesdk/jna/enumuration/EDiscordImageType.java | 66 -
.../jna/enumuration/EDiscordInputModeType.java | 67 -
.../jna/enumuration/EDiscordLobbySearchCast.java | 67 -
.../enumuration/EDiscordLobbySearchComparison.java | 71 -
.../enumuration/EDiscordLobbySearchDistance.java | 69 -
.../gamesdk/jna/enumuration/EDiscordLobbyType.java | 67 -
.../gamesdk/jna/enumuration/EDiscordLogLevel.java | 69 -
.../jna/enumuration/EDiscordPremiumType.java | 68 -
.../jna/enumuration/EDiscordRelationshipType.java | 71 -
.../gamesdk/jna/enumuration/EDiscordResult.java | 109 --
.../gamesdk/jna/enumuration/EDiscordSkuType.java | 69 -
.../gamesdk/jna/enumuration/EDiscordStatus.java | 69 -
.../gamesdk/jna/enumuration/EDiscordUserFlag.java | 70 -
.../jna/interfacestruct/GameSDKCallback.java | 30 -
.../interfacestruct/IDiscordAchievementEvents.java | 40 -
.../IDiscordAchievementManager.java | 58 -
.../interfacestruct/IDiscordActivityEvents.java | 51 -
.../interfacestruct/IDiscordActivityManager.java | 64 -
.../IDiscordApplicationManager.java | 61 -
.../gamesdk/jna/interfacestruct/IDiscordCore.java | 92 --
.../jna/interfacestruct/IDiscordImageManager.java | 54 -
.../jna/interfacestruct/IDiscordLobbyEvents.java | 65 -
.../jna/interfacestruct/IDiscordLobbyManager.java | 149 ---
.../IDiscordLobbyMemberTransaction.java | 43 -
.../interfacestruct/IDiscordLobbySearchQuery.java | 53 -
.../interfacestruct/IDiscordLobbyTransaction.java | 58 -
.../jna/interfacestruct/IDiscordNetworkEvents.java | 46 -
.../interfacestruct/IDiscordNetworkManager.java | 66 -
.../jna/interfacestruct/IDiscordOverlayEvents.java | 39 -
.../interfacestruct/IDiscordOverlayManager.java | 57 -
.../IDiscordRelationshipEvents.java | 43 -
.../IDiscordRelationshipManager.java | 54 -
.../interfacestruct/IDiscordStorageManager.java | 82 --
.../jna/interfacestruct/IDiscordStoreEvents.java | 44 -
.../jna/interfacestruct/IDiscordStoreManager.java | 74 --
.../jna/interfacestruct/IDiscordUserEvents.java | 39 -
.../jna/interfacestruct/IDiscordUserManager.java | 54 -
.../jna/interfacestruct/IDiscordVoiceEvents.java | 40 -
.../jna/interfacestruct/IDiscordVoiceManager.java | 73 --
.../gamesdk/jna/typedef/DiscordClientID.java | 30 -
.../jna/typedef/DiscordNetworkChannelId.java | 30 -
.../gamesdk/jna/typedef/DiscordNetworkPeerId.java | 30 -
.../gamesdk/jna/typedef/DiscordSnowflake.java | 30 -
.../gamesdk/jna/typedef/DiscordTimestamp.java | 30 -
.../gamesdk/jna/typedef/DiscordVersion.java | 30 -
.../dungeonsguide/gamesdk/jna/typedef/Int32.java | 31 -
.../dungeonsguide/gamesdk/jna/typedef/Int64.java | 31 -
.../dungeonsguide/gamesdk/jna/typedef/UInt32.java | 31 -
.../dungeonsguide/gamesdk/jna/typedef/UInt64.java | 31 -
.../dungeonsguide/gamesdk/jna/typedef/UInt8.java | 31 -
.../java/kr/syeyoung/dungeonsguide/gui/MGui.java | 261 ----
.../java/kr/syeyoung/dungeonsguide/gui/MPanel.java | 296 -----
.../dungeonsguide/gui/elements/MButton.java | 117 --
.../dungeonsguide/gui/elements/MCollapsable.java | 138 --
.../dungeonsguide/gui/elements/MColor.java | 49 -
.../gui/elements/MEditableAColor.java | 107 --
.../gui/elements/MFloatSelectionButton.java | 97 --
.../gui/elements/MIntegerSelectionButton.java | 95 --
.../dungeonsguide/gui/elements/MKeyEditButton.java | 148 ---
.../dungeonsguide/gui/elements/MLabel.java | 72 -
.../gui/elements/MLabelAndElement.java | 76 --
.../syeyoung/dungeonsguide/gui/elements/MList.java | 93 --
.../dungeonsguide/gui/elements/MModal.java | 92 --
.../gui/elements/MModalConfirmation.java | 87 --
.../dungeonsguide/gui/elements/MModalMessage.java | 77 --
.../gui/elements/MNavigatingPane.java | 214 ---
.../gui/elements/MPanelScaledGUI.java | 214 ---
.../dungeonsguide/gui/elements/MParameter.java | 91 --
.../gui/elements/MPassiveLabelAndElement.java | 71 -
.../dungeonsguide/gui/elements/MPopupMenu.java | 103 --
.../gui/elements/MPortableColorEdit.java | 296 -----
.../dungeonsguide/gui/elements/MRootPanel.java | 60 -
.../dungeonsguide/gui/elements/MScrollBar.java | 210 ---
.../gui/elements/MScrollablePanel.java | 187 ---
.../dungeonsguide/gui/elements/MSpacer.java | 36 -
.../gui/elements/MStringSelectionButton.java | 94 --
.../dungeonsguide/gui/elements/MTabbedPane.java | 161 ---
.../dungeonsguide/gui/elements/MTextField.java | 422 ------
.../dungeonsguide/gui/elements/MToggleButton.java | 97 --
.../dungeonsguide/gui/elements/MTooltip.java | 108 --
.../dungeonsguide/gui/elements/MTooltipText.java | 44 -
.../dungeonsguide/gui/elements/MValue.java | 80 --
.../syeyoung/dungeonsguide/mod/DungeonsGuide.java | 260 ++++
.../kr/syeyoung/dungeonsguide/mod/Keybinds.java | 47 +
.../syeyoung/dungeonsguide/mod/SkyblockStatus.java | 155 +++
.../dungeonsguide/mod/chat/ChatProcessResult.java | 31 +
.../dungeonsguide/mod/chat/ChatProcessor.java | 118 ++
.../dungeonsguide/mod/chat/ChatSubscriber.java | 26 +
.../dungeonsguide/mod/chat/ChatTransmitter.java | 69 +
.../dungeonsguide/mod/commands/CommandDgDebug.java | 450 +++++++
.../mod/commands/CommandDungeonsGuide.java | 172 +++
.../dungeonsguide/mod/commands/CommandReparty.java | 104 ++
.../syeyoung/dungeonsguide/mod/config/Config.java | 65 +
.../mod/config/guiconfig/ConfigPanelCreator.java | 40 +
.../mod/config/guiconfig/GuiConfigV2.java | 59 +
.../mod/config/guiconfig/MCategory.java | 103 ++
.../mod/config/guiconfig/MCategoryElement.java | 82 ++
.../mod/config/guiconfig/MFeature.java | 154 +++
.../mod/config/guiconfig/MFeatureEdit.java | 113 ++
.../mod/config/guiconfig/MNotFound.java | 38 +
.../mod/config/guiconfig/MPanelCategory.java | 83 ++
.../mod/config/guiconfig/MParameterEdit.java | 219 ++++
.../mod/config/guiconfig/NestedCategory.java | 54 +
.../mod/config/guiconfig/RootConfigPanel.java | 311 +++++
.../guiconfig/location/GuiGuiLocationConfig.java | 166 +++
.../mod/config/guiconfig/location/Marker.java | 45 +
.../config/guiconfig/location/PanelDelegate.java | 403 ++++++
.../dungeonsguide/mod/config/types/AColor.java | 63 +
.../mod/config/types/GUIRectangle.java | 81 ++
.../dungeonsguide/mod/config/types/TCAColor.java | 51 +
.../dungeonsguide/mod/config/types/TCBoolean.java | 39 +
.../dungeonsguide/mod/config/types/TCColor.java | 41 +
.../dungeonsguide/mod/config/types/TCFloat.java | 39 +
.../mod/config/types/TCGUIRectangle.java | 50 +
.../dungeonsguide/mod/config/types/TCInteger.java | 39 +
.../dungeonsguide/mod/config/types/TCKeybind.java | 39 +
.../mod/config/types/TCRectangle.java | 51 +
.../dungeonsguide/mod/config/types/TCString.java | 39 +
.../mod/config/types/TCStringList.java | 51 +
.../mod/config/types/TCTextStyle.java | 52 +
.../mod/config/types/TCTextStyleList.java | 54 +
.../mod/config/types/TypeConverter.java | 29 +
.../mod/config/types/TypeConverterRegistry.java | 52 +
.../mod/cosmetics/ActiveCosmetic.java | 12 +
.../dungeonsguide/mod/cosmetics/CosmeticData.java | 14 +
.../mod/cosmetics/CosmeticsManager.java | 288 ++++
.../mod/cosmetics/CustomNetworkPlayerInfo.java | 108 ++
.../mod/cosmetics/CustomPacketPlayerListItem.java | 38 +
.../dungeonsguide/mod/cosmetics/IChatReplacer.java | 26 +
.../chatreplacers/ChatReplacerChatByMe.java | 106 ++
.../cosmetics/chatreplacers/ChatReplacerCoop.java | 119 ++
.../chatreplacers/ChatReplacerMessage.java | 106 ++
.../cosmetics/chatreplacers/ChatReplacerPV.java | 119 ++
.../chatreplacers/ChatReplacerSocialOptions.java | 117 ++
.../chatreplacers/ChatReplacerViewProfile.java | 130 ++
.../dungeonsguide/mod/discord/gamesdk/GameSDK.java | 87 ++
.../mod/discord/gamesdk/jna/GameSDKTypeMapper.java | 46 +
.../mod/discord/gamesdk/jna/NativeGameSDK.java | 50 +
.../gamesdk/jna/datastruct/DiscordActivity.java | 50 +
.../jna/datastruct/DiscordActivityAssets.java | 42 +
.../jna/datastruct/DiscordActivityParty.java | 40 +
.../jna/datastruct/DiscordActivitySecrets.java | 41 +
.../jna/datastruct/DiscordActivityTimestamps.java | 40 +
.../jna/datastruct/DiscordCreateParams.java | 72 +
.../gamesdk/jna/datastruct/DiscordEntitlement.java | 42 +
.../gamesdk/jna/datastruct/DiscordFileStat.java | 42 +
.../jna/datastruct/DiscordImageDimensions.java | 40 +
.../gamesdk/jna/datastruct/DiscordImageHandle.java | 43 +
.../gamesdk/jna/datastruct/DiscordInputMode.java | 41 +
.../gamesdk/jna/datastruct/DiscordLobby.java | 47 +
.../gamesdk/jna/datastruct/DiscordOAuth2Token.java | 42 +
.../gamesdk/jna/datastruct/DiscordPartySize.java | 40 +
.../gamesdk/jna/datastruct/DiscordPresence.java | 40 +
.../jna/datastruct/DiscordRelationship.java | 41 +
.../discord/gamesdk/jna/datastruct/DiscordSku.java | 44 +
.../gamesdk/jna/datastruct/DiscordSkuPrice.java | 41 +
.../gamesdk/jna/datastruct/DiscordStruct.java | 35 +
.../gamesdk/jna/datastruct/DiscordUser.java | 43 +
.../jna/datastruct/DiscordUserAchievement.java | 44 +
.../enumuration/EDiscordActivityActionType.java | 67 +
.../EDiscordActivityJoinRequestReply.java | 68 +
.../jna/enumuration/EDiscordActivityType.java | 69 +
.../jna/enumuration/EDiscordCreateFlags.java | 67 +
.../jna/enumuration/EDiscordEntitlementType.java | 72 +
.../gamesdk/jna/enumuration/EDiscordImageType.java | 66 +
.../jna/enumuration/EDiscordInputModeType.java | 67 +
.../jna/enumuration/EDiscordLobbySearchCast.java | 67 +
.../enumuration/EDiscordLobbySearchComparison.java | 71 +
.../enumuration/EDiscordLobbySearchDistance.java | 69 +
.../gamesdk/jna/enumuration/EDiscordLobbyType.java | 67 +
.../gamesdk/jna/enumuration/EDiscordLogLevel.java | 69 +
.../jna/enumuration/EDiscordPremiumType.java | 68 +
.../jna/enumuration/EDiscordRelationshipType.java | 71 +
.../gamesdk/jna/enumuration/EDiscordResult.java | 109 ++
.../gamesdk/jna/enumuration/EDiscordSkuType.java | 69 +
.../gamesdk/jna/enumuration/EDiscordStatus.java | 69 +
.../gamesdk/jna/enumuration/EDiscordUserFlag.java | 70 +
.../jna/interfacestruct/GameSDKCallback.java | 30 +
.../interfacestruct/IDiscordAchievementEvents.java | 39 +
.../IDiscordAchievementManager.java | 57 +
.../interfacestruct/IDiscordActivityEvents.java | 50 +
.../interfacestruct/IDiscordActivityManager.java | 63 +
.../IDiscordApplicationManager.java | 60 +
.../gamesdk/jna/interfacestruct/IDiscordCore.java | 91 ++
.../jna/interfacestruct/IDiscordImageManager.java | 52 +
.../jna/interfacestruct/IDiscordLobbyEvents.java | 64 +
.../jna/interfacestruct/IDiscordLobbyManager.java | 148 +++
.../IDiscordLobbyMemberTransaction.java | 42 +
.../interfacestruct/IDiscordLobbySearchQuery.java | 52 +
.../interfacestruct/IDiscordLobbyTransaction.java | 57 +
.../jna/interfacestruct/IDiscordNetworkEvents.java | 45 +
.../interfacestruct/IDiscordNetworkManager.java | 65 +
.../jna/interfacestruct/IDiscordOverlayEvents.java | 38 +
.../interfacestruct/IDiscordOverlayManager.java | 56 +
.../IDiscordRelationshipEvents.java | 42 +
.../IDiscordRelationshipManager.java | 53 +
.../interfacestruct/IDiscordStorageManager.java | 81 ++
.../jna/interfacestruct/IDiscordStoreEvents.java | 43 +
.../jna/interfacestruct/IDiscordStoreManager.java | 73 ++
.../jna/interfacestruct/IDiscordUserEvents.java | 38 +
.../jna/interfacestruct/IDiscordUserManager.java | 53 +
.../jna/interfacestruct/IDiscordVoiceEvents.java | 39 +
.../jna/interfacestruct/IDiscordVoiceManager.java | 72 +
.../gamesdk/jna/typedef/DiscordClientID.java | 28 +
.../jna/typedef/DiscordNetworkChannelId.java | 28 +
.../gamesdk/jna/typedef/DiscordNetworkPeerId.java | 28 +
.../gamesdk/jna/typedef/DiscordSnowflake.java | 28 +
.../gamesdk/jna/typedef/DiscordTimestamp.java | 28 +
.../gamesdk/jna/typedef/DiscordVersion.java | 28 +
.../mod/discord/gamesdk/jna/typedef/Int32.java | 31 +
.../mod/discord/gamesdk/jna/typedef/Int64.java | 31 +
.../mod/discord/gamesdk/jna/typedef/UInt32.java | 31 +
.../mod/discord/gamesdk/jna/typedef/UInt64.java | 31 +
.../mod/discord/gamesdk/jna/typedef/UInt8.java | 31 +
.../mod/discord/rpc/JDiscordActivity.java | 72 +
.../mod/discord/rpc/JDiscordRelation.java | 42 +
.../mod/discord/rpc/JDiscordUser.java | 40 +
.../mod/discord/rpc/RichPresenceManager.java | 251 ++++
.../mod/dungeon/DungeonActionContext.java | 35 +
.../dungeonsguide/mod/dungeon/DungeonContext.java | 218 ++++
.../dungeonsguide/mod/dungeon/DungeonFacade.java | 35 +
.../dungeonsguide/mod/dungeon/MapProcessor.java | 535 ++++++++
.../mod/dungeon/actions/AbstractAction.java | 61 +
.../dungeon/actions/ActionBreakWithSuperBoom.java | 103 ++
.../mod/dungeon/actions/ActionChangeState.java | 75 ++
.../mod/dungeon/actions/ActionClick.java | 82 ++
.../mod/dungeon/actions/ActionClickSet.java | 90 ++
.../mod/dungeon/actions/ActionComplete.java | 41 +
.../mod/dungeon/actions/ActionDropItem.java | 82 ++
.../mod/dungeon/actions/ActionInteract.java | 89 ++
.../mod/dungeon/actions/ActionKill.java | 90 ++
.../mod/dungeon/actions/ActionMove.java | 122 ++
.../mod/dungeon/actions/ActionMoveNearestAir.java | 92 ++
.../mod/dungeon/actions/ActionRoot.java | 47 +
.../mod/dungeon/actions/tree/ActionRoute.java | 136 ++
.../actions/tree/ActionRouteProperties.java | 16 +
.../mod/dungeon/actions/tree/ActionTree.java | 94 ++
.../mod/dungeon/actions/tree/ActionTreeUtil.java | 83 ++
.../mod/dungeon/doorfinder/DungeonDoor.java | 87 ++
.../doorfinder/DungeonSpecificDataProvider.java | 39 +
.../DungeonSpecificDataProviderRegistry.java | 42 +
.../mod/dungeon/doorfinder/EDungeonDoorType.java | 38 +
.../catacombs/CatacombsDataProvider.java | 75 ++
.../catacombs/impl/MasterModeDataProvider.java | 64 +
.../catacombs/impl/NormalModeDataProvider.java | 101 ++
.../mod/dungeon/events/DungeonEvent.java | 41 +
.../mod/dungeon/events/DungeonEventData.java | 25 +
.../mod/dungeon/events/DungeonEventHolder.java | 32 +
.../mod/dungeon/events/SerializableBlockPos.java | 38 +
.../events/impl/DungeonCryptBrokenEvent.java | 35 +
.../mod/dungeon/events/impl/DungeonDeathEvent.java | 36 +
.../dungeon/events/impl/DungeonMapUpdateEvent.java | 34 +
.../dungeon/events/impl/DungeonNodataEvent.java | 29 +
.../events/impl/DungeonPuzzleFailureEvent.java | 34 +
.../events/impl/DungeonRoomDiscoverEvent.java | 46 +
.../events/impl/DungeonSecretCountChangeEvent.java | 37 +
.../events/impl/DungeonStateChangeEvent.java | 40 +
.../mod/dungeon/map/DungeonMapData.java | 121 ++
.../mod/dungeon/pathfinding/AStarCornerCut.java | 189 +++
.../mod/dungeon/pathfinding/AStarFineGrid.java | 182 +++
.../mod/dungeon/pathfinding/CachedWorld.java | 85 ++
.../mod/dungeon/pathfinding/JPSPathfinder.java | 306 +++++
.../pathfinding/NodeProcessorDungeonRoom.java | 144 ++
.../mod/dungeon/pathfinding/ThetaStar.java | 209 +++
.../mod/dungeon/roomedit/EditingContext.java | 83 ++
.../mod/dungeon/roomedit/Parameter.java | 39 +
.../mod/dungeon/roomedit/gui/GuiDungeonAddSet.java | 136 ++
.../roomedit/gui/GuiDungeonParameterEdit.java | 173 +++
.../dungeon/roomedit/gui/GuiDungeonRoomEdit.java | 68 +
.../dungeon/roomedit/gui/GuiDungeonValueEdit.java | 127 ++
.../mechanicedit/ValueEditBreakableWall.java | 143 ++
.../roomedit/mechanicedit/ValueEditDoor.java | 157 +++
.../roomedit/mechanicedit/ValueEditDummy.java | 121 ++
.../roomedit/mechanicedit/ValueEditFairySoul.java | 118 ++
.../roomedit/mechanicedit/ValueEditJournal.java | 122 ++
.../roomedit/mechanicedit/ValueEditLever.java | 133 ++
.../roomedit/mechanicedit/ValueEditNPC.java | 121 ++
.../roomedit/mechanicedit/ValueEditOnewayDoor.java | 143 ++
.../mechanicedit/ValueEditOnewayLever.java | 137 ++
.../mechanicedit/ValueEditPressurePlate.java | 136 ++
.../roomedit/mechanicedit/ValueEditSecret.java | 129 ++
.../roomedit/mechanicedit/ValueEditTomb.java | 118 ++
.../dungeon/roomedit/panes/ActionDisplayPane.java | 82 ++
.../roomedit/panes/ActionTreeDisplayPane.java | 216 +++
.../mod/dungeon/roomedit/panes/DynamicEditor.java | 29 +
.../dungeon/roomedit/panes/GeneralEditPane.java | 286 ++++
.../roomedit/panes/ProcessorParameterEditPane.java | 144 ++
.../roomedit/panes/RoomDataDisplayPane.java | 126 ++
.../roomedit/panes/RoomMatchDisplayPane.java | 152 +++
.../dungeon/roomedit/panes/RoommatchingPane.java | 84 ++
.../mod/dungeon/roomedit/panes/SecretEditPane.java | 156 +++
.../mod/dungeon/roomedit/valueedit/ValueEdit.java | 27 +
.../roomedit/valueedit/ValueEditAColor.java | 339 +++++
.../roomedit/valueedit/ValueEditBoolean.java | 101 ++
.../dungeon/roomedit/valueedit/ValueEditColor.java | 287 ++++
.../roomedit/valueedit/ValueEditCreator.java | 29 +
.../dungeon/roomedit/valueedit/ValueEditFloat.java | 99 ++
.../roomedit/valueedit/ValueEditInteger.java | 99 ++
.../dungeon/roomedit/valueedit/ValueEditNull.java | 38 +
.../roomedit/valueedit/ValueEditOffsetPoint.java | 163 +++
.../valueedit/ValueEditOffsetPointSet.java | 250 ++++
.../roomedit/valueedit/ValueEditRegistry.java | 70 +
.../roomedit/valueedit/ValueEditString.java | 99 ++
.../mod/dungeon/roomfinder/DungeonRoom.java | 381 ++++++
.../roomfinder/DungeonRoomInfoRegistry.java | 163 +++
.../mod/dungeon/roomfinder/RoomMatcher.java | 145 +++
.../roomprocessor/GeneralRoomProcessor.java | 448 +++++++
.../dungeon/roomprocessor/ProcessorFactory.java | 65 +
.../mod/dungeon/roomprocessor/RoomProcessor.java | 49 +
.../roomprocessor/RoomProcessorBlazeSolver.java | 201 +++
.../roomprocessor/RoomProcessorButtonSolver.java | 132 ++
.../roomprocessor/RoomProcessorCreeperSolver.java | 148 +++
.../roomprocessor/RoomProcessorGenerator.java | 25 +
.../roomprocessor/RoomProcessorIcePath.java | 234 ++++
.../roomprocessor/RoomProcessorRedRoom.java | 121 ++
.../dungeon/roomprocessor/RoomProcessorRiddle.java | 121 ++
.../RoomProcessorTeleportMazeSolver.java | 145 +++
.../RoomProcessorTicTacToeSolver.java | 214 +++
.../dungeon/roomprocessor/RoomProcessorTrivia.java | 165 +++
.../bombdefuse/RoomProcessorBombDefuseSolver.java | 441 +++++++
.../bombdefuse/chambers/BDChamber.java | 83 ++
.../chambers/BombDefuseChamberGenerator.java | 30 +
.../bombdefuse/chambers/ChamberProcessor.java | 27 +
.../chambers/DummyDefuseChamberProcessor.java | 32 +
.../chambers/GeneralDefuseChamberProcessor.java | 137 ++
.../chambers/arrow/ArrowLeftProcessor.java | 138 ++
.../chambers/arrow/ArrowProcessorMatcher.java | 52 +
.../chambers/arrow/ArrowRightProcessor.java | 126 ++
.../chambers/bugged/ImpossibleMatcher.java | 47 +
.../chambers/color/ColorLeftProcessor.java | 230 ++++
.../chambers/color/ColorProcessorMatcher.java | 49 +
.../chambers/color/ColorRightProcessor.java | 175 +++
.../chambers/creeper/CreeperLeftProcessor.java | 95 ++
.../chambers/creeper/CreeperProcessorMatcher.java | 52 +
.../chambers/creeper/CreeperRightProcessor.java | 73 ++
.../goldenpath/GoldenPathLeftProcessor.java | 141 ++
.../goldenpath/GoldenPathProcessorMatcher.java | 47 +
.../goldenpath/GoldenPathRightProcessor.java | 97 ++
.../chambers/maze/MazeLeftProcessor.java | 80 ++
.../chambers/maze/MazeProcessorMatcher.java | 47 +
.../chambers/maze/MazeRightProcessor.java | 73 ++
.../chambers/number/NumberLeftProcessor.java | 125 ++
.../chambers/number/NumberProcessorMatcher.java | 53 +
.../chambers/number/NumberRightProcessor.java | 114 ++
.../bossfight/BossfightProcessor.java | 33 +
.../bossfight/BossfightProcessorBonzo.java | 85 ++
.../bossfight/BossfightProcessorLivid.java | 90 ++
.../bossfight/BossfightProcessorNecron.java | 77 ++
.../bossfight/BossfightProcessorProf.java | 144 ++
.../bossfight/BossfightProcessorSadan.java | 144 ++
.../bossfight/BossfightProcessorScarf.java | 134 ++
.../bossfight/BossfightProcessorThorn.java | 103 ++
.../bossfight/GeneralBossfightProcessor.java | 155 +++
.../roomprocessor/bossfight/HealthData.java | 33 +
.../boxpuzzle/BoxPuzzleSolvingThread.java | 182 +++
.../boxpuzzle/RoomProcessorBoxSolver.java | 392 ++++++
.../icefill/RoomProcessorIcePath2.java | 151 +++
.../roomprocessor/waterpuzzle/LeverState.java | 33 +
.../waterpuzzle/LeverStateContradict.java | 25 +
.../waterpuzzle/RoomProcessorWaterPuzzle.java | 124 ++
.../dungeon/roomprocessor/waterpuzzle/Route.java | 60 +
.../roomprocessor/waterpuzzle/SwitchData.java | 46 +
.../roomprocessor/waterpuzzle/WaterBoard.java | 424 ++++++
.../roomprocessor/waterpuzzle/WaterNode.java | 36 +
.../waterpuzzle/nodes/WaterNodeAir.java | 59 +
.../waterpuzzle/nodes/WaterNodeEnd.java | 60 +
.../waterpuzzle/nodes/WaterNodeStart.java | 66 +
.../waterpuzzle/nodes/WaterNodeToggleable.java | 71 +
.../waterpuzzle/nodes/WaterNodeWall.java | 62 +
.../mod/events/impl/AuthChangedEvent.java | 6 +
.../mod/events/impl/BlockUpdateEvent.java | 37 +
.../mod/events/impl/BossroomEnterEvent.java | 24 +
.../events/impl/DiscordUserJoinRequestEvent.java | 33 +
.../mod/events/impl/DiscordUserUpdateEvent.java | 32 +
.../impl/DungeonContextInitializationEvent.java | 24 +
.../mod/events/impl/DungeonEndedEvent.java | 24 +
.../mod/events/impl/DungeonLeftEvent.java | 24 +
.../mod/events/impl/DungeonStartedEvent.java | 24 +
.../mod/events/impl/HypixelJoinedEvent.java | 24 +
.../mod/events/impl/KeyBindPressedEvent.java | 31 +
.../mod/events/impl/PlayerInteractEntityEvent.java | 39 +
.../mod/events/impl/PlayerListItemPacketEvent.java | 32 +
.../mod/events/impl/SkyblockJoinedEvent.java | 24 +
.../mod/events/impl/SkyblockLeftEvent.java | 24 +
.../mod/events/impl/StompConnectedEvent.java | 32 +
.../dungeonsguide/mod/events/impl/TitleEvent.java | 32 +
.../mod/events/impl/WindowUpdateEvent.java | 34 +
.../mod/events/listener/DungeonListener.java | 513 ++++++++
.../mod/events/listener/FeatureListener.java | 512 ++++++++
.../mod/events/listener/PacketListener.java | 191 +++
.../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 +
.../kr/syeyoung/dungeonsguide/mod/gui/MGui.java | 247 ++++
.../kr/syeyoung/dungeonsguide/mod/gui/MPanel.java | 296 +++++
.../dungeonsguide/mod/gui/elements/MButton.java | 117 ++
.../mod/gui/elements/MCollapsable.java | 137 ++
.../dungeonsguide/mod/gui/elements/MColor.java | 48 +
.../mod/gui/elements/MEditableAColor.java | 106 ++
.../mod/gui/elements/MFloatSelectionButton.java | 97 ++
.../mod/gui/elements/MIntegerSelectionButton.java | 95 ++
.../mod/gui/elements/MKeyEditButton.java | 147 +++
.../dungeonsguide/mod/gui/elements/MLabel.java | 72 +
.../mod/gui/elements/MLabelAndElement.java | 75 ++
.../dungeonsguide/mod/gui/elements/MList.java | 93 ++
.../dungeonsguide/mod/gui/elements/MModal.java | 92 ++
.../mod/gui/elements/MModalConfirmation.java | 87 ++
.../mod/gui/elements/MModalMessage.java | 77 ++
.../mod/gui/elements/MNavigatingPane.java | 213 +++
.../mod/gui/elements/MPanelScaledGUI.java | 213 +++
.../dungeonsguide/mod/gui/elements/MParameter.java | 90 ++
.../mod/gui/elements/MPassiveLabelAndElement.java | 71 +
.../dungeonsguide/mod/gui/elements/MPopupMenu.java | 97 ++
.../mod/gui/elements/MPortableColorEdit.java | 292 +++++
.../dungeonsguide/mod/gui/elements/MRootPanel.java | 60 +
.../dungeonsguide/mod/gui/elements/MScrollBar.java | 209 +++
.../mod/gui/elements/MScrollablePanel.java | 185 +++
.../dungeonsguide/mod/gui/elements/MSpacer.java | 36 +
.../mod/gui/elements/MStringSelectionButton.java | 94 ++
.../mod/gui/elements/MTabbedPane.java | 160 +++
.../dungeonsguide/mod/gui/elements/MTextField.java | 418 ++++++
.../mod/gui/elements/MToggleButton.java | 96 ++
.../dungeonsguide/mod/gui/elements/MTooltip.java | 107 ++
.../mod/gui/elements/MTooltipText.java | 44 +
.../dungeonsguide/mod/gui/elements/MValue.java | 79 ++
.../dungeonsguide/mod/party/PartyContext.java | 102 ++
.../dungeonsguide/mod/party/PartyManager.java | 626 +++++++++
.../dungeonsguide/mod/resources/DGTexturePack.java | 71 +
.../mod/stomp/FailedWebSocketConnection.java | 7 +
.../dungeonsguide/mod/stomp/StompClient.java | 192 +++
.../dungeonsguide/mod/stomp/StompDiedEvent.java | 15 +
.../dungeonsguide/mod/stomp/StompHeader.java | 24 +
.../dungeonsguide/mod/stomp/StompManager.java | 73 ++
.../dungeonsguide/mod/stomp/StompPayload.java | 96 ++
.../dungeonsguide/mod/stomp/StompSubscription.java | 6 +
.../syeyoung/dungeonsguide/mod/utils/AhUtils.java | 98 ++
.../dungeonsguide/mod/utils/ArrayUtils.java | 40 +
.../dungeonsguide/mod/utils/BlockCache.java | 50 +
.../dungeonsguide/mod/utils/GlStateUtils.java | 68 +
.../syeyoung/dungeonsguide/mod/utils/MapUtils.java | 176 +++
.../dungeonsguide/mod/utils/RenderUtils.java | 1372 +++++++++++++++++++
.../dungeonsguide/mod/utils/ScoreBoardUtils.java | 58 +
.../dungeonsguide/mod/utils/ShortUtils.java | 47 +
.../dungeonsguide/mod/utils/SkyblockUtils.java | 52 +
.../dungeonsguide/mod/utils/TabListUtil.java | 75 ++
.../dungeonsguide/mod/utils/TextUtils.java | 121 ++
.../dungeonsguide/mod/utils/TimeScoreUtil.java | 82 ++
.../dungeonsguide/mod/utils/TitleRender.java | 139 ++
.../dungeonsguide/mod/utils/VectorUtils.java | 51 +
.../syeyoung/dungeonsguide/mod/utils/XPUtils.java | 222 ++++
.../mod/utils/cursor/CursorReader.java | 95 ++
.../dungeonsguide/mod/utils/cursor/EnumCursor.java | 54 +
.../dungeonsguide/mod/utils/cursor/Foundation.java | 33 +
.../dungeonsguide/mod/utils/cursor/GLCursors.java | 231 ++++
.../dungeonsguide/mod/utils/cursor/User32.java | 67 +
.../dungeonsguide/mod/utils/cursor/X11.java | 37 +
.../mod/wsresource/StaticResource.java | 30 +
.../mod/wsresource/StaticResourceCache.java | 77 ++
.../dungeonsguide/pathfinding/AStarCornerCut.java | 189 ---
.../dungeonsguide/pathfinding/AStarFineGrid.java | 182 ---
.../dungeonsguide/pathfinding/CachedWorld.java | 97 --
.../dungeonsguide/pathfinding/JPSPathfinder.java | 311 -----
.../pathfinding/NodeProcessorDungeonRoom.java | 142 --
.../dungeonsguide/pathfinding/ThetaStar.java | 211 ---
.../dungeonsguide/resources/DGTexturePack.java | 72 -
.../dungeonsguide/roomedit/EditingContext.java | 87 --
.../syeyoung/dungeonsguide/roomedit/Parameter.java | 40 -
.../roomedit/gui/GuiDungeonAddSet.java | 143 --
.../roomedit/gui/GuiDungeonParameterEdit.java | 179 ---
.../roomedit/gui/GuiDungeonRoomEdit.java | 75 --
.../roomedit/gui/GuiDungeonValueEdit.java | 133 --
.../mechanicedit/ValueEditBreakableWall.java | 143 --
.../roomedit/mechanicedit/ValueEditDoor.java | 157 ---
.../roomedit/mechanicedit/ValueEditDummy.java | 122 --
.../roomedit/mechanicedit/ValueEditFairySoul.java | 119 --
.../roomedit/mechanicedit/ValueEditJournal.java | 123 --
.../roomedit/mechanicedit/ValueEditLever.java | 133 --
.../roomedit/mechanicedit/ValueEditNPC.java | 123 --
.../roomedit/mechanicedit/ValueEditOnewayDoor.java | 143 --
.../mechanicedit/ValueEditOnewayLever.java | 137 --
.../mechanicedit/ValueEditPressurePlate.java | 136 --
.../roomedit/mechanicedit/ValueEditSecret.java | 129 --
.../roomedit/mechanicedit/ValueEditTomb.java | 118 --
.../roomedit/panes/ActionDisplayPane.java | 82 --
.../roomedit/panes/ActionTreeDisplayPane.java | 217 ---
.../roomedit/panes/DynamicEditor.java | 29 -
.../roomedit/panes/GeneralEditPane.java | 285 ----
.../roomedit/panes/ProcessorParameterEditPane.java | 144 --
.../roomedit/panes/RoomDataDisplayPane.java | 127 --
.../roomedit/panes/RoomMatchDisplayPane.java | 152 ---
.../roomedit/panes/RoommatchingPane.java | 84 --
.../roomedit/panes/SecretEditPane.java | 156 ---
.../roomedit/valueedit/ValueEdit.java | 27 -
.../roomedit/valueedit/ValueEditAColor.java | 339 -----
.../roomedit/valueedit/ValueEditBoolean.java | 101 --
.../roomedit/valueedit/ValueEditColor.java | 287 ----
.../roomedit/valueedit/ValueEditCreator.java | 29 -
.../roomedit/valueedit/ValueEditFloat.java | 99 --
.../roomedit/valueedit/ValueEditInteger.java | 99 --
.../roomedit/valueedit/ValueEditNull.java | 38 -
.../roomedit/valueedit/ValueEditOffsetPoint.java | 163 ---
.../valueedit/ValueEditOffsetPointSet.java | 250 ----
.../roomedit/valueedit/ValueEditRegistry.java | 70 -
.../roomedit/valueedit/ValueEditString.java | 99 --
.../roomprocessor/GeneralRoomProcessor.java | 448 -------
.../roomprocessor/ProcessorFactory.java | 65 -
.../dungeonsguide/roomprocessor/RoomProcessor.java | 49 -
.../roomprocessor/RoomProcessorBlazeSolver.java | 216 ---
.../roomprocessor/RoomProcessorButtonSolver.java | 133 --
.../roomprocessor/RoomProcessorCreeperSolver.java | 153 ---
.../roomprocessor/RoomProcessorGenerator.java | 25 -
.../roomprocessor/RoomProcessorIcePath.java | 236 ----
.../roomprocessor/RoomProcessorRedRoom.java | 125 --
.../roomprocessor/RoomProcessorRiddle.java | 123 --
.../RoomProcessorTeleportMazeSolver.java | 145 ---
.../RoomProcessorTicTacToeSolver.java | 216 ---
.../roomprocessor/RoomProcessorTrivia.java | 167 ---
.../bombdefuse/RoomProcessorBombDefuseSolver.java | 441 -------
.../bombdefuse/chambers/BDChamber.java | 83 --
.../chambers/BombDefuseChamberGenerator.java | 30 -
.../bombdefuse/chambers/ChamberProcessor.java | 27 -
.../chambers/DummyDefuseChamberProcessor.java | 33 -
.../chambers/GeneralDefuseChamberProcessor.java | 139 --
.../chambers/arrow/ArrowLeftProcessor.java | 138 --
.../chambers/arrow/ArrowProcessorMatcher.java | 52 -
.../chambers/arrow/ArrowRightProcessor.java | 127 --
.../chambers/bugged/ImpossibleMatcher.java | 47 -
.../chambers/color/ColorLeftProcessor.java | 233 ----
.../chambers/color/ColorProcessorMatcher.java | 49 -
.../chambers/color/ColorRightProcessor.java | 177 ---
.../chambers/creeper/CreeperLeftProcessor.java | 102 --
.../chambers/creeper/CreeperProcessorMatcher.java | 52 -
.../chambers/creeper/CreeperRightProcessor.java | 76 --
.../goldenpath/GoldenPathLeftProcessor.java | 143 --
.../goldenpath/GoldenPathProcessorMatcher.java | 49 -
.../goldenpath/GoldenPathRightProcessor.java | 100 --
.../chambers/maze/MazeLeftProcessor.java | 89 --
.../chambers/maze/MazeProcessorMatcher.java | 49 -
.../chambers/maze/MazeRightProcessor.java | 79 --
.../chambers/number/NumberLeftProcessor.java | 132 --
.../chambers/number/NumberProcessorMatcher.java | 53 -
.../chambers/number/NumberRightProcessor.java | 117 --
.../bossfight/BossfightProcessor.java | 33 -
.../bossfight/BossfightProcessorBonzo.java | 86 --
.../bossfight/BossfightProcessorLivid.java | 90 --
.../bossfight/BossfightProcessorNecron.java | 80 --
.../bossfight/BossfightProcessorProf.java | 144 --
.../bossfight/BossfightProcessorSadan.java | 144 --
.../bossfight/BossfightProcessorScarf.java | 134 --
.../bossfight/BossfightProcessorThorn.java | 104 --
.../bossfight/GeneralBossfightProcessor.java | 155 ---
.../roomprocessor/bossfight/HealthData.java | 33 -
.../boxpuzzle/BoxPuzzleSolvingThread.java | 184 ---
.../boxpuzzle/RoomProcessorBoxSolver.java | 392 ------
.../icefill/RoomProcessorIcePath2.java | 160 ---
.../roomprocessor/waterpuzzle/LeverState.java | 33 -
.../waterpuzzle/LeverStateContradict.java | 25 -
.../waterpuzzle/RoomProcessorWaterPuzzle.java | 124 --
.../roomprocessor/waterpuzzle/Route.java | 60 -
.../roomprocessor/waterpuzzle/SwitchData.java | 46 -
.../roomprocessor/waterpuzzle/WaterBoard.java | 423 ------
.../roomprocessor/waterpuzzle/WaterNode.java | 36 -
.../waterpuzzle/nodes/WaterNodeAir.java | 59 -
.../waterpuzzle/nodes/WaterNodeEnd.java | 60 -
.../waterpuzzle/nodes/WaterNodeStart.java | 66 -
.../waterpuzzle/nodes/WaterNodeToggleable.java | 71 -
.../waterpuzzle/nodes/WaterNodeWall.java | 62 -
.../dungeonsguide/rpc/JDiscordActivity.java | 72 -
.../dungeonsguide/rpc/JDiscordRelation.java | 42 -
.../syeyoung/dungeonsguide/rpc/JDiscordUser.java | 40 -
.../dungeonsguide/rpc/RichPresenceManager.java | 251 ----
.../dungeonsguide/stomp/CloseListener.java | 23 -
.../syeyoung/dungeonsguide/stomp/StompClient.java | 194 ---
.../dungeonsguide/stomp/StompClientStatus.java | 23 -
.../syeyoung/dungeonsguide/stomp/StompHeader.java | 27 -
.../dungeonsguide/stomp/StompInterface.java | 26 -
.../dungeonsguide/stomp/StompMessageHandler.java | 23 -
.../syeyoung/dungeonsguide/stomp/StompPayload.java | 86 --
.../dungeonsguide/stomp/StompSubscription.java | 41 -
.../syeyoung/dungeonsguide/url/DGConnection.java | 18 +-
.../dungeonsguide/url/DGStreamHandler.java | 4 +-
.../dungeonsguide/url/DGStreamHandlerFactory.java | 4 +-
.../kr/syeyoung/dungeonsguide/utils/AhUtils.java | 87 --
.../syeyoung/dungeonsguide/utils/ArrayUtils.java | 40 -
.../syeyoung/dungeonsguide/utils/GlStateUtils.java | 69 -
.../kr/syeyoung/dungeonsguide/utils/MapUtils.java | 177 ---
.../syeyoung/dungeonsguide/utils/RenderUtils.java | 1377 --------------------
.../syeyoung/dungeonsguide/utils/ShortUtils.java | 47 -
.../dungeonsguide/utils/SkyblockUtils.java | 54 -
.../kr/syeyoung/dungeonsguide/utils/TextUtils.java | 122 --
.../dungeonsguide/utils/TimeScoreUtil.java | 87 --
.../syeyoung/dungeonsguide/utils/VectorUtils.java | 53 -
.../kr/syeyoung/dungeonsguide/utils/XPUtils.java | 222 ----
.../dungeonsguide/utils/cursor/CursorReader.java | 99 --
.../dungeonsguide/utils/cursor/EnumCursor.java | 54 -
.../dungeonsguide/utils/cursor/Foundation.java | 34 -
.../dungeonsguide/utils/cursor/GLCursors.java | 224 ----
.../dungeonsguide/utils/cursor/User32.java | 68 -
.../syeyoung/dungeonsguide/utils/cursor/X11.java | 37 -
.../dungeonsguide/wsresource/StaticResource.java | 30 -
.../wsresource/StaticResourceCache.java | 83 --
.../resources/assets/dg/textures/dglogox128.png | Bin 0 -> 3024 bytes
.../resources/assets/dg/textures/dglogox32.png | Bin 0 -> 648 bytes
.../assets/skyblock_dungeons_guide/sounds.json | 10 +
.../skyblock_dungeons_guide/sounds/readysetgo.ogg | Bin 0 -> 161265 bytes
src/main/resources/mcmod.info | 6 +-
1120 files changed, 55834 insertions(+), 54249 deletions(-)
create mode 100644 .github/workflows/beta.yml
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/Authenticator.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/DGInterface.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/IDungeonGuide.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/Keybinds.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/SkyblockStatus.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/YoMamaOutdated.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/AuthManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/AuthUtil.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/InvalidDungeonsGuideCredentialsException.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/ResourceManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/AuthProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuth.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuthUtil.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/NullAuth.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessResult.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/chat/ChatSubscriber.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/chat/PartyContext.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/chat/PartyManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/commands/CommandReparty.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/Config.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/ConfigPanelCreator.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiConfigV2.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategory.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategoryElement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeatureEdit.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MNotFound.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MPanelCategory.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MParameterEdit.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/NestedCategory.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/RootConfigPanel.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/Marker.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/PanelDelegate.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/AColor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/GUIRectangle.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCAColor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCBoolean.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCColor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCFloat.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCGUIRectangle.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCInteger.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCKeybind.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCRectangle.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCString.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCStringList.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyle.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyleList.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverter.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/ActiveCosmetic.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticData.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticsManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomNetworkPlayerInfo.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomPacketPlayerListItem.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/IChatReplacer.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerChatByMe.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerCoop.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerMessage.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerPV.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerSocialOptions.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerViewProfile.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonActionManager.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionBreakWithSuperBoom.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClick.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClickSet.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionComplete.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionDropItem.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionInteract.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionKill.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMove.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMoveNearestAir.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionRoot.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionRoute.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTree.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTreeUtil.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombDataProvider.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombMasterDataProvider.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonDoor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProvider.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProviderRegistry.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/EDungeonDoorType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonCryptBrokenEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonDeathEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventData.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventHolder.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonMapUpdateEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonNodataEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonPuzzleFailureEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonRoomDiscoverEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonSecretCountChangeEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonStateChangeEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/SerializableBlockPos.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/DungeonMechanic.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/RouteBlocker.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/dunegonmechanic/DungeonMechanic.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/dunegonmechanic/RouteBlocker.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoom.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/DungeonRoomInfoRegistry.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/dungeon/roomfinder/RoomMatcher.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/eventlistener/DungeonListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/eventlistener/PacketListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/BlockUpdateEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/BossroomEnterEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/DiscordUserJoinRequestEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/DiscordUserUpdateEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/DungeonContextInitializationEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/DungeonEndedEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/DungeonLeftEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/DungeonStartedEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/HypixelJoinedEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/KeyBindPressedEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/PlayerInteractEntityEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/PlayerListItemPacketEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/SkyblockJoinedEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/SkyblockLeftEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/StompConnectedEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/TitleEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/events/WindowUpdateEvent.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/AbstractFeature.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/FeatureParameter.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/GuiFeature.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/SimpleFeature.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/advanced/FeatureDebug.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/advanced/FeatureDebuggableMap.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/advanced/FeatureRoomCoordDisplay.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/advanced/FeatureRoomDebugInfo.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureAutoReparty.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureBossHealth.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureBoxRealLivid.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureChestPrice.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureCurrentPhase.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureHideAnimals.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureTerracotaTimer.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureThornBearPercentage.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureThornSpiritBowTimer.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/FeatureWarningOnPortal.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/CorrectThePaneSolutionProvider.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/FeatureSimonSaysSolver.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/FeatureTerminalSolvers.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/NavigateMazeSolutionProvider.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/SelectAllColorSolutionProivider.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/SelectInOrderSolutionProvider.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/TerminalSolution.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/TerminalSolutionProvider.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/boss/terminal/WhatStartsWithSolutionProvider.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknameColor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/FeatureNicknamePrefix.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/cosmetics/PrefixSelectorGUI.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/discord/inviteViewer/ImageTexture.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/discord/inviteViewer/PartyInviteViewer.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/discord/inviteViewer/PartyJoinRequest.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/discord/invteTooltip/MTooltipInvite.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/discord/invteTooltip/MTooltipInviteElement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/discord/onlinealarm/PlayingDGAlarm.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureBoxBats.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureBoxSkelemaster.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureBoxStarMobs.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureCollectScore.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonCurrentRoomSecrets.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonDeaths.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonMap.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonMilestone.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonRealTime.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonRoomName.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonSBTime.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonScore.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonSecrets.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureDungeonTombs.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureHideNameTags.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeaturePlayerESP.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeaturePressAnyKeyToCloseChest.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureWarnLowHealth.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/dungeon/FeatureWatcherWarning.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureAutoAcceptReparty.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureCooldownCounter.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureCopyMessages.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureDecreaseExplosionSound.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureDisableMessage.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeaturePenguins.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureRepartyCommand.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureTooltipDungeonStat.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureTooltipPrice.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeatureUpdateAlarm.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/ability/FeatureAbilityCooldown.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/ability/SkyblockAbility.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/ability/UsedAbility.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/APIKey.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/FeatureGoodParties.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/FeaturePartyList.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/FeaturePartyReady.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/FeatureCustomPartyFinder.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/GuiCustomPartyFinder.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinder.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyFinderSettings.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/customgui/PanelPartyListElement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/FakePlayer.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/FeatureViewPlayerStatsOnJoin.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/ApiFetcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/CachedData.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/PlayerSkyblockData.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/SkinFetcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/PlayerProfile.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/PlayerProfileParser.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/ClassSpecificData.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonClass.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonSpecificData.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonStat.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/DungeonType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/FloorSpecificData.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/Pet.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/api/playerprofile/dataclasses/Skill.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/DataRendererEditor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/DataRendererRegistry.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/IDataRenderer.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRenderDungeonFloorStat.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRenderDungeonHighestFloorStat.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererClassLv.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererDungeonLv.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererFairySouls.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererLilyWeight.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererSecrets.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererSelectedClassLv.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererSetUrOwn.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererSkillLv.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/party/playerpreview/datarenders/impl/DataRendererTalismans.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureActions.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureBloodRush.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureCreateRefreshLine.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureFreezePathfind.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeaturePathfindStrategy.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeaturePathfindToAll.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureSoulRoomWarning.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/FeatureTogglePathfind.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/PathfindLineProperties.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/FeatureMechanicBrowse.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/MGuiMechanicBrowser.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/MechanicBrowserElement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/MechanicBrowserTooltip.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/secret/mechanicbrowser/PanelMechanicBrowser.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverBlaze.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverBombdefuse.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverBox.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverIcefill.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverKahoot.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverRiddle.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverSilverfish.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverTeleport.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/impl/solvers/FeatureSolverTictactoe.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/BossroomEnterListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/ChatListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/ChatListenerGlobal.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/DiscordUserJoinRequestListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/DiscordUserUpdateListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/DungeonContextInitializationListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/DungeonEndListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/DungeonQuitListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/DungeonStartListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/EntityLivingRenderListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/GuiBackgroundRenderListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/GuiClickListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/GuiOpenListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/GuiPostRenderListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/GuiPreRenderListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/GuiUpdateListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/InteractListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/KeyInputListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/KeybindPressedListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/PlayerRenderListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/ScreenRenderListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/SkyblockJoinListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/SkyblockLeaveListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/SoundListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/StompConnectedListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/TextureStichListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/TickListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/TitleListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/TooltipListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/listener/WorldRenderListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/text/PanelTextParameterConfig.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/text/StyledText.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/text/StyledTextProvider.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/text/StyledTextRenderer.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/text/TextHUDFeature.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/features/text/TextStyle.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/GameSDK.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/GameSDKTypeMapper.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/NativeGameSDK.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivity.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityAssets.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityParty.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivitySecrets.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityTimestamps.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordCreateParams.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordEntitlement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordFileStat.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordImageDimensions.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordImageHandle.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordInputMode.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordLobby.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordOAuth2Token.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordPartySize.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordPresence.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordRelationship.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordSku.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordSkuPrice.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordStruct.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordUser.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordUserAchievement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordActivityActionType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordActivityJoinRequestReply.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordActivityType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordCreateFlags.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordEntitlementType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordImageType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordInputModeType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordLobbySearchCast.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordLobbySearchComparison.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordLobbySearchDistance.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordLobbyType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordLogLevel.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordPremiumType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordRelationshipType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordResult.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordSkuType.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordStatus.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/enumuration/EDiscordUserFlag.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/GameSDKCallback.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordAchievementEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordAchievementManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordActivityEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordActivityManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordApplicationManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordCore.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordImageManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordLobbyEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordLobbyManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordLobbyMemberTransaction.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordLobbySearchQuery.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordLobbyTransaction.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordNetworkEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordNetworkManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordOverlayEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordOverlayManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordRelationshipEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordRelationshipManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordStorageManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordStoreEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordStoreManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordUserEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordUserManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordVoiceEvents.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/interfacestruct/IDiscordVoiceManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/DiscordClientID.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/DiscordNetworkChannelId.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/DiscordNetworkPeerId.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/DiscordSnowflake.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/DiscordTimestamp.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/DiscordVersion.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/Int32.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/Int64.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/UInt32.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/UInt64.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/typedef/UInt8.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/MGui.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/MPanel.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MButton.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MCollapsable.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MColor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MEditableAColor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MFloatSelectionButton.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MIntegerSelectionButton.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MKeyEditButton.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MLabel.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MLabelAndElement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModal.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalConfirmation.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MModalMessage.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MNavigatingPane.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPanelScaledGUI.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MParameter.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPassiveLabelAndElement.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPopupMenu.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MPortableColorEdit.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MRootPanel.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollBar.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MScrollablePanel.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MSpacer.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MStringSelectionButton.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTabbedPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTextField.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MToggleButton.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTooltip.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MTooltipText.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MValue.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/Keybinds.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessResult.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatSubscriber.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDungeonsGuide.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandReparty.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/Config.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/ConfigPanelCreator.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/GuiConfigV2.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/MCategory.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/MCategoryElement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/MFeature.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/MFeatureEdit.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/MNotFound.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/MPanelCategory.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/MParameterEdit.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/NestedCategory.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/RootConfigPanel.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/location/GuiGuiLocationConfig.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/location/Marker.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/guiconfig/location/PanelDelegate.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/AColor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/GUIRectangle.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCAColor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCBoolean.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCColor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCFloat.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCGUIRectangle.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCInteger.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCKeybind.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCRectangle.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCString.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCStringList.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCTextStyle.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TCTextStyleList.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TypeConverter.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/config/types/TypeConverterRegistry.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/ActiveCosmetic.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CosmeticData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CosmeticsManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CustomNetworkPlayerInfo.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CustomPacketPlayerListItem.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/IChatReplacer.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/chatreplacers/ChatReplacerChatByMe.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/chatreplacers/ChatReplacerCoop.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/chatreplacers/ChatReplacerMessage.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/chatreplacers/ChatReplacerPV.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/chatreplacers/ChatReplacerSocialOptions.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/chatreplacers/ChatReplacerViewProfile.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/GameSDK.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/GameSDKTypeMapper.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/NativeGameSDK.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordActivity.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordActivityAssets.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordActivityParty.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordActivitySecrets.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordActivityTimestamps.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordCreateParams.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordEntitlement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordFileStat.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordImageDimensions.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordImageHandle.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordInputMode.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordLobby.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordOAuth2Token.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordPartySize.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordPresence.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordRelationship.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordSku.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordSkuPrice.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordStruct.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordUser.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/datastruct/DiscordUserAchievement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordActivityActionType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordActivityJoinRequestReply.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordActivityType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordCreateFlags.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordEntitlementType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordImageType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordInputModeType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordLobbySearchCast.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordLobbySearchComparison.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordLobbySearchDistance.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordLobbyType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordLogLevel.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordPremiumType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordRelationshipType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordResult.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordSkuType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordStatus.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/enumuration/EDiscordUserFlag.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/GameSDKCallback.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordAchievementEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordAchievementManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordActivityEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordActivityManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordApplicationManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordCore.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordImageManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordLobbyEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordLobbyManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordLobbyMemberTransaction.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordLobbySearchQuery.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordLobbyTransaction.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordNetworkEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordNetworkManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordOverlayEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordOverlayManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordRelationshipEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordRelationshipManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordStorageManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordStoreEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordStoreManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordUserEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordUserManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordVoiceEvents.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/interfacestruct/IDiscordVoiceManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/DiscordClientID.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/DiscordNetworkChannelId.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/DiscordNetworkPeerId.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/DiscordSnowflake.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/DiscordTimestamp.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/DiscordVersion.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/Int32.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/Int64.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/UInt32.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/UInt64.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/gamesdk/jna/typedef/UInt8.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/rpc/JDiscordActivity.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/rpc/JDiscordRelation.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/rpc/JDiscordUser.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/discord/rpc/RichPresenceManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonActionContext.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonContext.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonFacade.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/MapProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/AbstractAction.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionBreakWithSuperBoom.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionChangeState.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionClick.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionClickSet.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionComplete.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionDropItem.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionInteract.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionKill.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionMove.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionMoveNearestAir.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/ActionRoot.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/tree/ActionRoute.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/tree/ActionRouteProperties.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/tree/ActionTree.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/actions/tree/ActionTreeUtil.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/doorfinder/DungeonDoor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/doorfinder/DungeonSpecificDataProvider.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/doorfinder/DungeonSpecificDataProviderRegistry.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/doorfinder/EDungeonDoorType.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/doorfinder/catacombs/CatacombsDataProvider.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/doorfinder/catacombs/impl/MasterModeDataProvider.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/doorfinder/catacombs/impl/NormalModeDataProvider.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/DungeonEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/DungeonEventData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/DungeonEventHolder.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/SerializableBlockPos.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonCryptBrokenEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonDeathEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonMapUpdateEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonNodataEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonPuzzleFailureEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonRoomDiscoverEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonSecretCountChangeEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/events/impl/DungeonStateChangeEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/map/DungeonMapData.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/pathfinding/AStarCornerCut.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/pathfinding/AStarFineGrid.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/pathfinding/CachedWorld.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/pathfinding/JPSPathfinder.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/pathfinding/NodeProcessorDungeonRoom.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/pathfinding/ThetaStar.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/EditingContext.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/Parameter.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/gui/GuiDungeonAddSet.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/gui/GuiDungeonParameterEdit.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/gui/GuiDungeonRoomEdit.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/gui/GuiDungeonValueEdit.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditBreakableWall.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditDoor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditDummy.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditFairySoul.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditJournal.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditLever.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditNPC.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditOnewayDoor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditOnewayLever.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditPressurePlate.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditSecret.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/mechanicedit/ValueEditTomb.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/ActionDisplayPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/ActionTreeDisplayPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/DynamicEditor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/GeneralEditPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/ProcessorParameterEditPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/RoomDataDisplayPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/RoomMatchDisplayPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/RoommatchingPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/panes/SecretEditPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEdit.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditAColor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditBoolean.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditColor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditCreator.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditFloat.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditInteger.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditNull.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditOffsetPoint.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditOffsetPointSet.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditRegistry.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomedit/valueedit/ValueEditString.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoom.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoomInfoRegistry.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/RoomMatcher.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/GeneralRoomProcessor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/ProcessorFactory.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorBlazeSolver.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorButtonSolver.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorCreeperSolver.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorGenerator.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorIcePath.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorRedRoom.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorRiddle.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorTeleportMazeSolver.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorTicTacToeSolver.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorTrivia.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/RoomProcessorBombDefuseSolver.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/BDChamber.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/BombDefuseChamberGenerator.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/ChamberProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/DummyDefuseChamberProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/GeneralDefuseChamberProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/arrow/ArrowLeftProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/arrow/ArrowProcessorMatcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/arrow/ArrowRightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/bugged/ImpossibleMatcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/color/ColorLeftProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/color/ColorProcessorMatcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/color/ColorRightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/creeper/CreeperLeftProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/creeper/CreeperProcessorMatcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/creeper/CreeperRightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/goldenpath/GoldenPathLeftProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/goldenpath/GoldenPathProcessorMatcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/goldenpath/GoldenPathRightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/maze/MazeLeftProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/maze/MazeProcessorMatcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/maze/MazeRightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/number/NumberLeftProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/number/NumberProcessorMatcher.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/chambers/number/NumberRightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorBonzo.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorLivid.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorNecron.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorProf.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorSadan.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorScarf.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorThorn.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/GeneralBossfightProcessor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/HealthData.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/boxpuzzle/BoxPuzzleSolvingThread.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/boxpuzzle/RoomProcessorBoxSolver.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/icefill/RoomProcessorIcePath2.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/LeverState.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/LeverStateContradict.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/Route.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/SwitchData.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/WaterBoard.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/WaterNode.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/nodes/WaterNodeAir.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/nodes/WaterNodeEnd.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/nodes/WaterNodeStart.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/nodes/WaterNodeToggleable.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/nodes/WaterNodeWall.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/AuthChangedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/BlockUpdateEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/BossroomEnterEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/DiscordUserJoinRequestEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/DiscordUserUpdateEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/DungeonContextInitializationEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/DungeonEndedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/DungeonLeftEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/DungeonStartedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/HypixelJoinedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/KeyBindPressedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/PlayerInteractEntityEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/PlayerListItemPacketEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/SkyblockJoinedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/SkyblockLeftEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/StompConnectedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/TitleEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/WindowUpdateEvent.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/FeatureListener.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java
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
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/MGui.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/MPanel.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MButton.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MCollapsable.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MColor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MEditableAColor.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MFloatSelectionButton.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MIntegerSelectionButton.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MKeyEditButton.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MLabel.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MLabelAndElement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MList.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MModal.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MModalConfirmation.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MModalMessage.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MNavigatingPane.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MPanelScaledGUI.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MParameter.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MPassiveLabelAndElement.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MPopupMenu.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MPortableColorEdit.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MRootPanel.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MScrollBar.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MScrollablePanel.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MSpacer.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MStringSelectionButton.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MTabbedPane.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MTextField.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MToggleButton.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MTooltip.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MTooltipText.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/gui/elements/MValue.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/party/PartyContext.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/party/PartyManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/resources/DGTexturePack.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/FailedWebSocketConnection.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompClient.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompDiedEvent.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompHeader.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompManager.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompPayload.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompSubscription.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/AhUtils.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/ArrayUtils.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/BlockCache.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/GlStateUtils.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/MapUtils.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/RenderUtils.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/ScoreBoardUtils.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/ShortUtils.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/SkyblockUtils.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TabListUtil.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TextUtils.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TimeScoreUtil.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TitleRender.java
create mode 100755 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/VectorUtils.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/XPUtils.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/cursor/CursorReader.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/cursor/EnumCursor.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/cursor/Foundation.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/cursor/GLCursors.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/cursor/User32.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/utils/cursor/X11.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/wsresource/StaticResource.java
create mode 100644 src/main/java/kr/syeyoung/dungeonsguide/mod/wsresource/StaticResourceCache.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/pathfinding/AStarCornerCut.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/pathfinding/AStarFineGrid.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/pathfinding/CachedWorld.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/pathfinding/JPSPathfinder.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/pathfinding/NodeProcessorDungeonRoom.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/pathfinding/ThetaStar.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/resources/DGTexturePack.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/EditingContext.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/Parameter.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/gui/GuiDungeonAddSet.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/gui/GuiDungeonParameterEdit.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/gui/GuiDungeonRoomEdit.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/gui/GuiDungeonValueEdit.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditBreakableWall.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditDoor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditDummy.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditFairySoul.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditJournal.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditLever.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditNPC.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditOnewayDoor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditOnewayLever.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditPressurePlate.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditSecret.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/mechanicedit/ValueEditTomb.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/ActionDisplayPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/ActionTreeDisplayPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/DynamicEditor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/GeneralEditPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/ProcessorParameterEditPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/RoomDataDisplayPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/RoomMatchDisplayPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/RoommatchingPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/panes/SecretEditPane.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEdit.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditAColor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditBoolean.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditColor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditCreator.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditFloat.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditInteger.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditNull.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditOffsetPoint.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditOffsetPointSet.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditRegistry.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomedit/valueedit/ValueEditString.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/GeneralRoomProcessor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/ProcessorFactory.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessor.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorBlazeSolver.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorButtonSolver.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorCreeperSolver.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorGenerator.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorIcePath.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRedRoom.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRiddle.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorTeleportMazeSolver.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorTicTacToeSolver.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorTrivia.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/RoomProcessorBombDefuseSolver.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/BDChamber.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/BombDefuseChamberGenerator.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/ChamberProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/DummyDefuseChamberProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/GeneralDefuseChamberProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/arrow/ArrowLeftProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/arrow/ArrowProcessorMatcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/arrow/ArrowRightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/bugged/ImpossibleMatcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/color/ColorLeftProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/color/ColorProcessorMatcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/color/ColorRightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/creeper/CreeperLeftProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/creeper/CreeperProcessorMatcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/creeper/CreeperRightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/goldenpath/GoldenPathLeftProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/goldenpath/GoldenPathProcessorMatcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/goldenpath/GoldenPathRightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/maze/MazeLeftProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/maze/MazeProcessorMatcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/maze/MazeRightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/number/NumberLeftProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/number/NumberProcessorMatcher.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bombdefuse/chambers/number/NumberRightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessorBonzo.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessorLivid.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessorNecron.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessorProf.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessorSadan.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessorScarf.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/BossfightProcessorThorn.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/GeneralBossfightProcessor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/bossfight/HealthData.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/boxpuzzle/BoxPuzzleSolvingThread.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/boxpuzzle/RoomProcessorBoxSolver.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/icefill/RoomProcessorIcePath2.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/LeverState.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/LeverStateContradict.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/Route.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/SwitchData.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterBoard.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/WaterNode.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeAir.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeEnd.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeStart.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeToggleable.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/waterpuzzle/nodes/WaterNodeWall.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/rpc/JDiscordActivity.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/rpc/JDiscordRelation.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/rpc/JDiscordUser.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/rpc/RichPresenceManager.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/CloseListener.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/StompClient.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/StompClientStatus.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/StompHeader.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/StompInterface.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/StompMessageHandler.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/stomp/StompSubscription.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/AhUtils.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/utils/ArrayUtils.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/GlStateUtils.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/utils/MapUtils.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/utils/RenderUtils.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/utils/ShortUtils.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/utils/SkyblockUtils.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/utils/TextUtils.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/TimeScoreUtil.java
delete mode 100755 src/main/java/kr/syeyoung/dungeonsguide/utils/VectorUtils.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/XPUtils.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/cursor/CursorReader.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/cursor/EnumCursor.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/cursor/Foundation.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/cursor/GLCursors.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/cursor/User32.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/utils/cursor/X11.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/wsresource/StaticResource.java
delete mode 100644 src/main/java/kr/syeyoung/dungeonsguide/wsresource/StaticResourceCache.java
create mode 100644 src/main/resources/assets/dg/textures/dglogox128.png
create mode 100644 src/main/resources/assets/dg/textures/dglogox32.png
create mode 100644 src/main/resources/assets/skyblock_dungeons_guide/sounds.json
create mode 100644 src/main/resources/assets/skyblock_dungeons_guide/sounds/readysetgo.ogg
(limited to 'build.gradle')
diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml
new file mode 100644
index 00000000..5cbbe58f
--- /dev/null
+++ b/.github/workflows/beta.yml
@@ -0,0 +1,33 @@
+name: Beta Build
+
+on:
+ push:
+ branches:
+ - 'breaking-changes-just-working-im-not-putting-all-of-these-into-3.0-but-for-the-sake-of-beta-release-this-thing-exists'
+ workflow_dispatch:
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK 16
+ uses: actions/setup-java@v3
+ with:
+ java-version: '16'
+ distribution: 'adopt'
+ cache: 'gradle'
+ - name: Grant execute permission for gradlew
+ run: chmod +x gradlew
+ - name: Download hychat as a dependency
+ run: mkdir jars && wget https://cdn.discordapp.com/attachments/782825804983566356/791708191519932426/Hychat-1.12.1-BETA.jar -O jars/Hychat-1.12.1-BETA.jar
+ - name: Build with Gradle
+ run: ./gradlew build
+ - uses: actions/upload-artifact@v2
+ if: github.event_name == 'workflow_dispatch'
+ with:
+ name: Compiled-files
+ path: build/libs/*.jar
+ - name: Upload to beta webhook
+ env:
+ BETA_WEBHOOK: ${{ secrets.BETA_WEBHOOK }}
+ run: path=$(find ./build/ -type d -name "libs" -exec find "{}" -type f -name "dungeonsguide-*-all.jar" \;) curl -F "file1=@$path" "$BETA_WEBHOOK"
\ No newline at end of file
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 62f386c2..db0dc81b 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -3,10 +3,10 @@ name: Build
on:
push:
branches:
- - '*'
+ - 'master'
pull_request:
branches:
- - '*'
+ - 'master'
workflow_dispatch:
jobs:
build:
@@ -20,6 +20,7 @@ jobs:
with:
java-version: '16'
distribution: 'adopt'
+ cache: 'gradle'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Download hychat as a dependency
@@ -30,4 +31,4 @@ jobs:
if: github.event_name == 'workflow_dispatch'
with:
name: Compiled-files
- path: build/libs/*.jar
+ path: build/libs/*.jar
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 24bc189f..7252969e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -31,7 +31,7 @@ tasks.wrapper {
// the full version (with sources and documentation) of Gradle (ALL)
distributionType = Wrapper.DistributionType.ALL
}
-version = "3.0.0"
+version = "3.8.0"
group = "kr.syeyoung.dungeonsguide"
archivesBaseName = "dungeonsguide"
@@ -78,17 +78,18 @@ dependencies {
forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9")
- implementation "org.jetbrains:annotations-java5:19.0.0"
- implementation "org.java-websocket:Java-WebSocket:1.5.1"
- implementation "org.json:json:20171018"
- implementation "com.twelvemonkeys.imageio:imageio-bmp:3.7.0"
+ implementation 'org.jetbrains:annotations-java5:23.0.0'
+ implementation 'org.java-websocket:Java-WebSocket:1.5.3'
+ implementation "org.json:json:20220924"
+ implementation 'com.twelvemonkeys.imageio:imageio-bmp:3.8.3'
+
+ compileOnly 'org.projectlombok:lombok:1.18.24'
+ annotationProcessor 'org.projectlombok:lombok:1.18.24'
- compileOnly "org.projectlombok:lombok:1.18.20"
compileOnly files("jars/Hychat-1.12.1-BETA.jar")
- annotationProcessor "org.projectlombok:lombok:1.18.16"
- testCompileOnly "org.projectlombok:lombok:1.18.20"
- testAnnotationProcessor "org.projectlombok:lombok:1.18.20"
+ testCompileOnly "org.projectlombok:lombok:1.18.24"
+ testAnnotationProcessor "org.projectlombok:lombok:1.18.24"
modRuntimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.0")
}
@@ -116,9 +117,9 @@ tasks.shadowJar {
relocate "org.java_websocket", "kr.syeyoung.org.java_websocket"
dependencies {
- include(dependency("org.java-websocket:Java-WebSocket:1.5.1"))
+ include(dependency("org.java-websocket:Java-WebSocket:1.5.3"))
include(dependency("org.slf4j:slf4j-api:1.7.25"))
- include(dependency("org.json:json:20171018"))
+ include(dependency("org.json:json:20220924"))
include(dependency("com.twelvemonkeys..*:.*"))
}
}
@@ -131,3 +132,16 @@ tasks.named("remapJar") {
tasks.assemble.dependsOn tasks.remapJar
+
+processResources {
+ inputs.property 'version', project.version
+
+ // replace stuff in mcmod.info, nothing else
+ from(sourceSets.main.resources.srcDirs) {
+ duplicatesStrategy = 'include'
+ include 'mcmod.info'
+
+ // replace version and mcversion
+ expand 'version': project.version
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/Authenticator.java b/src/main/java/kr/syeyoung/dungeonsguide/Authenticator.java
deleted file mode 100755
index 5b15fde6..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/Authenticator.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * 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;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.mojang.authlib.GameProfile;
-import com.mojang.authlib.exceptions.AuthenticationException;
-import com.mojang.authlib.minecraft.MinecraftSessionService;
-import net.minecraft.client.Minecraft;
-import net.minecraft.util.Session;
-import net.minecraftforge.fml.common.ProgressManager;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.io.IOUtils;
-
-import javax.crypto.*;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-import javax.net.ssl.*;
-import java.io.*;
-import java.math.BigInteger;
-import java.net.*;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.HashMap;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-public class Authenticator {
- private KeyPair rsaKey;
- private String token;
- private final ProgressManager.ProgressBar progressBar;
-
- public String getToken() {
- return token;
- }
-
- private KeyPair getKeyPair() {
- KeyPairGenerator a = null;
- try {
- a = KeyPairGenerator.getInstance("RSA");
- } catch (NoSuchAlgorithmException b) { }
- a.initialize(1024);
- this.rsaKey = a.generateKeyPair();
- return this.rsaKey;
- }
-
- private PublicKey dgPublicKey;
- private PublicKey getDGPublicKey() throws NoSuchAlgorithmException, InvalidKeySpecException {
- if (dgPublicKey != null) return dgPublicKey;
- X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.decodeBase64("MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxO89qtwG67jNucQ9Y44c" +
- "IUs/B+5BeJPs7G+RG2gfs4/2+tzF/c1FLDc33M7yKw8aKk99vsBUY9Oo8gxxiEPB" +
- "JitP/qfon2THp94oM77ZTpHlmFoqbZMcKGZVI8yfvEL4laTM8Hw+qh5poQwtpEbK" +
- "Xo47AkxygxJasUnykER2+aSTZ6kWU2D4xiNtFA6lzqN+/oA+NaYfPS0amAvyVlHR" +
- "n/8IuGkxb5RrlqVssQstFnxsJuv88qdGSEqlcKq2tLeg9hb8eCnl2OFzvXmgbVER" +
- "0JaV+4Z02fVG1IlR3Xo1mSit7yIU6++3usRCjx2yfXpnGGJUW5pe6YETjNew3ax+" +
- "FAZ4GePWCdmS7FvBnbbABKo5pE06ZTfDUTCjQlAJQiUgoF6ntMJvQAXPu48Vr8q/" +
- "mTcuZWVnI6CDgyE7nNq3WNoq3397sBzxRohMxuqzl3T19zkfPKF05iV2Ju1HQMW5" +
- "I119bYrmVD240aGESZc20Sx/9g1BFpNzQbM5PGUlWJ0dhLjl2ge4ip2hHciY3OEY" +
- "p2Qy2k+xEdenpKdL+WMRimCQoO9gWe2Tp4NmP5dppDXZgPjXqjZpnGs0Uxs+fXqW" +
- "cwlg3MbX3rFl9so/fhVf4p9oXZK3ve7z5D6XSSDRYECvsKIa08WAxJ/U6n204E/4" +
- "xUF+3ZgFPdzZGn2PU7SsnOsCAwEAAQ=="));
- return dgPublicKey = KeyFactory.getInstance("RSA").generatePublic(spec);
- }
-
- public Authenticator(ProgressManager.ProgressBar progressBar) {
- this.progressBar = progressBar;
- progressBar.step("Generating KeyPair");
- getKeyPair();
- }
-
- public String authenticateAndDownload(String version) throws IOException, AuthenticationException, NoSuchAlgorithmException, CertificateException, KeyStoreException, KeyManagementException, InvalidKeySpecException, SignatureException {
- Session session = Minecraft.getMinecraft().getSession();
- String sessionToken = session.getToken();
-
- progressBar.step("Authenticating (1/2)");
- String tempToken = requestAuth(session.getProfile());
- MinecraftSessionService yggdrasilMinecraftSessionService = Minecraft.getMinecraft().getSessionService();
- JsonObject d = getJwtPayload(tempToken);
- String hash = calculateServerHash(Base64.decodeBase64(d.get("sharedSecret").getAsString()),
- Base64.decodeBase64(d.get("publicKey").getAsString()));
- yggdrasilMinecraftSessionService.joinServer(session.getProfile(), sessionToken, hash);
- progressBar.step("Authenticating (2/2)");
- this.token = verifyAuth(tempToken, this.rsaKey.getPublic());
- try {
- progressBar.step("Downloading Jar");
- if (version != null)
- downloadSafe(this.token, "https://dungeons.guide/resource/version?v=" + version, true);
- progressBar.step("Downloading Rooms");
- downloadSafe(this.token, "https://dungeons.guide/resource/roomdata", false);
- } catch (Throwable t) {
- t.printStackTrace();
- }
- return this.token;
- }
-
- public JsonObject getJwtPayload(String jwt) {
- String midPart = jwt.split("\\.")[1].replace("+", "-").replace("/", "_");
- String base64Decode = new String(Base64.decodeBase64(midPart)); // padding
- return (JsonObject) new JsonParser().parse(base64Decode);
- }
-
-
-
- private String requestAuth(GameProfile profile) throws IOException, NoSuchAlgorithmException, CertificateException, KeyStoreException, KeyManagementException {
- HttpsURLConnection connection = (HttpsURLConnection) new URL("https://dungeons.guide/auth/requestAuth").openConnection();
- connection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
- connection.setRequestProperty("Content-Type", "application/json");
- connection.setRequestMethod("POST");
- connection.setDoInput(true);
- connection.setDoOutput(true);
-
- connection.getOutputStream().write(("{\"uuid\":\""+profile.getId().toString()+"\",\"nickname\":\""+profile.getName()+"\"}").getBytes());
- String payload = String.join("\n", IOUtils.readLines(connection.getErrorStream() == null ? connection.getInputStream() : connection.getErrorStream()));
- if (connection.getResponseCode() >= 400)
- System.out.println("https://dungeons.guide/auth/requestAuth :: Received "+connection.getResponseCode()+" along with\n"+payload);
-
- JsonObject json = (JsonObject) new JsonParser().parse(payload);
-
- if (!"ok".equals(json.get("status").getAsString())) {
- return null;
- }
- return json.get("data").getAsString();
- }
- private String verifyAuth(String tempToken, PublicKey clientKey) throws IOException {
- HttpsURLConnection urlConnection = (HttpsURLConnection) new URL("https://dungeons.guide/auth/authenticate").openConnection();
- urlConnection.setRequestMethod("POST");
- urlConnection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
- urlConnection.setRequestProperty("Content-Type", "application/json");
- urlConnection.setDoInput(true);
- urlConnection.setDoOutput(true);
-
- urlConnection.getOutputStream().write(("{\"jwt\":\""+tempToken+"\",\"publicKey\":\""+Base64.encodeBase64URLSafeString(clientKey.getEncoded())+"\"}").getBytes());
- String payload = String.join("\n", IOUtils.readLines(urlConnection.getErrorStream() == null ? urlConnection.getInputStream() : urlConnection.getErrorStream()));
- if (urlConnection.getResponseCode() >= 400)
- System.out.println("https://dungeons.guide/auth/authenticate :: Received "+urlConnection.getResponseCode()+" along with\n"+payload);
-
- JsonObject jsonObject = (JsonObject) new JsonParser().parse(payload);
- if (!"ok".equals(jsonObject.get("status").getAsString())) {
- return null;
- }
- return jsonObject.get("data").getAsString();
- }
-
- private final HashMap loadedResources = new HashMap();
-
- public HashMap getResources() {
- return loadedResources;
- }
-
- private void downloadSafe(String dgToken, String url, boolean isValidateSignature) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, CertificateException, KeyStoreException, KeyManagementException, SignatureException, InvalidKeySpecException {
- HttpsURLConnection dgConnection = (HttpsURLConnection) new URL(url).openConnection();
- dgConnection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
- dgConnection.setRequestProperty("Content-Type", "application/json");
- dgConnection.setRequestMethod("GET");
- dgConnection.setRequestProperty("Authorization", dgToken);
- dgConnection.setDoInput(true);
- dgConnection.setDoOutput(true);
-
- InputStream inputStream = dgConnection.getInputStream();
- byte[] lengthBytes = new byte[4];
- inputStream.read(lengthBytes);
- int length = ((lengthBytes[0] & 0xFF) << 24) |
- ((lengthBytes[1] & 0xFF) << 16) |
- ((lengthBytes[2] & 0xFF) << 8) |
- ((lengthBytes[3] & 0xFF));
- while (inputStream.available() < length) ;
- byte[] keyPayload = new byte[length];
- inputStream.read(keyPayload);
-
- Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
- cipher.init(Cipher.DECRYPT_MODE, this.rsaKey.getPrivate());
- byte[] h = cipher.doFinal(keyPayload);
-
- cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
- SecretKeySpec keySpec = new SecretKeySpec(h, "AES");
- IvParameterSpec ivSpec = new IvParameterSpec(h);
- cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
- CipherInputStream cipherInputStream = new CipherInputStream(inputStream, cipher);
-
- cipherInputStream.read(lengthBytes);
- length = ((lengthBytes[0] & 0xFF) << 24) |
- ((lengthBytes[1] & 0xFF) << 16) |
- ((lengthBytes[2] & 0xFF) << 8) |
- ((lengthBytes[3] & 0xFF));
-
- int totalLen = length;
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- byte[] buff = new byte[256];
- while (totalLen > 0) {
- int len = cipherInputStream.read(buff, 0, Math.min(buff.length, totalLen));
- totalLen -= len;
- bos.write(buff, 0, len);
- }
- byte[] body = bos.toByteArray();
-
- byte[] signed = null;
- if (isValidateSignature) {
- progressBar.step("Validating Signature");
- cipherInputStream.read(lengthBytes,0 , 4);
- length = ((lengthBytes[0] & 0xFF) << 24) |
- ((lengthBytes[1] & 0xFF) << 16) |
- ((lengthBytes[2] & 0xFF) << 8) |
- ((lengthBytes[3] & 0xFF));
-
- totalLen = length;
- bos = new ByteArrayOutputStream();
- while (totalLen > 0) {
- int len = cipherInputStream.read(buff, 0, Math.min(buff.length, totalLen));
- totalLen -= len;
- bos.write(buff, 0, len);
- }
- signed = bos.toByteArray();
-
- Signature sign = Signature.getInstance("SHA512withRSA");
- sign.initVerify(getDGPublicKey());
- sign.update(body);
- boolean truth = sign.verify(signed);
- if (!truth) throw new SignatureException("DG SIGNATURE FORGED");
- }
-
- ZipInputStream zipInputStream = new ZipInputStream(new ByteArrayInputStream(body));
- ZipEntry zipEntry;
- while ((zipEntry=zipInputStream.getNextEntry()) != null) {
- byte[] buffer = new byte[256];
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- int p = 0;
- while((p = zipInputStream.read(buffer)) > 0) {
- byteArrayOutputStream.write(buffer, 0, p);
- }
- this.loadedResources.put(zipEntry.getName(), byteArrayOutputStream.toByteArray());
- }
- dgConnection.disconnect();
- }
-
- public JsonElement getJsonSecured(String u) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, CertificateException, KeyStoreException, KeyManagementException {
- HttpsURLConnection httpsURLConnection = (HttpsURLConnection) new URL(u).openConnection();
- httpsURLConnection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
- httpsURLConnection.setRequestProperty("Content-Type", "application/json");
- httpsURLConnection.setRequestMethod("GET");
- httpsURLConnection.setRequestProperty("Authorization", this.token);
- httpsURLConnection.setDoInput(true);
- httpsURLConnection.setDoOutput(true);
-
- InputStream inputStream = httpsURLConnection.getInputStream();
- byte[] lengthPayload = new byte[4];
- inputStream.read(lengthPayload);
- int length = ((lengthPayload[0] & 0xFF) << 24) |
- ((lengthPayload[1] & 0xFF) << 16) |
- ((lengthPayload[2] & 0xFF) << 8) |
- ((lengthPayload[3] & 0xFF));
- while (inputStream.available() < length) ;
- byte[] keyPayload = new byte[length];
- inputStream.read(keyPayload);
-
- Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
- cipher.init(Cipher.DECRYPT_MODE, this.rsaKey.getPrivate());
- byte[] AESKey = cipher.doFinal(keyPayload);
-
- cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
- SecretKeySpec secretKeySpec = new SecretKeySpec(AESKey, "AES");
- IvParameterSpec ivParameterSpec = new IvParameterSpec(AESKey);
- cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
- CipherInputStream cipherInputStream = new CipherInputStream(inputStream, cipher);
- cipherInputStream.read(lengthPayload);
- length = ((lengthPayload[0] & 0xFF) << 24) |
- ((lengthPayload[1] & 0xFF) << 16) |
- ((lengthPayload[2] & 0xFF) << 8) |
- ((lengthPayload[3] & 0xFF));
- JsonElement l = new JsonParser().parse(new InputStreamReader(cipherInputStream));
- httpsURLConnection.disconnect();
- return l;
- }
-
- public String calculateServerHash(byte[] a, byte[] b) throws NoSuchAlgorithmException {
- MessageDigest c = MessageDigest.getInstance("SHA-1");
- c.update("".getBytes());
- c.update(a);
- c.update(b);
- byte[] d = c.digest();
- return new BigInteger(d).toString(16);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/DGInterface.java b/src/main/java/kr/syeyoung/dungeonsguide/DGInterface.java
deleted file mode 100755
index 0529f0a6..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/DGInterface.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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;
-
-import net.minecraftforge.fml.common.event.FMLInitializationEvent;
-import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
-
-public interface DGInterface {
- void init(FMLInitializationEvent event);
-
- void pre(FMLPreInitializationEvent event);
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java b/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java
deleted file mode 100755
index f1c8b3a9..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * 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;
-
-import com.google.common.collect.Sets;
-import com.google.gson.JsonObject;
-import kr.syeyoung.dungeonsguide.chat.ChatProcessor;
-import kr.syeyoung.dungeonsguide.chat.PartyManager;
-import kr.syeyoung.dungeonsguide.commands.*;
-import kr.syeyoung.dungeonsguide.config.Config;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoomInfoRegistry;
-import kr.syeyoung.dungeonsguide.eventlistener.DungeonListener;
-import kr.syeyoung.dungeonsguide.eventlistener.FeatureListener;
-import kr.syeyoung.dungeonsguide.eventlistener.PacketListener;
-import kr.syeyoung.dungeonsguide.events.StompConnectedEvent;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.resources.DGTexturePack;
-import kr.syeyoung.dungeonsguide.rpc.RichPresenceManager;
-import kr.syeyoung.dungeonsguide.stomp.CloseListener;
-import kr.syeyoung.dungeonsguide.stomp.StompClient;
-import kr.syeyoung.dungeonsguide.stomp.StompInterface;
-import kr.syeyoung.dungeonsguide.utils.AhUtils;
-import kr.syeyoung.dungeonsguide.utils.TimeScoreUtil;
-import kr.syeyoung.dungeonsguide.utils.cursor.GLCursors;
-import kr.syeyoung.dungeonsguide.wsresource.StaticResourceCache;
-import lombok.Getter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.GuiButton;
-import net.minecraft.client.gui.GuiErrorScreen;
-import net.minecraft.client.gui.GuiScreen;
-import net.minecraft.client.resources.IReloadableResourceManager;
-import net.minecraft.client.resources.IResourceManager;
-import net.minecraft.client.resources.IResourceManagerReloadListener;
-import net.minecraft.client.resources.IResourcePack;
-import net.minecraft.launchwrapper.LaunchClassLoader;
-import net.minecraft.util.IChatComponent;
-import net.minecraftforge.client.ClientCommandHandler;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.fml.common.FMLCommonHandler;
-import net.minecraftforge.fml.common.ProgressManager;
-import net.minecraftforge.fml.common.event.FMLInitializationEvent;
-import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
-import net.minecraftforge.fml.relauncher.ReflectionHelper;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import java.io.*;
-import java.net.URI;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-public class DungeonsGuide implements DGInterface, CloseListener {
-
- private SkyblockStatus skyblockStatus;
-
- private static DungeonsGuide dungeonsGuide;
-
-
- @Getter
- private final Authenticator authenticator;
-
- @Getter
- private StompInterface stompConnection;
- @Getter
- private CosmeticsManager cosmeticsManager;
-
- public DungeonsGuide(Authenticator authenticator) {
- this.authenticator = authenticator;
- }
-
- public static void sendDebugChat(IChatComponent iChatComponent) {
- if (FeatureRegistry.DEBUG.isEnabled())
- Minecraft.getMinecraft().thePlayer.addChatMessage(iChatComponent);
- }
- @Getter
- CommandReparty commandReparty;
-
-
- private final String stompURL = "wss://dungeons.guide/ws";
-// private String stompURL = "ws://localhost/ws";
- public void init(FMLInitializationEvent event) {
- ProgressManager.ProgressBar progressbar = ProgressManager.push("DungeonsGuide", 4);
-
-
- try {
- Set invalid = ReflectionHelper.getPrivateValue(LaunchClassLoader.class, (LaunchClassLoader) Main.class.getClassLoader(), "invalidClasses");
- ((LaunchClassLoader) Main.class.getClassLoader()).clearNegativeEntries(Sets.newHashSet("org.slf4j.LoggerFactory"));
- invalid.clear();
- } catch (Throwable t) {
- t.printStackTrace();
- }
-
- progressbar.step("Registering Events & Commands");
- dungeonsGuide = this;
- skyblockStatus = new SkyblockStatus();
-
- CommandDungeonsGuide commandDungeonsGuide;
- MinecraftForge.EVENT_BUS.register(new DungeonListener());
- ClientCommandHandler.instance.registerCommand(commandDungeonsGuide = new CommandDungeonsGuide());
- MinecraftForge.EVENT_BUS.register(commandDungeonsGuide);
-
- commandReparty = new CommandReparty();
- MinecraftForge.EVENT_BUS.register(commandReparty);
-
- MinecraftForge.EVENT_BUS.register(new FeatureListener());
- MinecraftForge.EVENT_BUS.register(new PacketListener());
- MinecraftForge.EVENT_BUS.register(new Keybinds());
-
-// MinecraftForge.EVENT_BUS.register(PartyManager.INSTANCE);
- MinecraftForge.EVENT_BUS.register(ChatProcessor.INSTANCE);
- MinecraftForge.EVENT_BUS.register(PartyManager.INSTANCE);
- MinecraftForge.EVENT_BUS.register(StaticResourceCache.INSTANCE);
-
- AhUtils.registerTimer();
-
- progressbar.step("Loading Roomdatas");
- try {
- DungeonRoomInfoRegistry.loadAll(configDir);
- } catch (BadPaddingException | InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException | IOException | NoSuchAlgorithmException | InvalidAlgorithmParameterException e) {
- e.printStackTrace();
- }
- progressbar.step("Opening connection");
-
- cosmeticsManager = new CosmeticsManager();
- MinecraftForge.EVENT_BUS.register(cosmeticsManager);
-
- try {
- connectStomp();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
-
- progressbar.step("Loading Config");
- try {
- Config.loadConfig( null );
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- if (FeatureRegistry.ETC_REPARTY.isEnabled())
- ClientCommandHandler.instance.registerCommand(commandReparty);
- if (FeatureRegistry.DISCORD_DONOTUSE.isEnabled())
- System.setProperty("dg.safe", "true");
- MinecraftForge.EVENT_BUS.register(RichPresenceManager.INSTANCE);
- TimeScoreUtil.init();
-
- ProgressManager.pop(progressbar);
-
- ((IReloadableResourceManager)Minecraft.getMinecraft().getResourceManager()).registerReloadListener(resourceManager -> GLCursors.setupCursors());
- }
- @Getter
- private boolean firstTimeUsingDG = false;
- public void pre(FMLPreInitializationEvent event) {
- t.start();
- configDir = new File(event.getModConfigurationDirectory(),"dungeonsguide");
- File configFile = new File(configDir, "config.json");
- if (!configFile.exists()) {
- configDir.mkdirs();
- firstTimeUsingDG = true;
- }
- Config.f = configFile;
- Minecraft.getMinecraft().getFramebuffer().enableStencil();
-
- try {
- List resourcePackList = ReflectionHelper.getPrivateValue(Minecraft.class, Minecraft.getMinecraft(),"defaultResourcePacks", "aA", "field_110449_ao");
- resourcePackList.add(new DGTexturePack(authenticator));
- Minecraft.getMinecraft().refreshResources();
- } catch (Throwable t){
- t.printStackTrace();
- }
- }
-
- @Getter
- private File configDir;
-
-
- public SkyblockStatus getSkyblockStatus() {
- return skyblockStatus;
- }
-
- public static DungeonsGuide getDungeonsGuide() {
- return dungeonsGuide;
- }
- ScheduledExecutorService ex = Executors.newScheduledThreadPool(2);
- @Override
- public void onClose(int code, String reason, boolean remote) {
- System.out.println("Stomp Connection closed, trying to reconnect - "+reason+ " - "+code);
- connectStomp();
- }
-
- public void connectStomp() {
- ex.schedule(() -> {
- try {
- stompConnection = new StompClient(new URI(stompURL), authenticator.getToken(), DungeonsGuide.this);
- MinecraftForge.EVENT_BUS.post(new StompConnectedEvent(stompConnection));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }, 5L, TimeUnit.SECONDS);
- }
-
- private Thread t = new Thread(new Runnable() {
- @Override
- public void run() {
- while (true) {
- JsonObject obj = DungeonsGuide.getDungeonsGuide().getAuthenticator().getJwtPayload(DungeonsGuide.getDungeonsGuide().getAuthenticator().getToken());
- if (!obj.get("uuid").getAsString().equals(Minecraft.getMinecraft().getSession().getPlayerID())) {
- if (Minecraft.getMinecraft().currentScreen instanceof GuiErrorScreen) return;
-
- final String[] a = new String[]{
- "User has changed current Minecraft session.",
- "Please restart mc to revalidate Dungeons Guide",
- "Hopefully this screen will be fixed in later release"
- };
- final GuiScreen b = new GuiErrorScreen(null, null) {
- @Override
- public void drawScreen(int par1, int par2, float par3) {
- super.drawScreen(par1, par2, par3);
- for (int i = 0; i < a.length; ++i) {
- drawCenteredString(fontRendererObj, a[i], width / 2, height / 3 + 12 * i, 0xFFFFFFFF);
- }
- }
-
- @Override
- public void initGui() {
- super.initGui();
- this.buttonList.clear();
- this.buttonList.add(new GuiButton(0, width / 2 - 50, height - 50, 100, 20, "close"));
- }
-
- @Override
- protected void actionPerformed(GuiButton button) {
- FMLCommonHandler.instance().exitJava(-1, true);
- }
- };
- Minecraft.getMinecraft().displayGuiScreen(b);
- return;
- }
- try {
- Thread.sleep(100L);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- });
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/GuiLoadingError.java b/src/main/java/kr/syeyoung/dungeonsguide/GuiLoadingError.java
index 4adb2624..68ce5262 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/GuiLoadingError.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/GuiLoadingError.java
@@ -18,23 +18,26 @@
package kr.syeyoung.dungeonsguide;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.*;
-import net.minecraft.client.renderer.GlStateManager;
-import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.common.FMLCommonHandler;
import org.lwjgl.opengl.GL11;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.PrintStream;
public class GuiLoadingError extends GuiScreen {
- private String stacktrace;
- private Throwable throwable;
- private GuiScreen originalGUI;
- public GuiLoadingError(Throwable t, String stacktrace, GuiScreen originalGUI) {
- this.throwable = t;
- this.stacktrace = stacktrace;
+ static Throwable cause;
+ private final String stacktrace;
+ private final GuiScreen originalGUI;
+ public GuiLoadingError(GuiScreen originalGUI) {
+
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ PrintStream printStream = new PrintStream(byteArrayOutputStream);
+ cause.printStackTrace(printStream);
+ this.stacktrace = byteArrayOutputStream.toString();
+
this.originalGUI = originalGUI;
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/IDungeonGuide.java b/src/main/java/kr/syeyoung/dungeonsguide/IDungeonGuide.java
new file mode 100644
index 00000000..a568d827
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/IDungeonGuide.java
@@ -0,0 +1,10 @@
+package kr.syeyoung.dungeonsguide;
+
+/**
+ * This exists, so we can reload the mod/ download a more recent version
+ */
+public interface IDungeonGuide {
+ void init();
+ void preinit();
+
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/Keybinds.java b/src/main/java/kr/syeyoung/dungeonsguide/Keybinds.java
deleted file mode 100755
index 1235d29e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/Keybinds.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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;
-
-import kr.syeyoung.dungeonsguide.events.KeyBindPressedEvent;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.settings.GameSettings;
-import net.minecraft.client.settings.KeyBinding;
-import net.minecraft.util.ChatComponentText;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.fml.client.registry.ClientRegistry;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import net.minecraftforge.fml.common.gameevent.InputEvent;
-import org.lwjgl.input.Keyboard;
-import org.lwjgl.input.Mouse;
-
-public class Keybinds
-{
-
- @SubscribeEvent
- public void onTogglePathfindStatus(InputEvent.KeyInputEvent keyInputEvent) {
- if (Keyboard.getEventKeyState()) {
- int key = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() + 256 : Keyboard.getEventKey();
- KeyBindPressedEvent keyBindPressedEvent = new KeyBindPressedEvent(key);
- MinecraftForge.EVENT_BUS.post(keyBindPressedEvent);
- }
- }
- @SubscribeEvent
- public void onMousePressed(InputEvent.MouseInputEvent mouseInputEvent) {
- if (Mouse.getEventButtonState()) {
- int key = Mouse.getEventButton() - 100;
- KeyBindPressedEvent keyBindPressedEvent = new KeyBindPressedEvent(key);
- MinecraftForge.EVENT_BUS.post(keyBindPressedEvent);
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/Main.java b/src/main/java/kr/syeyoung/dungeonsguide/Main.java
index 29ac0599..5cfc0622 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/Main.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/Main.java
@@ -18,11 +18,13 @@
package kr.syeyoung.dungeonsguide;
-import com.mojang.authlib.exceptions.AuthenticationException;
+import kr.syeyoung.dungeonsguide.auth.AuthManager;
+import kr.syeyoung.dungeonsguide.auth.InvalidDungeonsGuideCredentialsException;
+import kr.syeyoung.dungeonsguide.auth.ResourceManager;
+import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.url.DGStreamHandlerFactory;
-import kr.syeyoung.dungeonsguide.utils.cursor.EnumCursor;
-import kr.syeyoung.dungeonsguide.utils.cursor.GLCursors;
-import net.minecraft.client.gui.*;
+import lombok.Getter;
+import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.launchwrapper.LaunchClassLoader;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.common.MinecraftForge;
@@ -33,110 +35,135 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.jetbrains.annotations.NotNull;
-import java.io.*;
-import java.lang.reflect.InvocationTargetException;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.security.spec.InvalidKeySpecException;
@Mod(modid = Main.MOD_ID, version = Main.VERSION)
-public class Main
-{
+public class Main {
+
public static final String MOD_ID = "skyblock_dungeons_guide";
- public static final String VERSION = "1.0";
+ public static final String VERSION = "3.8.0";
+ Logger logger = LogManager.getLogger("DG-main");
- private static Main main;
- private DGInterface dgInterface;
+ IDungeonGuide dgInstance;
private boolean isLoaded = false;
- private Throwable cause;
- private String stacktrace;
- private boolean showedError = false;
-
+ public static final String SERVER_URL = "https://dungeons.guide";
+ public static final String SOME_FUNNY_KEY_THING = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxO89qtwG67jNucQ9Y44c" +
+ "IUs/B+5BeJPs7G+RG2gfs4/2+tzF/c1FLDc33M7yKw8aKk99vsBUY9Oo8gxxiEPB" +
+ "JitP/qfon2THp94oM77ZTpHlmFoqbZMcKGZVI8yfvEL4laTM8Hw+qh5poQwtpEbK" +
+ "Xo47AkxygxJasUnykER2+aSTZ6kWU2D4xiNtFA6lzqN+/oA+NaYfPS0amAvyVlHR" +
+ "n/8IuGkxb5RrlqVssQstFnxsJuv88qdGSEqlcKq2tLeg9hb8eCnl2OFzvXmgbVER" +
+ "0JaV+4Z02fVG1IlR3Xo1mSit7yIU6++3usRCjx2yfXpnGGJUW5pe6YETjNew3ax+" +
+ "FAZ4GePWCdmS7FvBnbbABKo5pE06ZTfDUTCjQlAJQiUgoF6ntMJvQAXPu48Vr8q/" +
+ "mTcuZWVnI6CDgyE7nNq3WNoq3397sBzxRohMxuqzl3T19zkfPKF05iV2Ju1HQMW5" +
+ "I119bYrmVD240aGESZc20Sx/9g1BFpNzQbM5PGUlWJ0dhLjl2ge4ip2hHciY3OEY" +
+ "p2Qy2k+xEdenpKdL+WMRimCQoO9gWe2Tp4NmP5dppDXZgPjXqjZpnGs0Uxs+fXqW" +
+ "cwlg3MbX3rFl9so/fhVf4p9oXZK3ve7z5D6XSSDRYECvsKIa08WAxJ/U6n204E/4" +
+ "xUF+3ZgFPdzZGn2PU7SsnOsCAwEAAQ==";
@EventHandler
- public void initEvent(FMLInitializationEvent initializationEvent)
- {
+ public void initEvent(final FMLInitializationEvent initializationEvent) {
MinecraftForge.EVENT_BUS.register(this);
- if (dgInterface != null) {
- main = this;
- try {
- dgInterface.init(initializationEvent);
- } catch (Exception e) {
- cause = e;
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- PrintStream printStream = new PrintStream(byteArrayOutputStream);
- e.printStackTrace(printStream);
- stacktrace = new String(byteArrayOutputStream.toByteArray());
-
- e.printStackTrace();
- }
+ try {
+ logger.info("init-ing DungeonsGuide");
+ dgInstance.init();
+ } catch (Exception e) {
+ handleException(e, null);
}
}
+
+
+ private boolean showedError = false;
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onGuiOpen(GuiOpenEvent guiOpenEvent) {
if (!showedError && !isLoaded && guiOpenEvent.gui instanceof GuiMainMenu) {
- guiOpenEvent.gui = new GuiLoadingError(cause, stacktrace, guiOpenEvent.gui);
+ guiOpenEvent.gui = new GuiLoadingError(guiOpenEvent.gui);
showedError = true;
}
+
}
+
+ @Getter
+ static File configDir;
+
@EventHandler
- public void preInit(FMLPreInitializationEvent preInitializationEvent) {
- ProgressManager.ProgressBar progressBar = ProgressManager.push("DungeonsGuide", this.getClass().getResourceAsStream("/kr/syeyoung/dungeonsguide/e.class") == null ? 7 : 6);
- Authenticator authenticator = new Authenticator(progressBar);
- String token = null;
+ public void preInit(final FMLPreInitializationEvent preInitializationEvent) {
+ MinecraftForge.EVENT_BUS.register(new YoMamaOutdated());
+
+ ProgressManager.ProgressBar progressBar = null;
+
try {
- token = authenticator.authenticateAndDownload(this.getClass().getResourceAsStream("/kr/syeyoung/dungeonsguide/DungeonsGuide.class") == null ? System.getProperty("dg.version") == null ? "nlatest" : System.getProperty("dg.version") : null);
- if (token != null) {
- main = this;
- URL.setURLStreamHandlerFactory(new DGStreamHandlerFactory(authenticator));
- LaunchClassLoader classLoader = (LaunchClassLoader) Main.class.getClassLoader();
- classLoader.addURL(new URL("z:///"));
-
- try {
- progressBar.step("Initializing");
- this.dgInterface = new DungeonsGuide(authenticator);
- this.dgInterface.pre(preInitializationEvent);
- while (progressBar.getStep() < progressBar.getSteps())
- progressBar.step("random-"+progressBar.getStep());
- ProgressManager.pop(progressBar);
- isLoaded = true;
- } catch (Throwable e) {
- cause = e;
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- PrintStream printStream = new PrintStream(byteArrayOutputStream);
- e.printStackTrace(printStream);
- stacktrace = new String(byteArrayOutputStream.toByteArray());
-
- while (progressBar.getStep() < progressBar.getSteps())
- progressBar.step("random-"+progressBar.getStep());
- ProgressManager.pop(progressBar);
-
- e.printStackTrace();
+ try (InputStream premiumControlClass = this.getClass().getResourceAsStream("/kr/syeyoung/dungeonsguide/e.class")) {
+ progressBar = ProgressManager.push("DungeonsGuide", premiumControlClass == null ? 7 : 6);
+ }
+
+ AuthManager.getInstance().setBaseserverurl(SERVER_URL);
+ AuthManager.getInstance().init();
+
+
+ configDir = new File(preInitializationEvent.getModConfigurationDirectory(), "dungeonsguide");
+
+
+ String version = null;
+ try (InputStream resourceAsStream = this.getClass().getResourceAsStream("/kr/syeyoung/dungeonsguide/DungeonsGuide.class")) {
+ if (resourceAsStream == null) {
+ if (System.getProperty("dg.version") == null) {
+ version = "nlatest";
+ } else {
+ version = System.getProperty("dg.version");
+ }
}
+ }catch (Exception e){
+ e.printStackTrace();
}
- } catch (IOException | AuthenticationException | NoSuchAlgorithmException | CertificateException | KeyStoreException | KeyManagementException | InvalidKeySpecException | SignatureException e) {
- cause = e;
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- PrintStream printStream = new PrintStream(byteArrayOutputStream);
- e.printStackTrace(printStream);
- stacktrace = new String(byteArrayOutputStream.toByteArray());
-
- while (progressBar.getStep() < progressBar.getSteps())
- progressBar.step("random-"+progressBar.getStep());
- ProgressManager.pop(progressBar);
-
- e.printStackTrace();
+ ResourceManager.getInstance().setBaseUrl(Main.SERVER_URL);
+ ResourceManager.getInstance().setBASE64_X509ENCODEDKEYSPEC(Main.SOME_FUNNY_KEY_THING);
+
+ if(!AuthManager.getInstance().isPlebUser() && version != null){
+ ResourceManager.getInstance().downloadAssets(version);
+ }
+
+ URL.setURLStreamHandlerFactory(new DGStreamHandlerFactory());
+ LaunchClassLoader classLoader = (LaunchClassLoader) Main.class.getClassLoader();
+ classLoader.addURL(new URL("z:///"));
+
+ progressBar.step("Initializing");
+
+ dgInstance = new DungeonsGuide();
+ dgInstance.preinit();
+
+ finishUpProgressBar(progressBar);
+ isLoaded = true;
+
+ } catch (IOException | InvalidDungeonsGuideCredentialsException e) {
+ handleException(e, progressBar);
}
}
- public static Main a() {
- return main;
+
+ public void handleException(@NotNull final Throwable e, ProgressManager.ProgressBar progressBar) {
+ GuiLoadingError.cause = e;
+
+ finishUpProgressBar(progressBar);
+
+ e.printStackTrace();
+ }
+
+ public static void finishUpProgressBar(final ProgressManager.ProgressBar progressBar) {
+ if(progressBar == null) return;
+ while (progressBar.getStep() < progressBar.getSteps())
+ progressBar.step("random-" + progressBar.getStep());
+ ProgressManager.pop(progressBar);
}
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/SkyblockStatus.java b/src/main/java/kr/syeyoung/dungeonsguide/SkyblockStatus.java
deleted file mode 100755
index 7e2286b3..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/SkyblockStatus.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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;
-
-import com.google.common.collect.Sets;
-import kr.syeyoung.dungeonsguide.commands.*;
-import kr.syeyoung.dungeonsguide.dungeon.DungeonContext;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoomInfoRegistry;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.scoreboard.*;
-import net.minecraftforge.client.ClientCommandHandler;
-import net.minecraftforge.common.MinecraftForge;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import java.io.File;
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.util.Collection;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class SkyblockStatus {
- @Getter
- private boolean isOnSkyblock;
- private boolean isOnDungeon;
-
- public boolean isOnDungeon() {
- return forceIsOnDungeon || isOnDungeon;
- }
-
- @Getter @Setter
- private boolean forceIsOnDungeon;
-
- @Getter
- @Setter
- private DungeonContext context;
-
- @Getter
- @Setter
- private int percentage;
-
- @Getter @Setter
- private String dungeonName;
-
- public boolean isOnHypixel() {
- Minecraft mc = Minecraft.getMinecraft();
- if (mc == null || mc.thePlayer == null) return false;
- if (!mc.isSingleplayer() && mc.thePlayer.getClientBrand() != null) {
- return mc.thePlayer.getClientBrand().startsWith("Hypixel BungeeCord");
- }
- return false;
- }
-
- private static final Set SKYBLOCK_IN_ALL_LANGUAGES = Sets.newHashSet("SKYBLOCK");
-
- public void updateStatus() {
- if (!isOnHypixel()) {
- isOnDungeon = false;
- isOnSkyblock = false;
- return;
- }
-
- Scoreboard scoreboard = Minecraft.getMinecraft().thePlayer.getWorldScoreboard();
- ScoreObjective scoreObjective = scoreboard.getObjectiveInDisplaySlot(1);
- if (scoreObjective == null) return;
-
- String objectiveName = TextUtils.stripColor(scoreObjective.getDisplayName());
- boolean skyblockFound = false;
- for (String skyblock : SKYBLOCK_IN_ALL_LANGUAGES) {
- if (objectiveName.startsWith(skyblock)) {
- skyblockFound = true;
- isOnSkyblock = true;
- break;
- }
- }
-
- if (!skyblockFound) {
- isOnSkyblock = false;
- isOnDungeon = false;
- return;
- }
-
- Collection scores = scoreboard.getSortedScores(scoreObjective);
- boolean foundDungeon = false;
- for (Score sc:scores) {
- ScorePlayerTeam scorePlayerTeam = scoreboard.getPlayersTeam(sc.getPlayerName());
- String strippedLine = TextUtils.keepScoreboardCharacters(TextUtils.stripColor(ScorePlayerTeam.formatPlayerName(scorePlayerTeam, sc.getPlayerName()))).trim();
- if (strippedLine.contains("Cleared: ")) {
- foundDungeon = true;
- percentage = Integer.parseInt(strippedLine.substring(9).split(" ")[0]);
- }
- if (ScorePlayerTeam.formatPlayerName(scorePlayerTeam, sc.getPlayerName()).startsWith(" ยง7โฃ")) {
- dungeonName = strippedLine.trim();
- }
- }
-
- isOnDungeon = foundDungeon;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/YoMamaOutdated.java b/src/main/java/kr/syeyoung/dungeonsguide/YoMamaOutdated.java
new file mode 100644
index 00000000..ca9b34f4
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/YoMamaOutdated.java
@@ -0,0 +1,110 @@
+package kr.syeyoung.dungeonsguide;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.*;
+import net.minecraftforge.client.event.GuiOpenEvent;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.fml.common.FMLCommonHandler;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.lwjgl.opengl.GL11;
+
+import java.io.IOException;
+
+public class YoMamaOutdated {
+
+ Logger logger = LogManager.getLogger("YoMamaOutdated");
+
+ public boolean isUsingOutdatedDg = true;
+ String outdatedMessage;
+
+ public YoMamaOutdated() {
+ MinecraftForge.EVENT_BUS.register(this);
+ this.check();
+ }
+
+ void check() {
+
+ isUsingOutdatedDg = false;
+
+// try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
+// HttpGet httpget = new HttpGet( "https://dungeonsguide.kingstefan26.workers.dev/outdated");
+// Header[] haeders = {new BasicHeader("User-Agent", "DungeonsGuide/" + Main.VERSION)};
+// httpget.setHeaders(haeders);
+// HttpResponse httpresponse = httpclient.execute(httpget);
+//
+// if (httpresponse.getStatusLine().getStatusCode() != 200) {
+// outdatedMessage = IOUtils.toString(httpresponse.getEntity().getContent(), StandardCharsets.UTF_8);
+// }else {
+// isUsingOutdatedDg = false;
+// }
+//
+// } catch (Exception ignored) {
+// }
+
+ }
+
+ private boolean showedError = false;
+
+ @SubscribeEvent
+ public void onGuiOpen(GuiOpenEvent event) {
+ if (!showedError && isUsingOutdatedDg) {
+ showedError = true;
+
+ GuiScreen ogGui = event.gui;
+
+ event.gui = new GuiScreen() {
+ @Override
+ public void initGui() {
+ ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft());
+ this.buttonList.add(new GuiButton(0, sr.getScaledWidth()/2-100,sr.getScaledHeight()-70 ,"Close Minecraft"));
+ this.buttonList.add(new GuiButton(1, sr.getScaledWidth()/2-100,sr.getScaledHeight()-40 ,"Ignore"));
+ }
+
+ @Override
+ protected void actionPerformed(GuiButton button) throws IOException {
+ super.actionPerformed(button);
+ if (button.id == 0) {
+ FMLCommonHandler.instance().exitJava(-1,true);
+ } else if (button.id == 1) {
+ Minecraft.getMinecraft().displayGuiScreen(ogGui);
+ }
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ super.drawBackground(1);
+
+ ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft());
+ FontRenderer fontRenderer = Minecraft.getMinecraft().fontRendererObj;
+ String text = "This DungeonsGuide installation seems to be invalid";
+ fontRenderer.drawString(text, (sr.getScaledWidth()-fontRenderer.getStringWidth(text))/2,40,0xFFFF0000);
+ String text1 = "Message from our server:";
+ fontRenderer.drawString(text1, (sr.getScaledWidth()-fontRenderer.getStringWidth(text1))/2, (int) (40+fontRenderer.FONT_HEIGHT*1.5),0xFFFF0000);
+
+ int tenth = sr.getScaledWidth() / 10;
+
+ Gui.drawRect(tenth, 70,sr.getScaledWidth()-tenth, sr.getScaledHeight()-80, 0xFF5B5B5B);
+ clip(sr, tenth, 70,sr.getScaledWidth()-2*tenth, sr.getScaledHeight()-150);
+ GL11.glEnable(GL11.GL_SCISSOR_TEST);
+
+
+ fontRenderer.drawString(outdatedMessage, tenth+2,fontRenderer.FONT_HEIGHT + 72, 0xFFFFFFFF);
+
+ GL11.glDisable(GL11.GL_SCISSOR_TEST);
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ }
+
+ public void clip(ScaledResolution resolution, int x, int y, int width, int height) {
+ if (width < 0 || height < 0) return;
+
+ int scale = resolution.getScaleFactor();
+ GL11.glScissor((x ) * scale, Minecraft.getMinecraft().displayHeight - (y + height) * scale, (width) * scale, height * scale);
+ }
+ };
+ }
+ }
+
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/AuthManager.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/AuthManager.java
new file mode 100644
index 00000000..5588a4a2
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/AuthManager.java
@@ -0,0 +1,150 @@
+package kr.syeyoung.dungeonsguide.auth;
+
+import com.google.common.base.Throwables;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.google.gson.JsonObject;
+import com.mojang.authlib.exceptions.AuthenticationException;
+import kr.syeyoung.dungeonsguide.auth.authprovider.AuthProvider;
+import kr.syeyoung.dungeonsguide.auth.authprovider.DgAuth.DgAuth;
+import kr.syeyoung.dungeonsguide.auth.authprovider.DgAuth.DgAuthUtil;
+import kr.syeyoung.dungeonsguide.mod.chat.ChatTransmitter;
+import kr.syeyoung.dungeonsguide.mod.events.impl.AuthChangedEvent;
+import kr.syeyoung.dungeonsguide.mod.stomp.StompManager;
+import lombok.Setter;
+import net.minecraft.client.Minecraft;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.IOException;
+import java.security.KeyPair;
+import java.security.NoSuchAlgorithmException;
+import java.util.Objects;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+
+
+public class AuthManager {
+ Logger logger = LogManager.getLogger("AuthManger");
+
+ private static AuthManager instance;
+
+ public static AuthManager getInstance() {
+ if(instance == null) instance = new AuthManager();
+ return instance;
+ }
+
+
+ @Setter
+ private String baseserverurl = "https://dungeons.guide";
+
+ private AuthProvider currentProvider;
+
+ public String getToken() {
+ if (currentProvider != null && currentProvider.getToken() != null) {
+ return currentProvider.getToken();
+ }
+ return null;
+ }
+
+ public KeyPair getKeyPair(){
+ if (currentProvider != null && currentProvider.getToken() != null) {
+ return currentProvider.getRsaKey();
+ }
+ return null;
+ }
+
+
+ boolean initlock = false;
+
+ public void init() {
+ if (initlock) {
+ logger.info("Cannot init AuthManger twice");
+ return;
+ }
+
+ reauth();
+
+ initlock = true;
+
+
+ MinecraftForge.EVENT_BUS.register(this);
+
+ ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("DgAuth Pool").build();
+ final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1, namedThreadFactory);
+ scheduler.scheduleAtFixedRate(() -> {
+ if (getToken() != null) {
+ JsonObject obj = DgAuthUtil.getJwtPayload(getToken());
+ if (!obj.get("uuid").getAsString().replace("-", "").equals(Minecraft.getMinecraft().getSession().getPlayerID())) {
+ shouldReAuth = true;
+ }
+ }
+ }, 10,2000, TimeUnit.MILLISECONDS);
+ }
+
+ boolean shouldReAuth = true;
+ int tickCounter;
+
+ @SubscribeEvent
+ public void onTickClientTick(TickEvent.ClientTickEvent event) {
+ if (event.phase != TickEvent.Phase.START) return;
+
+ if (tickCounter % 200 == 0) {
+ tickCounter = 0;
+ reauth();
+ }
+ tickCounter++;
+
+ }
+
+ public boolean isPlebUser(){
+ return Objects.equals(getInstance().getPlanType(), "OPENSOURCE");
+ }
+
+ public String getPlanType(){
+ if(getToken() == null) return null;
+
+
+ JsonObject jwt = DgAuthUtil.getJwtPayload(getToken());
+
+ if(!jwt.has("plan")) return null;
+
+ return jwt.get("plan").getAsString();
+
+ }
+
+ void reauth() {
+ if (!shouldReAuth) return;
+
+ shouldReAuth = false;
+
+ currentProvider = null;
+ try {
+ currentProvider = new DgAuth(baseserverurl).createAuthProvider();
+ if (currentProvider.getToken() == null) {
+ shouldReAuth = true;
+ currentProvider = null;
+ ChatTransmitter.addToQueue("ยงeDungeons Guide ยง7:: ยงrยงcDG auth failed, trying again in ten seconds", true);
+ logger.info("DG auth failed, trying again in a second");
+ } else {
+ // RE-AUTHed SUCCESSFULLY HOORAY
+ // for some reason the forge events don't work in pre init, so I call the callback directly
+ StompManager.getInstance().init();
+ MinecraftForge.EVENT_BUS.post(new AuthChangedEvent());
+ }
+ } catch (NoSuchAlgorithmException | AuthenticationException | IOException e) {
+
+ shouldReAuth = true;
+ currentProvider = null;
+ ChatTransmitter.addToQueue("ยงeDungeons Guide ยง7:: ยงrยงcDG auth failed, trying again in ten seconds", true);
+ logger.error("Re-auth failed with message {}, trying again in a ten seconds", String.valueOf(Throwables.getRootCause(e)));
+ }
+
+ }
+
+
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/AuthUtil.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/AuthUtil.java
new file mode 100644
index 00000000..d96b054d
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/AuthUtil.java
@@ -0,0 +1,70 @@
+package kr.syeyoung.dungeonsguide.auth;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+
+import javax.crypto.*;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import javax.net.ssl.HttpsURLConnection;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.security.*;
+
+public class AuthUtil {
+ private AuthUtil() {}
+
+ public static KeyPair getKeyPair() throws NoSuchAlgorithmException {
+ KeyPairGenerator a = null;
+ a = KeyPairGenerator.getInstance("RSA");
+ a.initialize(1024);
+ return a.generateKeyPair();
+ }
+
+
+ public static JsonElement getJsonSecured(String u) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException{
+
+ int length = 0;
+ CipherInputStream cipherInputStream = null;
+
+ HttpsURLConnection httpsURLConnection = (HttpsURLConnection) new URL(u).openConnection();
+ httpsURLConnection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
+ httpsURLConnection.setRequestProperty("Content-Type", "application/json");
+ httpsURLConnection.setRequestMethod("GET");
+ httpsURLConnection.setRequestProperty("Authorization", AuthManager.getInstance().getToken());
+ httpsURLConnection.setDoInput(true);
+ httpsURLConnection.setDoOutput(true);
+
+ InputStream inputStream = httpsURLConnection.getInputStream();
+ byte[] lengthPayload = new byte[4];
+ inputStream.read(lengthPayload);
+ length = ((lengthPayload[0] & 0xFF) << 24) |
+ ((lengthPayload[1] & 0xFF) << 16) |
+ ((lengthPayload[2] & 0xFF) << 8) |
+ ((lengthPayload[3] & 0xFF));
+ while (inputStream.available() < length) ;
+ byte[] keyPayload = new byte[length];
+ inputStream.read(keyPayload);
+
+ Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
+ cipher.init(Cipher.DECRYPT_MODE, AuthManager.getInstance().getKeyPair().getPrivate());
+ byte[] AESKey = cipher.doFinal(keyPayload);
+
+ cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ SecretKeySpec secretKeySpec = new SecretKeySpec(AESKey, "AES");
+ IvParameterSpec ivParameterSpec = new IvParameterSpec(AESKey);
+ cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
+ cipherInputStream = new CipherInputStream(inputStream, cipher);
+ cipherInputStream.read(lengthPayload);
+ length = ((lengthPayload[0] & 0xFF) << 24) |
+ ((lengthPayload[1] & 0xFF) << 16) |
+ ((lengthPayload[2] & 0xFF) << 8) |
+ ((lengthPayload[3] & 0xFF));
+
+ httpsURLConnection.disconnect();
+
+ return new JsonParser().parse(new InputStreamReader(cipherInputStream));
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/InvalidDungeonsGuideCredentialsException.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/InvalidDungeonsGuideCredentialsException.java
new file mode 100644
index 00000000..98caa049
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/InvalidDungeonsGuideCredentialsException.java
@@ -0,0 +1,8 @@
+package kr.syeyoung.dungeonsguide.auth;
+
+public class InvalidDungeonsGuideCredentialsException extends Throwable {
+
+ public InvalidDungeonsGuideCredentialsException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/ResourceManager.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/ResourceManager.java
new file mode 100644
index 00000000..56d46aea
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/ResourceManager.java
@@ -0,0 +1,164 @@
+package kr.syeyoung.dungeonsguide.auth;
+
+import lombok.Setter;
+import net.minecraftforge.common.MinecraftForge;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import javax.crypto.*;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import javax.net.ssl.HttpsURLConnection;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.*;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+public class ResourceManager {
+
+ Logger logger = LogManager.getLogger("ResourceManager");
+
+ @Setter
+ private String baseUrl;
+ @Setter
+ private String BASE64_X509ENCODEDKEYSPEC;
+ private final HashMap loadedResources = new HashMap<>();
+
+
+ private static ResourceManager instance;
+ public static ResourceManager getInstance() {
+ if(instance == null) {
+ instance = new ResourceManager();
+ MinecraftForge.EVENT_BUS.register(instance);
+ }
+ return instance;
+ }
+
+ private ResourceManager() {
+ }
+
+ public Map getResources() {
+ return loadedResources;
+ }
+
+
+ public void downloadAssets(String version) throws InvalidDungeonsGuideCredentialsException {
+ if(AuthManager.getInstance().getToken() == null) throw new InvalidDungeonsGuideCredentialsException("Not Authenticated while downloading assets");
+ try {
+ // version not being null indicates that the user is "premium"
+ // so we download the special version
+ if (version != null)
+ downloadSafe( baseUrl + "/resource/version?v=" + version, true);
+
+ if(!AuthManager.getInstance().isPlebUser()){
+ downloadSafe(baseUrl + "/resource/roomdata", false);
+ } else {
+ logger.error("The current User is a pleb not downloading user data");
+ }
+
+ } catch (Exception t) {
+ t.printStackTrace();
+ }
+
+ }
+
+ private void downloadSafe(String url, boolean isValidateSignature) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, SignatureException, InvalidKeySpecException {
+ HttpsURLConnection dgConnection = (HttpsURLConnection) new URL(url).openConnection();
+ dgConnection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
+ dgConnection.setRequestProperty("Content-Type", "application/json");
+ dgConnection.setRequestMethod("GET");
+ dgConnection.setRequestProperty("Authorization", AuthManager.getInstance().getToken());
+ dgConnection.setDoInput(true);
+ dgConnection.setDoOutput(true);
+
+ InputStream inputStream = dgConnection.getInputStream();
+ byte[] lengthBytes = new byte[4];
+ inputStream.read(lengthBytes);
+ int length = ((lengthBytes[0] & 0xFF) << 24) |
+ ((lengthBytes[1] & 0xFF) << 16) |
+ ((lengthBytes[2] & 0xFF) << 8) |
+ ((lengthBytes[3] & 0xFF));
+ while (inputStream.available() < length) ;
+ byte[] keyPayload = new byte[length];
+ inputStream.read(keyPayload);
+
+ Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
+ cipher.init(Cipher.DECRYPT_MODE, AuthManager.getInstance().getKeyPair().getPrivate());
+ byte[] h = cipher.doFinal(keyPayload);
+
+ cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ SecretKeySpec keySpec = new SecretKeySpec(h, "AES");
+ IvParameterSpec ivSpec = new IvParameterSpec(h);
+ cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
+ CipherInputStream cipherInputStream = new CipherInputStream(inputStream, cipher);
+
+ cipherInputStream.read(lengthBytes);
+ length = ((lengthBytes[0] & 0xFF) << 24) |
+ ((lengthBytes[1] & 0xFF) << 16) |
+ ((lengthBytes[2] & 0xFF) << 8) |
+ ((lengthBytes[3] & 0xFF));
+
+ int totalLen = length;
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ byte[] buff = new byte[256];
+ while (totalLen > 0) {
+ int len = cipherInputStream.read(buff, 0, Math.min(buff.length, totalLen));
+ totalLen -= len;
+ bos.write(buff, 0, len);
+ }
+ byte[] body = bos.toByteArray();
+
+ byte[] signed;
+ if (isValidateSignature) {
+ cipherInputStream.read(lengthBytes,0 , 4);
+ length = ((lengthBytes[0] & 0xFF) << 24) |
+ ((lengthBytes[1] & 0xFF) << 16) |
+ ((lengthBytes[2] & 0xFF) << 8) |
+ ((lengthBytes[3] & 0xFF));
+
+ totalLen = length;
+ bos = new ByteArrayOutputStream();
+ while (totalLen > 0) {
+ int len = cipherInputStream.read(buff, 0, Math.min(buff.length, totalLen));
+ totalLen -= len;
+ bos.write(buff, 0, len);
+ }
+ signed = bos.toByteArray();
+
+ Signature sign = Signature.getInstance("SHA512withRSA");
+ sign.initVerify(getPublicKey(BASE64_X509ENCODEDKEYSPEC));
+ sign.update(body);
+ boolean truth = sign.verify(signed);
+ if (!truth) throw new SignatureException("DG SIGNATURE FORGED");
+ }
+
+ ZipInputStream zipInputStream = new ZipInputStream(new ByteArrayInputStream(body));
+ ZipEntry zipEntry;
+ while ((zipEntry=zipInputStream.getNextEntry()) != null) {
+ byte[] buffer = new byte[256];
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ int p;
+ while((p = zipInputStream.read(buffer)) > 0) {
+ byteArrayOutputStream.write(buffer, 0, p);
+ }
+ this.loadedResources.put(zipEntry.getName(), byteArrayOutputStream.toByteArray());
+ }
+ }
+
+
+ public static PublicKey getPublicKey(String base64X509EncodedKeySpec) throws NoSuchAlgorithmException, InvalidKeySpecException {
+ X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.decodeBase64(base64X509EncodedKeySpec));
+
+ return KeyFactory.getInstance("RSA").generatePublic(spec);
+ }
+
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/AuthProvider.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/AuthProvider.java
new file mode 100644
index 00000000..ba42574e
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/AuthProvider.java
@@ -0,0 +1,16 @@
+package kr.syeyoung.dungeonsguide.auth.authprovider;
+
+import com.mojang.authlib.exceptions.AuthenticationException;
+
+import java.io.IOException;
+import java.security.KeyPair;
+import java.security.NoSuchAlgorithmException;
+
+public interface AuthProvider {
+ String getToken();
+
+ KeyPair getRsaKey();
+
+
+ AuthProvider createAuthProvider() throws NoSuchAlgorithmException, AuthenticationException, IOException;
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuth.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuth.java
new file mode 100644
index 00000000..0e7a05f6
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuth.java
@@ -0,0 +1,46 @@
+package kr.syeyoung.dungeonsguide.auth.authprovider.DgAuth;
+
+import com.mojang.authlib.exceptions.AuthenticationException;
+import kr.syeyoung.dungeonsguide.auth.AuthUtil;
+import kr.syeyoung.dungeonsguide.auth.authprovider.AuthProvider;
+
+import java.io.IOException;
+import java.security.KeyPair;
+import java.security.NoSuchAlgorithmException;
+
+public class DgAuth implements AuthProvider {
+
+ private final String authServerUrl;
+
+ public DgAuth(String authServerUrl){
+ this.authServerUrl = authServerUrl;
+ }
+
+ private String token;
+ private KeyPair rsaKey;
+
+ @Override
+ public String getToken() {
+ return token;
+ }
+
+ @Override
+ public KeyPair getRsaKey() {
+ return rsaKey;
+ }
+
+
+ @Override
+ public AuthProvider createAuthProvider() throws NoSuchAlgorithmException, AuthenticationException, IOException {
+ this.rsaKey = AuthUtil.getKeyPair();
+
+ String tempToken = DgAuthUtil.requestAuth(this.authServerUrl);
+
+ DgAuthUtil.checkSessionAuthenticity(tempToken);
+
+ this.token = DgAuthUtil.verifyAuth(tempToken, rsaKey.getPublic(), authServerUrl);
+
+ return this;
+ }
+
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuthUtil.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuthUtil.java
new file mode 100644
index 00000000..b01fba50
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/DgAuth/DgAuthUtil.java
@@ -0,0 +1,88 @@
+package kr.syeyoung.dungeonsguide.auth.authprovider.DgAuth;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.mojang.authlib.GameProfile;
+import com.mojang.authlib.exceptions.AuthenticationException;
+import com.mojang.authlib.minecraft.MinecraftSessionService;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.Session;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.IOUtils;
+
+import javax.net.ssl.HttpsURLConnection;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.net.URL;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
+
+public class DgAuthUtil {
+ private DgAuthUtil(){}
+
+ public static String requestAuth(String baseurl) throws IOException {
+ GameProfile profile = Minecraft.getMinecraft().getSession().getProfile();
+
+ HttpsURLConnection connection = (HttpsURLConnection) new URL(baseurl + "/auth/requestAuth").openConnection();
+ connection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
+ connection.setRequestProperty("Content-Type", "application/json");
+ connection.setRequestMethod("POST");
+ connection.setDoInput(true);
+ connection.setDoOutput(true);
+
+ connection.getOutputStream().write(("{\"uuid\":\""+profile.getId().toString()+"\",\"nickname\":\""+profile.getName()+"\"}").getBytes());
+ String payload = String.join("\n", IOUtils.readLines(connection.getErrorStream() == null ? connection.getInputStream() : connection.getErrorStream()));
+
+ JsonObject json = (JsonObject) new JsonParser().parse(payload);
+
+ if (!"ok".equals(json.get("status").getAsString())) {
+ return null;
+ }
+ return json.get("data").getAsString();
+ }
+
+ public static void checkSessionAuthenticity(String tempToken) throws NoSuchAlgorithmException, AuthenticationException {
+ JsonObject d = getJwtPayload(tempToken);
+ byte[] sharedSecret = Base64.decodeBase64(d.get("sharedSecret").getAsString());
+ byte[] publicKey =Base64.decodeBase64(d.get("publicKey").getAsString());
+ String hash = calculateServerHash(sharedSecret, publicKey);
+
+ Session session = Minecraft.getMinecraft().getSession();
+ MinecraftSessionService yggdrasilMinecraftSessionService = Minecraft.getMinecraft().getSessionService();
+ yggdrasilMinecraftSessionService.joinServer(session.getProfile(), session.getToken(), hash);
+ }
+
+ public static String verifyAuth(String tempToken, PublicKey clientKey, String baseurl) throws IOException {
+ HttpsURLConnection urlConnection = (HttpsURLConnection) new URL(baseurl + "/auth/authenticate").openConnection();
+ urlConnection.setRequestMethod("POST");
+ urlConnection.setRequestProperty("User-Agent", "DungeonsGuide/1.0");
+ urlConnection.setRequestProperty("Content-Type", "application/json");
+ urlConnection.setDoInput(true);
+ urlConnection.setDoOutput(true);
+
+ urlConnection.getOutputStream().write(("{\"jwt\":\""+tempToken+"\",\"publicKey\":\""+Base64.encodeBase64URLSafeString(clientKey.getEncoded())+"\"}").getBytes());
+ String payload = String.join("\n", IOUtils.readLines(urlConnection.getErrorStream() == null ? urlConnection.getInputStream() : urlConnection.getErrorStream()));
+
+ JsonObject jsonObject = (JsonObject) new JsonParser().parse(payload);
+ if (!"ok".equals(jsonObject.get("status").getAsString())) {
+ return null;
+ }
+ return jsonObject.get("data").getAsString();
+ }
+
+ public static JsonObject getJwtPayload(String jwt) {
+ String midPart = jwt.split("\\.")[1].replace("+", "-").replace("/", "_");
+ String base64Decode = new String(Base64.decodeBase64(midPart)); // padding
+ return (JsonObject) new JsonParser().parse(base64Decode);
+ }
+
+ public static String calculateServerHash(byte[] a, byte[] b) throws NoSuchAlgorithmException {
+ MessageDigest c = MessageDigest.getInstance("SHA-1");
+ c.update("".getBytes());
+ c.update(a);
+ c.update(b);
+ byte[] d = c.digest();
+ return new BigInteger(d).toString(16);
+ }
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/NullAuth.java b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/NullAuth.java
new file mode 100644
index 00000000..ec7e9aed
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/auth/authprovider/NullAuth.java
@@ -0,0 +1,62 @@
+package kr.syeyoung.dungeonsguide.auth.authprovider;
+
+import com.mojang.authlib.exceptions.AuthenticationException;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.IOException;
+import java.security.KeyPair;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+
+public class NullAuth implements AuthProvider {
+
+ Logger logger = LogManager.getLogger("NullAuth");
+
+ @Override
+ public String getToken() {
+ return "TOKEN";
+ }
+
+ @Override
+ public KeyPair getRsaKey() {
+ return new KeyPair(new PublicKey() {
+ @Override
+ public String getAlgorithm() {
+ return null;
+ }
+
+ @Override
+ public String getFormat() {
+ return null;
+ }
+
+ @Override
+ public byte[] getEncoded() {
+ return new byte[0];
+ }
+ }, new PrivateKey() {
+ @Override
+ public String getAlgorithm() {
+ return null;
+ }
+
+ @Override
+ public String getFormat() {
+ return null;
+ }
+
+ @Override
+ public byte[] getEncoded() {
+ return new byte[0];
+ }
+ });
+ }
+
+ @Override
+ public AuthProvider createAuthProvider() throws NoSuchAlgorithmException, AuthenticationException, IOException {
+ return new NullAuth();
+ }
+
+}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessResult.java b/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessResult.java
deleted file mode 100644
index 94bafa95..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessResult.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.chat;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@AllArgsConstructor
-@Getter
-public enum ChatProcessResult {
- NONE(false, false), REMOVE_LISTENER(true, false), REMOVE_LISTENER_AND_CHAT(true, true), REMOVE_CHAT(false, true);
-
- private boolean removeListener;
- private boolean removeChat;
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessor.java b/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessor.java
deleted file mode 100644
index 5fc666e2..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatProcessor.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.chat;
-
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.GuiNewChat;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.Tuple;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import net.minecraftforge.fml.common.eventhandler.Event;
-import net.minecraftforge.fml.common.eventhandler.EventPriority;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import net.minecraftforge.fml.common.gameevent.TickEvent;
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.simple.SimpleLogger;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-public class ChatProcessor {
- public static final ChatProcessor INSTANCE = new ChatProcessor();
-
- private static final Logger logger = LogManager.getLogger();
- private ChatProcessor() {
- Logger l = LogManager.getLogger(GuiNewChat.class);
- if (l instanceof SimpleLogger) {
- ((SimpleLogger) l).setLevel(Level.OFF);
- } else if (l instanceof org.apache.logging.log4j.core.Logger) {
- ((org.apache.logging.log4j.core.Logger) l).setLevel(Level.OFF);
- }
- }
-
- private Queue chatSubscriberQueue = new ConcurrentLinkedQueue<>();
- private Queue> chatQueue = new ConcurrentLinkedQueue<>();
-
- public void subscribe(ChatSubscriber chatSubscribed) {
- chatSubscriberQueue.add(chatSubscribed);
- }
- public void addToChatQueue(String chat, Runnable onSend, boolean noDupe) {
- if (noDupe && chatQueue.stream().anyMatch(a -> a.getFirst().trim().equalsIgnoreCase(chat.trim()))) return;
- chatQueue.add(new Tuple<>(chat, onSend));
- }
-
-
- private long minimumNext = 0;
-
- @SubscribeEvent
- public void onTick(TickEvent.ClientTickEvent clientTickEvent) {
- try {
- if (clientTickEvent.phase == TickEvent.Phase.START && Minecraft.getMinecraft().thePlayer != null && minimumNext < System.currentTimeMillis()) {
- if (!chatQueue.isEmpty()) {
- Tuple tuple = chatQueue.poll();
- Minecraft.getMinecraft().thePlayer.sendChatMessage(tuple.getFirst());
- if (tuple.getSecond() != null)
- tuple.getSecond().run();
- minimumNext = System.currentTimeMillis() + 200;
- DungeonsGuide.sendDebugChat(new ChatComponentText("Sending " + tuple.getFirst() + " Secretly"));
- }
- }
- } catch (Throwable e) {
- e.printStackTrace();
- }
- }
-
-
- @SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true)
- public void onMessage(ClientChatReceivedEvent chatReceivedEvent) {
- if (chatReceivedEvent.type == 2) return;
- String txt = chatReceivedEvent.message.getFormattedText();
- logger.log(Level.INFO, "[CHAT] "+txt);
-
- int processed = 0;
- int listenened = 0;
- Map context = new HashMap<>();
- Iterator it = chatSubscriberQueue.iterator();
- while (it.hasNext()) {
- ChatSubscriber chatSubscribed = it.next();
- context.put("removed", processed);
- context.put("onceListenered", listenened);
- ChatProcessResult chatProcessResult = chatSubscribed.process(txt, context);
- if (chatProcessResult.isRemoveChat()) processed++;
- if (chatProcessResult.isRemoveListener()) listenened++;
-
- if (chatProcessResult.isRemoveChat()) chatReceivedEvent.setResult(Event.Result.DENY);
- if (chatProcessResult.isRemoveListener()) it.remove();
- }
- }
-
-
- @SubscribeEvent(priority = EventPriority.LOWEST)
- public void cancelMessage(ClientChatReceivedEvent chatReceivedEvent) {
- if (chatReceivedEvent.getResult() == Event.Result.DENY)
- chatReceivedEvent.setCanceled(true);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatSubscriber.java b/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatSubscriber.java
deleted file mode 100644
index 72879eb0..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/chat/ChatSubscriber.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.chat;
-
-import java.util.Map;
-
-@FunctionalInterface
-public interface ChatSubscriber {
- ChatProcessResult process(String txt, Map context);
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/chat/PartyContext.java b/src/main/java/kr/syeyoung/dungeonsguide/chat/PartyContext.java
deleted file mode 100644
index 87d1a264..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/chat/PartyContext.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.chat;
-
-import lombok.Data;
-import net.minecraft.client.Minecraft;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.TreeSet;
-
-
-@Data
-public class PartyContext {
- private String partyID;
-
- private String partyOwner;
- private Set partyModerator; private boolean isModeratorComplete;
- private Set partyMember; private boolean isMemberComplete;
-
- private Set partyRawMembers = new HashSet<>(); private boolean isRawMemberComplete;
-
- private Boolean allInvite;
-
- private boolean partyExistHypixel = true;
-
- public void setPartyOwner(String partyOwner) {
- this.partyOwner = partyOwner;
- if (partyMember != null) partyMember.remove(partyOwner);
- if (partyModerator != null) partyModerator.remove(partyOwner);
- addRawMember(partyOwner);
- }
- public void addPartyModerator(String partyModerator) {
- if (partyModerator.equalsIgnoreCase(partyOwner)) partyOwner = null;
- if (partyMember != null) partyMember.remove(partyModerator);
-
- if (this.partyModerator == null) this.partyModerator = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- this.partyModerator.add(partyModerator);
- addRawMember(partyModerator);
- }
- public void addPartyMember(String partyMember) {
- if (partyMember.equalsIgnoreCase(partyOwner)) partyOwner = null;
- if (partyModerator != null) partyModerator.remove(partyMember);
-
- if (this.partyMember == null) this.partyMember = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- this.partyMember.add(partyMember);
- addRawMember(partyMember);
- }
- public void addRawMember(String partyMember){
- partyRawMembers.add(partyMember);
- }
- public void removeFromParty(String username) {
- if (username.equalsIgnoreCase(partyOwner)) {
- partyOwner = null;
- }
- if (partyModerator != null) partyModerator.remove(username);
- if (partyMember != null) partyMember.remove(username);
- partyRawMembers.remove(username);
- }
-
- public boolean hasModerator(String username) {
- return partyModerator != null && partyModerator.contains(username);
- }
- public boolean hasMember(String username) {
- return partyMember != null && partyMember.contains(username);
- }
- public boolean hasLeader(String username) {
- return username.equalsIgnoreCase(partyOwner);
- }
- public boolean isSelfSolo() {
- return hasLeader(Minecraft.getMinecraft().getSession().getUsername()) && getPartyRawMembers().size() == 1;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/chat/PartyManager.java b/src/main/java/kr/syeyoung/dungeonsguide/chat/PartyManager.java
deleted file mode 100644
index 3053c74c..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/chat/PartyManager.java
+++ /dev/null
@@ -1,605 +0,0 @@
-/*
- * 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.chat;
-
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.events.HypixelJoinedEvent;
-import kr.syeyoung.dungeonsguide.events.StompConnectedEvent;
-import kr.syeyoung.dungeonsguide.stomp.*;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.util.ChatComponentText;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-import java.security.SecureRandom;
-import java.util.*;
-import java.util.function.Consumer;
-
-public class PartyManager implements StompMessageHandler {
- public static final PartyManager INSTANCE = new PartyManager();
- @Getter
- private PartyContext partyContext;
-
- public PartyContext getPartyContext(boolean createIfNeeded) {
- PartyContext pc = partyContext == null && createIfNeeded ? partyContext = new PartyContext() : partyContext;
- if (createIfNeeded)
- pc.addRawMember(Minecraft.getMinecraft().getSession().getUsername());
- return pc;
- }
-
- @Getter
- @Setter
- private int maxParty = 5;
- @Getter
- private String askToJoinSecret = null;
-
- private static final SecureRandom random = new SecureRandom();
- private static final String validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
-
-
- private Set> partyBuiltCallback = new HashSet<>();
-
- public PartyManager() {
- ChatProcessor cp = ChatProcessor.INSTANCE;
- // Not in Party
- cp.subscribe((str, a) -> {
- if (str.equals("ยงcYou are not currently in a party.ยงr")
- || str.equals("ยงeYou left the party.ยงr")
- || str.equals("ยงcYou must be in a party to join the party channel!ยงr")
- || str.equals("ยงcThe party was disbanded because all invites expired and the party was emptyยงr")
- || str.equals("ยงcYou are not in a party and were moved to the ALL channel.ยงr")
- || str.startsWith("ยงcThe party was disbanded")
- || str.endsWith("ยงehas disbanded the party!ยงr")
- || str.startsWith("ยงcYou are not in a party")
- || str.startsWith("ยงeYou have been kicked from the party by ")) {
- leaveParty();
-
- for (Consumer partyContextConsumer : partyBuiltCallback) {
- try {
- partyContextConsumer.accept(null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- partyBuiltCallback.clear();
- a.put("type", "notinparty");
- }
- return ChatProcessResult.NONE;
- });
- // All invite
- cp.subscribe((str, a) -> {
- if (str.endsWith("ยงaenabled All Inviteยงr")) {
- getPartyContext(true).setAllInvite(true);
- a.put("type", "allinvite_on");
- } else if (str.endsWith("ยงcdisabled All Inviteยงr")
- || str.equals("ยงcYou are not allowed to invite players.ยงr")) {
- getPartyContext(true).setAllInvite(false);
- a.put("type", "allinvite_off");
- potentialInvitenessChange();
- }
- return ChatProcessResult.NONE;
- });
- // Member building
- cp.subscribe(new ChatSubscriber() {
- boolean memberExpected;
- PartyContext partyContext = new PartyContext();
- @Override
- public ChatProcessResult process(String txt, Map context) {
- if (txt.startsWith("ยง6Party Members ")) {
- memberExpected = true;
- partyContext = new PartyContext();
- partyContext.setPartyModerator(new TreeSet<>(String.CASE_INSENSITIVE_ORDER));
- partyContext.setPartyMember(new TreeSet<>(String.CASE_INSENSITIVE_ORDER));
- context.put("type", "member_start");
- } else if (txt.startsWith("ยงeParty ") && txt.contains(":")){
- String role = txt.split(":")[0];
- String playerNames = TextUtils.stripColor(txt.split(":")[1]);
- for (String s : playerNames.split(" ")) {
- if (s.isEmpty()) continue;
- if (s.equals("โ")) continue;
- if (s.startsWith("[")) continue;
- partyContext.addRawMember(s);
- if (role.contains("Moder")) partyContext.addPartyModerator(s);
- if (role.contains("Member")) partyContext.addPartyMember(s);
- if (role.contains("Leader")) partyContext.setPartyOwner(s);
- }
- if (role.contains("Moder")) {
- partyContext.setModeratorComplete(true);
- context.put("type", "member_moder");
- }
- if (role.contains("Member")) {
- partyContext.setMemberComplete(true);
- context.put("type", "member_member");
- }
- if (role.contains("Leader")) {
- context.put("type", "member_leader");
- }
- } else if (txt.startsWith("ยง9ยงm---------------------------")) {
- if (memberExpected) {
- PartyContext old = getPartyContext(true);
- old.setPartyOwner(partyContext.getPartyOwner());
- old.setPartyModerator(partyContext.getPartyModerator());
- old.setPartyMember(partyContext.getPartyMember());
- old.setPartyRawMembers(new TreeSet<>(String.CASE_INSENSITIVE_ORDER));
- old.getPartyRawMembers().addAll(old.getPartyMember());
- old.getPartyRawMembers().addAll(old.getPartyModerator());
- old.getPartyRawMembers().add(old.getPartyOwner());
- old.setModeratorComplete(true); old.setMemberComplete(true);
- old.setRawMemberComplete(true);
- old.setPartyExistHypixel(true);
-
- memberExpected = false;
- context.put("type", "member_end");
-
- for (Consumer partyContextConsumer : partyBuiltCallback) {
- try {
- partyContextConsumer.accept(partyContext);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- partyBuiltCallback.clear();
-
- if (old.getPartyID() == null) {
- joinedParty();
- }
- potentialInvitenessChange();
- }
- }
- return ChatProcessResult.NONE;
- }
- });
- // Player party join / leave
- cp.subscribe((str ,a) -> {
- if (str.endsWith("ยงejoined the party.ยงr")) {
- String username = null;
- for (String s : TextUtils.stripColor(str).split(" ")) {
- if (s.startsWith("[")) continue;
- username = s;
- break;
- }
- if (username != null) {
- getPartyContext(true).addPartyMember(username);
- }
- a.put("type", "party_join");
- } else if (str.endsWith("ยงehas been removed from the party.ยงr")
- || str.endsWith("ยงehas left the party.ยงr")) {
- String username = null;
- for (String s : TextUtils.stripColor(str).split(" ")) {
- if (s.startsWith("[")) continue;
- username = s;
- break;
- }
- if (username != null && partyContext != null) {
- getPartyContext().removeFromParty(username);
- }
- a.put("type", "party_leave");
- } else if (str.endsWith(" They have ยงrยงc60 ยงrยงeseconds to accept.ยงr")) {
- String[] messageSplit = TextUtils.stripColor(str).split(" ");
- String inviter = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- inviter = s;
- break;
- }
- if (inviter != null && partyContext != null) {
- if (getPartyContext().hasMember(inviter)) {
- getPartyContext().setAllInvite(true);
- }
- }
- getPartyContext(true).setPartyExistHypixel(true);
- a.put("type", "party_invite_exist");
- } else if (str.equals("ยงcCouldn't find a player with that name!ยงr") || str.equals("ยงcYou cannot invite that player since they're not online.")) {
- a.put("type", "party_invite_noexist");
- String username = Minecraft.getMinecraft().getSession().getUsername();
- if (partyContext != null && getPartyContext().hasMember(username)) {
- getPartyContext().setAllInvite(true);
- }
- }
- return ChatProcessResult.NONE;
- });
- // Promotion
- cp.subscribe((str, a) -> {
- if (str.startsWith("ยงeThe party was transferred to ")) {
- // ยงeThe party was transferred to ยงrยงb[MVPยงrยงf+ยงrยงb] apotato321 ยงrยงeby ยงrยงa[VIPยงrยง6+ยงrยงa] syeyoungยงr
- String[] messageSplit = TextUtils.stripColor(str.substring(31)).split(" ");
- String newLeader = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- newLeader = s;
- break;
- }
- String oldLeader;
- boolean left= false;
- if (str.endsWith("ยงrยงeleftยงr")) {
- oldLeader = messageSplit[messageSplit.length-2];
- left = true;
- } else {
- oldLeader = messageSplit[messageSplit.length-1];
- }
-
- if (oldLeader != null && newLeader != null ) {
- getPartyContext(true).setPartyOwner(newLeader);
- if (left)
- getPartyContext(true).removeFromParty(oldLeader);
- else
- getPartyContext(true).addPartyModerator(oldLeader);
- }
- a.put("type", "party_transfer");
- potentialInvitenessChange();
- } else if (str.endsWith("ยงeto Party Leaderยงr")) {
- // ยงa[VIPยงrยง6+ยงrยงa] syeyoungยงrยงe has promoted ยงrยงb[MVPยงrยงf+ยงrยงb] apotato321 ยงrยงeto Party Leaderยงr
- String[] messageSplit = TextUtils.stripColor(str).split(" ");
- String oldLeader = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- oldLeader = s;
- break;
- }
- messageSplit = TextUtils.stripColor(str.substring(str.indexOf("has promoted") + 13)).split(" ");
- String newLeader = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- newLeader = s;
- break;
- }
-
- if (oldLeader != null && newLeader != null) {
- getPartyContext(true).setPartyOwner(newLeader);
- getPartyContext(true).addPartyModerator(oldLeader);
- }
- a.put("type", "party_transfer");
- potentialInvitenessChange();
- } else if (str.endsWith("ยงrยงeto Party Moderatorยงr")) {
- // ยงb[MVPยงrยงf+ยงrยงb] apotato321ยงrยงe has promoted ยงrยงa[VIPยงrยง6+ยงrยงa] syeyoung ยงrยงeto Party Moderatorยงr
- String[] messageSplit = TextUtils.stripColor(str).split(" ");
- String oldLeader = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- oldLeader = s;
- break;
- }
- messageSplit = TextUtils.stripColor(str.substring(str.indexOf("has promoted") + 13)).split(" ");
- String newModerator = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- newModerator = s;
- break;
- }
-
- if (oldLeader != null && newModerator != null) {
- getPartyContext(true).setPartyOwner(oldLeader);
- getPartyContext(true).addPartyModerator(newModerator);
- }
- a.put("type", "party_promotion");
- potentialInvitenessChange();
- } else if (str.endsWith("ยงrยงeto Party Memberยงr")) {
- String[] messageSplit = TextUtils.stripColor(str).split(" ");
- String oldLeader = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- oldLeader = s;
- break;
- }
- messageSplit = TextUtils.stripColor(str.substring(str.indexOf("has demoted") + 12)).split(" ");
- String newMember = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- newMember = s;
- break;
- }
-
- if (oldLeader != null && newMember != null) {
- getPartyContext(true).setPartyOwner(oldLeader);
- getPartyContext(true).addPartyMember(newMember);
- }
- a.put("type", "party_demotion");
- potentialInvitenessChange();
- }
- return ChatProcessResult.NONE;
- });
- // Player Join
- cp.subscribe(new ChatSubscriber() {
- boolean joined;
- @Override
- public ChatProcessResult process(String str, Map context) {
- if (str.startsWith("ยงeYou have joined ")) {
- String[] messageSplit = TextUtils.stripColor(str.substring(18)).split(" ");
- String leader = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- leader = s;
- break;
- }
- leader = leader.substring(0, leader.length()-2); // remove 's
- partyContext = new PartyContext();
- getPartyContext().setPartyOwner(leader);
- getPartyContext().addPartyMember(Minecraft.getMinecraft().getSession().getUsername());
- context.put("type", "party_selfjoin_leader");
- joined= true;
- } else if (str.startsWith("ยงeYou'll be partying with: ")) {
- String[] players = TextUtils.stripColor(str.substring(27)).split(" ");
- for (String player : players) {
- if (player.startsWith("[")) continue;
- getPartyContext().addRawMember(player);
- }
- context.put("type", "party_selfjoin_players");
- } else if (str.startsWith("ยง9ยงm---------------------------") && joined) {
- joined = false;
- getPartyContext().setRawMemberComplete(true);
- joinedParty();
- potentialInvitenessChange();
- }
- return ChatProcessResult.NONE;
- }});
- // Player Join Dungon
- cp.subscribe((str, a)-> {
- if (str.contains("ยงrยงejoined the dungeon group! (ยงrยงb")) {
- String username = TextUtils.stripColor(str).split(" ")[3];
- if (username.equalsIgnoreCase(Minecraft.getMinecraft().getSession().getUsername())) {
- partyContext = new PartyContext();
- requestPartyList((str2) -> {
- potentialInvitenessChange();
- });
- } else {
- getPartyContext(true).setMemberComplete(false);
- requestPartyList((str2) -> {});
- }
- }
- return ChatProcessResult.NONE;
- });
- }
-
- public void toggleAllowAskToJoin() {
- if (canInvite()) {
- if (askToJoinSecret != null) askToJoinSecret = null;
- else {
- updateAskToJoin();
- }
- }
- }
-
- public void updateAskToJoin() {
- StringBuilder secretBuilder = new StringBuilder();
- for (int i = 0; i < 20; i++) {
- secretBuilder.append(validChars.charAt(random.nextInt(validChars.length())));
- }
- askToJoinSecret = secretBuilder.toString();
-
- StompInterface stompInterface = DungeonsGuide.getDungeonsGuide().getStompConnection();
- stompInterface.send(new StompPayload().payload(new JSONObject().put("secret", askToJoinSecret).toString()).header("destination", "/app/party.setjoinsecret"));
- }
-
- public static ChatSubscriber dashShredder() {
- return (str, a) -> (int)a.get("removed") == 0 && str.startsWith("ยง9ยงm---------------------------") ? ChatProcessResult.REMOVE_LISTENER_AND_CHAT : ChatProcessResult.NONE;
- }
-
- public static ChatSubscriber typeShredder(boolean end, String... types) {
- return (str, a) -> (int)a.get("removed") == 0 &&Arrays.stream(types).anyMatch(s -> s.equals(a.getOrDefault("type", null))) ? (end ? ChatProcessResult.REMOVE_LISTENER_AND_CHAT : ChatProcessResult.REMOVE_CHAT) : ChatProcessResult.NONE;
- }
-
- public static ChatSubscriber combinedShredder(ChatSubscriber... chatSubscribers) {
- return (str, a) -> {
- boolean removeChat = false;
- boolean removeListener = false;
- for (ChatSubscriber chatSubscriber : chatSubscribers) {
- ChatProcessResult chatProcessResult = chatSubscriber.process(str, a);
- if (chatProcessResult.isRemoveChat()) removeChat = true;
- if (chatProcessResult.isRemoveListener()) removeListener = true;
- }
- return (removeChat && removeListener) ? ChatProcessResult.REMOVE_LISTENER_AND_CHAT : (removeChat ? ChatProcessResult.REMOVE_CHAT : (removeListener ? ChatProcessResult.REMOVE_LISTENER : ChatProcessResult.NONE));
- };
- }
-
- @SubscribeEvent
- public void onHypixelJoin(HypixelJoinedEvent skyblockJoinedEvent) {
- partyContext = null;
- requestPartyList((a) -> {
- if (a == null) return;
- if (isLeader() || isModerator()) return;
- if (a.getAllInvite() != null) return;
- requestAllInvite();
- });
- }
-
- private void leaveParty() {
- if (partyContext != null) {
- getPartyContext().setPartyExistHypixel(false);
- if (getPartyContext().isSelfSolo()) return;
- if (getPartyContext().getPartyID() != null) {
- JSONObject object = new JSONObject();
- object.put("partyid", getPartyContext().getPartyID());
- StompInterface stompInterface = DungeonsGuide.getDungeonsGuide().getStompConnection();
- stompInterface.send(new StompPayload().payload(object.toString()).header("destination", "/app/party.leave"));
- }
- }
-
- partyContext = new PartyContext();
- playerInvAntiSpam.clear();
-
- getPartyContext().setPartyExistHypixel(false);
- getPartyContext().setPartyOwner(Minecraft.getMinecraft().getSession().getUsername());
- getPartyContext().setPartyModerator(new TreeSet<>(String.CASE_INSENSITIVE_ORDER)); getPartyContext().setMemberComplete(true);
- getPartyContext().setPartyMember(new TreeSet<>(String.CASE_INSENSITIVE_ORDER)); getPartyContext().setModeratorComplete(true);
- getPartyContext().setAllInvite(false);
- joinedParty();
- }
- private void joinedParty() {
- JSONArray jsonArray = new JSONArray();
- for (String member : getPartyContext().getPartyRawMembers()) {
- jsonArray.put(member);
- }
- JSONObject object = new JSONObject();
- object.put("members", jsonArray);
- StompInterface stompInterface = DungeonsGuide.getDungeonsGuide().getStompConnection();
- stompInterface.send(new StompPayload().payload(object.toString()).header("destination", "/app/party.join"));
-
- getPartyContext().setPartyID("!@#!@#!@#..........FETCHING..........$!@$!@$!@$"+UUID.randomUUID().toString());
- }
-
- public boolean isLeader() {
- return partyContext != null && getPartyContext().hasLeader(Minecraft.getMinecraft().getSession().getUsername()); // "getUsername"
- }
- public boolean isModerator() {
- return partyContext != null && getPartyContext().hasModerator(Minecraft.getMinecraft().getSession().getUsername());
- }
- public boolean canInvite() {
- return isLeader() || isModerator() || (partyContext != null && getPartyContext().getAllInvite() != null && getPartyContext().getAllInvite());
- }
-
- private boolean requested = false;
- public void requestPartyList(Consumer onPartyCallback) {
- if (requested) {
- partyBuiltCallback.add(onPartyCallback);
- return;
- }
- requested = true;
-
- ChatProcessor.INSTANCE.addToChatQueue("/pl", () -> {
- ChatProcessor.INSTANCE.subscribe(dashShredder());
- ChatProcessor.INSTANCE.subscribe(combinedShredder(typeShredder(true, "member_end"), dashShredder(), typeShredder(false,"notinparty", "member_start", "member_moder", "member_leader", "member_member")));
- }, true);
- partyBuiltCallback.add(onPartyCallback);
- partyBuiltCallback.add(pc -> requested=false);
- }
-
- public void requestAllInvite() {
- if (isLeader() || isModerator()) return;
- if (partyContext != null && getPartyContext().getAllInvite() != null) return;
-
- ChatProcessor.INSTANCE.addToChatQueue("/p invite -", () -> {
- ChatProcessor.INSTANCE.subscribe(dashShredder());
- ChatProcessor.INSTANCE.subscribe(typeShredder(true, "notinparty", "allinvite_off", "party_invite_noexist"));
- ChatProcessor.INSTANCE.subscribe(dashShredder());
- }, true);
- }
-
- private Map playerInvAntiSpam = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-
- @Override
- public void handle(StompInterface stompInterface, StompPayload stompPayload) {
- JSONObject object = new JSONObject(stompPayload.payload());
- if ("/user/queue/party.check".equals(stompPayload.headers().get("destination"))) {
- String playerName = object.getString("player");
- String token = object.getString("token");
- if (partyContext == null) {
- requestPartyList((pc) -> {
- boolean contains = pc.getPartyRawMembers().contains(playerName);
- if (!contains) {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().payload(new JSONObject().put("status", "failure").put("token", token).toString()).header("destination", "/app/party.check.resp"));
- } else {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().payload(new JSONObject().put("status", "success").put("token", token).toString()).header("destination", "/app/party.check.resp"));
- }
- });
- } else {
- if (getPartyContext().getPartyRawMembers().contains(playerName)) {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().payload(new JSONObject().put("status", "success").put("token", token).toString()).header("destination", "/app/party.check.resp"));
- } else if (getPartyContext().isMemberComplete() && getPartyContext().isModeratorComplete() && getPartyContext().getPartyOwner() != null) {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().payload(new JSONObject().put("status", "failure").put("token", token).toString()).header("destination", "/app/party.check.resp"));
- } else {
- requestPartyList((pc) -> {
- boolean contains = pc.getPartyRawMembers().contains(playerName);
- if (!contains) {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().payload(new JSONObject().put("status", "failure").put("token", token).toString()).header("destination", "/app/party.check.resp"));
- } else {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().payload(new JSONObject().put("status", "success").put("token", token).toString()).header("destination", "/app/party.check.resp"));
- }
- });
- }
- }
- } else if ("/user/queue/party.broadcast".equals(stompPayload.headers().get("destination"))) {
- try {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: Message Broadcasted from player:: \n" + new JSONObject(stompPayload.payload()).getString("payload")));
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else if ("/user/queue/party.join".equals(stompPayload.headers().get("destination"))) {
- String playerName = object.getString("player");
- String secret = object.getString("secret");
- if (secret.equals(askToJoinSecret) && partyContext != null && getPartyContext().getPartyRawMembers().size() < maxParty && playerInvAntiSpam.getOrDefault(playerName, 0L) < System.currentTimeMillis() - 5000) {
- playerInvAntiSpam.put(playerName, System.currentTimeMillis());
- ChatProcessor.INSTANCE.addToChatQueue("/p invite "+playerName,() -> {}, true);
- }
- } else if ("/user/queue/party.askedtojoin.resp".equals(stompPayload.headers().get("destination"))) {
- String invFrom = object.getString("username");
- String token2 = object.getString("token");
- if (!token2.equals(lastToken)) return;
- lastToken = null;
- ChatProcessor.INSTANCE.addToChatQueue("/p accept "+invFrom, () -> {}, true);
- long end = System.currentTimeMillis() + 3000;
- ChatProcessor.INSTANCE.subscribe((str, a) -> {
- if (!str.contains("ยงrยงehas invited you to join their party!")) return System.currentTimeMillis() > end ? ChatProcessResult.REMOVE_LISTENER : ChatProcessResult.NONE;
- String[] messageSplit = TextUtils.stripColor(str).split(" ");
- String inviter = null;
- for (String s : messageSplit) {
- if (s.startsWith("[")) continue;
- if (s.startsWith("-")) continue;;
- inviter = s;
- break;
- }
- if (invFrom.equalsIgnoreCase(inviter)) {
- ChatProcessor.INSTANCE.addToChatQueue("/p accept "+invFrom, () -> {}, true);
- }
- return ChatProcessResult.NONE;
- });
- } else {
- String str = object.getString("status");
- if ("success".equals(str) && partyContext != null) {
- getPartyContext().setPartyID(object.getString("partyId"));
- if (askToJoinSecret != null) {
- updateAskToJoin();
- }
- } else if (partyContext != null){
- getPartyContext().setPartyID(null);
- }
- }
- }
-
- @SubscribeEvent
- public void stompConnect(StompConnectedEvent stompConnectedEvent) {
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/party.resp").build());
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/party.check").build());
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/party.broadcast").build());
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/party.join").build());
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/party.askedtojoin.resp").build());
- }
-
- private String lastToken;
- public void joinWithToken(String secret) {
- lastToken = secret;
- if (partyContext != null && getPartyContext().isPartyExistHypixel())
- ChatProcessor.INSTANCE.addToChatQueue("/p leave", () -> {}, true);
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().method(StompHeader.SEND)
- .header("destination", "/app/party.askedtojoin")
- .payload(new JSONObject().put("token", secret).toString()));
- }
-
- private void potentialInvitenessChange() {
- if (askToJoinSecret != null && !canInvite()) askToJoinSecret = null;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java b/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java
deleted file mode 100644
index 95850fdc..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
- * 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.commands;
-
-import com.google.gson.JsonObject;
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.chat.PartyContext;
-import kr.syeyoung.dungeonsguide.chat.PartyManager;
-import kr.syeyoung.dungeonsguide.rpc.RichPresenceManager;
-import kr.syeyoung.dungeonsguide.SkyblockStatus;
-import kr.syeyoung.dungeonsguide.config.guiconfig.GuiConfigV2;
-import kr.syeyoung.dungeonsguide.config.guiconfig.NestedCategory;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.dungeon.DungeonContext;
-import kr.syeyoung.dungeonsguide.dungeon.MapProcessor;
-import kr.syeyoung.dungeonsguide.dungeon.data.DungeonRoomInfo;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonSpecificDataProvider;
-import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonSpecificDataProviderRegistry;
-import kr.syeyoung.dungeonsguide.dungeon.events.DungeonEventHolder;
-import kr.syeyoung.dungeonsguide.dungeon.mechanics.*;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoomInfoRegistry;
-import kr.syeyoung.dungeonsguide.events.DungeonLeftEvent;
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.features.impl.party.playerpreview.FeatureViewPlayerStatsOnJoin;
-import kr.syeyoung.dungeonsguide.features.impl.party.playerpreview.api.ApiFetcher;
-import kr.syeyoung.dungeonsguide.roomedit.EditingContext;
-import kr.syeyoung.dungeonsguide.roomedit.gui.GuiDungeonRoomEdit;
-import kr.syeyoung.dungeonsguide.roomprocessor.GeneralRoomProcessor;
-import kr.syeyoung.dungeonsguide.roomprocessor.bossfight.BossfightProcessor;
-import kr.syeyoung.dungeonsguide.stomp.*;
-import kr.syeyoung.dungeonsguide.utils.AhUtils;
-import kr.syeyoung.dungeonsguide.utils.MapUtils;
-import kr.syeyoung.dungeonsguide.utils.ShortUtils;
-import kr.syeyoung.dungeonsguide.wsresource.StaticResourceCache;
-import net.minecraft.block.Block;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.entity.EntityPlayerSP;
-import net.minecraft.command.CommandBase;
-import net.minecraft.command.ICommandSender;
-import net.minecraft.nbt.CompressedStreamTools;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.*;
-import net.minecraft.world.World;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import net.minecraftforge.fml.common.gameevent.TickEvent;
-import org.json.JSONObject;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.vecmath.Vector2d;
-import java.awt.*;
-import java.io.*;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.List;
-import java.util.regex.Pattern;
-
-public class CommandDungeonsGuide extends CommandBase {
- @Override
- public String getCommandName() {
- return "dg";
- }
-
- @Override
- public String getCommandUsage(ICommandSender sender) {
- return "dg";
- }
-
- @Override
- public void processCommand(ICommandSender sender, String[] args) {
- if (args.length == 0) {
- openConfig = true;
- } else if (args[0].equalsIgnoreCase("saverooms")) {
- DungeonRoomInfoRegistry.saveAll(DungeonsGuide.getDungeonsGuide().getConfigDir());
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfSuccessfully saved user generated roomdata"));
- } else if (args[0].equalsIgnoreCase("loadrooms")) {
- try {
- DungeonRoomInfoRegistry.loadAll(DungeonsGuide.getDungeonsGuide().getConfigDir());
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfSuccessfully loaded roomdatas"));
- return;
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (InvalidAlgorithmParameterException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- }
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcAn error has occurred while loading roomdata"));
- } else if (args[0].equalsIgnoreCase("reloadah")) {
- try {
- AhUtils.loadAuctions();
- } catch (CertificateException e) {
- e.printStackTrace();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (InvalidAlgorithmParameterException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (KeyStoreException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (KeyManagementException e) {
- e.printStackTrace();
- }
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfReloaded Ah data"));
- } else if (args[0].equalsIgnoreCase("brand")) {
- String serverBrand = Minecraft.getMinecraft().thePlayer.getClientBrand();
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe" + serverBrand));
- } else if (args[0].equalsIgnoreCase("reparty")) {
- if (!DungeonsGuide.getDungeonsGuide().getCommandReparty().requestReparty(false)) {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCurrently Repartying"));
- }
- } else if (args[0].equalsIgnoreCase("gui")) {
- openConfig = true;
- } else if (args[0].equalsIgnoreCase("info")) {
- JsonObject obj = DungeonsGuide.getDungeonsGuide().getAuthenticator().getJwtPayload(DungeonsGuide.getDungeonsGuide().getAuthenticator().getToken());
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
-
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfCurrent Planยง7: ยงe" + obj.get("plan").getAsString()));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfBound toยง7: ยงe" + obj.get("nickname").getAsString()));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfBound uuidยง7: ยงe" + obj.get("uuid").getAsString()));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfSession Expireยง7: ยงe" + sdf.format(new Date(obj.get("exp").getAsLong() * 1000))));
- } else if (args[0].equalsIgnoreCase("pathfind")) {
- try {
- DungeonContext context = DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getContext();
- EntityPlayerSP thePlayer = Minecraft.getMinecraft().thePlayer;
- if (thePlayer == null) return;
- if (context.getBossfightProcessor() != null) context.getBossfightProcessor().tick();
- Point roomPt = context.getMapProcessor().worldPointToRoomPoint(thePlayer.getPosition());
-
- DungeonRoom dungeonRoom = context.getRoomMapper().get(roomPt);
- GeneralRoomProcessor grp = (GeneralRoomProcessor) dungeonRoom.getRoomProcessor();
- grp.pathfind("COMMAND", args[1], args[2], FeatureRegistry.SECRET_LINE_PROPERTIES_GLOBAL.getRouteProperties());
- } catch (Throwable t) {
- t.printStackTrace();
- }
- } else if (args[0].equals("process") && Minecraft.getMinecraft().getSession().getPlayerID().replace("-", "").equals("e686fe0aab804a71ac7011dc8c2b534c")) {
- File root = DungeonsGuide.getDungeonsGuide().getConfigDir();
- File dir = new File(root, "processorinput");
- File outsecret = new File(root, "processoroutsecret");
- for (File f : dir.listFiles()) {
- if (!f.getName().endsWith(".roomdata")) continue;
- try {
- InputStream fis = new FileInputStream(f);
- ObjectInputStream ois = new ObjectInputStream(fis);
- DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
- ois.close();
- fis.close();
- dri.setUserMade(false);
-
- FileOutputStream fos = new FileOutputStream(new File(outsecret, dri.getUuid().toString() + ".roomdata"));
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(dri);
- oos.flush();
- oos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } else if (args[0].equals("check") && Minecraft.getMinecraft().getSession().getPlayerID().replace("-", "").equals("e686fe0aab804a71ac7011dc8c2b534c")) {
- File root = DungeonsGuide.getDungeonsGuide().getConfigDir();
- for (File f : root.listFiles()) {
- if (!f.getName().endsWith(".roomdata")) continue;
- try {
- InputStream fis = new FileInputStream(f);
- ObjectInputStream ois = new ObjectInputStream(fis);
- DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
- ois.close();
- fis.close();
- System.out.println("Starting at " + dri.getName() + " - " + dri.getUuid());
- for (Map.Entry value2 : dri.getMechanics().entrySet()) {
- DungeonMechanic value = value2.getValue();
- if (value instanceof DungeonSecret &&
- (((DungeonSecret) value).getSecretType() == DungeonSecret.SecretType.BAT
- || ((DungeonSecret) value).getSecretType() == DungeonSecret.SecretType.CHEST)
- && ((DungeonSecret) value).getSecretPoint().getY() == 0) {
- OffsetPoint offsetPoint = ((DungeonSecret) value).getSecretPoint();
- if (dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - as secret " + ((DungeonSecret) value).getSecretType() + " - at " + ((DungeonSecret) value).getSecretPoint());
- }
- } else if (value instanceof DungeonOnewayDoor) {
- for (OffsetPoint offsetPoint : ((DungeonOnewayDoor) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - o-door - at " + offsetPoint);
- }
- }
- } else if (value instanceof DungeonDoor) {
- for (OffsetPoint offsetPoint : ((DungeonDoor) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - door - at " + offsetPoint);
- }
- }
- } else if (value instanceof DungeonBreakableWall) {
- for (OffsetPoint offsetPoint : ((DungeonBreakableWall) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - wall - at " + offsetPoint);
- }
- }
- } else if (value instanceof DungeonTomb) {
- for (OffsetPoint offsetPoint : ((DungeonTomb) value).getSecretPoint().getOffsetPointList()) {
- if (offsetPoint.getY() == 0 && dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] != -1) {
- dri.getBlocks()[offsetPoint.getZ()][offsetPoint.getX()] = -1;
- System.out.println("Fixing " + value2.getKey() + " - crypt - at " + offsetPoint);
- }
- }
- }
- }
- FileOutputStream fos = new FileOutputStream(f);
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- oos.writeObject(dri);
- oos.flush();
- oos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } else if (args[0].equals("reloaddungeon") && Minecraft.getMinecraft().getSession().getPlayerID().replace("-", "").equals("e686fe0aab804a71ac7011dc8c2b534c")) {
- try {
- MinecraftForge.EVENT_BUS.post(new DungeonLeftEvent());
- DungeonsGuide.getDungeonsGuide().getSkyblockStatus().setContext(null);
- MapUtils.clearMap();
- } catch (Throwable t) {
- t.printStackTrace();
- }
- } else if (args[0].equalsIgnoreCase("pvall")) {
- PartyManager.INSTANCE.requestPartyList((context) -> {
- if (context == null) {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcNot in Party"));
- return;
- }
- FeatureViewPlayerStatsOnJoin.processPartyMembers(context);
- });
-// } else if (args[0].equals("fixschematic")) {
-// File root = new File(e.getDungeonsGuide().getConfigDir(), "schematics");
-// Method method = null;
-// try {
-// method = NBTTagCompound.class.getDeclaredMethod("write", DataOutput.class);
-// method.setAccessible(true);
-// } catch (NoSuchMethodException e) {
-// e.printStackTrace();
-// return;
-// }
-// for (File f : root.listFiles()) {
-// try {
-// NBTTagCompound nbtTagCompound = CompressedStreamTools.readCompressed(new FileInputStream(f));
-// if (nbtTagCompound.getKeySet().isEmpty()) {
-// System.out.println("ah");
-// return;
-// }
-// nbtTagCompound.setString("Materials","Alpha");
-// FileOutputStream fos = new FileOutputStream(f);
-// DataOutputStream dataoutputstream = new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(fos)));
-//
-// try
-// {
-// dataoutputstream.writeByte(nbtTagCompound.getId());
-//
-// dataoutputstream.writeUTF("Schematic");
-// method.invoke(nbtTagCompound, dataoutputstream);
-// }
-// finally
-// {
-// dataoutputstream.close();
-// }
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
- } else if (args[0].equalsIgnoreCase("asktojoin") || args[0].equalsIgnoreCase("atj")) {
- if (RichPresenceManager.INSTANCE.getLastSetupCode() == -9999) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcDiscord GameSDK has been disabled, or it failed to load!"));
- return;
- }
- if (!PartyManager.INSTANCE.canInvite()) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcYou don't have perms in the party to invite people!"));
- } else {
- PartyManager.INSTANCE.toggleAllowAskToJoin();
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfToggled Ask to join to " + (PartyManager.INSTANCE.getAskToJoinSecret() != null ? "ยงeon" : "ยงcoff")));
- }
-
- if (!FeatureRegistry.DISCORD_RICHPRESENCE.isEnabled()) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcDiscord Rich Presence is disabled! Enable at /dg -> Discord "));
- }
- if (!FeatureRegistry.DISCORD_ASKTOJOIN.isEnabled()) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcDiscord Invite Viewer is disabled! Enable at /dg -> Discord ")); // how
- }
- } else if (args[0].equalsIgnoreCase("partymax") || args[0].equalsIgnoreCase("pm")) {
- if (args.length == 1) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfCurrent party max is ยงe" + PartyManager.INSTANCE.getMaxParty()));
- } else if (args.length == 2) {
- try {
- int partyMax = Integer.parseInt(args[1]);
- if (partyMax < 2) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcparty max can't be smaller than 2"));
- return;
- }
-
- PartyManager.INSTANCE.setMaxParty(partyMax);
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfSuccessfully set partymax to ยงe" + PartyManager.INSTANCE.getMaxParty()));
- } catch (Exception e) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงc" + args[1] + " is not valid number."));
- return;
- }
- }
- } else if (args[0].equals("partyid")) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfInternal Party id: " + Optional.ofNullable(PartyManager.INSTANCE.getPartyContext()).map(PartyContext::getPartyID).orElse(null)));
- } else if (args[0].equalsIgnoreCase("loc")) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfYou're in " + DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName()));
- } else if (args[0].equalsIgnoreCase("saverun")) {
- try {
- File f = DungeonsGuide.getDungeonsGuide().getConfigDir();
- File runDir = new File(f, "dungeonruns");
- runDir.mkdirs();
-
- File runFile = new File(runDir, UUID.randomUUID() + ".dgrun");
-
- DungeonContext dungeonContext = DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getContext();
- if (dungeonContext == null) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCouldn't find dungeon to save!"));
- return;
- }
- DungeonEventHolder dungeonEventHolder = new DungeonEventHolder();
- dungeonEventHolder.setDate(dungeonContext.getInit());
- dungeonEventHolder.setPlayers(dungeonContext.getPlayers());
- dungeonEventHolder.setEventDataList(dungeonContext.getEvents());
-
-
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(runFile));
- oos.writeObject(dungeonEventHolder);
- oos.flush();
- oos.close();
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfSuccessfully saved dungeon run to " + runFile.getAbsolutePath()));
- } catch (Exception e) {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcAn error occured while writing rundata " + e.getMessage()));
- e.printStackTrace();
- }
- } else if (args[0].equals("pv")) {
- try {
- ApiFetcher.fetchUUIDAsync(args[1])
- .thenAccept(a -> {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe" + args[1] + "ยงf's Profile ").appendSibling(new ChatComponentText("ยง7view").setChatStyle(new ChatStyle().setChatHoverEvent(new FeatureViewPlayerStatsOnJoin.HoverEventRenderPlayer(a.orElse(null))))));
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else if (args[0].equals("purge")) {
- ApiFetcher.purgeCache();
- CosmeticsManager cosmeticsManager = DungeonsGuide.getDungeonsGuide().getCosmeticsManager();
- cosmeticsManager.requestPerms();
- cosmeticsManager.requestCosmeticsList();
- cosmeticsManager.requestActiveCosmetics();
- StaticResourceCache.INSTANCE.purgeCache();
- FeatureRegistry.DISCORD_ASKTOJOIN.imageMap.clear();
- FeatureRegistry.DISCORD_ASKTOJOIN.futureMap.clear();
-
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงfSuccessfully purged API Cache!"));
- } else if (args[0].equals("pbroadcast")) {
- try {
- String[] payload = new String[args.length - 1];
- System.arraycopy(args, 1, payload, 0, payload.length);
- String actualPayload = String.join(" ", payload).replace("$C$", "ยง");
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().header("destination", "/app/party.broadcast").payload(
- new JSONObject().put("partyID", PartyManager.INSTANCE.getPartyContext().getPartyID())
- .put("payload", actualPayload).toString()
- ));
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else if (args[0].equals("requeststaticresource")) {
- UUID uid = UUID.fromString(args[1]);
- StaticResourceCache.INSTANCE.getResource(uid).thenAccept(a -> {
- sender.addChatMessage(new ChatComponentText(a.getResourceID() + ": " + a.getValue() + ": " + a.isExists()));
- });
- } else if (args[0].equals("createFakeRoom") && Minecraft.getMinecraft().getSession().getPlayerID().replace("-", "").equals("e686fe0aab804a71ac7011dc8c2b534c")) {
-
- // load schematic
- File f = new File(DungeonsGuide.getDungeonsGuide().getConfigDir(), "schematics/new roonm-b2df250c-4af2-4201-963c-0ee1cb6bd3de-5efb1f0c-c05f-4064-bde7-cad0874fdf39.schematic");
- NBTTagCompound compound;
- try {
- compound = CompressedStreamTools.readCompressed(new FileInputStream(f));
- } catch (IOException e) {
- e.printStackTrace();
- return;
- }
-
- byte[] blocks = compound.getByteArray("Blocks");
- byte[] meta = compound.getByteArray("Data");
- for (int x = 0; x < compound.getShort("Width"); x++) {
- for (int y = 0; y < compound.getShort("Height"); y++) {
- for (int z = 0; z < compound.getShort("Length"); z++) {
- int index = x + (y * compound.getShort("Length") + z) * compound.getShort("Width");
- BlockPos pos = new BlockPos(x, y, z);
- World w = MinecraftServer.getServer().getEntityWorld();
- w.setBlockState(pos, Block.getBlockById(blocks[index] & 0xFF).getStateFromMeta(meta[index] & 0xFF), 2);
- }
- }
- }
-
-
- DungeonSpecificDataProviderRegistry.doorFinders.put(Pattern.compile("TEST DG"), new DungeonSpecificDataProvider() {
- @Override
- public BlockPos findDoor(World w, String dungeonName) {
- return new BlockPos(0, 0, 0);
- }
-
- @Override
- public Vector2d findDoorOffset(World w, String dungeonName) {
- return null;
- }
-
- @Override
- public BossfightProcessor createBossfightProcessor(World w, String dungeonName) {
- return null;
- }
-
- @Override
- public boolean isTrapSpawn(String dungeonName) {
- return false;
- }
-
- @Override
- public double secretPercentage(String dungeonName) {
- return 0;
- }
-
- @Override
- public int speedSecond(String dungeonName) {
- return 0;
- }
- });
- SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- skyblockStatus.setDungeonName("TEST DG");
- DungeonContext fakeContext = new DungeonContext(Minecraft.getMinecraft().theWorld);
- skyblockStatus.setContext(fakeContext);
- skyblockStatus.setForceIsOnDungeon(true);
- MapProcessor mapProcessor = fakeContext.getMapProcessor();
- mapProcessor.setUnitRoomDimension(new Dimension(16, 16));
- mapProcessor.setBugged(false);
- mapProcessor.setDoorDimension(new Dimension(4, 4));
- mapProcessor.setTopLeftMapPoint(new Point(0, 0));
- fakeContext.setDungeonMin(new BlockPos(0, 70, 0));
-
- DungeonRoom dungeonRoom = new DungeonRoom(Arrays.asList(new Point(0, 0)), ShortUtils.topLeftifyInt((short) 1), (byte) 63, new BlockPos(0, 70, 0), new BlockPos(31, 70, 31), fakeContext, Collections.emptySet());
-
- fakeContext.getDungeonRoomList().add(dungeonRoom);
- for (Point p : Arrays.asList(new Point(0, 0))) {
- fakeContext.getRoomMapper().put(p, dungeonRoom);
- }
-
- EditingContext.createEditingContext(dungeonRoom);
- EditingContext.getEditingContext().openGui(new GuiDungeonRoomEdit(dungeonRoom));
- } else if (args[0].equals("CloseContext")) {
- DungeonsGuide.getDungeonsGuide().getSkyblockStatus().setForceIsOnDungeon(false);
- DungeonsGuide.getDungeonsGuide().getSkyblockStatus().setContext(null);
- } else if (args[0].equals("dumpsettings")) {
- NestedCategory root = new NestedCategory("ROOT");
- for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) {
- String category = abstractFeature.getCategory();
- NestedCategory currentRoot = root;
- for (String s : category.split("\\.")) {
- NestedCategory finalCurrentRoot = currentRoot;
- if (currentRoot.children().containsKey(s))
- currentRoot = currentRoot.children().get(s);
- else {
- currentRoot.child(currentRoot = new NestedCategory(finalCurrentRoot.categoryFull() + "." + s));
- }
- }
- }
-
- StringBuilder stringBuilder = new StringBuilder();
- StringBuilder stringBuilder2 = new StringBuilder();
-
- Stack> stak = new Stack<>();
- stak.push(new Tuple<>(root, 0));
- Set discovered = new HashSet<>();
- while (!stak.isEmpty()) {
- Tuple n = stak.pop();
- if (discovered.contains(n.getFirst())) continue;
- discovered.add(n.getFirst());
- for (Map.Entry stringNestedCategoryEntry : n.getFirst().children().entrySet()) {
- stak.push(new Tuple<>(stringNestedCategoryEntry.getValue(), n.getSecond() + 1));
- }
-
- if (n.getFirst().categoryFull().equals("ROOT")) continue;
-
- String prefix = "";
- for (int i = 0; i < n.getSecond() - 1; i++) {
- prefix += " ";
- }
-
- List abstractFeatureList = FeatureRegistry.getFeaturesByCategory().getOrDefault(n.getFirst().categoryFull().substring(5), Collections.emptyList());
- stringBuilder.append(prefix).append("- C ").append(n.getFirst().categoryFull()).append("\n");
- stringBuilder2.append(n.getFirst().categoryFull()).append("\n");
- for (AbstractFeature abstractFeature : abstractFeatureList) {
- stringBuilder.append(prefix).append(" - F ").append(abstractFeature.getName()).append(" / ").append(abstractFeature.getDescription().replace("\n", "$NEW_LINE$")).append("\n");
- }
- }
- System.out.println(stringBuilder.toString());
- System.out.println(stringBuilder2.toString());
- } else if (args[0].equals("readMap")) {
- try {
- int fromX = Integer.parseInt(args[1]);
- int fromY = Integer.parseInt(args[2]);
- sender.addChatMessage(new ChatComponentText(MapUtils.readDigit(MapUtils.getColors(), fromX, fromY)+"-"));
-// int cntY = Integer.parseInt(args[3]);
-// int target = Integer.parseInt(args[4]);
-// StringBuilder sb = new StringBuilder("{");
-// for (int y = fromY; y < fromY + cntY; y++) {
-// int curr = 0;
-// for (int x = fromX; x < fromX+8; x++) {
-// byte clr = MapUtils.getMapColorAt(MapUtils.getColors(), x,y);
-// if (clr == target) curr = (curr << 1) | 1;
-// else curr <<= 1;
-// }
-// sb.append("0x").append(Integer.toHexString(curr).toUpperCase());
-// if (y != fromY + cntY - 1) sb.append(", ");
-// }
-// sb.append("}");
-// System.out.println("\n"+sb.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else {
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg ยง7-ยงfOpens configuration gui"));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg gui ยง7-ยงfOpens configuration gui"));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg help ยง7-ยงfShows command help"));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg saverooms ยง7-ยงf Saves usergenerated dungeon roomdata."));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg loadrooms ยง7-ยงf Reloads dungeon roomdata."));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg reloadah ยง7-ยงf Reloads price data from server."));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg brand ยง7-ยงf View server brand."));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg reparty ยง7-ยงf Reparty."));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg info ยง7-ยงf View Current DG User info."));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg asktojoin or /dg atj ยง7-ยงf Toggle ask to join ยงcRequires Discord Rich Presence enabled. (/dg -> Advanced)"));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg partymax [number] or /dg pm [number] ยง7-ยงf Sets partymax ยง7(maximum amount people in party, for discord rpc)"));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg pv [ign] ยง7-ยงf Profile Viewer"));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg pvall ยง7-ยงf Profile Viewer For all people on party"));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg purge ยง7-ยงf Purge api cache."));
- sender.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงe/dg saverun ยง7-ยงf Save run to be sent to developer."));
- }
- }
-
- private boolean openConfig = false;
-
- @SubscribeEvent
- public void onTick(TickEvent.ClientTickEvent e) {
- try {
- if (openConfig && e.phase == TickEvent.Phase.START ) {
- openConfig = false;
- Minecraft.getMinecraft().displayGuiScreen(new GuiConfigV2());
- }
- } catch (Throwable t) {
- t.printStackTrace();
- }
- }
-
- @Override
- public int getRequiredPermissionLevel() {
- return 0;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandReparty.java b/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandReparty.java
deleted file mode 100644
index 8df85529..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandReparty.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * 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.commands;
-
-import kr.syeyoung.dungeonsguide.chat.ChatProcessor;
-import kr.syeyoung.dungeonsguide.chat.PartyManager;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.client.Minecraft;
-import net.minecraft.command.CommandBase;
-import net.minecraft.command.ICommandSender;
-import net.minecraft.util.ChatComponentText;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import net.minecraftforge.fml.common.gameevent.TickEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-public class CommandReparty extends CommandBase {
- private String command;
- public CommandReparty() {
- command = FeatureRegistry.ETC_REPARTY.getParameter("command").getValue();
- command = command.replace(" ", "");
- }
-
- @Override
- public String getCommandName() {
- return command;
- }
-
- @Override
- public String getCommandUsage(ICommandSender sender) {
- return command;
- }
-
- @Override
- public void processCommand(ICommandSender sender, String[] args) {
- if (!requestReparty(false)) {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCurrently Repartying"));
- }
- }
-
- private boolean reparting = false;
-
-
- public boolean requestReparty(boolean noerror) {
- if (reparting) {
- return false;
- }
- reparting = true;
-
- PartyManager.INSTANCE.requestPartyList(pc -> {
- if (pc == null) {
- if (!noerror)
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcNot in Party"));
- reparting = false;
- return;
- }
- if (!pc.hasLeader(Minecraft.getMinecraft().getSession().getUsername())) {
- if (!noerror)
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcYou're not leader"));
- reparting = false;
- return;
- }
- if (pc.isSelfSolo()) {
- if (!noerror)
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcYou can not reparty yourself"));
- reparting = false;
- return;
- }
- String members = pc.getPartyRawMembers().stream().filter(a -> !a.equalsIgnoreCase(Minecraft.getMinecraft().getSession().getUsername())).collect(Collectors.joining(" "));
- String command = "/p invite "+members;
-
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงeDisbanding Party..."));
- ChatProcessor.INSTANCE.addToChatQueue("/p disband", () -> {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงeRunning invite command ยงf"+command));
- ChatProcessor.INSTANCE.addToChatQueue(command, () -> {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงeSuccessfully repartied!ยงf"));
-
- reparting = false;
- }, false);
- }, false);
- });
- return true;
- }
-
- @Override
- public int getRequiredPermissionLevel() {
- return 0;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/Config.java b/src/main/java/kr/syeyoung/dungeonsguide/config/Config.java
deleted file mode 100644
index f8d60424..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/Config.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.config;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-
-import java.io.*;
-
-public class Config {
- public static JsonObject configuration;
-
- public static File f;
-
- public static void loadConfig(File f) throws IOException {
- try {
- configuration = (JsonObject) new JsonParser().parse(new InputStreamReader(new FileInputStream(Config.f = f == null ? Config.f : f)));
- } catch (Exception e) {
- configuration = new JsonObject();
- }
- for (AbstractFeature feature : FeatureRegistry.getFeatureList()) {
- JsonObject object = configuration.getAsJsonObject(feature.getKey());
- if (object != null) feature.loadConfig(object);
- }
-
- saveConfig();
- }
-
- public static void saveConfig() throws IOException {
- for (AbstractFeature feature : FeatureRegistry.getFeatureList()) {
- JsonObject object = feature.saveConfig();
- configuration.add(feature.getKey(), object);
- }
-
- String str = new Gson().toJson(configuration);
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(f);
- BufferedWriter bos = new BufferedWriter(new OutputStreamWriter(fos));
- bos.write(str);
- bos.flush();
- } finally {
- fos.close();
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/ConfigPanelCreator.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/ConfigPanelCreator.java
deleted file mode 100644
index d02680bf..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/ConfigPanelCreator.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class ConfigPanelCreator implements Function {
- public static final ConfigPanelCreator INSTANCE = new ConfigPanelCreator();
-
- public static final Map> map = new HashMap>();
-
- @Nullable
- @Override
- public MPanel apply(@Nullable String input) {
- if (!map.containsKey(input)) return null;
- return map.get(input).get();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiConfigV2.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiConfigV2.java
deleted file mode 100644
index d1888283..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiConfigV2.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import kr.syeyoung.dungeonsguide.gui.MGui;
-import lombok.Getter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.util.MathHelper;
-
-import java.awt.*;
-
-public class GuiConfigV2 extends MGui {
-
- @Getter
- private RootConfigPanel rootConfigPanel;
-
- public GuiConfigV2() {
- rootConfigPanel = new RootConfigPanel(this);
- getMainPanel().add(rootConfigPanel);
- }
-
-
- @Override
- public void initGui() {
- super.initGui();
- int dw = Minecraft.getMinecraft().displayWidth;
- int dh = Minecraft.getMinecraft().displayHeight;
- int width = MathHelper.clamp_int(dw - 200, 1250, 1500), height = MathHelper.clamp_int(dh - 200, 600, 800);
- double scale = 2.0;
- if (dw <= width || dh <= height) {
- width = width/2; height = height/2;
- scale = 1.0;
- }
- rootConfigPanel.setBounds(new Rectangle((dw-width)/2, (dh-height)/2, width,height));
- rootConfigPanel.setScale(scale);
- }
-
- @Override
- public void drawScreen(int mouseX, int mouseY, float partialTicks) {
- super.drawDefaultBackground();
- super.drawScreen(mouseX, mouseY, partialTicks);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategory.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategory.java
deleted file mode 100644
index 77111fe7..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategory.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import kr.syeyoung.dungeonsguide.utils.cursor.EnumCursor;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.audio.PositionedSoundRecord;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.Gui;
-import net.minecraft.client.renderer.GlStateManager;
-import net.minecraft.util.ResourceLocation;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL14;
-
-import java.awt.*;
-
-public class MCategory extends MPanel {
-
- private NestedCategory nestedCategory;
- private RootConfigPanel rootConfigPanel;
- @Getter
- @Setter
- private Color hover = new Color(94, 94, 94, 255);
- public MCategory(NestedCategory nestedCategory, RootConfigPanel rootConfigPanel) {
- this.nestedCategory = nestedCategory;
- this.rootConfigPanel = rootConfigPanel;
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
- int border = RenderUtils.blendAlpha(0x141414, 0.12f);
- if (!rootConfigPanel.getSearchWord().isEmpty() && (nestedCategory.categoryName().toLowerCase().contains(rootConfigPanel.getSearchWord()))) {
- border = 0xFF02EE67;
- }
-
- Gui.drawRect(0,0,getBounds().width, getBounds().height,border);
- if (getBounds().height >= 28)
- Gui.drawRect(1,18,getBounds().width -1, getBounds().height-1, RenderUtils.blendAlpha(0x141414, 0.15f));
- Gui.drawRect(1,1,getBounds().width-1, 18, RenderUtils.blendAlpha(0x141414, 0.12f));
-
-
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- GlStateManager.pushMatrix();
- GlStateManager.translate(5,5,0);
- GlStateManager.scale(1.0,1.0,0);
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
-
- fr.drawString((lastAbsClip.contains(absMousex, absMousey) ? "ยงn" : "") + nestedCategory.categoryName(), 0,0, 0xFFFFFFFF);
- GlStateManager.popMatrix();
-
- fr.drawSplitString(FeatureRegistry.getCategoryDescription().getOrDefault(nestedCategory.categoryFull(), ""), 5, 23, getBounds().width -10, 0xFFBFBFBF);
- }
-
-
- @Override
- public Dimension getPreferredSize() {
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
-
- int descriptionHeight =
- FeatureRegistry.getCategoryDescription().containsKey(nestedCategory.categoryFull()) ?
- fr.listFormattedStringToWidth(FeatureRegistry.getCategoryDescription().get(nestedCategory.categoryFull()), Math.max(100, getBounds().width - 10)).size() * fr.FONT_HEIGHT
- : -9;
-
- return new Dimension(100, descriptionHeight + 28);
- }
-
- @Override
- public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) {
- if (lastAbsClip.contains(absMouseX, absMouseY)) {
- Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F));
- rootConfigPanel.setCurrentPageAndPushHistory(nestedCategory.categoryFull());
- }
- }
-
- @Override
- public void mouseMoved(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0) {
- if (lastAbsClip.contains(absMouseX, absMouseY))
- setCursor(EnumCursor.POINTING_HAND);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategoryElement.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategoryElement.java
deleted file mode 100644
index 22934fca..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MCategoryElement.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import kr.syeyoung.dungeonsguide.utils.cursor.EnumCursor;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.audio.PositionedSoundRecord;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.Gui;
-import net.minecraft.util.ResourceLocation;
-
-import java.awt.*;
-
-public class MCategoryElement extends MPanel {
- private String category;
- private Runnable onClick;
- private int leftPad = 0;
- private int offsetX;
- private RootConfigPanel rootConfigPanel;
- public MCategoryElement(String category, Runnable onClick, int leftPad, int offsetX, RootConfigPanel rooot) {
- this.category = category;
- this.onClick = onClick;
- this.leftPad = leftPad;
- this.offsetX = offsetX;
- this.rootConfigPanel = rooot;
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
- if (rootConfigPanel.getCurrentPage().equals(category)) {
- clip(0,scissor.y, Minecraft.getMinecraft().displayWidth, scissor.height);
- Gui.drawRect(leftPad - offsetX, 0, getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.13f));
- } else if (lastAbsClip.contains(absMousex, absMousey) && getTooltipsOpen() == 0) {
- clip(0,scissor.y, Minecraft.getMinecraft().displayWidth, scissor.height);
- Gui.drawRect(leftPad - offsetX, 0, getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.09f));
- }
- clip(scissor.x, scissor.y, scissor.width, scissor.height);
-
-
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- String name = category.substring(category.lastIndexOf(".")+1);
- fr.drawString(name, leftPad,2,-1);
-
- }
-
- @Override
- public Dimension getPreferredSize() {
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- return new Dimension(fr.getStringWidth(category.substring(category.lastIndexOf(".")+1)) + leftPad+10, fr.FONT_HEIGHT+4);
- }
-
- @Override
- public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) {
- if (!lastAbsClip.contains(absMouseX, absMouseY) || getTooltipsOpen() > 0) { return; }
- if (onClick != null) onClick.run();
- Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F));
-
- }
- @Override
- public void mouseMoved(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0) {
- if (lastAbsClip.contains(absMouseX, absMouseY))
- setCursor(EnumCursor.POINTING_HAND);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java
deleted file mode 100644
index 49f637a5..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeature.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig;
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.GuiFeature;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.gui.elements.MButton;
-import kr.syeyoung.dungeonsguide.gui.elements.MToggleButton;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.Gui;
-import net.minecraft.client.renderer.GlStateManager;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL14;
-
-import java.awt.*;
-import java.util.ArrayList;
-import java.util.List;
-
-public class MFeature extends MPanel {
-
- @Getter
- private final AbstractFeature feature;
-
- private final List addons = new ArrayList();
-
- @Getter @Setter
- private Color hover;
-
- private final RootConfigPanel panel;
-
- public MFeature(final AbstractFeature abstractFeature, final RootConfigPanel panel) {
- this.panel = panel;
- this.feature = abstractFeature;
-
- if (abstractFeature.isDisyllable()) {
- final MToggleButton mStringSelectionButton = new MToggleButton();
- mStringSelectionButton.setOnToggle(new Runnable() {
- @Override
- public void run() {
- boolean selected = mStringSelectionButton.isEnabled();
- feature.setEnabled(selected);
- }
- });
- mStringSelectionButton.setBackground(RenderUtils.blendAlpha(0x141414, 0.07f));
- addons.add(mStringSelectionButton);
- mStringSelectionButton.setEnabled(feature.isEnabled());
- mStringSelectionButton.setSize(new Dimension(40, 15));
- add(mStringSelectionButton);
- }
- if (abstractFeature.getParameters().size() != 0) {
- MButton button = new MButton();
- button.setText("Settings");
- button.setOnActionPerformed(new Runnable() {
- @Override
- public void run() {
- panel.setCurrentPageAndPushHistory(abstractFeature.getEditRoute(panel));
- }
- });
- button.setBackground(RenderUtils.blendAlpha(0x141414, 0.07f));
- button.setClicked(RenderUtils.blendAlpha(0x141414, 0.17f));
- button.setHover(RenderUtils.blendAlpha(0x141414, 0.17f));
- addons.add(button);
- button.setSize(new Dimension(50, 15));
- add(button);
- }
- if (abstractFeature instanceof GuiFeature) {
- MButton button = new MButton();
- button.setText("Relocate");
- button.setOnActionPerformed(new Runnable() {
- @Override
- public void run() {
- Minecraft.getMinecraft().displayGuiScreen(new GuiGuiLocationConfig(Minecraft.getMinecraft().currentScreen, abstractFeature));
- button.setIsclicked(false);
- }
- });
- button.setBackground(RenderUtils.blendAlpha(0x141414, 0.07f));
- button.setClicked(RenderUtils.blendAlpha(0x141414, 0.17f));
- button.setHover(RenderUtils.blendAlpha(0x141414, 0.17f));
- addons.add(button);
- button.setSize(new Dimension(75, 15));
- add(button);
- }
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
-
- int border = RenderUtils.blendAlpha(0x141414, 0.12f);
- if (!panel.getSearchWord().isEmpty() && (feature.getName().toLowerCase().contains(panel.getSearchWord()) || feature.getDescription().toLowerCase().contains(panel.getSearchWord()))) {
- border = 0xFF02EE67;
- }
-
- Gui.drawRect(0,0,getBounds().width, getBounds().height,border);
- Gui.drawRect(1,18,getBounds().width -1, getBounds().height-1, RenderUtils.blendAlpha(0x141414, 0.15f));
- Gui.drawRect(1,1,getBounds().width-1, 18, RenderUtils.blendAlpha(0x141414, 0.12f));
-
-
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- GlStateManager.pushMatrix();
- GlStateManager.translate(5,5,0);
- GlStateManager.scale(1.0,1.0,0);
- GlStateManager.enableBlend();
- GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
- fr.drawString(feature.getName(), 0,0, 0xFFFFFFFF);
- GlStateManager.popMatrix();
-
- fr.drawSplitString(feature.getDescription(), 5, 23, getBounds().width -10, 0xFFBFBFBF);
- }
-
- @Override
- public void resize(int parentWidth, int parentHeight) {
- this.setSize(new Dimension(parentWidth, getBounds().height));
- }
-
- @Override
- public Dimension getPreferredSize() {
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- int descriptionHeight = fr.listFormattedStringToWidth(feature.getDescription(), Math.max(100, getBounds().width - 10)).size() * fr.FONT_HEIGHT;
-
- return new Dimension(100, descriptionHeight + 28);
- }
-
- @Override
- public void onBoundsUpdate() {
- int x = getBounds().width - 5;
- for (MPanel panel : addons) {
- panel.setBounds(new Rectangle(x - panel.getPreferredSize().width, 3, panel.getPreferredSize().width, 12));
- x -= panel.getPreferredSize().width + 5;
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeatureEdit.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeatureEdit.java
deleted file mode 100644
index f2ee35bc..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MFeatureEdit.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.FeatureParameter;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.gui.elements.MButton;
-import kr.syeyoung.dungeonsguide.gui.elements.MList;
-import kr.syeyoung.dungeonsguide.gui.elements.MModalConfirmation;
-
-import java.awt.*;
-import java.util.HashMap;
-import java.util.Map;
-
-public class MFeatureEdit extends MPanel {
- private MList list;
- private MButton goBack, resetToDefault;
- private RootConfigPanel rootConfigPanel;
- private AbstractFeature abstractFeature;
-
- private Map parameterEdits = new HashMap<>();
-
- public MFeatureEdit(AbstractFeature abstractFeature, RootConfigPanel rootConfigPanel) {
- this.abstractFeature = abstractFeature;
- this.rootConfigPanel = rootConfigPanel;
- list = new MList();
- list.setGap(5);
- list.setDrawLine(false);
- add(list);
-
- goBack = new MButton();
- goBack.setText("< Go Back");
- goBack.setOnActionPerformed(rootConfigPanel::goBack);
- add(goBack);
- resetToDefault = new MButton();
- resetToDefault.setText("Reset To Default");
- resetToDefault.setForeground(Color.red);
- resetToDefault.setOnActionPerformed(() -> {
- openResetConfirmation();
- });
- add(resetToDefault);
- }
-
- public void openResetConfirmation() {
- MModalConfirmation mModal = new MModalConfirmation("Are you sure?",
- "Resetting to default will reset your configuration for the selected feature to default",
- () -> {
- for (FeatureParameter parameter : abstractFeature.getParameters()) {
- parameter.setToDefault();
- }
- abstractFeature.onParameterReset();
- rootConfigPanel.invalidatePage(abstractFeature.getEditRoute(rootConfigPanel));
- }, () -> {});
- mModal.setScale(getScale());
- mModal.getYes().setBorder(0xFFFF0000);
- mModal.getYes().setText("Yes, Reset it");
- mModal.getNo().setText("Cancel");
- mModal.open(MFeatureEdit.this);
- }
-
- public void addParameterEdit(String name, MPanel paramEdit) {
- parameterEdits.put(name, paramEdit);
- list.add(paramEdit);
- }
- public MPanel removeParameterEdit(String name) {
- MPanel panel = parameterEdits.remove(name);
- list.remove(panel);
- return panel;
- }
-
- @Override
- public void resize(int parentWidth, int parentHeight) {
- super.resize(parentWidth, parentHeight);
- setBounds(new Rectangle(0,0,parentWidth,parentHeight));
- Dimension prefSize = getPreferredSize();
- int hei = prefSize.height;
- setBounds(new Rectangle(0,0,parentWidth,hei));
- }
-
- @Override
- public void setBounds(Rectangle bounds) {
- super.setBounds(bounds);
- goBack.setBounds(new Rectangle(5,5,75,15));
- resetToDefault.setBounds(new Rectangle(bounds.width - 105, 5, 100, 15));
-
- list.setBounds(new Rectangle(5,25,bounds.width - 10, bounds.height - 10));
- list.realignChildren();
-
- }
-
- @Override
- public Dimension getPreferredSize() {
- Dimension listPref = list.getPreferredSize();
- return new Dimension(listPref.width + 10, listPref.height + 30);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MNotFound.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MNotFound.java
deleted file mode 100644
index ef885487..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MNotFound.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.Gui;
-import org.lwjgl.opengl.GL11;
-
-import java.awt.*;
-
-public class MNotFound extends MPanel {
- @Override
- public void resize(int parentWidth, int parentHeight) {
- setBounds(new Rectangle(0,0,parentWidth,parentHeight));
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- fr.drawString("404 Not Found", (getBounds().width - fr.getStringWidth("404 Not Found")) / 2, (getBounds().height - fr.FONT_HEIGHT) / 2, -1);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MPanelCategory.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MPanelCategory.java
deleted file mode 100644
index e2388c60..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MPanelCategory.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.gui.elements.MList;
-
-import java.awt.*;
-
-public class MPanelCategory extends MPanel {
-
- private NestedCategory key;
- private RootConfigPanel rootConfigPanel;
-
- private MList list;
-
- public MPanelCategory(NestedCategory nestedCategory, RootConfigPanel rootConfigPanel) {
- this.key = nestedCategory;
- this.rootConfigPanel = rootConfigPanel;
-
- list = new MList();
- list.setDrawLine(false);
- list.setGap(5);
- add(list);
-
- for (NestedCategory value : nestedCategory.children().values()) {
- list.add(new MCategory(value, rootConfigPanel));
- }
- if (nestedCategory.parent() != null) {
- String actualCategory = nestedCategory.categoryFull().substring(5);
- if (FeatureRegistry.getFeaturesByCategory().containsKey(actualCategory))
- for (AbstractFeature abstractFeature : FeatureRegistry.getFeaturesByCategory().get(actualCategory)) {
- MFeature mFeature = new MFeature(abstractFeature, rootConfigPanel);
- list.add(mFeature);
- mFeature.setHover(new Color(94, 94, 94, 255));
- }
- }
- list.realignChildren();
-
- }
-
- @Override
- public void resize(int parentWidth, int parentHeight) {
- super.resize(parentWidth, parentHeight);
- setBounds(new Rectangle(0,0,parentWidth,parentHeight));
- Dimension prefSize = getPreferredSize();
- int hei = prefSize.height;
- setBounds(new Rectangle(0,0,parentWidth,hei));
- }
-
- @Override
- public void setBounds(Rectangle bounds) {
- super.setBounds(bounds);
- list.setBounds(new Rectangle(5,5,bounds.width- 10, bounds.height - 10));
- list.realignChildren();
- }
-
- @Override
- public Dimension getPreferredSize() {
- Dimension prefSize = list.getPreferredSize();
- int wid = prefSize.width + 10;
- int hei = prefSize.height + 10;
- return new Dimension(wid, hei);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MParameterEdit.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MParameterEdit.java
deleted file mode 100644
index 6f791bcf..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/MParameterEdit.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import com.google.common.base.Predicates;
-import kr.syeyoung.dungeonsguide.config.types.AColor;
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.FeatureParameter;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.gui.elements.*;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.Gui;
-
-import java.awt.*;
-import java.util.function.Predicate;
-
-public class MParameterEdit extends MPanel {
- private AbstractFeature abstractFeature;
- private FeatureParameter featureParameter;
- private RootConfigPanel rootConfigPanel;
- private MPanel valueEditHolder;
- private MPanel valueEdit;
-
- private Predicate isDisabled ;
-
- public MParameterEdit(AbstractFeature abstractFeature, FeatureParameter parameter, RootConfigPanel rootConfigPanel) {
- this(abstractFeature, parameter, rootConfigPanel, (a) -> false);
- }
-
- public MParameterEdit(AbstractFeature abstractFeature, FeatureParameter parameter, RootConfigPanel rootConfigPanel, Predicate isDisabled ) {
- this.abstractFeature = abstractFeature;
- this.featureParameter = parameter;
- this.rootConfigPanel = rootConfigPanel;
- this.isDisabled = isDisabled;
-
- if (parameter.getValue_type().equals("string")) {
- valueEdit = new MTextField() {
- @Override
- public void edit(String str) {
- parameter.setValue(str);
- }
- };
- ((MTextField)valueEdit).setText((String) parameter.getValue());
- } else if (parameter.getValue_type().equals("integer")) {
- valueEdit = new MIntegerSelectionButton((Integer) parameter.getValue());
- ((MIntegerSelectionButton)valueEdit).setOnUpdate(() -> {
- parameter.setValue(((MIntegerSelectionButton) valueEdit).getData());
- });
- } else if (parameter.getValue_type().equals("float")) {
- valueEdit = new MFloatSelectionButton((Float) parameter.getValue());
- ((MFloatSelectionButton)valueEdit).setOnUpdate(() -> {
- parameter.setValue(((MFloatSelectionButton) valueEdit).getData());
- });
- } else if (parameter.getValue_type().equals("acolor")) {
- valueEdit = new MEditableAColor();
- ((MEditableAColor)valueEdit).setColor((AColor) parameter.getValue());
- ((MEditableAColor)valueEdit).setEnableEdit(true);
- ((MEditableAColor)valueEdit).setOnUpdate(() -> {
- parameter.setValue(((MEditableAColor) valueEdit).getColor());
- });
- } else if (parameter.getValue_type().equals("color")) {
- valueEdit = new MEditableAColor();
- ((MEditableAColor)valueEdit).setColor(new AColor(((Color) parameter.getValue()).getRGB(), true));
- ((MEditableAColor)valueEdit).setEnableEdit(true);
- ((MEditableAColor)valueEdit).setOnUpdate(() -> {
- parameter.setValue(((MEditableAColor) valueEdit).getColor());
- });
- } else if (parameter.getValue_type().equals("boolean")) {
- valueEdit = new MToggleButton();
- ((MToggleButton)valueEdit).setEnabled((Boolean) parameter.getValue());
- ((MToggleButton)valueEdit).setOnToggle(() -> {
- parameter.setValue(((MToggleButton) valueEdit).isEnabled());
- });
- } else if (parameter.getValue_type().equals("keybind")) {
- valueEdit = new MKeyEditButton();
- ((MKeyEditButton)valueEdit).setKey((Integer) parameter.getValue());
- ((MKeyEditButton)valueEdit).setOnKeyEdit(() -> {
- parameter.setValue(((MKeyEditButton) valueEdit).getKey());
- });
- ((MKeyEditButton)valueEdit).setBorder(RenderUtils.blendTwoColors(0xFF141414,0x7702EE67));
- }else {
- valueEdit = new MLabel();
- ((MLabel)valueEdit).setText("????");
- }
-
-
- valueEditHolder = new MPanel() {
- @Override
- public void setBounds(Rectangle bounds) {
- super.setBounds(bounds);
- Dimension dimension = valueEdit.getPreferredSize();
- if (dimension.width <= 0) dimension.width = bounds.width/2;
- if (dimension.height <= 0) dimension.height = bounds.height/2;
- valueEdit.setBounds(new Rectangle((bounds.width - dimension.width)/2,(bounds.height - dimension.height)/2,dimension.width, dimension.height));
- }
- };
- add(valueEditHolder);
- valueEditHolder.add(valueEdit);
- }
- public MParameterEdit(AbstractFeature abstractFeature, FeatureParameter parameter, RootConfigPanel rootConfigPanel, MPanel valueEdit, Predicate isDisabled) {
- this.abstractFeature = abstractFeature;
- this.featureParameter = parameter;
- this.rootConfigPanel = rootConfigPanel;
- this.isDisabled = isDisabled;
-
-
- valueEditHolder = new MPanel() {
- @Override
- public void setBounds(Rectangle bounds) {
- super.setBounds(bounds);
- Dimension dimension = valueEdit.getPreferredSize();
- if (dimension.width <= 0) dimension.width = bounds.width/2;
- if (dimension.height <= 0) dimension.height = bounds.height/2;
- valueEdit.setBounds(new Rectangle((bounds.width - dimension.width)/2,(bounds.height - dimension.height)/2,dimension.width, dimension.height));
- }
- };
- add(valueEditHolder);
- valueEditHolder.add(valueEdit);
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
- Gui.drawRect(0,0,getBounds().width, getBounds().height, RenderUtils.blendAlpha(0x141414, 0.12f));
- Gui.drawRect(2*bounds.width / 3,1,getBounds().width -1, getBounds().height-1, RenderUtils.blendAlpha(0x141414, 0.15f));
- Gui.drawRect(4, 15,2*bounds.width / 3-5, 16, RenderUtils.blendAlpha(0x141414, 0.3f));
-
-
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- fr.drawString(featureParameter.getName(), 5,5, 0xFFFFFFFF);
- fr.drawSplitString(featureParameter.getDescription(), 5,18, 2*bounds.width /3-10, 0xFFAAAAAA);
-
- }
-
- @Override
- public void render0(double scale, Point parentPoint, Rectangle parentClip, int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks) {
- super.render0(scale, parentPoint, parentClip, absMousex, absMousey, relMousex0, relMousey0, partialTicks);
- if (isDisabled.test(featureParameter)) {
- Gui.drawRect(0,0, getBounds().width, getBounds().height, 0x55000000);
- }
- }
-
- @Override
- public Dimension getPreferredSize() {
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- int descriptionHeight = fr.listFormattedStringToWidth(featureParameter.getDescription(), Math.max(50, 2*bounds.width/3-10)).size() * fr.FONT_HEIGHT;
- return new Dimension(100, Math.max(30, descriptionHeight + 23));
- }
-
- @Override
- public void setBounds(Rectangle bounds) {
- super.setBounds(bounds);
- valueEditHolder.setBounds(new Rectangle(2*bounds.width / 3, 0, bounds.width / 3, bounds.height));
- }
-
- @Override
- public void keyPressed0(char typedChar, int keyCode) {
- if (isDisabled.test(featureParameter)) return;
- super.keyPressed0(typedChar, keyCode);
- }
-
- @Override
- public void keyHeld0(char typedChar, int keyCode) {
- if (isDisabled.test(featureParameter)) return;
- super.keyHeld0(typedChar, keyCode);
- }
-
- @Override
- public void keyReleased0(char typedChar, int keyCode) {
- if (isDisabled.test(featureParameter)) return;
- super.keyReleased0(typedChar, keyCode);
- }
-
- @Override
- public boolean mouseClicked0(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0, int mouseButton) {
- if (isDisabled.test(featureParameter)) return false;
- return super.mouseClicked0(absMouseX, absMouseY, relMouseX0, relMouseY0, mouseButton);
- }
-
- @Override
- public void mouseReleased0(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0, int state) {
- if (isDisabled.test(featureParameter)) return ;
- super.mouseReleased0(absMouseX, absMouseY, relMouseX0, relMouseY0, state);
- }
-
- @Override
- public void mouseClickMove0(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0, int clickedMouseButton, long timeSinceLastClick) {
- if (isDisabled.test(featureParameter)) return ;
- super.mouseClickMove0(absMouseX, absMouseY, relMouseX0, relMouseY0, clickedMouseButton, timeSinceLastClick);
- }
-
- @Override
- public void mouseScrolled0(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0, int scrollAmount) {
- if (isDisabled.test(featureParameter)) return ;
- super.mouseScrolled0(absMouseX, absMouseY, relMouseX0, relMouseY0, scrollAmount);
- }
-
- @Override
- public void mouseMoved0(int absMouseX, int absMouseY, int relMouseX0, int relMouseY0) {
- if (isDisabled.test(featureParameter)) return ;
- super.mouseMoved0(absMouseX, absMouseY, relMouseX0, relMouseY0);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/NestedCategory.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/NestedCategory.java
deleted file mode 100644
index a4812fb7..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/NestedCategory.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import lombok.experimental.Accessors;
-
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-@Data
-@Accessors(chain = true, fluent = true)
-public
-class NestedCategory {
- private final String categoryFull;
- @EqualsAndHashCode.Exclude
- private String categoryName;
- @EqualsAndHashCode.Exclude
- @ToString.Exclude
- private NestedCategory parent;
-
- public NestedCategory(String categoryFull) {
- this.categoryFull = categoryFull;
- this.categoryName = categoryFull.substring(categoryFull.lastIndexOf(".") + 1);
- }
-
- @EqualsAndHashCode.Exclude
- @ToString.Exclude
- private Map children = new LinkedHashMap<>();
-
- public NestedCategory child(NestedCategory child) {
- this.children.put(child.categoryName, child);
- child.parent = this;
- return this;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/RootConfigPanel.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/RootConfigPanel.java
deleted file mode 100644
index 1827d766..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/RootConfigPanel.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * 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.config.guiconfig;
-
-import com.google.common.base.Function;
-import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig;
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.gui.elements.*;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.Gui;
-
-import java.awt.*;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-
-public class RootConfigPanel extends MPanelScaledGUI {
- private MScrollablePanel navigationScroll;
-
- private MList navigation = new MList();
-
- private MScrollablePanel contentScroll;
-
-
- private final Map pages = new HashMap();
- @Getter
- @Setter
- private Function pageGenerator = ConfigPanelCreator.INSTANCE;
- @Getter
- private String currentPage = "";
-
- private GuiConfigV2 gui;
-
- private long lastPageSet = System.currentTimeMillis();
-
- private MTextField search;
- private MButton guiRelocate;
-
- private MButton github, discord;
-
- private final Stack history = new Stack();
-
- public String getSearchWord() {
- return search.getText().trim().toLowerCase();
- }
-
- public RootConfigPanel(GuiConfigV2 guiConfigV2) {
- this.gui = guiConfigV2;
-
- search = new MTextField() {
- @Override
- public void edit(String str) {
- setupNavigation();
-
- setCurrentPageAndPushHistory("");
- if (!categoryMap.containsKey(lastOpenCategory)) {
- for (Map.Entry nestedCategoryMPanelEntry : categoryMap.entrySet()) {
- if (nestedCategoryMPanelEntry.getValue() instanceof MCategoryElement) {
- setCurrentPageAndPushHistory(nestedCategoryMPanelEntry.getKey().categoryFull());
- lastOpenCategory = nestedCategoryMPanelEntry.getKey();
- break;
- }
- }
- }
- for (Map.Entry nestedCategoryMPanelEntry : categoryMap.entrySet()) {
- if (nestedCategoryMPanelEntry.getValue() instanceof MCollapsable) {
- ((MCollapsable) nestedCategoryMPanelEntry.getValue()).setCollapsed(false);
- }
- }
- rePlaceElements();
- }
- };
- search.setPlaceHolder("Search...");
- add(search);
- guiRelocate = new MButton();
- guiRelocate.setText("Edit Gui Locations");
- guiRelocate.setOnActionPerformed(() -> {
- Minecraft.getMinecraft().displayGuiScreen(new GuiGuiLocationConfig(gui, null));
- guiRelocate.setIsclicked(false);
- });
- guiRelocate.setBorder(RenderUtils.blendTwoColors(0xFF141414,0x7702EE67));
- add(guiRelocate);
-
- discord = new MButton(); github = new MButton();
- discord.setText("Discord"); github.setText("Github");
- discord.setBorder(RenderUtils.blendTwoColors(0xFF141414,0x7702EE67));
- github.setBorder(RenderUtils.blendTwoColors(0xFF141414,0x7702EE67));
- github.setOnActionPerformed(() -> {
- try {
- Desktop.getDesktop().browse(new URI("https://github.com/Dungeons-Guide/Skyblock-Dungeons-Guide/"));
- } catch (IOException | URISyntaxException e) {
- e.printStackTrace();
- }
- });
- discord.setOnActionPerformed(() -> {
- try {
- Desktop.getDesktop().browse(new URI("https://discord.gg/VuxayCWGE8"));
- } catch (IOException | URISyntaxException e) {
- e.printStackTrace();
- }
- });
- add(discord); add(github);
-
- navigationScroll = new MScrollablePanel(1);
- navigationScroll.setHideScrollBarWhenNotNecessary(false);
-
-
- add(navigationScroll);
- navigationScroll.add(navigation);
-
- contentScroll = new MScrollablePanel(3);
- contentScroll.setHideScrollBarWhenNotNecessary(true);
- add(contentScroll);
-
- setupNavigation();
- navigation.setGap(0);
- navigation.setDrawLine(false);
-
- setCurrentPageAndPushHistory("ROOT");
- rePlaceElements();
-
- search.setFocused(true);
- }
-
-
- private Map categoryMap = new HashMap<>();
- private NestedCategory lastOpenCategory;
- private void setupNavigation() {
- categoryMap.clear();
- for (MPanel childComponent : navigation.getChildComponents()) {
- navigation.remove(childComponent);
- }
- NestedCategory root = new NestedCategory("ROOT");
- Set categoryAllowed = new HashSet<>();
- String search = this.search.getText().trim().toLowerCase();
- for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) {
- if (search.isEmpty()) {
- categoryAllowed.add("ROOT."+abstractFeature.getCategory()+".");
- } else if (abstractFeature.getName().toLowerCase().contains(search)) {
- categoryAllowed.add("ROOT."+abstractFeature.getCategory()+".");
- } else if (abstractFeature.getDescription().toLowerCase().contains(search)) {
- categoryAllowed.add("ROOT."+abstractFeature.getCategory()+".");
- }
- }
- for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) {
- String category = abstractFeature.getCategory();
- boolean test =false;
- for (String s : categoryAllowed) {
- if (s.startsWith("ROOT."+category+".")) {
- test = true;
- break;
- }
- }
- if (!test) continue;
-
- NestedCategory currentRoot = root;
- for (String s : category.split("\\.")) {
- NestedCategory finalCurrentRoot = currentRoot;
- if (currentRoot.children().containsKey(s))
- currentRoot = currentRoot.children().get(s);
- else {
- currentRoot.child(currentRoot = new NestedCategory(finalCurrentRoot.categoryFull()+"."+s));
- }
- }
-
- }
-
- for (NestedCategory value : root.children().values()) {
- setupNavigationRecursive(value, navigation, 0, 17);
- }
- ConfigPanelCreator.map.put("ROOT", () -> new MPanelCategory(root, this));
- }
- private void setupNavigationRecursive(NestedCategory nestedCategory, MPanel parent, int depth, int offset) {
- ConfigPanelCreator.map.put(nestedCategory.categoryFull(), () -> new MPanelCategory(nestedCategory, this));
-
- if (nestedCategory.children().size() == 0) {
- MCategoryElement current = new MCategoryElement(nestedCategory.categoryFull(),() -> {
- setCurrentPageAndPushHistory(nestedCategory.categoryFull());
- lastOpenCategory = nestedCategory;
- }, 13 * depth + 17, offset, this);
- parent.add(current);
- categoryMap.put(nestedCategory, current);
- } else {
- MCategoryElement current = new MCategoryElement(nestedCategory.categoryFull(),() -> {
- setCurrentPageAndPushHistory(nestedCategory.categoryFull());
- lastOpenCategory = nestedCategory;
- }, 3,offset, this);
- MCollapsable mCollapsable = new MCollapsable(current, this::rePlaceElements);
- mCollapsable.setLeftPad(offset-13);
- mCollapsable.getLowerElements().setDrawLine(false);
- mCollapsable.getLowerElements().setGap(0);
- mCollapsable.setLeftPadElements(0);
- parent.add(mCollapsable);
- categoryMap.put(nestedCategory, mCollapsable);
-
- for (NestedCategory value : nestedCategory.children().values()) {
- setupNavigationRecursive(value, mCollapsable, depth+1, offset+13);
- }
- }
- }
-
-
- public void setCurrentPageAndPushHistory(String currentPage) {
- if (!this.currentPage.equals(currentPage))
- history.push(this.currentPage);
- lastOpenCategory = null;
- this.currentPage = currentPage;
- setupPage();
- }
- public void goBack() {
- if (history.size() == 0) return;
- this.currentPage = history.pop();
- setupPage();
- }
-
- private void setupPage() {
- contentScroll.getContentArea().getChildComponents().forEach(contentScroll.getContentArea()::remove);
- if (!pages.containsKey(currentPage)) {
- MPanel page = pageGenerator.apply(currentPage);
- if (page == null) page = new MNotFound();
- pages.put(currentPage, page);
- }
- contentScroll.getContentArea().add(pages.get(currentPage));
- rePlaceElements();
- }
-
- public void invalidatePage(String page) {
- pages.remove(page);
- if (page.equals(currentPage))
- setupPage();
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
- Dimension effectiveDim = getEffectiveDimension();
- Gui.drawRect(0,0, (int) (effectiveDim.width), (int) (effectiveDim.height), RenderUtils.blendAlpha(0x141414, 0.00f));
- Gui.drawRect(0,0, (int) (effectiveDim.width), 25, RenderUtils.blendAlpha(0x0, 0.20f));
-// Gui.drawRect(navigationScroll.getBounds().x + navigationScroll.getBounds().width - 10, 25, navigationScroll.getBounds().x + navigationScroll.getBounds().width , 50, RenderUtils.blendAlpha(0xFF141414, 0.04f));
- Gui.drawRect(0, 25,navigationScroll.getBounds().x + navigationScroll.getBounds().width , 50, RenderUtils.blendAlpha(0xFF141414, 0.08f));
-
-
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- fr.drawString("DungeonsGuide By syeyoung", (effectiveDim.width - fr.getStringWidth("DungeonsGuide By syeyoung"))/2, (25 - fr.FONT_HEIGHT)/2, 0xFF02EE67);
- }
-
- @Override
- public void render0(double parentScale, Point parentPoint, Rectangle parentClip, int absMousex0, int absMousey0, int relMousex0, int relMousey0, float partialTicks) {
- super.render0(parentScale, parentPoint, parentClip, absMousex0, absMousey0, relMousex0, relMousey0, partialTicks);
- Dimension effectiveDim = getEffectiveDimension();
- Gui.drawRect(0,24, (int) (Double.min(1, (System.currentTimeMillis() - lastPageSet)/1000.0) * effectiveDim.width), 25, 0xFF02EE67);
- }
-
- @Override
- public void setBounds(Rectangle bounds) {
- super.setBounds(bounds);
- rePlaceElements();
- }
-
- @Override
- public void setScale(double scale) {
- super.setScale(scale);
- rePlaceElements();
- }
-
- private void rePlaceElements() {
- Dimension effectiveDim = getEffectiveDimension();
-
- navigation.setBounds(new Rectangle(new Point(0,1), new Dimension(Math.max(100, Math.max(navigation.getPreferredSize().width, navigationScroll.getBounds().width-10)), navigation.getPreferredSize().height)));
- navigation.realignChildren();
-
- navigationScroll.evalulateContentArea();
- Rectangle navBound;
- navigationScroll.setBounds(navBound = new Rectangle(0,50, navigation.getBounds().width+10, effectiveDim.height-50));
- contentScroll.setBounds(new Rectangle(navBound.x + navBound.width, 25, effectiveDim.width - navBound.x - navBound.width, effectiveDim.height-25));
-
- search.setBounds(new Rectangle(5,30,navBound.x + navBound.width - 10,15));
-
- guiRelocate.setBounds(new Rectangle(5,5,100,15));
- github.setBounds(new Rectangle(effectiveDim.width - 80,5,75,15));
- discord.setBounds(new Rectangle(effectiveDim.width - 160,5,75,15));
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java
deleted file mode 100755
index 48c046c3..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/GuiGuiLocationConfig.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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.config.guiconfig.location;
-
-import kr.syeyoung.dungeonsguide.features.AbstractFeature;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.features.GuiFeature;
-import kr.syeyoung.dungeonsguide.gui.MGui;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import lombok.Getter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.GuiScreen;
-import net.minecraft.client.gui.ScaledResolution;
-import net.minecraft.client.renderer.GlStateManager;
-import net.minecraft.util.Vec3;
-import org.lwjgl.opengl.GL11;
-
-import java.awt.*;
-import java.io.IOException;
-import java.util.*;
-import java.util.List;
-
-public class GuiGuiLocationConfig extends MGui {
-
- @Getter
- private final GuiScreen before;
-
- @Getter
- private TreeMap> markerTreeMapByX = new TreeMap<>();
- @Getter
- private TreeMap> markerTreeMapByY = new TreeMap<>();
- @Getter
- private Set markerSet = new HashSet<>();
-
-
- Marker[] markers = new Marker[4];
-
-
- public GuiGuiLocationConfig(final GuiScreen before, AbstractFeature featureWhitelist) {
- this.before = before;
- for (AbstractFeature feature : FeatureRegistry.getFeatureList()) {
- if (feature instanceof GuiFeature && feature.isEnabled()) {
- getMainPanel().add(new PanelDelegate((GuiFeature) feature, featureWhitelist == null || feature == featureWhitelist, this));
- }
- }
-
- getMainPanel().setBackgroundColor(new Color(0,0,0, 100));
- }
-
- public static final Vec3[] facing = new Vec3[] {
- new Vec3(0, 0.5, 2),
- new Vec3(0.5, 0, 1),
- new Vec3(0.5, 1, 3),
- new Vec3(1, 0.5, 4),
- };
-
- public void removeAndAddMarker(Marker prev, Marker newM) {
- if (prev != null) {
- markerTreeMapByX.computeIfPresent(prev.getX(),(k,v) -> {
- v.remove(prev);
- if (v.isEmpty()) return null;
- else return v;
- });
- markerTreeMapByY.computeIfPresent(prev.getY(),(k,v) -> {
- v.remove(prev);
- if (v.isEmpty()) return null;
- else return v;
- });
- markerSet.remove(prev);
- }
- if (newM != null) {
- markerTreeMapByX.compute(newM.getX(), (k,v) -> {
- if (v == null) {
- return new ArrayList<>(Arrays.asList(newM));
- } else {
- v.add(newM);
- return v;
- }
- });
- markerTreeMapByY.compute(newM.getY(), (k,v) -> {
- if (v == null) {
- return new ArrayList<>(Arrays.asList(newM));
- } else {
- v.add(newM);
- return v;
- }
- });
- markerSet.add(newM);
- }
- }
-
- public void setupMarkers() {
- for (int i1 = 0; i1 < markers.length; i1++) {
- Marker orig = markers[i1];
- Vec3 pt = facing[i1];
- markers[i1] = new Marker((int) (pt.xCoord * getMainPanel().getBounds().width), (int) (pt.yCoord * getMainPanel().getBounds().height), (int) pt.zCoord, this);
-
- removeAndAddMarker(orig, markers[i1]);
- }
- }
-
- @Override
- public void drawScreen(int mouseX, int mouseY, float partialTicks) {
- GlStateManager.pushMatrix();
- ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
- GlStateManager.translate(scaledResolution.getScaledWidth()/2, scaledResolution.getScaledHeight()/2, 0);
- FontRenderer fr = Minecraft.getMinecraft().fontRendererObj;
- GlStateManager.enableBlend();
- GlStateManager.enableAlpha();
- GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0);
- GlStateManager.color(1, 1, 1, 1);
- fr.drawString("Right Click On Elements to Open Popup Menu",
- -fr.getStringWidth("Right Click On Elements to Open Popup Menu")/2
- ,-fr.FONT_HEIGHT/2, -1);
- GlStateManager.popMatrix();
- super.drawScreen(mouseX, mouseY, partialTicks);
- }
-
- @Override
- public void keyTyped(char typedChar, int keyCode) throws IOException {
- try {
- getMainPanel().keyPressed0(typedChar, keyCode);
-
- if (keyCode == 1) {
- Minecraft.getMinecraft().displayGuiScreen(before);
- }
- } catch (Throwable e) {
- if (!e.getMessage().contains("hack to stop"))
- e.printStackTrace();
- }
- }
-
- @Override
- public void initGui() {
- super.initGui();
- getMainPanel().setBounds(new Rectangle(0,0,Minecraft.getMinecraft().displayWidth,Minecraft.getMinecraft().displayHeight));
- markerTreeMapByX.clear();
- markerTreeMapByY.clear();
- markerSet.clear();
- setupMarkers();
- for (MPanel childComponent : getMainPanel().getChildComponents()) {
- if (childComponent instanceof PanelDelegate) {
- ((PanelDelegate) childComponent).rebuildMarker();
- }
- }
-
- }
-
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/Marker.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/Marker.java
deleted file mode 100644
index 7a0b9c58..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/Marker.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.config.guiconfig.location;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.ToString;
-
-@Getter
-@ToString
-@AllArgsConstructor
-public class Marker {
- private final int x;
- private final int y;
- /**
- * 0xABCDEFGH
- * A: ?
- * B: ?
- * C: ?
- * D: ?
- * EF: 0~3 (TC 0x00 CL 0x01 BC 0x10 CR 0x11)
- */
- private final int type;
- private final Object parent;
-
- public int distanceSQ(Marker m2) {
- return (m2.x - x)*(m2.x - x) + (m2.y - y)*(m2.y - y);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/PanelDelegate.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/PanelDelegate.java
deleted file mode 100644
index d34eb6c1..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/location/PanelDelegate.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * 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.config.guiconfig.location;
-
-import kr.syeyoung.dungeonsguide.config.guiconfig.location.GuiGuiLocationConfig;
-import kr.syeyoung.dungeonsguide.config.guiconfig.location.Marker;
-import kr.syeyoung.dungeonsguide.config.types.GUIRectangle;
-import kr.syeyoung.dungeonsguide.features.GuiFeature;
-import kr.syeyoung.dungeonsguide.gui.MPanel;
-import kr.syeyoung.dungeonsguide.gui.elements.MPopupMenu;
-import kr.syeyoung.dungeonsguide.gui.elements.MTooltip;
-import kr.syeyoung.dungeonsguide.utils.cursor.EnumCursor;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.Gui;
-import net.minecraft.client.gui.ScaledResolution;
-import net.minecraft.client.renderer.GlStateManager;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.WorldRenderer;
-import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
-import net.minecraft.util.EnumFacing;
-import net.minecraft.util.Tuple;
-import net.minecraft.util.Vec3;
-import org.lwjgl.opengl.GL11;
-
-import java.awt.*;
-import java.util.*;
-import java.util.List;
-
-public class PanelDelegate extends MPanel {
- private final GuiFeature guiFeature;
- private boolean draggable = false;
- private GuiGuiLocationConfig guiGuiLocationConfig;
-
- private Set markerSet = new HashSet<>();
- public PanelDelegate(GuiFeature guiFeature, boolean draggable, GuiGuiLocationConfig guiGuiLocationConfig) {
- this.guiFeature = guiFeature;
- this.draggable = draggable;
- this.guiGuiLocationConfig = guiGuiLocationConfig;
- }
-
- public void rebuildMarker() {
- internallyThinking = guiFeature.getFeatureRect().getRectangleNoScale();
- applyConstraint();
- }
-
- @Override
- public Rectangle getBounds() {
- Rectangle rectangle = guiFeature.getFeatureRect().getRectangle();
- return new Rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
- }
-
- @Override
- public void render(int absMousex, int absMousey, int relMouseX, int relMouseY, float partialTicks, Rectangle scissor) {
- if (!guiFeature.isEnabled()) return;
-
- GlStateManager.pushMatrix();
- guiFeature.drawDemo(partialTicks);
- GlStateManager.popMatrix();
- if (!draggable) return;
- Gui.drawRect(0,0, 4, 4, 0xFFBBBBBB);
- Gui.drawRect(0, getBounds().height - 4, 4, getBounds().height, 0xFFBBBBBB);
- Gui.drawRect(getBounds().width - 4,0, getBounds().width, 4, 0xFFBBBBBB);
- Gui.drawRect(getBounds().width - 4,getBounds().height - 4, getBounds().width, getBounds().height, 0xFFBBBBBB);
- if (lastAbsClip.contains(absMousex, absMousey)) {
- if (relMouseX < 4 && relMouseY < 4) {
- Gui.drawRect(0,0, 4, 4, 0x55FFFFFF);
- } else if (relMouseX < 4 && relMouseY > getBounds().height - 4) {
- Gui.drawRect(0, getBounds().height - 4, 4, getBounds().height, 0x55FFFFFF);
- } else if (relMouseX > getBounds().width - 4 && relMouseY > getBounds().height - 4) {
- Gui.drawRect(getBounds().width - 4,getBounds().height - 4, getBounds().width, getBounds().height, 0x55FFFFFF);
- } else if (relMouseX > getBounds().width - 4 && relMouseY < 4) {
- Gui.drawRect(getBounds().width - 4,0, getBounds().width, 4, 0x55FFFFFF);
- } else if (selectedPart == -2){
- Gui.drawRect(0,0, getBounds().width, getBounds().height, 0x55FFFFFF);
- }
- }
- GlStateManager.enableBlend();
- }
-
- @Override
- public void render0(double scale, Point parentPoint, Rectangle parentClip, int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks) {
- GlStateManager.pushMatrix();
- super.render0(scale, parentPoint, parentClip, absMousex, absMousey, relMousex0, relMousey0, partialTicks);
- GlStateManager.popMatrix();
-
- if (snapped != null && selectedPart != -2) {
- Tessellator tessellator = Tessellator.getInstance();
- GlStateManager.disableTexture2D();
- WorldRenderer worldRenderer = tessellator.getWorldRenderer();
- worldRenderer.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR);
- GL11.glLineWidth(1);
- for (Tuple markerAxisTuple : snapped) {
- if (markerAxisTuple.getSecond() == EnumFacing.Axis.X) {
- worldRenderer.pos(markerAxisTuple.getFirst()[0].getX(), 0, 0).color(0,255,0,255).endVertex();
- worldRenderer.pos(markerAxisTuple.getFirst()[0].getX(), Minecraft.getMinecraft().displayHeight, 0).color(0,255,0,255).endVertex();
- } else {
- worldRenderer.pos(0, markerAxisTuple.getFirst()[0].getY(), 0).color(0,255,0,255).endVertex();
- worldRenderer.pos(Minecraft.getMinecraft().displayWidth, markerAxisTuple.getFirst()[0].getY(), 0).color(0,255,0,255).endVertex();
- }
- }
- tessellator.draw();
- for (Marker marker : guiGuiLocationConfig.getMarkerSet()) {
- Gui.drawRect(marker.getX(),marker.getY(), marker.getX()+1, marker.getY()+1, 0xFFFF0000);
- }
- }
- }
-
- private int selectedPart = -2;
-
- private int lastX = 0;
- private int lastY = 0;
-
- private Rectangle internallyThinking;
- private Rectangle constraintApplied;
-
- private Set> snapped = new HashSet<>();
-
- public void applyConstraint() {
- constraintApplied = internallyThinking.getBounds();
-
- // SNAP Moving Point.
- snapped.clear();
- int scailingThreshold = 5;
- if (selectedPart == 0){
- Point snapPt = new Point(constraintApplied.x +constraintApplied.width, constraintApplied.y + constraintApplied.height);
- Optional snapX, snapY;
- SortedMap> markerSortedMap = guiGuiLocationConfig.getMarkerTreeMapByX().subMap(snapPt.x-scailingThreshold, snapPt.x +scailingThreshold);
- snapX = markerSortedMap.values().stream()
- .filter(Objects::nonNull)
- .flatMap(Collection::stream)
- .filter(a -> a.getParent() != this)
- .min(Comparator.comparingInt(a -> (int) snapPt.distanceSq(a.getX(), a.getY())));
- markerSortedMap = guiGuiLocationConfig.getMarkerTreeMapByY().subMap(snapPt.y-scailingThreshold, snapPt.y +scailingThreshold);
- snapY = markerSortedMap.values().stream()
- .filter(Objects::nonNull)
- .flatMap(Collection::stream)
- .filter(a -> a.getParent() != this)
- .min(Comparator.comparingInt(a -> (int) snapPt.distanceSq(a.getX(), a.getY())));
- snapX.ifPresent(a -> {
- snapPt.x = a.getX();
- });
- snapY.ifPresent(a -> {
- snapPt.y = a.getY();
- });
-
- constraintApplied = new Rectangle(constraintApplied.x, constraintApplied.y, snapPt.x - constraintApplied.x, snapPt.y - constraintApplied.y);
-
-
-
- int minWidth;
- int minHeight;
- if (guiFeature.isKeepRatio()) {
- if (guiFeature.getDefaultRatio() >= 1) {
- minHeight = constraintApplied.height < 0 ? -8 : 8;
- minWidth = (int) (guiFeature.getDefaultRatio() * minHeight);
- } else {
- minWidth = constraintApplied.width < 0 ? -8 : 8;
- minHeight = (int) (minWidth / guiFeature.getDefaultRatio());
- }
- } else {
- minWidth = constraintApplied.width < 0 ? -8 : 8;
- minHeight = constraintApplied.height < 0 ? -8 : 8;
- }
-
-
- constraintApplied.width = Math.abs(constraintApplied.width) > Math.abs(minWidth) ? constraintApplied.width :
- Math.abs(internallyThinking.width) > Math.abs(minWidth) ? internallyThinking.width : minWidth;
- constraintApplied.height = Math.abs(constraintApplied.height) > Math.abs(minHeight) ? constraintApplied.height :
- Math.abs(internallyThinking.height) > Math.abs(minHeight) ? internallyThinking.height : minHeight;
-
- if (guiFeature.isKeepRatio()) {
- double ratio = guiFeature.getDefaultRatio();
-
- int heightWhenWidthFix = (int) Math.abs(constraintApplied.width / ratio);
- int widthWhenHeightFix = (int) Math.abs(ratio * constraintApplied.height);
- if (Math.abs(heightWhenWidthFix) <= Math.abs(constraintApplied.height)) {
- constraintApplied.height = constraintApplied.height < 0 ? -heightWhenWidthFix : heightWhenWidthFix;
- } else if (Math.abs(widthWhenHeightFix) <= Math.abs(constraintApplied.width)) {
- constraintApplied.width =constraintApplied.width < 0 ? - widthWhenHeightFix : widthWhenHeightFix;
- }
- }
-
-
- snapX.ifPresent(a -> {
- if (snapPt.x - constraintApplied.x == constraintApplied.width) {
- Marker m = new Marker((int) (GuiGuiLocationConfig.facing[3].xCoord * constraintApplied.width) + constraintApplied.x, (int) (GuiGuiLocationConfig.facing[3].yCoord * constraintApplied.height) + constraintApplied.y, (int) GuiGuiLocationConfig.facing[3].zCoord, this);
- snapped.add(new Tuple<>(new Marker[]{a, m}, EnumFacing.Axis.X));
- }
- });
- snapY.ifPresent(a -> {
- if (snapPt.y - constraintApplied.y == constraintApplied.height) {
- Marker m = new Marker((int) (GuiGuiLocationConfig.facing[2].xCoord * constraintApplied.width) + constraintApplied.x, (int) (GuiGuiLocationConfig.facing[2].yCoord * constraintApplied.height) + constraintApplied.y, (int) GuiGuiLocationConfig.facing[2].zCoord, this);
- snapped.add(new Tuple<>(new Marker[]{a, m}, EnumFacing.Axis.Y));
- }
- });
-
- if (constraintApplied.height < 0) {
- constraintApplied.height = -constraintApplied.height;
- constraintApplied.y -= constraintApplied.height;
- }
-
- if (constraintApplied.width < 0) {
- constraintApplied.width = -constraintApplied.width;
- constraintApplied.x -= constraintApplied.width;
- }
- } else if (selectedPart == -1) {
- for (int i : Arrays.asList(0,3,1,2)) {
- Vec3 pt = GuiGuiLocationConfig.facing[i];
- Marker m = new Marker((int) (pt.xCoord * constraintApplied.width) + constraintApplied.x, (int) (pt.yCoord * constraintApplied.height) + constraintApplied.y, (int) pt.zCoord, this);
- Optional result = guiGuiLocationConfig.getMarkerTreeMapByX().subMap(m.getX()-scailingThreshold, m.getX() +scailingThreshold).values().stream()
- .filter(Objects::nonNull)
- .flatMap(Collection::stream)
- .filter(a -> a.getParent() != this)
- .filter(a -> Math.abs(a.getX() - m.getX()) < scailingThreshold)
- .filter(a -> ((a.getX() - pt.xCoord * constraintApplied.width) >= 0
- && (a.getX() - pt.xCoord * constraintApplied.width + constraintApplied.width) <= Minecraft.getMinecraft().displayWidth))
- .min(Comparator.comparingInt(a -> a.distanceSQ(m)));
- if (result.isPresent()) {
- int x = result.get().getX();
- constraintApplied.x = (int) (x - pt.xCoord * constraintApplied.width);
-
- snapped.add(new Tuple<>(new Marker[] {result.get(), m}, EnumFacing.Axis.X));
- break;
- }
- }
- for (int i : Arrays.asList(1,2,0,3)) {
- Vec3 pt = GuiGuiLocationConfig.facing[i];
- Marker m = new Marker((int) (pt.xCoord * constraintApplied.width) + constraintApplied.x, (int) (pt.yCoord * constraintApplied.height) + constraintApplied.y, (int) pt.zCoord, this);
- Optional result = guiGuiLocationConfig.getMarkerTreeMapByY().subMap(m.getY()-scailingThreshold, m.getY() +scailingThreshold).values().stream()
- .filter(Objects::nonNull)
- .flatMap(Collection::stream)
- .filter(a -> a.getParent() != this)
- .filter(a -> Math.abs(a.getY() - m.getY()) < scailingThreshold)
- .filter(a -> ((a.getY() - pt.yCoord * constraintApplied.height) >= 0
- && (a.getY() - pt.yCoord * constraintApplied.height+ constraintApplied.height) <= Minecraft.getMinecraft().displayHeight))
- .min(Comparator.comparingInt(a -> a.distanceSQ(m)));
- if (result.isPresent()) {
- int y = result.get().getY();
- constraintApplied.y = (int) (y - pt.yCoord * constraintApplied.height);
- snapped.add(new Tuple<>(new Marker[] {result.get(), m}, EnumFacing.Axis.Y));
- break;
- }
- }
- }
-
- if (constraintApplied.x < 0) constraintApplied.x = 0;
- if (constraintApplied.y < 0) constraintApplied.y = 0;
- if (constraintApplied.x + constraintApplied.width + 1 >=Minecraft.getMinecraft().displayWidth) constraintApplied.x = Minecraft.getMinecraft().displayWidth - constraintApplied.width - 1;
- if (constraintApplied.y + constraintApplied.height + 1>= Minecraft.getMinecraft().displayHeight) constraintApplied.y = Minecraft.getMinecraft().displayHeight - constraintApplied.height - 1;
-
-
- setupMarkers();
- }
-
- Marker[] markers = new Marker[4];
- public void setupMarkers() {
- for (int i1 = 0; i1 < markers.length; i1++) {
- Marker orig = markers[i1];
-
- Vec3 pt = GuiGuiLocationConfig.facing[i1];
- markers[i1] = new Marker((int) (pt.xCoord * constraintApplied.width) + constraintApplied.x, (int) (pt.yCoord * constraintApplied.height) + constraintApplied.y, (int) pt.zCoord, this);
-
- guiGuiLocationConfig.removeAndAddMarker(orig, markers[i1]);
- }
- }
-
- MTooltip mTooltip;
-
- @Override
- public void mouseClicked(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int mouseButton) {
- if (!draggable) return;
- if (!guiFeature.isEnabled()) return;
- if (getTooltipsOpen() > 0) return;
- if (!lastAbsClip.contains(absMouseX, absMouseY)) return;
- if (mouseButton == 0) {
- internallyThinking = guiFeature.getFeatureRect().getRectangleNoScale();
- if (relMouseX < 4 && relMouseY < 4) { // TL
- selectedPart = 0;
- internallyThinking.y += internallyThinking.height;
- internallyThinking.height = -internallyThinking.height;
- internallyThinking.x += internallyThinking.width;
- internallyThinking.width = -internallyThinking.width;
- } else if (relMouseX < 4 && relMouseY > getBounds().height - 4) { // BL
- selectedPart = 0;
- internallyThinking.x += internallyThinking.width;
- internallyThinking.width = -internallyThinking.width;
- } else if (relMouseX > getBounds().width - 4 && relMouseY > getBounds().height - 4) { // BR
- selectedPart = 0;
- } else if (relMouseX > getBounds().width - 4 && relMouseY < 4) { // TR
- selectedPart = 0;
- internallyThinking.y += internallyThinking.height;
- internallyThinking.height = -internallyThinking.height;
- } else {
- selectedPart = -1;
- }
- lastX = absMouseX;
- lastY = absMouseY;
- applyConstraint();
-
- } else if (getTooltipsOpen() == 0){
- if (mTooltip != null) mTooltip.close();
- mTooltip = new MPopupMenu(absMouseX, absMouseY, guiFeature.getTooltipForEditor(guiGuiLocationConfig));
- mTooltip.setScale(2.0f);
- mTooltip.open(this);
- }
- throw new IllegalArgumentException("bruh, a hack to stop event progress");
- }
-
- @Override
- public void mouseReleased(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int state) {
- if (!draggable) return;
- if (!guiFeature.isEnabled()) return;
- if (selectedPart >= -1) {
- guiFeature.setFeatureRect(new GUIRectangle(constraintApplied));
- }
-
- selectedPart = -2;
- }
-
- @Override
- public void mouseClickMove(int absMouseX, int absMouseY, int relMouseX, int relMouseY, int clickedMouseButton, long timeSinceLastClick) {
- if (!draggable) return;
- if (!guiFeature.isEnabled()) return;
- int dx = (absMouseX - lastX);
- int dy = (absMouseY - lastY);
- if (selectedPart >= 0) {
- Rectangle rectangle = internallyThinking;
-
- int prevWidth = rectangle.width;
- int prevHeight= rectangle.height;
-
- rectangle.width = prevWidth + dx;
- rectangle.height = prevHeight + dy;
-
- if (rectangle.height * prevHeight <= 0 && prevHeight != rectangle.height) {
- rectangle.height += prevHeight < 0 ? 4 : -4;
- }
- if (rectangle.width * prevWidth <= 0 && prevWidth != rectangle.width) {
- rectangle.width += prevWidth < 0 ? 4 : -4;
- }
-
-
- applyConstraint();
- guiFeature.setFeatureRect(new GUIRectangle(constraintApplied));
- lastX = absMouseX;
- lastY = absMouseY;
- throw new IllegalArgumentException("bruh, a hack to stop event progress");
- } else if (selectedPart == -1){
- Rectangle rectangle = internallyThinking;
- rectangle.translate(dx, dy);
- applyConstraint();
- guiFeature.setFeatureRect(new GUIRectangle(constraintApplied));
- lastX = absMouseX;
- lastY = absMouseY;
- }
- }
-
- @Override
- public void mouseMoved(int absMouseX, int absMouseY, int relMouseX, int relMouseY) {
- if (!draggable) return;
- if (!guiFeature.isEnabled()) return;
- if (getTooltipsOpen() > 0) return;
-
- if (selectedPart == -1) {
- setCursor(EnumCursor.CLOSED_HAND);
- } else if (selectedPart >= 0) {
- if (internallyThinking.width < 0 && internallyThinking.height < 0) {
- setCursor(EnumCursor.RESIZE_TL);
- } else if (internallyThinking.width < 0 && internallyThinking.height >= 0) {
- setCursor(EnumCursor.RESIZE_DL);
- } else if (internallyThinking.width >= 0 && internallyThinking.height >= 0) {
- setCursor(EnumCursor.RESIZE_DR);
- } else if (internallyThinking.width >= 0 && internallyThinking.height < 0) {
- setCursor(EnumCursor.RESIZE_TR);
- }
- } else if (lastAbsClip.contains(absMouseX, absMouseY)) {
- if (relMouseX < 4 && relMouseY < 4) {
- setCursor(EnumCursor.RESIZE_TL);
- } else if (relMouseX < 4 && relMouseY > getBounds().height - 4) {
- setCursor(EnumCursor.RESIZE_DL);
- } else if (relMouseX > getBounds().width - 4 && relMouseY > getBounds().height - 4) {
- setCursor(EnumCursor.RESIZE_DR);
- } else if (relMouseX > getBounds().width - 4 && relMouseY < 4) {
- setCursor(EnumCursor.RESIZE_TR);
- } else {
- setCursor(EnumCursor.OPEN_HAND);
- }
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/AColor.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/AColor.java
deleted file mode 100644
index c9f464df..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/AColor.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.config.types;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.awt.*;
-
-@Getter
-@Setter
-public class AColor extends Color {
- private boolean chroma;
- private float chromaSpeed;
-
- public AColor(int r, int g, int b, int a) {
- super(r, g, b, a);
- }
-
- public AColor(int rgba, boolean hasalpha) {
- super(rgba, hasalpha);
- }
-
- public AColor(AColor clone) {
- super(clone.getRGB(), true);
- chroma = clone.isChroma();
- chromaSpeed = clone.getChromaSpeed();
- }
-
- public AColor multiplyAlpha(double multiplier) {
- AColor aColor = new AColor(getRed(), getGreen(), getBlue(), (int) (getAlpha() * multiplier));
- aColor.chroma = this.chroma;
- aColor.chromaSpeed = this.chromaSpeed;
- return aColor;
- }
-
- @Override
- public String toString() {
- return "AColor{" +
- ", r="+getRed()+
- ", g="+getGreen()+
- ", b="+getBlue()+
- ", a="+getAlpha()+
- ", chromaSpeed=" + chromaSpeed +
- '}';
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/GUIRectangle.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/GUIRectangle.java
deleted file mode 100644
index 1c129d2e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/GUIRectangle.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.config.types;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.ScaledResolution;
-
-import java.awt.*;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class GUIRectangle {
- public GUIRectangle(Rectangle rectangle) {
- if (rectangle.x < Minecraft.getMinecraft().displayWidth / 2) {
- this.x = rectangle.x;
- this.width = rectangle.width;
- } else {
- this.x = rectangle.x + rectangle.width - Minecraft.getMinecraft().displayWidth;
- this.width = -rectangle.width;
- }
-
- if (rectangle.y < Minecraft.getMinecraft().displayHeight / 2) {
- this.y = rectangle.y;
- this.height = rectangle.height;
- } else {
- this.y = rectangle.y +rectangle.height - Minecraft.getMinecraft().displayHeight;
- this.height = -rectangle.height;
- }
- }
-
- private int x;
- private int y;
- private int width;
- private int height;
-
- public Rectangle getRectangle() {
- return getRectangleNoScale();
- }
-// public Rectangle getRectangle(ScaledResolution scaledResolution) {
-// double realX = (int) (x < 0 ? scaledResolution.getScaledWidth() + x : x);
-// double realY = (int) (y < 0 ? scaledResolution.getScaledHeight() + y : y);
-//
-// return new Rectangle((int)Math.min(realX + width, realX), (int)Math.min(realY + height, realY),
-// (int)Math.abs(width), (int)Math.abs(height));
-// }
- public Rectangle getRectangleNoScale() {
- int x = this.x, y = this.y;
- if (Math.abs(x) > Minecraft.getMinecraft().displayWidth / 2) {
- x = x < 0 ? -Minecraft.getMinecraft().displayWidth/2 : Minecraft.getMinecraft().displayWidth/2;
- }
- if (Math.abs(y) > Minecraft.getMinecraft().displayHeight / 2) {
- y = y < 0 ? -Minecraft.getMinecraft().displayHeight/2 : Minecraft.getMinecraft().displayHeight/2;
- }
-
-
- double realX = (int) (x < 0 ? Minecraft.getMinecraft().displayWidth + x : x);
- double realY = (int) (y < 0 ? Minecraft.getMinecraft().displayHeight + y : y);
-
- return new Rectangle((int)Math.min(realX + width, realX), (int)Math.min(realY + height, realY),
- (int)Math.abs(width), (int)Math.abs(height));
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCAColor.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCAColor.java
deleted file mode 100644
index 33748a8b..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCAColor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-
-import java.awt.*;
-
-public class TCAColor implements TypeConverter {
- @Override
- public String getTypeString() {
- return "acolor";
- }
-
- @Override
- public AColor deserialize(JsonElement element) {
- if (element instanceof JsonPrimitive)
- return new AColor(element.getAsInt(), true);
-
- JsonObject object = element.getAsJsonObject();
- AColor color = new AColor(object.get("color").getAsInt(), true);
- color.setChroma(object.get("chroma").getAsBoolean());
- color.setChromaSpeed(object.get("chromaSpeed").getAsFloat());
- return color;
- }
-
- @Override
- public JsonElement serialize(AColor element) {
- JsonObject object = new JsonObject();
- object.addProperty("color", element.getRGB());
- object.addProperty("chroma", element.isChroma());
- object.addProperty("chromaSpeed", element.getChromaSpeed());
- return object;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCBoolean.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCBoolean.java
deleted file mode 100644
index 15a26d0f..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCBoolean.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-public class TCBoolean implements TypeConverter {
- @Override
- public String getTypeString() {
- return "boolean";
- }
-
- @Override
- public Boolean deserialize(JsonElement element) {
- return element.getAsBoolean();
- }
-
- @Override
- public JsonElement serialize(Boolean element) {
- return new JsonPrimitive(element);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCColor.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCColor.java
deleted file mode 100644
index 6014b122..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCColor.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-
-import java.awt.*;
-
-public class TCColor implements TypeConverter {
- @Override
- public String getTypeString() {
- return "color";
- }
-
- @Override
- public Color deserialize(JsonElement element) {
- return new Color(element.getAsInt());
- }
-
- @Override
- public JsonElement serialize(Color element) {
- return new JsonPrimitive(element.getRGB());
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCFloat.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCFloat.java
deleted file mode 100644
index 0890f350..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCFloat.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-public class TCFloat implements TypeConverter {
- @Override
- public String getTypeString() {
- return "float";
- }
-
- @Override
- public Float deserialize(JsonElement element) {
- return element.getAsFloat();
- }
-
- @Override
- public JsonElement serialize(Float element) {
- return new JsonPrimitive(element);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCGUIRectangle.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCGUIRectangle.java
deleted file mode 100644
index 8880a628..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCGUIRectangle.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-import java.awt.*;
-
-public class TCGUIRectangle implements TypeConverter {
- @Override
- public String getTypeString() {
- return "guirect";
- }
-
- @Override
- public GUIRectangle deserialize(JsonElement element) {
- if (element == null) return null;
- GUIRectangle rectangle = new GUIRectangle();
- rectangle.setX(((JsonObject)element).get("x").getAsInt());
- rectangle.setY(((JsonObject)element).get("y").getAsInt());
- rectangle.setWidth(((JsonObject)element).get("width").getAsInt());
- rectangle.setHeight(((JsonObject)element).get("height").getAsInt());
- return rectangle;
- }
-
- @Override
- public JsonElement serialize(GUIRectangle element) {
- JsonObject object = new JsonObject();
- object.addProperty("x", element.getX());
- object.addProperty("y", element.getY());
- object.addProperty("width", element.getWidth());
- object.addProperty("height", element.getHeight());
- return object;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCInteger.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCInteger.java
deleted file mode 100644
index 2a066921..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCInteger.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-public class TCInteger implements TypeConverter {
- @Override
- public String getTypeString() {
- return "integer";
- }
-
- @Override
- public Integer deserialize(JsonElement element) {
- return element.getAsInt();
- }
-
- @Override
- public JsonElement serialize(Integer element) {
- return new JsonPrimitive(element);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCKeybind.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCKeybind.java
deleted file mode 100644
index 4ae89395..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCKeybind.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-public class TCKeybind implements TypeConverter {
- @Override
- public String getTypeString() {
- return "keybind";
- }
-
- @Override
- public Integer deserialize(JsonElement element) {
- return element.getAsInt();
- }
-
- @Override
- public JsonElement serialize(Integer element) {
- return new JsonPrimitive(element);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCRectangle.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCRectangle.java
deleted file mode 100644
index ba778872..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCRectangle.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-import org.w3c.dom.css.Rect;
-
-import java.awt.*;
-
-public class TCRectangle implements TypeConverter {
- @Override
- public String getTypeString() {
- return "rect";
- }
-
- @Override
- public Rectangle deserialize(JsonElement element) {
- Rectangle rectangle = new Rectangle();
- rectangle.x = ((JsonObject)element).get("x").getAsInt();
- rectangle.y = ((JsonObject)element).get("y").getAsInt();
- rectangle.width = ((JsonObject)element).get("width").getAsInt();
- rectangle.height = ((JsonObject)element).get("height").getAsInt();
- return rectangle;
- }
-
- @Override
- public JsonElement serialize(Rectangle element) {
- JsonObject object = new JsonObject();
- object.addProperty("x", element.x);
- object.addProperty("y", element.y);
- object.addProperty("width", element.width);
- object.addProperty("height", element.height);
- return object;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCString.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCString.java
deleted file mode 100644
index a90bedc6..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCString.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-public class TCString implements TypeConverter {
- @Override
- public String getTypeString() {
- return "string";
- }
-
- @Override
- public String deserialize(JsonElement element) {
- return element.getAsString();
- }
-
- @Override
- public JsonElement serialize(String element) {
- return new JsonPrimitive(element);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCStringList.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCStringList.java
deleted file mode 100644
index 0a3e6217..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCStringList.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Stream;
-
-public class TCStringList implements TypeConverter> {
- @Override
- public String getTypeString() {
- return "stringlist";
- }
-
- @Override
- public List deserialize(JsonElement element) {
- List strList = new ArrayList<>();
- for (JsonElement jsonElement : element.getAsJsonArray()) {
- strList.add(jsonElement.getAsString());
- }
- return strList;
- }
-
- @Override
- public JsonElement serialize(List element) {
- JsonArray jsonElements = new JsonArray();
- for (String s : element) {
- jsonElements.add(new JsonPrimitive(s));
- }
- return jsonElements;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyle.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyle.java
deleted file mode 100644
index d27b311e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyle.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-import kr.syeyoung.dungeonsguide.features.text.TextStyle;
-
-import java.util.List;
-
-public class TCTextStyle implements TypeConverter {
- @Override
- public String getTypeString() {
- return "textstyle";
- }
-
- @Override
- public TextStyle deserialize(JsonElement element) {
- TextStyle textStyle = new TextStyle();
- textStyle.setColor(TypeConverterRegistry.getTypeConverter("acolor", AColor.class).deserialize(element.getAsJsonObject().get("color")));
- textStyle.setBackground(element.getAsJsonObject().has("background") ? TypeConverterRegistry.getTypeConverter("acolor", AColor.class).deserialize(element.getAsJsonObject().get("background"))
- : new AColor(0x00777777, true));
- textStyle.setGroupName(element.getAsJsonObject().get("group").getAsString());
- if (element.getAsJsonObject().has("shadow"))
- textStyle.setShadow(element.getAsJsonObject().get("shadow").getAsBoolean());
- return textStyle;
- }
-
- @Override
- public JsonElement serialize(TextStyle element) {
- JsonObject jsonObject = new JsonObject();
- jsonObject.add("color", TypeConverterRegistry.getTypeConverter("acolor", AColor.class).serialize(element.getColor()));
- jsonObject.add("background", TypeConverterRegistry.getTypeConverter("acolor", AColor.class).serialize(element.getBackground()));
- jsonObject.addProperty("group", element.getGroupName());
- jsonObject.addProperty("shadow", element.isShadow());
- return jsonObject;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyleList.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyleList.java
deleted file mode 100644
index e9721ab7..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCTextStyleList.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-import kr.syeyoung.dungeonsguide.features.text.TextStyle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TCTextStyleList implements TypeConverter> {
- @Override
- public String getTypeString() {
- return "list_textStyle";
- }
-
- @Override
- public List deserialize(JsonElement element) {
- JsonArray arr = element.getAsJsonArray();
- TypeConverter conv = TypeConverterRegistry.getTypeConverter("textstyle", TextStyle.class);
- List texts = new ArrayList();
- for (JsonElement element2:arr) {
- texts.add(conv.deserialize(element2));
- }
- return texts;
- }
-
- @Override
- public JsonElement serialize(List element) {
- JsonArray array = new JsonArray();
- TypeConverter conv = TypeConverterRegistry.getTypeConverter("textstyle", TextStyle.class);
- for (TextStyle st:element) {
- array.add(conv.serialize(st));
- }
- return array;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverter.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverter.java
deleted file mode 100644
index b1c3ed5c..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.config.types;
-
-import com.google.gson.JsonElement;
-
-public interface TypeConverter {
- String getTypeString();
-
- T deserialize(JsonElement element);
-
- JsonElement serialize(T element);
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java
deleted file mode 100644
index abffd34a..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.config.types;
-
-import kr.syeyoung.dungeonsguide.roomedit.Parameter;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class TypeConverterRegistry {
- private static final Map typeConverterMap = new HashMap();
-
- public static void register(TypeConverter typeConverter) {
- typeConverterMap.put(typeConverter.getTypeString(), typeConverter);
- }
-
- public static TypeConverter getTypeConverter(String type_string) {
- return typeConverterMap.get(type_string);
- }
- public static TypeConverter getTypeConverter(String type_string, Class t) {
- return (TypeConverter)typeConverterMap.get(type_string);
- }
-
- static {
- register(new TCBoolean());
- register(new TCInteger());
- register(new TCRectangle());
- register(new TCGUIRectangle());
- register(new TCString());
- register(new TCColor());
- register(new TCFloat());
- register(new TCAColor());
- register(new TCTextStyleList());
- register(new TCTextStyle());
- register(new TCStringList());
- register(new TCKeybind());
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/ActiveCosmetic.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/ActiveCosmetic.java
deleted file mode 100644
index f00ecf06..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/ActiveCosmetic.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package kr.syeyoung.dungeonsguide.cosmetics;
-
-import lombok.Data;
-import java.util.UUID;
-
-@Data
-public class ActiveCosmetic {
- private UUID activityUID;
- private UUID playerUID;
- private UUID cosmeticData;
- private String username;
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticData.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticData.java
deleted file mode 100644
index 24842a8e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticData.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package kr.syeyoung.dungeonsguide.cosmetics;
-
-
-import lombok.Data;
-
-import java.util.UUID;
-
-@Data
-public class CosmeticData {
- private UUID id;
- private String cosmeticType;
- private String reqPerm;
- private String data;
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticsManager.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticsManager.java
deleted file mode 100644
index fa597962..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CosmeticsManager.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * 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.cosmetics;
-
-import com.google.gson.JsonPrimitive;
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.cosmetics.chatreplacers.*;
-import kr.syeyoung.dungeonsguide.events.PlayerListItemPacketEvent;
-import kr.syeyoung.dungeonsguide.events.StompConnectedEvent;
-import kr.syeyoung.dungeonsguide.stomp.*;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.network.NetHandlerPlayClient;
-import net.minecraft.client.network.NetworkPlayerInfo;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.network.play.server.S38PacketPlayerListItem;
-import net.minecraft.scoreboard.ScorePlayerTeam;
-import net.minecraft.util.*;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import net.minecraftforge.common.ForgeHooks;
-import net.minecraftforge.event.entity.player.PlayerEvent;
-import net.minecraftforge.fml.common.eventhandler.Event;
-import net.minecraftforge.fml.common.eventhandler.EventPriority;
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import net.minecraftforge.fml.relauncher.ReflectionHelper;
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class CosmeticsManager implements StompMessageHandler {
- @Getter
- private Map cosmeticDataMap = new ConcurrentHashMap<>();
- @Getter
- private Map activeCosmeticMap = new ConcurrentHashMap<>();
- @Getter
- private Map> activeCosmeticByType = new ConcurrentHashMap<>();
- @Getter
- private Map> activeCosmeticByPlayer = new ConcurrentHashMap<>();
- @Getter
- private Map> activeCosmeticByPlayerNameLowerCase = new ConcurrentHashMap<>();
- @Getter
- private Set perms = new CopyOnWriteArraySet<>();
-
- public void requestActiveCosmetics() {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload()
- .method(StompHeader.SEND)
- .header("destination", "/app/cosmetic.activelist")
- );
- }
- public void requestCosmeticsList() {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload()
- .method(StompHeader.SEND)
- .header("destination", "/app/cosmetic.list")
- );
- }
- public void requestPerms() {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload()
- .method(StompHeader.SEND)
- .header("destination", "/app/user.perms")
- );
- }
- public void setCosmetic(CosmeticData cosmetic) {
- if (!perms.contains(cosmetic.getReqPerm())) return;
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload()
- .method(StompHeader.SEND)
- .header("destination", "/app/cosmetic.set")
- .payload(cosmetic.getId().toString())
- );
- }
- public void removeCosmetic(ActiveCosmetic activeCosmetic) {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload()
- .method(StompHeader.SEND)
- .header("destination", "/app/cosmetic.remove")
- .payload(activeCosmetic.getActivityUID().toString())
- );
- }
-
- @Override
- public void handle(StompInterface stompInterface, StompPayload stompPayload) {
- String destination = stompPayload.headers().get("destination");
- if (destination.equals("/topic/cosmetic.set")) {
- JSONObject jsonObject = new JSONObject(stompPayload.payload());
- ActiveCosmetic activeCosmetic = new ActiveCosmetic();
- activeCosmetic.setActivityUID(UUID.fromString(jsonObject.getString("activityUID")));
- activeCosmetic.setPlayerUID(UUID.fromString(jsonObject.getString("playerUID")));
- if (jsonObject.isNull("cosmeticUID")) {
- ActiveCosmetic activeCosmetic1 = activeCosmeticMap.remove(activeCosmetic.getActivityUID());
-
- List activeCosmetics = activeCosmeticByPlayer.computeIfAbsent(activeCosmetic.getPlayerUID(), a-> new CopyOnWriteArrayList<>());
- activeCosmetics.remove(activeCosmetic1);
-
- activeCosmetics = activeCosmeticByPlayerNameLowerCase.computeIfAbsent(activeCosmetic1.getUsername().toLowerCase(), a-> new CopyOnWriteArrayList<>());
- activeCosmetics.remove(activeCosmetic1);
-
- CosmeticData cosmeticData = cosmeticDataMap.get(activeCosmetic.getCosmeticData());
- if (cosmeticData != null) {
- List cosmeticsByTypeList = activeCosmeticByType.computeIfAbsent(cosmeticData.getCosmeticType(), a-> new CopyOnWriteArrayList<>());
- cosmeticsByTypeList.remove(activeCosmetic1);
- }
- } else {
- activeCosmetic.setCosmeticData(UUID.fromString(jsonObject.getString("cosmeticUID")));
- activeCosmetic.setUsername(jsonObject.getString("username"));
-
- ActiveCosmetic previousThing = activeCosmeticMap.get(activeCosmetic.getActivityUID());
- activeCosmeticMap.put(activeCosmetic.getActivityUID(), activeCosmetic);
-
- CosmeticData cosmeticData = cosmeticDataMap.get(activeCosmetic.getCosmeticData());
- if (cosmeticData != null) {
- List cosmeticsByTypeList = activeCosmeticByType.computeIfAbsent(cosmeticData.getCosmeticType(), a-> new CopyOnWriteArrayList<>());
- cosmeticsByTypeList.add(activeCosmetic);
- cosmeticsByTypeList.remove(previousThing);
- }
- List activeCosmetics = activeCosmeticByPlayer.computeIfAbsent(activeCosmetic.getPlayerUID(), a-> new CopyOnWriteArrayList<>());
- activeCosmetics.add(activeCosmetic);
- activeCosmetics.remove(previousThing);
-
- activeCosmetics = activeCosmeticByPlayerNameLowerCase.computeIfAbsent(activeCosmetic.getUsername().toLowerCase(), a-> new CopyOnWriteArrayList<>());
- activeCosmetics.add(activeCosmetic);
- activeCosmetics.remove(previousThing);
- }
-
- try {
- if (Minecraft.getMinecraft().theWorld != null) {
- EntityPlayer entityPlayer = Minecraft.getMinecraft().theWorld.getPlayerEntityByUUID(activeCosmetic.getPlayerUID());
- if (entityPlayer != null) entityPlayer.refreshDisplayName();
- }
- } catch (Exception e) {e.printStackTrace();}
-
- } else if (destination.equals("/user/queue/reply/user.perms")) {
- JSONArray object = new JSONArray(stompPayload.payload());
- Set cache = new HashSet<>();
- for (Object o : object) {
- cache.add((String) o);
- }
- this.perms = cache;
- } else if (destination.equals("/user/queue/reply/cosmetic.activelist")) {
- Map activeCosmeticMap = new HashMap<>();
- JSONArray object = new JSONArray(stompPayload.payload());
- for (Object o : object) {
- JSONObject jsonObject = (JSONObject) o;
- ActiveCosmetic cosmeticData = new ActiveCosmetic();
- cosmeticData.setActivityUID(UUID.fromString(jsonObject.getString("activityUID")));
- cosmeticData.setPlayerUID(UUID.fromString(jsonObject.getString("playerUID")));
- cosmeticData.setCosmeticData(UUID.fromString(jsonObject.getString("cosmeticUID")));
- cosmeticData.setUsername(jsonObject.getString("username"));
-
- activeCosmeticMap.put(cosmeticData.getActivityUID(), cosmeticData);
- try {
- if (Minecraft.getMinecraft().theWorld != null) {
- EntityPlayer entityPlayer = Minecraft.getMinecraft().theWorld.getPlayerEntityByUUID(cosmeticData.getPlayerUID());
- if (entityPlayer != null) entityPlayer.refreshDisplayName();
- }
- } catch (Exception e) {e.printStackTrace();}
- }
- this.activeCosmeticMap = activeCosmeticMap;
- rebuildCaches();
- } else if (destination.equals("/user/queue/reply/cosmetic.list")) {
- JSONArray object = new JSONArray(stompPayload.payload());
- Map newCosmeticList = new HashMap<>();
- for (Object o : object) {
- JSONObject jsonObject = (JSONObject) o;
- CosmeticData cosmeticData = new CosmeticData();
- cosmeticData.setCosmeticType(jsonObject.getString("cosmeticType"));
- cosmeticData.setReqPerm(jsonObject.getString("reqPerm"));
- cosmeticData.setData(jsonObject.getString("data"));
- cosmeticData.setId(UUID.fromString(jsonObject.getString("id")));
-
- newCosmeticList.put(cosmeticData.getId(), cosmeticData);
- }
-
- cosmeticDataMap = newCosmeticList;
- rebuildCaches();
- }
- }
-
- private void rebuildCaches() {
- Map> activeCosmeticByType = new HashMap<>();
- Map> activeCosmeticByPlayer = new HashMap<>();
- Map> activeCosmeticByPlayerName = new HashMap<>();
- for (ActiveCosmetic value : activeCosmeticMap.values()) {
- CosmeticData cosmeticData = cosmeticDataMap.get(value.getCosmeticData());
- if (cosmeticData != null) {
- List cosmeticsByTypeList = activeCosmeticByType.computeIfAbsent(cosmeticData.getCosmeticType(), a-> new CopyOnWriteArrayList<>());
- cosmeticsByTypeList.add(value);
- }
- List activeCosmetics = activeCosmeticByPlayer.computeIfAbsent(value.getPlayerUID(), a-> new CopyOnWriteArrayList<>());
- activeCosmetics.add(value);
- activeCosmetics = activeCosmeticByPlayerName.computeIfAbsent(value.getUsername().toLowerCase(), a-> new CopyOnWriteArrayList<>());
- activeCosmetics.add(value);
- }
-
- this.activeCosmeticByPlayerNameLowerCase = activeCosmeticByPlayerName;
- this.activeCosmeticByPlayer = activeCosmeticByPlayer;
- this.activeCosmeticByType = activeCosmeticByType;
- }
-
- @SubscribeEvent
- public void stompConnect(StompConnectedEvent stompConnectedEvent) {
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/topic/cosmetic.set").build());
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/reply/user.perms").build());
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/reply/cosmetic.activelist").build());
- stompConnectedEvent.getStompInterface().subscribe(StompSubscription.builder()
- .stompMessageHandler(this).ackMode(StompSubscription.AckMode.AUTO).destination("/user/queue/reply/cosmetic.list").build());
-
- requestCosmeticsList();
- requestActiveCosmetics();
- requestPerms();
- }
- @Getter @Setter
- private static List iChatReplacers = new ArrayList<>();
- static {
- iChatReplacers.add(new ChatReplacerViewProfile());
- iChatReplacers.add(new ChatReplacerPV());
- iChatReplacers.add(new ChatReplacerSocialOptions());
- iChatReplacers.add(new ChatReplacerCoop());
- iChatReplacers.add(new ChatReplacerMessage());
- iChatReplacers.add(new ChatReplacerChatByMe());
- }
-
- @SubscribeEvent(priority = EventPriority.LOWEST)
- public void onChat(ClientChatReceivedEvent clientChatReceivedEvent) {
- try {
- if (clientChatReceivedEvent.type == 2) return;
- for (IChatReplacer iChatReplacer : iChatReplacers) {
- if (iChatReplacer.isAcceptable(clientChatReceivedEvent)) {
- iChatReplacer.translate(clientChatReceivedEvent, this);
- return;
- }
- }
- } catch (Throwable t) {
- System.out.println(clientChatReceivedEvent.message);
- t.printStackTrace();
- }
- }
-
-
- @SubscribeEvent
- public void onTabList(PlayerListItemPacketEvent packetPlayerListItem) {
- S38PacketPlayerListItem asd = packetPlayerListItem.getPacketPlayerListItem();
- if (asd.getAction() == S38PacketPlayerListItem.Action.ADD_PLAYER) {
- if (Minecraft.getMinecraft().getNetHandler() == null) return;
-
- Map playerInfoMap = ReflectionHelper.getPrivateValue(NetHandlerPlayClient.class, Minecraft.getMinecraft().getNetHandler(), "playerInfoMap", "field_147310_i","i");
- for (S38PacketPlayerListItem.AddPlayerData entry : asd.getEntries()) {
- playerInfoMap.remove(entry.getProfile().getId());
- playerInfoMap.put(entry.getProfile().getId(), new CustomNetworkPlayerInfo(entry));
- }
- }
- }
-
- @SubscribeEvent(priority = EventPriority.LOWEST)
- public void nameFormat(PlayerEvent.NameFormat nameFormat) {
- List activeCosmetics = activeCosmeticByPlayer.get(nameFormat.entityPlayer.getGameProfile().getId());
- if (activeCosmetics == null) return;
- CosmeticData color=null, prefix=null;
- for (ActiveCosmetic activeCosmetic : activeCosmetics) {
- CosmeticData cosmeticData = cosmeticDataMap.get(activeCosmetic.getCosmeticData());
- if (cosmeticData !=null && cosmeticData.getCosmeticType().equals("color")) {
- color = cosmeticData;
- } else if (cosmeticData != null && cosmeticData.getCosmeticType().equals("prefix")) {
- prefix = cosmeticData;
- }
- }
-
-
- if (color != null)
- nameFormat.displayname = color.getData().replace("&","ยง")+nameFormat.username;
-
- if (prefix != null)
- nameFormat.displayname = prefix.getData().replace("&","ยง")+" "+nameFormat.displayname;
-
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomNetworkPlayerInfo.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomNetworkPlayerInfo.java
deleted file mode 100644
index cfbf1fc0..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomNetworkPlayerInfo.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.cosmetics;
-
-import com.mojang.authlib.GameProfile;
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.client.network.NetworkPlayerInfo;
-import net.minecraft.network.play.server.S38PacketPlayerListItem;
-import net.minecraft.scoreboard.ScorePlayerTeam;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.IChatComponent;
-
-import java.util.List;
-
-public class CustomNetworkPlayerInfo extends NetworkPlayerInfo {
- public CustomNetworkPlayerInfo(GameProfile p_i46294_1_) {
- super(p_i46294_1_);
- }
-
- public CustomNetworkPlayerInfo(S38PacketPlayerListItem.AddPlayerData p_i46295_1_) {
- super(p_i46295_1_);
- setDisplayName(super.getDisplayName());
- }
-
-
- private IChatComponent displayName;
- private String playernameLowercase;
- private String unformatted;
- private String actualName;
- @Override
- public void setDisplayName(IChatComponent displayNameIn) {
- displayName = displayNameIn;
- if (displayName == null) {
- playernameLowercase = null;
- unformatted = null;
- return;
- }
-
- unformatted = displayName.getUnformattedText();
-
-
- actualName = "";
- for (String s : unformatted.split(" ")) {
- String strippped = TextUtils.stripColor(s);
- if (strippped.startsWith("[")) continue;
- actualName = strippped;
- break;
- }
- playernameLowercase = actualName.toLowerCase();
- }
-
- public IChatComponent getDisplayName()
- {
-
- String semi_name;
- String actualName;
- List activeCosmetics;
- if (playernameLowercase != null) {
- activeCosmetics = DungeonsGuide.getDungeonsGuide().getCosmeticsManager().getActiveCosmeticByPlayerNameLowerCase().get(playernameLowercase);
- semi_name = unformatted;
- actualName = this.actualName;
- } else {
- semi_name = ScorePlayerTeam.formatPlayerName(super.getPlayerTeam(), super.getGameProfile().getName());
- actualName = "";
- for (String s : semi_name.split(" ")) {
- String strippped = TextUtils.stripColor(s);
- if (strippped.startsWith("[")) continue;
- actualName = strippped;
- break;
- }
- activeCosmetics = DungeonsGuide.getDungeonsGuide().getCosmeticsManager().getActiveCosmeticByPlayerNameLowerCase().get(actualName.toLowerCase());
- }
-
-
- if (activeCosmetics == null) return displayName;
- CosmeticData color=null;
- for (ActiveCosmetic activeCosmetic : activeCosmetics) {
- CosmeticData cosmeticData = DungeonsGuide.getDungeonsGuide().getCosmeticsManager().getCosmeticDataMap().get(activeCosmetic.getCosmeticData());
- if (cosmeticData.getCosmeticType().equals("color")) color = cosmeticData;
- }
-
- if (color != null) semi_name = semi_name.replace(actualName, color.getData()+actualName);
-
- return new ChatComponentText(semi_name);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomPacketPlayerListItem.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomPacketPlayerListItem.java
deleted file mode 100644
index 2f957c42..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/CustomPacketPlayerListItem.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.cosmetics;
-
-import kr.syeyoung.dungeonsguide.events.PlayerListItemPacketEvent;
-import net.minecraft.network.Packet;
-import net.minecraft.network.play.INetHandlerPlayClient;
-import net.minecraft.network.play.server.S38PacketPlayerListItem;
-import net.minecraftforge.common.MinecraftForge;
-
-public class CustomPacketPlayerListItem extends S38PacketPlayerListItem {
- public CustomPacketPlayerListItem(S38PacketPlayerListItem packet) {
- super(packet.getAction());
- getEntries().addAll(packet.getEntries());
- }
-
- @Override
- public void processPacket(INetHandlerPlayClient handler) {
- super.processPacket(handler);
-
- MinecraftForge.EVENT_BUS.post(new PlayerListItemPacketEvent(this));
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/IChatReplacer.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/IChatReplacer.java
deleted file mode 100644
index b2bcfc0e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/IChatReplacer.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.cosmetics;
-
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-
-public interface IChatReplacer {
- boolean isAcceptable(ClientChatReceivedEvent event);
- void translate(ClientChatReceivedEvent event, CosmeticsManager cosmeticsManager);
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerChatByMe.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerChatByMe.java
deleted file mode 100644
index 8c99847a..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerChatByMe.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.cosmetics.chatreplacers;
-
-import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.cosmetics.IChatReplacer;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.ChatStyle;
-import net.minecraft.util.IChatComponent;
-import net.minecraft.util.Tuple;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ChatReplacerChatByMe implements IChatReplacer {
- @Override
- public boolean isAcceptable(ClientChatReceivedEvent event) {
- for (IChatComponent sibling : event.message.getSiblings()) {
- if (sibling.getUnformattedTextForChat().startsWith(": ")) return true;
- }
- return false;
- }
-
- @Override
- public void translate(ClientChatReceivedEvent event, CosmeticsManager cosmeticsManager) {
- List> replaceMents = new ArrayList<>();
- List iChatComponents = new ArrayList<>( event.message.getSiblings() );
- List hasMsg = new ArrayList<>();
- for (IChatComponent sibling : iChatComponents) {
- if (sibling.getUnformattedTextForChat().startsWith(": ")) break;
- hasMsg.add(sibling);
- }
- iChatComponents.removeAll(hasMsg);
-
- ChatComponentText chatComponents = new ChatComponentText("");
- chatComponents.getSiblings().addAll(hasMsg);
- ChatStyle origStyle = hasMsg.get(0).getChatStyle();
- String name = chatComponents.getFormattedText();
-
- String[] splited = name.split(" ");
- String actualName = splited[splited.length-1];
-
- List cDatas = cosmeticsManager.getActiveCosmeticByPlayerNameLowerCase().get(TextUtils.stripColor(actualName).toLowerCase());
- if (cDatas == null) return;
- CosmeticData color=null, prefix=null;
- for (ActiveCosmetic activeCosmetic : cDatas) {
- CosmeticData cosmeticData = cosmeticsManager.getCosmeticDataMap().get(activeCosmetic.getCosmeticData());
- if (cosmeticData !=null && cosmeticData.getCosmeticType().equals("color")) {
- color = cosmeticData;
- } else if (cosmeticData != null && cosmeticData.getCosmeticType().equals("prefix")) {
- prefix = cosmeticData;
- }
- }
-
- String building = "";
- if (prefix != null) building += prefix.getData().replace("&", "ยง") + " ";
- for (int i = 0; i < splited.length-1; i++) {
- building += splited[i] +" ";
- }
-
- if (color != null) {
- String nick = splited[splited.length-1];
- building += color.getData().replace("&","ยง");
- boolean foundLegitChar = false;
- boolean foundColor = false;
- for (char c : nick.toCharArray()) {
- if (foundColor) {
- foundColor = false; continue;
- }
- if (c == 'ยง' && !foundLegitChar) foundColor = true;
- else {
- foundLegitChar = true;
- building += c;
- }
- }
- } else {
- building += splited[splited.length-1] ;
- }
-
- ChatComponentText chatComponents1 = new ChatComponentText(building);
- chatComponents1.setChatStyle(origStyle);
- event.message.getSiblings().clear();
- event.message.getSiblings().add(chatComponents1);
- event.message.getSiblings().addAll(iChatComponents);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerCoop.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerCoop.java
deleted file mode 100644
index 91bb58b6..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerCoop.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.cosmetics.chatreplacers;
-
-import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.cosmetics.IChatReplacer;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.ChatStyle;
-import net.minecraft.util.IChatComponent;
-import net.minecraft.util.Tuple;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-public class ChatReplacerCoop implements IChatReplacer {
- @Override
- public boolean isAcceptable(ClientChatReceivedEvent event) {
- for (IChatComponent sibling : event.message.getSiblings()) {
- if (sibling.getUnformattedTextForChat().startsWith("ยงbCo-op > ")) return true;
- }
- return false;
- }
-
- @Override
- public void translate(ClientChatReceivedEvent event, CosmeticsManager cosmeticsManager) {
- List> replaceMents = new ArrayList<>();
- List iChatComponents = new ArrayList<>( event.message.getSiblings() );
- IChatComponent sibling = iChatComponents.get(0); iChatComponents.remove(sibling);
-
-
- String[] splitInto = sibling.getUnformattedTextForChat().split(" ");
- int lastValidNickname = -1;
- int lastprefix = -1;
- for (int i = 0; i < splitInto.length; i++) {
- String s = TextUtils.stripColor(splitInto[i]);
- char c = s.charAt(0);
- if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_' || c == '-') {
- lastValidNickname = i;
- }
- }
- if (lastValidNickname == -1) return;
-
- if (lastValidNickname -1 >= 0 && TextUtils.stripColor(splitInto[lastValidNickname - 1]).charAt(0) == '[') lastprefix = lastValidNickname -1;
- else lastprefix = lastValidNickname;
-
-
- List cDatas = cosmeticsManager.getActiveCosmeticByPlayerNameLowerCase().get(TextUtils.stripColor(splitInto[lastValidNickname].substring(0, splitInto[lastValidNickname].length()-1)).toLowerCase());
-
- if (cDatas == null) return;
-
- CosmeticData color = null, prefix = null;
- for (ActiveCosmetic activeCosmetic : cDatas) {
- CosmeticData cosmeticData = cosmeticsManager.getCosmeticDataMap().get(activeCosmetic.getCosmeticData());
- if (cosmeticData != null && cosmeticData.getCosmeticType().equals("color")) {
- color = cosmeticData;
- } else if (cosmeticData != null && cosmeticData.getCosmeticType().equals("prefix")) {
- prefix = cosmeticData;
- }
- }
-
- String building = "";
- for (int i = 0; i < lastprefix; i++) {
- building += splitInto[i] +" ";
- }
- if (prefix != null) building += prefix.getData().replace("&", "ยง") + " ";
- for (int i = lastprefix; i < lastValidNickname; i++) {
- building += splitInto[i] +" ";
- }
- if (color != null) {
- String nick = splitInto[lastValidNickname];
- building += color.getData().replace("&","ยง");
- boolean foundLegitChar = false;
- boolean foundColor = false;
- for (char c : nick.toCharArray()) {
- if (foundColor) {
- foundColor = false; continue;
- }
- if (c == 'ยง' && !foundLegitChar) foundColor = true;
- else {
- foundLegitChar = true;
- building += c;
- }
- }
- building += " ";
- } else {
- building += splitInto[lastValidNickname] + " ";
- }
- for (int i = lastValidNickname+1; i.
- */
-
-package kr.syeyoung.dungeonsguide.cosmetics.chatreplacers;
-
-import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.cosmetics.IChatReplacer;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.ChatStyle;
-import net.minecraft.util.IChatComponent;
-import net.minecraft.util.Tuple;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-public class ChatReplacerMessage implements IChatReplacer {
- @Override
- public boolean isAcceptable(ClientChatReceivedEvent event) {
- for (IChatComponent sibling : event.message.getSiblings()) {
- if (sibling.getChatStyle() != null && sibling.getChatStyle().getChatClickEvent() != null && sibling.getChatStyle().getChatClickEvent().getValue().startsWith("/msg")) return true;
- }
- return false;
- }
-
- @Override
- public void translate(ClientChatReceivedEvent event, CosmeticsManager cosmeticsManager) {
- List> replaceMents = new ArrayList<>();
- List iChatComponents = new ArrayList<>( event.message.getSiblings() );
- List hasMsg = new ArrayList<>();
- for (IChatComponent sibling : iChatComponents) {
- if (sibling.getChatStyle() != null && sibling.getChatStyle().getChatClickEvent() != null && sibling.getChatStyle().getChatClickEvent().getValue().startsWith("/msg")) {
- hasMsg.add(sibling);
- }
- }
- iChatComponents.removeAll(hasMsg);
-
- ChatComponentText chatComponents = new ChatComponentText("");
- chatComponents.getSiblings().addAll(hasMsg);
- ChatStyle origStyle = hasMsg.get(0).getChatStyle();
- String name = chatComponents.getFormattedText();
-
-
- String[] splited = name.split(" ");
- String actualName = splited[splited.length-1];
-
- List cDatas = cosmeticsManager.getActiveCosmeticByPlayerNameLowerCase().get(TextUtils.stripColor(actualName).toLowerCase());
- if (cDatas == null || splited.length > 2) return;
- CosmeticData color=null, prefix=null;
- for (ActiveCosmetic activeCosmetic : cDatas) {
- CosmeticData cosmeticData = cosmeticsManager.getCosmeticDataMap().get(activeCosmetic.getCosmeticData());
- if (cosmeticData !=null && cosmeticData.getCosmeticType().equals("color")) {
- color = cosmeticData;
- } else if (cosmeticData != null && cosmeticData.getCosmeticType().equals("prefix")) {
- prefix = cosmeticData;
- }
- }
-
- String building = "";
- if (prefix != null) building += prefix.getData().replace("&", "ยง") + " ";
- if (splited.length == 2) building += splited[0] +" ";
-
- if (color != null) {
- String nick = splited[1];
- building += color.getData().replace("&","ยง");
- boolean foundLegitChar = false;
- boolean foundColor = false;
- for (char c : nick.toCharArray()) {
- if (foundColor) {
- foundColor = false; continue;
- }
- if (c == 'ยง' && !foundLegitChar) foundColor = true;
- else {
- foundLegitChar = true;
- building += c;
- }
- }
- } else {
- building += splited[1] ;
- }
-
- ChatComponentText chatComponents1 = new ChatComponentText(building);
- chatComponents1.setChatStyle(origStyle);
- event.message.getSiblings().clear();
- event.message.getSiblings().add(chatComponents1);
- event.message.getSiblings().addAll(iChatComponents);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerPV.java b/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerPV.java
deleted file mode 100644
index e5e4053f..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/cosmetics/chatreplacers/ChatReplacerPV.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.cosmetics.chatreplacers;
-
-import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.cosmetics.IChatReplacer;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.util.ChatComponentText;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-
-import java.util.List;
-
-
-// Bug 289 - mod conflict with NEU (Replaces /socialoptions with /pv)
-public class ChatReplacerPV implements IChatReplacer {
- @Override
- public boolean isAcceptable(ClientChatReceivedEvent event) {
- if (event.message.getChatStyle() != null && event.message.getChatStyle().getChatClickEvent() != null && event.message.getChatStyle().getChatClickEvent().getValue().startsWith("/pv")) return true;
- return false;
- }
-
- @Override
- public void translate(ClientChatReceivedEvent event, CosmeticsManager cosmeticsManager) {
- if (event.message.getChatStyle() != null && event.message.getChatStyle().getChatClickEvent() != null && event.message.getChatStyle().getChatClickEvent().getValue().startsWith("/pv")) {
- String username = event.message.getChatStyle().getChatClickEvent().getValue().split(" ")[1];
- List cDatas = cosmeticsManager.getActiveCosmeticByPlayerNameLowerCase().get(username.toLowerCase());
-
- if (cDatas != null) {
- CosmeticData color=null, prefix=null;
- for (ActiveCosmetic activeCosmetic : cDatas) {
- CosmeticData cosmeticData = cosmeticsManager.getCosmeticDataMap().get(activeCosmetic.getCosmeticData());
- if (cosmeticData !=null && cosmeticData.getCosmeticType().equals("color")) {
- color = cosmeticData;
- } else if (cosmeticData != null && cosmeticData.getCosmeticType().equals("prefix")) {
- prefix = cosmeticData;
- }
- }
-
- String[] splitInto = event.message.getUnformattedTextForChat().split(" ");
- int lastValidNickname = -1;
- int lastprefix = -1;
- for (int i = 0; i < splitInto.length; i++) {
- String s = splitInto[i];
- if (s.startsWith("ยง7")) s = s.substring(2);
- char c = s.charAt(0);
- if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_' || c == '-') {
- lastValidNickname = i;
- if (i >= 1) {
- String str = TextUtils.stripColor(splitInto[i-1]);
- if (str.startsWith("[") && str.endsWith("]"))break;
- }
- }
- }
- if (lastValidNickname == -1) return;
-
- if (lastValidNickname -1 >= 0 && TextUtils.stripColor(splitInto[lastValidNickname - 1]).charAt(0) == '[') lastprefix = lastValidNickname -1;
- else lastprefix = lastValidNickname;
-
- String building = "";
- for (int i = 0; i < lastprefix; i++) {
- building += splitInto[i] +" ";
- }
- if (prefix != null) building += prefix.getData().replace("&", "ยง") + " ";
- for (int i = lastprefix; i < lastValidNickname; i++) {
- building += splitInto[i] +" ";
- }
- if (color != null) {
- String nick = splitInto[lastValidNickname];
- building += color.getData().replace("&","ยง");
- boolean foundLegitChar = false;
- boolean foundColor = false;
- for (char c : nick.toCharArray()) {
- if (foundColor) {
- foundColor = false; continue;
- }
- if (c == 'ยง' && !foundLegitChar) foundColor = true;
- else {
- foundLegitChar = true;
- building += c;
- }
- }
- building += " ";
- } else {
- building += splitInto[lastValidNickname] + " ";
- }
- for (int i = lastValidNickname+1; i.
- */
-
-package kr.syeyoung.dungeonsguide.cosmetics.chatreplacers;
-
-import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.cosmetics.IChatReplacer;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.IChatComponent;
-import net.minecraft.util.Tuple;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-public class ChatReplacerSocialOptions implements IChatReplacer {
- @Override
- public boolean isAcceptable(ClientChatReceivedEvent event) {
- if (event.message.getChatStyle() != null && event.message.getChatStyle().getChatClickEvent() != null && event.message.getChatStyle().getChatClickEvent().getValue().startsWith("/socialoptions")) return true;
- return false;
- }
-
- @Override
- public void translate(ClientChatReceivedEvent event, CosmeticsManager cosmeticsManager) {
- if (event.message.getChatStyle() != null && event.message.getChatStyle().getChatClickEvent() != null && event.message.getChatStyle().getChatClickEvent().getValue().startsWith("/socialoptions")) {
- String username = event.message.getChatStyle().getChatClickEvent().getValue().split(" ")[1];
- List cDatas = cosmeticsManager.getActiveCosmeticByPlayerNameLowerCase().get(username.toLowerCase());
-
- if (cDatas != null) {
- CosmeticData color=null, prefix=null;
- for (ActiveCosmetic activeCosmetic : cDatas) {
- CosmeticData cosmeticData = cosmeticsManager.getCosmeticDataMap().get(activeCosmetic.getCosmeticData());
- if (cosmeticData !=null && cosmeticData.getCosmeticType().equals("color")) {
- color = cosmeticData;
- } else if (cosmeticData != null && cosmeticData.getCosmeticType().equals("prefix")) {
- prefix = cosmeticData;
- }
- }
-
- String[] splitInto = event.message.getUnformattedTextForChat().split(" ");
- int lastValidNickname = -1;
- int lastprefix = -1;
- for (int i = 0; i < splitInto.length; i++) {
- String s = splitInto[i];
- if (s.startsWith("ยง7")) s = s.substring(2);
- char c = s.charAt(0);
- if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_' || c == '-') {
- lastValidNickname = i;
- if (i >= 1) {
- String str = TextUtils.stripColor(splitInto[i-1]);
- if (str.startsWith("[") && str.endsWith("]"))break;
- }
- }
- }
- if (lastValidNickname == -1) return;
-
- if (lastValidNickname -1 >= 0 && TextUtils.stripColor(splitInto[lastValidNickname - 1]).charAt(0) == '[') lastprefix = lastValidNickname -1;
- else lastprefix = lastValidNickname;
-
- String building = "";
- for (int i = 0; i < lastprefix; i++) {
- building += splitInto[i] +" ";
- }
- if (prefix != null) building += prefix.getData().replace("&", "ยง") + " ";
- for (int i = lastprefix; i < lastValidNickname; i++) {
- building += splitInto[i] +" ";
- }
- if (color != null) {
- String nick = splitInto[lastValidNickname];
- building += color.getData().replace("&","ยง");
- boolean foundLegitChar = false;
- boolean foundColor = false;
- for (char c : nick.toCharArray()) {
- if (foundColor) {
- foundColor = false; continue;
- }
- if (c == 'ยง' && !foundLegitChar) foundColor = true;
- else {
- foundLegitChar = true;
- building += c;
- }
- }
- building += " ";
- } else {
- building += splitInto[lastValidNickname] + " ";
- }
- for (int i = lastValidNickname+1; i.
- */
-
-package kr.syeyoung.dungeonsguide.cosmetics.chatreplacers;
-
-import kr.syeyoung.dungeonsguide.cosmetics.ActiveCosmetic;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticData;
-import kr.syeyoung.dungeonsguide.cosmetics.CosmeticsManager;
-import kr.syeyoung.dungeonsguide.cosmetics.IChatReplacer;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.IChatComponent;
-import net.minecraft.util.Tuple;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-public class ChatReplacerViewProfile implements IChatReplacer {
- @Override
- public boolean isAcceptable(ClientChatReceivedEvent event) {
- for (IChatComponent sibling : event.message.getSiblings()) {
- if (sibling.getChatStyle() != null && sibling.getChatStyle().getChatClickEvent() != null && sibling.getChatStyle().getChatClickEvent().getValue().startsWith("/viewprofile ")) return true;
- }
- return false;
- }
-
- @Override
- public void translate(ClientChatReceivedEvent event, CosmeticsManager cosmeticsManager) {
- List> replaceMents = new ArrayList<>();
- for (IChatComponent sibling : event.message.getSiblings()) {
- if (sibling.getChatStyle() != null && sibling.getChatStyle().getChatClickEvent() != null && sibling.getChatStyle().getChatClickEvent().getValue().startsWith("/viewprofile ")) {
- String uid = sibling.getChatStyle().getChatClickEvent().getValue().split(" ")[1];
- List cDatas = cosmeticsManager.getActiveCosmeticByPlayer().get(UUID.fromString(uid));
-
- if (cDatas != null) {
- CosmeticData color=null, prefix=null;
- for (ActiveCosmetic activeCosmetic : cDatas) {
- CosmeticData cosmeticData = cosmeticsManager.getCosmeticDataMap().get(activeCosmetic.getCosmeticData());
- if (cosmeticData !=null && cosmeticData.getCosmeticType().equals("color")) {
- color = cosmeticData;
- } else if (cosmeticData != null && cosmeticData.getCosmeticType().equals("prefix")) {
- prefix = cosmeticData;
- }
- }
-
- String[] splitInto = sibling.getUnformattedTextForChat().split(" ");
- int lastValidNickname = -1;
- int lastprefix = -1;
- for (int i = 0; i < splitInto.length; i++) {
- String s = TextUtils.stripColor(splitInto[i]);
- char c = s.charAt(0);
- if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_' || c == '-') {
- lastValidNickname = i;
- if (i >= 1) {
- String str = TextUtils.stripColor(splitInto[i-1]);
- if (str.startsWith("[") && str.endsWith("]"))break;
- }
- }
- }
- if (lastValidNickname == -1) continue;
-
- if (lastValidNickname -1 >= 0 && TextUtils.stripColor(splitInto[lastValidNickname - 1]).charAt(0) == '[') lastprefix = lastValidNickname -1;
- else lastprefix = lastValidNickname;
-
- String building = "";
- for (int i = 0; i < lastprefix; i++) {
- building += splitInto[i] +" ";
- }
- if (prefix != null) building += prefix.getData().replace("&", "ยง") + " ";
- for (int i = lastprefix; i < lastValidNickname; i++) {
- building += splitInto[i] +" ";
- }
- if (color != null) {
- String nick = splitInto[lastValidNickname];
- building += color.getData().replace("&","ยง");
- boolean foundLegitChar = false;
- boolean foundColor = false;
- for (char c : nick.toCharArray()) {
- if (foundColor) {
- foundColor = false; continue;
- }
- if (c == 'ยง' && !foundLegitChar) foundColor = true;
- else {
- foundLegitChar = true;
- building += c;
- }
- }
- building += " ";
- } else {
- building += splitInto[lastValidNickname] + " ";
- }
- for (int i = lastValidNickname+1; i(sibling, newChatCompText));
- break;
- }
- }
- }
-
- for (Tuple replaceMent : replaceMents) {
- int index = event.message.getSiblings().indexOf(replaceMent.getFirst());
- event.message.getSiblings().set(index, replaceMent.getSecond());
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonActionManager.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonActionManager.java
deleted file mode 100644
index 667f329c..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonActionManager.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.dungeon;
-
-import lombok.Getter;
-import net.minecraft.entity.Entity;
-import net.minecraft.entity.EntityLiving;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.Vec3;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class DungeonActionManager {
- @Getter
- private static final Map spawnLocation = new HashMap();
-
- @Getter
- private static final List killeds = new ArrayList();
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java
deleted file mode 100755
index bd04d7a9..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * 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.dungeon;
-
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonSpecificDataProvider;
-import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonSpecificDataProviderRegistry;
-import kr.syeyoung.dungeonsguide.dungeon.events.*;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.events.BossroomEnterEvent;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.features.impl.dungeon.FeatureDungeonMap;
-import kr.syeyoung.dungeonsguide.roomprocessor.RoomProcessor;
-import kr.syeyoung.dungeonsguide.roomprocessor.bossfight.BossfightProcessor;
-import kr.syeyoung.dungeonsguide.utils.TextUtils;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.network.NetworkPlayerInfo;
-import net.minecraft.scoreboard.ScorePlayerTeam;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.IChatComponent;
-import net.minecraft.world.World;
-import net.minecraftforge.client.event.ClientChatReceivedEvent;
-import net.minecraftforge.common.MinecraftForge;
-
-import java.awt.*;
-import java.util.*;
-import java.util.List;
-
-public class DungeonContext {
- @Getter
- private final World world;
- @Getter
- private final MapProcessor mapProcessor;
-
- @Getter
- @Setter
- private BlockPos dungeonMin;
-
- @Getter
- private final Map roomMapper = new HashMap();
- @Getter
- private final List dungeonRoomList = new ArrayList();
-
- @Getter
- private final List globalRoomProcessors = new ArrayList();
-
- @Getter
- private final Map deaths = new HashMap();
- @Getter
- private final List milestoneReached = new ArrayList();
- @Getter
- @Setter
- private long BossRoomEnterSeconds = -1;
- @Getter
- @Setter
- private long init = -1;
- @Getter
- @Setter
- private BlockPos bossroomSpawnPos = null;
-
- @Getter
- @Setter
- private boolean trapRoomGen = false;
-
- @Getter
- private boolean gotMimic = false;
-
- private int latestSecretCnt = 0;
- private int latestTotalSecret = 0;
- private int latestCrypts = 0;
-
- @Getter
- private int maxSpeed = 600;
- @Getter
- private double secretPercentage = 1.0;
-
- public void setGotMimic(boolean gotMimic) {
- this.gotMimic = gotMimic;
- createEvent(new DungeonNodataEvent("MIMIC_KILLED"));
- }
-
- @Getter
- @Setter
- private BossfightProcessor bossfightProcessor;
-
- @Getter
- private final Set players = new HashSet();
-
- @Getter
- private final List events = new ArrayList();
-
- public DungeonContext(World world) {
- this.world = world;
- createEvent(new DungeonNodataEvent("DUNGEON_CONTEXT_CREATION"));
- mapProcessor = new MapProcessor(this);
- DungeonSpecificDataProvider doorFinder = DungeonSpecificDataProviderRegistry.getDoorFinder(DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- if (doorFinder != null) {
- trapRoomGen = doorFinder.isTrapSpawn(DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
-
- secretPercentage = doorFinder.secretPercentage(DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- maxSpeed = doorFinder.speedSecond(DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- } else mapProcessor.setBugged(true);
- init = System.currentTimeMillis();
- }
-
- public void createEvent(DungeonEventData eventData) {
- events.add(new DungeonEvent(eventData));
- }
-
-
- private final Rectangle roomBoundary = new Rectangle(-10,-10,138,138);
-
- public void tick() {
- mapProcessor.tick();
-
- if (mapProcessor.isInitialized() && BossRoomEnterSeconds == -1 && !roomBoundary.contains(mapProcessor.worldPointToMapPoint(Minecraft.getMinecraft().thePlayer.getPositionVector()))) {
- BossRoomEnterSeconds = FeatureRegistry.DUNGEON_SBTIME.getTimeElapsed() / 1000;
- bossroomSpawnPos = Minecraft.getMinecraft().thePlayer.getPosition();
- MinecraftForge.EVENT_BUS.post(new BossroomEnterEvent());
- createEvent(new DungeonNodataEvent("BOSSROOM_ENTER"));
- DungeonSpecificDataProvider doorFinder = DungeonSpecificDataProviderRegistry.getDoorFinder(DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- if (doorFinder != null) {
- bossfightProcessor = doorFinder.createBossfightProcessor(world, DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- } else {
- DungeonsGuide.sendDebugChat(new ChatComponentText("Error:: Null Data Providier"));
- }
- }
- List list = FeatureDungeonMap.field_175252_a.sortedCopy(Minecraft.getMinecraft().thePlayer.sendQueue.getPlayerInfoMap());
- try {
- for (int i = 1; i < 20; i++) {
- NetworkPlayerInfo networkPlayerInfo = list.get(i);
- String name = networkPlayerInfo.getDisplayName() != null ? networkPlayerInfo.getDisplayName().getFormattedText() : ScorePlayerTeam.formatPlayerName(networkPlayerInfo.getPlayerTeam(), networkPlayerInfo.getGameProfile().getName());
- if (name.trim().equals("ยงr") || name.startsWith("ยงr ")) continue;
- players.add(TextUtils.stripColor(name).trim().split(" ")[0]);
- }
- } catch (Exception e) {}
-
- if (latestSecretCnt != FeatureRegistry.DUNGEON_SECRETS.getSecretsFound()) {
- int newSecretCnt = FeatureRegistry.DUNGEON_SECRETS.getSecretsFound();
- createEvent(new DungeonSecretCountChangeEvent(latestSecretCnt, newSecretCnt, latestTotalSecret, FeatureRegistry.DUNGEON_SECRETS.sureOfTotalSecrets()));
- latestSecretCnt = newSecretCnt;
- }
- if (latestTotalSecret != FeatureRegistry.DUNGEON_SECRETS.getTotalSecretsInt()) {
- latestTotalSecret = FeatureRegistry.DUNGEON_SECRETS.getTotalSecretsInt();
- createEvent(new DungeonSecretCountChangeEvent(latestSecretCnt, latestSecretCnt, latestTotalSecret, FeatureRegistry.DUNGEON_SECRETS.sureOfTotalSecrets()));
- }
- if (latestCrypts != FeatureRegistry.DUNGEON_TOMBS.getTombsFound()) {
- int newlatestCrypts = FeatureRegistry.DUNGEON_TOMBS.getTombsFound();
- createEvent(new DungeonCryptBrokenEvent(latestCrypts, newlatestCrypts));
- this.latestCrypts = newlatestCrypts;
- }
- }
-
- @Getter
- private boolean ended = false;
- @Getter
- private boolean defeated = false;
- public void onChat(ClientChatReceivedEvent event) {
- IChatComponent component = event.message;
- String formatted = component.getFormattedText();
- if (formatted.contains("$DG-Comm")) {
- event.setCanceled(true);
- String data = component.getFormattedText().substring(component.getFormattedText().indexOf("$DG-Comm"));
- String actual = TextUtils.stripColor(data);
- String coords = actual.split(" ")[1];
- String secrets = actual.split(" ")[2];
- int x = Integer.parseInt(coords.split("/")[0]);
- int z = Integer.parseInt(coords.split("/")[1]);
- int secrets2 = Integer.parseInt(secrets);
- Point roomPt = mapProcessor.worldPointToRoomPoint(new BlockPos(x,70,z));
- DungeonsGuide.sendDebugChat(new ChatComponentText("Message from Other dungeons guide :: "+roomPt.x+" / " + roomPt.y + " total secrets "+secrets2));
- DungeonRoom dr = roomMapper.get(roomPt);
- if (dr != null) {
- dr.setTotalSecrets(secrets2);
- }
- } else if (formatted.contains("$DG-Mimic")) {
- setGotMimic(true);
- } else if (formatted.startsWith("ยงrยงcยงlPUZZLE FAIL! ") && formatted.endsWith(" ยงrยง4Yยงrยงciยงrยง6kยงrยงeeยงrยงasยงrยง2!ยงr")) {
- createEvent(new DungeonPuzzleFailureEvent(TextUtils.stripColor(formatted.split(" ")[2]), formatted));
- } else if (formatted.contains("ยง6> ยงeยงlEXTRA STATS ยง6<")) {
- createEvent(new DungeonNodataEvent("DUNGEON_END"));
- ended = true;
- } else if (formatted.contains("ยงrยงcโ ยงrยงeDefeated ")) {
- defeated = true;
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java
deleted file mode 100755
index 8f9ae312..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * 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.dungeon;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.Sets;
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonSpecificDataProvider;
-import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonSpecificDataProviderRegistry;
-import kr.syeyoung.dungeonsguide.dungeon.doorfinder.EDungeonDoorType;
-import kr.syeyoung.dungeonsguide.dungeon.events.DungeonMapUpdateEvent;
-import kr.syeyoung.dungeonsguide.dungeon.events.DungeonNodataEvent;
-import kr.syeyoung.dungeonsguide.dungeon.events.DungeonRoomDiscoverEvent;
-import kr.syeyoung.dungeonsguide.dungeon.events.SerializableBlockPos;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.events.DungeonContextInitializationEvent;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.stomp.StompPayload;
-import kr.syeyoung.dungeonsguide.utils.MapUtils;
-import kr.syeyoung.dungeonsguide.wsresource.StaticResourceCache;
-import lombok.Getter;
-import lombok.Setter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemMap;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.*;
-import net.minecraft.world.storage.MapData;
-import net.minecraftforge.common.MinecraftForge;
-import org.json.JSONObject;
-
-import javax.vecmath.Vector2d;
-import java.awt.*;
-import java.util.List;
-import java.util.Queue;
-import java.util.*;
-
-public class MapProcessor {
-
- private final DungeonContext context;
-
- private byte[] lastMapData;
-
- @Getter
- private MapData lastMapData2;
-
- @Getter
- private final BiMap mapIconToPlayerMap = HashBiMap.create();
-
- @Getter @Setter
- private Dimension unitRoomDimension;
- @Getter @Setter
- private Dimension doorDimension; // width: width of door, height: gap between rooms
- @Getter @Setter
- private Point topLeftMapPoint;
-
- @Setter
- private boolean bugged = false;
-
- private final List roomsFound = new ArrayList();
-
- private boolean axisMatch = false;
-
- @Getter
- private boolean initialized = false;
-
- @Getter
- private int undiscoveredRoom = 0;
-
- public MapProcessor(DungeonContext context) {
- this.context = context;
- }
-
- private static final Set directions = Sets.newHashSet(new Vector2d(0,1), new Vector2d(0, -1), new Vector2d(1, 0), new Vector2d(-1 , 0));
-
- private int waitCnt = 0;
- private void buildMap(final byte[] mapData) {
- final Point startroom = MapUtils.findFirstColorWithIn(mapData, (byte) 30, new Rectangle(0,0,128,128));
- if (startroom == null){
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCouldn't retrieve map data, disabling mod for this dungeon run"));
- bugged = true;
- return;
- }
- // Determine room dimension
- {
- int width = MapUtils.getWidthOfColorAt(mapData, (byte) 30, startroom);
- int height = MapUtils.getHeightOfColorAt(mapData, (byte) 30, startroom);
- unitRoomDimension = new Dimension(width, height);
- }
- Vector2d doorDir = null;
- // determine the gap
- {
- Point midStartRoom = new Point(startroom.x + unitRoomDimension.width / 2, startroom.y +unitRoomDimension.height / 2);
- final int halfWidth = unitRoomDimension.width / 2 + 2;
- for (Vector2d v:directions) {
- byte color = MapUtils.getMapColorAt(mapData, (int)(v.x * halfWidth +midStartRoom.x), (int)(v.y *halfWidth +midStartRoom.y));
- if (color != 0) {
- doorDir = v;
- break;
- }
- }
-
- if (doorDir == null) {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCouldn't determine door of the room, disabling mod for this dungeon run"));
- bugged = true;
- return;
- }
- Point basePoint = new Point(startroom.x, startroom.y);
- if (doorDir.x > 0) basePoint.x += unitRoomDimension.width;
- if (doorDir.x < 0) basePoint.x += -1;
- if (doorDir.y > 0) basePoint.y += unitRoomDimension.height;
- if (doorDir.y < 0) basePoint.y += -1;
- int gap = MapUtils.getLengthOfColorExtending(mapData, (byte) 0, basePoint, doorDir);
- Point pt = MapUtils.findFirstColorWithInNegate(mapData, (byte)0, new Rectangle(basePoint.x, basePoint.y, (int)Math.abs(doorDir.y) * unitRoomDimension.width + 1, (int)Math.abs(doorDir.x) * unitRoomDimension.height + 1));
- if (pt == null) {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCouldn't determine door of the room, disabling mod for this dungeon run"));
- bugged = true;
- return;
- }
- int doorWidth = MapUtils.getLengthOfColorExtending(mapData, MapUtils.getMapColorAt(mapData, pt.x, pt.y), pt, new Vector2d((int)Math.abs(doorDir.y), (int)Math.abs(doorDir.x)));
- doorDimension = new Dimension(doorWidth, gap);
- }
- // Determine Top Left
- {
- int x = startroom.x;
- int y = startroom.y;
- while (x >= unitRoomDimension.width + doorDimension.height) x -= unitRoomDimension.width + doorDimension.height;
- while (y >= unitRoomDimension.height + doorDimension.height) y -= unitRoomDimension.height + doorDimension.height;
- topLeftMapPoint = new Point(x, y);
- }
- // determine door location based on npc, and determine map min from there
- {
- DungeonSpecificDataProvider doorFinder = DungeonSpecificDataProviderRegistry.getDoorFinder(DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- if (doorFinder == null) {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCouldn't find door processor for "+ DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName()));
- bugged = true;
- return;
- }
- BlockPos door = doorFinder.findDoor(context.getWorld(), DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- if (door == null) {
- Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText("ยงeDungeons Guide ยง7:: ยงcCouldn't determine door of the room, disabling mod for this dungeon run"));
- bugged = true;
- return;
- }
-
- DungeonsGuide.sendDebugChat(new ChatComponentText("door Pos:"+door));
-
- Point unitPoint = mapPointToRoomPoint(startroom);
- unitPoint.translate(unitPoint.x + 1, unitPoint.y + 1);
- unitPoint.translate((int)doorDir.x, (int)doorDir.y);
-
- Vector2d offset = doorFinder.findDoorOffset(context.getWorld(), DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- axisMatch = doorDir.equals(offset);
-
- int worldX = unitPoint.x * 16;
- int worldY = unitPoint.y * 16;
- BlockPos worldMin = door.add(-worldX, 0, -worldY);
- context.setDungeonMin(worldMin);
-
- }
-
- DungeonsGuide.sendDebugChat(new ChatComponentText("Found Green room:"+startroom));
- DungeonsGuide.sendDebugChat(new ChatComponentText("Axis match:"+axisMatch));
- DungeonsGuide.sendDebugChat(new ChatComponentText("World Min:"+context.getDungeonMin()));
- DungeonsGuide.sendDebugChat(new ChatComponentText("Dimension:"+unitRoomDimension));
- DungeonsGuide.sendDebugChat(new ChatComponentText("top Left:"+topLeftMapPoint));
- DungeonsGuide.sendDebugChat(new ChatComponentText("door dimension:"+doorDimension));
- context.createEvent(new DungeonNodataEvent("MAP_PROCESSOR_INIT"));
- initialized = true;
- MinecraftForge.EVENT_BUS.post(new DungeonContextInitializationEvent());
- }
-
- public Point mapPointToRoomPoint(Point mapPoint) {
- int x = (int)((mapPoint.x - topLeftMapPoint.x) / ((double)unitRoomDimension.width + doorDimension.height));
- int y = (int)((mapPoint.y - topLeftMapPoint.y) / ((double)unitRoomDimension.height + doorDimension.height));
- return new Point(x,y);
- }
- public BlockPos mapPointToWorldPoint(Point mapPoint) {
- int x = (int)((mapPoint.x - topLeftMapPoint.x) / ((double)unitRoomDimension.width + doorDimension.height) * 32 + context.getDungeonMin().getX());
- int y = (int)((mapPoint.y - topLeftMapPoint.y) / ((double)unitRoomDimension.height + doorDimension.height) * 32 + context.getDungeonMin().getZ());
- return new BlockPos(x,70,y);
- }
- public Point roomPointToMapPoint(Point roomPoint) {
- return new Point(roomPoint.x * (unitRoomDimension.width +doorDimension.height) + topLeftMapPoint.x,
- roomPoint.y *(unitRoomDimension.height + doorDimension.height) + topLeftMapPoint.y);
- }
- public BlockPos roomPointToWorldPoint(Point roomPoint) {
- return new BlockPos(context.getDungeonMin().getX() +(roomPoint.x * 32), context.getDungeonMin().getY(), context.getDungeonMin().getZ() +(roomPoint.y *32));
- }
- public Point worldPointToRoomPoint(BlockPos worldPoint) {
- if (context.getDungeonMin() == null) return null;
- return new Point((worldPoint.getX() - context.getDungeonMin().getX()) / 32, (worldPoint.getZ() - context.getDungeonMin().getZ()) / 32);
- }
-
- public Vector2d worldPointToMapPointFLOAT(Vec3 worldPoint) {
- if (context.getDungeonMin() == null) return null;
- double x = topLeftMapPoint.x + ((worldPoint.xCoord - context.getDungeonMin().getX()) / 32.0f * (unitRoomDimension.width + doorDimension.height));
- double y = topLeftMapPoint.y + ((worldPoint.zCoord - context.getDungeonMin().getZ()) / 32.0f * (unitRoomDimension.height + doorDimension.height));
- return new Vector2d(x, y);
- }
-
- public Point worldPointToMapPoint(Vec3 worldPoint) {
- if (context.getDungeonMin() == null) return null;
- return new Point(topLeftMapPoint.x + (int)((worldPoint.xCoord - context.getDungeonMin().getX()) / 32.0f * (unitRoomDimension.width + doorDimension.height)), topLeftMapPoint.y + (int)((worldPoint.zCoord - context.getDungeonMin().getZ()) / 32.0f * (unitRoomDimension.height + doorDimension.height)));
- }
-
- private void processMap(byte[] mapData) {
- int height = (int)((128.0 - topLeftMapPoint.y) / (unitRoomDimension.height + doorDimension.height));
- int width = (int) ((128.0 - topLeftMapPoint.x) / (unitRoomDimension.width + doorDimension.height));
- if (MapUtils.getMapColorAt(mapData,0,0) != 0) return;
- undiscoveredRoom = 0;
- for (int y = 0; y <= height; y++){
- for (int x = 0; x <= width; x++) {
- Point mapPoint = roomPointToMapPoint(new Point(x,y));
- byte color = MapUtils.getMapColorAt(mapData, mapPoint.x, mapPoint.y);
- MapUtils.record(mapData, mapPoint.x, mapPoint.y, new Color(255,255,0,80));
- if (roomsFound.contains(new Point(x,y))) {
- DungeonRoom dungeonRoom = context.getRoomMapper().get(new Point(x,y));
- if (color == 18 && dungeonRoom.getCurrentState() != DungeonRoom.RoomState.FINISHED) {
- dungeonRoom.setCurrentState(DungeonRoom.RoomState.COMPLETE_WITHOUT_SECRETS);
- dungeonRoom.setTotalSecrets(0);
- } else if (color == 30) {
- dungeonRoom.setCurrentState(DungeonRoom.RoomState.FINISHED);
- dungeonRoom.setTotalSecrets(0);
- } else if (dungeonRoom.getCurrentState() != DungeonRoom.RoomState.FINISHED){
- byte centerColor = MapUtils.getMapColorAt(mapData, mapPoint.x + unitRoomDimension.width / 2, mapPoint.y + unitRoomDimension.height / 2);
- MapUtils.record(mapData, mapPoint.x + unitRoomDimension.width / 2, mapPoint.y + unitRoomDimension.height / 2, new Color(0,255,0,80));
- if (centerColor == 34) {
- dungeonRoom.setCurrentState(DungeonRoom.RoomState.COMPLETE_WITHOUT_SECRETS);
- } else if (centerColor == 30) {
- dungeonRoom.setCurrentState(DungeonRoom.RoomState.FINISHED);
- } else if (centerColor == 18) { // red
- dungeonRoom.setCurrentState(DungeonRoom.RoomState.FAILED);
- }
- }
- if (dungeonRoom.getTotalSecrets() == -1) {
- if (dungeonRoom.getColor() == 82) dungeonRoom.setTotalSecrets(0);
- else if (dungeonRoom.getColor() == 74) dungeonRoom.setTotalSecrets(0);
- MapUtils.record(mapData, mapPoint.x, mapPoint.y +1, new Color(0,255,0,80));
- }
- continue;
- }
-
- if (color != 0 && color != 85) {
- MapUtils.record(mapData, mapPoint.x, mapPoint.y, new Color(0,255,255,80));
- DungeonRoom rooms = buildRoom(mapData, new Point(x,y));
- if (rooms == null) continue;
- context.createEvent(new DungeonRoomDiscoverEvent(rooms.getUnitPoints().get(0), rooms.getRoomMatcher().getRotation(), new SerializableBlockPos(rooms.getMin()), new SerializableBlockPos(rooms.getMax()), rooms.getShape(),rooms.getColor(), rooms.getDungeonRoomInfo().getUuid(), rooms.getDungeonRoomInfo().getName(), rooms.getDungeonRoomInfo().getProcessorId()));
- DungeonsGuide.sendDebugChat(new ChatComponentText("New Map discovered! shape: "+rooms.getShape()+ " color: "+rooms.getColor()+" unitPos: "+x+","+y));
- DungeonsGuide.sendDebugChat(new ChatComponentText("New Map discovered! mapMin: "+rooms.getMin() + " mapMx: "+rooms.getMax()));
- StringBuilder builder = new StringBuilder();
- for (int dy =0;dy<4;dy++) {
- builder.append("\n");
- for (int dx = 0; dx < 4; dx ++) {
- boolean isSet = ((rooms.getShape() >> (dy * 4 + dx)) & 0x1) != 0;
- builder.append(isSet ? "O" : "X");
- }
- }
- DungeonsGuide.sendDebugChat(new ChatComponentText("Shape visual: "+ builder));
-
- context.getDungeonRoomList().add(rooms);
- for (Point p:rooms.getUnitPoints()) {
- roomsFound.add(p);
- context.getRoomMapper().put(p, rooms);
- }
- if (rooms.getRoomProcessor() != null && rooms.getRoomProcessor().readGlobalChat())
- context.getGlobalRoomProcessors().add(rooms.getRoomProcessor());
- } else if (color == 85){
- undiscoveredRoom++;
- }
-
- }
- }
- }
-
- private static final Set door_dirs = Sets.newHashSet(new Vector2d(0,0.5), new Vector2d(0, -0.5), new Vector2d(0.5, 0), new Vector2d(-0.5 , 0));
- private DungeonRoom buildRoom(byte[] mapData, Point unitPoint) {
- Queue toCheck = new LinkedList();
- toCheck.add(new Point[] {unitPoint, unitPoint}); // requestor, target
- Set checked = new HashSet();
- List ayConnected = new ArrayList();
-
- int minX = Integer.MAX_VALUE, minY = Integer.MAX_VALUE;
- int maxX = 0, maxY = 0;
- while(toCheck.peek() != null) {
- Point[] check = toCheck.poll();
- if (checked.contains(check[1])) continue;
- checked.add(check[1]);
-
- if (checkIfConnected(mapData, check[0], check[1])) {
- ayConnected.add(check[1]);
- if (check[1].x < minX) minX = check[1].x;
- if (check[1].y < minY) minY = check[1].y;
- if (check[1].x > maxX) maxX = check[1].x;
- if (check[1].y > maxY) maxY = check[1].y;
- for (Vector2d dir: directions) {
- Point newPt = new Point(check[1].x + (int)dir.x, check[1].y +(int)dir.y);
- toCheck.add(new Point[]{check[1], newPt});
- }
- }
- }
-
- short shape = 0;
- for (Point p:ayConnected) {
- int localX = p.x - minX, localY = p.y - minY;
- shape |= 1 <<(localY *4 + localX);
- }
- Set doors = new HashSet<>();
- for (Point p: ayConnected) {
- for (Vector2d v: door_dirs) {
- Vector2d v2 = new Vector2d(p.x + v.x , p.y + v.y );
- if (doors.contains(v2)) doors.remove(v2);
- else doors.add(v2);
- }
- }
- Point pt2 = roomPointToMapPoint(ayConnected.get(0));
- byte unit1 = MapUtils.getMapColorAt(mapData, pt2.x, pt2.y);
-
- // 0: none 1: open door door 2. unopen door 3: wither door 4. red door
- Set> doorsAndStates = new HashSet<>();
- final int halfWidth = unitRoomDimension.width + 4;
- for (Vector2d door : doors) {
- int floorX = (int)Math.floor(door.x), floorY = (int)Math.floor(door.y);
- Point mapPt = roomPointToMapPoint(new Point(floorX, floorY));
- Point target = new Point(mapPt.x+ unitRoomDimension.width/2 + (int)(halfWidth*(door.x - floorX)), mapPt.y + unitRoomDimension.height/2 + (int)(halfWidth*(door.y - floorY)) );
- MapUtils.record(mapData, target.x, target.y, Color.green);
- byte color = MapUtils.getMapColorAt(mapData, target.x, target.y);
-
- Vector2d vector2d = new Vector2d(door.x - minX, door.y - minY);
- if (color == 0) {
- doorsAndStates.add(new Tuple<>(vector2d, EDungeonDoorType.NONE));
- } else if (color == 85) {
- doorsAndStates.add(new Tuple<>(vector2d, EDungeonDoorType.UNOPEN));
- } else if (color == 119) {
- doorsAndStates.add(new Tuple<>(vector2d, EDungeonDoorType.WITHER));
- } else if (color == 18 && unit1 != 18) {
- doorsAndStates.add(new Tuple<>(vector2d, EDungeonDoorType.BLOOD));
- } else {
- doorsAndStates.add(new Tuple<>(vector2d, EDungeonDoorType.ENTRANCE));
- }
- }
-
-
- try{
- return new DungeonRoom(ayConnected, shape, unit1, roomPointToWorldPoint(new Point(minX, minY)), roomPointToWorldPoint(new Point(maxX+1, maxY+1)).add(-1, 0, -1), context, doorsAndStates);
- } catch (IllegalStateException ex) {
- DungeonsGuide.sendDebugChat(new ChatComponentText("Failed to load room, retrying later :: "+ex.getLocalizedMessage()));
- return null;
- }
- }
-
- private boolean checkIfConnected(byte[] mapData, Point unitPoint1, Point unitPoint2) {
- if (unitPoint1 == unitPoint2) return true;
- if (unitPoint1.equals(unitPoint2)) return true;
-
-
- Point high = (unitPoint2.y > unitPoint1.y) ? unitPoint2 :(unitPoint2.x > unitPoint1.x) ? unitPoint2 : unitPoint1;
- Point low = high == unitPoint2 ? unitPoint1 : unitPoint2;
-
- int xOff = low.x - high.x;
- int yOff = low.y - high.y;
- Point pt = roomPointToMapPoint(high);
- Point pt2 = roomPointToMapPoint(low);
- byte unit1 = MapUtils.getMapColorAt(mapData, pt.x, pt.y);
- byte unit2 = MapUtils.getMapColorAt(mapData, pt2.x, pt2.y);
- pt.translate(xOff, yOff);
- byte unit3 = MapUtils.getMapColorAt(mapData, pt.x, pt.y);
-
- return unit1 == unit2 && unit2 == unit3 && unit1 != 0;
- }
-
- public boolean isThereDifference(byte[] colors1, byte[] colors) {
- if (colors1 == null || colors == null) return true;
- for (int i =0; i < colors.length; i++)
- if (colors[i] != colors1[i]) return true;
- return false;
- }
- private int stabilizationTick = 0;
-
- private boolean processed = false;
- private void processFinishedMap(byte[] mapData) {
- if (MapUtils.getMapColorAt(mapData, 0, 0) == 0) return;
- if (processed) return;
- processed = true;
- MapUtils.clearMap();
- MapUtils.record(mapData, 0, 0, Color.GREEN);
-
- int skill = MapUtils.readNumber(mapData, 51, 35, 9);
- int exp = MapUtils.readNumber(mapData, 51, 54, 9);
- int time = MapUtils.readNumber(mapData, 51, 73, 9);
- int bonus = MapUtils.readNumber(mapData, 51, 92, 9);
- DungeonsGuide.sendDebugChat(new ChatComponentText(("skill: " + skill + " / exp: " + exp + " / time: " + time + " / bonus : " + bonus)));
- JSONObject payload = new JSONObject().put("timeSB", FeatureRegistry.DUNGEON_SBTIME.getTimeElapsed())
- .put("timeR", FeatureRegistry.DUNGEON_REALTIME.getTimeElapsed())
- .put("timeScore", time)
- .put("completionStage", context.getBossRoomEnterSeconds() == -1 ? 0 :
- context.isDefeated() ? 2 : 1)
- .put("percentage", DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getPercentage() / 100.0)
- .put("floor", DungeonsGuide.getDungeonsGuide().getSkyblockStatus().getDungeonName());
- DungeonsGuide.sendDebugChat(new ChatComponentText(payload.toString()));
-
- try {
- String target = StaticResourceCache.INSTANCE.getResource(StaticResourceCache.DATA_COLLECTION).get().getValue();
- if (FeatureRegistry.ETC_COLLECT_SCORE.isEnabled() && !target.contains("falsefalsefalsefalse")) {
- DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().payload(payload.toString()).header("destination", target.replace("false", "").trim()));
- }
- } catch (Throwable e) {
- e.printStackTrace();
- }
- }
-
- public void tick() {
- if (waitCnt < 5) {
- waitCnt++;
- return;
- }
- if (bugged) return;
- ItemStack stack = Minecraft.getMinecraft().thePlayer.inventory.getStackInSlot(8);
- byte[] mapData;
- if (stack == null || !(stack.getItem() instanceof ItemMap)) {
- mapData = lastMapData;
- } else {
- MapData mapData1 = ((ItemMap)stack.getItem()).getMapData(stack, context.getWorld());
- if (mapData1 == null) mapData = lastMapData;
- else {
- mapData = mapData1.colors;
- lastMapData2 = mapData1;
-
- if (isThereDifference(lastMapData, mapData)) {
- stabilizationTick =0;
- context.createEvent(new DungeonMapUpdateEvent(mapData));
- } else {
- stabilizationTick++;
- }
-
- if (stabilizationTick > 20) {
- if (doorDimension == null) buildMap(mapData);
- else processMap(mapData);
-
- if (context.isEnded()) {
- processFinishedMap(mapData);
- }
- }
- lastMapData = mapData;
- }
-
- }
-
-
- if (lastMapData2 != null && mapIconToPlayerMap.size() < context.getPlayers().size() && initialized) {
- label: for (Map.Entry stringVec4bEntry : lastMapData2.mapDecorations.entrySet()) {
- if (mapIconToPlayerMap.containsValue(stringVec4bEntry.getKey())) continue;
- int x = stringVec4bEntry.getValue().func_176112_b() /2 + 64;
- int y = stringVec4bEntry.getValue().func_176113_c() /2 + 64;
- BlockPos mapPos = mapPointToWorldPoint(new Point(x, y));
- String potentialPlayer = null;
- for (String player : context.getPlayers()) { // check nearby players
- if (mapIconToPlayerMap.containsKey(player)) continue;
- EntityPlayer entityPlayer = Minecraft.getMinecraft().theWorld.getPlayerEntityByName(player);
- if (entityPlayer == null || entityPlayer.isInvisible()) continue;
- BlockPos pos = entityPlayer.getPosition();
- int dx = mapPos.getX() - pos.getX();
- int dz = mapPos.getZ() - pos.getZ();
- if (dx * dx + dz * dz < 100) {
- if (potentialPlayer != null) continue label;
- potentialPlayer = player;
- }
- }
- if (potentialPlayer == null) continue;
-
- for (Map.Entry stringVec4bEntry2 : lastMapData2.mapDecorations.entrySet()) { // check nearby markers
- if (mapIconToPlayerMap.containsValue(stringVec4bEntry.getKey())) continue;
- if (stringVec4bEntry.getKey().equals(stringVec4bEntry2.getKey())) continue;
- int x2 = stringVec4bEntry2.getValue().func_176112_b() /2 + 64;
- int y2 = stringVec4bEntry2.getValue().func_176113_c() /2 + 64;
- int dx = x2 - x;
- int dy = y2 - y;
- if (dx * dx + dy * dy < 100) {
- continue label;
- }
- }
- mapIconToPlayerMap.put(potentialPlayer, stringVec4bEntry.getKey());
- }
- }
-
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java
deleted file mode 100644
index 4fd4056d..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.events.PlayerInteractEntityEvent;
-import net.minecraftforge.event.entity.living.LivingDeathEvent;
-import net.minecraftforge.event.entity.player.PlayerInteractEvent;
-
-public abstract class AbstractAction implements Action {
- @Override
- public void onPlayerInteract(DungeonRoom dungeonRoom, PlayerInteractEvent event, ActionRoute.ActionRouteProperties actionRouteProperties) {
-
- }
-
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
-
- }
-
- @Override
- public void onLivingDeath(DungeonRoom dungeonRoom, LivingDeathEvent event, ActionRoute.ActionRouteProperties actionRouteProperties) {
-
- }
-
- @Override
- public void onRenderScreen(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties) {
-
- }
-
- @Override
- public void onLivingInteract(DungeonRoom dungeonRoom, PlayerInteractEntityEvent event, ActionRoute.ActionRouteProperties actionRouteProperties) {
-
- }
-
- @Override
- public void onTick(DungeonRoom dungeonRoom, ActionRoute.ActionRouteProperties actionRouteProperties) {
-
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java
deleted file mode 100755
index 1a4ad682..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.events.PlayerInteractEntityEvent;
-import net.minecraftforge.event.entity.living.LivingDeathEvent;
-import net.minecraftforge.event.entity.player.PlayerInteractEvent;
-
-import java.util.Set;
-
-public interface Action {
- Set getPreRequisites(DungeonRoom dungeonRoom);
-
- void onPlayerInteract(DungeonRoom dungeonRoom, PlayerInteractEvent event, ActionRoute.ActionRouteProperties actionRouteProperties);
- void onLivingInteract(DungeonRoom dungeonRoom, PlayerInteractEntityEvent event, ActionRoute.ActionRouteProperties actionRouteProperties);
- void onLivingDeath(DungeonRoom dungeonRoom, LivingDeathEvent event, ActionRoute.ActionRouteProperties actionRouteProperties);
- void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag);
- void onRenderScreen(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties);
- void onTick(DungeonRoom dungeonRoom, ActionRoute.ActionRouteProperties actionRouteProperties);
-
- boolean isComplete(DungeonRoom dungeonRoom);
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionBreakWithSuperBoom.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionBreakWithSuperBoom.java
deleted file mode 100755
index 39d3e7ef..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionBreakWithSuperBoom.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.BlockRendererDispatcher;
-import net.minecraft.client.renderer.GlStateManager;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.WorldRenderer;
-import net.minecraft.client.renderer.texture.TextureMap;
-import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
-import net.minecraft.entity.Entity;
-import net.minecraft.init.Blocks;
-import net.minecraft.util.BlockPos;
-
-import java.awt.*;
-import java.util.HashSet;
-import java.util.Set;
-
-@Data
-public class ActionBreakWithSuperBoom extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPoint target;
-
- public ActionBreakWithSuperBoom(OffsetPoint target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return target.getBlock(dungeonRoom) == Blocks.air;
- }
-
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
-
- BlockPos blockpos = target.getBlockPos(dungeonRoom);
-
- Entity viewing_from = Minecraft.getMinecraft().getRenderViewEntity();
-
- double x_fix = viewing_from.lastTickPosX + ((viewing_from.posX - viewing_from.lastTickPosX) * partialTicks);
- double y_fix = viewing_from.lastTickPosY + ((viewing_from.posY - viewing_from.lastTickPosY) * partialTicks);
- double z_fix = viewing_from.lastTickPosZ + ((viewing_from.posZ - viewing_from.lastTickPosZ) * partialTicks);
-
- GlStateManager.pushMatrix();
- GlStateManager.translate(-x_fix, -y_fix, -z_fix);
- GlStateManager.disableLighting();
- GlStateManager.enableAlpha();
- GlStateManager.disableDepth();
- GlStateManager.depthMask(false);
- GlStateManager.enableBlend();
-
- Tessellator tessellator = Tessellator.getInstance();
- WorldRenderer vertexbuffer = tessellator.getWorldRenderer();
- vertexbuffer.begin(7, DefaultVertexFormats.BLOCK);
-
- BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
- blockrendererdispatcher.getBlockModelRenderer().renderModel(Minecraft.getMinecraft().theWorld,
- blockrendererdispatcher.getBlockModelShapes().getModelForState(Blocks.tnt.getDefaultState()),
- Blocks.tnt.getDefaultState(), blockpos, vertexbuffer, false);
- tessellator.draw();
-
- GlStateManager.enableLighting();
- GlStateManager.popMatrix();
-
- RenderUtils.highlightBlock(blockpos, new Color(0, 255,255,50), partialTicks, true);
- RenderUtils.drawTextAtWorld("Superboom", blockpos.getX() + 0.5f, blockpos.getY() + 0.5f, blockpos.getZ() + 0.5f, 0xFFFFFF00, 0.03f, false, false, partialTicks);
- }
-
- @Override
- public String toString() {
- return "BreakWithSuperboom\n- target: "+target.toString();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java
deleted file mode 100755
index 56b27528..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonDummy;
-import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonFairySoul;
-import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonMechanic;
-import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonSecret;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.HashSet;
-import java.util.Set;
-
-@Data
-public class ActionChangeState extends AbstractAction{
- @EqualsAndHashCode.Exclude
- private Set preRequisite2 = new HashSet();
-
- private String mechanicName;
- private String state;
-
- public ActionChangeState(String mechanicName, String state) {
- this.mechanicName = mechanicName;
- this.state = state;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- Set set = new HashSet();
- set.addAll(preRequisite2);
- DungeonMechanic mechanic = dungeonRoom.getMechanics().get(mechanicName);
- if (mechanic!= null)
- set.addAll(mechanic.getAction(state, dungeonRoom));
- return set;
- }
- @Override
- public String toString() {
- return "ChangeState\n- target: "+mechanicName+"\n- state: "+state;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- DungeonMechanic mechanic = dungeonRoom.getMechanics().get(mechanicName);
- if (state.equalsIgnoreCase("navigate"))
- return true;
- if (mechanic== null)
- return false;
- if (mechanic instanceof DungeonSecret && ((DungeonSecret) mechanic).getSecretType() != DungeonSecret.SecretType.CHEST)
- return true;
- if (mechanic instanceof DungeonDummy)
- return true;
- return mechanic.getCurrentState(dungeonRoom).equalsIgnoreCase(state);
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClick.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClick.java
deleted file mode 100755
index 1b463f2e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClick.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.BlockPos;
-import net.minecraftforge.event.entity.player.PlayerInteractEvent;
-
-import java.awt.*;
-import java.util.HashSet;
-import java.util.Set;
-
-@Data
-public class ActionClick extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPoint target;
- private Predicate predicate = Predicates.alwaysTrue();
-
- private boolean clicked = false;
-
- public ActionClick(OffsetPoint target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return clicked;
- }
-
- @Override
- public void onPlayerInteract(DungeonRoom dungeonRoom, PlayerInteractEvent event, ActionRoute.ActionRouteProperties actionRouteProperties) {
- if (clicked) return;
- if (target.getBlockPos(dungeonRoom).equals(event.pos) &&
- (predicate == null || predicate.apply(event.entityLiving.getHeldItem()))) {
- clicked = true;
- }
- }
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- BlockPos pos = target.getBlockPos(dungeonRoom);
- RenderUtils.highlightBlock(pos, new Color(0, 255,255,50),partialTicks, true);
- RenderUtils.drawTextAtWorld("Click", pos.getX() + 0.5f, pos.getY() + 0.3f, pos.getZ() + 0.5f, 0xFFFFFF00, 0.02f, false, false, partialTicks);
- }
-
-
- @Override
- public String toString() {
- return "Click\n- target: "+target.toString()+"\n- predicate: "+predicate.getClass().getSimpleName();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClickSet.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClickSet.java
deleted file mode 100755
index 975c19e9..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionClickSet.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPointSet;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.BlockPos;
-import net.minecraftforge.event.entity.player.PlayerInteractEvent;
-
-import java.awt.*;
-import java.util.HashSet;
-import java.util.Set;
-
-@Data
-public class ActionClickSet extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPointSet target;
- private Predicate predicate = Predicates.alwaysTrue();
-
- public ActionClickSet(OffsetPointSet target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public String toString() {
- return "ClickSet\n- targets size: "+target.getOffsetPointList().size()+"\n- predicate: "+predicate.getClass().getSimpleName();
- }
-
- private boolean clicked = false;
- @Override
- public void onPlayerInteract(DungeonRoom dungeonRoom, PlayerInteractEvent event, ActionRoute.ActionRouteProperties actionRouteProperties) {
- if (clicked) return;
- for (OffsetPoint pt2: target.getOffsetPointList()) {
- if (pt2.getBlockPos(dungeonRoom).equals(event.pos) &&
- (predicate == null || predicate.apply(event.entityLiving.getHeldItem()))) {
- clicked = true;
- }
- }
-
- }
-
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- float xAcc = 0;
- float yAcc = 0;
- float zAcc = 0;
- int size = target.getOffsetPointList().size();
- for (OffsetPoint offsetPoint : target.getOffsetPointList()) {
- BlockPos pos = offsetPoint.getBlockPos(dungeonRoom);
- xAcc += pos.getX() + 0.5f;
- yAcc += pos.getY()+ 0.5f;
- zAcc += pos.getZ()+ 0.5f;
- RenderUtils.highlightBlock(offsetPoint.getBlockPos(dungeonRoom), new Color(0, 255,255,50),partialTicks, true);
- }
-
- RenderUtils.drawTextAtWorld("Click", xAcc / size, yAcc / size, zAcc / size, 0xFFFFFF00, 0.02f, false, false, partialTicks);
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return clicked;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionComplete.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionComplete.java
deleted file mode 100644
index 3389ed62..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionComplete.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-
-import java.util.Collections;
-import java.util.Set;
-
-public class ActionComplete extends AbstractAction {
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return Collections.emptySet();
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return false;
- }
-
- @Override
- public String toString() {
- return "Completed";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionDropItem.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionDropItem.java
deleted file mode 100755
index 2e90d3a3..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionDropItem.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.entity.item.EntityItem;
-import net.minecraft.util.AxisAlignedBB;
-import net.minecraft.util.BlockPos;
-
-import java.awt.*;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-@Data
-public class ActionDropItem extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPoint target;
- private Predicate predicate = Predicates.alwaysTrue();
-
- public ActionDropItem(OffsetPoint target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- BlockPos pos = target.getBlockPos(dungeonRoom);
- List item = dungeonRoom.getContext().getWorld().getEntitiesWithinAABB(EntityItem.class,
- AxisAlignedBB.fromBounds(pos.getX(), pos.getY(), pos.getZ(), pos.getX()+1, pos.getY() + 1, pos.getZ() + 1));
- if (item.size() == 0) return false;
- return (predicate == null || predicate.apply(item.get(0)));
- }
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- BlockPos pos = target.getBlockPos(dungeonRoom);
- RenderUtils.highlightBlock(pos, new Color(0, 255,255,50),partialTicks, true);
- RenderUtils.drawTextAtWorld("Drop Item", pos.getX() + 0.5f, pos.getY() + 0.3f, pos.getZ() + 0.5f, 0xFFFFFF00, 0.02f, false, false, partialTicks);
- }
-
- @Override
- public String toString() {
- return "DropItem\n- target: "+target.toString()+"\n- predicate: "+predicate.getClass().getSimpleName();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionInteract.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionInteract.java
deleted file mode 100755
index 3033754c..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionInteract.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import kr.syeyoung.dungeonsguide.dungeon.DungeonActionManager;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.events.PlayerInteractEntityEvent;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.entity.Entity;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.Vec3;
-
-import java.awt.*;
-import java.util.HashSet;
-import java.util.Set;
-
-@Data
-public class ActionInteract extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPoint target;
- private Predicate predicate = Predicates.alwaysFalse();
- private int radius;
-
- public ActionInteract(OffsetPoint target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return interacted;
- }
-
- private boolean interacted = false;
- @Override
- public void onLivingInteract(DungeonRoom dungeonRoom, PlayerInteractEntityEvent event, ActionRoute.ActionRouteProperties actionRouteProperties) {
- if (interacted) return;
-
- Vec3 spawnLoc = DungeonActionManager.getSpawnLocation().get(event.getEntity().getEntityId());
- if (spawnLoc == null) return;
- if (target.getBlockPos(dungeonRoom).distanceSq(spawnLoc.xCoord, spawnLoc.yCoord, spawnLoc.zCoord) > radius * radius) return;
- if (!predicate.apply(event.getEntity())) return;
- interacted = true;
- }
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- BlockPos pos = target.getBlockPos(dungeonRoom);
- RenderUtils.highlightBlock(pos, new Color(0, 255,255,50),partialTicks, true);
- RenderUtils.drawTextAtWorld("Interact", pos.getX() + 0.5f, pos.getY() + 0.3f, pos.getZ() + 0.5f, 0xFFFFFF00, 0.02f, false, false, partialTicks);
- }
-
- @Override
- public String toString() {
- return "InteractEntity\n- target: "+target.toString()+"\n- radius: "+radius+"\n- predicate: "+(predicate == null ? "null" : predicate.getClass().getSimpleName());
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionKill.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionKill.java
deleted file mode 100755
index a08b81f0..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionKill.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import kr.syeyoung.dungeonsguide.dungeon.DungeonActionManager;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.entity.Entity;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.Vec3;
-import net.minecraftforge.event.entity.living.LivingDeathEvent;
-
-import java.awt.*;
-import java.util.HashSet;
-import java.util.Set;
-
-@Data
-public class ActionKill extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPoint target;
- private Predicate predicate = Predicates.alwaysFalse();
- private int radius;
-
- public ActionKill(OffsetPoint target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- Vec3 spawn = new Vec3(target.getBlockPos(dungeonRoom));
- for (Integer killed : DungeonActionManager.getKilleds()) {
- if (DungeonActionManager.getSpawnLocation().get(killed) == null) continue;
- if (DungeonActionManager.getSpawnLocation().get(killed).squareDistanceTo(spawn) < 100) {
- return true;
- }
- }
-
- return killed;
- }
-
- private boolean killed = false;
- @Override
- public void onLivingDeath(DungeonRoom dungeonRoom, LivingDeathEvent event, ActionRoute.ActionRouteProperties actionRouteProperties) {
- if (killed) return;
-
- Vec3 spawnLoc = DungeonActionManager.getSpawnLocation().get(event.entity.getEntityId());
- if (spawnLoc == null) return;
- if (target.getBlockPos(dungeonRoom).distanceSq(spawnLoc.xCoord, spawnLoc.yCoord, spawnLoc.zCoord) > radius * radius) return;
- if (!predicate.apply(event.entity)) return;
- killed = true;
- }
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- BlockPos pos = target.getBlockPos(dungeonRoom);
- RenderUtils.highlightBlock(pos, new Color(0, 255,255,50),partialTicks, true);
- RenderUtils.drawTextAtWorld("Spawn", pos.getX() + 0.5f, pos.getY() + 0.3f, pos.getZ() + 0.5f, 0xFFFFFF00, 0.02f, false, false, partialTicks);
- }
-
- @Override
- public String toString() {
- return "KillEntity\n- target: "+target.toString()+"\n- radius: "+radius+"\n- predicate: "+(predicate == null ? "null" : predicate.getClass().getSimpleName());
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMove.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMove.java
deleted file mode 100755
index ec790489..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMove.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.Keybinds;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.features.impl.secret.FeatureTogglePathfind;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.client.Minecraft;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.MathHelper;
-import net.minecraft.util.Vec3;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-@Data
-public class ActionMove extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPoint target;
-
- public ActionMove(OffsetPoint target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return target.getBlockPos(dungeonRoom).distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()) < 25;
- }
-
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- BlockPos pos = target.getBlockPos(dungeonRoom);
-
- float distance = MathHelper.sqrt_double(pos.distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()));
- float multiplier = distance / 120f; //mobs only render ~120 blocks away
- if (flag) multiplier *= 2.0f;
- float scale = 0.45f * multiplier;
- scale *= 25.0 / 6.0;
- if (actionRouteProperties.isBeacon()) {
- RenderUtils.renderBeaconBeam(pos.getX(), pos.getY(), pos.getZ(), actionRouteProperties.getBeaconBeamColor(), partialTicks);
- RenderUtils.highlightBlock(pos, actionRouteProperties.getBeaconColor(), partialTicks);
- }
- RenderUtils.drawTextAtWorld("Destination", pos.getX() + 0.5f, pos.getY() + 0.5f + scale, pos.getZ() + 0.5f, 0xFF00FF00, flag ? 2f : 1f, true, false, partialTicks);
- RenderUtils.drawTextAtWorld(String.format("%.2f",MathHelper.sqrt_double(pos.distanceSq(Minecraft.getMinecraft().thePlayer.getPosition())))+"m", pos.getX() + 0.5f, pos.getY() + 0.5f - scale, pos.getZ() + 0.5f, 0xFFFFFF00, flag ? 2f : 1f, true, false, partialTicks);
-
- if (!FeatureRegistry.SECRET_TOGGLE_KEY.isEnabled() || !FeatureRegistry.SECRET_TOGGLE_KEY.togglePathfindStatus) {
- if (poses != null){
- RenderUtils.drawLinesVec3(poses, actionRouteProperties.getLineColor(), actionRouteProperties.getLineWidth(), partialTicks, true);
- }
- }
- }
-
- private int tick = -1;
- private List poses;
- private Future> latestFuture;
-
- @Override
- public void onTick(DungeonRoom dungeonRoom, ActionRoute.ActionRouteProperties actionRouteProperties) {
- tick = (tick+1) % Math.max(1, actionRouteProperties.getLineRefreshRate());
- if (latestFuture != null && latestFuture.isDone()) {
- try {
- poses = latestFuture.get();
- latestFuture = null;
- } catch (InterruptedException | ExecutionException e) {
- e.printStackTrace();
- }
- }
-
- if (tick == 0 && actionRouteProperties.isPathfind() && latestFuture == null) {
- if (!FeatureRegistry.SECRET_FREEZE_LINES.isEnabled() || poses == null)
- latestFuture = dungeonRoom.createEntityPathTo(dungeonRoom.getContext().getWorld(), Minecraft.getMinecraft().thePlayer, target.getBlockPos(dungeonRoom), Integer.MAX_VALUE, 10000);
- }
- }
-
- public void forceRefresh(DungeonRoom dungeonRoom) {
- try {
- if (latestFuture != null) return;
- } catch (Exception ignored) {}
- latestFuture = dungeonRoom.createEntityPathTo(dungeonRoom.getContext().getWorld(), Minecraft.getMinecraft().thePlayer, target.getBlockPos(dungeonRoom), Integer.MAX_VALUE, 10000);
- }
- @Override
- public String toString() {
- return "Move\n- target: "+target.toString();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMoveNearestAir.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMoveNearestAir.java
deleted file mode 100755
index 14897147..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionMoveNearestAir.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.Keybinds;
-import kr.syeyoung.dungeonsguide.dungeon.actions.tree.ActionRoute;
-import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
-import lombok.Data;
-import net.minecraft.client.Minecraft;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.MathHelper;
-import net.minecraft.util.Vec3;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-@Data
-public class ActionMoveNearestAir extends AbstractAction {
- private Set preRequisite = new HashSet();
- private OffsetPoint target;
-
- public ActionMoveNearestAir(OffsetPoint target) {
- this.target = target;
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return target.getBlockPos(dungeonRoom).distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()) < 25;
- }
-
- @Override
- public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks, ActionRoute.ActionRouteProperties actionRouteProperties, boolean flag) {
- BlockPos pos = target.getBlockPos(dungeonRoom);
-
- float distance = MathHelper.sqrt_double(pos.distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()));
- float multiplier = distance / 120f; //mobs only render ~120 blocks away
- if (flag) multiplier *= 2.0f;
- float scale = 0.45f * multiplier;
- scale *= 25.0 / 6.0;
- if (actionRouteProperties.isBeacon()) {
- RenderUtils.renderBeaconBeam(pos.getX(), pos.getY(), pos.getZ(), actionRouteProperties.getBeaconBeamColor(), partialTicks);
- RenderUtils.highlightBlock(pos, actionRouteProperties.getBeaconColor(), partialTicks);
- }
- RenderUtils.drawTextAtWorld("Destination", pos.getX() + 0.5f, pos.getY() + 0.5f + scale, pos.getZ() + 0.5f, 0xFF00FF00, flag ? 2f : 1f, true, false, partialTicks);
- RenderUtils.drawTextAtWorld(String.format("%.2f",MathHelper.sqrt_double(pos.distanceSq(Minecraft.getMinecraft().thePlayer.getPosition())))+"m", pos.getX() + 0.5f, pos.getY() + 0.5f - scale, pos.getZ() + 0.5f, 0xFFFFFF00, flag ? 2f : 1f, true, false, partialTicks);
-
- if (!FeatureRegistry.SECRET_TOGGLE_KEY.isEnabled() || !FeatureRegistry.SECRET_TOGGLE_KEY.togglePathfindStatus) {
- if (poses != null){
- RenderUtils.drawLinesVec3(poses, actionRouteProperties.getLineColor(), actionRouteProperties.getLineWidth(), partialTicks, true);
- }
- }
- }
-
- private int tick = -1;
- private List poses;
- private Future> latestFuture;
- @Override
- public void onTick(DungeonRoom dungeonRoom, ActionRoute.ActionRouteProperties actionRouteProperties) {
- tick = (tick+1) % Math.max(1, actionRouteProperties.getLineRefreshRate());
- if (latestFuture != null && latestFuture.isDone()) {
- try {
- poses = latestFuture.get();
- latestFuture = null;
- } catch (InterruptedException | ExecutionException e) {
- e.printStackTrace();
- }
- }
-
- if (tick == 0 && actionRouteProperties.isPathfind() && latestFuture == null) {
- if (!FeatureRegistry.SECRET_FREEZE_LINES.isEnabled() || poses == null)
- latestFuture = dungeonRoom.createEntityPathTo(dungeonRoom.getContext().getWorld(), Minecraft.getMinecraft().thePlayer, target.getBlockPos(dungeonRoom), Integer.MAX_VALUE, 10000);
- }
- }
-
-
- public void forceRefresh(DungeonRoom dungeonRoom) {
- try {
- if (latestFuture != null) return;
- } catch (Exception ignored) {}
- latestFuture = dungeonRoom.createEntityPathTo(dungeonRoom.getContext().getWorld(), Minecraft.getMinecraft().thePlayer, target.getBlockPos(dungeonRoom), Integer.MAX_VALUE, 10000);
- }
- @Override
- public String toString() {
- return "MoveNearestAir\n- target: "+target.toString();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionRoot.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionRoot.java
deleted file mode 100755
index 39c7fa6c..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionRoot.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.dungeon.actions;
-
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import lombok.Data;
-
-import java.util.HashSet;
-import java.util.Set;
-
-@Data
-public class ActionRoot extends AbstractAction {
- private Set preRequisite = new HashSet();
-
- public ActionRoot() {
- }
-
- @Override
- public Set getPreRequisites(DungeonRoom dungeonRoom) {
- return preRequisite;
- }
-
- @Override
- public boolean isComplete(DungeonRoom dungeonRoom) {
- return true;
- }
-
- @Override
- public String toString() {
- return "Action Root";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionRoute.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionRoute.java
deleted file mode 100644
index 3580dd03..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionRoute.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * 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.dungeon.actions.tree;
-
-import kr.syeyoung.dungeonsguide.config.types.AColor;
-import kr.syeyoung.dungeonsguide.dungeon.actions.*;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.events.PlayerInteractEntityEvent;
-import lombok.Data;
-import lombok.Getter;
-import net.minecraft.client.Minecraft;
-import net.minecraftforge.event.entity.living.LivingDeathEvent;
-import net.minecraftforge.event.entity.player.PlayerInteractEvent;
-
-import java.util.List;
-
-public class ActionRoute {
- @Getter
- private final String mechanic;
- @Getter
- private final String state;
-
- @Getter
- private int current;
- @Getter
- private final List actions;
-
- private final DungeonRoom dungeonRoom;
-
- @Getter
- private final ActionRouteProperties actionRouteProperties;
-
- public ActionRoute(DungeonRoom dungeonRoom, String mechanic, String state, ActionRouteProperties actionRouteProperties) {
- this.mechanic = mechanic;
- this.state = state;
- this.actionRouteProperties = actionRouteProperties;
-
- ActionChangeState actionChangeState = new ActionChangeState(mechanic, state);
- ActionTree tree= ActionTree.buildActionTree(actionChangeState, dungeonRoom);
- actions = ActionTreeUtil.linearifyActionTree(tree);
- actions.add(new ActionComplete());
- current = 0;
- this.dungeonRoom = dungeonRoom;
- }
-
- public Action next() {
- current ++;
- if (current >= actions.size()) current = actions.size() - 1;
- return actions.get(current);
- }
-
- public Action prev() {
- current --;
- if (current < 0) current = 0;
- return actions.get(current);
- }
-
- public Action getCurrentAction() {
- return actions.get(current);
- }
-
-
-
- public void onPlayerInteract(PlayerInteractEvent event) {
- getCurrentAction().onPlayerInteract(dungeonRoom, event, actionRouteProperties );
- }
- public void onLivingDeath(LivingDeathEvent event) {
- getCurrentAction().onLivingDeath(dungeonRoom, event, actionRouteProperties );
- }
- public void onRenderWorld(float partialTicks, boolean flag) {
- if (current -1 >= 0 && (
- (actions.get(current-1) instanceof ActionMove && ((ActionMove) actions.get(current-1)).getTarget().getBlockPos(dungeonRoom).distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()) >= 25)
- || (actions.get(current-1) instanceof ActionMoveNearestAir && ((ActionMoveNearestAir) actions.get(current-1)).getTarget().getBlockPos(dungeonRoom).distanceSq(Minecraft.getMinecraft().thePlayer.getPosition()) >= 25))) actions.get(current-1).onRenderWorld(dungeonRoom, partialTicks, actionRouteProperties, flag );
- getCurrentAction().onRenderWorld(dungeonRoom, partialTicks, actionRouteProperties, flag);
- }
-
- public void onRenderScreen(float partialTicks) {
- getCurrentAction().onRenderScreen(dungeonRoom, partialTicks, actionRouteProperties);
- }
-
- public void onTick() {
- Action current = getCurrentAction();
-
- current.onTick(dungeonRoom, actionRouteProperties);
- if (this.current -1 >= 0 && (actions.get(this.current-1) instanceof ActionMove || actions.get(this.current-1) instanceof ActionMoveNearestAir)) actions.get(this.current-1).onTick(dungeonRoom, actionRouteProperties );
-
- if (dungeonRoom.getMechanics().get(mechanic).getCurrentState(dungeonRoom).equals(state)) {
- this.current = actions.size() - 1;
- }
-
- if (current.isComplete(dungeonRoom))
- next();
- }
-
- public void onLivingInteract(PlayerInteractEntityEvent event) { getCurrentAction().onLivingInteract(dungeonRoom, event, actionRouteProperties ); }
-
- @Data
- public static class ActionRouteProperties {
- private boolean pathfind;
- private int lineRefreshRate;
- private AColor lineColor;
- private float lineWidth;
-
- private boolean beacon;
- private AColor beaconColor;
- private AColor beaconBeamColor;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTree.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTree.java
deleted file mode 100755
index 3139ce73..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTree.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.dungeon.actions.tree;
-
-import kr.syeyoung.dungeonsguide.dungeon.actions.Action;
-import kr.syeyoung.dungeonsguide.dungeon.actions.ActionRoot;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-@Data
-public class ActionTree implements Cloneable {
- @EqualsAndHashCode.Exclude
- private Set parent;
- private Action current;
- private Set children;
-
- @Override
- public int hashCode() { return current == null ? 0 : current.hashCode(); }
-
-
- public static ActionTree buildActionTree(Set actions, DungeonRoom dungeonRoom) {
- ActionRoot root = new ActionRoot();
- root.setPreRequisite(actions);
- ActionTree tree = new ActionTree();
- tree.setParent(new HashSet());
- tree.setCurrent(root);
- HashSet set = new HashSet();
- for (Action action : actions) {
- set.add(buildActionTree(tree, action, dungeonRoom, new HashMap()));
- }
- tree.setChildren(set);
- return tree;
- }
- public static ActionTree buildActionTree(Action actions, DungeonRoom dungeonRoom) {
- return buildActionTree(null, actions, dungeonRoom, new HashMap());
- }
-
-
-
- private static ActionTree buildActionTree(ActionTree parent, Action action, DungeonRoom dungeonRoom, Map alreadyBuilt) {
- if (action == null) return null;
- if (alreadyBuilt.containsKey(action)) {
- ActionTree tree = alreadyBuilt.get(action);
- tree.getParent().add(parent);
- return tree;
- }
-
- ActionTree tree = new ActionTree();
- alreadyBuilt.put(action, tree);
- tree.setParent(new HashSet());
- if (parent != null)
- tree.getParent().add(parent);
- tree.setCurrent(action);
- HashSet set = new HashSet();
- for (Action action2 : action.getPreRequisites(dungeonRoom)) {
- set.add(buildActionTree(tree, action2, dungeonRoom, alreadyBuilt));
- }
- tree.setChildren(set);
- return tree;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTreeUtil.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTreeUtil.java
deleted file mode 100644
index b0ffd2dc..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/tree/ActionTreeUtil.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.dungeon.actions.tree;
-
-import kr.syeyoung.dungeonsguide.dungeon.actions.Action;
-
-import java.util.*;
-
-public class ActionTreeUtil {
- public static List linearifyActionTree(ActionTree input) {
- ActionTree tree = copyActionTree(input);
-
- List actions = new ArrayList();
-
- int plsHalt = 0;
- while (tree.getChildren().size() != 0) {
- plsHalt ++;
- if (plsHalt > 1000000) throw new IllegalStateException("Linearifying process ran for 1 million cycle");
- Set visited = new HashSet();
- ActionTree curr = tree;
-
- int plsHalt2 = 0;
- while (curr.getChildren().size() != 0) {
- plsHalt2 ++;
- if (plsHalt2 > 1000000) throw new IllegalStateException("Finding the leaf of tree ran for 1 million cycles");
- if (visited.contains(curr)) throw new IllegalStateException("Circular Reference Detected");
- visited.add(curr);
- curr = curr.getChildren().iterator().next();
- }
-
- plsHalt2 =0;
- while(curr.getChildren().size() == 0) {
- plsHalt2 ++;
- if (plsHalt2 > 1000000) throw new IllegalStateException("Building of array ran for 1 million cycles");
-
- actions.add(curr.getCurrent());
- if (curr.getParent().size() == 0) break;
- for (ActionTree parentTree:curr.getParent())
- parentTree.getChildren().remove(curr);
- curr = curr.getParent().iterator().next();
- }
- }
- return actions;
- }
-
- public static ActionTree copyActionTree(ActionTree tree) {
- Map built = new HashMap();
- if (tree.getParent().size() != 0) throw new IllegalArgumentException("that is not head of tree");
- return copyActionTree(tree, built);
- }
- private static ActionTree copyActionTree(ActionTree tree, Map preBuilts) {
- if (preBuilts.containsKey(tree)) return preBuilts.get(tree);
-
- ActionTree clone = new ActionTree();
- preBuilts.put(tree, clone);
-
- clone.setCurrent(tree.getCurrent());
- clone.setParent(new HashSet());
- clone.setChildren(new HashSet());
- for (ActionTree tree3 : tree.getChildren()) {
- ActionTree clone3 = copyActionTree(tree3, preBuilts);
- clone3.getParent().add(clone);
- clone.getChildren().add(clone3);
- }
- return clone;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/DungeonRoomInfo.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/DungeonRoomInfo.java
index 0df1f15a..8c430e4c 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/DungeonRoomInfo.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/DungeonRoomInfo.java
@@ -18,7 +18,7 @@
package kr.syeyoung.dungeonsguide.dungeon.data;
-import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonMechanic;
+import kr.syeyoung.dungeonsguide.dungeon.mechanics.dunegonmechanic.DungeonMechanic;
import lombok.Getter;
import lombok.Setter;
@@ -53,8 +53,8 @@ public class DungeonRoomInfo implements Serializable {
private String processorId = "default";
- private Map properties = new HashMap();
+ private Map properties = new HashMap<>();
- private Map mechanics = new HashMap();
+ private Map mechanics = new HashMap<>();
private int totalSecrets = -1;
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPoint.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPoint.java
index 36317878..f5baa2ca 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPoint.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPoint.java
@@ -18,8 +18,8 @@
package kr.syeyoung.dungeonsguide.dungeon.data;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.utils.VectorUtils;
+import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
+import kr.syeyoung.dungeonsguide.mod.utils.VectorUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import net.minecraft.block.Block;
@@ -63,25 +63,23 @@ public class OffsetPoint implements Cloneable, Serializable {
}
public BlockPos toRotatedRelBlockPos(DungeonRoom dungeonRoom) {
- int rot = dungeonRoom.getRoomMatcher().getRotation();
- Vector2d rot2 = new Vector2d(x,z);
+ Vector2d rot = new Vector2d(x,z);
for (int i = 0; i < dungeonRoom.getRoomMatcher().getRotation(); i++) {
- rot2 = VectorUtils.rotateCounterClockwise(rot2);
+ rot = VectorUtils.rotateCounterClockwise(rot);
if (i % 2 == 0) {
- rot2.y += dungeonRoom.getMax().getZ() - dungeonRoom.getMin().getZ() + 1; // + Z
+ rot.y += dungeonRoom.getMax().getZ() - dungeonRoom.getMin().getZ() + 1; // + Z
} else {
- rot2.y += dungeonRoom.getMax().getX() - dungeonRoom.getMin().getX() + 1; // + X
+ rot.y += dungeonRoom.getMax().getX() - dungeonRoom.getMin().getX() + 1; // + X
}
}
- return new BlockPos(rot2.x, y, rot2.y);
+ return new BlockPos(rot.x, y, rot.y);
}
public Block getBlock(DungeonRoom dungeonRoom) {
BlockPos relBp = toRotatedRelBlockPos(dungeonRoom);
- Block b = dungeonRoom.getRelativeBlockAt(relBp.getX(), relBp.getY(), relBp.getZ());
- return b;
+ return dungeonRoom.getRelativeBlockAt(relBp.getX(), relBp.getY(), relBp.getZ());
}
public BlockPos getBlockPos(DungeonRoom dungeonRoom) {
BlockPos relBp = toRotatedRelBlockPos(dungeonRoom);
@@ -91,8 +89,7 @@ public class OffsetPoint implements Cloneable, Serializable {
public int getData(DungeonRoom dungeonRoom) {
BlockPos relBp = toRotatedRelBlockPos(dungeonRoom);
- int b = dungeonRoom.getRelativeBlockDataAt(relBp.getX(), relBp.getY(), relBp.getZ());
- return b;
+ return dungeonRoom.getRelativeBlockDataAt(relBp.getX(), relBp.getY(), relBp.getZ());
}
@Override
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPointSet.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPointSet.java
index 6e8e5ee7..0fc21dc2 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPointSet.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/data/OffsetPointSet.java
@@ -26,7 +26,7 @@ import java.util.List;
@Data
public class OffsetPointSet implements Cloneable, Serializable {
- private List offsetPointList = new ArrayList();
+ private List offsetPointList = new ArrayList<>();
@Override
public Object clone() throws CloneNotSupportedException {
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombDataProvider.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombDataProvider.java
deleted file mode 100755
index ef7f076e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombDataProvider.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * 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.dungeon.doorfinder;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Sets;
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.roomprocessor.bossfight.*;
-import net.minecraft.entity.item.EntityArmorStand;
-import net.minecraft.init.Blocks;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.world.World;
-
-import javax.vecmath.Vector2d;
-import java.util.Collection;
-import java.util.Set;
-
-public class CatacombDataProvider implements DungeonSpecificDataProvider {
-
- private static final Set directions = Sets.newHashSet(new Vector2d(0,1), new Vector2d(0, -1), new Vector2d(1, 0), new Vector2d(-1 , 0));
-
- @Override
- public BlockPos findDoor(World w, String dungeonName) {
- Collection armorStand = w.getEntities(EntityArmorStand.class, new Predicate() {
- @Override
- public boolean apply(EntityArmorStand input) {
- return input.getName().equals("ยงbMort");
- }
- });
-
- if (armorStand.size() != 0) {
- EntityArmorStand mort = armorStand.iterator().next();
- BlockPos pos = mort.getPosition();
- pos = pos.add(0, 3, 0);
- for (int i = 0; i < 5; i++) {
- for (Vector2d vector2d:directions) {
- BlockPos test = pos.add(vector2d.x * i, 0, vector2d.y * i);
- if (w.getChunkFromBlockCoords(test).getBlock(test) == Blocks.iron_bars) {
- return pos.add(vector2d.x * (i + 2), -2, vector2d.y * (i+2));
- }
- }
- }
- }
- return null;
- }
-
- @Override
- public Vector2d findDoorOffset(World w, String dungeonName) {
- Collection armorStand = w.getEntities(EntityArmorStand.class, new Predicate() {
- @Override
- public boolean apply(EntityArmorStand input) {
- return input.getName().equals("ยงbMort");
- }
- });
-
- if (armorStand.size() != 0) {
- EntityArmorStand mort = armorStand.iterator().next();
- BlockPos pos = mort.getPosition();
- pos = pos.add(0, 3, 0);
- for (int i = 0; i < 5; i++) {
- for (Vector2d vector2d:directions) {
- BlockPos test = pos.add(vector2d.x * i, 0, vector2d.y * i);
- if (w.getChunkFromBlockCoords(test).getBlock(test) == Blocks.iron_bars) {
- return vector2d;
- }
- }
- }
- }
- return null;
- }
- /*
- *
- * */
-
- @Override
- public BossfightProcessor createBossfightProcessor(World w, String dungeonName) {
- String floor = dungeonName.substring(14).trim();
- DungeonsGuide.sendDebugChat(new ChatComponentText("Floor: "+floor+ " Building bossfight processor"));
- if (floor.equals("F1")) {
- return new BossfightProcessorBonzo();
- } else if (floor.equals("F2")) {
- return new BossfightProcessorScarf();
- } else if (floor.equals("F3")) {
- return new BossfightProcessorProf();
- } else if (floor.equals("F4")) {
- return new BossfightProcessorThorn();
- } else if (floor.equals("F5")) {
- return new BossfightProcessorLivid(false);
- } else if (floor.equals("F6")) {
- return new BossfightProcessorSadan();
- } else if (floor.equals("F7")) {
- return new BossfightProcessorNecron();
- }
- return null;
- }
-
- @Override
- public boolean isTrapSpawn(String dungeonName) {
- String floor = dungeonName.substring(14).trim();
- if (floor.equals("F3")) {
- return true;
- } else if (floor.equals("F4")) {
- return true;
- } else if (floor.equals("F5")) {
- return true;
- } else if (floor.equals("F6")) {
- return true;
- } else return floor.equals("F7");
- }
-
- @Override
- public double secretPercentage(String dungeonName) {
- String floor = dungeonName.substring(14).trim();
- if (floor.equals("F1")) {
- return 0.3;
- } else if (floor.equals("F2")) {
- return 0.4;
- } else if (floor.equals("F3")) {
- return 0.5;
- } else if (floor.equals("F4")) {
- return 0.6;
- } else if (floor.equals("F5")) {
- return 0.7;
- } else if (floor.equals("F6")) {
- return 0.85;
- } else if (floor.equals("F7")) {
- return 1.0;
- } else if (floor.equals("E")) {
- return 0.3;
- }
- return 1.0;
- }
-
- @Override
- public int speedSecond(String dungeonName) {
- String floor = dungeonName.substring(14).trim();
- if (floor.equals("F1")) {
- return 600;
- } else if (floor.equals("F2")) {
- return 600;
- } else if (floor.equals("F3")) {
- return 600;
- } else if (floor.equals("F4")) {
- return 600;
- } else if (floor.equals("F5")) {
- return 720;
- } else if (floor.equals("F6")) {
- return 600;
- } else if (floor.equals("F7")) {
- return 720;
- }
- return 600;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombMasterDataProvider.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombMasterDataProvider.java
deleted file mode 100755
index 921efa63..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/CatacombMasterDataProvider.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * 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.dungeon.doorfinder;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Sets;
-import kr.syeyoung.dungeonsguide.DungeonsGuide;
-import kr.syeyoung.dungeonsguide.roomprocessor.bossfight.*;
-import net.minecraft.entity.item.EntityArmorStand;
-import net.minecraft.init.Blocks;
-import net.minecraft.util.BlockPos;
-import net.minecraft.util.ChatComponentText;
-import net.minecraft.world.World;
-
-import javax.vecmath.Vector2d;
-import java.util.Collection;
-import java.util.Set;
-
-public class CatacombMasterDataProvider implements DungeonSpecificDataProvider {
-
- private static final Set directions = Sets.newHashSet(new Vector2d(0,1), new Vector2d(0, -1), new Vector2d(1, 0), new Vector2d(-1 , 0));
-
- @Override
- public BlockPos findDoor(World w, String dungeonName) {
- Collection armorStand = w.getEntities(EntityArmorStand.class, new Predicate() {
- @Override
- public boolean apply(EntityArmorStand input) {
- return input.getName().equals("ยงbMort");
- }
- });
-
- if (armorStand.size() != 0) {
- EntityArmorStand mort = armorStand.iterator().next();
- BlockPos pos = mort.getPosition();
- pos = pos.add(0, 3, 0);
- for (int i = 0; i < 5; i++) {
- for (Vector2d vector2d:directions) {
- BlockPos test = pos.add(vector2d.x * i, 0, vector2d.y * i);
- if (w.getChunkFromBlockCoords(test).getBlock(test) == Blocks.iron_bars) {
- return pos.add(vector2d.x * (i + 2), -2, vector2d.y * (i+2));
- }
- }
- }
- }
- return null;
- }
-
- @Override
- public Vector2d findDoorOffset(World w, String dungeonName) {
- Collection armorStand = w.getEntities(EntityArmorStand.class, new Predicate() {
- @Override
- public boolean apply(EntityArmorStand input) {
- return input.getName().equals("ยงbMort");
- }
- });
-
- if (armorStand.size() != 0) {
- EntityArmorStand mort = armorStand.iterator().next();
- BlockPos pos = mort.getPosition();
- pos = pos.add(0, 3, 0);
- for (int i = 0; i < 5; i++) {
- for (Vector2d vector2d:directions) {
- BlockPos test = pos.add(vector2d.x * i, 0, vector2d.y * i);
- if (w.getChunkFromBlockCoords(test).getBlock(test) == Blocks.iron_bars) {
- return vector2d;
- }
- }
- }
- }
- return null;
- }
- /*
- *
- * */
-
- @Override
- public BossfightProcessor createBossfightProcessor(World w, String dungeonName) {
- String floor = dungeonName.substring(14).trim();
- DungeonsGuide.sendDebugChat(new ChatComponentText("Floor: Master mode "+floor+ " Building bossfight processor"));
- if (floor.equals("M5")) {
- return new BossfightProcessorLivid(true);
- }
- return null;
- }
-
- @Override
- public boolean isTrapSpawn(String dungeonName) {
- String floor = dungeonName.substring(14).trim();
- if (floor.equals("M3")) {
- return true;
- } else if (floor.equals("M4")) {
- return true;
- } else if (floor.equals("M5")) {
- return true;
- } else if (floor.equals("M6")) {
- return true;
- } else return floor.equals("M7");
- }
-
- @Override
- public double secretPercentage(String dungeonName) {
- return 1.0;
- }
-
- @Override
- public int speedSecond(String dungeonName) {
- return 480;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonDoor.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonDoor.java
deleted file mode 100755
index 9a52dad8..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonDoor.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.dungeon.doorfinder;
-
-import com.google.common.collect.Sets;
-import lombok.Getter;
-import net.minecraft.block.Block;
-import net.minecraft.init.Blocks;
-import net.minecraft.util.BlockPos;
-import net.minecraft.world.World;
-
-import java.util.Set;
-
-@Getter
-public class DungeonDoor {
- private final World w;
- private final BlockPos position;
- private EDungeonDoorType type;
- private boolean isZDir;
-
- private static final Set legalBlocks = Sets.newHashSet(Blocks.coal_block, Blocks.barrier, Blocks.monster_egg, Blocks.air, Blocks.stained_hardened_clay);
-
- public DungeonDoor(World world, BlockPos pos, EDungeonDoorType type) {
- this.w = world;
- this.position = pos;
- Block itshouldbeall = world.getChunkFromBlockCoords(pos).getBlock(pos);
-
- if (type == EDungeonDoorType.WITHER && itshouldbeall == Blocks.air) type = EDungeonDoorType.WITHER_FAIRY;
- this.type = type;
- boolean exist = type.isExist();
-
- for (int x = -1; x<=1; x++)
- for (int y = -1; y<=1; y++)
- for (int z = -1; z<=1; z++) {
- BlockPos pos2 = pos.add(x,y,z);
- Block block = world.getChunkFromBlockCoords(pos2).getBlock(pos2);
- if (itshouldbeall != block) exist = false;
- }
- if (exist) {
- BlockPos ZCheck = pos.add(0,0,2);
- isZDir = world.getChunkFromBlockCoords(ZCheck).getBlock(ZCheck) == Blocks.air;
-
- if (isZDir) {
- for (int x = -1; x<=1; x++)
- for (int y = -1; y<=1; y++)
- for (int z = -2; z<=2; z+=4) {
- BlockPos pos2 = pos.add(x,y,z);
- Block block = world.getChunkFromBlockCoords(pos2).getBlock(pos2);
- if (block != Blocks.air) exist = false;
- }
- } else {
- for (int x = -2; x<=2; x+=4)
- for (int y = -1; y<=1; y++)
- for (int z = -1; z<=1; z++) {
- BlockPos pos2 = pos.add(x,y,z);
- Block block = world.getChunkFromBlockCoords(pos2).getBlock(pos2);
- if (block != Blocks.air) exist = false;
- }
- }
- }
- if (!exist) {
- isZDir = false;
- }
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProvider.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProvider.java
deleted file mode 100755
index dfdd0e3e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProvider.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.dungeon.doorfinder;
-
-import kr.syeyoung.dungeonsguide.roomprocessor.RoomProcessor;
-import kr.syeyoung.dungeonsguide.roomprocessor.bossfight.BossfightProcessor;
-import net.minecraft.util.BlockPos;
-import net.minecraft.world.World;
-
-import javax.vecmath.Vector2d;
-
-public interface DungeonSpecificDataProvider {
- BlockPos findDoor(World w, String dungeonName);
- Vector2d findDoorOffset(World w, String dungeonName);
-
- BossfightProcessor createBossfightProcessor(World w, String dungeonName);
-
- boolean isTrapSpawn(String dungeonName);
-
- double secretPercentage(String dungeonName);
-
- int speedSecond(String dungeonName);
-}
\ No newline at end of file
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProviderRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProviderRegistry.java
deleted file mode 100755
index 3753e6ca..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/DungeonSpecificDataProviderRegistry.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.dungeon.doorfinder;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-public class DungeonSpecificDataProviderRegistry {
- public static final Map doorFinders = new HashMap();
-
- static {
- doorFinders.put(Pattern.compile("The Catacombs (?:F[0-9]|E)"), new CatacombDataProvider());
- doorFinders.put(Pattern.compile("The Catacombs (?:M[0-9])"), new CatacombMasterDataProvider());
- }
-
- public static DungeonSpecificDataProvider getDoorFinder(String dungeonName) {
- for (Map.Entry doorFinderEntry :doorFinders.entrySet()){
- if (doorFinderEntry.getKey().matcher(dungeonName).matches()) return doorFinderEntry.getValue();
- }
- return null;
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/EDungeonDoorType.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/EDungeonDoorType.java
deleted file mode 100644
index 3a07629e..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/doorfinder/EDungeonDoorType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.dungeon.doorfinder;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@AllArgsConstructor
-@Getter
-public enum EDungeonDoorType {
- NONE(false, false, false,"?"), ENTRANCE(true, false, false, "entrance"), WITHER(true, true,true,"withergate"),WITHER_FAIRY(true, false,true,"wither-fairy-gate"), BLOOD(true, true,true, "bloodgate"), UNOPEN(true, false, false,"gate");
-
- private boolean exist;
- private boolean keyRequired;
- private boolean headToBlood;
- private String name;
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonCryptBrokenEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonCryptBrokenEvent.java
deleted file mode 100644
index 6c4b02b8..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonCryptBrokenEvent.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-import java.awt.*;
-
-@Data
-@AllArgsConstructor
-public class DungeonCryptBrokenEvent implements DungeonEventData {
- private int prevCrypts;
- private int newCrypts;
-
- @Override
- public String getEventName() {
- return "CRYPTS_CHANGE";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonDeathEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonDeathEvent.java
deleted file mode 100644
index 7e1dea89..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonDeathEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-import java.awt.*;
-
-@Data
-@AllArgsConstructor
-public class DungeonDeathEvent implements DungeonEventData {
- private String playerName;
- private String message;
- private int cnt;
-
- @Override
- public String getEventName() {
- return "PLAYER_DEATH";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEvent.java
deleted file mode 100644
index 3ba6a2e8..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEvent.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class DungeonEvent implements Serializable {
- private long UTCTime = System.currentTimeMillis();
- private long realTimeElapsed;
- private long skyblockTimeElapsed;
-
- private String eventName;
- private DungeonEventData data;
-
- public DungeonEvent(DungeonEventData eventData){
- this.data = eventData;
- this.realTimeElapsed = FeatureRegistry.DUNGEON_REALTIME.getTimeElapsed();
- this.skyblockTimeElapsed = FeatureRegistry.DUNGEON_SBTIME.getTimeElapsed();
- this.eventName = eventData.getEventName();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventData.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventData.java
deleted file mode 100644
index 8883380a..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventData.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import java.io.Serializable;
-
-public interface DungeonEventData extends Serializable {
- String getEventName();
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventHolder.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventHolder.java
deleted file mode 100644
index 4216e11b..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonEventHolder.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Set;
-
-@Data
-public class DungeonEventHolder implements Serializable {
- private long date;
- private Set players;
- private List eventDataList;
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonMapUpdateEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonMapUpdateEvent.java
deleted file mode 100644
index 27969582..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonMapUpdateEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-@Data
-@AllArgsConstructor
-public class DungeonMapUpdateEvent implements DungeonEventData {
- private byte[] map;
-
- @Override
- public String getEventName() {
- return "MAP_UPDATE";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonNodataEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonNodataEvent.java
deleted file mode 100644
index 4a355498..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonNodataEvent.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-@Data
-@AllArgsConstructor
-public class DungeonNodataEvent implements DungeonEventData {
- private String eventName;
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonPuzzleFailureEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonPuzzleFailureEvent.java
deleted file mode 100644
index 44fa40c1..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonPuzzleFailureEvent.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-@Data
-@AllArgsConstructor
-public class DungeonPuzzleFailureEvent implements DungeonEventData {
- private String playerName;
- private String message;
- @Override
- public String getEventName() {
- return "PUZZLE_FAILURE";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonRoomDiscoverEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonRoomDiscoverEvent.java
deleted file mode 100644
index 9e8b74ce..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonRoomDiscoverEvent.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import net.minecraft.util.BlockPos;
-
-import java.awt.*;
-import java.util.UUID;
-
-@Data
-@AllArgsConstructor
-public class DungeonRoomDiscoverEvent implements DungeonEventData {
- private Point unitPt;
- private int rotation;
- private SerializableBlockPos min;
- private SerializableBlockPos max;
- private int shape;
- private int color;
- private UUID roomUID;
- private String roomName;
- private String roomProc;
-
- @Override
- public String getEventName() {
- return "ROOM_DISCOVER";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonSecretCountChangeEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonSecretCountChangeEvent.java
deleted file mode 100644
index fd96e261..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonSecretCountChangeEvent.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-import java.awt.*;
-
-@Data
-@AllArgsConstructor
-public class DungeonSecretCountChangeEvent implements DungeonEventData {
- private int prevCount;
- private int newCount;
- private int totalSecret;
- private boolean sureTotalSecret;
-
- @Override
- public String getEventName() {
- return "SECRET_CNT_CHANGE";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonStateChangeEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonStateChangeEvent.java
deleted file mode 100644
index 34676e02..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/DungeonStateChangeEvent.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import net.minecraft.util.BlockPos;
-
-import java.awt.*;
-import java.util.UUID;
-
-@Data
-@AllArgsConstructor
-public class DungeonStateChangeEvent implements DungeonEventData {
- private Point unitPt;
- private String roomName;
- private DungeonRoom.RoomState from;
- private DungeonRoom.RoomState to;
-
- @Override
- public String getEventName() {
- return "ROOM_STATE_CHANGE";
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/SerializableBlockPos.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/SerializableBlockPos.java
deleted file mode 100644
index ab1031e7..00000000
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/events/SerializableBlockPos.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.dungeon.events;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import net.minecraft.util.BlockPos;
-
-import java.io.Serializable;
-
-@Data @AllArgsConstructor
-public class SerializableBlockPos implements Serializable {
- private int x, y, z;
-
- public SerializableBlockPos(BlockPos pos) {
- this.x = pos.getX();
- this.y = pos.getY();
- this.z = pos.getZ();
- }
-}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/DungeonBreakableWall.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/DungeonBreakableWall.java
index dc201fdb..64d4dc0b 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/DungeonBreakableWall.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/mechanics/DungeonBreakableWall.java
@@ -19,11 +19,13 @@
package kr.syeyoung.dungeonsguide.dungeon.mechanics;
import com.google.common.collect.Sets;
-import kr.syeyoung.dungeonsguide.dungeon.actions.*;
+import kr.syeyoung.dungeonsguide.mod.dungeon.actions.*;
import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPointSet;
-import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
-import kr.syeyoung.dungeonsguide.utils.RenderUtils;
+import kr.syeyoung.dungeonsguide.dungeon.mechanics.dunegonmechanic.RouteBlocker;
+import kr.syeyoung.dungeonsguide.dungeon.mechanics.dunegonmechanic.DungeonMechanic;
+import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
+import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import lombok.Data;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
@@ -41,10 +43,10 @@ public class DungeonBreakableWall implements DungeonMechanic, RouteBlocker {
@Override
- public Set getAction(String state, DungeonRoom dungeonRoom) {
+ public Set getAction(String state, DungeonRoom dungeonRoom) {
if (state.equalsIgnoreCase("navigate")) {
- Set